import { createStreamClient } from "@parlayx/sdk/stream";
const stream = createStreamClient({
keyId: process.env.PARLAYX_KEY_ID!,
privateKeyHex: process.env.PARLAYX_PRIVATE_KEY_HEX!,
});
/* A local book we keep in sync from snapshot + delta frames. */
const book = { bids: new Map<number, number>(), asks: new Map<number, number>() };
/* The full book state. Arrives once per subscription, before any deltas. */
stream.on("snapshot", (frame) => {
book.bids = new Map(frame.bids.map((l) => [l.price, l.size]));
book.asks = new Map(frame.asks.map((l) => [l.price, l.size]));
console.log(`snapshot seq=${frame.seq}: ${book.bids.size} bids / ${book.asks.size} asks`);
});
/* Incremental changes. size 0 deletes the level; anything else sets it. */
stream.on("delta", (frame) => {
for (const change of frame.changes) {
const side = change.side === "bid" ? book.bids : book.asks;
if (change.size === 0) side.delete(change.price);
else side.set(change.price, change.size);
}
});
/* Subscribe. The `book` channel is the default, so `channels` is optional. */
stream.subscribe([{ venue: "polymarket", tokenId: "71045620195867637" }]);