leafx
TypeScript icon, indicating that this package has built-in type declarations

0.1.3 • Public • Published

leafx NPM

WebSocket Client & Utilities

Installation

npm add leafx
# or
yarn add leafx

Usage

Base client

import { create } from "leafx";

type Events = {
  "bts:subscription_succeeded": {
    channel: string;
  };

  trade: {
    data: {
      price: number;
    };
  };

  open: any;
  message: {
    event: string;
  };
};

const leaf = create<Events>("wss://ws.bitstamp.net", {
  debug: true,
  matchTypeOn: "event",
  onOpen() {
    console.log("Opened connection");

    leaf.handleNotSent();

    setInterval(() => {
      leaf.send({ event: "bts:heartbeat" });
    }, 25_000);
  },
});

leaf.send({
  event: "bts:subscribe",
  data: {
    channel: "live_trades_btcusd",
  },
});

leaf.on("bts:subscription_succeeded", (data) => {
  console.log("Subscribed on", data.channel);
});

leaf.on("trade", (event) => {
  console.log("New trade @", event.data.price);
});

Server

import { lobby } from "leafx/server";
import { randomUUID } from "crypto";
import { Server } from "ws";
import type { WebSocket } from "ws";

interface ExtendedWebSocket extends WebSocket {
  id: string;
}

let message = 0;

const server = new Server({
  clientTracking: false,
  port: 3000,
});

server.on("connection", (ws: ExtendedWebSocket, req) => {
  ws.id = randomUUID();

  ws.on("message", (message) => {
    const data = message.toString();

    if (data === "subscribe") {
      const status = lobby.subscribe("testing", { id: ws.id, ws });
      ws.send(status ? "subscribed/testing" : "not subscribed");
    }

    if (data === "unsubscribe") {
      lobby.unsubscribe("testing", ws.id);
      ws.send("unsubscribed/testing");
    }
  });

  ws.on("close", () => {
    lobby.unsubscribe("testing", ws.id);
  });
});

setInterval(() => {
  lobby.broadcastToChannel("testing", message);
  message++;
}, 5000);

Readme

Keywords

Package Sidebar

Install

npm i leafx

Weekly Downloads

0

Version

0.1.3

License

MIT

Unpacked Size

12.1 kB

Total Files

12

Last publish

Collaborators

  • kocisov