import { KSyncSync, WebSocketMessage } from '../types.js';
export interface ConnectionHealthMetrics {
    connectionsAttempted: number;
    connectionsSuccessful: number;
    disconnections: number;
    messagesSent: number;
    messagesReceived: number;
    averageLatency: number;
    lastPingTime?: number;
    lastPongTime?: number;
}
export interface RateLimitConfig {
    maxMessagesPerSecond: number;
    maxBurstSize: number;
    penaltyDelayMs: number;
}
export declare class WebSocketSyncClient implements KSyncSync {
    private serverUrl;
    private maxReconnectAttempts;
    private reconnectDelay;
    private debug;
    private suppressExpectedErrors;
    private ws?;
    private isConnecting;
    private reconnectAttempts;
    private reconnectTimeout?;
    private pingInterval?;
    private healthCheckInterval?;
    private isCircuitBreakerOpen;
    private circuitBreakerOpenTime?;
    private readonly circuitBreakerTimeout;
    private consecutiveFailures;
    private readonly maxConsecutiveFailures;
    private messageHandlers;
    private connectHandlers;
    private disconnectHandlers;
    private healthMetrics;
    private rateLimitConfig;
    private messageTimestamps;
    private isRateLimited;
    constructor(serverUrl: string, maxReconnectAttempts?: number, // Increased from 5
    reconnectDelay?: number, debug?: boolean, rateLimitConfig?: Partial<RateLimitConfig>, suppressExpectedErrors?: boolean);
    connect(): Promise<void>;
    disconnect(): Promise<void>;
    send(message: WebSocketMessage): Promise<void>;
    isConnected(): boolean;
    onMessage(callback: (message: WebSocketMessage) => void): void;
    onConnect(callback: () => void): void;
    onDisconnect(callback: () => void): void;
    getHealthMetrics(): ConnectionHealthMetrics;
    getConnectionStatus(): {
        connected: boolean;
        connecting: boolean;
        reconnectAttempts: number;
        maxReconnectAttempts: number;
        rateLimited: boolean;
        health: ConnectionHealthMetrics;
        readyState: number | undefined;
        url: string;
    };
    private scheduleReconnect;
    private handleConnectionFailure;
    private openCircuitBreaker;
    private resetCircuitBreaker;
    private startHealthMonitoring;
    private stopHealthMonitoring;
    private checkRateLimit;
    private recordMessageTimestamp;
    private log;
}
//# sourceMappingURL=websocket-client.d.ts.map