import { Server } from 'http';
import { ActivityStreamManager, StreamEvent, StreamFilter, StreamSubscription } from './activity-stream-manager';
export interface WebSocketMessage {
    type: MessageType;
    id?: string;
    data?: any;
    error?: string;
}
export declare enum MessageType {
    SUBSCRIBE = "subscribe",
    UNSUBSCRIBE = "unsubscribe",
    GET_RECENT_EVENTS = "get_recent_events",
    GET_METRICS = "get_metrics",
    PING = "ping",
    EVENT = "event",
    SUBSCRIBED = "subscribed",
    UNSUBSCRIBED = "unsubscribed",
    RECENT_EVENTS = "recent_events",
    METRICS = "metrics",
    PONG = "pong",
    ERROR = "error"
}
export interface ClientSubscription {
    subscriptionId: string;
    streamSubscription: StreamSubscription;
    filters: StreamFilter;
    clientId: string;
}
export interface WebSocketServerConfig {
    port?: number;
    path?: string;
    enableAuth?: boolean;
    authTimeout?: number;
    maxConnections?: number;
    pingInterval?: number;
    enableCompression?: boolean;
}
export declare class ActivityWebSocketServer {
    private wss;
    private streamManager;
    private clients;
    private clientSubscriptions;
    private config;
    private pingTimer?;
    constructor(streamManager: ActivityStreamManager, server?: Server, config?: WebSocketServerConfig);
    /**
     * Get server statistics
     */
    getStats(): {
        connectedClients: number;
        totalSubscriptions: number;
        subscriptionsByType: Record<string, number>;
        uptime: number;
    };
    /**
     * Broadcast event to all matching clients
     */
    broadcast(event: StreamEvent, filters?: Partial<StreamFilter>): void;
    /**
     * Send event to specific client
     */
    sendToClient(clientId: string, event: StreamEvent): void;
    /**
     * Close the WebSocket server
     */
    close(): Promise<void>;
    private setupEventHandlers;
    private handleClientMessage;
    private handleSubscribe;
    private handleUnsubscribe;
    private handleGetRecentEvents;
    private handleGetMetrics;
    private handleClientDisconnect;
    private sendMessage;
    private sendError;
    private startPingTimer;
    private generateClientId;
    private generateId;
    private getFilterType;
    private filtersMatch;
}
//# sourceMappingURL=websocket-server.d.ts.map