@webex/calling 3.12.0-mobius-socket.15 → 3.12.0-mobius-socket.16

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.
Files changed (55) hide show
  1. package/dist/mobius-socket/config.js +8 -8
  2. package/dist/mobius-socket/config.js.map +1 -1
  3. package/dist/mobius-socket/errors.js +2 -3
  4. package/dist/mobius-socket/errors.js.map +1 -1
  5. package/dist/mobius-socket/index.js +16 -10
  6. package/dist/mobius-socket/index.js.map +1 -1
  7. package/dist/mobius-socket/mobius-socket-events.test.js +5 -3
  8. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -1
  9. package/dist/mobius-socket/mobius-socket.js +3 -2
  10. package/dist/mobius-socket/mobius-socket.js.map +1 -1
  11. package/dist/mobius-socket/mobius-socket.test.js +6 -4
  12. package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
  13. package/dist/mobius-socket/socket/constants.js.map +1 -1
  14. package/dist/mobius-socket/socket/index.js.map +1 -1
  15. package/dist/mobius-socket/socket/socket-base.js +57 -32
  16. package/dist/mobius-socket/socket/socket-base.js.map +1 -1
  17. package/dist/mobius-socket/socket/socket.js.map +1 -1
  18. package/dist/mobius-socket/socket/socket.shim.js +3 -13
  19. package/dist/mobius-socket/socket/socket.shim.js.map +1 -1
  20. package/dist/mobius-socket/socket/types.js +7 -0
  21. package/dist/mobius-socket/socket/types.js.map +1 -0
  22. package/dist/mobius-socket/socket.test.js +36 -36
  23. package/dist/mobius-socket/socket.test.js.map +1 -1
  24. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -1
  25. package/dist/mobius-socket/test/promise-tick.js +2 -3
  26. package/dist/mobius-socket/test/promise-tick.js.map +1 -1
  27. package/dist/module/mobius-socket/index.js +4 -1
  28. package/dist/module/mobius-socket/mobius-socket.js +3 -1
  29. package/dist/module/mobius-socket/socket/socket-base.js +60 -29
  30. package/dist/module/mobius-socket/socket/socket.shim.js +3 -15
  31. package/dist/module/mobius-socket/socket/types.js +1 -0
  32. package/dist/types/mobius-socket/config.d.ts +15 -12
  33. package/dist/types/mobius-socket/config.d.ts.map +1 -1
  34. package/dist/types/mobius-socket/errors.d.ts +15 -6
  35. package/dist/types/mobius-socket/errors.d.ts.map +1 -1
  36. package/dist/types/mobius-socket/index.d.ts +14 -7
  37. package/dist/types/mobius-socket/index.d.ts.map +1 -1
  38. package/dist/types/mobius-socket/mobius-socket.d.ts +27 -43
  39. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
  40. package/dist/types/mobius-socket/socket/constants.d.ts +2 -2
  41. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -1
  42. package/dist/types/mobius-socket/socket/index.d.ts +4 -1
  43. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -1
  44. package/dist/types/mobius-socket/socket/socket-base.d.ts +34 -28
  45. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
  46. package/dist/types/mobius-socket/socket/socket.d.ts +4 -1
  47. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -1
  48. package/dist/types/mobius-socket/socket/socket.shim.d.ts +4 -1
  49. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -1
  50. package/dist/types/mobius-socket/socket/types.d.ts +69 -0
  51. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  52. package/package.json +2 -2
  53. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  54. package/src/mobius-socket/socket/{socket.js → socket.ts} +2 -1
  55. package/src/mobius-socket/socket/socket.shim.js +0 -31
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_backoff","_interopRequireDefault","_socket","_errors","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","n","done","value","f","TypeError","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","_superPropGet","p","_get2","normalReconnectReasons","DEFAULT_MOBIUS_WEBSOCKET_SESSION","MOBIUS_SOCKET_NAMESPACE","TOKEN_REFRESH_INTERVAL_MS","normalizeMobiusAuthToken","token","replace","MobiusSocket","_EventEmitter","webex","_this","config","undefined","_classCallCheck2","Error","logger","console","defaultSessionId","connected","connecting","hasEverConnected","socket","sockets","_map","backoffCalls","_shutdownSwitchoverBackoffCalls","_seenAsyncEventIdsBySession","_connectPromises","mercuryTimeOffset","_tokenRefreshTimer","_tokenRefreshInFlight","_bindInternalEvents","_inherits2","_createClass2","key","off","eventName","listener","removeAllListeners","_this2","on","envelope","data","internal","feature","updateFeature","featureToggle","_this2$webex$internal","services","switchActiveClusterIds","_envelope$data","activeClusters","_this2$webex$internal2","invalidateCache","_envelope$data2","timestamp","_attachSocketEventListeners","sessionId","_this3","event","_onclose","_len","args","_key","_onmessage","concat","_len2","_key2","_setTimeOffset","_len3","_key3","_emit","_len4","_key4","_getSeenAsyncEventIds","seenAsyncEventIds","get","set","_clearSeenAsyncEventIds","delete","clear","_trackAsyncEventAndShouldSuppressDuplicate","type","eventId","has","previousValue","info","size","dedupCacheMaxSize","oldestEventId","keys","_handleImminentShutdown","_this4","oldSocket","switchoverId","_now","_connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","hasConnectedSockets","url","then","catch","err","reason","error","getLastError","lastError","getSockets","getSocket","getConnectedWebSocketUrl","send","payload","_promise","reject","sendWssRequest","_this5","sessionIdOrOptions","options","_typeof2","_isArray","requestOptions","sendRequest","timeout","matchesResponse","response","request","subtype","trackingId","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","_createWssResponseError","createTimeoutError","isConnected","_this$sockets$get","_iterator","values","_step","hasConnectingSockets","connect","_this6","sessionSocket","resolve","socketUrl","resolvedUrl","Number","initialConnectionMaxRetries","connectPromise","device","registered","register","finally","logout","disconnectAll","beforeLogoutOptionsCloseReason","includes","code","disconnect","_this7","_stringify","backoffCall","abort","shutdownSwitchoverBackoffCall","_stopTokenRefreshTimer","close","_this8","disconnectPromises","_iterator2","_step2","all","processRegistrationStatusEvent","message","localClusterServiceUrls","_applyOverrides","headers","headerKeys","_keys","keyPath","_set2","_prepareUrl","_attemptConnection","callback","_this9","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","mode","msg","_prepareAndOpenSocket","backoffCallNormal","getNumRetries","retries","stack","UnknownResponse","refresh","NotAuthorized","credentials","force","BadRequest","Forbidden","warn","_this0","logPrefix","getUserToken","_ref","_ref2","_slicedToArray2","forceCloseDelay","wssResponseTimeout","skipAckEventId","skipAckEventType","refreshToken","_refreshToken","defaultMobiusSocketOptions","customOptionsMsg","open","_this1","context","_context$isShutdownSw","_context$attemptOptio","isInitialConnect","initialRetryLimit","isInitialConnectWithoutRetries","onComplete","sid","_startTokenRefreshTimer","backoff","attemptNum","attemptLogPrefix","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","retryIf","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","callbackLogPrefix","process","env","NODE_ENV","debug","start","_len5","_key5","suffix","emit","logError","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","namespace","handlers","handlerName","_camelCase2","_this10","setInterval","clearInterval","_this11","tokenPromise","canRefresh","refreshedToken","authPayloadPromises","_iterator3","_step3","sourceSocket","toLowerCase","isActiveSocket","_reconnect","_this12","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_eventType$split3","_eventType$split4","wsWriteTimestamp","EventEmitter","_default","exports"],"sources":["mobius-socket.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file\n */\n\nimport {EventEmitter} from 'events';\nimport {camelCase, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)'];\nconst DEFAULT_MOBIUS_WEBSOCKET_SESSION = 'mobius-websocket-session';\nconst MOBIUS_SOCKET_NAMESPACE = 'MobiusSocket';\nconst TOKEN_REFRESH_INTERVAL_MS = 1 * 60 * 60 * 1000; // 1 hour\n\nfunction normalizeMobiusAuthToken(token) {\n if (typeof token !== 'string') {\n return token;\n }\n\n return token.replace(/^Bearer\\s+/i, '');\n}\n\nclass MobiusSocket extends EventEmitter {\n constructor(webex, config = {}) {\n super();\n\n if (!webex) {\n throw new Error('A Webex instance is required when initializing MobiusSocket');\n }\n\n this.webex = webex;\n this.config = config;\n this.logger = webex.logger || console;\n this.defaultSessionId = DEFAULT_MOBIUS_WEBSOCKET_SESSION;\n this.connected = false;\n this.connecting = false;\n this.hasEverConnected = false;\n this.socket = undefined;\n this.sockets = new Map();\n this.backoffCalls = new Map();\n this._shutdownSwitchoverBackoffCalls = new Map();\n this._seenAsyncEventIdsBySession = new Map();\n this._connectPromises = new Map();\n this.mercuryTimeOffset = undefined;\n this._tokenRefreshTimer = undefined;\n this._tokenRefreshInFlight = undefined;\n\n this._bindInternalEvents();\n }\n\n off(eventName, listener) {\n if (listener) {\n return super.off(eventName, listener);\n }\n\n this.removeAllListeners(eventName);\n\n return this;\n }\n\n _bindInternalEvents() {\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 * Returns the per-session cache of seen async_event IDs, creating it on first access.\n * @param {string} sessionId - The session identifier.\n * @returns {Map<string, boolean>} Ordered cache of seen event IDs for the session.\n */\n _getSeenAsyncEventIds(sessionId) {\n let seenAsyncEventIds = this._seenAsyncEventIdsBySession.get(sessionId);\n\n if (!seenAsyncEventIds) {\n seenAsyncEventIds = new Map();\n this._seenAsyncEventIdsBySession.set(sessionId, seenAsyncEventIds);\n }\n\n return seenAsyncEventIds;\n }\n\n /**\n * Clears the dedup cache for one session or for all sessions when omitted.\n * @param {string} [sessionId] - Optional session identifier.\n * @returns {void}\n */\n _clearSeenAsyncEventIds(sessionId) {\n if (sessionId) {\n this._seenAsyncEventIdsBySession.delete(sessionId);\n\n return;\n }\n\n this._seenAsyncEventIdsBySession.clear();\n }\n\n /**\n * Tracks a newly seen async_event ID and reports whether a duplicate should be suppressed.\n * @param {string} sessionId - The session identifier.\n * @param {object} envelope - Parsed websocket message envelope.\n * @returns {boolean} True when the event has already been seen for this session.\n */\n _trackAsyncEventAndShouldSuppressDuplicate(sessionId, envelope) {\n if (envelope?.type !== 'async_event' || !envelope.eventId) {\n return false;\n }\n\n const seenAsyncEventIds = this._getSeenAsyncEventIds(sessionId);\n\n if (seenAsyncEventIds.has(envelope.eventId)) {\n const previousValue = seenAsyncEventIds.get(envelope.eventId);\n\n // Refresh recency so frequently retransmitted eventIds stay protected longer.\n seenAsyncEventIds.delete(envelope.eventId);\n seenAsyncEventIds.set(envelope.eventId, previousValue);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: duplicate async_event suppressed for ${sessionId}, eventId=${envelope.eventId}`\n );\n\n return true;\n }\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: tracking async_event for ${sessionId}, eventId=${envelope.eventId}`\n );\n seenAsyncEventIds.set(envelope.eventId, true);\n\n if (seenAsyncEventIds.size > this.config.dedupCacheMaxSize) {\n const oldestEventId = seenAsyncEventIds.keys().next().value;\n\n seenAsyncEventIds.delete(oldestEventId);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: evicted oldest async_event from dedup cache for ${sessionId}, eventId=${oldestEventId}`\n );\n }\n\n return false;\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 // Idempotent: if we already have a switchover backoff call for this session,\n // a switchover is in progress – do nothing.\n if (this._shutdownSwitchoverBackoffCalls.get(sessionId)) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover already in progress for ${sessionId}`\n );\n\n return;\n }\n\n const switchoverId = `${Date.now()}`;\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover start, id=${switchoverId} 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 `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover connected, url: ${webSocketUrl} for ${sessionId}`\n );\n\n // Atomically switch active socket reference\n this.socket = this.sockets.get(this.defaultSessionId);\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 `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover completed successfully for ${sessionId}`\n );\n })\n .catch((err) => {\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 * Get the websocket URL for a currently connected session.\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier.\n * @returns {string|undefined} The connected websocket URL, or undefined when not connected.\n */\n getConnectedWebSocketUrl(sessionId = this.defaultSessionId) {\n const socket = this.getSocket(sessionId);\n\n if (!socket?.connected) {\n return undefined;\n }\n\n return socket.url;\n }\n\n /**\n * Sends a payload on the active connected socket\n * @param {Object} payload - The data to send\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier\n * @returns {Promise}\n */\n send(payload, sessionId = this.defaultSessionId) {\n const socket = this.getSocket(sessionId);\n\n if (!socket || !socket.connected) {\n return Promise.reject(new Error(`Mobius socket is not connected for session ${sessionId}`));\n }\n\n return socket.send(payload);\n }\n\n /**\n * Sends a websocket request and resolves when the matching response arrives.\n * @param {Object} payload - The websocket request payload.\n * @param {string|Object} [sessionIdOrOptions=this.defaultSessionId] - Session ID or request options.\n * @param {Object} [options={}] - Additional request options.\n * @returns {Promise<Object>}\n */\n sendWssRequest(payload, sessionIdOrOptions = this.defaultSessionId, options = {}) {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return Promise.reject(new Error('`payload` is required'));\n }\n\n let sessionId = this.defaultSessionId;\n let requestOptions = options;\n\n if (typeof sessionIdOrOptions === 'string') {\n sessionId = sessionIdOrOptions;\n } else if (sessionIdOrOptions && typeof sessionIdOrOptions === 'object') {\n requestOptions = sessionIdOrOptions;\n }\n\n const socket = this.getSocket(sessionId);\n\n if (!socket || !socket.connected) {\n return Promise.reject(new Error(`Mobius socket is not connected for session ${sessionId}`));\n }\n\n return socket.sendRequest(payload, {\n timeout: requestOptions.timeout,\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === request.type &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n this._createWssResponseError(response, statusCode, statusMessage),\n createTimeoutError: (request) =>\n this._createWssResponseError(\n {\n type: 'response_event',\n subtype: request.type,\n trackingId: request.trackingId,\n },\n 408,\n 'Mobius websocket response timed out'\n ),\n });\n }\n\n /**\n * Check if the plugin is connected\n * @returns {boolean} True if connected\n */\n isConnected() {\n return this.connected;\n }\n\n /**\n * Check if a socket is connected\n * @param {string} [sessionId] - Optional session identifier\n * @returns {boolean|undefined} True if the socket is connected\n */\n hasConnectedSockets(sessionId) {\n if (sessionId) {\n return Boolean(this.sockets.get(sessionId)?.connected);\n }\n\n for (const socket of this.sockets.values()) {\n if (socket?.connected) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if any sockets are connecting\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier\n * @returns {boolean|undefined} True if the socket is connecting\n */\n hasConnectingSockets(sessionId = this.defaultSessionId) {\n const socket = this.sockets.get(sessionId || this.defaultSessionId);\n\n return Boolean(socket?.connecting);\n }\n\n /**\n * Connect to Mobius for a specific session.\n * @param {string} [webSocketUrl] - Optional websocket URL override. Falls back to the device websocket URL.\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier for this connection.\n * @returns {Promise<void>} Resolves when connection flow completes for the session.\n */\n connect(webSocketUrl, sessionId = this.defaultSessionId) {\n // First check if there's already a connection promise for this session\n if (this._connectPromises.has(sessionId)) {\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_NAMESPACE}: connection ${sessionId} already connected, will not connect again`\n );\n\n return Promise.resolve();\n }\n\n // Treat a connect() call that targets a different Mobius websocket URL\n // as a fresh initial connection for retry purposes.\n if (webSocketUrl && this.socketUrl && webSocketUrl !== this.socketUrl) {\n this.hasEverConnected = false;\n }\n\n // Cache the caller-provided URL for reconnect\n const resolvedUrl = webSocketUrl || this.socketUrl;\n if (webSocketUrl) {\n this.socketUrl = webSocketUrl;\n }\n\n this.connecting = true;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: starting connection attempt for ${sessionId}${\n Number(this.config.initialConnectionMaxRetries) === 0 && !this.hasEverConnected\n ? ' (initial retries disabled)'\n : ''\n }`\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(`${MOBIUS_SOCKET_NAMESPACE}: connecting ${sessionId}`);\n\n return this._connectWithBackoff(resolvedUrl, 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(`${MOBIUS_SOCKET_NAMESPACE}: logout() called`);\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 /**\n * Disconnect a Mobius socket for a specific session.\n * @param {object} [options] - Optional websocket close options (for example: `{code, reason}`).\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier to disconnect.\n * @returns {Promise<void>} Resolves after disconnect cleanup and close handling are initiated/completed.\n */\n disconnect(options, sessionId = this.defaultSessionId) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}#disconnect: connecting state: ${\n this.connecting\n }, connected state: ${this.connected}, socket exists: ${!!this\n .socket}, options: ${JSON.stringify(options)}`\n );\n\n const backoffCall = this.backoffCalls.get(sessionId);\n if (backoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting connection ${sessionId}`);\n backoffCall.abort();\n this.backoffCalls.delete(sessionId);\n }\n const shutdownSwitchoverBackoffCall = this._shutdownSwitchoverBackoffCalls.get(sessionId);\n if (shutdownSwitchoverBackoffCall) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: aborting shutdown switchover connection ${sessionId}`\n );\n shutdownSwitchoverBackoffCall.abort();\n this._shutdownSwitchoverBackoffCalls.delete(sessionId);\n }\n // Clean up any pending connection promises\n this._connectPromises.delete(sessionId);\n\n const sessionSocket = this.sockets.get(sessionId);\n\n this._clearSeenAsyncEventIds(sessionId);\n\n if (!sessionSocket) {\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\n\n return Promise.resolve();\n }\n\n sessionSocket.removeAllListeners('message');\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n\n return Promise.resolve(sessionSocket.close(options || undefined)).finally(() => {\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\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.socket = undefined;\n this.sockets.clear();\n this.backoffCalls.clear();\n this._shutdownSwitchoverBackoffCalls.clear();\n this._clearSeenAsyncEventIds();\n this._stopTokenRefreshTimer();\n this._connectPromises.clear();\n });\n }\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n }\n\n _createWssResponseError(response, statusCode, statusMessage) {\n const error = new Error(\n statusMessage || `Mobius websocket request failed with status ${statusCode || 'unknown'}`\n );\n\n error.name = 'MobiusSocketResponseError';\n error.statusCode = statusCode;\n error.statusMessage = statusMessage;\n error.response = response;\n error.trackingId = response?.trackingId;\n\n return error;\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 // TODO: Validate the host against the service catalog\n // const hostFromUrl = url.parse(webSocketUrl, true)?.host;\n // const isValidHost = this.webex.internal.services.isValidHost(hostFromUrl);\n // if (!isValidHost) {\n // this.logger.error(\n // `${MOBIUS_SOCKET_NAMESPACE}: host ${hostFromUrl} is not a valid host from host catalog`\n // );\n // return Promise.resolve('');\n // }\n\n return Promise.resolve(webSocketUrl);\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 (!backoffCall) {\n const mode = isShutdownSwitchover ? 'switchover backoff call' : 'backoffCall';\n const msg = `${MOBIUS_SOCKET_NAMESPACE}: prevent socket open when ${mode} 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 `${MOBIUS_SOCKET_NAMESPACE}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mobius socket, 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 Promise.resolve();\n })\n .catch((reason) => {\n // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(\n `${MOBIUS_SOCKET_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 backoffCallNormal = 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 && backoffCallNormal && backoffCallNormal?.getNumRetries() > 0) {\n this._emit(sessionId, 'connection_failed', reason, {\n sessionId,\n retries: backoffCallNormal?.getNumRetries(),\n });\n }\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection attempt failed for ${sessionId}`,\n reason,\n backoffCallNormal?.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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 entitled for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: received unrecoverable response from ${MOBIUS_SOCKET_NAMESPACE} for ${sessionId}`\n );\n backoffCallNormal?.abort();\n\n return callback(reason);\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_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 wssResponseTimeout: this.config.wssResponseTimeout,\n skipAckEventId: this.config.skipAckEventId,\n skipAckEventType: this.config.skipAckEventType,\n token: normalizeMobiusAuthToken(token.toString()),\n refreshToken: () => this._refreshToken(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n if (this.webex.config.defaultMobiusSocketOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMobiusSocketOptions};\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);\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE} ${logPrefix} url for ${sessionId}: ${webSocketUrl}`\n );\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 isInitialConnect = !isShutdownSwitchover && !this.hasEverConnected;\n const initialRetryLimit =\n this.config.initialConnectionMaxRetries == null\n ? null\n : Number(this.config.initialConnectionMaxRetries);\n const isInitialConnectWithoutRetries = isInitialConnect && initialRetryLimit === 0;\n\n const onComplete = (err, sid = sessionId) => {\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCalls.delete(sid);\n } else {\n this.backoffCalls.delete(sid);\n }\n const sessionSocket = this.sockets.get(sid);\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 `${MOBIUS_SOCKET_NAMESPACE}: ${msg}; log statement about next retry was inaccurate; ${err}`\n );\n if (sessionSocket) {\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n }\n\n return reject(err);\n }\n\n // Update overall connected status\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._startTokenRefreshTimer();\n this._emit(sid, 'online');\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 attemptLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: executing ${attemptLogPrefix} 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 (isInitialConnectWithoutRetries) {\n call.retryIf(() => false);\n } else if (isInitialConnect && initialRetryLimit > 0) {\n call.failAfter(initialRetryLimit);\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(`${MOBIUS_SOCKET_NAMESPACE}: ${msg} aborted for ${sessionId}`);\n reject(new Error(`MobiusSocket ${msg} Aborted for ${sessionId}`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n if (isInitialConnectWithoutRetries) {\n // retryIf(() => false) already disabled retries for this initial connect;\n // this branch only avoids logging the generic \"attempting retry\" message.\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: initial connect failed for ${sessionId}; retries already disabled`\n );\n\n return;\n }\n\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n const callbackLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${callbackLogPrefix} 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(`${MOBIUS_SOCKET_NAMESPACE}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connected ${sessionId}`);\n });\n\n call.start();\n });\n }\n\n _emit(sessionId, eventName, ...args) {\n try {\n if (!sessionId || !eventName) {\n return;\n }\n\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n this.emit(`${eventName}${suffix}`, ...args);\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n try {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred in event handler:`,\n error,\n ' with args: ',\n [sessionId, eventName, ...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('MobiusSocket _emit error handling failed:', logError);\n }\n }\n }\n\n _getEventHandlers(eventType) {\n if (!eventType) {\n return [];\n }\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 _startTokenRefreshTimer() {\n if (this._tokenRefreshTimer || !this.hasConnectedSockets()) {\n return;\n }\n\n this._tokenRefreshTimer = setInterval(() => {\n this._refreshToken().catch((error) => {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: periodic token refresh failed`, error);\n });\n }, TOKEN_REFRESH_INTERVAL_MS);\n }\n\n _stopTokenRefreshTimer() {\n if (!this._tokenRefreshTimer) {\n return;\n }\n\n clearInterval(this._tokenRefreshTimer);\n this._tokenRefreshTimer = undefined;\n }\n\n _refreshToken() {\n if (this._tokenRefreshInFlight) {\n return this._tokenRefreshInFlight;\n }\n\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n const tokenPromise = this.webex.credentials.canRefresh\n ? this.webex.credentials\n .refresh({force: true})\n .then(() => this.webex.credentials.getUserToken())\n : this.webex.credentials.getUserToken();\n\n this._tokenRefreshInFlight = tokenPromise\n .then((token) => {\n if (!token) {\n throw new Error('Mobius token refresh did not return a token');\n }\n const refreshedToken = normalizeMobiusAuthToken(token.toString());\n const authPayloadPromises = [];\n\n for (const socket of this.sockets.values()) {\n if (socket?.connected) {\n authPayloadPromises.push(socket.refresh(refreshedToken));\n }\n }\n\n return Promise.all(authPayloadPromises);\n })\n .catch((error) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to refresh/re-auth Mobius sockets`,\n error\n );\n throw error;\n })\n .finally(() => {\n this._tokenRefreshInFlight = undefined;\n });\n\n return this._tokenRefreshInFlight;\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 const 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 if (sessionId === this.defaultSessionId) {\n this.socket = undefined;\n }\n this._emit(sessionId, 'offline', event);\n }\n // Update overall connected status\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_NAMESPACE}: 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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} replaced; will not reconnect`\n );\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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} disconnected; reconnecting`\n );\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} disconnected; reconnecting`\n );\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: message envelope from ${sessionId}: `,\n envelope\n );\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 `${MOBIUS_SOCKET_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 if (this._trackAsyncEventAndShouldSuppressDuplicate(sessionId, envelope)) {\n return Promise.resolve();\n }\n\n // Mobius: emit event:<type> for typed messages (e.g., register.response)\n if (envelope.type) {\n this._emit(sessionId, `event:${envelope.type}`, envelope);\n }\n\n envelope.sessionId = sessionId;\n // Use data/payload if present, otherwise treat the envelope itself as the data (flat format)\n const data = envelope.data || envelope;\n\n this._applyOverrides(data);\n\n // Support both Mercury-enveloped (data.eventType) and flat (eventType) formats\n const eventType = data?.eventType || envelope.eventType;\n\n if (!eventType) {\n this._emit(sessionId, 'event', envelope);\n\n return Promise.resolve();\n }\n\n return this._getEventHandlers(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 `${MOBIUS_SOCKET_NAMESPACE}: error occurred in autowired event handler for ${eventType} from ${sessionId}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit(sessionId, 'event', envelope);\n const [namespace] = eventType.split('.');\n\n if (namespace === eventType) {\n this._emit(sessionId, `event:${namespace}`, envelope);\n } else {\n this._emit(sessionId, `event:${namespace}`, envelope);\n this._emit(sessionId, `event:${eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_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(`${MOBIUS_SOCKET_NAMESPACE}: reconnecting ${sessionId}`);\n\n return this.connect(webSocketUrl || this.socketUrl, sessionId);\n }\n}\n\nexport default MobiusSocket;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_events","require","_backoff","_interopRequireDefault","_socket","_errors","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","_n","F","s","n","done","value","f","TypeError","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","_superPropGet","p","_get2","normalReconnectReasons","DEFAULT_MOBIUS_WEBSOCKET_SESSION","MOBIUS_SOCKET_NAMESPACE","TOKEN_REFRESH_INTERVAL_MS","normalizeMobiusAuthToken","token","replace","MobiusSocket","_EventEmitter","webex","_this","config","undefined","_classCallCheck2","Error","logger","console","defaultSessionId","connected","connecting","hasEverConnected","socket","sockets","_map","backoffCalls","_shutdownSwitchoverBackoffCalls","_seenAsyncEventIdsBySession","_connectPromises","mercuryTimeOffset","_tokenRefreshTimer","_tokenRefreshInFlight","_bindInternalEvents","_inherits2","_createClass2","key","off","eventName","listener","removeAllListeners","_this2","on","envelope","data","internal","feature","updateFeature","featureToggle","_this2$webex$internal","services","switchActiveClusterIds","_envelope$data","activeClusters","_this2$webex$internal2","invalidateCache","_envelope$data2","timestamp","_attachSocketEventListeners","sessionId","_this3","event","_onclose","_len","args","_key","_onmessage","concat","_len2","_key2","_setTimeOffset","_len3","_key3","_emit","_len4","_key4","_getSeenAsyncEventIds","seenAsyncEventIds","get","set","_clearSeenAsyncEventIds","delete","clear","_trackAsyncEventAndShouldSuppressDuplicate","type","eventId","has","previousValue","info","size","dedupCacheMaxSize","oldestEventId","keys","_handleImminentShutdown","_this4","oldSocket","switchoverId","_now","_connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","hasConnectedSockets","url","then","catch","err","reason","error","getLastError","lastError","getSockets","getSocket","getConnectedWebSocketUrl","send","payload","_promise","reject","sendWssRequest","_this5","sessionIdOrOptions","options","_typeof2","_isArray","requestOptions","sendRequest","timeout","matchesResponse","response","request","subtype","trackingId","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","_createWssResponseError","createTimeoutError","isConnected","_this$sockets$get","_iterator","values","_step","hasConnectingSockets","connect","_this6","sessionSocket","resolve","socketUrl","resolvedUrl","Number","initialConnectionMaxRetries","connectPromise","device","registered","register","finally","logout","disconnectAll","beforeLogoutOptionsCloseReason","includes","code","disconnect","_this7","_stringify","backoffCall","abort","shutdownSwitchoverBackoffCall","_stopTokenRefreshTimer","close","_this8","disconnectPromises","_iterator2","_step2","all","processRegistrationStatusEvent","message","localClusterServiceUrls","_applyOverrides","headers","headerKeys","_keys","keyPath","_set2","_prepareUrl","_attemptConnection","callback","_this9","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","mode","msg","_prepareAndOpenSocket","backoffCallNormal","getNumRetries","retries","stack","UnknownResponse","refresh","NotAuthorized","credentials","force","BadRequest","Forbidden","warn","_this0","logPrefix","getUserToken","_ref","_ref2","_slicedToArray2","forceCloseDelay","wssResponseTimeout","skipAckEventId","skipAckEventType","refreshToken","_refreshToken","defaultMobiusSocketOptions","customOptionsMsg","open","_this1","context","_context$isShutdownSw","_context$attemptOptio","isInitialConnect","initialRetryLimit","isInitialConnectWithoutRetries","onComplete","sid","_startTokenRefreshTimer","backoff","attemptNum","attemptLogPrefix","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","retryIf","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","callbackLogPrefix","process","env","NODE_ENV","debug","start","_len5","_key5","suffix","emit","logError","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","namespace","handlers","handlerName","_camelCase2","_this10","setInterval","clearInterval","_this11","tokenPromise","canRefresh","refreshedToken","authPayloadPromises","_iterator3","_step3","sourceSocket","toLowerCase","isActiveSocket","_reconnect","_this12","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_eventType$split3","_eventType$split4","wsWriteTimestamp","EventEmitter","_default","exports"],"sources":["mobius-socket.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file\n */\n\nimport {EventEmitter} from 'events';\nimport {camelCase, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)'];\nconst DEFAULT_MOBIUS_WEBSOCKET_SESSION = 'mobius-websocket-session';\nconst MOBIUS_SOCKET_NAMESPACE = 'MobiusSocket';\nconst TOKEN_REFRESH_INTERVAL_MS = 1 * 60 * 60 * 1000; // 1 hour\n\nfunction normalizeMobiusAuthToken(token) {\n if (typeof token !== 'string') {\n return token;\n }\n\n return token.replace(/^Bearer\\s+/i, '');\n}\n\nclass MobiusSocket extends EventEmitter {\n constructor(webex, config = {}) {\n super();\n\n if (!webex) {\n throw new Error('A Webex instance is required when initializing MobiusSocket');\n }\n\n this.webex = webex;\n this.config = config;\n this.logger = webex.logger || console;\n this.defaultSessionId = DEFAULT_MOBIUS_WEBSOCKET_SESSION;\n this.connected = false;\n this.connecting = false;\n this.hasEverConnected = false;\n this.socket = undefined;\n this.sockets = new Map();\n this.backoffCalls = new Map();\n this._shutdownSwitchoverBackoffCalls = new Map();\n this._seenAsyncEventIdsBySession = new Map();\n this._connectPromises = new Map();\n this.mercuryTimeOffset = undefined;\n this._tokenRefreshTimer = undefined;\n this._tokenRefreshInFlight = undefined;\n\n this._bindInternalEvents();\n }\n\n off(eventName, listener) {\n if (listener) {\n return super.off(eventName, listener);\n }\n\n this.removeAllListeners(eventName);\n\n return this;\n }\n\n _bindInternalEvents() {\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 * Returns the per-session cache of seen async_event IDs, creating it on first access.\n * @param {string} sessionId - The session identifier.\n * @returns {Map<string, boolean>} Ordered cache of seen event IDs for the session.\n */\n _getSeenAsyncEventIds(sessionId) {\n let seenAsyncEventIds = this._seenAsyncEventIdsBySession.get(sessionId);\n\n if (!seenAsyncEventIds) {\n seenAsyncEventIds = new Map();\n this._seenAsyncEventIdsBySession.set(sessionId, seenAsyncEventIds);\n }\n\n return seenAsyncEventIds;\n }\n\n /**\n * Clears the dedup cache for one session or for all sessions when omitted.\n * @param {string} [sessionId] - Optional session identifier.\n * @returns {void}\n */\n _clearSeenAsyncEventIds(sessionId) {\n if (sessionId) {\n this._seenAsyncEventIdsBySession.delete(sessionId);\n\n return;\n }\n\n this._seenAsyncEventIdsBySession.clear();\n }\n\n /**\n * Tracks a newly seen async_event ID and reports whether a duplicate should be suppressed.\n * @param {string} sessionId - The session identifier.\n * @param {object} envelope - Parsed websocket message envelope.\n * @returns {boolean} True when the event has already been seen for this session.\n */\n _trackAsyncEventAndShouldSuppressDuplicate(sessionId, envelope) {\n if (envelope?.type !== 'async_event' || !envelope.eventId) {\n return false;\n }\n\n const seenAsyncEventIds = this._getSeenAsyncEventIds(sessionId);\n\n if (seenAsyncEventIds.has(envelope.eventId)) {\n const previousValue = seenAsyncEventIds.get(envelope.eventId);\n\n // Refresh recency so frequently retransmitted eventIds stay protected longer.\n seenAsyncEventIds.delete(envelope.eventId);\n seenAsyncEventIds.set(envelope.eventId, previousValue);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: duplicate async_event suppressed for ${sessionId}, eventId=${envelope.eventId}`\n );\n\n return true;\n }\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: tracking async_event for ${sessionId}, eventId=${envelope.eventId}`\n );\n seenAsyncEventIds.set(envelope.eventId, true);\n\n if (seenAsyncEventIds.size > this.config.dedupCacheMaxSize) {\n const oldestEventId = seenAsyncEventIds.keys().next().value;\n\n seenAsyncEventIds.delete(oldestEventId);\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: evicted oldest async_event from dedup cache for ${sessionId}, eventId=${oldestEventId}`\n );\n }\n\n return false;\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 // Idempotent: if we already have a switchover backoff call for this session,\n // a switchover is in progress – do nothing.\n if (this._shutdownSwitchoverBackoffCalls.get(sessionId)) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover already in progress for ${sessionId}`\n );\n\n return;\n }\n\n const switchoverId = `${Date.now()}`;\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover start, id=${switchoverId} 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 `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover connected, url: ${webSocketUrl} for ${sessionId}`\n );\n\n // Atomically switch active socket reference\n this.socket = this.sockets.get(this.defaultSessionId);\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 `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: [shutdown] switchover completed successfully for ${sessionId}`\n );\n })\n .catch((err) => {\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 * Get the websocket URL for a currently connected session.\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier.\n * @returns {string|undefined} The connected websocket URL, or undefined when not connected.\n */\n getConnectedWebSocketUrl(sessionId = this.defaultSessionId) {\n const socket = this.getSocket(sessionId);\n\n if (!socket?.connected) {\n return undefined;\n }\n\n return socket.url;\n }\n\n /**\n * Sends a payload on the active connected socket\n * @param {Object} payload - The data to send\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier\n * @returns {Promise}\n */\n send(payload, sessionId = this.defaultSessionId) {\n const socket = this.getSocket(sessionId);\n\n if (!socket || !socket.connected) {\n return Promise.reject(new Error(`Mobius socket is not connected for session ${sessionId}`));\n }\n\n return socket.send(payload);\n }\n\n /**\n * Sends a websocket request and resolves when the matching response arrives.\n * @param {Object} payload - The websocket request payload.\n * @param {string|Object} [sessionIdOrOptions=this.defaultSessionId] - Session ID or request options.\n * @param {Object} [options={}] - Additional request options.\n * @returns {Promise<Object>}\n */\n sendWssRequest(payload, sessionIdOrOptions = this.defaultSessionId, options = {}) {\n if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {\n return Promise.reject(new Error('`payload` is required'));\n }\n\n let sessionId = this.defaultSessionId;\n let requestOptions = options;\n\n if (typeof sessionIdOrOptions === 'string') {\n sessionId = sessionIdOrOptions;\n } else if (sessionIdOrOptions && typeof sessionIdOrOptions === 'object') {\n requestOptions = sessionIdOrOptions;\n }\n\n const socket = this.getSocket(sessionId);\n\n if (!socket || !socket.connected) {\n return Promise.reject(new Error(`Mobius socket is not connected for session ${sessionId}`));\n }\n\n return socket.sendRequest(payload, {\n timeout: requestOptions.timeout,\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === request.type &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n this._createWssResponseError(response, statusCode, statusMessage),\n createTimeoutError: (request) =>\n this._createWssResponseError(\n {\n type: 'response_event',\n subtype: request.type,\n trackingId: request.trackingId,\n },\n 408,\n 'Mobius websocket response timed out'\n ),\n });\n }\n\n /**\n * Check if the plugin is connected\n * @returns {boolean} True if connected\n */\n isConnected() {\n return this.connected;\n }\n\n /**\n * Check if a socket is connected\n * @param {string} [sessionId] - Optional session identifier\n * @returns {boolean|undefined} True if the socket is connected\n */\n hasConnectedSockets(sessionId) {\n if (sessionId) {\n return Boolean(this.sockets.get(sessionId)?.connected);\n }\n\n for (const socket of this.sockets.values()) {\n if (socket?.connected) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if any sockets are connecting\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier\n * @returns {boolean|undefined} True if the socket is connecting\n */\n hasConnectingSockets(sessionId = this.defaultSessionId) {\n const socket = this.sockets.get(sessionId || this.defaultSessionId);\n\n return Boolean(socket?.connecting);\n }\n\n /**\n * Connect to Mobius for a specific session.\n * @param {string} [webSocketUrl] - Optional websocket URL override. Falls back to the device websocket URL.\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier for this connection.\n * @returns {Promise<void>} Resolves when connection flow completes for the session.\n */\n connect(webSocketUrl, sessionId = this.defaultSessionId) {\n // First check if there's already a connection promise for this session\n if (this._connectPromises.has(sessionId)) {\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_NAMESPACE}: connection ${sessionId} already connected, will not connect again`\n );\n\n return Promise.resolve();\n }\n\n // Treat a connect() call that targets a different Mobius websocket URL\n // as a fresh initial connection for retry purposes.\n if (webSocketUrl && this.socketUrl && webSocketUrl !== this.socketUrl) {\n this.hasEverConnected = false;\n }\n\n // Cache the caller-provided URL for reconnect\n const resolvedUrl = webSocketUrl || this.socketUrl;\n if (webSocketUrl) {\n this.socketUrl = webSocketUrl;\n }\n\n this.connecting = true;\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: starting connection attempt for ${sessionId}${\n Number(this.config.initialConnectionMaxRetries) === 0 && !this.hasEverConnected\n ? ' (initial retries disabled)'\n : ''\n }`\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(`${MOBIUS_SOCKET_NAMESPACE}: connecting ${sessionId}`);\n\n return this._connectWithBackoff(resolvedUrl, 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(`${MOBIUS_SOCKET_NAMESPACE}: logout() called`);\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 /**\n * Disconnect a Mobius socket for a specific session.\n * @param {object} [options] - Optional websocket close options (for example: `{code, reason}`).\n * @param {string} [sessionId=this.defaultSessionId] - The session identifier to disconnect.\n * @returns {Promise<void>} Resolves after disconnect cleanup and close handling are initiated/completed.\n */\n disconnect(options, sessionId = this.defaultSessionId) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}#disconnect: connecting state: ${\n this.connecting\n }, connected state: ${this.connected}, socket exists: ${!!this\n .socket}, options: ${JSON.stringify(options)}`\n );\n\n const backoffCall = this.backoffCalls.get(sessionId);\n if (backoffCall) {\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: aborting connection ${sessionId}`);\n backoffCall.abort();\n this.backoffCalls.delete(sessionId);\n }\n const shutdownSwitchoverBackoffCall = this._shutdownSwitchoverBackoffCalls.get(sessionId);\n if (shutdownSwitchoverBackoffCall) {\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: aborting shutdown switchover connection ${sessionId}`\n );\n shutdownSwitchoverBackoffCall.abort();\n this._shutdownSwitchoverBackoffCalls.delete(sessionId);\n }\n // Clean up any pending connection promises\n this._connectPromises.delete(sessionId);\n\n const sessionSocket = this.sockets.get(sessionId);\n\n this._clearSeenAsyncEventIds(sessionId);\n\n if (!sessionSocket) {\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\n\n return Promise.resolve();\n }\n\n sessionSocket.removeAllListeners('message');\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n\n return Promise.resolve(sessionSocket.close(options || undefined)).finally(() => {\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\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.socket = undefined;\n this.sockets.clear();\n this.backoffCalls.clear();\n this._shutdownSwitchoverBackoffCalls.clear();\n this._clearSeenAsyncEventIds();\n this._stopTokenRefreshTimer();\n this._connectPromises.clear();\n });\n }\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n }\n\n _createWssResponseError(response, statusCode, statusMessage) {\n const error = new Error(\n statusMessage || `Mobius websocket request failed with status ${statusCode || 'unknown'}`\n );\n\n error.name = 'MobiusSocketResponseError';\n error.statusCode = statusCode;\n error.statusMessage = statusMessage;\n error.response = response;\n error.trackingId = response?.trackingId;\n\n return error;\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 // TODO: Validate the host against the service catalog\n // const hostFromUrl = url.parse(webSocketUrl, true)?.host;\n // const isValidHost = this.webex.internal.services.isValidHost(hostFromUrl);\n // if (!isValidHost) {\n // this.logger.error(\n // `${MOBIUS_SOCKET_NAMESPACE}: host ${hostFromUrl} is not a valid host from host catalog`\n // );\n // return Promise.resolve('');\n // }\n\n return Promise.resolve(webSocketUrl);\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 (!backoffCall) {\n const mode = isShutdownSwitchover ? 'switchover backoff call' : 'backoffCall';\n const msg = `${MOBIUS_SOCKET_NAMESPACE}: prevent socket open when ${mode} 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 `${MOBIUS_SOCKET_NAMESPACE}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mobius socket, 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 Promise.resolve();\n })\n .catch((reason) => {\n // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(\n `${MOBIUS_SOCKET_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 backoffCallNormal = 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 && backoffCallNormal && backoffCallNormal?.getNumRetries() > 0) {\n this._emit(sessionId, 'connection_failed', reason, {\n sessionId,\n retries: backoffCallNormal?.getNumRetries(),\n });\n }\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: connection attempt failed for ${sessionId}`,\n reason,\n backoffCallNormal?.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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 entitled for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${MOBIUS_SOCKET_NAMESPACE}: received unrecoverable response from ${MOBIUS_SOCKET_NAMESPACE} for ${sessionId}`\n );\n backoffCallNormal?.abort();\n\n return callback(reason);\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_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 wssResponseTimeout: this.config.wssResponseTimeout,\n skipAckEventId: this.config.skipAckEventId,\n skipAckEventType: this.config.skipAckEventType,\n token: normalizeMobiusAuthToken(token.toString()),\n refreshToken: () => this._refreshToken(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n if (this.webex.config.defaultMobiusSocketOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMobiusSocketOptions};\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);\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE} ${logPrefix} url for ${sessionId}: ${webSocketUrl}`\n );\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 isInitialConnect = !isShutdownSwitchover && !this.hasEverConnected;\n const initialRetryLimit =\n this.config.initialConnectionMaxRetries == null\n ? null\n : Number(this.config.initialConnectionMaxRetries);\n const isInitialConnectWithoutRetries = isInitialConnect && initialRetryLimit === 0;\n\n const onComplete = (err, sid = sessionId) => {\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCalls.delete(sid);\n } else {\n this.backoffCalls.delete(sid);\n }\n const sessionSocket = this.sockets.get(sid);\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 `${MOBIUS_SOCKET_NAMESPACE}: ${msg}; log statement about next retry was inaccurate; ${err}`\n );\n if (sessionSocket) {\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n }\n\n return reject(err);\n }\n\n // Update overall connected status\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._startTokenRefreshTimer();\n this._emit(sid, 'online');\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 attemptLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: executing ${attemptLogPrefix} 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 (isInitialConnectWithoutRetries) {\n call.retryIf(() => false);\n } else if (isInitialConnect && initialRetryLimit > 0) {\n call.failAfter(initialRetryLimit);\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(`${MOBIUS_SOCKET_NAMESPACE}: ${msg} aborted for ${sessionId}`);\n reject(new Error(`MobiusSocket ${msg} Aborted for ${sessionId}`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n if (isInitialConnectWithoutRetries) {\n // retryIf(() => false) already disabled retries for this initial connect;\n // this branch only avoids logging the generic \"attempting retry\" message.\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: initial connect failed for ${sessionId}; retries already disabled`\n );\n\n return;\n }\n\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n const callbackLogPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${MOBIUS_SOCKET_NAMESPACE}: ${callbackLogPrefix} 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(`${MOBIUS_SOCKET_NAMESPACE}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${MOBIUS_SOCKET_NAMESPACE}: connected ${sessionId}`);\n });\n\n call.start();\n });\n }\n\n _emit(sessionId, eventName, ...args) {\n try {\n if (!sessionId || !eventName) {\n return;\n }\n\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n this.emit(`${eventName}${suffix}`, ...args);\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n try {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: error occurred in event handler:`,\n error,\n ' with args: ',\n [sessionId, eventName, ...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('MobiusSocket _emit error handling failed:', logError);\n }\n }\n }\n\n _getEventHandlers(eventType) {\n if (!eventType) {\n return [];\n }\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 _startTokenRefreshTimer() {\n if (this._tokenRefreshTimer || !this.hasConnectedSockets()) {\n return;\n }\n\n this._tokenRefreshTimer = setInterval(() => {\n this._refreshToken().catch((error) => {\n this.logger.error(`${MOBIUS_SOCKET_NAMESPACE}: periodic token refresh failed`, error);\n });\n }, TOKEN_REFRESH_INTERVAL_MS);\n }\n\n _stopTokenRefreshTimer() {\n if (!this._tokenRefreshTimer) {\n return;\n }\n\n clearInterval(this._tokenRefreshTimer);\n this._tokenRefreshTimer = undefined;\n }\n\n _refreshToken() {\n if (this._tokenRefreshInFlight) {\n return this._tokenRefreshInFlight;\n }\n\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n\n return Promise.resolve();\n }\n\n const tokenPromise = this.webex.credentials.canRefresh\n ? this.webex.credentials\n .refresh({force: true})\n .then(() => this.webex.credentials.getUserToken())\n : this.webex.credentials.getUserToken();\n\n this._tokenRefreshInFlight = tokenPromise\n .then((token) => {\n if (!token) {\n throw new Error('Mobius token refresh did not return a token');\n }\n const refreshedToken = normalizeMobiusAuthToken(token.toString());\n const authPayloadPromises = [];\n\n for (const socket of this.sockets.values()) {\n if (socket?.connected) {\n authPayloadPromises.push(socket.refresh(refreshedToken));\n }\n }\n\n return Promise.all(authPayloadPromises);\n })\n .catch((error) => {\n this.logger.error(\n `${MOBIUS_SOCKET_NAMESPACE}: failed to refresh/re-auth Mobius sockets`,\n error\n );\n throw error;\n })\n .finally(() => {\n this._tokenRefreshInFlight = undefined;\n });\n\n return this._tokenRefreshInFlight;\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 const 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 if (sessionId === this.defaultSessionId) {\n this.socket = undefined;\n }\n this._emit(sessionId, 'offline', event);\n }\n // Update overall connected status\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n if (!this.hasConnectedSockets()) {\n this._stopTokenRefreshTimer();\n }\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_NAMESPACE}: 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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} replaced; will not reconnect`\n );\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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} disconnected; reconnecting`\n );\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: socket ${sessionId} disconnected; reconnecting`\n );\n if (isActiveSocket) {\n this._emit(sessionId, 'offline.transient', event);\n this.logger.info(\n `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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 `${MOBIUS_SOCKET_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(\n `${MOBIUS_SOCKET_NAMESPACE}: message envelope from ${sessionId}: `,\n envelope\n );\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 `${MOBIUS_SOCKET_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 if (this._trackAsyncEventAndShouldSuppressDuplicate(sessionId, envelope)) {\n return Promise.resolve();\n }\n\n // Mobius: emit event:<type> for typed messages (e.g., register.response)\n if (envelope.type) {\n this._emit(sessionId, `event:${envelope.type}`, envelope);\n }\n\n envelope.sessionId = sessionId;\n // Use data/payload if present, otherwise treat the envelope itself as the data (flat format)\n const data = envelope.data || envelope;\n\n this._applyOverrides(data);\n\n // Support both Mercury-enveloped (data.eventType) and flat (eventType) formats\n const eventType = data?.eventType || envelope.eventType;\n\n if (!eventType) {\n this._emit(sessionId, 'event', envelope);\n\n return Promise.resolve();\n }\n\n return this._getEventHandlers(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 `${MOBIUS_SOCKET_NAMESPACE}: error occurred in autowired event handler for ${eventType} from ${sessionId}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit(sessionId, 'event', envelope);\n const [namespace] = eventType.split('.');\n\n if (namespace === eventType) {\n this._emit(sessionId, `event:${namespace}`, envelope);\n } else {\n this._emit(sessionId, `event:${namespace}`, envelope);\n this._emit(sessionId, `event:${eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(\n `${MOBIUS_SOCKET_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(`${MOBIUS_SOCKET_NAMESPACE}: reconnecting ${sessionId}`);\n\n return this.connect(webSocketUrl || this.socketUrl, sessionId);\n }\n}\n\nexport default MobiusSocket;\n"],"mappings":"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","ignoreList":[]}
@@ -11,8 +11,8 @@ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
11
11
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
12
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
13
13
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
14
  var _construct2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/construct"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
