@rtcsvc/server
v1.0.20
Published
Node SDK: register a service channel and answer client requests over WebRTC
Downloads
1,687
Maintainers
Readme
@rtcsvc/server
Node SDK for rtcsvc: register a service channel on the gateway and answer client requests over a peer-to-peer WebRTC DataChannel.
The gateway only authenticates and relays WebRTC signalling — request/response
traffic, pub/sub and broadcast flow peer-to-peer, encoded with
datapack. This server is the WebRTC
offerer and owns the RPC data channel. Servers also form an inter-server
mesh so pub/sub and broadcast fan out across every server of a service.
Install
npm install @rtcsvc/serverRequires Node >= 20. datapack, node-rtc-connection and ws are installed as
dependencies.
Usage
import { ServiceServer, Status } from "@rtcsvc/server";
import { STRING } from "datapack";
const server = new ServiceServer({
gatewayUrl: "wss://gateway.example.com/ws",
serviceId: "svc_...", // from the admin console
serviceKey: "key_...", // from the admin console
});
// Request/reply route — payload + response are datapack schemas.
server.use(
"echo",
{ text: STRING }, // request schema
{ text: STRING }, // response schema
(req, res) => {
res.send({ text: req.payload.text });
},
);
// Pub/sub: declare an event type, optionally subscribe.
server.useEvent("chat", { text: STRING }, (payload, publisher) => {
console.log(`from ${publisher.id} (${publisher.role}):`, payload.text);
});
server.on("registered", (serviceName, connId) => console.log("registered", serviceName, connId));
await server.start();
// Fan out to topic subscribers across the mesh (data is packed per the
// schema registered with useEvent):
server.publish("chat", { text: "hello" });
// Fan out to every client of every server:
server.broadcast("chat", { text: "hello everyone" });API
new ServiceServer(options)—{ gatewayUrl, serviceId, serviceKey, reconnect?, debug? }..use(type, requestSchema, responseSchema, handler)— register a request route..useEvent(type, payloadSchema, handler?)— register an event type (and optionally subscribe)..subscribe(topic, cb)/.unsubscribe(topic, cb?)— server-side topic subscription..publish(type, data)— publish to topic subscribers across the mesh (datapacked per the event schema)..broadcast(type, data)— deliver to every client of every server..start()/.close()— connect to / disconnect from the gateway..on(event, cb)— lifecycle events:registered,peer,peergone,error,close.
Inside a handler, res.setStatus(code), res.setSession(patch) and
res.send(data) shape the reply; Status holds the common status codes.
License
MIT
