UNPKG

event-source-hook

Version:

Easily intercept, modify, and simulate EventSource server-sent events.

88 lines (87 loc) 4.08 kB
export interface HookedEventSource extends EventSource { /** Map registered event listeners to their proxy. */ _mapListenerProxy: WeakMap<EventListenerOrEventListenerObject, { [eventType: string]: EventListener; }>; /** * Create a proxy function to be called instead of original event listener. * @param listener Listener to be proxied. */ _createEventProxy: (listener: EventListener) => EventListener; _nativeAddEventListener: EventSource["addEventListener"]; _nativeRemoveEventListener: EventSource["removeEventListener"]; } export interface ExtendedMessageEvent extends MessageEvent { /** Tell that this event is simulated. */ simulated?: boolean; } export interface MutableMessageEvent extends ExtendedMessageEvent { bubbles: MessageEvent["bubbles"]; cancelable: MessageEvent["cancelable"]; cancelBubble: MessageEvent["cancelBubble"]; composed: MessageEvent["composed"]; currentTarget: MessageEvent["currentTarget"]; data: MessageEvent["data"]; defaultPrevented: MessageEvent["defaultPrevented"]; eventPhase: MessageEvent["eventPhase"]; isTrusted: MessageEvent["isTrusted"]; lastEventId: MessageEvent["lastEventId"]; origin: MessageEvent["origin"]; ports: MessagePort[]; returnValue: MessageEvent["returnValue"]; source: MessageEvent["source"]; srcElement: MessageEvent["srcElement"]; target: MessageEvent["target"]; timeStamp: MessageEvent["timeStamp"]; type: MessageEvent["type"]; } export interface HookUrlFunction { /** * Hook function to change the connection server URL before connecting to it. * @param url - Server URL to connect to. * @returns The server URL to connect to. */ (url: string): string; } export interface HookCreateFunction { /** * Hook function used to intercept new instanced `EventSource`. * @param eventSource New connection. */ (eventSource: HookedEventSource): void; } export interface HookEventFunctionSync { /** * Hook function used to modify or block the event just before being received. * @param type - Received event type. * @param event - Received event object (which is mutable). You might be interested to modify `event.data`. * @param eventSource - Connection that received the event. * @returns A `MessageEvent` object, or `null` to block. */ (type: string, event: MutableMessageEvent, eventSource: HookedEventSource): MutableMessageEvent | null; } export interface HookEventFunctionAsync { /** * Async hook function used to modify or block the event just before being received. * @param type - Received event type. * @param event - Received event object (which is mutable). You might be interested to modify `event.data`. * @param eventSource - Connection that received the event. * @param result - Function to be called to return asynchronously a `MessageEvent` object, or `null` to block */ (type: string, event: MutableMessageEvent, eventSource: HookedEventSource, result: (event: MutableMessageEvent | null) => void): void; } export interface HookEventFunction { /** * Hook function used to modify or block the event just before being received. * * To make the function asynchronous, include the optional `result` callback parameter, * and call it to return the event or `null` to block the event. * * @param type - Received event type. * @param event - Received event object (which is mutable). You might be interested to modify `event.data`. * @param eventSource - Connection that received the event. * @param result - Optional. Use it to return a result asynchronously. * @returns If `result` not included: a `MessageEvent` object, or `null` to block. */ (type: string, event: MutableMessageEvent, eventSource: HookedEventSource, result: (event: MutableMessageEvent | null) => void): MutableMessageEvent | null | void; }