Skip to main content

Node.js

The SDK runs in Node.js 20+ and ships both ESM and CommonJS builds.

ESM
import { createPeer, memoryNetwork } from "@vaultys/peer-sdk";
CommonJS
const { createPeer, memoryNetwork } = require("@vaultys/peer-sdk");

Persisting with files​

import { createPeer } from "@vaultys/peer-sdk";
import { fileStore } from "@vaultys/peer-sdk/node";

const peer = await createPeer({
identity,
transport,
store: fileStore("./data/peer"), // one file per key
});

Load the identity from your secret manager or environment, for example VaultysId.fromSecret(process.env.PEER_SECRET!). Machines and services should use VaultysId.generateMachine() identities.

WebRTC in Node​

PeerJS is a browser library. To use peerjsTransport in Node, install a WebRTC implementation such as @roamhq/wrtc and expose it before creating the transport:

import wrtc from "@roamhq/wrtc";
import { installWebRTC } from "@vaultys/peer-sdk/node";
import { peerjsTransport } from "@vaultys/peer-sdk/peerjs";

installWebRTC(wrtc);
const transport = peerjsTransport({ host: "relay.example.com", secure: true });
caution

PeerJS also expects some browser globals. Without them, registration fails with UNREACHABLE and the underlying error as its cause. WebRTC in Node works, but it's the least-tested environment for this transport.

For server-to-server traffic between peers you control, a transport over a socket you already have (WebSocket, TCP) is often simpler. See Writing a transport.

A bot that answers everyone​

const bot = await createPeer({
identity: VaultysId.fromSecret(process.env.BOT_SECRET!),
transport,
store: fileStore("./data/bot"),
acceptIncoming: () => true, // anyone with a proven DID may talk to it
});

bot.on("message", async ({ from, body }) => {
await bot.send(from, { text: `You said: ${JSON.stringify(body)}` });
});

process.on("SIGTERM", () => bot.close());