UNPKG

@varia-bly/variably-sdk

Version:

Official JavaScript/TypeScript SDK for Variably feature flags, experimentation, and real-time dynamic configurations

147 lines 3.89 kB
/** * 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