@webex/internal-plugin-mercury 3.9.0 → 3.10.0-multi-llms.1

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.
@@ -1 +1 @@
1
- {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","Error","stack","device","registered","register","then","_connectWithBackoff","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","reason","options","_this3","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this4","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","refresh","catch","_this5$backoffCall","_this5$backoffCall3","getNumRetries","_this5$backoffCall2","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this6","call","onComplete","err","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n @oneFlight\n disconnect(options) {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close(options || undefined));\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('pong', (...args) => this._setTimeOffset(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall?.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall?.getNumRetries()});\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed`,\n reason,\n this.backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket disconnected; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n this._setTimeOffset(event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","i","F","s","n","done","value","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","defaultSessionId","session","connected","type","connecting","hasEverConnected","sockets","_default","_map","backoffCalls","_shutdownSwitchoverBackoffCalls","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","_this$webex$internal$","services","switchActiveClusterIds","_envelope$data","activeClusters","_this$webex$internal$2","invalidateCache","_envelope$data2","timestamp","_attachSocketEventListeners","socket","sessionId","_this2","event","_onclose","_len","args","_key","_onmessage","concat","_len2","_key2","_setTimeOffset","_len3","_key3","_emit","_len4","_key4","_handleImminentShutdown","_this3","oldSocket","get","logger","info","_shutdownSwitchoverId","_now","_connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","hasConnectedSockets","url","then","catch","reason","error","delete","getLastError","getSockets","getSocket","_iterator","values","_step","hasConnectingSockets","_iterator2","_step2","connect","_this4","_connectPromises","has","sessionSocket","_promise","resolve","Error","stack","connectPromise","device","registered","register","finally","set","logout","disconnectAll","config","beforeLogoutOptionsCloseReason","includes","code","disconnect","options","_this5","backoffCall","abort","shutdownSwitchoverBackoffCalls","suffix","removeAllListeners","once","close","_this6","disconnectPromises","_iterator3","keys","_step3","all","clear","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","headers","headerKeys","_keys","keyPath","_prepareUrl","_this7","getFeature","haMessagingEnabled","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","multipleConnections","clientTimestamp","format","_attemptConnection","socketUrl","callback","_this8","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","msg","reject","_prepareAndOpenSocket","refresh","getNumRetries","retries","UnknownResponse","NotAuthorized","credentials","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","_this9","logPrefix","getUserToken","_ref","_ref2","_slicedToArray2","token","forceCloseDelay","pingInterval","pongTimeout","trackingId","defaultMercuryOptions","customOptionsMsg","open","_this10","context","_context$isShutdownSw","_context$attemptOptio","onComplete","sid","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","attemptNum","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len5","_key5","first","second","rest","eventName","trigger","_toConsumableArray2","logError","console","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","handlers","handlerName","camelCase","sourceSocket","toLowerCase","isActiveSocket","_reconnect","_this11","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default2","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n defaultSessionId: 'mercury-default-session',\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n sockets: {\n default: () => new Map(),\n type: 'object',\n },\n backoffCalls: {\n default: () => new Map(),\n type: 'object',\n },\n _shutdownSwitchoverBackoffCalls: {\n default: () => new Map(),\n type: 'object',\n },\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n /*\n * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations\n * */\n this.on('event:ActiveClusterStatusEvent', (envelope) => {\n if (\n typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);\n }\n });\n /*\n * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications\n * */\n this.on('event:u2c.cache-invalidation', (envelope) => {\n if (\n typeof this.webex.internal.services?.invalidateCache === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.invalidateCache(envelope.data?.timestamp);\n }\n });\n },\n\n /**\n * Attach event listeners to a socket.\n * @param {Socket} socket - The socket to attach listeners to\n * @param {sessionId} sessionId - The socket related session ID\n * @returns {void}\n */\n _attachSocketEventListeners(socket, sessionId) {\n socket.on('close', (event) => this._onclose(sessionId, event, socket));\n socket.on('message', (...args) => this._onmessage(sessionId, ...args));\n socket.on('pong', (...args) => this._setTimeOffset(sessionId, ...args));\n socket.on('sequence-mismatch', (...args) =>\n this._emit(sessionId, 'sequence-mismatch', ...args)\n );\n socket.on('ping-pong-latency', (...args) =>\n this._emit(sessionId, 'ping-pong-latency', ...args)\n );\n },\n\n /**\n * Handle imminent shutdown by establishing a new connection while keeping\n * the current one alive (make-before-break).\n * Idempotent: will no-op if already in progress.\n * @param {string} sessionId - The session ID for which the shutdown is imminent\n * @returns {void}\n */\n _handleImminentShutdown(sessionId) {\n const oldSocket = this.sockets.get(sessionId);\n\n try {\n if (this._shutdownSwitchoverBackoffCalls.get(sessionId)) {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover already in progress for ${sessionId}`\n );\n\n return;\n }\n this._shutdownSwitchoverId = `${Date.now()}`;\n this.logger.info(\n `${this.namespace}: [shutdown] switchover start, id=${this._shutdownSwitchoverId} for ${sessionId}`\n );\n\n this._connectWithBackoff(undefined, sessionId, {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, webSocketUrl) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover connected, url: ${webSocketUrl} for ${sessionId}`\n );\n\n // Atomically switch active socket reference\n this.socket = this.sockets.get(this.defaultSessionId) || newSocket;\n this.connected = this.hasConnectedSockets(); // remain connected throughout\n\n this._emit(sessionId, 'event:mercury_shutdown_switchover_complete', {\n url: webSocketUrl,\n });\n\n if (oldSocket) {\n this.logger.info(\n `${this.namespace}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover completed successfully for ${sessionId}`\n );\n })\n .catch((err) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover exhausted retries; will fall back to normal reconnection for ${sessionId}: `,\n err\n );\n this._emit(sessionId, 'event:mercury_shutdown_switchover_failed', {reason: err});\n // Old socket will eventually close with 4001, triggering normal reconnection\n });\n } catch (e) {\n this.logger.error(\n `${this.namespace}: [shutdown] error during switchover for ${sessionId}`,\n e\n );\n this._shutdownSwitchoverBackoffCalls.delete(sessionId);\n this._emit(sessionId, 'event:mercury_shutdown_switchover_failed', {reason: e});\n }\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n /**\n * Get all active socket connections\n * @returns {Map} Map of sessionId to socket instances\n */\n getSockets() {\n return this.sockets;\n },\n\n /**\n * Get a specific socket by connection ID\n * @param {string} sessionId - The connection identifier\n * @returns {Socket|undefined} The socket instance or undefined if not found\n */\n getSocket(sessionId = this.defaultSessionId) {\n return this.sockets.get(sessionId);\n },\n\n /**\n * Check if any sockets are connected\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectedSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connected) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Check if any sockets are connecting\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectingSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connecting) {\n return true;\n }\n }\n\n return false;\n },\n\n // @oneFlight\n connect(webSocketUrl, sessionId = this.defaultSessionId) {\n if (!this._connectPromises) this._connectPromises = new Map();\n\n // First check if there's already a connection promise for this session\n if (this._connectPromises.has(sessionId)) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already in progress, returning existing promise`\n );\n\n return this._connectPromises.get(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n if (sessionSocket?.connected || sessionSocket?.connecting) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already connected, will not connect again`\n );\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt for ${sessionId}`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n const connectPromise = Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n )\n .then(() => {\n this.logger.info(`${this.namespace}: connecting ${sessionId}`);\n\n return this._connectWithBackoff(webSocketUrl, sessionId);\n })\n .finally(() => {\n this._connectPromises.delete(sessionId);\n });\n\n this._connectPromises.set(sessionId, connectPromise);\n\n return connectPromise;\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnectAll(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n // @oneFlight\n disconnect(options, sessionId = this.defaultSessionId) {\n return new Promise((resolve) => {\n const backoffCall = this.backoffCalls.get(sessionId);\n if (backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection ${sessionId}`);\n backoffCall.abort();\n this.backoffCalls.delete(sessionId);\n }\n const shutdownSwitchoverBackoffCalls = this._shutdownSwitchoverBackoffCalls.get(sessionId);\n if (shutdownSwitchoverBackoffCalls) {\n this.logger.info(`${this.namespace}: aborting shutdown switchover connection ${sessionId}`);\n shutdownSwitchoverBackoffCalls.abort();\n this._shutdownSwitchoverBackoffCalls.delete(sessionId);\n }\n // Clean up any pending connection promises\n if (this._connectPromises) {\n this._connectPromises.delete(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n if (sessionSocket) {\n sessionSocket.removeAllListeners('message');\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n this.once(sessionId === this.defaultSessionId ? 'offline' : `offline${suffix}`, resolve);\n resolve(sessionSocket.close(options || undefined));\n }\n resolve();\n\n // Update overall connected status\n this.connected = this.hasConnectedSockets();\n });\n },\n\n /**\n * Disconnect all socket connections\n * @param {object} options - Close options\n * @returns {Promise} Promise that resolves when all connections are closed\n */\n disconnectAll(options) {\n const disconnectPromises = [];\n\n for (const sessionId of this.sockets.keys()) {\n disconnectPromises.push(this.disconnect(options, sessionId));\n }\n\n return Promise.all(disconnectPromises).then(() => {\n this.connected = false;\n this.sockets.clear();\n this.backoffCalls.clear();\n // Clear connection promises to prevent stale promises\n if (this._connectPromises) {\n this._connectPromises.clear();\n }\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, sessionId, callback, options = {}) {\n const {isShutdownSwitchover = false, onSuccess = null} = options;\n\n const socket = new Socket();\n socket.connecting = true;\n let newWSUrl;\n\n this._attachSocketEventListeners(socket, sessionId);\n\n const backoffCall = isShutdownSwitchover\n ? this._shutdownSwitchoverBackoffCalls.get(sessionId)\n : this.backoffCalls.get(sessionId);\n\n // Check appropriate backoff call based on connection type\n if (isShutdownSwitchover && !backoffCall) {\n const msg = `${this.namespace}: prevent socket open when switchover backoff call no longer defined for ${sessionId}`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n if (!isShutdownSwitchover && !backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined for ${sessionId}`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n // For shutdown switchover, don't set socket yet (make-before-break)\n // For normal connection, set socket before opening to allow disconnect() to close it\n if (!isShutdownSwitchover) {\n this.sockets.set(sessionId, socket);\n }\n\n return this._prepareAndOpenSocket(socket, socketUrl, sessionId, isShutdownSwitchover)\n .then((webSocketUrl) => {\n newWSUrl = webSocketUrl;\n\n this.logger.info(\n `${this.namespace}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mercury, success, action: connected for ${sessionId}, url: ${newWSUrl}`\n );\n\n // Custom success handler for shutdown switchover\n if (onSuccess) {\n onSuccess(socket, webSocketUrl);\n callback();\n\n return Promise.resolve();\n }\n\n // Default behavior for normal connection\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover attempt failed for ${sessionId}`,\n reason\n );\n\n return callback(reason);\n }\n\n // Normal connection error handling (existing complex logic)\n this.lastError = reason; // remember the last error\n\n const backoffCall = this.backoffCalls.get(sessionId);\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && backoffCall && backoffCall?.getNumRetries() > 0) {\n this._emit(sessionId, 'connection_failed', reason, {\n sessionId,\n retries: backoffCall?.getNumRetries(),\n });\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed for ${sessionId}`,\n reason,\n backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code for ${sessionId}, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(\n `${this.namespace}: received authorization error for ${sessionId}, reauthorizing`\n );\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${this.namespace}: received unrecoverable response from mercury for ${sessionId}`\n );\n backoffCall?.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error for ${sessionId}, will try to connect to another datacenter. failed, action: 'failed', url: ${newWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(newWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: failed to handle connection failure for ${sessionId}`,\n reason\n );\n callback(reason);\n });\n },\n\n _prepareAndOpenSocket(socket, socketUrl, sessionId, isShutdownSwitchover = false) {\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n return Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(\n ([webSocketUrl, token]) => {\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n if (this.webex.config.defaultMercuryOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${this.namespace}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.sockets.set(sessionId, socket);\n this.socket = this.sockets.get(this.defaultSessionId) || socket;\n\n this.logger.info(`${this.namespace} ${logPrefix} url for ${sessionId}: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options).then(() => webSocketUrl);\n }\n );\n },\n\n _connectWithBackoff(webSocketUrl, sessionId, context = {}) {\n const {isShutdownSwitchover = false, attemptOptions = {}} = context;\n\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err, sid = sessionId) => {\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCalls.delete(sid);\n } else {\n this.backoffCalls.delete(sid);\n }\n if (err) {\n const msg = isShutdownSwitchover\n ? `[shutdown] switchover failed after ${call.getNumRetries()} retries`\n : `failed to connect after ${call.getNumRetries()} retries`;\n\n this.logger.info(\n `${this.namespace}: ${msg}; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n // Update overall connected status\n const sessionSocket = this.sockets.get(sid);\n if (sessionSocket) {\n sessionSocket.connecting = false;\n sessionSocket.connected = true;\n }\n // Default success handling for normal connections\n if (!isShutdownSwitchover) {\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n this.hasEverConnected = true;\n this._emit(sid, 'online', {sessionId: sid});\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n }\n\n return resolve();\n };\n // eslint-disable-next-line prefer-reflect\n call = backoff.call(\n (callback) => {\n const attemptNum = call.getNumRetries();\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(\n `${this.namespace}: executing ${logPrefix} attempt ${attemptNum} for ${sessionId}`\n );\n this._attemptConnection(webSocketUrl, sessionId, callback, attemptOptions);\n },\n (err) => onComplete(err, sessionId)\n );\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (\n this.config.initialConnectionMaxRetries &&\n !this.hasEverConnected &&\n !isShutdownSwitchover\n ) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n // Store the call BEFORE setting up event handlers to prevent race conditions\n // Store backoff call reference BEFORE starting (so it's available in _attemptConnection)\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCalls.set(sessionId, call);\n } else {\n this.backoffCalls.set(sessionId, call);\n }\n\n call.on('abort', () => {\n const msg = isShutdownSwitchover ? 'Shutdown Switchover' : 'Connection';\n\n this.logger.info(`${this.namespace}: ${msg} aborted for ${sessionId}`);\n reject(new Error(`Mercury ${msg} Aborted for ${sessionId}`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${this.namespace}: ${logPrefix} failed to connect; attempting retry ${\n number + 1\n } in ${delay} ms for ${sessionId}`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected ${sessionId}`);\n });\n\n call.start();\n });\n },\n\n _emit(...args) {\n try {\n if (!args || args.length === 0) {\n return;\n }\n\n // New signature: _emit(sessionId, eventName, ...rest)\n // Backwards compatibility: if the first arg isn't a known sessionId (or defaultSessionId),\n // treat the call as the old signature and forward directly to trigger(...)\n const [first, second, ...rest] = args;\n\n if (\n typeof first === 'string' &&\n (this.sockets.has(first) || first === this.defaultSessionId) &&\n typeof second === 'string'\n ) {\n const sessionId = first;\n const eventName = second;\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n this.trigger(`${eventName}${suffix}`, ...rest);\n } else {\n // Old usage: _emit(eventName, ...args)\n this.trigger(...args);\n }\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n try {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n } catch (logError) {\n // If even logging fails, just ignore to prevent cascading errors during cleanup\n // eslint-disable-next-line no-console\n console.error('Mercury _emit error handling failed:', logError);\n }\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(sessionId, event, sourceSocket) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n let sessionSocket = this.sockets.get(sessionId);\n let socketUrl;\n event.sessionId = sessionId;\n\n const isActiveSocket = sourceSocket === sessionSocket;\n if (sourceSocket) {\n socketUrl = sourceSocket.url;\n }\n this.sockets.delete(sessionId);\n\n if (isActiveSocket) {\n // Only tear down state if the currently active socket closed\n if (sessionSocket) {\n sessionSocket.removeAllListeners();\n sessionSocket = null;\n this._emit(sessionId, 'offline', event);\n }\n // Update overall connected status\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n\n if (!this.connected) {\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n }\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${this.namespace}: [shutdown] non-active socket closed, code=${event.code} for ${sessionId}`\n );\n // Clean up listeners from old socket now that it's closed\n if (sourceSocket) {\n sourceSocket.removeAllListeners();\n }\n }\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message for ${sessionId}; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this._emit(sessionId, 'offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket ${sessionId} replaced; will not reconnect`);\n if (isActiveSocket) this._emit(sessionId, 'offline.replaced', event);\n // If not active, nothing to do\n break;\n case 4001:\n // replaced during shutdown\n if (isActiveSocket) {\n // Server closed active socket with 4001, meaning it expected this connection\n // to be replaced, but the switchover in _handleImminentShutdown failed.\n // This is a permanent failure - do not reconnect.\n this.logger.warn(\n `${this.namespace}: active socket closed with 4001; shutdown switchover failed for ${sessionId}`\n );\n this._emit(sessionId, 'offline.permanent', event);\n } else {\n // Expected: old socket closed after successful switchover\n this.logger.info(\n `${this.namespace}: old socket closed with 4001 (replaced during shutdown); no reconnect needed for ${sessionId}`\n );\n this._emit(sessionId, 'offline.replaced', event);\n }\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${this.namespace}: [shutdown] reconnecting active socket to recover for ${sessionId}`\n );\n this._reconnect(socketUrl, sessionId);\n }\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${this.namespace}: [shutdown] reconnecting due to normal close for ${sessionId}`\n );\n this._reconnect(socketUrl, sessionId);\n }\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) this._emit(sessionId, 'offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n if (isActiveSocket) this._emit(sessionId, 'offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in close handler for ${sessionId}`,\n error\n );\n }\n },\n\n _onmessage(sessionId, event) {\n this._setTimeOffset(sessionId, event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope from ${sessionId}: `, envelope);\n }\n\n envelope.sessionId = sessionId;\n\n // Handle shutdown message shape: { type: 'shutdown' }\n if (envelope && envelope.type === 'shutdown') {\n this.logger.info(\n `${this.namespace}: [shutdown] imminent shutdown message received for ${sessionId}`\n );\n this._emit(sessionId, 'event:mercury_shutdown_imminent', envelope);\n\n this._handleImminentShutdown(sessionId);\n\n return Promise.resolve();\n }\n\n envelope.sessionId = sessionId;\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType} from ${sessionId}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit(sessionId, 'event', envelope);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(sessionId, `event:${namespace}`, envelope);\n } else {\n this._emit(sessionId, `event:${namespace}`, envelope);\n this._emit(sessionId, `event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: error occurred processing socket message from ${sessionId}`,\n reason\n );\n });\n },\n\n _setTimeOffset(sessionId, event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl, sessionId = this.defaultSessionId) {\n this.logger.info(`${this.namespace}: reconnecting ${sessionId}`);\n\n return this.connect(webSocketUrl, sessionId);\n },\n});\n\nexport default Mercury;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AAOkB,IAAAO,IAAA,EAAAC,KAAA,EAAAC,IAAA;AApBlB;AACA;AACA;AACA;AAFA,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,iCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,iCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAqB,2BAAAhB,CAAA,EAAAiB,cAAA,QAAAC,EAAA,UAAAC,OAAA,oBAAAnB,CAAA,CAAAoB,gBAAA,KAAApB,CAAA,qBAAAkB,EAAA,QAAAG,cAAA,CAAArB,CAAA,MAAAkB,EAAA,GAAAI,2BAAA,CAAAtB,CAAA,MAAAiB,cAAA,IAAAjB,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAU,EAAA,EAAAlB,CAAA,GAAAkB,EAAA,MAAAK,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAvB,CAAA,CAAAQ,MAAA,WAAAmB,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAA5B,CAAA,CAAAuB,CAAA,UAAA5B,CAAA,WAAAA,EAAAkC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAN,CAAA,gBAAAO,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAT,CAAA,WAAAA,EAAA,IAAAP,EAAA,GAAAA,EAAA,CAAAiB,IAAA,CAAAnC,CAAA,MAAA0B,CAAA,WAAAA,EAAA,QAAAU,IAAA,GAAAlB,EAAA,CAAAmB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAT,IAAA,SAAAS,IAAA,KAAAzC,CAAA,WAAAA,EAAA2C,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAd,EAAA,CAAAqB,MAAA,UAAArB,EAAA,CAAAqB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAZ,4BAAAtB,CAAA,EAAAwC,MAAA,SAAAxC,CAAA,qBAAAA,CAAA,sBAAAyC,iBAAA,CAAAzC,CAAA,EAAAwC,MAAA,OAAAd,CAAA,GAAAjB,MAAA,CAAAiC,SAAA,CAAAC,QAAA,CAAAR,IAAA,CAAAnC,CAAA,EAAA4C,KAAA,aAAAlB,CAAA,iBAAA1B,CAAA,CAAA6C,WAAA,EAAAnB,CAAA,GAAA1B,CAAA,CAAA6C,WAAA,CAAAC,IAAA,MAAApB,CAAA,cAAAA,CAAA,mBAAAqB,WAAA,CAAA/C,CAAA,OAAA0B,CAAA,+DAAAsB,IAAA,CAAAtB,CAAA,UAAAe,iBAAA,CAAAzC,CAAA,EAAAwC,MAAA;AAAA,SAAAC,kBAAAQ,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAAzC,MAAA,EAAA0C,GAAA,GAAAD,GAAA,CAAAzC,MAAA,WAAAe,CAAA,MAAA4B,IAAA,OAAAC,KAAA,CAAAF,GAAA,GAAA3B,CAAA,GAAA2B,GAAA,EAAA3B,CAAA,IAAA4B,IAAA,CAAA5B,CAAA,IAAA0B,GAAA,CAAA1B,CAAA,UAAA4B,IAAA;AAqBA,IAAME,sBAAsB,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,CAAC;AAE9F,IAAMC,OAAO,GAAGC,sBAAW,CAACC,MAAM,EAAAjE,IAAA,GA8V/B,IAAAkE,kBAAU,EAAC,iDAAiD,CAAC,EAAAjE,KAAA,GAM7D,IAAAiE,kBAAU,EAAC,2DAA2D,CAAC,GAAAhE,IAAA,GApWvC;EACjCiE,SAAS,EAAE,SAAS;EACpBC,SAAS,EAAEC,SAAS;EACpBC,gBAAgB,EAAE,yBAAyB;EAE3CC,OAAO,EAAE;IACPC,SAAS,EAAE;MACTnD,OAAO,EAAE,KAAK;MACdoD,IAAI,EAAE;IACR,CAAC;IACDC,UAAU,EAAE;MACVrD,OAAO,EAAE,KAAK;MACdoD,IAAI,EAAE;IACR,CAAC;IACDE,gBAAgB,EAAE;MAChBtD,OAAO,EAAE,KAAK;MACdoD,IAAI,EAAE;IACR,CAAC;IACDG,OAAO,EAAE;MACPvD,OAAO,EAAE,SAAAwD,SAAA;QAAA,OAAM,IAAAC,IAAA,CAAAzD,OAAA,CAAQ,CAAC;MAAA;MACxBoD,IAAI,EAAE;IACR,CAAC;IACDM,YAAY,EAAE;MACZ1D,OAAO,EAAE,SAAAwD,SAAA;QAAA,OAAM,IAAAC,IAAA,CAAAzD,OAAA,CAAQ,CAAC;MAAA;MACxBoD,IAAI,EAAE;IACR,CAAC;IACDO,+BAA+B,EAAE;MAC/B3D,OAAO,EAAE,SAAAwD,SAAA;QAAA,OAAM,IAAAC,IAAA,CAAAzD,OAAA,CAAQ,CAAC;MAAA;MACxBoD,IAAI,EAAE;IACR,CAAC;IACDQ,uBAAuB,EAAE,QAAQ;IACjCC,iBAAiB,EAAE;MACjB7D,OAAO,EAAEgD,SAAS;MAClBI,IAAI,EAAE;IACR;EACF,CAAC;EAEDU,OAAO,EAAE;IACPC,SAAS,EAAE;MACTC,IAAI,EAAE,CAAC,WAAW,CAAC;MACnBC,EAAE,WAAAA,GAAA,EAAG;QACH,OAAO,IAAI,CAACd,SAAS;MACvB;IACF;EACF,CAAC;EAEDe,UAAU,WAAAA,WAAA,EAAG;IAAA,IAAAC,KAAA;IACX;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,EAAE,CAAC,4BAA4B,EAAE,UAACC,QAAQ,EAAK;MAClD,IAAIA,QAAQ,IAAIA,QAAQ,CAACC,IAAI,EAAE;QAC7BH,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACC,OAAO,CAACC,aAAa,CAACL,QAAQ,CAACC,IAAI,CAACK,aAAa,CAAC;MACxE;IACF,CAAC,CAAC;IACF;AACJ;AACA;AACA;IACI,IAAI,CAACP,EAAE,CAAC,gCAAgC,EAAE,UAACC,QAAQ,EAAK;MAAA,IAAAO,qBAAA;MACtD,IACE,SAAAA,qBAAA,GAAOT,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACK,QAAQ,cAAAD,qBAAA,uBAA5BA,qBAAA,CAA8BE,sBAAsB,MAAK,UAAU,IAC1ET,QAAQ,IACRA,QAAQ,CAACC,IAAI,EACb;QAAA,IAAAS,cAAA;QACAZ,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACK,QAAQ,CAACC,sBAAsB,EAAAC,cAAA,GAACV,QAAQ,CAACC,IAAI,cAAAS,cAAA,uBAAbA,cAAA,CAAeC,cAAc,CAAC;MACpF;IACF,CAAC,CAAC;IACF;AACJ;AACA;AACA;IACI,IAAI,CAACZ,EAAE,CAAC,8BAA8B,EAAE,UAACC,QAAQ,EAAK;MAAA,IAAAY,sBAAA;MACpD,IACE,SAAAA,sBAAA,GAAOd,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACK,QAAQ,cAAAI,sBAAA,uBAA5BA,sBAAA,CAA8BC,eAAe,MAAK,UAAU,IACnEb,QAAQ,IACRA,QAAQ,CAACC,IAAI,EACb;QAAA,IAAAa,eAAA;QACAhB,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACK,QAAQ,CAACK,eAAe,EAAAC,eAAA,GAACd,QAAQ,CAACC,IAAI,cAAAa,eAAA,uBAAbA,eAAA,CAAeC,SAAS,CAAC;MACxE;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEC,2BAA2B,WAAAA,4BAACC,MAAM,EAAEC,SAAS,EAAE;IAAA,IAAAC,MAAA;IAC7CF,MAAM,CAAClB,EAAE,CAAC,OAAO,EAAE,UAACqB,KAAK;MAAA,OAAKD,MAAI,CAACE,QAAQ,CAACH,SAAS,EAAEE,KAAK,EAAEH,MAAM,CAAC;IAAA,EAAC;IACtEA,MAAM,CAAClB,EAAE,CAAC,SAAS,EAAE;MAAA,SAAAuB,IAAA,GAAAhG,SAAA,CAAAC,MAAA,EAAIgG,IAAI,OAAApD,KAAA,CAAAmD,IAAA,GAAAE,IAAA,MAAAA,IAAA,GAAAF,IAAA,EAAAE,IAAA;QAAJD,IAAI,CAAAC,IAAA,IAAAlG,SAAA,CAAAkG,IAAA;MAAA;MAAA,OAAKL,MAAI,CAACM,UAAU,CAAArG,KAAA,CAAf+F,MAAI,GAAYD,SAAS,EAAAQ,MAAA,CAAKH,IAAI,EAAC;IAAA,EAAC;IACtEN,MAAM,CAAClB,EAAE,CAAC,MAAM,EAAE;MAAA,SAAA4B,KAAA,GAAArG,SAAA,CAAAC,MAAA,EAAIgG,IAAI,OAAApD,KAAA,CAAAwD,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJL,IAAI,CAAAK,KAAA,IAAAtG,SAAA,CAAAsG,KAAA;MAAA;MAAA,OAAKT,MAAI,CAACU,cAAc,CAAAzG,KAAA,CAAnB+F,MAAI,GAAgBD,SAAS,EAAAQ,MAAA,CAAKH,IAAI,EAAC;IAAA,EAAC;IACvEN,MAAM,CAAClB,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAA+B,KAAA,GAAAxG,SAAA,CAAAC,MAAA,EAAIgG,IAAI,OAAApD,KAAA,CAAA2D,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJR,IAAI,CAAAQ,KAAA,IAAAzG,SAAA,CAAAyG,KAAA;MAAA;MAAA,OACrCZ,MAAI,CAACa,KAAK,CAAA5G,KAAA,CAAV+F,MAAI,GAAOD,SAAS,EAAE,mBAAmB,EAAAQ,MAAA,CAAKH,IAAI,EAAC;IAAA,CACrD,CAAC;IACDN,MAAM,CAAClB,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAAkC,KAAA,GAAA3G,SAAA,CAAAC,MAAA,EAAIgG,IAAI,OAAApD,KAAA,CAAA8D,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJX,IAAI,CAAAW,KAAA,IAAA5G,SAAA,CAAA4G,KAAA;MAAA;MAAA,OACrCf,MAAI,CAACa,KAAK,CAAA5G,KAAA,CAAV+F,MAAI,GAAOD,SAAS,EAAE,mBAAmB,EAAAQ,MAAA,CAAKH,IAAI,EAAC;IAAA,CACrD,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACEY,uBAAuB,WAAAA,wBAACjB,SAAS,EAAE;IAAA,IAAAkB,MAAA;IACjC,IAAMC,SAAS,GAAG,IAAI,CAACnD,OAAO,CAACoD,GAAG,CAACpB,SAAS,CAAC;IAE7C,IAAI;MACF,IAAI,IAAI,CAAC5B,+BAA+B,CAACgD,GAAG,CAACpB,SAAS,CAAC,EAAE;QACvD,IAAI,CAACqB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,sDAAAiD,MAAA,CAAmDR,SAAS,CAC/E,CAAC;QAED;MACF;MACA,IAAI,CAACuB,qBAAqB,MAAAf,MAAA,CAAM,IAAAgB,IAAA,CAAA/G,OAAA,EAAS,CAAC,CAAE;MAC5C,IAAI,CAAC4G,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,wCAAAiD,MAAA,CAAqC,IAAI,CAACe,qBAAqB,WAAAf,MAAA,CAAQR,SAAS,CACnG,CAAC;MAED,IAAI,CAACyB,mBAAmB,CAAChE,SAAS,EAAEuC,SAAS,EAAE;QAC7C0B,oBAAoB,EAAE,IAAI;QAC1BC,cAAc,EAAE;UACdD,oBAAoB,EAAE,IAAI;UAC1BE,SAAS,EAAE,SAAAA,UAACC,SAAS,EAAEC,YAAY,EAAK;YACtCZ,MAAI,CAACG,MAAM,CAACC,IAAI,IAAAd,MAAA,CACXU,MAAI,CAAC3D,SAAS,8CAAAiD,MAAA,CAA2CsB,YAAY,WAAAtB,MAAA,CAAQR,SAAS,CAC3F,CAAC;;YAED;YACAkB,MAAI,CAACnB,MAAM,GAAGmB,MAAI,CAAClD,OAAO,CAACoD,GAAG,CAACF,MAAI,CAACxD,gBAAgB,CAAC,IAAImE,SAAS;YAClEX,MAAI,CAACtD,SAAS,GAAGsD,MAAI,CAACa,mBAAmB,CAAC,CAAC,CAAC,CAAC;;YAE7Cb,MAAI,CAACJ,KAAK,CAACd,SAAS,EAAE,4CAA4C,EAAE;cAClEgC,GAAG,EAAEF;YACP,CAAC,CAAC;YAEF,IAAIX,SAAS,EAAE;cACbD,MAAI,CAACG,MAAM,CAACC,IAAI,IAAAd,MAAA,CACXU,MAAI,CAAC3D,SAAS,kEACnB,CAAC;YACH;UACF;QACF;MACF,CAAC,CAAC,CACC0E,IAAI,CAAC,YAAM;QACVf,MAAI,CAACG,MAAM,CAACC,IAAI,IAAAd,MAAA,CACXU,MAAI,CAAC3D,SAAS,yDAAAiD,MAAA,CAAsDR,SAAS,CAClF,CAAC;MACH,CAAC,CAAC,CACDkC,KAAK,CAAC,UAACnG,GAAG,EAAK;QACdmF,MAAI,CAACG,MAAM,CAACC,IAAI,IAAAd,MAAA,CACXU,MAAI,CAAC3D,SAAS,2FAAAiD,MAAA,CAAwFR,SAAS,SAClHjE,GACF,CAAC;QACDmF,MAAI,CAACJ,KAAK,CAACd,SAAS,EAAE,0CAA0C,EAAE;UAACmC,MAAM,EAAEpG;QAAG,CAAC,CAAC;QAChF;MACF,CAAC,CAAC;IACN,CAAC,CAAC,OAAOvC,CAAC,EAAE;MACV,IAAI,CAAC6H,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZ,IAAI,CAACjD,SAAS,+CAAAiD,MAAA,CAA4CR,SAAS,GACtExG,CACF,CAAC;MACD,IAAI,CAAC4E,+BAA+B,CAACiE,MAAM,CAACrC,SAAS,CAAC;MACtD,IAAI,CAACc,KAAK,CAACd,SAAS,EAAE,0CAA0C,EAAE;QAACmC,MAAM,EAAE3I;MAAC,CAAC,CAAC;IAChF;EACF,CAAC;EAED;AACF;AACA;AACA;EACE8I,YAAY,WAAAA,aAAA,EAAG;IACb,OAAO,IAAI,CAAC9E,SAAS;EACvB,CAAC;EAED;AACF;AACA;AACA;EACE+E,UAAU,WAAAA,WAAA,EAAG;IACX,OAAO,IAAI,CAACvE,OAAO;EACrB,CAAC;EAED;AACF;AACA;AACA;AACA;EACEwE,SAAS,WAAAA,UAAA,EAAoC;IAAA,IAAnCxC,SAAS,GAAA5F,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,IAAI,CAACsD,gBAAgB;IACzC,OAAO,IAAI,CAACM,OAAO,CAACoD,GAAG,CAACpB,SAAS,CAAC;EACpC,CAAC;EAED;AACF;AACA;AACA;EACE+B,mBAAmB,WAAAA,oBAAA,EAAG;IAAA,IAAAU,SAAA,GAAA5H,0BAAA,CACC,IAAI,CAACmD,OAAO,CAAC0E,MAAM,CAAC,CAAC;MAAAC,KAAA;IAAA;MAA1C,KAAAF,SAAA,CAAAnH,CAAA,MAAAqH,KAAA,GAAAF,SAAA,CAAAlH,CAAA,IAAAC,IAAA,GAA4C;QAAA,IAAjCuE,MAAM,GAAA4C,KAAA,CAAAlH,KAAA;QACf,IAAIsE,MAAM,IAAIA,MAAM,CAACnC,SAAS,EAAE;UAC9B,OAAO,IAAI;QACb;MACF;IAAC,SAAA7B,GAAA;MAAA0G,SAAA,CAAAjJ,CAAA,CAAAuC,GAAA;IAAA;MAAA0G,SAAA,CAAA9G,CAAA;IAAA;IAED,OAAO,KAAK;EACd,CAAC;EAED;AACF;AACA;AACA;EACEiH,oBAAoB,WAAAA,qBAAA,EAAG;IAAA,IAAAC,UAAA,GAAAhI,0BAAA,CACA,IAAI,CAACmD,OAAO,CAAC0E,MAAM,CAAC,CAAC;MAAAI,MAAA;IAAA;MAA1C,KAAAD,UAAA,CAAAvH,CAAA,MAAAwH,MAAA,GAAAD,UAAA,CAAAtH,CAAA,IAAAC,IAAA,GAA4C;QAAA,IAAjCuE,MAAM,GAAA+C,MAAA,CAAArH,KAAA;QACf,IAAIsE,MAAM,IAAIA,MAAM,CAACjC,UAAU,EAAE;UAC/B,OAAO,IAAI;QACb;MACF;IAAC,SAAA/B,GAAA;MAAA8G,UAAA,CAAArJ,CAAA,CAAAuC,GAAA;IAAA;MAAA8G,UAAA,CAAAlH,CAAA;IAAA;IAED,OAAO,KAAK;EACd,CAAC;EAED;EACAoH,OAAO,WAAAA,QAACjB,YAAY,EAAqC;IAAA,IAAAkB,MAAA;IAAA,IAAnChD,SAAS,GAAA5F,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,IAAI,CAACsD,gBAAgB;IACrD,IAAI,CAAC,IAAI,CAACuF,gBAAgB,EAAE,IAAI,CAACA,gBAAgB,GAAG,IAAA/E,IAAA,CAAAzD,OAAA,CAAQ,CAAC;;IAE7D;IACA,IAAI,IAAI,CAACwI,gBAAgB,CAACC,GAAG,CAAClD,SAAS,CAAC,EAAE;MACxC,IAAI,CAACqB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,mBAAAiD,MAAA,CAAgBR,SAAS,qDAC5C,CAAC;MAED,OAAO,IAAI,CAACiD,gBAAgB,CAAC7B,GAAG,CAACpB,SAAS,CAAC;IAC7C;IAEA,IAAMmD,aAAa,GAAG,IAAI,CAACnF,OAAO,CAACoD,GAAG,CAACpB,SAAS,CAAC;IACjD,IAAImD,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEvF,SAAS,IAAIuF,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAErF,UAAU,EAAE;MACzD,IAAI,CAACuD,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,mBAAAiD,MAAA,CAAgBR,SAAS,+CAC5C,CAAC;MAED,OAAOoD,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAI,CAACvF,UAAU,GAAG,IAAI;IAEtB,IAAI,CAACuD,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,wCAAAiD,MAAA,CAAqCR,SAAS,CAAE,CAAC;IACnF,IAAI,CAACqB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,sCACjB,IAAI+F,KAAK,CAAC,uBAAuB,CAAC,CAACC,KACrC,CAAC;IAED,IAAMC,cAAc,GAAGJ,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CACpC,IAAI,CAACrE,KAAK,CAACC,QAAQ,CAACwE,MAAM,CAACC,UAAU,IAAI,IAAI,CAAC1E,KAAK,CAACC,QAAQ,CAACwE,MAAM,CAACE,QAAQ,CAAC,CAC/E,CAAC,CACE1B,IAAI,CAAC,YAAM;MACVe,MAAI,CAAC3B,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAIwC,MAAI,CAACzF,SAAS,mBAAAiD,MAAA,CAAgBR,SAAS,CAAE,CAAC;MAE9D,OAAOgD,MAAI,CAACvB,mBAAmB,CAACK,YAAY,EAAE9B,SAAS,CAAC;IAC1D,CAAC,CAAC,CACD4D,OAAO,CAAC,YAAM;MACbZ,MAAI,CAACC,gBAAgB,CAACZ,MAAM,CAACrC,SAAS,CAAC;IACzC,CAAC,CAAC;IAEJ,IAAI,CAACiD,gBAAgB,CAACY,GAAG,CAAC7D,SAAS,EAAEwD,cAAc,CAAC;IAEpD,OAAOA,cAAc;EACvB,CAAC;EAEDM,MAAM,WAAAA,OAAA,EAAG;IACP,IAAI,CAACzC,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,sBAAmB,CAAC;IACtD,IAAI,CAAC8D,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,sCACjB,IAAI+F,KAAK,CAAC,uBAAuB,CAAC,CAACC,KACrC,CAAC;IAED,OAAO,IAAI,CAACQ,aAAa,CACvB,IAAI,CAACC,MAAM,CAACC,8BAA8B,IACxC,CAAC/G,sBAAsB,CAACgH,QAAQ,CAAC,IAAI,CAACF,MAAM,CAACC,8BAA8B,CAAC,GAC1E;MAACE,IAAI,EAAE,IAAI;MAAEhC,MAAM,EAAE,IAAI,CAAC6B,MAAM,CAACC;IAA8B,CAAC,GAChExG,SACN,CAAC;EACH,CAAC;EAED;EACA2G,UAAU,WAAAA,WAACC,OAAO,EAAqC;IAAA,IAAAC,MAAA;IAAA,IAAnCtE,SAAS,GAAA5F,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,IAAI,CAACsD,gBAAgB;IACnD,OAAO,IAAA0F,QAAA,CAAA3I,OAAA,CAAY,UAAC4I,OAAO,EAAK;MAC9B,IAAMkB,WAAW,GAAGD,MAAI,CAACnG,YAAY,CAACiD,GAAG,CAACpB,SAAS,CAAC;MACpD,IAAIuE,WAAW,EAAE;QACfD,MAAI,CAACjD,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI8D,MAAI,CAAC/G,SAAS,4BAAAiD,MAAA,CAAyBR,SAAS,CAAE,CAAC;QACvEuE,WAAW,CAACC,KAAK,CAAC,CAAC;QACnBF,MAAI,CAACnG,YAAY,CAACkE,MAAM,CAACrC,SAAS,CAAC;MACrC;MACA,IAAMyE,8BAA8B,GAAGH,MAAI,CAAClG,+BAA+B,CAACgD,GAAG,CAACpB,SAAS,CAAC;MAC1F,IAAIyE,8BAA8B,EAAE;QAClCH,MAAI,CAACjD,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI8D,MAAI,CAAC/G,SAAS,gDAAAiD,MAAA,CAA6CR,SAAS,CAAE,CAAC;QAC3FyE,8BAA8B,CAACD,KAAK,CAAC,CAAC;QACtCF,MAAI,CAAClG,+BAA+B,CAACiE,MAAM,CAACrC,SAAS,CAAC;MACxD;MACA;MACA,IAAIsE,MAAI,CAACrB,gBAAgB,EAAE;QACzBqB,MAAI,CAACrB,gBAAgB,CAACZ,MAAM,CAACrC,SAAS,CAAC;MACzC;MAEA,IAAMmD,aAAa,GAAGmB,MAAI,CAACtG,OAAO,CAACoD,GAAG,CAACpB,SAAS,CAAC;MACjD,IAAM0E,MAAM,GAAG1E,SAAS,KAAKsE,MAAI,CAAC5G,gBAAgB,GAAG,EAAE,OAAA8C,MAAA,CAAOR,SAAS,CAAE;MAEzE,IAAImD,aAAa,EAAE;QACjBA,aAAa,CAACwB,kBAAkB,CAAC,SAAS,CAAC;QAC3CxB,aAAa,CAACrF,UAAU,GAAG,KAAK;QAChCqF,aAAa,CAACvF,SAAS,GAAG,KAAK;QAC/B0G,MAAI,CAACM,IAAI,CAAC5E,SAAS,KAAKsE,MAAI,CAAC5G,gBAAgB,GAAG,SAAS,aAAA8C,MAAA,CAAakE,MAAM,CAAE,EAAErB,OAAO,CAAC;QACxFA,OAAO,CAACF,aAAa,CAAC0B,KAAK,CAACR,OAAO,IAAI5G,SAAS,CAAC,CAAC;MACpD;MACA4F,OAAO,CAAC,CAAC;;MAET;MACAiB,MAAI,CAAC1G,SAAS,GAAG0G,MAAI,CAACvC,mBAAmB,CAAC,CAAC;IAC7C,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;AACA;EACEgC,aAAa,WAAAA,cAACM,OAAO,EAAE;IAAA,IAAAS,MAAA;IACrB,IAAMC,kBAAkB,GAAG,EAAE;IAAC,IAAAC,UAAA,GAAAnK,0BAAA,CAEN,IAAI,CAACmD,OAAO,CAACiH,IAAI,CAAC,CAAC;MAAAC,MAAA;IAAA;MAA3C,KAAAF,UAAA,CAAA1J,CAAA,MAAA4J,MAAA,GAAAF,UAAA,CAAAzJ,CAAA,IAAAC,IAAA,GAA6C;QAAA,IAAlCwE,SAAS,GAAAkF,MAAA,CAAAzJ,KAAA;QAClBsJ,kBAAkB,CAAC9K,IAAI,CAAC,IAAI,CAACmK,UAAU,CAACC,OAAO,EAAErE,SAAS,CAAC,CAAC;MAC9D;IAAC,SAAAjE,GAAA;MAAAiJ,UAAA,CAAAxL,CAAA,CAAAuC,GAAA;IAAA;MAAAiJ,UAAA,CAAArJ,CAAA;IAAA;IAED,OAAOyH,QAAA,CAAA3I,OAAA,CAAQ0K,GAAG,CAACJ,kBAAkB,CAAC,CAAC9C,IAAI,CAAC,YAAM;MAChD6C,MAAI,CAAClH,SAAS,GAAG,KAAK;MACtBkH,MAAI,CAAC9G,OAAO,CAACoH,KAAK,CAAC,CAAC;MACpBN,MAAI,CAAC3G,YAAY,CAACiH,KAAK,CAAC,CAAC;MACzB;MACA,IAAIN,MAAI,CAAC7B,gBAAgB,EAAE;QACzB6B,MAAI,CAAC7B,gBAAgB,CAACmC,KAAK,CAAC,CAAC;MAC/B;IACF,CAAC,CAAC;EACJ,CAAC;EAGDC,MAAM,WAAAA,OAAA,EAAG;IACP;IACA,OAAO,IAAI,CAACtC,OAAO,CAAC,CAAC;EACvB,CAAC;EAGDuC,aAAa,WAAAA,cAAA,EAAG;IACd;IACA,OAAO,IAAI,CAAClB,UAAU,CAAC,CAAC;EAC1B,CAAC;EAEDmB,8BAA8B,WAAAA,+BAACC,OAAO,EAAE;IACtC,IAAI,CAACnH,uBAAuB,GAAGmH,OAAO,CAACnH,uBAAuB;EAChE,CAAC;EAEDoH,eAAe,WAAAA,gBAACvF,KAAK,EAAE;IACrB,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAACwF,OAAO,EAAE;MAC5B;IACF;IACA,IAAMC,UAAU,GAAG,IAAAC,KAAA,CAAAnL,OAAA,EAAYyF,KAAK,CAACwF,OAAO,CAAC;IAE7CC,UAAU,CAACpL,OAAO,CAAC,UAACsL,OAAO,EAAK;MAC9B,IAAAhC,WAAG,EAAC3D,KAAK,EAAE2F,OAAO,EAAE3F,KAAK,CAACwF,OAAO,CAACG,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;EACJ,CAAC;EAEDC,WAAW,WAAAA,YAAChE,YAAY,EAAE;IAAA,IAAAiE,MAAA;IACxB,IAAI,CAACjE,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI,CAAC9C,KAAK,CAACC,QAAQ,CAACwE,MAAM,CAAC3B,YAAY;IACxD;IAEA,OAAO,IAAI,CAAC9C,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B8G,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD/D,IAAI,CAAC,UAACgE,kBAAkB,EAAK;MAC5B,IAAIA,kBAAkB,EAAE;QACtB,OAAOF,MAAI,CAAC/G,KAAK,CAACC,QAAQ,CAACK,QAAQ,CAAC4G,2BAA2B,CAACpE,YAAY,CAAC;MAC/E;MAEA,OAAOA,YAAY;IACrB,CAAC,CAAC,CACDG,IAAI,CAAC,UAACkE,KAAK,EAAK;MACfrE,YAAY,GAAGqE,KAAK;IACtB,CAAC,CAAC,CACDlE,IAAI,CAAC;MAAA,OAAM8D,MAAI,CAAC/G,KAAK,CAACC,QAAQ,CAACC,OAAO,CAAC8G,UAAU,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAAA,EAAC,CACrF/D,IAAI,CAAC,UAACmE,gBAAgB,EAAK;MAC1BtE,YAAY,GAAGE,YAAG,CAACqE,KAAK,CAACvE,YAAY,EAAE,IAAI,CAAC;MAC5C,IAAAwE,OAAA,CAAA7L,OAAA,EAAcqH,YAAY,CAACyE,KAAK,EAAE;QAChCC,kBAAkB,EAAE,MAAM;QAC1BC,YAAY,EAAE,IAAI;QAClBC,eAAe,EAAE;MACnB,CAAC,CAAC;MAEF,IAAIN,gBAAgB,EAAE;QACpB,IAAAE,OAAA,CAAA7L,OAAA,EAAcqH,YAAY,CAACyE,KAAK,EAAE;UAChCI,yBAAyB,EAAE,IAAI;UAC/BC,4BAA4B,EAAE;QAChC,CAAC,CAAC;QACF,IAAAC,eAAA,CAAApM,OAAA,EAAuBqH,YAAY,CAACyE,KAAK,EAAE,cAAc,CAAC;MAC5D;MAEA,IAAI,IAAAnF,WAAG,EAAC2E,MAAI,EAAE,+BAA+B,EAAE,KAAK,CAAC,EAAE;QACrDjE,YAAY,CAACyE,KAAK,CAACO,mBAAmB,GAAG,IAAI;MAC/C;MAEAhF,YAAY,CAACyE,KAAK,CAACQ,eAAe,GAAG,IAAAvF,IAAA,CAAA/G,OAAA,EAAS,CAAC;MAE/C,OAAOuH,YAAG,CAACgF,MAAM,CAAClF,YAAY,CAAC;IACjC,CAAC,CAAC;EACN,CAAC;EAEDmF,kBAAkB,WAAAA,mBAACC,SAAS,EAAElH,SAAS,EAAEmH,QAAQ,EAAgB;IAAA,IAAAC,MAAA;IAAA,IAAd/C,OAAO,GAAAjK,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,CAAC,CAAC;IAC7D,IAAAiN,qBAAA,GAAyDhD,OAAO,CAAzD3C,oBAAoB;MAApBA,oBAAoB,GAAA2F,qBAAA,cAAG,KAAK,GAAAA,qBAAA;MAAAC,kBAAA,GAAsBjD,OAAO,CAA3BzC,SAAS;MAATA,SAAS,GAAA0F,kBAAA,cAAG,IAAI,GAAAA,kBAAA;IAErD,IAAMvH,MAAM,GAAG,IAAIwH,eAAM,CAAC,CAAC;IAC3BxH,MAAM,CAACjC,UAAU,GAAG,IAAI;IACxB,IAAI0J,QAAQ;IAEZ,IAAI,CAAC1H,2BAA2B,CAACC,MAAM,EAAEC,SAAS,CAAC;IAEnD,IAAMuE,WAAW,GAAG7C,oBAAoB,GACpC,IAAI,CAACtD,+BAA+B,CAACgD,GAAG,CAACpB,SAAS,CAAC,GACnD,IAAI,CAAC7B,YAAY,CAACiD,GAAG,CAACpB,SAAS,CAAC;;IAEpC;IACA,IAAI0B,oBAAoB,IAAI,CAAC6C,WAAW,EAAE;MACxC,IAAMkD,GAAG,MAAAjH,MAAA,CAAM,IAAI,CAACjD,SAAS,+EAAAiD,MAAA,CAA4ER,SAAS,CAAE;MACpH,IAAMjE,GAAG,GAAG,IAAIuH,KAAK,CAACmE,GAAG,CAAC;MAE1B,IAAI,CAACpG,MAAM,CAACC,IAAI,CAACmG,GAAG,CAAC;;MAErB;MACAN,QAAQ,CAACpL,GAAG,CAAC;MAEb,OAAOqH,QAAA,CAAA3I,OAAA,CAAQiN,MAAM,CAAC3L,GAAG,CAAC;IAC5B;IAEA,IAAI,CAAC2F,oBAAoB,IAAI,CAAC6C,WAAW,EAAE;MACzC,IAAMkD,IAAG,MAAAjH,MAAA,CAAM,IAAI,CAACjD,SAAS,mEAAAiD,MAAA,CAAgER,SAAS,CAAE;MACxG,IAAMjE,IAAG,GAAG,IAAIuH,KAAK,CAACmE,IAAG,CAAC;MAE1B,IAAI,CAACpG,MAAM,CAACC,IAAI,CAACmG,IAAG,CAAC;;MAErB;MACAN,QAAQ,CAACpL,IAAG,CAAC;MAEb,OAAOqH,QAAA,CAAA3I,OAAA,CAAQiN,MAAM,CAAC3L,IAAG,CAAC;IAC5B;;IAEA;IACA;IACA,IAAI,CAAC2F,oBAAoB,EAAE;MACzB,IAAI,CAAC1D,OAAO,CAAC6F,GAAG,CAAC7D,SAAS,EAAED,MAAM,CAAC;IACrC;IAEA,OAAO,IAAI,CAAC4H,qBAAqB,CAAC5H,MAAM,EAAEmH,SAAS,EAAElH,SAAS,EAAE0B,oBAAoB,CAAC,CAClFO,IAAI,CAAC,UAACH,YAAY,EAAK;MACtB0F,QAAQ,GAAG1F,YAAY;MAEvBsF,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,QAAAiD,MAAA,CACfkB,oBAAoB,GAAG,uBAAuB,GAAG,EAAE,4DAAAlB,MAAA,CACIR,SAAS,aAAAQ,MAAA,CAAUgH,QAAQ,CACtF,CAAC;;MAED;MACA,IAAI5F,SAAS,EAAE;QACbA,SAAS,CAAC7B,MAAM,EAAE+B,YAAY,CAAC;QAC/BqF,QAAQ,CAAC,CAAC;QAEV,OAAO/D,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CAAC,CAAC;MAC1B;;MAEA;MACA8D,QAAQ,CAAC,CAAC;MAEV,OAAOC,MAAI,CAACpI,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B8G,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD/D,IAAI,CAAC,UAACgE,kBAAkB,EAAK;QAC5B,IAAIA,kBAAkB,EAAE;UACtB,OAAOmB,MAAI,CAACpI,KAAK,CAACC,QAAQ,CAACwE,MAAM,CAACmE,OAAO,CAAC,CAAC;QAC7C;QAEA,OAAOxE,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CAAC,CAAC;MAC1B,CAAC,CAAC;IACN,CAAC,CAAC,CACDnB,KAAK,CAAC,UAACC,MAAM,EAAK;MACjB;MACA,IAAIT,oBAAoB,EAAE;QACxB0F,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,iDAAAiD,MAAA,CAA8CR,SAAS,GACxEmC,MACF,CAAC;QAED,OAAOgF,QAAQ,CAAChF,MAAM,CAAC;MACzB;;MAEA;MACAiF,MAAI,CAAC5J,SAAS,GAAG2E,MAAM,CAAC,CAAC;;MAEzB,IAAMoC,WAAW,GAAG6C,MAAI,CAACjJ,YAAY,CAACiD,GAAG,CAACpB,SAAS,CAAC;MACpD;MACA;MACA;MACA;MACA,IAAImC,MAAM,CAACgC,IAAI,KAAK,IAAI,IAAII,WAAW,IAAI,CAAAA,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEsD,aAAa,CAAC,CAAC,IAAG,CAAC,EAAE;QAC3ET,MAAI,CAACtG,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEmC,MAAM,EAAE;UACjDnC,SAAS,EAATA,SAAS;UACT8H,OAAO,EAAEvD,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEsD,aAAa,CAAC;QACtC,CAAC,CAAC;MACJ;MACAT,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,sCAAAiD,MAAA,CAAmCR,SAAS,GAC7DmC,MAAM,EACN,CAAAoC,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEsD,aAAa,CAAC,CAAC,MAAK,CAAC,GAAG1F,MAAM,CAACoB,KAAK,GAAG,EACtD,CAAC;MACD;MACA;MACA,IAAIpB,MAAM,YAAY4F,uBAAe,EAAE;QACrCX,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,2CAAAiD,MAAA,CAAwCR,SAAS,qCACpE,CAAC;QAED,OAAOoH,MAAI,CAACpI,KAAK,CAACC,QAAQ,CAACwE,MAAM,CAACmE,OAAO,CAAC,CAAC,CAAC3F,IAAI,CAAC;UAAA,OAAMkF,QAAQ,CAAChF,MAAM,CAAC;QAAA,EAAC;MAC1E;MACA;MACA,IAAIA,MAAM,YAAY6F,qBAAa,EAAE;QACnCZ,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,yCAAAiD,MAAA,CAAsCR,SAAS,oBAClE,CAAC;QAED,OAAOoH,MAAI,CAACpI,KAAK,CAACiJ,WAAW,CAACL,OAAO,CAAC;UAACM,KAAK,EAAE;QAAI,CAAC,CAAC,CAACjG,IAAI,CAAC;UAAA,OAAMkF,QAAQ,CAAChF,MAAM,CAAC;QAAA,EAAC;MACnF;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,IAAIA,MAAM,YAAYgG,kBAAU,IAAIhG,MAAM,YAAYiG,iBAAS,EAAE;QAC/DhB,MAAI,CAAC/F,MAAM,CAACgH,IAAI,IAAA7H,MAAA,CACX4G,MAAI,CAAC7J,SAAS,yDAAAiD,MAAA,CAAsDR,SAAS,CAClF,CAAC;QACDuE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAEC,KAAK,CAAC,CAAC;QAEpB,OAAO2C,QAAQ,CAAChF,MAAM,CAAC;MACzB;MACA,IAAIA,MAAM,YAAYmG,uBAAe,EAAE;QACrC,OAAOlB,MAAI,CAACpI,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B8G,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD/D,IAAI,CAAC,UAACgE,kBAAkB,EAAK;UAC5B,IAAIA,kBAAkB,EAAE;YACtBmB,MAAI,CAAC/F,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX4G,MAAI,CAAC7J,SAAS,gDAAAiD,MAAA,CAA6CR,SAAS,kFAAAQ,MAAA,CAA+EgH,QAAQ,cAAAhH,MAAA,CAAW2B,MAAM,CAACqD,OAAO,CACzL,CAAC;YAED,OAAO4B,MAAI,CAACpI,KAAK,CAACC,QAAQ,CAACK,QAAQ,CAACiJ,aAAa,CAACf,QAAQ,CAAC;UAC7D;UAEA,OAAO,IAAI;QACb,CAAC,CAAC,CACDvF,IAAI,CAAC;UAAA,OAAMkF,QAAQ,CAAChF,MAAM,CAAC;QAAA,EAAC;MACjC;MAEA,OAAOgF,QAAQ,CAAChF,MAAM,CAAC;IACzB,CAAC,CAAC,CACDD,KAAK,CAAC,UAACC,MAAM,EAAK;MACjBiF,MAAI,CAAC/F,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZ4G,MAAI,CAAC7J,SAAS,gDAAAiD,MAAA,CAA6CR,SAAS,GACvEmC,MACF,CAAC;MACDgF,QAAQ,CAAChF,MAAM,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDwF,qBAAqB,WAAAA,sBAAC5H,MAAM,EAAEmH,SAAS,EAAElH,SAAS,EAAgC;IAAA,IAAAwI,MAAA;IAAA,IAA9B9G,oBAAoB,GAAAtH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,KAAK;IAC9E,IAAMqO,SAAS,GAAG/G,oBAAoB,GAAG,uBAAuB,GAAG,YAAY;IAE/E,OAAO0B,QAAA,CAAA3I,OAAA,CAAQ0K,GAAG,CAAC,CAAC,IAAI,CAACW,WAAW,CAACoB,SAAS,CAAC,EAAE,IAAI,CAAClI,KAAK,CAACiJ,WAAW,CAACS,YAAY,CAAC,CAAC,CAAC,CAAC,CAACzG,IAAI,CAC3F,UAAA0G,IAAA,EAA2B;MAAA,IAAAC,KAAA,OAAAC,eAAA,CAAApO,OAAA,EAAAkO,IAAA;QAAzB7G,YAAY,GAAA8G,KAAA;QAAEE,KAAK,GAAAF,KAAA;MACnB,IAAIvE,OAAO,GAAG;QACZ0E,eAAe,EAAEP,MAAI,CAACxE,MAAM,CAAC+E,eAAe;QAC5CC,YAAY,EAAER,MAAI,CAACxE,MAAM,CAACgF,YAAY;QACtCC,WAAW,EAAET,MAAI,CAACxE,MAAM,CAACiF,WAAW;QACpCH,KAAK,EAAEA,KAAK,CAACtM,QAAQ,CAAC,CAAC;QACvB0M,UAAU,KAAA1I,MAAA,CAAKgI,MAAI,CAACxJ,KAAK,CAACgB,SAAS,OAAAQ,MAAA,CAAI,IAAAgB,IAAA,CAAA/G,OAAA,EAAS,CAAC,CAAE;QACnD4G,MAAM,EAAEmH,MAAI,CAACnH;MACf,CAAC;MAED,IAAImH,MAAI,CAACxJ,KAAK,CAACgF,MAAM,CAACmF,qBAAqB,EAAE;QAC3C,IAAMC,gBAAgB,GAAG1H,oBAAoB,GACzC,uCAAuC,GACvC,wBAAwB;QAE5B8G,MAAI,CAACnH,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAIgI,MAAI,CAACjL,SAAS,QAAAiD,MAAA,CAAK4I,gBAAgB,CAAE,CAAC;QAC1D/E,OAAO,GAAAlK,aAAA,CAAAA,aAAA,KAAOkK,OAAO,GAAKmE,MAAI,CAACxJ,KAAK,CAACgF,MAAM,CAACmF,qBAAqB,CAAC;MACpE;;MAEA;MACA;MACAX,MAAI,CAACxK,OAAO,CAAC6F,GAAG,CAAC7D,SAAS,EAAED,MAAM,CAAC;MACnCyI,MAAI,CAACzI,MAAM,GAAGyI,MAAI,CAACxK,OAAO,CAACoD,GAAG,CAACoH,MAAI,CAAC9K,gBAAgB,CAAC,IAAIqC,MAAM;MAE/DyI,MAAI,CAACnH,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAIgI,MAAI,CAACjL,SAAS,OAAAiD,MAAA,CAAIiI,SAAS,eAAAjI,MAAA,CAAYR,SAAS,QAAAQ,MAAA,CAAKsB,YAAY,CAAE,CAAC;MAExF,OAAO/B,MAAM,CAACsJ,IAAI,CAACvH,YAAY,EAAEuC,OAAO,CAAC,CAACpC,IAAI,CAAC;QAAA,OAAMH,YAAY;MAAA,EAAC;IACpE,CACF,CAAC;EACH,CAAC;EAEDL,mBAAmB,WAAAA,oBAACK,YAAY,EAAE9B,SAAS,EAAgB;IAAA,IAAAsJ,OAAA;IAAA,IAAdC,OAAO,GAAAnP,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,CAAC,CAAC;IACvD,IAAAoP,qBAAA,GAA4DD,OAAO,CAA5D7H,oBAAoB;MAApBA,oBAAoB,GAAA8H,qBAAA,cAAG,KAAK,GAAAA,qBAAA;MAAAC,qBAAA,GAAyBF,OAAO,CAA9B5H,cAAc;MAAdA,cAAc,GAAA8H,qBAAA,cAAG,CAAC,CAAC,GAAAA,qBAAA;IAExD,OAAO,IAAArG,QAAA,CAAA3I,OAAA,CAAY,UAAC4I,OAAO,EAAEqE,MAAM,EAAK;MACtC;MACA;MACA,IAAI1L,IAAI;MACR,IAAM0N,UAAU,GAAG,SAAbA,UAAUA,CAAI3N,GAAG,EAAsB;QAAA,IAApB4N,GAAG,GAAAvP,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG4F,SAAS;QACtC,IAAI0B,oBAAoB,EAAE;UACxB4H,OAAI,CAAClL,+BAA+B,CAACiE,MAAM,CAACsH,GAAG,CAAC;QAClD,CAAC,MAAM;UACLL,OAAI,CAACnL,YAAY,CAACkE,MAAM,CAACsH,GAAG,CAAC;QAC/B;QACA,IAAI5N,GAAG,EAAE;UACP,IAAM0L,GAAG,GAAG/F,oBAAoB,yCAAAlB,MAAA,CACUxE,IAAI,CAAC6L,aAAa,CAAC,CAAC,2CAAArH,MAAA,CAC/BxE,IAAI,CAAC6L,aAAa,CAAC,CAAC,aAAU;UAE7DyB,OAAI,CAACjI,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX8I,OAAI,CAAC/L,SAAS,QAAAiD,MAAA,CAAKiH,GAAG,uDAAAjH,MAAA,CAAoDzE,GAAG,CAClF,CAAC;UAED,OAAO2L,MAAM,CAAC3L,GAAG,CAAC;QACpB;QACA;QACA,IAAMoH,aAAa,GAAGmG,OAAI,CAACtL,OAAO,CAACoD,GAAG,CAACuI,GAAG,CAAC;QAC3C,IAAIxG,aAAa,EAAE;UACjBA,aAAa,CAACrF,UAAU,GAAG,KAAK;UAChCqF,aAAa,CAACvF,SAAS,GAAG,IAAI;QAChC;QACA;QACA,IAAI,CAAC8D,oBAAoB,EAAE;UACzB4H,OAAI,CAACxL,UAAU,GAAGwL,OAAI,CAAC1G,oBAAoB,CAAC,CAAC;UAC7C0G,OAAI,CAAC1L,SAAS,GAAG0L,OAAI,CAACvH,mBAAmB,CAAC,CAAC;UAC3CuH,OAAI,CAACvL,gBAAgB,GAAG,IAAI;UAC5BuL,OAAI,CAACxI,KAAK,CAAC6I,GAAG,EAAE,QAAQ,EAAE;YAAC3J,SAAS,EAAE2J;UAAG,CAAC,CAAC;UAC3CL,OAAI,CAACtK,KAAK,CAACC,QAAQ,CAAC2K,UAAU,CAACC,qBAAqB,CAACC,yBAAyB,CAAC,IAAI,CAAC;QACtF;QAEA,OAAOzG,OAAO,CAAC,CAAC;MAClB,CAAC;MACD;MACArH,IAAI,GAAG+N,gBAAO,CAAC/N,IAAI,CACjB,UAACmL,QAAQ,EAAK;QACZ,IAAM6C,UAAU,GAAGhO,IAAI,CAAC6L,aAAa,CAAC,CAAC;QACvC,IAAMY,SAAS,GAAG/G,oBAAoB,GAAG,uBAAuB,GAAG,YAAY;QAE/E4H,OAAI,CAACjI,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX8I,OAAI,CAAC/L,SAAS,kBAAAiD,MAAA,CAAeiI,SAAS,eAAAjI,MAAA,CAAYwJ,UAAU,WAAAxJ,MAAA,CAAQR,SAAS,CAClF,CAAC;QACDsJ,OAAI,CAACrC,kBAAkB,CAACnF,YAAY,EAAE9B,SAAS,EAAEmH,QAAQ,EAAExF,cAAc,CAAC;MAC5E,CAAC,EACD,UAAC5F,GAAG;QAAA,OAAK2N,UAAU,CAAC3N,GAAG,EAAEiE,SAAS,CAAC;MAAA,CACrC,CAAC;MAEDhE,IAAI,CAACiO,WAAW,CACd,IAAIF,gBAAO,CAACG,mBAAmB,CAAC;QAC9BC,YAAY,EAAEb,OAAI,CAACtF,MAAM,CAACoG,gBAAgB;QAC1CC,QAAQ,EAAEf,OAAI,CAACtF,MAAM,CAACsG;MACxB,CAAC,CACH,CAAC;MAED,IACEhB,OAAI,CAACtF,MAAM,CAACuG,2BAA2B,IACvC,CAACjB,OAAI,CAACvL,gBAAgB,IACtB,CAAC2D,oBAAoB,EACrB;QACA1F,IAAI,CAACwO,SAAS,CAAClB,OAAI,CAACtF,MAAM,CAACuG,2BAA2B,CAAC;MACzD,CAAC,MAAM,IAAIjB,OAAI,CAACtF,MAAM,CAACyG,UAAU,EAAE;QACjCzO,IAAI,CAACwO,SAAS,CAAClB,OAAI,CAACtF,MAAM,CAACyG,UAAU,CAAC;MACxC;;MAEA;MACA;MACA,IAAI/I,oBAAoB,EAAE;QACxB4H,OAAI,CAAClL,+BAA+B,CAACyF,GAAG,CAAC7D,SAAS,EAAEhE,IAAI,CAAC;MAC3D,CAAC,MAAM;QACLsN,OAAI,CAACnL,YAAY,CAAC0F,GAAG,CAAC7D,SAAS,EAAEhE,IAAI,CAAC;MACxC;MAEAA,IAAI,CAAC6C,EAAE,CAAC,OAAO,EAAE,YAAM;QACrB,IAAM4I,GAAG,GAAG/F,oBAAoB,GAAG,qBAAqB,GAAG,YAAY;QAEvE4H,OAAI,CAACjI,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI8I,OAAI,CAAC/L,SAAS,QAAAiD,MAAA,CAAKiH,GAAG,mBAAAjH,MAAA,CAAgBR,SAAS,CAAE,CAAC;QACtE0H,MAAM,CAAC,IAAIpE,KAAK,YAAA9C,MAAA,CAAYiH,GAAG,mBAAAjH,MAAA,CAAgBR,SAAS,CAAE,CAAC,CAAC;MAC9D,CAAC,CAAC;MAEFhE,IAAI,CAAC6C,EAAE,CAAC,UAAU,EAAE,UAAC9C,GAAG,EAAK;QAC3B,IAAIA,GAAG,EAAE;UACP,IAAM2O,MAAM,GAAG1O,IAAI,CAAC6L,aAAa,CAAC,CAAC;UACnC,IAAM8C,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAC7O,IAAI,CAAC8O,SAAS,CAACC,iBAAiB,EAAEzB,OAAI,CAACtF,MAAM,CAACsG,cAAc,CAAC;UAEpF,IAAM7B,SAAS,GAAG/G,oBAAoB,GAAG,uBAAuB,GAAG,EAAE;UAErE4H,OAAI,CAACjI,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX8I,OAAI,CAAC/L,SAAS,QAAAiD,MAAA,CAAKiI,SAAS,2CAAAjI,MAAA,CAC7BkK,MAAM,GAAG,CAAC,UAAAlK,MAAA,CACLmK,KAAK,cAAAnK,MAAA,CAAWR,SAAS,CAClC,CAAC;UACD;UACA,IAAIgL,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;YAC1C5B,OAAI,CAACjI,MAAM,CAAC8J,KAAK,IAAA3K,MAAA,CAAI8I,OAAI,CAAC/L,SAAS,SAAMxB,GAAG,EAAEA,GAAG,CAACwH,KAAK,CAAC;UAC1D;UAEA;QACF;QACA+F,OAAI,CAACjI,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI8I,OAAI,CAAC/L,SAAS,kBAAAiD,MAAA,CAAeR,SAAS,CAAE,CAAC;MAC/D,CAAC,CAAC;MAEFhE,IAAI,CAACoP,KAAK,CAAC,CAAC;IACd,CAAC,CAAC;EACJ,CAAC;EAEDtK,KAAK,WAAAA,MAAA,EAAU;IAAA,SAAAuK,KAAA,GAAAjR,SAAA,CAAAC,MAAA,EAANgG,IAAI,OAAApD,KAAA,CAAAoO,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJjL,IAAI,CAAAiL,KAAA,IAAAlR,SAAA,CAAAkR,KAAA;IAAA;IACX,IAAI;MACF,IAAI,CAACjL,IAAI,IAAIA,IAAI,CAAChG,MAAM,KAAK,CAAC,EAAE;QAC9B;MACF;;MAEA;MACA;MACA;MACA,IAAOkR,KAAK,GAAqBlL,IAAI;QAAvBmL,MAAM,GAAanL,IAAI;QAAZoL,IAAI,GAAIpL,IAAI,CAAA5D,KAAA;MAErC,IACE,OAAO8O,KAAK,KAAK,QAAQ,KACxB,IAAI,CAACvN,OAAO,CAACkF,GAAG,CAACqI,KAAK,CAAC,IAAIA,KAAK,KAAK,IAAI,CAAC7N,gBAAgB,CAAC,IAC5D,OAAO8N,MAAM,KAAK,QAAQ,EAC1B;QACA,IAAMxL,SAAS,GAAGuL,KAAK;QACvB,IAAMG,SAAS,GAAGF,MAAM;QACxB,IAAM9G,MAAM,GAAG1E,SAAS,KAAK,IAAI,CAACtC,gBAAgB,GAAG,EAAE,OAAA8C,MAAA,CAAOR,SAAS,CAAE;QAEzE,IAAI,CAAC2L,OAAO,CAAAzR,KAAA,CAAZ,IAAI,MAAAsG,MAAA,CAAYkL,SAAS,EAAAlL,MAAA,CAAGkE,MAAM,GAAAlE,MAAA,KAAAoL,mBAAA,CAAAnR,OAAA,EAAOgR,IAAI,GAAC;MAChD,CAAC,MAAM;QACL;QACA,IAAI,CAACE,OAAO,CAAAzR,KAAA,CAAZ,IAAI,EAAYmG,IAAI,CAAC;MACvB;IACF,CAAC,CAAC,OAAO+B,KAAK,EAAE;MACd;MACA,IAAI;QACF,IAAI,CAACf,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZ,IAAI,CAACjD,SAAS,yCACjB6E,KAAK,EACL,cAAc,EACd/B,IACF,CAAC;MACH,CAAC,CAAC,OAAOwL,QAAQ,EAAE;QACjB;QACA;QACAC,OAAO,CAAC1J,KAAK,CAAC,sCAAsC,EAAEyJ,QAAQ,CAAC;MACjE;IACF;EACF,CAAC;EAEDE,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;IAC3B,IAAAC,gBAAA,GAA0BD,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;MAAAC,iBAAA,OAAAtD,eAAA,CAAApO,OAAA,EAAAwR,gBAAA;MAAvC1O,SAAS,GAAA4O,iBAAA;MAAExP,IAAI,GAAAwP,iBAAA;IACtB,IAAMC,QAAQ,GAAG,EAAE;IAEnB,IAAI,CAAC,IAAI,CAACpN,KAAK,CAACzB,SAAS,CAAC,IAAI,CAAC,IAAI,CAACyB,KAAK,CAACC,QAAQ,CAAC1B,SAAS,CAAC,EAAE;MAC7D,OAAO6O,QAAQ;IACjB;IAEA,IAAMC,WAAW,GAAG,IAAAC,iBAAS,aAAA9L,MAAA,CAAY7D,IAAI,WAAQ,CAAC;IAEtD,IAAI,CAAC,IAAI,CAACqC,KAAK,CAACzB,SAAS,CAAC,IAAI,IAAI,CAACyB,KAAK,CAACC,QAAQ,CAAC1B,SAAS,CAAC,EAAE8O,WAAW,CAAC,EAAE;MAC1ED,QAAQ,CAACnS,IAAI,CAAC;QACZ0C,IAAI,EAAE0P,WAAW;QACjB9O,SAAS,EAATA;MACF,CAAC,CAAC;IACJ;IAEA,OAAO6O,QAAQ;EACjB,CAAC;EAEDjM,QAAQ,WAAAA,SAACH,SAAS,EAAEE,KAAK,EAAEqM,YAAY,EAAE;IACvC;IACA;;IAEA,IAAI;MACF,IAAMpK,MAAM,GAAGjC,KAAK,CAACiC,MAAM,IAAIjC,KAAK,CAACiC,MAAM,CAACqK,WAAW,CAAC,CAAC;MACzD,IAAIrJ,aAAa,GAAG,IAAI,CAACnF,OAAO,CAACoD,GAAG,CAACpB,SAAS,CAAC;MAC/C,IAAIkH,SAAS;MACbhH,KAAK,CAACF,SAAS,GAAGA,SAAS;MAE3B,IAAMyM,cAAc,GAAGF,YAAY,KAAKpJ,aAAa;MACrD,IAAIoJ,YAAY,EAAE;QAChBrF,SAAS,GAAGqF,YAAY,CAACvK,GAAG;MAC9B;MACA,IAAI,CAAChE,OAAO,CAACqE,MAAM,CAACrC,SAAS,CAAC;MAE9B,IAAIyM,cAAc,EAAE;QAClB;QACA,IAAItJ,aAAa,EAAE;UACjBA,aAAa,CAACwB,kBAAkB,CAAC,CAAC;UAClCxB,aAAa,GAAG,IAAI;UACpB,IAAI,CAACrC,KAAK,CAACd,SAAS,EAAE,SAAS,EAAEE,KAAK,CAAC;QACzC;QACA;QACA,IAAI,CAACpC,UAAU,GAAG,IAAI,CAAC8E,oBAAoB,CAAC,CAAC;QAC7C,IAAI,CAAChF,SAAS,GAAG,IAAI,CAACmE,mBAAmB,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAACnE,SAAS,EAAE;UACnB,IAAI,CAACoB,KAAK,CAACC,QAAQ,CAAC2K,UAAU,CAACC,qBAAqB,CAACC,yBAAyB,CAAC,KAAK,CAAC;QACvF;MACF,CAAC,MAAM;QACL;QACA,IAAI,CAACzI,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,kDAAAiD,MAAA,CAA+CN,KAAK,CAACiE,IAAI,WAAA3D,MAAA,CAAQR,SAAS,CAC7F,CAAC;QACD;QACA,IAAIuM,YAAY,EAAE;UAChBA,YAAY,CAAC5H,kBAAkB,CAAC,CAAC;QACnC;MACF;MAEA,QAAQzE,KAAK,CAACiE,IAAI;QAChB,KAAK,IAAI;UACP;UACA,IAAI,CAAC9C,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,kDAAAiD,MAAA,CAA+CR,SAAS,4BAAAQ,MAAA,CAAyBN,KAAK,CAACiC,MAAM,CAChH,CAAC;UACD,IAAIsK,cAAc,EAAE,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;UACrE;QACF,KAAK,IAAI;UACP;UACA,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,eAAAiD,MAAA,CAAYR,SAAS,kCAA+B,CAAC;UACvF,IAAIyM,cAAc,EAAE,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,kBAAkB,EAAEE,KAAK,CAAC;UACpE;UACA;QACF,KAAK,IAAI;UACP;UACA,IAAIuM,cAAc,EAAE;YAClB;YACA;YACA;YACA,IAAI,CAACpL,MAAM,CAACgH,IAAI,IAAA7H,MAAA,CACX,IAAI,CAACjD,SAAS,uEAAAiD,MAAA,CAAoER,SAAS,CAChG,CAAC;YACD,IAAI,CAACc,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;UACnD,CAAC,MAAM;YACL;YACA,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,wFAAAiD,MAAA,CAAqFR,SAAS,CACjH,CAAC;YACD,IAAI,CAACc,KAAK,CAACd,SAAS,EAAE,kBAAkB,EAAEE,KAAK,CAAC;UAClD;UACA;QACF,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;UACP,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,eAAAiD,MAAA,CAAYR,SAAS,gCAA6B,CAAC;UACrF,IAAIyM,cAAc,EAAE;YAClB,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;YACjD,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,6DAAAiD,MAAA,CAA0DR,SAAS,CACtF,CAAC;YACD,IAAI,CAAC0M,UAAU,CAACxF,SAAS,EAAElH,SAAS,CAAC;UACvC;UACA;UACA;UACA;QACF,KAAK,IAAI;QACT,KAAK,IAAI;UAAE;UACT,IAAI9C,sBAAsB,CAACgH,QAAQ,CAAC/B,MAAM,CAAC,EAAE;YAC3C,IAAI,CAACd,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,eAAAiD,MAAA,CAAYR,SAAS,gCAA6B,CAAC;YACrF,IAAIyM,cAAc,EAAE;cAClB,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;cACjD,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,wDAAAiD,MAAA,CAAqDR,SAAS,CACjF,CAAC;cACD,IAAI,CAAC0M,UAAU,CAACxF,SAAS,EAAElH,SAAS,CAAC;YACvC;YACA;YACA;UACF,CAAC,MAAM;YACL,IAAI,CAACqB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,eAAAiD,MAAA,CAAYR,SAAS,yCAAAQ,MAAA,CAAsCN,KAAK,CAACiC,MAAM,CAC1F,CAAC;YACD,IAAIsK,cAAc,EAAE,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;UACvE;UACA;QACF;UACE,IAAI,CAACmB,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,eAAAiD,MAAA,CAAYR,SAAS,mDACxC,CAAC;UACD;UACA,IAAIyM,cAAc,EAAE,IAAI,CAAC3L,KAAK,CAACd,SAAS,EAAE,mBAAmB,EAAEE,KAAK,CAAC;MACzE;IACF,CAAC,CAAC,OAAOkC,KAAK,EAAE;MACd,IAAI,CAACf,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZ,IAAI,CAACjD,SAAS,4CAAAiD,MAAA,CAAyCR,SAAS,GACnEoC,KACF,CAAC;IACH;EACF,CAAC;EAED7B,UAAU,WAAAA,WAACP,SAAS,EAAEE,KAAK,EAAE;IAAA,IAAAyM,OAAA;IAC3B,IAAI,CAAChM,cAAc,CAACX,SAAS,EAAEE,KAAK,CAAC;IACrC,IAAMpB,QAAQ,GAAGoB,KAAK,CAACnB,IAAI;IAE3B,IAAIiM,OAAO,CAACC,GAAG,CAAC2B,sBAAsB,EAAE;MACtC,IAAI,CAACvL,MAAM,CAAC8J,KAAK,IAAA3K,MAAA,CAAI,IAAI,CAACjD,SAAS,8BAAAiD,MAAA,CAA2BR,SAAS,SAAMlB,QAAQ,CAAC;IACxF;IAEAA,QAAQ,CAACkB,SAAS,GAAGA,SAAS;;IAE9B;IACA,IAAIlB,QAAQ,IAAIA,QAAQ,CAACjB,IAAI,KAAK,UAAU,EAAE;MAC5C,IAAI,CAACwD,MAAM,CAACC,IAAI,IAAAd,MAAA,CACX,IAAI,CAACjD,SAAS,0DAAAiD,MAAA,CAAuDR,SAAS,CACnF,CAAC;MACD,IAAI,CAACc,KAAK,CAACd,SAAS,EAAE,iCAAiC,EAAElB,QAAQ,CAAC;MAElE,IAAI,CAACmC,uBAAuB,CAACjB,SAAS,CAAC;MAEvC,OAAOoD,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CAAC,CAAC;IAC1B;IAEAvE,QAAQ,CAACkB,SAAS,GAAGA,SAAS;IAC9B,IAAOjB,IAAI,GAAID,QAAQ,CAAhBC,IAAI;IAEX,IAAI,CAAC0G,eAAe,CAAC1G,IAAI,CAAC;IAE1B,OAAO,IAAI,CAACgN,iBAAiB,CAAChN,IAAI,CAACiN,SAAS,CAAC,CAC1Ca,MAAM,CACL,UAACC,OAAO,EAAEC,OAAO;MAAA,OACfD,OAAO,CAAC7K,IAAI,CAAC,YAAM;QACjB,IAAO1E,SAAS,GAAUwP,OAAO,CAA1BxP,SAAS;UAAEZ,IAAI,GAAIoQ,OAAO,CAAfpQ,IAAI;QAEtB,OAAO,IAAAyG,QAAA,CAAA3I,OAAA,CAAY,UAAC4I,OAAO;UAAA,OACzBA,OAAO,CAAC,CAACsJ,OAAI,CAAC3N,KAAK,CAACzB,SAAS,CAAC,IAAIoP,OAAI,CAAC3N,KAAK,CAACC,QAAQ,CAAC1B,SAAS,CAAC,EAAEZ,IAAI,CAAC,CAACoC,IAAI,CAAC,CAAC;QAAA,CAChF,CAAC,CAACmD,KAAK,CAAC,UAACC,MAAM;UAAA,OACbwK,OAAI,CAACtL,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZmM,OAAI,CAACpP,SAAS,sDAAAiD,MAAA,CAAmDzB,IAAI,CAACiN,SAAS,YAAAxL,MAAA,CAASR,SAAS,GACpGmC,MACF,CAAC;QAAA,CACH,CAAC;MACH,CAAC,CAAC;IAAA,GACJiB,QAAA,CAAA3I,OAAA,CAAQ4I,OAAO,CAAC,CAClB,CAAC,CACApB,IAAI,CAAC,YAAM;MACV0K,OAAI,CAAC7L,KAAK,CAACd,SAAS,EAAE,OAAO,EAAElB,QAAQ,CAAC;MACxC,IAAAkO,qBAAA,GAAoBjO,IAAI,CAACiN,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;QAAAe,sBAAA,OAAApE,eAAA,CAAApO,OAAA,EAAAuS,qBAAA;QAAtCzP,SAAS,GAAA0P,sBAAA;MAEhB,IAAI1P,SAAS,KAAKwB,IAAI,CAACiN,SAAS,EAAE;QAChCW,OAAI,CAAC7L,KAAK,CAACd,SAAS,WAAAQ,MAAA,CAAWjD,SAAS,GAAIuB,QAAQ,CAAC;MACvD,CAAC,MAAM;QACL6N,OAAI,CAAC7L,KAAK,CAACd,SAAS,WAAAQ,MAAA,CAAWjD,SAAS,GAAIuB,QAAQ,CAAC;QACrD6N,OAAI,CAAC7L,KAAK,CAACd,SAAS,WAAAQ,MAAA,CAAWzB,IAAI,CAACiN,SAAS,GAAIlN,QAAQ,CAAC;MAC5D;IACF,CAAC,CAAC,CACDoD,KAAK,CAAC,UAACC,MAAM,EAAK;MACjBwK,OAAI,CAACtL,MAAM,CAACe,KAAK,IAAA5B,MAAA,CACZmM,OAAI,CAACpP,SAAS,sDAAAiD,MAAA,CAAmDR,SAAS,GAC7EmC,MACF,CAAC;IACH,CAAC,CAAC;EACN,CAAC;EAEDxB,cAAc,WAAAA,eAACX,SAAS,EAAEE,KAAK,EAAE;IAC/B,IAAOgN,gBAAgB,GAAIhN,KAAK,CAACnB,IAAI,CAA9BmO,gBAAgB;IACvB,IAAI,OAAOA,gBAAgB,KAAK,QAAQ,IAAIA,gBAAgB,GAAG,CAAC,EAAE;MAChE,IAAI,CAAC5O,iBAAiB,GAAG,IAAAkD,IAAA,CAAA/G,OAAA,EAAS,CAAC,GAAGyS,gBAAgB;IACxD;EACF,CAAC;EAEDR,UAAU,WAAAA,WAAC5K,YAAY,EAAqC;IAAA,IAAnC9B,SAAS,GAAA5F,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAqD,SAAA,GAAArD,SAAA,MAAG,IAAI,CAACsD,gBAAgB;IACxD,IAAI,CAAC2D,MAAM,CAACC,IAAI,IAAAd,MAAA,CAAI,IAAI,CAACjD,SAAS,qBAAAiD,MAAA,CAAkBR,SAAS,CAAE,CAAC;IAEhE,OAAO,IAAI,CAAC+C,OAAO,CAACjB,YAAY,EAAE9B,SAAS,CAAC;EAC9C,CAAC;EAAAmN,OAAA;AACH,CAAC,OAAAC,0BAAA,CAAA3S,OAAA,EAAAnB,IAAA,aAAAF,IAAA,OAAAiU,yBAAA,CAAA5S,OAAA,EAAAnB,IAAA,aAAAA,IAAA,OAAA8T,0BAAA,CAAA3S,OAAA,EAAAnB,IAAA,oBAAAD,KAAA,OAAAgU,yBAAA,CAAA5S,OAAA,EAAAnB,IAAA,oBAAAA,IAAA,IAAAA,IAAA,GAAC;AAAC,IAAAgU,SAAA,GAAAC,OAAA,CAAA9S,OAAA,GAEY0C,OAAO"}
@@ -48,6 +48,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
48
48
  _this._domain = 'unknown-domain';
