@sevtech/client-websocket 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -429,14 +429,14 @@ class ClientSocket extends InternalEventTarget {
|
|
|
429
429
|
this._connect();
|
|
430
430
|
}
|
|
431
431
|
_messageHandler(event) {
|
|
432
|
-
this._options.logger('Message event', event);
|
|
433
432
|
try {
|
|
434
433
|
const deserialized = this._options.deserialize(event.data);
|
|
434
|
+
this._options.logger('Message event', { message: deserialized });
|
|
435
435
|
if (this._options.isPongMessage(deserialized)) {
|
|
436
436
|
this._clearPongTimeout();
|
|
437
437
|
this._clearReconnectionCount();
|
|
438
438
|
}
|
|
439
|
-
this.dispatchEvent(new SocketMessageEvent(
|
|
439
|
+
this.dispatchEvent(new SocketMessageEvent(deserialized, event));
|
|
440
440
|
}
|
|
441
441
|
catch (error) {
|
|
442
442
|
if (error instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sevtech-client-websocket.mjs","sources":["../../../projects/client-websocket/src/lib/events.ts","../../../projects/client-websocket/src/lib/helpers.ts","../../../projects/client-websocket/src/lib/websocket-options.ts","../../../projects/client-websocket/src/lib/websocket.ts","../../../projects/client-websocket/src/public-api.ts","../../../projects/client-websocket/src/sevtech-client-websocket.ts"],"sourcesContent":["const enum EventName {\n Open = 'open',\n Error = 'error',\n Close = 'close',\n Message = 'message',\n Timeout = 'timeout',\n PermanentClose = 'permanentClose',\n}\n\ninterface EventsMap<T = unknown> {\n [EventName.Open]: SocketOpenEvent;\n [EventName.Error]: SocketErrorEvent;\n [EventName.Close]: SocketCloseEvent;\n [EventName.Message]: SocketMessageEvent<T>;\n [EventName.Timeout]: SocketTimeoutEvent;\n [EventName.PermanentClose]: SocketPermanentCloseEvent;\n}\n\nexport class SocketOpenEvent extends Event {\n constructor() {\n super(EventName.Open);\n }\n}\n\nexport class SocketCloseEvent extends CloseEvent {\n constructor(code: number, reason?: string) {\n super(EventName.Close, {\n code,\n reason,\n wasClean: true\n });\n }\n}\n\nexport class SocketErrorEvent extends Event {\n readonly error?: Error;\n readonly message?: string;\n\n constructor(error?: Error) {\n super(EventName.Error);\n this.error = error;\n this.message = error?.message ?? '[UNKNOWN ERROR]';\n }\n}\n\nexport class SocketMessageEvent<T> extends Event implements Omit<MessageEventInit<T>, 'data'> {\n readonly message: T;\n readonly lastEventId?: string\n readonly origin?: string\n readonly ports?: MessagePort[]\n readonly source?: MessageEventSource | null\n\n constructor(message: T, options: Omit<MessageEventInit<T>, 'data'>) {\n super(EventName.Message);\n\n this.message = message;\n this.ports = options.ports;\n this.source = options.source\n this.origin = options.origin;\n this.lastEventId = options.lastEventId;\n }\n}\n\nexport class SocketTimeoutEvent extends Event {\n reason?: string;\n constructor(reason: string) {\n super(EventName.Timeout);\n this.reason = reason;\n }\n}\n\nexport class SocketPermanentCloseEvent extends Event {\n constructor() {\n super(EventName.PermanentClose);\n }\n}\n\nexport class InternalEventTarget<T, E extends EventsMap<T> = EventsMap<T>> extends EventTarget {\n // @ts-ignore\n override addEventListener<K extends keyof E>(\n type: `${K & string}`,\n callback: (event: E[K]) => void,\n options?: AddEventListenerOptions | boolean\n ): void {\n super.addEventListener(type, callback as EventListener, options);\n }\n\n // @ts-ignore\n removeEventListener<K extends keyof E>(\n type: `${K & string}`,\n callback: (event: E[K]) => void,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, callback as EventListener, options);\n }\n}\n","import { ProtocolsProvider, ReceiveMessage, UrlProvider } from './types';\n\nexport function selectNextProtocols(provider: ProtocolsProvider | null): Promise<string | string[] | null> {\n if (!provider) {\n return Promise.resolve(null);\n }\n\n if (typeof provider === 'string' || Array.isArray(provider)) {\n return Promise.resolve(provider);\n }\n\n if (typeof provider === 'function') {\n const protocols = provider();\n\n if (protocols instanceof Promise) {\n return protocols;\n }\n\n return selectNextProtocols(protocols);\n }\n\n throw Error('Invalid protocols');\n}\n\nexport function selectNextUrl(provider: UrlProvider): Promise<string> {\n if (typeof provider === 'string') {\n return Promise.resolve(provider);\n }\n\n if (typeof provider === 'function') {\n const url = provider();\n\n if (url instanceof Promise) {\n return url;\n }\n\n return selectNextUrl(url);\n }\n\n throw Error('Invalid URL');\n}\n\nexport function calcBytesSize(messages: ReceiveMessage[]): number {\n return messages.reduce((acc, message) => {\n switch (true) {\n case typeof message === 'string':\n return acc + message.length;\n case message instanceof Blob:\n return acc + message.size;\n default:\n return acc + message.byteLength;\n }\n }, 0);\n}\n\nexport function isWebSocket(data: unknown): data is WebSocket {\n return data instanceof WebSocket;\n}\n\nexport function isAbortController(data: unknown): data is AbortController {\n return data instanceof AbortController\n}\n","import { BufferedMessage, Options, ProtocolsProvider, ReceiveMessage } from './types';\n\nconst PONG_MESSAGE = 'pong';\nconst PING_MESSAGE = 'ping';\n\nconst OPTIONS = {\n debug: false,\n pingPong: false,\n minUptime: 5000,\n pongTimeout: 5000,\n pingInterval: 1000,\n startClosed: false,\n connectionTimeout: 4000,\n maxReconnectionDelay: 10_000,\n reconnectionDelayGrowFactor: 1.3,\n maxRetries: Number.POSITIVE_INFINITY,\n maxEnqueuedMessages: Number.POSITIVE_INFINITY,\n minReconnectionDelay: 1000 + Math.random() * 4000,\n} as const satisfies Options;\n\ntype RequiredOptions = Required<Pick<Options, keyof typeof OPTIONS>>;\n\nexport class WebSocketOptions<Send = unknown, Receive = unknown> implements Options<Send, Receive> {\n private readonly _options?: Options<Send, Receive>;\n\n get debug(): boolean {\n return this.getOption('debug');\n }\n\n get pingPong(): boolean {\n return this.getOption('pingPong');\n }\n\n get minUptime(): number {\n return this.getOption('minUptime');\n }\n\n get maxRetries(): number {\n return this.getOption('maxRetries');\n }\n\n get pongTimeout(): number {\n return this.getOption('pongTimeout');\n }\n\n get startClosed(): boolean {\n return this.getOption('startClosed');\n }\n\n get pingInterval(): number {\n return this.getOption('pingInterval');\n }\n\n get connectionTimeout(): number {\n return this.getOption('connectionTimeout');\n }\n\n get maxEnqueuedMessages(): number {\n return this.getOption('maxEnqueuedMessages');\n }\n\n get minReconnectionDelay(): number {\n return this.getOption('minReconnectionDelay');\n }\n\n get maxReconnectionDelay(): number {\n return this.getOption('maxReconnectionDelay');\n }\n\n get reconnectionDelayGrowFactor(): number {\n return this.getOption('minReconnectionDelay');\n }\n\n get pingMessage(): ReceiveMessage {\n if (this._options?.pingMessage instanceof Function) {\n return this._options.pingMessage()\n }\n\n return this._options?.pingMessage ?? PING_MESSAGE;\n }\n\n get protocols(): ProtocolsProvider | null {\n return this._options?.protocols ?? null;\n };\n\n constructor(options?: Options<Send, Receive>) {\n if (options) {\n this._options = options;\n }\n }\n\n serialize(message: Send): ReceiveMessage {\n if (this._options?.serialize instanceof Function) {\n return this._options.serialize(message);\n }\n\n if (isBufferedData(message)) {\n return message;\n }\n\n return typeof message !== 'string'\n ? JSON.stringify(message)\n : message;\n }\n\n deserialize(message?: ReceiveMessage): Receive | BufferedMessage {\n if (this._options?.deserialize instanceof Function) {\n return this._options.deserialize(message);\n }\n\n return message as Receive | BufferedMessage;\n }\n\n isPongMessage(message: unknown): boolean {\n if (!this.pingPong) {\n return false;\n }\n\n if (this._options?.isPongMessage instanceof Function) {\n return this._options.isPongMessage(message);\n }\n\n return message === PONG_MESSAGE;\n }\n\n logger(message: string, ...args: unknown[]): void {\n if (!this.debug) {\n return;\n }\n\n if (this._options?.logger instanceof Function) {\n this._options.logger(message, ...args);\n }\n\n const label = ['%c[WS]:', 'color: #0094FF', message];\n\n if (args.length === 0) {\n return console.info(...label);\n }\n\n console.groupCollapsed(...label);\n console.info(...args)\n console.groupEnd();\n }\n\n private getOption<K extends keyof RequiredOptions>(key: K): RequiredOptions[K] {\n return (this._options?.[key] ?? OPTIONS[key]) as RequiredOptions[K];\n }\n}\n\nfunction isBufferedData(value: unknown): value is ArrayBuffer | Blob | ArrayBufferView {\n return value instanceof ArrayBuffer || value instanceof Blob || (ArrayBuffer.isView(value) && value !== null);\n}\n","import {\n InternalEventTarget, SocketCloseEvent, SocketErrorEvent, SocketMessageEvent, SocketOpenEvent,\n SocketPermanentCloseEvent, SocketTimeoutEvent,\n} from './events';\nimport { calcBytesSize, isAbortController, isWebSocket, selectNextProtocols, selectNextUrl } from './helpers';\nimport { ErrorCode, ErrorReason, Options, ReceiveMessage, UrlProvider } from './types';\nimport { WebSocketOptions } from './websocket-options';\n\nexport class ClientSocket<Send = unknown, Receive = unknown> extends InternalEventTarget<Receive> {\n static get CONNECTING(): typeof WebSocket.CONNECTING {\n return WebSocket.CONNECTING;\n }\n\n static get OPEN(): typeof WebSocket.OPEN {\n return WebSocket.OPEN;\n }\n\n static get CLOSING(): typeof WebSocket.CLOSING {\n return WebSocket.CLOSING;\n }\n\n static get CLOSED(): typeof WebSocket.CLOSED {\n return WebSocket.CLOSED;\n }\n\n private readonly _url: UrlProvider;\n private readonly _options: WebSocketOptions<Send, Receive>;\n\n private _websocket?: WebSocket;\n private _abortController?: AbortController;\n private _uptimeTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _connectTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _pongTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _pingIntervalId: ReturnType<typeof setInterval> | undefined;\n\n private _reconnectCount = 0;\n private _connectLock = false;\n private _closeCalled = false;\n private _shouldReconnect = true;\n private _binaryType: BinaryType = 'blob';\n private _messageQueue: ReceiveMessage[] = [];\n\n get CONNECTING(): typeof ClientSocket.CONNECTING {\n return ClientSocket.CONNECTING;\n }\n\n get OPEN(): typeof ClientSocket.OPEN {\n return ClientSocket.OPEN;\n }\n\n get CLOSING(): typeof ClientSocket.CLOSING {\n return ClientSocket.CLOSING;\n }\n\n get CLOSED(): typeof ClientSocket.CLOSED {\n return ClientSocket.CLOSED;\n }\n\n set binaryType(type: BinaryType) {\n this._binaryType = type;\n\n if (isWebSocket(this._websocket)) {\n this._websocket.binaryType = type;\n }\n }\n\n get binaryType() {\n return isWebSocket(this._websocket) ? this._websocket.binaryType : this._binaryType;\n }\n\n get url(): string {\n return isWebSocket(this._websocket) ? this._websocket.url : '';\n }\n\n get extensions(): string {\n return isWebSocket(this._websocket) ? this._websocket.extensions : '';\n }\n\n get protocol(): string {\n return isWebSocket(this._websocket) ? this._websocket.protocol : '';\n }\n\n get retryCount(): number {\n return Math.max(this._reconnectCount, 0);\n }\n\n get shouldReconnect(): boolean {\n return this._shouldReconnect;\n }\n\n get readyState(): number {\n if (isWebSocket(this._websocket)) {\n return this._websocket.readyState;\n }\n\n return this._options.startClosed\n ? ClientSocket.CLOSED\n : ClientSocket.CONNECTING;\n }\n\n get bufferedAmount(): number {\n return calcBytesSize(this._messageQueue) + (\n isWebSocket(this._websocket)\n ? this._websocket.bufferedAmount\n : 0\n );\n }\n\n private get _nextDelay(): number {\n if (this._reconnectCount <= 0) {\n return 0;\n }\n\n return Math.min(\n Math.pow(\n this._options.minReconnectionDelay * this._options.reconnectionDelayGrowFactor,\n this._reconnectCount - 1\n ),\n this._options.maxReconnectionDelay);\n }\n\n constructor(url: UrlProvider, options?: Options<Send, Receive>) {\n super();\n this._url = url;\n this._options = new WebSocketOptions<Send, Receive>(options);\n\n if (this._options.startClosed) {\n this._shouldReconnect = false;\n }\n\n this._connect();\n }\n\n close(code = 1000, reason?: string): void {\n this._closeCalled = true;\n this._shouldReconnect = false;\n this._clearTimeouts();\n\n if (!isWebSocket(this._websocket)) {\n return this._options.logger('Cannot close WebSocket. No instance');\n }\n\n if (this._websocket.readyState === this.CLOSED) {\n return this._options.logger('Close. WebSocket already closed');\n }\n\n this._websocket.close(code, reason);\n }\n\n reconnect(code?: number, reason?: string): void {\n this._shouldReconnect = true;\n this._closeCalled = false;\n this._reconnectCount = 0;\n\n if (!isWebSocket(this._websocket) || this._websocket.readyState === this.CLOSED) {\n return this._connect();\n }\n\n this._disconnect(code, reason);\n this._connect();\n }\n\n send(data: Send): void {\n this._options.logger('Send message', data);\n\n try {\n const serialized = this._options.serialize(data);\n\n if (isWebSocket(this._websocket) && this._websocket.readyState === this.OPEN) {\n return this._websocket.send(serialized);\n }\n\n if (this._messageQueue.length < this._options.maxEnqueuedMessages) {\n this._options.logger('Enqueue message', data);\n this._messageQueue.push(serialized);\n }\n } catch (error) {\n if (error instanceof Error) {\n this.dispatchEvent(new SocketErrorEvent(error));\n }\n }\n }\n\n private _connect(): void {\n if (this._connectLock || !this._shouldReconnect) {\n return;\n }\n\n this._connectLock = true;\n\n if (this._reconnectCount >= this._options.maxRetries) {\n return this._maxRetriesHandler();\n }\n\n this._reconnectCount += 1;\n this._options.logger('Connection', { reconnectCount: this._reconnectCount });\n this._removeListeners();\n\n this._waitConnection()\n .then(() => Promise.all([\n selectNextUrl(this._url),\n selectNextProtocols(this._options.protocols)\n ]))\n .then(([url, protocols]) =>\n this._connectionHandler(url, protocols)\n )\n .catch((error: Error) => {\n this._connectLock = false;\n this._errorHandler(new SocketErrorEvent(Error(error.message)));\n });\n }\n\n private _disconnect(code = 1000, reason?: string): void {\n this._clearTimeouts();\n\n if (!isWebSocket(this._websocket)) {\n return;\n }\n\n this._removeListeners();\n\n try {\n if (this._websocket.readyState === this.OPEN || this._websocket.readyState === this.CONNECTING) {\n this._websocket.close(code, reason);\n }\n\n if (reason === ErrorReason.ConnectionTimeout || reason === ErrorReason.PongTimeout) {\n this.dispatchEvent(new SocketTimeoutEvent(reason));\n code = ErrorCode.Timeout;\n }\n\n this._closeHandler(new SocketCloseEvent(code, reason));\n } catch {}\n }\n\n private _connectionHandler(url: string, protocols: string | string[] | null): void {\n if (this._closeCalled) {\n this._connectLock = false;\n return;\n }\n\n this._options.logger('Connect', { url, protocols });\n this._websocket = new WebSocket(url, protocols ?? undefined);\n\n this._websocket.binaryType = this._binaryType;\n this._connectLock = false;\n this._setupListeners();\n\n this._connectTimeoutId = setTimeout(\n () => this._handleConnectionTimeout(),\n this._options.connectionTimeout\n );\n }\n\n private _handleConnectionTimeout(): void {\n this._options.logger('Connection timeout');\n this._errorHandler(new SocketErrorEvent(\n Error(ErrorReason.ConnectionTimeout)\n ));\n }\n\n private _waitConnection(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, this._nextDelay);\n });\n }\n\n private _openHandler(event: Event): void {\n this._options.logger('Open event', event);\n clearTimeout(this._connectTimeoutId);\n\n this._uptimeTimeoutId = setTimeout(\n () => this._clearReconnectionCount(),\n this._options.minUptime\n );\n\n if (!isWebSocket(this._websocket)) {\n throw new Error('WebSocket not supported');\n }\n\n this._websocket.binaryType = this._binaryType;\n\n this._sendQueue();\n\n if (this._options.pingPong) {\n this._startPing();\n }\n\n this.dispatchEvent(new SocketOpenEvent());\n }\n\n private _closeHandler(event: SocketCloseEvent): void {\n this._options.logger('Close event', event);\n this._clearTimeouts();\n\n if (this._shouldReconnect) {\n this._connect();\n }\n\n this.dispatchEvent(new SocketCloseEvent(event.code, event.reason));\n }\n\n private _errorHandler(event: SocketErrorEvent): void {\n this._options.logger('Error event', event);\n\n this._disconnect(undefined, event.message);\n\n this.dispatchEvent(new SocketErrorEvent(event.error));\n this._connect();\n }\n\n private _messageHandler(event: MessageEventInit<ReceiveMessage>): void {\n this._options.logger('Message event', event);\n try {\n const deserialized = this._options.deserialize(event.data);\n\n if (this._options.isPongMessage(deserialized)) {\n this._clearPongTimeout();\n this._clearReconnectionCount();\n }\n\n this.dispatchEvent(new SocketMessageEvent(event.data, event));\n } catch (error) {\n if (error instanceof Error) {\n this.dispatchEvent(new SocketErrorEvent(error));\n }\n }\n }\n\n private _sendQueue(): void {\n if (!isWebSocket(this._websocket) || this._messageQueue.length === 0) {\n return;\n }\n\n this._options.logger('Send queue messages', {\n messages: this._messageQueue,\n });\n\n for (const message of this._messageQueue) {\n this._websocket.send(message)\n }\n\n this._messageQueue = [];\n }\n\n private _startPing(): void {\n const message = this._options.pingMessage;\n\n if (isWebSocket(this._websocket) && this._websocket?.readyState === this.OPEN) {\n this._websocket.send(message);\n }\n this._options.logger('Start ping', { message });\n this._pingIntervalId = setInterval(() => {\n if (!isWebSocket(this._websocket)) {\n return;\n }\n\n this._websocket.send(message);\n\n if (this._pongTimeoutId) {\n return;\n }\n\n this._pongTimeoutId = setTimeout(\n () => {\n this._options.logger('Pong timeout');\n this._errorHandler(new SocketErrorEvent(\n Error(ErrorReason.PongTimeout)\n ));\n },\n this._options.pongTimeout,\n );\n }, this._options.pingInterval);\n }\n\n private _maxRetriesHandler(): void {\n this._options.logger('Max retries reached' , {\n maxRetries: this._options.maxRetries,\n reconnectCount: this._reconnectCount,\n });\n\n this.dispatchEvent(new SocketPermanentCloseEvent());\n }\n\n private _clearReconnectionCount(): void {\n this._options.logger('Clear reconnection count');\n if (!this._pongTimeoutId) {\n this._reconnectCount = 0;\n }\n }\n\n private _removeListeners(): void {\n if (!isAbortController(this._abortController)) {\n return;\n }\n\n this._options.logger('Remove native listeners');\n this._abortController.abort();\n }\n\n private _setupListeners(): void {\n if (!isWebSocket(this._websocket)) { return; }\n\n this._options.logger('Setup native listeners');\n\n this._abortController = new AbortController();\n\n const options: AddEventListenerOptions = {\n signal: this._abortController.signal,\n };\n\n this._websocket.addEventListener('open', this._openHandler.bind(this), options);\n this._websocket.addEventListener('close', this._closeHandler.bind(this), options);\n this._websocket.addEventListener('error', this._errorHandler.bind(this), options);\n this._websocket.addEventListener('message', this._messageHandler.bind(this), options);\n }\n\n private _clearTimeouts(): void {\n clearTimeout(this._connectTimeoutId);\n clearTimeout(this._uptimeTimeoutId);\n this._clearPongTimeout();\n this._clearPingInterval();\n }\n\n private _clearPongTimeout(): void {\n clearTimeout(this._pongTimeoutId);\n this._pongTimeoutId = undefined;\n }\n\n private _clearPingInterval(): void {\n clearInterval(this._pingIntervalId);\n this._pingIntervalId = undefined;\n }\n}\n","/*\n * Public API Surface of client-websocket\n */\n\nexport {\n ClientSocket,\n} from './lib/websocket';\n\nexport {\n SocketErrorEvent,\n SocketMessageEvent,\n SocketOpenEvent,\n SocketPermanentCloseEvent,\n SocketTimeoutEvent,\n SocketCloseEvent,\n} from './lib/events';\n\nexport type {\n Options as SocketOptions,\n UrlProvider as SocketUrlProvider,\n ProtocolsProvider as SocketProtocolsProvider,\n} from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAkBM,MAAO,eAAgB,SAAQ,KAAK,CAAA;AACxC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,6BAAgB;;AAExB;AAEK,MAAO,gBAAiB,SAAQ,UAAU,CAAA;IAC9C,WAAY,CAAA,IAAY,EAAE,MAAe,EAAA;AACvC,QAAA,KAAK,CAAkB,OAAA,wBAAA;YACrB,IAAI;YACJ,MAAM;AACN,YAAA,QAAQ,EAAE;AACX,SAAA,CAAC;;AAEL;AAEK,MAAO,gBAAiB,SAAQ,KAAK,CAAA;AAIzC,IAAA,WAAA,CAAY,KAAa,EAAA;AACvB,QAAA,KAAK,+BAAiB;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,iBAAiB;;AAErD;AAEK,MAAO,kBAAsB,SAAQ,KAAK,CAAA;IAO9C,WAAY,CAAA,OAAU,EAAE,OAA0C,EAAA;AAChE,QAAA,KAAK,mCAAmB;AAExB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW;;AAEzC;AAEK,MAAO,kBAAmB,SAAQ,KAAK,CAAA;AAE3C,IAAA,WAAA,CAAY,MAAc,EAAA;AACxB,QAAA,KAAK,mCAAmB;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAEvB;AAEK,MAAO,yBAA0B,SAAQ,KAAK,CAAA;AAClD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,iDAA0B;;AAElC;AAEK,MAAO,mBAA8D,SAAQ,WAAW,CAAA;;AAEnF,IAAA,gBAAgB,CACvB,IAAqB,EACrB,QAA+B,EAC/B,OAA2C,EAAA;QAE3C,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAyB,EAAE,OAAO,CAAC;;;AAIlE,IAAA,mBAAmB,CACjB,IAAqB,EACrB,QAA+B,EAC/B,OAA2C,EAAA;QAE3C,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAyB,EAAE,OAAO,CAAC;;AAEtE;;AC7FK,SAAU,mBAAmB,CAAC,QAAkC,EAAA;IACpE,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAG9B,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3D,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGlC,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,MAAM,SAAS,GAAG,QAAQ,EAAE;AAE5B,QAAA,IAAI,SAAS,YAAY,OAAO,EAAE;AAChC,YAAA,OAAO,SAAS;;AAGlB,QAAA,OAAO,mBAAmB,CAAC,SAAS,CAAC;;AAGvC,IAAA,MAAM,KAAK,CAAC,mBAAmB,CAAC;AAClC;AAEM,SAAU,aAAa,CAAC,QAAqB,EAAA;AACjD,IAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGlC,IAAA,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AAClC,QAAA,MAAM,GAAG,GAAG,QAAQ,EAAE;AAEtB,QAAA,IAAI,GAAG,YAAY,OAAO,EAAE;AAC1B,YAAA,OAAO,GAAG;;AAGZ,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;AAG3B,IAAA,MAAM,KAAK,CAAC,aAAa,CAAC;AAC5B;AAEM,SAAU,aAAa,CAAC,QAA0B,EAAA;IACtD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,KAAI;QACtC,QAAQ,IAAI;YACV,KAAK,OAAO,OAAO,KAAK,QAAQ;AAC9B,gBAAA,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM;YAC7B,KAAK,OAAO,YAAY,IAAI;AAC1B,gBAAA,OAAO,GAAG,GAAG,OAAO,CAAC,IAAI;AAC3B,YAAA;AACE,gBAAA,OAAO,GAAG,GAAG,OAAO,CAAC,UAAU;;KAEpC,EAAE,CAAC,CAAC;AACP;AAEM,SAAU,WAAW,CAAC,IAAa,EAAA;IACvC,OAAO,IAAI,YAAY,SAAS;AAClC;AAEM,SAAU,iBAAiB,CAAC,IAAa,EAAA;IAC7C,OAAO,IAAI,YAAY,eAAe;AACxC;;AC3DA,MAAM,YAAY,GAAG,MAAM;AAC3B,MAAM,YAAY,GAAG,MAAM;AAE3B,MAAM,OAAO,GAAG;AACd,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,oBAAoB,EAAE,MAAM;AAC5B,IAAA,2BAA2B,EAAE,GAAG;IAChC,UAAU,EAAE,MAAM,CAAC,iBAAiB;IACpC,mBAAmB,EAAE,MAAM,CAAC,iBAAiB;IAC7C,oBAAoB,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI;CACvB;MAIf,gBAAgB,CAAA;AAG3B,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;AAGhC,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;AAGnC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;AAGpC,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;AAGrC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;;AAGtC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;;AAGtC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;;AAGvC,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;;AAG5C,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC;;AAG9C,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;;AAG/C,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;;AAG/C,IAAA,IAAI,2BAA2B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC;;AAG/C,IAAA,IAAI,WAAW,GAAA;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,YAAY,QAAQ,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;;AAGpC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,YAAY;;AAGnD,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI;;;AAGzC,IAAA,WAAA,CAAY,OAAgC,EAAA;QAC1C,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;;;AAI3B,IAAA,SAAS,CAAC,OAAa,EAAA;QACrB,IAAI,IAAI,CAAC,QAAQ,EAAE,SAAS,YAAY,QAAQ,EAAE;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;;AAGzC,QAAA,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,OAAO,OAAO;;QAGhB,OAAO,OAAO,OAAO,KAAK;AACxB,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO;cACtB,OAAO;;AAGb,IAAA,WAAW,CAAC,OAAwB,EAAA;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,YAAY,QAAQ,EAAE;YAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;;AAG3C,QAAA,OAAO,OAAoC;;AAG7C,IAAA,aAAa,CAAC,OAAgB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,OAAO,KAAK;;QAGd,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,YAAY,QAAQ,EAAE;YACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;;QAG7C,OAAO,OAAO,KAAK,YAAY;;AAGjC,IAAA,MAAM,CAAC,OAAe,EAAE,GAAG,IAAe,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf;;QAGF,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,YAAY,QAAQ,EAAE;YAC7C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;;QAGxC,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC;AAEpD,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;;AAG/B,QAAA,OAAO,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;AAChC,QAAA,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QACrB,OAAO,CAAC,QAAQ,EAAE;;AAGZ,IAAA,SAAS,CAAkC,GAAM,EAAA;AACvD,QAAA,QAAQ,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC;;AAE/C;AAED,SAAS,cAAc,CAAC,KAAc,EAAA;IACpC,OAAO,KAAK,YAAY,WAAW,IAAI,KAAK,YAAY,IAAI,KAAK,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/G;;AChJM,MAAO,YAAgD,SAAQ,mBAA4B,CAAA;AAC/F,IAAA,WAAW,UAAU,GAAA;QACnB,OAAO,SAAS,CAAC,UAAU;;AAG7B,IAAA,WAAW,IAAI,GAAA;QACb,OAAO,SAAS,CAAC,IAAI;;AAGvB,IAAA,WAAW,OAAO,GAAA;QAChB,OAAO,SAAS,CAAC,OAAO;;AAG1B,IAAA,WAAW,MAAM,GAAA;QACf,OAAO,SAAS,CAAC,MAAM;;AAoBzB,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,YAAY,CAAC,UAAU;;AAGhC,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,YAAY,CAAC,IAAI;;AAG1B,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,YAAY,CAAC,OAAO;;AAG7B,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,YAAY,CAAC,MAAM;;IAG5B,IAAI,UAAU,CAAC,IAAgB,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI;;;AAIrC,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;;AAGrF,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,EAAE;;AAGhE,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,EAAE;;AAGvE,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,EAAE;;AAGrE,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;;AAG1C,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAChC,YAAA,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU;;AAGnC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC;cACjB,YAAY,CAAC;AACf,cAAE,YAAY,CAAC,UAAU;;AAG7B,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IACtC,WAAW,CAAC,IAAI,CAAC,UAAU;AACzB,cAAE,IAAI,CAAC,UAAU,CAAC;cAChB,CAAC,CACN;;AAGH,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE;AAC7B,YAAA,OAAO,CAAC;;AAGV,QAAA,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,2BAA2B,EAC9E,IAAI,CAAC,eAAe,GAAG,CAAC,CACzB,EACD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC;;IAGvC,WAAY,CAAA,GAAgB,EAAE,OAAgC,EAAA;AAC5D,QAAA,KAAK,EAAE;QAvFD,IAAe,CAAA,eAAA,GAAG,CAAC;QACnB,IAAY,CAAA,YAAA,GAAG,KAAK;QACpB,IAAY,CAAA,YAAA,GAAG,KAAK;QACpB,IAAgB,CAAA,gBAAA,GAAG,IAAI;QACvB,IAAW,CAAA,WAAA,GAAe,MAAM;QAChC,IAAa,CAAA,aAAA,GAAqB,EAAE;AAmF1C,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAgB,OAAO,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;AAC7B,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;QAG/B,IAAI,CAAC,QAAQ,EAAE;;AAGjB,IAAA,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,MAAe,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QAC7B,IAAI,CAAC,cAAc,EAAE;QAErB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qCAAqC,CAAC;;QAGpE,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE;YAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iCAAiC,CAAC;;QAGhE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;;IAGrC,SAAS,CAAC,IAAa,EAAE,MAAe,EAAA;AACtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AAExB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,EAAE;AAC/E,YAAA,OAAO,IAAI,CAAC,QAAQ,EAAE;;AAGxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,QAAQ,EAAE;;AAGjB,IAAA,IAAI,CAAC,IAAU,EAAA;QACb,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC;AAE1C,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC;AAEhD,YAAA,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE;gBAC5E,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;;AAGzC,YAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;gBACjE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC;AAC7C,gBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;;;QAErC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;;IAK7C,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/C;;AAGF,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAExB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;;AAGlC,QAAA,IAAI,CAAC,eAAe,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5E,IAAI,CAAC,gBAAgB,EAAE;QAEvB,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC;AACtB,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS;AAC5C,SAAA,CAAC;AACD,aAAA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,KACrB,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC;AAExC,aAAA,KAAK,CAAC,CAAC,KAAY,KAAI;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAChE,SAAC,CAAC;;AAGE,IAAA,WAAW,CAAC,IAAI,GAAG,IAAI,EAAE,MAAe,EAAA;QAC9C,IAAI,CAAC,cAAc,EAAE;QAErB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACjC;;QAGF,IAAI,CAAC,gBAAgB,EAAE;AAEvB,QAAA,IAAI;YACF,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;gBAC9F,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;;AAGrC,YAAA,IAAI,MAAM,KAAkC,sBAAA,wCAAI,MAAM,KAAA,gBAAA,gCAA8B;gBAClF,IAAI,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAClD,gBAAA,IAAI;;YAGN,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;;QACtD,MAAM;;IAGF,kBAAkB,CAAC,GAAW,EAAE,SAAmC,EAAA;AACzE,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;YACzB;;AAGF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,SAAS,IAAI,SAAS,CAAC;QAE5D,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;AAC7C,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,eAAe,EAAE;AAEtB,QAAA,IAAI,CAAC,iBAAiB,GAAG,UAAU,CACjC,MAAM,IAAI,CAAC,wBAAwB,EAAE,EACrC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAChC;;IAGK,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CACrC,KAAK,CAAA,sBAAA,qCAA+B,CACrC,CAAC;;IAGI,eAAe,GAAA;AACrB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AACtC,SAAC,CAAC;;AAGI,IAAA,YAAY,CAAC,KAAY,EAAA;QAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC;AACzC,QAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAEpC,QAAA,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAChC,MAAM,IAAI,CAAC,uBAAuB,EAAE,EACpC,IAAI,CAAC,QAAQ,CAAC,SAAS,CACxB;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACjC,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;;QAG5C,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW;QAE7C,IAAI,CAAC,UAAU,EAAE;AAEjB,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,UAAU,EAAE;;AAGnB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,eAAe,EAAE,CAAC;;AAGnC,IAAA,aAAa,CAAC,KAAuB,EAAA;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,QAAQ,EAAE;;AAGjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;;AAG5D,IAAA,aAAa,CAAC,KAAuB,EAAA;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC;QAE1C,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;QAE1C,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,EAAE;;AAGT,IAAA,eAAe,CAAC,KAAuC,EAAA;QAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;AAC5C,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YAE1D,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;gBAC7C,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,uBAAuB,EAAE;;AAGhC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;QAC7D,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,YAAY,KAAK,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;;;;IAK7C,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YACpE;;AAGF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE;YAC1C,QAAQ,EAAE,IAAI,CAAC,aAAa;AAC7B,SAAA,CAAC;AAEF,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,aAAa,EAAE;AACxC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;AAG/B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;;IAGjB,UAAU,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAEzC,QAAA,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE;AAC7E,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;QAE/B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,MAAK;YACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACjC;;AAGF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;AAE7B,YAAA,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB;;AAGF,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAC9B,MAAK;AACH,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;gBACpC,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAgB,CACrC,KAAK,CAAA,gBAAA,+BAAyB,CAC/B,CAAC;AACJ,aAAC,EACD,IAAI,CAAC,QAAQ,CAAC,WAAW,CAC1B;AACH,SAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;;IAGxB,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAG;AAC3C,YAAA,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;YACpC,cAAc,EAAE,IAAI,CAAC,eAAe;AACrC,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,yBAAyB,EAAE,CAAC;;IAG7C,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,0BAA0B,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;;;IAIpB,gBAAgB,GAAA;QACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YAC7C;;AAGF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC;AAC/C,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;;IAGvB,eAAe,GAAA;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE;;AAErC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,wBAAwB,CAAC;AAE9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE;AAE7C,QAAA,MAAM,OAAO,GAA4B;AACvC,YAAA,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM;SACrC;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AAC/E,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AACjF,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;AACjF,QAAA,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;;IAG/E,cAAc,GAAA;AACpB,QAAA,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC;AACpC,QAAA,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,kBAAkB,EAAE;;IAGnB,iBAAiB,GAAA;AACvB,QAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;;IAGzB,kBAAkB,GAAA;AACxB,QAAA,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;;AAEnC;;ACjbD;;AAEG;;ACFH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"sevtech-client-websocket.mjs","sources":["../../../projects/client-websocket/src/lib/events.ts","../../../projects/client-websocket/src/lib/helpers.ts","../../../projects/client-websocket/src/lib/websocket-options.ts","../../../projects/client-websocket/src/lib/websocket.ts","../../../projects/client-websocket/src/public-api.ts","../../../projects/client-websocket/src/sevtech-client-websocket.ts"],"sourcesContent":["const enum EventName {\n Open = 'open',\n Error = 'error',\n Close = 'close',\n Message = 'message',\n Timeout = 'timeout',\n PermanentClose = 'permanentClose',\n}\n\ninterface EventsMap<T = unknown> {\n [EventName.Open]: SocketOpenEvent;\n [EventName.Error]: SocketErrorEvent;\n [EventName.Close]: SocketCloseEvent;\n [EventName.Message]: SocketMessageEvent<T>;\n [EventName.Timeout]: SocketTimeoutEvent;\n [EventName.PermanentClose]: SocketPermanentCloseEvent;\n}\n\nexport class SocketOpenEvent extends Event {\n constructor() {\n super(EventName.Open);\n }\n}\n\nexport class SocketCloseEvent extends CloseEvent {\n constructor(code: number, reason?: string) {\n super(EventName.Close, {\n code,\n reason,\n wasClean: true\n });\n }\n}\n\nexport class SocketErrorEvent extends Event {\n readonly error?: Error;\n readonly message?: string;\n\n constructor(error?: Error) {\n super(EventName.Error);\n this.error = error;\n this.message = error?.message ?? '[UNKNOWN ERROR]';\n }\n}\n\nexport class SocketMessageEvent<T> extends Event implements Omit<MessageEventInit<T>, 'data'> {\n readonly message: T;\n readonly lastEventId?: string\n readonly origin?: string\n readonly ports?: MessagePort[]\n readonly source?: MessageEventSource | null\n\n constructor(message: T, options: Omit<MessageEventInit<T>, 'data'>) {\n super(EventName.Message);\n\n this.message = message;\n this.ports = options.ports;\n this.source = options.source\n this.origin = options.origin;\n this.lastEventId = options.lastEventId;\n }\n}\n\nexport class SocketTimeoutEvent extends Event {\n reason?: string;\n constructor(reason: string) {\n super(EventName.Timeout);\n this.reason = reason;\n }\n}\n\nexport class SocketPermanentCloseEvent extends Event {\n constructor() {\n super(EventName.PermanentClose);\n }\n}\n\nexport class InternalEventTarget<T, E extends EventsMap<T> = EventsMap<T>> extends EventTarget {\n // @ts-ignore\n override addEventListener<K extends keyof E>(\n type: `${K & string}`,\n callback: (event: E[K]) => void,\n options?: AddEventListenerOptions | boolean\n ): void {\n super.addEventListener(type, callback as EventListener, options);\n }\n\n // @ts-ignore\n removeEventListener<K extends keyof E>(\n type: `${K & string}`,\n callback: (event: E[K]) => void,\n options?: boolean | AddEventListenerOptions\n ): void {\n super.removeEventListener(type, callback as EventListener, options);\n }\n}\n","import { ProtocolsProvider, ReceiveMessage, UrlProvider } from './types';\n\nexport function selectNextProtocols(provider: ProtocolsProvider | null): Promise<string | string[] | null> {\n if (!provider) {\n return Promise.resolve(null);\n }\n\n if (typeof provider === 'string' || Array.isArray(provider)) {\n return Promise.resolve(provider);\n }\n\n if (typeof provider === 'function') {\n const protocols = provider();\n\n if (protocols instanceof Promise) {\n return protocols;\n }\n\n return selectNextProtocols(protocols);\n }\n\n throw Error('Invalid protocols');\n}\n\nexport function selectNextUrl(provider: UrlProvider): Promise<string> {\n if (typeof provider === 'string') {\n return Promise.resolve(provider);\n }\n\n if (typeof provider === 'function') {\n const url = provider();\n\n if (url instanceof Promise) {\n return url;\n }\n\n return selectNextUrl(url);\n }\n\n throw Error('Invalid URL');\n}\n\nexport function calcBytesSize(messages: ReceiveMessage[]): number {\n return messages.reduce((acc, message) => {\n switch (true) {\n case typeof message === 'string':\n return acc + message.length;\n case message instanceof Blob:\n return acc + message.size;\n default:\n return acc + message.byteLength;\n }\n }, 0);\n}\n\nexport function isWebSocket(data: unknown): data is WebSocket {\n return data instanceof WebSocket;\n}\n\nexport function isAbortController(data: unknown): data is AbortController {\n return data instanceof AbortController\n}\n","import { BufferedMessage, Options, ProtocolsProvider, ReceiveMessage } from './types';\n\nconst PONG_MESSAGE = 'pong';\nconst PING_MESSAGE = 'ping';\n\nconst OPTIONS = {\n debug: false,\n pingPong: false,\n minUptime: 5000,\n pongTimeout: 5000,\n pingInterval: 1000,\n startClosed: false,\n connectionTimeout: 4000,\n maxReconnectionDelay: 10_000,\n reconnectionDelayGrowFactor: 1.3,\n maxRetries: Number.POSITIVE_INFINITY,\n maxEnqueuedMessages: Number.POSITIVE_INFINITY,\n minReconnectionDelay: 1000 + Math.random() * 4000,\n} as const satisfies Options;\n\ntype RequiredOptions = Required<Pick<Options, keyof typeof OPTIONS>>;\n\nexport class WebSocketOptions<Send = unknown, Receive = unknown> implements Options<Send, Receive> {\n private readonly _options?: Options<Send, Receive>;\n\n get debug(): boolean {\n return this.getOption('debug');\n }\n\n get pingPong(): boolean {\n return this.getOption('pingPong');\n }\n\n get minUptime(): number {\n return this.getOption('minUptime');\n }\n\n get maxRetries(): number {\n return this.getOption('maxRetries');\n }\n\n get pongTimeout(): number {\n return this.getOption('pongTimeout');\n }\n\n get startClosed(): boolean {\n return this.getOption('startClosed');\n }\n\n get pingInterval(): number {\n return this.getOption('pingInterval');\n }\n\n get connectionTimeout(): number {\n return this.getOption('connectionTimeout');\n }\n\n get maxEnqueuedMessages(): number {\n return this.getOption('maxEnqueuedMessages');\n }\n\n get minReconnectionDelay(): number {\n return this.getOption('minReconnectionDelay');\n }\n\n get maxReconnectionDelay(): number {\n return this.getOption('maxReconnectionDelay');\n }\n\n get reconnectionDelayGrowFactor(): number {\n return this.getOption('minReconnectionDelay');\n }\n\n get pingMessage(): ReceiveMessage {\n if (this._options?.pingMessage instanceof Function) {\n return this._options.pingMessage()\n }\n\n return this._options?.pingMessage ?? PING_MESSAGE;\n }\n\n get protocols(): ProtocolsProvider | null {\n return this._options?.protocols ?? null;\n };\n\n constructor(options?: Options<Send, Receive>) {\n if (options) {\n this._options = options;\n }\n }\n\n serialize(message: Send): ReceiveMessage {\n if (this._options?.serialize instanceof Function) {\n return this._options.serialize(message);\n }\n\n if (isBufferedData(message)) {\n return message;\n }\n\n return typeof message !== 'string'\n ? JSON.stringify(message)\n : message;\n }\n\n deserialize(message: ReceiveMessage): Receive | BufferedMessage {\n if (this._options?.deserialize instanceof Function) {\n return this._options.deserialize(message);\n }\n\n return message as Receive | BufferedMessage;\n }\n\n isPongMessage(message: unknown): boolean {\n if (!this.pingPong) {\n return false;\n }\n\n if (this._options?.isPongMessage instanceof Function) {\n return this._options.isPongMessage(message);\n }\n\n return message === PONG_MESSAGE;\n }\n\n logger(message: string, ...args: unknown[]): void {\n if (!this.debug) {\n return;\n }\n\n if (this._options?.logger instanceof Function) {\n this._options.logger(message, ...args);\n }\n\n const label = ['%c[WS]:', 'color: #0094FF', message];\n\n if (args.length === 0) {\n return console.info(...label);\n }\n\n console.groupCollapsed(...label);\n console.info(...args)\n console.groupEnd();\n }\n\n private getOption<K extends keyof RequiredOptions>(key: K): RequiredOptions[K] {\n return (this._options?.[key] ?? OPTIONS[key]) as RequiredOptions[K];\n }\n}\n\nfunction isBufferedData(value: unknown): value is ArrayBuffer | Blob | ArrayBufferView {\n return value instanceof ArrayBuffer || value instanceof Blob || (ArrayBuffer.isView(value) && value !== null);\n}\n","import {\n InternalEventTarget, SocketCloseEvent, SocketErrorEvent, SocketMessageEvent, SocketOpenEvent,\n SocketPermanentCloseEvent, SocketTimeoutEvent,\n} from './events';\nimport { calcBytesSize, isAbortController, isWebSocket, selectNextProtocols, selectNextUrl } from './helpers';\nimport { ErrorCode, ErrorReason, Options, ReceiveMessage, UrlProvider } from './types';\nimport { WebSocketOptions } from './websocket-options';\n\nexport class ClientSocket<Send = unknown, Receive = unknown> extends InternalEventTarget<Receive> {\n static get CONNECTING(): typeof WebSocket.CONNECTING {\n return WebSocket.CONNECTING;\n }\n\n static get OPEN(): typeof WebSocket.OPEN {\n return WebSocket.OPEN;\n }\n\n static get CLOSING(): typeof WebSocket.CLOSING {\n return WebSocket.CLOSING;\n }\n\n static get CLOSED(): typeof WebSocket.CLOSED {\n return WebSocket.CLOSED;\n }\n\n private readonly _url: UrlProvider;\n private readonly _options: WebSocketOptions<Send, Receive>;\n\n private _websocket?: WebSocket;\n private _abortController?: AbortController;\n private _uptimeTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _connectTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _pongTimeoutId: ReturnType<typeof setTimeout> | undefined;\n private _pingIntervalId: ReturnType<typeof setInterval> | undefined;\n\n private _reconnectCount = 0;\n private _connectLock = false;\n private _closeCalled = false;\n private _shouldReconnect = true;\n private _binaryType: BinaryType = 'blob';\n private _messageQueue: ReceiveMessage[] = [];\n\n get CONNECTING(): typeof ClientSocket.CONNECTING {\n return ClientSocket.CONNECTING;\n }\n\n get OPEN(): typeof ClientSocket.OPEN {\n return ClientSocket.OPEN;\n }\n\n get CLOSING(): typeof ClientSocket.CLOSING {\n return ClientSocket.CLOSING;\n }\n\n get CLOSED(): typeof ClientSocket.CLOSED {\n return ClientSocket.CLOSED;\n }\n\n set binaryType(type: BinaryType) {\n this._binaryType = type;\n\n if (isWebSocket(this._websocket)) {\n this._websocket.binaryType = type;\n }\n }\n\n get binaryType() {\n return isWebSocket(this._websocket) ? this._websocket.binaryType : this._binaryType;\n }\n\n get url(): string {\n return isWebSocket(this._websocket) ? this._websocket.url : '';\n }\n\n get extensions(): string {\n return isWebSocket(this._websocket) ? this._websocket.extensions : '';\n }\n\n get protocol(): string {\n return isWebSocket(this._websocket) ? this._websocket.protocol : '';\n }\n\n get retryCount(): number {\n return Math.max(this._reconnectCount, 0);\n }\n\n get shouldReconnect(): boolean {\n return this._shouldReconnect;\n }\n\n get readyState(): number {\n if (isWebSocket(this._websocket)) {\n return this._websocket.readyState;\n }\n\n return this._options.startClosed\n ? ClientSocket.CLOSED\n : ClientSocket.CONNECTING;\n }\n\n get bufferedAmount(): number {\n return calcBytesSize(this._messageQueue) + (\n isWebSocket(this._websocket)\n ? this._websocket.bufferedAmount\n : 0\n );\n }\n\n private get _nextDelay(): number {\n if (this._reconnectCount <= 0) {\n return 0;\n }\n\n return Math.min(\n Math.pow(\n this._options.minReconnectionDelay * this._options.reconnectionDelayGrowFactor,\n this._reconnectCount - 1\n ),\n this._options.maxReconnectionDelay);\n }\n\n constructor(url: UrlProvider, options?: Options<Send, Receive>) {\n super();\n this._url = url;\n this._options = new WebSocketOptions<Send, Receive>(options);\n\n if (this._options.startClosed) {\n this._shouldReconnect = false;\n }\n\n this._connect();\n }\n\n close(code = 1000, reason?: string): void {\n this._closeCalled = true;\n this._shouldReconnect = false;\n this._clearTimeouts();\n\n if (!isWebSocket(this._websocket)) {\n return this._options.logger('Cannot close WebSocket. No instance');\n }\n\n if (this._websocket.readyState === this.CLOSED) {\n return this._options.logger('Close. WebSocket already closed');\n }\n\n this._websocket.close(code, reason);\n }\n\n reconnect(code?: number, reason?: string): void {\n this._shouldReconnect = true;\n this._closeCalled = false;\n this._reconnectCount = 0;\n\n if (!isWebSocket(this._websocket) || this._websocket.readyState === this.CLOSED) {\n return this._connect();\n }\n\n this._disconnect(code, reason);\n this._connect();\n }\n\n send(data: Send): void {\n this._options.logger('Send message', data);\n\n try {\n const serialized = this._options.serialize(data);\n\n if (isWebSocket(this._websocket) && this._websocket.readyState === this.OPEN) {\n return this._websocket.send(serialized);\n }\n\n if (this._messageQueue.length < this._options.maxEnqueuedMessages) {\n this._options.logger('Enqueue message', data);\n this._messageQueue.push(serialized);\n }\n } catch (error) {\n if (error instanceof Error) {\n this.dispatchEvent(new SocketErrorEvent(error));\n }\n }\n }\n\n private _connect(): void {\n if (this._connectLock || !this._shouldReconnect) {\n return;\n }\n\n this._connectLock = true;\n\n if (this._reconnectCount >= this._options.maxRetries) {\n return this._maxRetriesHandler();\n }\n\n this._reconnectCount += 1;\n this._options.logger('Connection', { reconnectCount: this._reconnectCount });\n this._removeListeners();\n\n this._waitConnection()\n .then(() => Promise.all([\n selectNextUrl(this._url),\n selectNextProtocols(this._options.protocols)\n ]))\n .then(([url, protocols]) =>\n this._connectionHandler(url, protocols)\n )\n .catch((error: Error) => {\n this._connectLock = false;\n this._errorHandler(new SocketErrorEvent(Error(error.message)));\n });\n }\n\n private _disconnect(code = 1000, reason?: string): void {\n this._clearTimeouts();\n\n if (!isWebSocket(this._websocket)) {\n return;\n }\n\n this._removeListeners();\n\n try {\n if (this._websocket.readyState === this.OPEN || this._websocket.readyState === this.CONNECTING) {\n this._websocket.close(code, reason);\n }\n\n if (reason === ErrorReason.ConnectionTimeout || reason === ErrorReason.PongTimeout) {\n this.dispatchEvent(new SocketTimeoutEvent(reason));\n code = ErrorCode.Timeout;\n }\n\n this._closeHandler(new SocketCloseEvent(code, reason));\n } catch {}\n }\n\n private _connectionHandler(url: string, protocols: string | string[] | null): void {\n if (this._closeCalled) {\n this._connectLock = false;\n return;\n }\n\n this._options.logger('Connect', { url, protocols });\n this._websocket = new WebSocket(url, protocols ?? undefined);\n\n this._websocket.binaryType = this._binaryType;\n this._connectLock = false;\n this._setupListeners();\n\n this._connectTimeoutId = setTimeout(\n () => this._handleConnectionTimeout(),\n this._options.connectionTimeout\n );\n }\n\n private _handleConnectionTimeout(): void {\n this._options.logger('Connection timeout');\n this._errorHandler(new SocketErrorEvent(\n Error(ErrorReason.ConnectionTimeout)\n ));\n }\n\n private _waitConnection(): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, this._nextDelay);\n });\n }\n\n private _openHandler(event: Event): void {\n this._options.logger('Open event', event);\n clearTimeout(this._connectTimeoutId);\n\n this._uptimeTimeoutId = setTimeout(\n () => this._clearReconnectionCount(),\n this._options.minUptime\n );\n\n if (!isWebSocket(this._websocket)) {\n throw new Error('WebSocket not supported');\n }\n\n this._websocket.binaryType = this._binaryType;\n\n this._sendQueue();\n\n if (this._options.pingPong) {\n this._startPing();\n }\n\n this.dispatchEvent(new SocketOpenEvent());\n }\n\n private _closeHandler(event: SocketCloseEvent): void {\n this._options.logger('Close event', event);\n this._clearTimeouts();\n\n if (this._shouldReconnect) {\n this._connect();\n }\n\n this.dispatchEvent(new SocketCloseEvent(event.code, event.reason));\n }\n\n private _errorHandler(event: SocketErrorEvent): void {\n this._options.logger('Error event', event);\n\n this._disconnect(undefined, event.message);\n\n this.dispatchEvent(new SocketErrorEvent(event.error));\n this._connect();\n }\n\n private _messageHandler(event: MessageEventInit<ReceiveMessage>): void {\n try {\n const deserialized = this._options.deserialize(event.data as ReceiveMessage);\n this._options.logger('Message event', { message: deserialized });\n\n if (this._options.isPongMessage(deserialized)) {\n this._clearPongTimeout();\n this._clearReconnectionCount();\n }\n\n this.dispatchEvent(new SocketMessageEvent(deserialized, event));\n } catch (error) {\n if (error instanceof Error) {\n this.dispatchEvent(new SocketErrorEvent(error));\n }\n }\n }\n\n private _sendQueue(): void {\n if (!isWebSocket(this._websocket) || this._messageQueue.length === 0) {\n return;\n }\n\n this._options.logger('Send queue messages', {\n messages: this._messageQueue,\n });\n\n for (const message of this._messageQueue) {\n this._websocket.send(message)\n }\n\n this._messageQueue = [];\n }\n\n private _startPing(): void {\n const message = this._options.pingMessage;\n\n if (isWebSocket(this._websocket) && this._websocket?.readyState === this.OPEN) {\n this._websocket.send(message);\n }\n this._options.logger('Start ping', { message });\n this._pingIntervalId = setInterval(() => {\n if (!isWebSocket(this._websocket)) {\n return;\n }\n\n this._websocket.send(message);\n\n if (this._pongTimeoutId) {\n return;\n }\n\n this._pongTimeoutId = setTimeout(\n () => {\n this._options.logger('Pong timeout');\n this._errorHandler(new SocketErrorEvent(\n Error(ErrorReason.PongTimeout)\n ));\n },\n this._options.pongTimeout,\n );\n }, this._options.pingInterval);\n }\n\n private _maxRetriesHandler(): void {\n this._options.logger('Max retries reached' , {\n maxRetries: this._options.maxRetries,\n reconnectCount: this._reconnectCount,\n });\n\n this.dispatchEvent(new SocketPermanentCloseEvent());\n }\n\n private _clearReconnectionCount(): void {\n this._options.logger('Clear reconnection count');\n if (!this._pongTimeoutId) {\n this._reconnectCount = 0;\n }\n }\n\n private _removeListeners(): void {\n if (!isAbortController(this._abortController)) {\n return;\n }\n\n this._options.logger('Remove native listeners');\n this._abortController.abort();\n }\n\n private _setupListeners(): void {\n if (!isWebSocket(this._websocket)) { return; }\n\n this._options.logger('Setup native listeners');\n\n this._abortController = new AbortController();\n\n const options: AddEventListenerOptions = {\n signal: this._abortController.signal,\n };\n\n this._websocket.addEventListener('open', this._openHandler.bind(this), options);\n this._websocket.addEventListener('close', this._closeHandler.bind(this), options);\n this._websocket.addEventListener('error', this._errorHandler.bind(this), options);\n this._websocket.addEventListener('message', this._messageHandler.bind(this), options);\n }\n\n private _clearTimeouts(): void {\n clearTimeout(this._connectTimeoutId);\n clearTimeout(this._uptimeTimeoutId);\n this._clearPongTimeout();\n this._clearPingInterval();\n }\n\n private _clearPongTimeout(): void {\n clearTimeout(this._pongTimeoutId);\n this._pongTimeoutId = undefined;\n }\n\n private _clearPingInterval(): void {\n clearInterval(this._pingIntervalId);\n this._pingIntervalId = undefined;\n }\n}\n","/*\n * Public API Surface of client-websocket\n */\n\nexport {\n ClientSocket,\n} from './lib/websocket';\n\nexport {\n SocketErrorEvent,\n SocketMessageEvent,\n SocketOpenEvent,\n SocketPermanentCloseEvent,\n SocketTimeoutEvent,\n SocketCloseEvent,\n} from './lib/events';\n\nexport type {\n Options as SocketOptions,\n UrlProvider as SocketUrlProvider,\n ProtocolsProvider as SocketProtocolsProvider,\n} from './lib/types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface Options<Send = unknown, Receive = ReceiveMessage> {
|
|
|
27
27
|
logger?: (message: string, ...args: unknown[]) => void;
|
|
28
28
|
serialize?: (value: Send) => ReceiveMessage;
|
|
29
29
|
isPongMessage?: (message: unknown) => boolean;
|
|
30
|
-
deserialize?: (message
|
|
30
|
+
deserialize?: (message: ReceiveMessage) => Receive | BufferedMessage;
|
|
31
31
|
pingMessage?: (() => ReceiveMessage) | ReceiveMessage;
|
|
32
32
|
}
|
|
33
33
|
export {};
|
|
@@ -17,7 +17,7 @@ export declare class WebSocketOptions<Send = unknown, Receive = unknown> impleme
|
|
|
17
17
|
get protocols(): ProtocolsProvider | null;
|
|
18
18
|
constructor(options?: Options<Send, Receive>);
|
|
19
19
|
serialize(message: Send): ReceiveMessage;
|
|
20
|
-
deserialize(message
|
|
20
|
+
deserialize(message: ReceiveMessage): Receive | BufferedMessage;
|
|
21
21
|
isPongMessage(message: unknown): boolean;
|
|
22
22
|
logger(message: string, ...args: unknown[]): void;
|
|
23
23
|
private getOption;
|