@webex/internal-plugin-mercury 3.9.0-multiple-llm.2 → 3.9.0-multiple-llm.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/mercury.js CHANGED
@@ -99,6 +99,28 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
99
99
  _this.webex.internal.feature.updateFeature(envelope.data.featureToggle);
100
100
  }
101
101
  });
102
+ /*
103
+ * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury
104
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations
105
+ * */
106
+ this.on('event:ActiveClusterStatusEvent', function (envelope) {
107
+ var _this$webex$internal$;
108
+ if (typeof ((_this$webex$internal$ = _this.webex.internal.services) === null || _this$webex$internal$ === void 0 ? void 0 : _this$webex$internal$.switchActiveClusterIds) === 'function' && envelope && envelope.data) {
109
+ var _envelope$data;
110
+ _this.webex.internal.services.switchActiveClusterIds((_envelope$data = envelope.data) === null || _envelope$data === void 0 ? void 0 : _envelope$data.activeClusters);
111
+ }
112
+ });
113
+ /*
114
+ * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c
115
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications
116
+ * */
117
+ this.on('event:u2c.cache-invalidation', function (envelope) {
118
+ var _this$webex$internal$2;
119
+ if (typeof ((_this$webex$internal$2 = _this.webex.internal.services) === null || _this$webex$internal$2 === void 0 ? void 0 : _this$webex$internal$2.invalidateCache) === 'function' && envelope && envelope.data) {
120
+ var _envelope$data2;
121
+ _this.webex.internal.services.invalidateCache((_envelope$data2 = envelope.data) === null || _envelope$data2 === void 0 ? void 0 : _envelope$data2.timestamp);
122
+ }
123
+ });
102
124
  },