49
49
  _this.onmessage = _this.onmessage.bind((0, _assertThisInitialized2.default)(_this));
50
50
  _this.onclose = _this.onclose.bind((0, _assertThisInitialized2.default)(_this));
51
+ // Increase max listeners to avoid memory leak warning in tests
52
+ _this.setMaxListeners(5);
51
53
  return _this;
52
54
  }
53
55
 
@@ -354,9 +356,22 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
354
356
  if (!(0, _lodash.has)(event, 'data.id')) {
355
357
  return _promise.default.reject(new Error('`event.data.id` is required'));
356
358
  }
359
+
360
+ // Don't try to acknowledge if socket is not in open state
361
+ if (this.readyState !== 1) {
362
+ return _promise.default.resolve(); // Silently ignore acknowledgment for closed sockets
363
+ }
364
+
357
365
  return this.send({
358
366
  messageId: event.data.id,
359
367
  type: 'ack'
368
+ }).catch(function (error) {
369
+ // Gracefully handle send errors (like INVALID_STATE_ERROR) to prevent test issues
370
+ if (error.message === 'INVALID_STATE_ERROR') {
371
+ return _promise.default.resolve(); // Socket was closed, ignore the acknowledgment
372
+ }
373
+
374
+ throw error; // Re-throw other errors
360
375
  });
