import { I as Interceptor } from '../../Interceptor-af98b768.js'; import '@open-draft/logger'; import 'strict-event-emitter'; interface CloseEventInit extends EventInit { code?: number; reason?: string; wasClean?: boolean; } declare class CloseEvent extends Event { code: number; reason: string; wasClean: boolean; constructor(type: string, init?: CloseEventInit); } type WebSocketData = string | ArrayBufferLike | Blob | ArrayBufferView; type WebSocketTransportEventMap = { incoming: MessageEvent; outgoing: MessageEvent; close: CloseEvent; }; type StrictEventListenerOrEventListenerObject = ((this: WebSocket, event: EventType) => void) | { handleEvent(this: WebSocket, event: EventType): void; }; interface WebSocketTransport { addEventListener(event: EventType, listener: StrictEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; dispatchEvent(event: WebSocketTransportEventMap[EventType]): boolean; /** * Send the data from the server to this client. */ send(data: WebSocketData): void; /** * Close the client connection. */ close(code?: number, reason?: string): void; } type WebSocketEventListener = (this: WebSocket, event: EventType) => void; declare const kPassthroughPromise: unique symbol; declare const kOnSend: unique symbol; declare const kClose: unique symbol; declare class WebSocketOverride extends EventTarget implements WebSocket { static readonly CONNECTING = 0; static readonly OPEN = 1; static readonly CLOSING = 2; static readonly CLOSED = 3; readonly CONNECTING = 0; readonly OPEN = 1; readonly CLOSING = 2; readonly CLOSED = 3; url: string; protocol: string; extensions: string; binaryType: BinaryType; readyState: number; bufferedAmount: number; private _onopen; private _onmessage; private _onerror; private _onclose; private [kPassthroughPromise]; private [kOnSend]?; constructor(url: string | URL, protocols?: string | Array); set onopen(listener: WebSocketEventListener | null); get onopen(): WebSocketEventListener | null; set onmessage(listener: WebSocketEventListener> | null); get onmessage(): WebSocketEventListener> | null; set onerror(listener: WebSocketEventListener | null); get onerror(): WebSocketEventListener | null; set onclose(listener: WebSocketEventListener | null); get onclose(): WebSocketEventListener | null; /** * @see https://websockets.spec.whatwg.org/#ref-for-dom-websocket-send%E2%91%A0 */ send(data: WebSocketData): void; close(code?: number, reason?: string): void; private [kClose]; addEventListener(type: K, listener: (this: WebSocket, event: WebSocketEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener(type: K, callback: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions): void; } declare const kEmitter$1: unique symbol; interface WebSocketClientEventMap { message: MessageEvent; close: CloseEvent; } interface WebSocketClientConnectionProtocol { id: string; url: URL; send(data: WebSocketData): void; close(code?: number, reason?: string): void; } /** * The WebSocket client instance represents an incoming * client connection. The user can control the connection, * send and receive events. */ declare class WebSocketClientConnection implements WebSocketClientConnectionProtocol { readonly socket: WebSocket; private readonly transport; readonly id: string; readonly url: URL; private [kEmitter$1]; constructor(socket: WebSocket, transport: WebSocketTransport); /** * Listen for the outgoing events from the connected WebSocket client. */ addEventListener(type: EventType, listener: WebSocketEventListener, options?: AddEventListenerOptions | boolean): void; /** * Removes the listener for the given event. */ removeEventListener(event: EventType, listener: WebSocketEventListener, options?: EventListenerOptions | boolean): void; /** * Send data to the connected client. */ send(data: WebSocketData): void; /** * Close the WebSocket connection. * @param {number} code A status code (see https://www.rfc-editor.org/rfc/rfc6455#section-7.4.1). * @param {string} reason A custom connection close reason. */ close(code?: number, reason?: string): void; } /** * Abstraction over the given mock `WebSocket` instance that allows * for controlling that instance (e.g. sending and receiving messages). */ declare class WebSocketClassTransport extends EventTarget implements WebSocketTransport { protected readonly socket: WebSocketOverride; constructor(socket: WebSocketOverride); addEventListener(type: EventType, callback: StrictEventListenerOrEventListenerObject | null, options?: boolean | AddEventListenerOptions): void; dispatchEvent(event: WebSocketTransportEventMap[EventType]): boolean; send(data: WebSocketData): void; close(code: number, reason?: string): void; } declare const kEmitter: unique symbol; declare const kSend: unique symbol; interface WebSocketServerEventMap { open: Event; message: MessageEvent; error: Event; close: CloseEvent; } /** * The WebSocket server instance represents the actual production * WebSocket server connection. It's idle by default but you can * establish it by calling `server.connect()`. */ declare class WebSocketServerConnection { private readonly client; private readonly transport; private readonly createConnection; /** * A WebSocket instance connected to the original server. */ private realWebSocket?; private mockCloseController; private realCloseController; private [kEmitter]; constructor(client: WebSocketOverride, transport: WebSocketClassTransport, createConnection: () => WebSocket); /** * The `WebSocket` instance connected to the original server. * Accessing this before calling `server.connect()` will throw. */ get socket(): WebSocket; /** * Open connection to the original WebSocket server. */ connect(): void; /** * Listen for the incoming events from the original WebSocket server. */ addEventListener(event: EventType, listener: WebSocketEventListener, options?: AddEventListenerOptions | boolean): void; /** * Remove the listener for the given event. */ removeEventListener(event: EventType, listener: WebSocketEventListener, options?: EventListenerOptions | boolean): void; /** * Send data to the original WebSocket server. * @example * server.send('hello') * server.send(new Blob(['hello'])) * server.send(new TextEncoder().encode('hello')) */ send(data: WebSocketData): void; private [kSend]; /** * Close the actual server connection. */ close(): void; private handleIncomingMessage; private handleMockClose; private handleRealClose; } type WebSocketEventMap$1 = { connection: [args: WebSocketConnectionData]; }; type WebSocketConnectionData = { /** * The incoming WebSocket client connection. */ client: WebSocketClientConnection; /** * The original WebSocket server connection. */ server: WebSocketServerConnection; /** * The connection information. */ info: { /** * The protocols supported by the WebSocket client. */ protocols: string | Array | undefined; }; }; /** * Intercept the outgoing WebSocket connections created using * the global `WebSocket` class. */ declare class WebSocketInterceptor extends Interceptor { static symbol: symbol; constructor(); protected checkEnvironment(): boolean; protected setup(): void; } export { WebSocketClientConnection, WebSocketClientConnectionProtocol, WebSocketConnectionData, WebSocketData, WebSocketEventMap$1 as WebSocketEventMap, WebSocketInterceptor, WebSocketServerConnection, WebSocketTransport };