/// import WebSocket from 'isomorphic-ws'; export declare type Message = string | object; /** * A template object or a matcher function. */ export declare type Template = any | ((msg: any) => boolean); export declare type Listener = (msg: T) => void; export declare type ListenerOptions = { /** * Normally listeners are removed after close. * Keep listening after reconnect. */ keep?: boolean; }; interface TemplateListener { template: Template; listener: Listener; options: ListenerOptions; } export declare type WsListenerServiceConfig = { /** * Timeout for `open` and for `once`. */ timeoutMs?: number; /** * Force delay between `send`s. */ throttleMs?: number; } & ({ url: string; } | { ws: WebSocket; }); export declare class WsListenerService { protected ws: WebSocket; protected url: string; protected timeoutMs: number; protected throttleMs: number; protected liteners: TemplateListener[]; protected openPromise: any; get isOpen(): boolean; constructor({ ...conf }: WsListenerServiceConfig); open(): Promise; /** * Close connection, cleanup. */ close(code?: number, reason?: string): Promise; protected _reconnectableClose(event: any): void; /** * This method exists so that reconnect implementation can use it where reconnectableClose is needed. */ protected reconnectableClose(code?: number, reason?: string): Promise; /** * It is possible for an 'open' event and the first 'message's to come on the same event loop cycle (only if server and client are in the same thread?). * Add sleep before processing each message to avoid skipped messages. */ protected _handleMessage(event: any): Promise; send(msg: Message): Promise; /** * Listen for messages that match a template. * Return template and listener function passed as arguments (can be used in `off` later). */ on(template: Template, listener: Listener, options?: ListenerOptions): { template: Template; listener: Listener; }; /** * Remove listener. */ off(template: Template, listener: Listener): void; /** * Get a promise for one message matching a template. * @throws Error on timeout. */ once(template: Template, { timeoutMs, ...options }?: ListenerOptions & { timeoutMs?: number; }): Promise; } export {};