WebSocket network adapter for @loro-extended/repo.
npm install @loro-extended/adapter-websocket
# or
pnpm add @loro-extended/adapter-websocketimport { Repo } from '@loro-extended/repo'
import { WsClientNetworkAdapter } from '@loro-extended/adapter-websocket/client'
const adapter = new WsClientNetworkAdapter({
url: 'ws://localhost:3000/ws',
})
const repo = new Repo({
identity: { peerId: 'client-1', name: 'Client', type: 'user' },
adapters: [adapter],
})interface WsClientOptions {
url: string | ((peerId: PeerID) => string)
WebSocket?: typeof WebSocket // For Node.js: import WebSocket from 'ws'
reconnect?: {
enabled: boolean // default: true
maxAttempts?: number // default: 10
baseDelay?: number // default: 1000ms
maxDelay?: number // default: 30000ms
}
keepaliveInterval?: number // default: 30000ms
}import { Repo } from '@loro-extended/repo'
import { WsServerNetworkAdapter, wrapWsSocket } from '@loro-extended/adapter-websocket/server'
import { WebSocketServer } from 'ws'
const wss = new WebSocketServer({ port: 3000 })
const adapter = new WsServerNetworkAdapter()
const repo = new Repo({
identity: { peerId: 'server', name: 'Server', type: 'service' },
adapters: [adapter],
})
wss.on('connection', (ws, req) => {
const url = new URL(req.url!, `http://localhost:3000`)
const peerId = url.searchParams.get('peerId')
const { start } = adapter.handleConnection({
socket: wrapWsSocket(ws),
peerId: peerId || undefined,
})
start()
})See PROTOCOL.md for wire format specification.
For interoperability with Loro Protocol servers, use @loro-extended/adapter-websocket-compat instead.
MIT