@klastra/ksync
Version:
Real-time sync engine for modern applications with 300k+ ops/sec performance
79 lines (78 loc) • 2.06 kB
TypeScript
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>;