Node.js
The SDK runs in Node.js 20+ and ships both ESM and CommonJS builds.
import { createPeer, memoryNetwork } from "@vaultys/peer-sdk";
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 });
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());