/**
 * WebSocket client for real-time configuration updates
 */
import { Logger } from './logger';
export interface WebSocketConfig {
    /** Base URL for WebSocket connection */
    baseUrl: string;
    /** JWT token for authentication */
    token: string;
    /** Reconnection attempt interval in ms (default: 5000) */
    reconnectInterval?: number;
    /** Maximum reconnection attempts (default: 10) */
    maxReconnectAttempts?: number;
    /** Connection timeout in ms (default: 10000) */
    connectionTimeout?: number;
    /** Enable automatic reconnection (default: true) */
    autoReconnect?: boolean;
}
export interface WebSocketMessage {
    type: string;
    channel?: string;
    data?: any;
    timestamp: string;
}
export interface SubscriptionRequest {
    project_id: string;
    config_key?: string;
    types?: string[];
}
export interface ConfigUpdateEvent {
    config_key: string;
    project_id: string;
    new_value: any;
    enabled: boolean;
    etag: string;
    version: number;
    timestamp: string;
    update_type: 'update' | 'toggle' | 'delete';
}
export type ConfigUpdateCallback = (event: ConfigUpdateEvent) => void;
export type ConnectionStateCallback = (state: 'connecting' | 'connected' | 'disconnected' | 'error') => void;
export type ErrorCallback = (error: Error) => void;
export declare class WebSocketClient {
    private ws;
    private config;
    private logger;
    private subscriptions;
    private configCallbacks;
    private connectionStateCallbacks;
    private errorCallbacks;
    private connectionState;
    private reconnectAttempts;
    private reconnectTimer;
    private connectionTimer;
    private heartbeatTimer;
    private lastPong;
    constructor(config: WebSocketConfig, logger: Logger);
    /**
     * Connect to WebSocket server
     */
    connect(): Promise<void>;
    /**
     * Disconnect from WebSocket server
     */
    disconnect(): void;
    /**
     * Subscribe to configuration updates for a project
     */
    subscribe(projectId: string, configKey?: string): void;
    /**
     * Unsubscribe from configuration updates
     */
    unsubscribe(projectId: string, configKey?: string): void;
    /**
     * Add callback for configuration updates
     */
    onConfigUpdate(configKey: string, callback: ConfigUpdateCallback): () => void;
    /**
     * Add callback for connection state changes
     */
    onConnectionState(callback: ConnectionStateCallback): () => void;
    /**
     * Add callback for errors
     */
    onError(callback: ErrorCallback): () => void;
    /**
     * Get current connection state
     */
    getConnectionState(): string;
    /**
     * Check if WebSocket is connected
     */
    isConnected(): boolean;
    /**
     * Handle incoming WebSocket messages
     */
    private handleMessage;
    /**
     * Handle configuration update messages
     */
    private handleConfigUpdate;
    /**
     * Send subscription message
     */
    private sendSubscription;
    /**
     * Send message to WebSocket server
     */
    private sendMessage;
    /**
     * Resubscribe to all active subscriptions after reconnection
     */
    private resubscribeAll;
    /**
     * Start heartbeat to keep connection alive
     */
    private startHeartbeat;
    /**
     * Clear heartbeat timer
     */
    private clearHeartbeat;
    /**
     * Schedule reconnection attempt
     */
    private scheduleReconnect;
    /**
     * Clear reconnection timer
     */
    private clearReconnectTimer;
    /**
     * Clear connection timer
     */
    private clearConnectionTimer;
    /**
     * Update connection state and notify callbacks
     */
    private setConnectionState;
    /**
     * Notify error callbacks
     */
    private notifyError;
    /**
     * Normalize configuration with defaults
     */
    private normalizeConfig;
}
//# sourceMappingURL=websocket-client.d.ts.map