import './utils/disposable'; import type { SocketState, Unsubscribe, EventHandler } from './types'; interface SharedSocketOptions { protocols?: string[]; reconnect?: boolean; reconnectMaxDelay?: number; /** Max reconnect attempts before giving up (default: Infinity). */ reconnectMaxRetries?: number; /** Close codes that mean "auth failed — stop reconnect." Default: [1008]. */ authFailureCloseCodes?: number[]; heartbeatInterval?: number; /** * Liveness watchdog. When `> 0`, the socket force-reconnects if NO inbound * message (server data or a pong) arrives within this many ms. Detects * silently-dropped connections that never fire `onclose` (sleep, network * switch, captive portal). Requires the server to send periodic data or * answer the heartbeat ping. Default: disabled (legacy fire-and-forget). */ heartbeatTimeout?: number; sendBuffer?: number; auth?: () => string | Promise; authToken?: string; authParam?: string; /** Heartbeat payload (default: { type: "ping" }). */ pingPayload?: unknown; /** Custom serializer (default: JSON.stringify). */ serialize?: (data: unknown) => string | ArrayBuffer | Blob; /** Custom deserializer (default: JSON.parse). */ deserialize?: (raw: string | ArrayBuffer) => unknown; } export declare class SharedSocket implements Disposable { private url; private ws; private _state; private buffer; private disposed; private heartbeatTimer; private reconnectTimer; /** Timestamp of the last inbound message — drives the liveness watchdog. */ private lastInboundAt; private onMessageFns; private onStateChangeFns; private reconnectAttempts; private readonly opts; constructor(url: string, options?: SharedSocketOptions); get state(): SocketState; connect(): Promise; disconnect(): void; send(data: unknown): void; onMessage(fn: EventHandler): Unsubscribe; onStateChange(fn: (state: SocketState) => void): Unsubscribe; /** * Manually trigger a reconnect. Resets the retry counter and clears any * scheduled backoff so the next attempt happens immediately. Use after * `state === 'failed'` to let the user retry, or any time to force a * fresh connection. */ reconnect(): void; private scheduleReconnect; private flushBuffer; private startHeartbeat; private stopHeartbeat; private clearReconnect; private buildUrl; private setState; [Symbol.dispose](): void; } export {};