@codesandbox/sdk
Version:
The CodeSandbox SDK
51 lines (50 loc) • 1.91 kB
TypeScript
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>;