Skip to content

WebSocketConnection

Defined in: packages/core/src/data/streaming/websocket-connection.ts:62

WebSocket connection for bidirectional streaming.

Provides real-time bidirectional communication with automatic reconnection. Unlike SSE, WebSocket supports sending data from client to server.

Features:

  • Full-duplex communication
  • JSON message parsing with text fallback
  • Manual reconnection with exponential backoff
  • Sub-protocol support
  • Send capability with connection validation
const ws = new WebSocketConnection({
url: 'wss://api.example.com/stream',
protocols: 'json',
});
ws.on('message', ({ data }) => {
console.log('Received:', data);
});
await ws.connect();
ws.send({ type: 'subscribe', channel: 'updates' });

new WebSocketConnection(config): WebSocketConnection

Defined in: packages/core/src/data/streaming/websocket-connection.ts:79

Create a new WebSocket connection.

ParameterTypeDescription
configWebSocketConfigWebSocket configuration

WebSocketConnection

const connection = new WebSocketConnection({
url: 'wss://api.example.com/stream',
protocols: ['json', 'v1'],
});

BaseConnection.constructor

connect(): Promise<void>

Defined in: packages/core/src/data/streaming/websocket-connection.ts:109

Establish WebSocket connection.

Promise<void>

Creates a WebSocket and sets up event listeners for:

  • Connection open
  • Message reception
  • Connection close
  • Errors

Unlike EventSource, WebSocket does not have built-in reconnection, so reconnection is handled manually via the BaseConnection.

Error if WebSocket is not supported or connection fails

await connection.connect();
console.log('Connected to WebSocket');

BaseConnection.connect


disconnect(): void

Defined in: packages/core/src/data/streaming/websocket-connection.ts:176

Close WebSocket connection.

void

Closes the WebSocket with a normal closure code (1000). Sets the manual disconnect flag to prevent automatic reconnection.

connection.disconnect();
console.log('Disconnected from WebSocket');

BaseConnection.disconnect


eventNames(): keyof ConnectionEvents[]

Defined in: packages/core/src/utils/event-emitter.ts:211

Get all event names that have registered handlers

keyof ConnectionEvents[]

Array of event names

const events = emitter.eventNames();
console.log('Events with handlers:', events);

BaseConnection.eventNames


getReconnectAttempts(): number

Defined in: packages/core/src/data/streaming/base-connection.ts:200

Get the number of reconnection attempts.

number

Number of reconnect attempts

BaseConnection.getReconnectAttempts


getState(): ConnectionState

Defined in: packages/core/src/data/streaming/base-connection.ts:175

Get current connection state.

ConnectionState

Current state

const state = connection.getState();
if (state === 'connected') {
// Connection is ready
}

BaseConnection.getState


hasListeners<K>(event): boolean

Defined in: packages/core/src/utils/event-emitter.ts:228

Check if an event has any registered handlers

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
eventKEvent name

boolean

True if the event has at least one handler

if (emitter.hasListeners('message')) {
emitter.emit('message', { text: 'Hello' });
}

BaseConnection.hasListeners


isConnected(): boolean

Defined in: packages/core/src/data/streaming/base-connection.ts:191

Check if connection is currently connected.

boolean

True if connected

if (connection.isConnected()) {
connection.send(data);
}

BaseConnection.isConnected


listenerCount<K>(event): number

Defined in: packages/core/src/utils/event-emitter.ts:195

Get the number of handlers registered for an event

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
eventKEvent name

number

Number of registered handlers

const count = emitter.listenerCount('message');
console.log(`${count} handlers registered`);

BaseConnection.listenerCount


off<K>(event, handler): void

Defined in: packages/core/src/utils/event-emitter.ts:120

Remove an event handler

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
eventKEvent name
handlerEventHandler<ConnectionEvents[K]>Handler function to remove

void

const handler = (data) => console.log(data);
emitter.on('message', handler);
emitter.off('message', handler);

BaseConnection.off


on<K>(event, handler): () => void

Defined in: packages/core/src/utils/event-emitter.ts:65

Register an event handler

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
eventKEvent name to listen for
handlerEventHandler<ConnectionEvents[K]>Callback function to invoke when event is emitted

Unsubscribe function that removes this specific handler

() => void

const unsubscribe = emitter.on('message', (data) => {
console.log(data.text);
});
// Later, to unsubscribe:
unsubscribe();

BaseConnection.on


once<K>(event, handler): void

Defined in: packages/core/src/utils/event-emitter.ts:95

Register a one-time event handler

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
eventKEvent name to listen for
handlerEventHandler<ConnectionEvents[K]>Callback function to invoke once

void

The handler will be automatically removed after being invoked once.

emitter.once('connect', () => {
console.log('Connected!');
});

BaseConnection.once


removeAllListeners<K>(event?): void

Defined in: packages/core/src/utils/event-emitter.ts:175

Remove all handlers for an event, or all handlers for all events

Type Parameter
K extends keyof ConnectionEvents
ParameterTypeDescription
event?KOptional event name. If omitted, removes all handlers for all events.

void

// Remove all handlers for 'message' event
emitter.removeAllListeners('message');
// Remove all handlers for all events
emitter.removeAllListeners();

BaseConnection.removeAllListeners


send(data): void

Defined in: packages/core/src/data/streaming/websocket-connection.ts:198

Send data through WebSocket.

ParameterTypeDescription
dataunknownData to send (will be JSON stringified)

void

Error if not connected

The data is automatically converted to JSON before sending. Throws an error if called when the connection is not established.

connection.send({ type: 'ping' });
connection.send({ type: 'subscribe', channel: 'updates' });