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>;