361
376
  }
362
377
 
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","originalCode","originalReason","reason","defaults","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","URL","hostname","_unused","checkRequired","_keys","forEach","_defineProperty","enumerable","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","_this4","isObject","_stringify","has","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","calculateLatency","pingTimestamp","now","performance","latency","pongTimeout","EventEmitter"],"sources":["socket-base.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const originalCode = options.code;\n const originalReason = options.reason;\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n Object.keys(options).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n this._acknowledge(processedEvent);\n if (data.type === 'pong') {\n this.emit('pong', processedEvent);\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAC,sBAAA,CAAAL,OAAA;AAEA,IAAAM,OAAA,GAAAN,OAAA;AAOmB,SAAAO,aAAAC,OAAA,QAAAC,yBAAA,GAAAC,yBAAA,oBAAAC,qBAAA,QAAAC,KAAA,OAAAC,gBAAA,CAAAC,OAAA,EAAAN,OAAA,GAAAO,MAAA,MAAAN,yBAAA,QAAAO,SAAA,OAAAH,gBAAA,CAAAC,OAAA,QAAAG,WAAA,EAAAF,MAAA,GAAAG,kBAAA,CAAAN,KAAA,EAAAO,SAAA,EAAAH,SAAA,YAAAD,MAAA,GAAAH,KAAA,CAAAQ,KAAA,OAAAD,SAAA,gBAAAE,2BAAA,CAAAP,OAAA,QAAAC,MAAA;AAAA,SAAAL,0BAAA,eAAAY,OAAA,qBAAAJ,kBAAA,oBAAAA,kBAAA,CAAAK,IAAA,2BAAAC,KAAA,oCAAAC,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAC,IAAA,CAAAV,kBAAA,CAAAO,OAAA,8CAAAI,CAAA,sBAlBnB;AACA;AACA;AAkBA,IAAMC,OAAO,GAAG,IAAAC,QAAA,CAAAjB,OAAA,CAAY,CAAC;;AAE7B;AACA;AACA;AAFA,IAGqBkB,MAAM,GAAAC,OAAA,CAAAnB,OAAA,0BAAAoB,aAAA;EAAA,IAAAC,UAAA,CAAArB,OAAA,EAAAkB,MAAA,EAAAE,aAAA;EAAA,IAAAE,MAAA,GAAA7B,YAAA,CAAAyB,MAAA;EACzB;AACF;AACA;AACA;EACE,SAAAA,OAAA,EAAc;IAAA,IAAAK,KAAA;IAAA,IAAAC,gBAAA,CAAAxB,OAAA,QAAAkB,MAAA;IACZK,KAAA,GAAAD,MAAA,CAAAR,IAAA;IACAS,KAAA,CAAKE,OAAO,GAAG,gBAAgB;IAC/BF,KAAA,CAAKG,SAAS,GAAGH,KAAA,CAAKG,SAAS,CAACC,IAAI,KAAAC,uBAAA,CAAA5B,OAAA,EAAAuB,KAAA,CAAK,CAAC;IAC1CA,KAAA,CAAKM,OAAO,GAAGN,KAAA,CAAKM,OAAO,CAACF,IAAI,KAAAC,uBAAA,CAAA5B,OAAA,EAAAuB,KAAA,CAAK,CAAC;IAAC,OAAAA,KAAA;EACzC;;EAEA;AACF;AACA;AACA;EAHE,IAAAO,aAAA,CAAA9B,OAAA,EAAAkB,MAAA;IAAAa,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAiB;MACf,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACC,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAAF,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAqB;MACnB,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACE,cAAc;IACzC;;IAEA;AACF;AACA;AACA;EAHE;IAAAH,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAiB;MACf,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACG,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAAJ,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAe;MACb,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACI,QAAQ;IACnC;;IAEA;AACF;AACA;AACA;EAHE;IAAAL,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAiB;MACf,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACK,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAAN,GAAA;IAAAC,GAAA,EAIA,SAAAA,IAAA,EAAU;MACR,OAAOhB,OAAO,CAACgB,GAAG,CAAC,IAAI,CAAC,CAACM,GAAG;IAC9B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAP,GAAA;IAAAQ,KAAA;IAWA;AACF;AACA;AACA;AACA;AACA;AACA;IACE,SAAAC,MAAMC,OAAO,EAAE;MAAA,IAAAC,MAAA;MACb,OAAO,IAAAC,QAAA,CAAA3C,OAAA,CAAY,UAAC4C,OAAO,EAAEC,MAAM,EAAK;QACtC,IAAMC,MAAM,GAAG9B,OAAO,CAACgB,GAAG,CAACU,MAAI,CAAC;QAEhC,IAAI,CAACI,MAAM,EAAE;UACX;UACAF,OAAO,CAAC,CAAC;UAET;QACF;QACA;QACAF,MAAI,CAACK,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWP,MAAI,CAACjB,OAAO,cAAW,CAAC;QAEnD,IAAIqB,MAAM,CAACT,UAAU,KAAK,CAAC,IAAIS,MAAM,CAACT,UAAU,KAAK,CAAC,EAAE;UACtDK,MAAI,CAACK,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWP,MAAI,CAACjB,OAAO,qBAAkB,CAAC;UAC1DmB,OAAO,CAAC,CAAC;UAET;QACF;QAEAH,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;QACvB,IAAIA,OAAO,CAACS,IAAI,IAAIT,OAAO,CAACS,IAAI,KAAK,IAAI,KAAKT,OAAO,CAACS,IAAI,GAAG,IAAI,IAAIT,OAAO,CAACS,IAAI,GAAG,IAAI,CAAC,EAAE;UACzFL,MAAM,CAAC,IAAIM,KAAK,CAAC,kEAAkE,CAAC,CAAC;UAErF;QACF;QAEA,IAAMC,YAAY,GAAGX,OAAO,CAACS,IAAI;QACjC,IAAMG,cAAc,GAAGZ,OAAO,CAACa,MAAM;QAErCb,OAAO,GAAG,IAAAc,gBAAQ,EAACd,OAAO,EAAE;UAC1BS,IAAI,EAAE,IAAI;UACVI,MAAM,EAAE;QACV,CAAC,CAAC;QAEF,IAAME,UAAU,GAAG,IAAAC,4BAAc,EAAC,YAAM;UACtC,IAAI;YACFf,MAAI,CAACK,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWP,MAAI,CAACjB,OAAO,+CAA4C,CAAC;YACpFmB,OAAO,CACLF,MAAI,CAACb,OAAO,CACVuB,YAAY,GACR;cAACF,IAAI,EAAEE,YAAY;cAAEE,MAAM,EAAED,cAAc,IAAI;YAAgB,CAAC,GAChE;cACEH,IAAI,EAAE,IAAI;cACVI,MAAM,EAAE;YACV,CACN,CACF,CAAC;UACH,CAAC,CAAC,OAAOI,KAAK,EAAE;YACdhB,MAAI,CAACK,MAAM,CAACY,IAAI,WAAAV,MAAA,CAAWP,MAAI,CAACjB,OAAO,2BAAwBiC,KAAK,CAAC;UACvE;QACF,CAAC,EAAEhB,MAAI,CAACkB,eAAe,CAAC;QAExBd,MAAM,CAACjB,OAAO,GAAG,UAACgC,KAAK,EAAK;UAC1BnB,MAAI,CAACK,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWP,MAAI,CAACjB,OAAO,0BAAuBoC,KAAK,CAACX,IAAI,EAAEW,KAAK,CAACP,MAAM,CAAC;UACvFQ,YAAY,CAACN,UAAU,CAAC;UACxBd,MAAI,CAACb,OAAO,CAACgC,KAAK,CAAC;UACnBjB,OAAO,CAACiB,KAAK,CAAC;QAChB,CAAC;QAEDf,MAAM,CAACN,KAAK,CAACC,OAAO,CAACS,IAAI,EAAET,OAAO,CAACa,MAAM,CAAC;MAC5C,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAZE;IAAAvB,GAAA;IAAAQ,KAAA,EAaA,SAAAwB,KAAKzB,GAAG,EAAEG,OAAO,EAAE;MAAA,IAAAuB,MAAA;MACjB,IAAI;QACF,IAAI,CAACvC,OAAO,GAAG,IAAIwC,GAAG,CAAC3B,GAAG,CAAC,CAAC4B,QAAQ;MACtC,CAAC,CAAC,OAAAC,OAAA,EAAM;QACN,IAAI,CAAC1C,OAAO,GAAGa,GAAG;MACpB;MAEA,OAAO,IAAAK,QAAA,CAAA3C,OAAA,CAAY,UAAC4C,OAAO,EAAEC,MAAM,EAAK;QACtC;QACA,IAAI,CAACP,GAAG,EAAE;UACRO,MAAM,CAAC,IAAIM,KAAK,CAAC,mBAAmB,CAAC,CAAC;UAEtC;QACF;QAEA,IAAInC,OAAO,CAACgB,GAAG,CAACgC,MAAI,CAAC,EAAE;UACrBnB,MAAM,CAAC,IAAIM,KAAK,CAAC,oDAAoD,CAAC,CAAC;UAEvE;QACF;QAEAV,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;QAEvB,IAAA2B,qBAAa,EACX,CAAC,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EACnF3B,OACF,CAAC;QAED,IAAA4B,KAAA,CAAArE,OAAA,EAAYyC,OAAO,CAAC,CAAC6B,OAAO,CAAC,UAACvC,GAAG,EAAK;UACpC,IAAAwC,eAAA,CAAAvE,OAAA,EAAuBgE,MAAI,EAAEjC,GAAG,EAAE;YAChCyC,UAAU,EAAE,KAAK;YACjBjC,KAAK,EAAEE,OAAO,CAACV,GAAG;UACpB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAM0C,SAAS,GAAGvD,MAAM,CAACwD,uBAAuB,CAAC,CAAC;QAElDV,MAAI,CAACjB,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWe,MAAI,CAACvC,OAAO,yBAAsB,CAAC;QAC9D,IAAMqB,MAAM,GAAG,IAAI2B,SAAS,CAACnC,GAAG,EAAE,EAAE,EAAEG,OAAO,CAAC;QAE9CK,MAAM,CAACb,UAAU,GAAG,aAAa;QACjCa,MAAM,CAACpB,SAAS,GAAGsC,MAAI,CAACtC,SAAS;QAEjCoB,MAAM,CAACjB,OAAO,GAAG,UAACgC,KAAK,EAAK;UAC1BA,KAAK,GAAGG,MAAI,CAACW,aAAa,CAACd,KAAK,CAAC;UACjCG,MAAI,CAACjB,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWe,MAAI,CAACvC,OAAO,2BAAwBoC,KAAK,CAACX,IAAI,EAAEW,KAAK,CAACP,MAAM,CAAC;UACxF,QAAQO,KAAK,CAACX,IAAI;YAChB,KAAK,IAAI;cACP;cACA;cACA;cACA;cACA,OAAOL,MAAM,CAAC,IAAI+B,uBAAe,CAACf,KAAK,CAAC,CAAC;YAC3C,KAAK,IAAI;cACP,OAAOhB,MAAM,CAAC,IAAIgC,kBAAU,CAAChB,KAAK,CAAC,CAAC;YACtC,KAAK,IAAI;cACP,OAAOhB,MAAM,CAAC,IAAIiC,qBAAa,CAACjB,KAAK,CAAC,CAAC;YACzC,KAAK,IAAI;cACP,OAAOhB,MAAM,CAAC,IAAIkC,iBAAS,CAAClB,KAAK,CAAC,CAAC;YACrC;YACA;YACA;cACE,OAAOhB,MAAM,CAAC,IAAImC,uBAAe,CAACnB,KAAK,CAAC,CAAC;UAC7C;QACF,CAAC;QAEDf,MAAM,CAACmC,MAAM,GAAG,YAAM;UACpBjB,MAAI,CAACjB,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWe,MAAI,CAACvC,OAAO,gBAAa,CAAC;UACrDuC,MAAI,CAACkB,UAAU,CAAC,CAAC,CACdC,IAAI,CAAC,YAAM;YACVnB,MAAI,CAACjB,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWe,MAAI,CAACvC,OAAO,iBAAc,CAAC;YACtDqB,MAAM,CAACjB,OAAO,GAAGmC,MAAI,CAACnC,OAAO;YAC7Be,OAAO,CAAC,CAAC;UACX,CAAC,CAAC,CACDwC,KAAK,CAACvC,MAAM,CAAC;QAClB,CAAC;QAEDC,MAAM,CAACuC,OAAO,GAAG,UAACxB,KAAK,EAAK;UAC1BG,MAAI,CAACjB,MAAM,CAACY,IAAI,WAAAV,MAAA,CAAWe,MAAI,CAACvC,OAAO,0BAAuBoC,KAAK,CAAC;QACtE,CAAC;QAED7C,OAAO,CAACsE,GAAG,CAACtB,MAAI,EAAElB,MAAM,CAAC;QACzBkB,MAAI,CAACjB,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAWe,MAAI,CAACvC,OAAO,yBAAsB,CAAC;MAChE,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAM,GAAA;IAAAQ,KAAA,EAKA,SAAAV,QAAQgC,KAAK,EAAE;MACb,IAAI,CAACd,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAW,IAAI,CAACxB,OAAO,eAAYoC,KAAK,CAACX,IAAI,EAAEW,KAAK,CAACP,MAAM,CAAC;MAC5EQ,YAAY,CAAC,IAAI,CAACyB,SAAS,CAAC;MAC5BzB,YAAY,CAAC,IAAI,CAAC0B,SAAS,CAAC;MAE5B3B,KAAK,GAAG,IAAI,CAACc,aAAa,CAACd,KAAK,CAAC;MACjC,IAAI,CAAC4B,IAAI,CAAC,OAAO,EAAE5B,KAAK,CAAC;;MAEzB;MACA;MACA,IAAI,CAAC6B,kBAAkB,CAAC,CAAC;IAC3B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA3D,GAAA;IAAAQ,KAAA,EAKA,SAAAb,UAAUmC,KAAK,EAAE;MACf,IAAI;QACF,IAAM8B,IAAI,GAAGC,IAAI,CAACC,KAAK,CAAChC,KAAK,CAAC8B,IAAI,CAAC;QACnC,IAAMG,cAAc,GAAG,IAAAC,UAAA,CAAA/F,OAAA,EAAS2F,IAAI,CAACG,cAAc,EAAE,EAAE,CAAC;QAExD,IAAI,CAAC/C,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CAAW,IAAI,CAACxB,OAAO,0BAAuBqE,cAAc,CAAC;QAC9E,IAAI,IAAI,CAACG,sBAAsB,IAAIH,cAAc,KAAK,IAAI,CAACG,sBAAsB,EAAE;UACjF,IAAI,CAAClD,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CACL,IAAI,CAACxB,OAAO,2EAAAwB,MAAA,CAAwE,IAAI,CAACgD,sBAAsB,gBAAAhD,MAAA,CAAa6C,cAAc,CACtJ,CAAC;UACD,IAAI,CAACL,IAAI,CAAC,mBAAmB,EAAEK,cAAc,EAAE,IAAI,CAACG,sBAAsB,CAAC;QAC7E;QACA,IAAI,CAACA,sBAAsB,GAAGH,cAAc,GAAG,CAAC;;QAEhD;QACA;QACA;QACA,IAAMI,cAAc,GAAG;UAACP,IAAI,EAAJA;QAAI,CAAC;QAE7B,IAAI,CAACQ,YAAY,CAACD,cAAc,CAAC;QACjC,IAAIP,IAAI,CAACS,IAAI,KAAK,MAAM,EAAE;UACxB,IAAI,CAACX,IAAI,CAAC,MAAM,EAAES,cAAc,CAAC;QACnC,CAAC,MAAM;UACL,IAAI,CAACT,IAAI,CAAC,SAAS,EAAES,cAAc,CAAC;QACtC;MACF,CAAC,CAAC,OAAOxC,KAAK,EAAE;QACd;QACA;QACA;QACA;QACA,IAAI,CAACX,MAAM,CAACY,IAAI,WAAAV,MAAA,CAAW,IAAI,CAACxB,OAAO,gDAA6CiC,KAAK,CAAC;MAC5F;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA3B,GAAA;IAAAQ,KAAA,EAKA,SAAA8D,KAAKV,IAAI,EAAE;MAAA,IAAAW,MAAA;MACT,OAAO,IAAA3D,QAAA,CAAA3C,OAAA,CAAY,UAAC4C,OAAO,EAAEC,MAAM,EAAK;QACtC,IAAIyD,MAAI,CAACjE,UAAU,KAAK,CAAC,EAAE;UACzB,OAAOQ,MAAM,CAAC,IAAIM,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACjD;QAEA,IAAI,IAAAoD,gBAAQ,EAACZ,IAAI,CAAC,EAAE;UAClBA,IAAI,GAAG,IAAAa,UAAA,CAAAxG,OAAA,EAAe2F,IAAI,CAAC;QAC7B;QAEA,IAAM7C,MAAM,GAAG9B,OAAO,CAACgB,GAAG,CAACsE,MAAI,CAAC;QAEhCxD,MAAM,CAACuD,IAAI,CAACV,IAAI,CAAC;QAEjB,OAAO/C,OAAO,CAAC,CAAC;MAClB,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAb,GAAA;IAAAQ,KAAA,EAKA,SAAA4D,aAAatC,KAAK,EAAE;MAClB,IAAI,CAACA,KAAK,EAAE;QACV,OAAOlB,QAAA,CAAA3C,OAAA,CAAQ6C,MAAM,CAAC,IAAIM,KAAK,CAAC,qBAAqB,CAAC,CAAC;MACzD;MAEA,IAAI,CAAC,IAAAsD,WAAG,EAAC5C,KAAK,EAAE,SAAS,CAAC,EAAE;QAC1B,OAAOlB,QAAA,CAAA3C,OAAA,CAAQ6C,MAAM,CAAC,IAAIM,KAAK,CAAC,6BAA6B,CAAC,CAAC;MACjE;MAEA,OAAO,IAAI,CAACkD,IAAI,CAAC;QACfK,SAAS,EAAE7C,KAAK,CAAC8B,IAAI,CAACgB,EAAE;QACxBP,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAArE,GAAA;IAAAQ,KAAA,EAKA,SAAA2C,WAAA,EAAa;MAAA,IAAA0B,MAAA;MACX,OAAO,IAAAjE,QAAA,CAAA3C,OAAA,CAAY,UAAC4C,OAAO,EAAK;QAC9BgE,MAAI,CAAC7D,MAAM,CAACC,IAAI,WAAAC,MAAA,CAAW2D,MAAI,CAACnF,OAAO,kBAAe,CAAC;QACvDmF,MAAI,CAACP,IAAI,CAAC;UACRM,EAAE,EAAEE,aAAI,CAACC,EAAE,CAAC,CAAC;UACbV,IAAI,EAAE,eAAe;UACrBT,IAAI,EAAE;YACJoB,KAAK,EAAEH,MAAI,CAACG;UACd,CAAC;UACDC,UAAU,EAAEJ,MAAI,CAACI,UAAU;UAC3BC,aAAa,EAAEL,MAAI,CAACK;QACtB,CAAC,CAAC;QAEF,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIrD,KAAK,EAAK;UACpC,IACE,CAACA,KAAK,CAAC8B,IAAI,CAACS,IAAI,KACfvC,KAAK,CAAC8B,IAAI,CAACA,IAAI,CAACwB,SAAS,KAAK,sBAAsB,IACnDtD,KAAK,CAAC8B,IAAI,CAACA,IAAI,CAACwB,SAAS,KAAK,6BAA6B,CAAC,EAC9D;YACAP,MAAI,CAACQ,cAAc,CAAC,SAAS,EAAEF,kBAAkB,CAAC;YAClDN,MAAI,CAACS,KAAK,CAAC,CAAC;YACZzE,OAAO,CAAC,CAAC;UACX;QACF,CAAC;QAEDgE,MAAI,CAACU,IAAI,CAAC,SAAS,EAAEJ,kBAAkB,CAAC;MAC1C,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAnF,GAAA;IAAAQ,KAAA,EAOA,SAAAoC,cAAcd,KAAK,EAAE;MACnB,IAAIA,KAAK,CAACX,IAAI,KAAK,IAAI,IAAIW,KAAK,CAACP,MAAM,EAAE;QACvC,QAAQO,KAAK,CAACP,MAAM,CAACiE,WAAW,CAAC,CAAC;UAChC,KAAK,UAAU;YACb,IAAI,CAACxE,MAAM,CAACC,IAAI,WAAAC,MAAA,CACJ,IAAI,CAACxB,OAAO,4CACtBoC,KAAK,CAACP,MACR,CAAC;YACDO,KAAK,CAACX,IAAI,GAAG,IAAI;YACjB;UACF,KAAK,uBAAuB;UAC5B,KAAK,2EAA2E;YAC9E,IAAI,CAACH,MAAM,CAACC,IAAI,WAAAC,MAAA,CACJ,IAAI,CAACxB,OAAO,4CACtBoC,KAAK,CAACP,MACR,CAAC;YACDO,KAAK,CAACX,IAAI,GAAG,IAAI;YACjB;UACF;UACA;QACF;MACF;;MAEA,OAAOW,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA9B,GAAA;IAAAQ,KAAA,EAMA,SAAA8E,MAAMV,EAAE,EAAE;MAAA,IAAAa,MAAA;MACR,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAI5D,KAAK,EAAK;QAC/B,IAAI;UACF2D,MAAI,CAACzE,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CAAWuE,MAAI,CAAC/F,OAAO,aAAUoC,KAAK,CAAC8B,IAAI,CAACgB,EAAE,CAAC;UAChE,IAAI9C,KAAK,CAAC8B,IAAI,IAAI9B,KAAK,CAAC8B,IAAI,CAACgB,EAAE,KAAKA,EAAE,EAAE;YACtCa,MAAI,CAACzE,MAAM,CAACC,IAAI,WAAAC,MAAA,CACJuE,MAAI,CAAC/F,OAAO,sDACxB,CAAC;YACD+F,MAAI,CAACzE,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CAAWuE,MAAI,CAAC/F,OAAO,iBAAckF,EAAE,EAAE,UAAU,EAAE9C,KAAK,CAAC8B,IAAI,CAACgB,EAAE,CAAC;YACpFa,MAAI,CAAChF,KAAK,CAAC;cACTU,IAAI,EAAE,IAAI;cACVI,MAAM,EAAE;YACV,CAAC,CAAC;UACJ;QACF,CAAC,CAAC,OAAOI,KAAK,EAAE;UACd;UACA;UACA;UACA8D,MAAI,CAACzE,MAAM,CAACW,KAAK,WAAAT,MAAA,CAAWuE,MAAI,CAAC/F,OAAO,wCAAqCiC,KAAK,CAAC;QACrF;MACF,CAAC;MAED,IAAMgE,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAA,EAAS;QAC9B,IAAI;UACFF,MAAI,CAACzE,MAAM,CAACC,IAAI,WAAAC,MAAA,CACJuE,MAAI,CAAC/F,OAAO,0DACxB,CAAC;UACD+F,MAAI,CAAChF,KAAK,CAAC;YACTU,IAAI,EAAE,IAAI;YACVI,MAAM,EAAE;UACV,CAAC,CAAC,CAAC8B,KAAK,CAAC,UAAC9B,MAAM,EAAK;YACnBkE,MAAI,CAACzE,MAAM,CAACY,IAAI,WAAAV,MAAA,CACJuE,MAAI,CAAC/F,OAAO,iDACtB6B,MACF,CAAC;UACH,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOI,KAAK,EAAE;UACd;UACA;UACA;UACA8D,MAAI,CAACzE,MAAM,CAACW,KAAK,WAAAT,MAAA,CAAWuE,MAAI,CAAC/F,OAAO,4CAAyCiC,KAAK,CAAC;QACzF;MACF,CAAC;MAED,IAAMiE,kCAAkC,GAAG,SAArCA,kCAAkCA,CAAA,EAAS;QAC/C,IAAI;UACF7D,YAAY,CAAC0D,MAAI,CAACjC,SAAS,CAAC;UAC5BiC,MAAI,CAAChC,SAAS,GAAG,IAAA/B,4BAAc,EAAC;YAAA,OAAM+D,MAAI,CAACH,KAAK,CAAC,CAAC;UAAA,GAAEG,MAAI,CAACI,YAAY,CAAC;QACxE,CAAC,CAAC,OAAOlE,KAAK,EAAE;UACd;UACA;UACA;UACA8D,MAAI,CAACzE,MAAM,CAACW,KAAK,WAAAT,MAAA,CACLuE,MAAI,CAAC/F,OAAO,6DACtBiC,KACF,CAAC;QACH;MACF,CAAC;MAED,IAAMmE,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,aAAa,EAAK;QAC1C,IAAMC,GAAG,GAAGC,WAAW,CAACD,GAAG,CAAC,CAAC;QAC7B,IAAME,OAAO,GAAGF,GAAG,GAAGD,aAAa;QAEnCN,MAAI,CAACzE,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CAAWuE,MAAI,CAAC/F,OAAO,kBAAewG,OAAO,CAAC;QAC/DT,MAAI,CAAC/B,IAAI,CAAC,mBAAmB,EAAEwC,OAAO,CAAC;MACzC,CAAC;MAEDtB,EAAE,GAAGA,EAAE,IAAIE,aAAI,CAACC,EAAE,CAAC,CAAC;MACpB,IAAMgB,aAAa,GAAGE,WAAW,CAACD,GAAG,CAAC,CAAC;MAEvC,IAAI,CAACxC,SAAS,GAAG,IAAA9B,4BAAc,EAACiE,iBAAiB,EAAE,IAAI,CAACQ,WAAW,CAAC;MACpE,IAAI,CAACZ,IAAI,CAAC,MAAM,EAAEK,kCAAkC,CAAC;MACrD,IAAI,CAACL,IAAI,CAAC,MAAM,EAAEG,aAAa,CAAC;MAChC,IAAI,CAACH,IAAI,CAAC,MAAM,EAAE;QAAA,OAAMO,gBAAgB,CAACC,aAAa,CAAC;MAAA,EAAC;MACxD,IAAI,CAAC/E,MAAM,CAACiD,KAAK,WAAA/C,MAAA,CAAW,IAAI,CAACxB,OAAO,aAAAwB,MAAA,CAAU0D,EAAE,CAAE,CAAC;MAEvD,OAAO,IAAI,CAACN,IAAI,CAAC;QACfM,EAAE,EAAFA,EAAE;QACFP,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;EAAC;IAAArE,GAAA;IAAAQ,KAAA,EA7aD,SAAAmC,wBAAA,EAAiC;MAC/B,MAAM,IAAIvB,KAAK,CACb,4FACF,CAAC;IACH;EAAC;EAAA,OAAAjC,MAAA;AAAA,EArEiCiH,oBAAY"}
1
+ {"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","setMaxListeners","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","originalCode","originalReason","reason","defaults","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","URL","hostname","_unused","checkRequired","_keys","forEach","_defineProperty","enumerable","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","_this4","isObject","_stringify","has","messageId","id","message","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","calculateLatency","pingTimestamp","now","performance","latency","pongTimeout","EventEmitter"],"sources":["socket-base.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n // Increase max listeners to avoid memory leak warning in tests\n this.setMaxListeners(5);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const originalCode = options.code;\n const originalReason = options.reason;\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n Object.keys(options).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n this._acknowledge(processedEvent);\n if (data.type === 'pong') {\n this.emit('pong', processedEvent);\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n // Don't try to acknowledge if socket is not in open state\n if (this.readyState !== 1) {\n return Promise.resolve(); // Silently ignore acknowledgment for closed sockets\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n }).catch((error) => {\n // Gracefully handle send errors (like INVALID_STATE_ERROR) to prevent test issues\n if (error.message === 'INVALID_STATE_ERROR') {\n return Promise.resolve(); // Socket was closed, ignore the acknowledgment\n }\n throw error; // Re-throw other errors\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "directory": "packages/@webex/internal-plugin-mercury"
11
11
  },
12
12
  "engines": {
13
- "node": ">=16"
13
+ "node": ">=18"
14
14
  },
15
15
  "browser": {
16
16
  "./dist/socket/socket.js": "./dist/socket/socket.shim.js",
@@ -29,27 +29,27 @@
29
29
  "@webex/eslint-config-legacy": "0.0.0",
30
30
  "@webex/jest-config-legacy": "0.0.0",
31
31
  "@webex/legacy-tools": "0.0.0",
32
- "@webex/test-helper-chai": "3.9.0",
33
- "@webex/test-helper-mocha": "3.9.0",
34
- "@webex/test-helper-mock-webex": "3.9.0",
35
- "@webex/test-helper-test-users": "3.9.0",
32
+ "@webex/test-helper-chai": "3.9.0-multi-llms.1",
33
+ "@webex/test-helper-mocha": "3.9.0-multi-llms.1",
34
+ "@webex/test-helper-mock-webex": "3.9.0-multi-llms.1",
35
+ "@webex/test-helper-test-users": "3.9.0-multi-llms.1",
36
36
  "eslint": "^8.24.0",
37
37
  "prettier": "^2.7.1",
38
38
  "sinon": "^9.2.4"
39
39
  },
40
40
  "dependencies": {
41
- "@webex/common": "3.9.0",
42
- "@webex/common-timers": "3.9.0",
43
- "@webex/internal-plugin-device": "3.9.0",
44
- "@webex/internal-plugin-feature": "3.9.0",
45
- "@webex/internal-plugin-metrics": "3.9.0",
46
- "@webex/test-helper-chai": "3.9.0",
47
- "@webex/test-helper-mocha": "3.9.0",
48
- "@webex/test-helper-mock-web-socket": "3.9.0",
49
- "@webex/test-helper-mock-webex": "3.9.0",
50
- "@webex/test-helper-refresh-callback": "3.9.0",
51
- "@webex/test-helper-test-users": "3.9.0",
52
- "@webex/webex-core": "3.9.0",
41
+ "@webex/common": "3.9.0-multi-llms.1",
42
+ "@webex/common-timers": "3.9.0-multi-llms.1",
43
+ "@webex/internal-plugin-device": "3.10.0-multi-llms.1",
44
+ "@webex/internal-plugin-feature": "3.10.0-multi-llms.1",
45
+ "@webex/internal-plugin-metrics": "3.10.0-multi-llms.1",
46
+ "@webex/test-helper-chai": "3.9.0-multi-llms.1",
47
+ "@webex/test-helper-mocha": "3.9.0-multi-llms.1",
48
+ "@webex/test-helper-mock-web-socket": "3.9.0-multi-llms.1",
49
+ "@webex/test-helper-mock-webex": "3.9.0-multi-llms.1",
50
+ "@webex/test-helper-refresh-callback": "3.9.0-multi-llms.1",
51
+ "@webex/test-helper-test-users": "3.9.0-multi-llms.1",
52
+ "@webex/webex-core": "3.10.0-multi-llms.1",
53
53
  "backoff": "^2.5.0",
54
54
  "lodash": "^4.17.21",
55
55
  "uuid": "^3.3.2",
@@ -64,5 +64,5 @@
64
64
  "test:style": "eslint ./src/**/*.*",
65
65
  "test:unit": "webex-legacy-tools test --unit --runner mocha"
66
66
  },
67
- "version": "3.9.0"
67
+ "version": "3.10.0-multi-llms.1"
68
68
  }