UNPKG

@codesandbox/sdk

Version:
51 lines (50 loc) 1.91 kB
import WebSocket from "isomorphic-ws"; import { Disposable } from "../utils/disposable"; export type WebsocketData = string | Uint8Array; export type DisconnectedEvent = { code: number; reason: string; wasClean: boolean; }; export declare class WebSocketClient extends Disposable { private ws; private pongDetectionTimeout; private bufferQueue; private onMessageEmitter; /** * Whenever we are disconnected we will create a new WebSocketClient */ private onDisconnectedEmitter; /** * Whenever the heartbeat is missing. This normally detects a disconnect, but * there can be other reasons like a slow network or a big pending message causing it */ private onMissingHeartbeatEmitter; private detectDisconnectByPongTimeout; onMessage: import("../utils/event").Event<Uint8Array<ArrayBufferLike>>; onDisconnected: import("../utils/event").Event<{ code: number; wasClean: boolean; reason: string; }>; onMissingHeartbeat: import("../utils/event").Event<void>; lastActivity: number; constructor(ws: WebSocket); private isClosingOrClosed; private emitMessage; private get pingTimeout(); setPongDetectionTimeout(ms: number): void; /** We use "PING" to both keep the session alive, but also detect disconnects. Certain interactions, like focusing the application should trigger an immediate "ping", which is why this is a public method. An optional pong timeout can be set. This is useful to detect disconnects faster for example when focusing the application */ ping(pongTimeout?: number): void; send(data: WebsocketData): void; /** * Closes the connection, triggering a disconnected event */ close(): void; dispose(reason?: string): void; } export declare const createWebSocketClient: (url: string) => Promise<WebSocketClient>;