103
125
  /**
104
126
  * Get the last error.
@@ -677,7 +699,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
677
699
  this.logger.info("".concat(this.namespace, ": reconnecting ").concat(sessionId));
678
700
  return this.connect(webSocketUrl, sessionId);
679
701
  },
680
- version: "3.9.0-multiple-llm.2"
702
+ version: "3.9.0-multiple-llm.3"
681
703
  }, ((0, _applyDecoratedDescriptor2.default)(_obj, "listen", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "listen"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "stopListening", [_dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "stopListening"), _obj)), _obj)));
682
704
  var _default2 = exports.default = Mercury;
683
705
  //# sourceMappingURL=mercury.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","i","F","s","n","done","value","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","defaultSessionId","session","connected","type","connecting","hasEverConnected","sockets","_default","_map","backoffCalls","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","getSockets","getSocket","sessionId","get","hasConnectedSockets","_iterator","values","_step","socket","hasConnectingSockets","_iterator2","_step2","connect","webSocketUrl","_this2","_connectPromises","has","logger","info","concat","sessionSocket","_promise","resolve","Error","stack","connectPromise","device","registered","register","then","_connectWithBackoff","finally","delete","set","logout","disconnectAll","config","beforeLogoutOptionsCloseReason","includes","code","reason","disconnect","options","_this3","backoffCall","abort","suffix","removeAllListeners","once","close","_this4","disconnectPromises","_iterator3","keys","_step3","all","clear","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","_prepareUrl","_this5","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this6","Socket","attemptWSUrl","_len","args","_key","_onclose","_len2","_key2","_onmessage","_len3","_key3","_setTimeOffset","_len4","_key4","_emit","_len5","_key5","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","trackingId","defaultMercuryOptions","open","refresh","catch","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this7","onComplete","sid","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len6","_key6","trigger","logError","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","handlers","handlerName","camelCase","_sessionSocket","toLowerCase","_reconnect","_this8","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default2","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n defaultSessionId: 'mercury-default-session',\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n sockets: {\n default: () => new Map(),\n type: 'object',\n },\n backoffCalls: {\n default: () => new Map(),\n type: 'object',\n },\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n /**\n * Get all active socket connections\n * @returns {Map} Map of sessionId to socket instances\n */\n getSockets() {\n return this.sockets;\n },\n\n /**\n * Get a specific socket by connection ID\n * @param {string} sessionId - The connection identifier\n * @returns {Socket|undefined} The socket instance or undefined if not found\n */\n getSocket(sessionId = this.defaultSessionId) {\n return this.sockets.get(sessionId);\n },\n\n /**\n * Check if any sockets are connected\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectedSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connected) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Check if any sockets are connecting\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectingSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connecting) {\n return true;\n }\n }\n\n return false;\n },\n\n // @oneFlight\n connect(webSocketUrl, sessionId = this.defaultSessionId) {\n if (!this._connectPromises) this._connectPromises = new Map();\n\n // First check if there's already a connection promise for this session\n if (this._connectPromises.has(sessionId)) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already in progress, returning existing promise`\n );\n\n return this._connectPromises.get(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n if (sessionSocket?.connected || sessionSocket?.connecting) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already connected, will not connect again`\n );\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt for ${sessionId}`);\n\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n const connectPromise = Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n )\n .then(() => {\n this.logger.info(`${this.namespace}: connecting ${sessionId}`);\n\n return this._connectWithBackoff(webSocketUrl, sessionId);\n })\n .finally(() => {\n this._connectPromises.delete(sessionId);\n });\n\n this._connectPromises.set(sessionId, connectPromise);\n\n return connectPromise;\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnectAll(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n // @oneFlight\n disconnect(options, sessionId = this.defaultSessionId) {\n return new Promise((resolve) => {\n const backoffCall = this.backoffCalls.get(sessionId);\n if (backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection ${sessionId}`);\n backoffCall.abort();\n this.backoffCalls.delete(sessionId);\n }\n\n // Clean up any pending connection promises\n if (this._connectPromises) {\n this._connectPromises.delete(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n if (sessionSocket) {\n sessionSocket.removeAllListeners('message');\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n this.once(sessionId === this.defaultSessionId ? 'offline' : `offline${suffix}`, resolve);\n resolve(sessionSocket.close(options || undefined));\n }\n resolve();\n\n // Update overall connected status\n this.connected = this.hasConnectedSockets();\n });\n },\n\n /**\n * Disconnect all socket connections\n * @param {object} options - Close options\n * @returns {Promise} Promise that resolves when all connections are closed\n */\n disconnectAll(options) {\n const disconnectPromises = [];\n\n for (const sessionId of this.sockets.keys()) {\n disconnectPromises.push(this.disconnect(options, sessionId));\n }\n\n return Promise.all(disconnectPromises).then(() => {\n this.connected = false;\n this.sockets.clear();\n this.backoffCalls.clear();\n // Clear connection promises to prevent stale promises\n if (this._connectPromises) {\n this._connectPromises.clear();\n }\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, sessionId, callback) {\n const socket = new Socket();\n socket.connecting = true;\n let attemptWSUrl;\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n socket.on('close', (...args) => this._onclose(sessionId, ...args));\n socket.on('message', (...args) => this._onmessage(sessionId, ...args));\n socket.on('pong', (...args) => this._setTimeOffset(sessionId, ...args));\n socket.on('sequence-mismatch', (...args) => this._emit(`sequence-mismatch${suffix}`, ...args));\n socket.on('ping-pong-latency', (...args) => this._emit(`ping-pong-latency${suffix}`, ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n const backoffCall = this.backoffCalls.get(sessionId);\n if (!backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined for ${sessionId}`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options for ${sessionId}`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.sockets.set(sessionId, socket);\n this.socket = this.sockets.get(this.defaultSessionId) || socket;\n\n this.logger.info(`${this.namespace} connection url for ${sessionId}: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, sessionId: ${sessionId}, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n const backoffCall = this.backoffCalls.get(sessionId);\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && backoffCall && backoffCall?.getNumRetries() > 0) {\n this._emit(`connection_failed${suffix}`, reason, {\n sessionId,\n retries: backoffCall?.getNumRetries(),\n });\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed for ${sessionId}`,\n reason,\n backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code for ${sessionId}, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(\n `${this.namespace}: received authorization error for ${sessionId}, reauthorizing`\n );\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${this.namespace}: received unrecoverable response from mercury for ${sessionId}`\n );\n backoffCall?.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error for ${sessionId}, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: failed to handle connection failure for ${sessionId}`,\n reason\n );\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl, sessionId) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err, sid = sessionId) => {\n this.backoffCalls.delete(sid);\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect ${sid} after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n // Update overall connected status\n const sessionSocket = this.sockets.get(sid);\n if (sessionSocket) {\n sessionSocket.connecting = false;\n sessionSocket.connected = true;\n }\n // @ts-ignore\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n this.hasEverConnected = true;\n const suffix = sid === this.defaultSessionId ? '' : `:${sid}`;\n this._emit(`online${suffix}`, {sessionId: sid});\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n\n return resolve();\n };\n // eslint-disable-next-line prefer-reflect\n call = backoff.call(\n (callback) => {\n this.logger.info(\n `${\n this.namespace\n }: executing connection attempt ${call.getNumRetries()} for ${sessionId}`\n );\n this._attemptConnection(webSocketUrl, sessionId, callback);\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 (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n // Store the call BEFORE setting up event handlers to prevent race conditions\n this.backoffCalls.set(sessionId, call);\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted for ${sessionId}`);\n reject(new Error(`Mercury Connection Aborted for ${sessionId}`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect ${sessionId}; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected ${sessionId}`);\n });\n\n call.start();\n });\n },\n\n _emit(...args) {\n try {\n // Validate args before processing\n if (args && args.length > 0) {\n this.trigger(...args);\n }\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n try {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n } catch (logError) {\n // If even logging fails, just ignore to prevent cascading errors during cleanup\n this.logger.error('Mercury _emit error handling failed:', logError);\n }\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(sessionId, event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n let sessionSocket = this.sockets.get(sessionId);\n const socketUrl = sessionSocket?.url;\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n event.sessionId = sessionId;\n this.sockets.delete(sessionId);\n\n if (sessionSocket) {\n sessionSocket.removeAllListeners();\n sessionSocket = null;\n this._emit(`offline${suffix}`, event);\n }\n\n // Update overall connected status\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n\n if (!this.connected) {\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n }\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message for ${sessionId}; will not reconnect: ${event.reason}`\n );\n this._emit(`offline.permanent${suffix}`, event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket ${sessionId} replaced; will not reconnect`);\n this._emit(`offline.replaced${suffix}`, event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n this._emit(`offline.transient${suffix}`, event);\n this._reconnect(socketUrl, sessionId);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n this._emit(`offline.transient${suffix}`, event);\n this._reconnect(socketUrl, sessionId);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected; will not reconnect: ${event.reason}`\n );\n this._emit(`offline.permanent${suffix}`, event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit(`offline.permanent${suffix}`, event);\n }\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in close handler for ${sessionId}`,\n error\n );\n }\n },\n\n _onmessage(sessionId, event) {\n this._setTimeOffset(sessionId, event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope from ${sessionId}: `, envelope);\n }\n\n envelope.sessionId = sessionId;\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType} from ${sessionId}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n this._emit(`event${suffix}`, envelope);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}${suffix}`, envelope);\n } else {\n this._emit(`event:${namespace}${suffix}`, envelope);\n this._emit(`event:${data.eventType}${suffix}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: error occurred processing socket message from ${sessionId}`,\n reason\n );\n });\n },\n\n _setTimeOffset(sessionId, event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl, sessionId = this.defaultSessionId) {\n this.logger.info(`${this.namespace}: reconnecting ${sessionId}`);\n\n return this.connect(webSocketUrl, sessionId);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createForOfIteratorHelper","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","i","F","s","n","done","value","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","defaultSessionId","session","connected","type","connecting","hasEverConnected","sockets","_default","_map","backoffCalls","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","_this$webex$internal$","services","switchActiveClusterIds","_envelope$data","activeClusters","_this$webex$internal$2","invalidateCache","_envelope$data2","timestamp","getLastError","getSockets","getSocket","sessionId","get","hasConnectedSockets","_iterator","values","_step","socket","hasConnectingSockets","_iterator2","_step2","connect","webSocketUrl","_this2","_connectPromises","has","logger","info","concat","sessionSocket","_promise","resolve","Error","stack","connectPromise","device","registered","register","then","_connectWithBackoff","finally","delete","set","logout","disconnectAll","config","beforeLogoutOptionsCloseReason","includes","code","reason","disconnect","options","_this3","backoffCall","abort","suffix","removeAllListeners","once","close","_this4","disconnectPromises","_iterator3","keys","_step3","all","clear","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","_prepareUrl","_this5","getFeature","haMessagingEnabled","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this6","Socket","attemptWSUrl","_len","args","_key","_onclose","_len2","_key2","_onmessage","_len3","_key3","_setTimeOffset","_len4","_key4","_emit","_len5","_key5","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","trackingId","defaultMercuryOptions","open","refresh","catch","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this7","onComplete","sid","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len6","_key6","trigger","logError","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","handlers","handlerName","camelCase","_sessionSocket","toLowerCase","_reconnect","_this8","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","_getOwnPropertyDescriptor","_default2","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n defaultSessionId: 'mercury-default-session',\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n sockets: {\n default: () => new Map(),\n type: 'object',\n },\n backoffCalls: {\n default: () => new Map(),\n type: 'object',\n },\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n /*\n * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations\n * */\n this.on('event:ActiveClusterStatusEvent', (envelope) => {\n if (\n typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);\n }\n });\n /*\n * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications\n * */\n this.on('event:u2c.cache-invalidation', (envelope) => {\n if (\n typeof this.webex.internal.services?.invalidateCache === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.invalidateCache(envelope.data?.timestamp);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n /**\n * Get all active socket connections\n * @returns {Map} Map of sessionId to socket instances\n */\n getSockets() {\n return this.sockets;\n },\n\n /**\n * Get a specific socket by connection ID\n * @param {string} sessionId - The connection identifier\n * @returns {Socket|undefined} The socket instance or undefined if not found\n */\n getSocket(sessionId = this.defaultSessionId) {\n return this.sockets.get(sessionId);\n },\n\n /**\n * Check if any sockets are connected\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectedSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connected) {\n return true;\n }\n }\n\n return false;\n },\n\n /**\n * Check if any sockets are connecting\n * @returns {boolean} True if at least one socket is connected\n */\n hasConnectingSockets() {\n for (const socket of this.sockets.values()) {\n if (socket && socket.connecting) {\n return true;\n }\n }\n\n return false;\n },\n\n // @oneFlight\n connect(webSocketUrl, sessionId = this.defaultSessionId) {\n if (!this._connectPromises) this._connectPromises = new Map();\n\n // First check if there's already a connection promise for this session\n if (this._connectPromises.has(sessionId)) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already in progress, returning existing promise`\n );\n\n return this._connectPromises.get(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n if (sessionSocket?.connected || sessionSocket?.connecting) {\n this.logger.info(\n `${this.namespace}: connection ${sessionId} already connected, will not connect again`\n );\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt for ${sessionId}`);\n\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n const connectPromise = Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n )\n .then(() => {\n this.logger.info(`${this.namespace}: connecting ${sessionId}`);\n\n return this._connectWithBackoff(webSocketUrl, sessionId);\n })\n .finally(() => {\n this._connectPromises.delete(sessionId);\n });\n\n this._connectPromises.set(sessionId, connectPromise);\n\n return connectPromise;\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnectAll(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n // @oneFlight\n disconnect(options, sessionId = this.defaultSessionId) {\n return new Promise((resolve) => {\n const backoffCall = this.backoffCalls.get(sessionId);\n if (backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection ${sessionId}`);\n backoffCall.abort();\n this.backoffCalls.delete(sessionId);\n }\n\n // Clean up any pending connection promises\n if (this._connectPromises) {\n this._connectPromises.delete(sessionId);\n }\n\n const sessionSocket = this.sockets.get(sessionId);\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n if (sessionSocket) {\n sessionSocket.removeAllListeners('message');\n sessionSocket.connecting = false;\n sessionSocket.connected = false;\n this.once(sessionId === this.defaultSessionId ? 'offline' : `offline${suffix}`, resolve);\n resolve(sessionSocket.close(options || undefined));\n }\n resolve();\n\n // Update overall connected status\n this.connected = this.hasConnectedSockets();\n });\n },\n\n /**\n * Disconnect all socket connections\n * @param {object} options - Close options\n * @returns {Promise} Promise that resolves when all connections are closed\n */\n disconnectAll(options) {\n const disconnectPromises = [];\n\n for (const sessionId of this.sockets.keys()) {\n disconnectPromises.push(this.disconnect(options, sessionId));\n }\n\n return Promise.all(disconnectPromises).then(() => {\n this.connected = false;\n this.sockets.clear();\n this.backoffCalls.clear();\n // Clear connection promises to prevent stale promises\n if (this._connectPromises) {\n this._connectPromises.clear();\n }\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, sessionId, callback) {\n const socket = new Socket();\n socket.connecting = true;\n let attemptWSUrl;\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n socket.on('close', (...args) => this._onclose(sessionId, ...args));\n socket.on('message', (...args) => this._onmessage(sessionId, ...args));\n socket.on('pong', (...args) => this._setTimeOffset(sessionId, ...args));\n socket.on('sequence-mismatch', (...args) => this._emit(`sequence-mismatch${suffix}`, ...args));\n socket.on('ping-pong-latency', (...args) => this._emit(`ping-pong-latency${suffix}`, ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n const backoffCall = this.backoffCalls.get(sessionId);\n if (!backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined for ${sessionId}`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options for ${sessionId}`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.sockets.set(sessionId, socket);\n this.socket = this.sockets.get(this.defaultSessionId) || socket;\n\n this.logger.info(`${this.namespace} connection url for ${sessionId}: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, sessionId: ${sessionId}, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n const backoffCall = this.backoffCalls.get(sessionId);\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && backoffCall && backoffCall?.getNumRetries() > 0) {\n this._emit(`connection_failed${suffix}`, reason, {\n sessionId,\n retries: backoffCall?.getNumRetries(),\n });\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed for ${sessionId}`,\n reason,\n backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code for ${sessionId}, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(\n `${this.namespace}: received authorization error for ${sessionId}, reauthorizing`\n );\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(\n `${this.namespace}: received unrecoverable response from mercury for ${sessionId}`\n );\n backoffCall?.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error for ${sessionId}, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: failed to handle connection failure for ${sessionId}`,\n reason\n );\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl, sessionId) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err, sid = sessionId) => {\n this.backoffCalls.delete(sid);\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect ${sid} after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n // Update overall connected status\n const sessionSocket = this.sockets.get(sid);\n if (sessionSocket) {\n sessionSocket.connecting = false;\n sessionSocket.connected = true;\n }\n // @ts-ignore\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n this.hasEverConnected = true;\n const suffix = sid === this.defaultSessionId ? '' : `:${sid}`;\n this._emit(`online${suffix}`, {sessionId: sid});\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n\n return resolve();\n };\n // eslint-disable-next-line prefer-reflect\n call = backoff.call(\n (callback) => {\n this.logger.info(\n `${\n this.namespace\n }: executing connection attempt ${call.getNumRetries()} for ${sessionId}`\n );\n this._attemptConnection(webSocketUrl, sessionId, callback);\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 (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n // Store the call BEFORE setting up event handlers to prevent race conditions\n this.backoffCalls.set(sessionId, call);\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted for ${sessionId}`);\n reject(new Error(`Mercury Connection Aborted for ${sessionId}`));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect ${sessionId}; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected ${sessionId}`);\n });\n\n call.start();\n });\n },\n\n _emit(...args) {\n try {\n // Validate args before processing\n if (args && args.length > 0) {\n this.trigger(...args);\n }\n } catch (error) {\n // Safely handle errors without causing additional issues during cleanup\n try {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n } catch (logError) {\n // If even logging fails, just ignore to prevent cascading errors during cleanup\n this.logger.error('Mercury _emit error handling failed:', logError);\n }\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(sessionId, event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n let sessionSocket = this.sockets.get(sessionId);\n const socketUrl = sessionSocket?.url;\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n event.sessionId = sessionId;\n this.sockets.delete(sessionId);\n\n if (sessionSocket) {\n sessionSocket.removeAllListeners();\n sessionSocket = null;\n this._emit(`offline${suffix}`, event);\n }\n\n // Update overall connected status\n this.connecting = this.hasConnectingSockets();\n this.connected = this.hasConnectedSockets();\n\n if (!this.connected) {\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n }\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message for ${sessionId}; will not reconnect: ${event.reason}`\n );\n this._emit(`offline.permanent${suffix}`, event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket ${sessionId} replaced; will not reconnect`);\n this._emit(`offline.replaced${suffix}`, event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n this._emit(`offline.transient${suffix}`, event);\n this._reconnect(socketUrl, sessionId);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket ${sessionId} disconnected; reconnecting`);\n this._emit(`offline.transient${suffix}`, event);\n this._reconnect(socketUrl, sessionId);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected; will not reconnect: ${event.reason}`\n );\n this._emit(`offline.permanent${suffix}`, event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket ${sessionId} disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit(`offline.permanent${suffix}`, event);\n }\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in close handler for ${sessionId}`,\n error\n );\n }\n },\n\n _onmessage(sessionId, event) {\n this._setTimeOffset(sessionId, event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope from ${sessionId}: `, envelope);\n }\n\n envelope.sessionId = sessionId;\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType} from ${sessionId}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n const suffix = sessionId === this.defaultSessionId ? '' : `:${sessionId}`;\n\n this._emit(`event${suffix}`, envelope);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}${suffix}`, envelope);\n } else {\n this._emit(`event:${namespace}${suffix}`, envelope);\n this._emit(`event:${data.eventType}${suffix}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(\n `${this.namespace}: error occurred processing socket message from ${sessionId}`,\n reason\n );\n });\n },\n\n _setTimeOffset(sessionId, event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl, sessionId = this.defaultSessionId) {\n this.logger.info(`${this.namespace}: reconnecting ${sessionId}`);\n\n return this.connect(webSocketUrl, sessionId);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -40,16 +40,16 @@
40
40
  "dependencies": {
41
41
  "@webex/common": "3.9.0-multiple-llm.0",
42
42
  "@webex/common-timers": "3.9.0-multiple-llm.0",
43
- "@webex/internal-plugin-device": "3.9.0-multiple-llm.0",
44
- "@webex/internal-plugin-feature": "3.9.0-multiple-llm.0",
45
- "@webex/internal-plugin-metrics": "3.9.0-multiple-llm.0",
43
+ "@webex/internal-plugin-device": "3.9.0-multiple-llm.1",
44
+ "@webex/internal-plugin-feature": "3.9.0-multiple-llm.1",
45
+ "@webex/internal-plugin-metrics": "3.9.0-multiple-llm.1",
46
46
  "@webex/test-helper-chai": "3.9.0-multiple-llm.0",
47
47
  "@webex/test-helper-mocha": "3.9.0-multiple-llm.0",
48
48
  "@webex/test-helper-mock-web-socket": "3.9.0-multiple-llm.0",
49
49
  "@webex/test-helper-mock-webex": "3.9.0-multiple-llm.0",
50
50
  "@webex/test-helper-refresh-callback": "3.9.0-multiple-llm.0",
51
51
  "@webex/test-helper-test-users": "3.9.0-multiple-llm.0",
52
- "@webex/webex-core": "3.9.0-multiple-llm.0",
52
+ "@webex/webex-core": "3.9.0-multiple-llm.1",
53
53
  "backoff": "^2.5.0",
54
54
  "lodash": "^4.17.21",
55
55
  "uuid": "^3.3.2",
@@ -64,5 +64,5 @@
64
64
  "test:style": "eslint ./src/**/*.*",
65
65
  "test:unit": "webex-legacy-tools test --unit --runner mocha"
66
66
  },
67
- "version": "3.9.0-multiple-llm.2"
67
+ "version": "3.9.0-multiple-llm.3"
68
68
  }
package/src/mercury.js CHANGED
@@ -76,6 +76,32 @@ const Mercury = WebexPlugin.extend({
76
76
  this.webex.internal.feature.updateFeature(envelope.data.featureToggle);
77
77
  }
78
78
  });
79
+ /*
80
+ * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury
81
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations
82
+ * */
83
+ this.on('event:ActiveClusterStatusEvent', (envelope) => {
84
+ if (
85
+ typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&
86
+ envelope &&
87
+ envelope.data
88
+ ) {
89
+ this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);
90
+ }
91
+ });
92
+ /*
93
+ * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c
94
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications
95
+ * */
96
+ this.on('event:u2c.cache-invalidation', (envelope) => {
97
+ if (
98
+ typeof this.webex.internal.services?.invalidateCache === 'function' &&
99
+ envelope &&
100
+ envelope.data
101
+ ) {
102
+ this.webex.internal.services.invalidateCache(envelope.data?.timestamp);
103
+ }
104
+ });
79
105
  },
