@wirebus/server
v0.2.0
Published
Wirebus server SDK: listen for signed command transactions (JSON or XML) over a websocket and run your own backend. onLogs + backfill + interpreter.
Downloads
222
Maintainers
Readme
@wirebus/server
Build your own backend on Solana. Listen for signed command transactions over a websocket and run them.
This is the server half of Wirebus. Users send signed JSON commands with the
wirebus client; this package streams
those transactions to your backend (websocket + backfill, so nothing is missed),
then validates, authorizes and executes them.
npm install @wirebus/server @solana/web3.jsA whole backend in a few lines
import { Connection } from '@solana/web3.js';
import { serve } from '@wirebus/server';
import { z } from 'zod';
const connection = new Connection('https://api.devnet.solana.com', 'confirmed');
const sub = serve(connection, {
openMode: true, // demo: accept any signer. Use allowlists in production.
apps: [
{
namespace: 'board',
controlAddress: 'YOUR_APP_INBOX_ADDRESS',
commands: {
post: {
schema: z.object({ text: z.string().max(280) }), // any { parse } works
handler: (ctx) => board.add(ctx.signer, ctx.args.text),
},
},
},
],
onOutcome: (o) => console.log(o.namespace, o.cmd, o.status),
});
// later: await sub.stop();Just the websocket primitive
If you want raw decoded commands and your own logic:
import { watchCommands } from '@wirebus/server';
const sub = watchCommands(connection, { controlAddresses: ['YOUR_APP_INBOX'] }, (cmd) => {
// cmd = { signature, signer, controlAddress, envelope: { cmd, args }, slot }
console.log(cmd.signer, 'sent', cmd.envelope.cmd, cmd.envelope.args);
});What you get
serve(connection, opts), listener + interpreter wired together. Returns{ stop() }.watchCommands(connection, opts, onCommand), the websocket primitive: onLogs + getSignaturesForAddress backfill + dedupe + decode. Robust by design, a dropped socket never loses a command.createInterpreter(opts), routing, arg validation (any zod-compatibleparse), role based authorization (fails closed), idempotency by signature, serial execution per app.- Re-exports
decodeEnvelope,encodeEnvelope,isEnvelopeV1fromwirebus.
How authorization works
openMode: trueaccepts any signer (demo).- Otherwise each app maps
allowlist[signer] -> roles, and a command may require a role. Anything else is rejected. It fails closed.
@solana/web3.js is a peer dependency. The signer of each transaction is the
authenticated caller, no wallet connection anywhere.
Learn more at wirebus.io. MIT licensed.