16
  var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property"));
17
17
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
18
18
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
@@ -50,7 +50,7 @@ describe('plugin-mobius-socket', function () {
50
50
  var configuredWebex = new _testHelperMockWebex.default();
51
51
  var instance = (0, _index.getMobiusSocketInstance)(configuredWebex);
52
52
  _testHelperChai.assert.instanceOf(instance, _index.default);
53
- _testHelperChai.assert.equal(instance.config, _index.config.mobiusSocket);
53
+ _testHelperChai.assert.deepEqual(instance.config, _index.config.mobiusSocket);
54
54
  });
55
55
  it('uses consumer config when it is provided', function () {
56
56
  var configuredWebex = new _testHelperMockWebex.default();
@@ -60,7 +60,7 @@ describe('plugin-mobius-socket', function () {
60
60
  };
61
61
  var instance = (0, _index.getMobiusSocketInstance)(configuredWebex, consumerConfig);
62
62
  _testHelperChai.assert.instanceOf(instance, _index.default);
63
- _testHelperChai.assert.equal(instance.config, consumerConfig);
63
+ _testHelperChai.assert.deepEqual(instance.config, _objectSpread(_objectSpread({}, _index.config.mobiusSocket), consumerConfig));
64
64
  });
65
65
  });
66
66
  describe('MobiusSocket', function () {
@@ -230,7 +230,7 @@ describe('plugin-mobius-socket', function () {
230
230
  // Small delay to ensure all async operations complete
231
231
  _context.next = 6;
232
232
  return new _promise.default(function (resolve) {
233
- return setTimeout(resolve, 10);
233
+ setTimeout(resolve, 10);
234
234
  });
235
235
  case 6:
236
236
  case "end":
@@ -1920,6 +1920,8 @@ describe('plugin-mobius-socket', function () {
1920
1920
  return mobiusSocket._attemptConnection('ws://test.com', sessionId, callback, {
1921
1921
  isShutdownSwitchover: true,
1922
1922
  onSuccess: function onSuccess(newSocket, url) {
1923
+ _testHelperChai.assert.exists(newSocket);
1924
+ _testHelperChai.assert.equal(url, 'ws://test.com');
1923
1925
  _testHelperChai.assert.equal(mobiusSocket.socket, originalSocket);
1924
1926
  }
1925
1927
  });