interface WsEvent extends Event { type: string; target: any; } interface ErrorEvent extends WsEvent { error: unknown; message: string; } interface CloseEvent extends WsEvent { wasClean: boolean; code: number; reason: string; } interface MessageEvent extends WsEvent { data: any; } interface WsLikeWithHandlers { readonly CONNECTING: 0; readonly OPEN: 1; readonly CLOSING: 2; readonly CLOSED: 3; binaryType: string; readonly readyState: number; onclose(ev: CloseEvent): unknown; onmessage(ev: MessageEvent): unknown; onopen(ev: WsEvent): unknown; onerror(ev: ErrorEvent): unknown; send(data: unknown): void; close(code?: number, reason?: string): void; } type Nullable = { [_K in keyof T]: _K extends K ? T[_K] | null : T[_K]; }; /** * A websocket-like interface that has all we need, this matches * "lib.dom.d.ts" and npm's "ws" websocket interfaces. */ type WsLike = Nullable; export type { WsLike as W };