UNPKG

yjs-server

Version:

An extensible websocket server for the Yjs collaborative editing framework. Compatible with y-websocket.

49 lines (48 loc) 1.84 kB
/// <reference types="node" resolution-mode="require"/> import type * as Y from 'yjs'; export type LogFn = <T extends object>(obj: T, msg: string, ...args: unknown[]) => void; export interface Logger { info: LogFn; error: LogFn; warn: LogFn; } export interface MessageEvent { data: WebsSocketData; } export interface CloseEvent { code: number; } export interface IWebSocket { binaryType: 'arraybuffer' | string; readonly readyState: number; send(data: unknown, cb?: (err?: Error) => void): void; ping(data?: unknown, mask?: boolean, cb?: (err: Error) => void): void; close(code?: number, data?: string | Buffer): void; terminate(): void; on(event: 'pong', listener: () => void): void; addEventListener(event: 'close', listener: (event: CloseEvent) => void): void; addEventListener(event: 'message', listener: (event: MessageEvent) => void): void; removeEventListener(method: 'message', cb: (event: MessageEvent) => void): void; removeEventListener(method: 'close', cb: (event: CloseEvent) => void): void; } export interface IRequest { url?: string | undefined; } export type WebsSocketData = string | Buffer | ArrayBuffer | Buffer[]; export interface YjsServer { handleConnection(conn: IWebSocket, req: IRequest, shouldConnect?: Promise<boolean>): void; close(code?: number, terminateTimeout?: number | null): void; } export type LoadDocFn = (name: string, doc: Y.Doc) => Promise<void>; export type OnUpdateFn = (name: string, update: Uint8Array, doc: Y.Doc) => Promise<void>; export type StoreDocFn = (name: string, doc: Y.Doc) => Promise<void>; export interface DocStorage { loadDoc: LoadDocFn; onUpdate?: OnUpdateFn; storeDoc?: StoreDocFn; } export declare enum CloseReason { NORMAL = 1000, UNSUPPORTED = 1003, INTERNAL_ERROR = 1011 }