Skip to content

Commit 83c15bc

Browse files
authored
feat(lazer): add js example (#35)
* feat(lazer): add js example * chore: set up CI
1 parent 100ffcf commit 83c15bc

File tree

6 files changed

+326
-0
lines changed

6 files changed

+326
-0
lines changed

.github/workflows/ci-lazer-js.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
name: "Lazer JS Test Suite"
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
7+
8+
jobs:
9+
lazer-js-test-suite:
10+
name: Lazer JS Test Suite
11+
runs-on: ubuntu-22.04
12+
defaults:
13+
run:
14+
working-directory: lazer/js
15+
steps:
16+
- uses: actions/checkout@v4
17+
- uses: actions/setup-node@v4
18+
with:
19+
node-version: 18
20+
- run: npm install --global pnpm@9.2.0
21+
- run: pnpm install --frozen-lockfile
22+
- run: pnpm run test

lazer/js/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
tsconfig.tsbuildinfo
2+
dist

lazer/js/package.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"name": "pyth-lazer-js-example",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"type": "module",
7+
"scripts": {
8+
"start": "node --loader ts-node/esm src/index.js",
9+
"test": "pnpm run test:format && pnpm run build:cjs && pnpm run build:esm",
10+
"build:cjs": "tsc --project tsconfig.json --verbatimModuleSyntax false --module commonjs --outDir ./dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
11+
"build:esm": "tsc --project tsconfig.json --outDir ./dist/esm && echo '{\"type\":\"module\"}' > dist/esm/package.json",
12+
"fix:format": "prettier --write **/*.*",
13+
"test:format": "prettier --check **/*.*"
14+
},
15+
"author": "",
16+
"license": "Apache-2.0",
17+
"dependencies": {
18+
"@pythnetwork/pyth-lazer-sdk": "^0.1.1"
19+
},
20+
"devDependencies": {
21+
"@cprussin/tsconfig": "^3.0.1",
22+
"@types/node": "^22.10.0",
23+
"prettier": "^3.4.1",
24+
"ts-node": "^10.9.2",
25+
"typescript": "^5.7.2"
26+
}
27+
}

lazer/js/pnpm-lock.yaml

Lines changed: 224 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lazer/js/src/index.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { PythLazerClient } from "@pythnetwork/pyth-lazer-sdk";
2+
3+
/* eslint-disable no-console */
4+
const client = new PythLazerClient(
5+
"wss://pyth-lazer-staging.dourolabs.app/v1/stream",
6+
"my_token",
7+
);
8+
client.addMessageListener((message) => {
9+
console.log("got message:", message);
10+
switch (message.type) {
11+
case "json": {
12+
if (message.value.type == "streamUpdated") {
13+
console.log(
14+
"stream updated for subscription",
15+
message.value.subscriptionId,
16+
":",
17+
message.value.parsed?.priceFeeds,
18+
);
19+
}
20+
break;
21+
}
22+
case "binary": {
23+
if ("solana" in message.value) {
24+
console.log("solana message:", message.value.solana?.toString("hex"));
25+
}
26+
if ("evm" in message.value) {
27+
console.log("evm message:", message.value.evm?.toString("hex"));
28+
}
29+
break;
30+
}
31+
}
32+
});
33+
client.ws.addEventListener("open", () => {
34+
client.send({
35+
type: "subscribe",
36+
subscriptionId: 1,
37+
priceFeedIds: [1, 2],
38+
properties: ["price"],
39+
chains: ["solana"],
40+
deliveryFormat: "json",
41+
channel: "fixed_rate@200ms",
42+
jsonBinaryEncoding: "hex",
43+
});
44+
});

lazer/js/tsconfig.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"extends": "@cprussin/tsconfig/base.json",
3+
"exclude": [
4+
"node_modules",
5+
"dist"
6+
]
7+
}

0 commit comments

Comments
 (0)