80
106
 
81
107
  /**
@@ -75,6 +75,8 @@ describe('plugin-mercury', () => {
75
75
  webex.internal.services = {
76
76
  convertUrlToPriorityHostUrl: sinon.stub().returns(Promise.resolve('ws://example-2.com')),
77
77
  markFailedUrl: sinon.stub().returns(Promise.resolve()),
78
+ switchActiveClusterIds: sinon.stub(),
79
+ invalidateCache: sinon.stub(),
78
80
  };
79
81
  webex.internal.metrics.submitClientMetrics = sinon.stub();
80
82
  webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus = sinon.stub();
@@ -188,7 +190,6 @@ describe('plugin-mercury', () => {
188
190
  },
189
191
  },
190
192
  };
191
-
192
193
  assert.isFalse(mercury.connected, 'Mercury is not connected');
193
194
  assert.isTrue(mercury.connecting, 'Mercury is connecting');
194
195
  mockWebSocket.open();
@@ -217,6 +218,67 @@ describe('plugin-mercury', () => {
217
218
  sinon.restore();
218
219
  });
219
220
  });
221
+ it('Mercury emit event:ActiveClusterStatusEvent, call services switchActiveClusterIds', () => {
222
+ const promise = mercury.connect();
223
+ const activeClusterEventEnvelope = {
224
+ data: {
225
+ activeClusters: {
226
+ wdm: 'wdm-cluster-id.com',
227
+ },
228
+ },
229
+ };
230
+ mockWebSocket.open();
231
+
232
+ return promise.then(() => {
233
+ mercury._emit('event:ActiveClusterStatusEvent', activeClusterEventEnvelope);
234
+ assert.calledOnceWithExactly(
235
+ webex.internal.services.switchActiveClusterIds,
236
+ activeClusterEventEnvelope.data.activeClusters
237
+ );
238
+ sinon.restore();
239
+ });
240
+ });
241
+ it('Mercury emit event:ActiveClusterStatusEvent with no data, not call services switchActiveClusterIds', () => {
242
+ webex.internal.feature.updateFeature = sinon.stub();
243
+ const promise = mercury.connect();
244
+ const envelope = {};
245
+
246
+ return promise.then(() => {
247
+ mercury._emit('event:ActiveClusterStatusEvent', envelope);
248
+ assert.notCalled(webex.internal.services.switchActiveClusterIds);
249
+ sinon.restore();
250
+ });
251
+ });
252
+ it('Mercury emit event:u2c.cache-invalidation, call services invalidateCache', () => {
253
+ const promise = mercury.connect();
254
+ const u2cInvalidateEventEnvelope = {
255
+ data: {
256
+ timestamp: "1759289614",
257
+ },
258
+ };
259
+
260
+ mockWebSocket.open();
261
+
262
+ return promise.then(() => {
263
+ mercury._emit('event:u2c.cache-invalidation', u2cInvalidateEventEnvelope);
264
+ assert.calledOnceWithExactly(
265
+ webex.internal.services.invalidateCache,
266
+ u2cInvalidateEventEnvelope.data.timestamp
267
+ );
268
+ sinon.restore();
269
+ });
270
+ });
271
+ it('Mercury emit event:u2c.cache-invalidation with no data, not call services switchActiveClusterIds', () => {
272
+ webex.internal.feature.updateFeature = sinon.stub();
273
+ const promise = mercury.connect();
274
+ const envelope = {};
275
+
276
+ return promise.then(() => {
277
+ mercury._emit('event:u2c.cache-invalidation', envelope);
278
+ assert.notCalled(webex.internal.services.invalidateCache);
279
+ sinon.restore();
280
+ });
281
+ });
220
282
 
221
283
  describe('when `maxRetries` is set', () => {
222
284
  const check = () => {