Skip to content

@offlinesync/transport-websocket

Bidirectional WebSocket transport with server push, version negotiation, and automatic reconnection.

WebSocketSyncTransport

typescript
import { WebSocketSyncTransport } from '@offlinesync/transport-websocket'

const transport = new WebSocketSyncTransport({
  url: 'wss://api.example.com/sync',
  clientId: 'client-abc',
  reconnect: true,
})

// Listen for server-pushed changes
transport.onPush((changes, cursor) => {
  console.log(`Received ${changes.length} pushed changes`)
})

// Connection state
transport.onConnectionStateChange((state) => {
  console.log('State:', state) // 'CONNECTING' | 'CONNECTED' | 'DISCONNECTED' | 'RECONNECTING'
})

await transport.connect()

Options

OptionTypeDefaultDescription
urlstringWebSocket server URL
clientId?stringcrypto.randomUUID()Client identifier
reconnect?booleanfalseEnable auto-reconnect
WebSocketFactory?(url) => WebSocketglobalThis.WebSocketCustom WebSocket constructor

Methods

MethodReturnsDescription
connect()Promise<void>Open connection and negotiate version
disconnect()Promise<void>Graceful disconnect
dispose()Promise<void>Disconnect and release resources
onPush(callback)voidRegister push handler
onConnectionStateChange(callback)voidRegister state change handler

Connection States

typescript
import { WS_CONNECTION_STATE } from '@offlinesync/transport-websocket'

WS_CONNECTION_STATE.CONNECTING
WS_CONNECTION_STATE.CONNECTED
WS_CONNECTION_STATE.DISCONNECTING
WS_CONNECTION_STATE.DISCONNECTED
WS_CONNECTION_STATE.RECONNECTING

WebSocket Message Types

The transport uses a typed message protocol over WebSocket:

ExportDescription
WsClientMessageUnion of client → server messages
WsServerMessageUnion of server → client messages
WS_MSG_TYPEAll message type constants
isWsServerMessage(v)Type guard for server messages

Released under the MIT License.