@klastra/ksync
Version:
Real-time sync engine for modern applications with 300k+ ops/sec performance
71 lines • 2.42 kB
TypeScript
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