Skip to content

@makaio/bus-transport-websocket

WebSocket transport for @makaio/bus-core enabling cross-process communication via WebSocket protocol.

  • Bidirectional: Full duplex communication over WebSocket
  • Client/Server modes: Supports both client and server configurations
  • Authentication: Optional auth provider for connection validation
  • Duck-typed: Works with any WebSocket-like implementation (browser, ws, etc.)
  • Auto-reconnect: Built-in connection management with configurable retry logic
import { createWebSocketTransport } from '@makaio/bus-transport-websocket';
import { MakaioBus } from '@makaio/bus-core';
import WebSocket from 'ws';
const ws = new WebSocket('ws://localhost:8080');
const transport = createWebSocketTransport({
mode: 'client',
websocket: ws,
});
MakaioBus.registerTransport(transport);
await MakaioBus.connect();
import { createWebSocketTransport } from '@makaio/bus-transport-websocket';
import { MakaioBus } from '@makaio/bus-core';
import { WebSocketServer } from 'ws';
const wss = new WebSocketServer({ port: 8080 });
const transport = createWebSocketTransport({
mode: 'server',
websocket: wss,
});
MakaioBus.registerTransport(transport);
await MakaioBus.connect();
import { createWebSocketTransport, HmacAuth } from '@makaio/bus-transport-websocket';
const transport = createWebSocketTransport({
mode: 'client',
websocket: ws,
auth: new HmacAuth({ secret: 'your-secret' }),
});
ExportDescription
createWebSocketTransportFactory for wrapping an existing client socket or server
WebSocketClientTransportWebSocket client transport
ServerTransportWebSocket server transport
HmacAuthHMAC-based authentication provider
E2EAuthEnd-to-end encrypted auth provider
E2ERelayAuthRelay-based E2E auth provider
DispatchingAuthComposite auth (HMAC → E2E hot-swap)
createE2EClientTransportE2E encrypted client transport factory
createE2ERelayClientTransportE2E relay client transport factory
createE2ERelayCodecCodec helper for E2E relay framing
createRelayControlHelpersHelpers for relay control envelope messages
createRelayControlRegistryRegistry for relay control message handlers
extractSocketErrorMessageWebSocket error-message helper
createWebSocketCloseEventNormalize close event details
cryptoNamespaced crypto helpers used by E2E auth
TypeDescription
WebSocketLikeDuck-typed client WebSocket interface
WebSocketServerLikeDuck-typed server WebSocket interface
WebSocketClientTransportOptionsURL-based client transport configuration
WebSocketClientTransportReconnectOptions{ baseMs?, maxMs? } reconnect timing
ClientTransportCodecClient wire codec interface
TransportAuthAuthentication strategy interface
E2ERelayAuthOptionsRelay E2E auth strategy options
RelayControlBusMessage / RelayControlEnvelopeMessage / RelayControlHelpers / RelayControlRegistryRelay control message types

createWebSocketTransport() accepts this object shape; the named options type is internal to the root entrypoint.

interface WebSocketTransportOptions {
mode: 'client' | 'server';
websocket: WebSocketLike | WebSocketServerLike;
auth?: TransportAuth;
debug?: boolean;
}

For client-mode reconnect or socket creation options, use WebSocketClientTransport directly. createWebSocketTransport({ mode: 'client' }) wraps an already-created socket and rejects legacy connectionOptions instead of silently ignoring them. Reconnect behavior is scoped to WebSocketClientTransport; the generic factory disables auto-reconnect because it does not own socket creation.

import { HmacAuth, WebSocketClientTransport } from '@makaio/bus-transport-websocket';
const transport = new WebSocketClientTransport({
url: 'ws://localhost:8080',
auth: new HmacAuth({ secret: 'your-secret' }),
autoReconnect: { baseMs: 1_000, maxMs: 10_000 },
});

Register transports with the bus before calling connect() so receive handlers and subscription sync are installed before socket messages arrive. The default registry names are websocket for ServerTransport and ws-client for WebSocketClientTransport; pass name when a bus registers more than one WebSocket transport.

transports/ws/
├── src/
│ ├── index.ts # Main exports
│ ├── types.ts # Type definitions
│ ├── ws-client-transport.ts # URL-based client transport implementation
│ ├── ws-client-connection.ts
│ ├── ws-client-options.ts
│ ├── ws-client-reconnect.ts
│ ├── ws-client-subscriptions.ts
│ ├── server-transport.ts # Server transport implementation
│ ├── server-client-setup.ts
│ ├── server-message-handler.ts
│ ├── client-registry.ts
│ ├── subscribe-message.ts
│ ├── broadcast-aggregator.ts
│ ├── relay-control-*.ts
│ └── auth/
│ └── index.ts # Authentication implementations
├── package.json
└── README.md

This package augments @makaio/bus-core to provide type-safe transport access:

const registry = bus.getContext().transportRegistry;
const transport = registry.getTransport('websocket'); // typed

Part of the Makaio AI Framework