UNPKG

@klastra/ksync

Version:

Real-time sync engine for modern applications with 300k+ ops/sec performance

79 lines (78 loc) 2.06 kB
import { WebSocket } from 'ws'; import { EventEmitter } from 'events'; export interface KSyncServerConfig { port?: number; auth?: { secret?: string; verify?: (token: string) => Promise<{ userId: string; [key: string]: any; }>; }; cors?: { origin?: string | string[]; credentials?: boolean; }; rateLimit?: { maxConnections?: number; maxEventsPerSecond?: number; }; storage?: { type: 'memory' | 'redis' | 'file'; config?: any; }; debug?: boolean; } export interface KSyncClient { id: string; userId?: string; ws: WebSocket; rooms: Set<string>; lastPing: number; metadata: Record<string, any>; } export interface KSyncMessage { type: 'event' | 'join' | 'leave' | 'sync' | 'ping' | 'pong' | 'auth'; room?: string; data?: any; messageId?: string; timestamp?: number; } export declare class KSyncServer extends EventEmitter { private wss; private server; private clients; private rooms; private events; private config; constructor(config?: KSyncServerConfig); start(): Promise<void>; stop(): Promise<void>; broadcast(room: string, data: any): void; sendToClient(clientId: string, data: any): void; getRoomClients(room: string): KSyncClient[]; getStats(): { clients: number; rooms: number; events: number; uptime: number; }; private setupServer; private verifyClient; private handleConnection; private handleMessage; private handleAuth; private handleJoin; private handleLeave; private handleEvent; private handleSync; private handleDisconnect; private handleError; private removeClientFromRoom; private pingClients; private cleanup; private generateClientId; private log; } export declare function createKSyncServer(config?: KSyncServerConfig): KSyncServer; export declare function startKSyncServer(port?: number): Promise<KSyncServer>;