@varia-bly/variably-sdk
Version:
Official JavaScript/TypeScript SDK for Variably feature flags, experimentation, and real-time dynamic configurations
147 lines • 3.89 kB
TypeScript
/**
* 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