/** * WebSocket Worker — runs WebSocket connection off the main thread. * * Communication with main thread via postMessage: * * Main → Worker: * { type: 'connect', url: string, protocols?: string[] } * { type: 'send', data: unknown } * { type: 'disconnect' } * * Worker → Main: * { type: 'open' } * { type: 'message', data: unknown } * { type: 'close', code: number, reason: string } * { type: 'error', message: string } * { type: 'state', state: SocketState } */ type SocketState = 'connecting' | 'connected' | 'reconnecting' | 'closed' | 'failed'; interface WorkerCommand { type: 'connect' | 'send' | 'disconnect' | 'reconnect'; url?: string; protocols?: string[]; data?: unknown; reconnect?: boolean; reconnectMaxDelay?: number; reconnectMaxRetries?: number; authFailureCloseCodes?: number[]; heartbeatInterval?: number; heartbeatTimeout?: number; bufferSize?: number; } declare let ws: WebSocket | null; declare let state: SocketState; declare let buffer: unknown[]; declare let heartbeatTimer: ReturnType | null; declare let reconnectTimer: ReturnType | null; declare let disposed: boolean; declare let currentUrl: string; declare let currentProtocols: string[]; declare let shouldReconnect: boolean; declare let maxDelay: number; declare let maxRetries: number; declare let authFailureCloseCodes: Set; declare let heartbeatInterval: number; declare let heartbeatTimeout: number; declare let lastInboundAt: number; declare let maxBuffer: number; declare let backoffDelay: number; declare let reconnectAttempts: number; declare function setState(s: SocketState): void; declare function connect(url: string, protocols: string[]): void; declare function doConnect(): void; declare function send(data: unknown): void; declare function disconnect(): void; declare function flushBuffer(): void; declare function startHeartbeat(): void; declare function stopHeartbeat(): void; declare function scheduleReconnect(): void; declare function manualReconnect(): void; declare function clearReconnect(): void;