type ServerMessage = {
type: "data" | "subscribed" | "unsubscribed" | "pong" | "error";
channel?: string;
data?: unknown;
error?: {
code: number;
message: string;
};
id?: number;
timestamp: number;
};
const socket = new WebSocket("wss://ws.poolthewool.com/ws");
socket.addEventListener("open", () => {
socket.send(
JSON.stringify({
type: "subscribe",
channel: "ticker:BTCUSDT",
id: 1,
})
);
});
socket.addEventListener("message", (event) => {
// The server can batch newline-separated JSON messages in one WebSocket frame.
const messages = String(event.data)
.split("\n")
.filter(Boolean)
.map((line) => JSON.parse(line) as ServerMessage);
for (const message of messages) {
if (message.type === "data" && message.channel === "ticker:BTCUSDT") {
console.log("Ticker update", message.data);
}
if (message.type === "error") {
console.error(message.error?.code, message.error?.message);
}
}
});