@webex/internal-plugin-mercury 3.8.1 → 3.9.0-multi-llms.2

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
@@ -79,6 +79,28 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
79
79
  _this.webex.internal.feature.updateFeature(envelope.data.featureToggle);
80
80
  }
81
81
  });
82
+ /*
83
+ * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury
84
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations
85
+ * */
86
+ this.on('event:ActiveClusterStatusEvent', function (envelope) {
87
+ var _this$webex$internal$;
88
+ 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) {
89
+ var _envelope$data;
90
+ _this.webex.internal.services.switchActiveClusterIds((_envelope$data = envelope.data) === null || _envelope$data === void 0 ? void 0 : _envelope$data.activeClusters);
91
+ }
92
+ });
93
+ /*
94
+ * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c
95
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications
96
+ * */
97
+ this.on('event:u2c.cache-invalidation', function (envelope) {
98
+ var _this$webex$internal$2;
99
+ 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) {
100
+ var _envelope$data2;
101
+ _this.webex.internal.services.invalidateCache((_envelope$data2 = envelope.data) === null || _envelope$data2 === void 0 ? void 0 : _envelope$data2.timestamp);
102
+ }
103
+ });
82
104
  },
83
105
  /**
84
106
  * Get the last error.
@@ -321,6 +343,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
321
343
  _this6.connected = true;
322
344
  _this6.hasEverConnected = true;
323
345
  _this6._emit('online');
346
+ _this6.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);
324
347
  return resolve();
325
348
  };
326
349
 
@@ -398,6 +421,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
398
421
  this.unset('socket');
399
422
  this.connected = false;
400
423
  this._emit('offline', event);
424
+ this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);
401
425
  switch (event.code) {
402
426
  case 1003:
403
427
  // metric: disconnect
@@ -486,7 +510,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
486
510
  this.logger.info("".concat(this.namespace, ": reconnecting"));
487
511
  return this.connect(webSocketUrl);
488
512
  },
489
- version: "3.8.1"
513
+ version: "3.9.0-multi-llms.2"
490
514
  }, ((0, _applyDecoratedDescriptor2.default)(_obj, "connect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "connect"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "disconnect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "disconnect"), _obj), (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)));
491
515
  var _default = exports.default = Mercury;
492
516
  //# 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","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","Error","stack","device","registered","register","then","_connectWithBackoff","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","reason","options","_this3","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this4","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","refresh","catch","_this5$backoffCall","_this5$backoffCall3","getNumRetries","_this5$backoffCall2","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this6","call","onComplete","err","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n @oneFlight\n disconnect(options) {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close(options || undefined));\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('pong', (...args) => this._setTimeOffset(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall?.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall?.getNumRetries()});\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed`,\n reason,\n this.backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket disconnected; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n this._setTimeOffset(event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","_this$webex$internal$","services","switchActiveClusterIds","_envelope$data","activeClusters","_this$webex$internal$2","invalidateCache","_envelope$data2","timestamp","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","Error","stack","device","registered","register","then","_connectWithBackoff","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","reason","options","_this3","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this4","getFeature","haMessagingEnabled","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","refresh","catch","_this5$backoffCall","_this5$backoffCall3","getNumRetries","_this5$backoffCall2","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this6","call","onComplete","err","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n /*\n * 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 @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n @oneFlight\n disconnect(options) {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close(options || undefined));\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('pong', (...args) => this._setTimeOffset(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall?.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall?.getNumRetries()});\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed`,\n reason,\n this.backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket disconnected; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n this._setTimeOffset(event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "directory": "packages/@webex/internal-plugin-mercury"
11
11
  },
12
12
  "engines": {
13
- "node": ">=16"
13
+ "node": ">=18"
14
14
  },
15
15
  "browser": {
16
16
  "./dist/socket/socket.js": "./dist/socket/socket.shim.js",
@@ -29,27 +29,27 @@
29
29
  "@webex/eslint-config-legacy": "0.0.0",
30
30
  "@webex/jest-config-legacy": "0.0.0",
31
31
  "@webex/legacy-tools": "0.0.0",
32
- "@webex/test-helper-chai": "3.8.1",
33
- "@webex/test-helper-mocha": "3.8.1",
34
- "@webex/test-helper-mock-webex": "3.8.1",
35
- "@webex/test-helper-test-users": "3.8.1",
32
+ "@webex/test-helper-chai": "3.9.0-multi-llms.0",
33
+ "@webex/test-helper-mocha": "3.9.0-multi-llms.0",
34
+ "@webex/test-helper-mock-webex": "3.9.0-multi-llms.0",
35
+ "@webex/test-helper-test-users": "3.9.0-multi-llms.0",
36
36
  "eslint": "^8.24.0",
37
37
  "prettier": "^2.7.1",
38
38
  "sinon": "^9.2.4"
39
39
  },
40
40
  "dependencies": {
41
- "@webex/common": "3.8.1",
42
- "@webex/common-timers": "3.8.1",
43
- "@webex/internal-plugin-device": "3.8.1",
44
- "@webex/internal-plugin-feature": "3.8.1",
45
- "@webex/internal-plugin-metrics": "3.8.1",
46
- "@webex/test-helper-chai": "3.8.1",
47
- "@webex/test-helper-mocha": "3.8.1",
48
- "@webex/test-helper-mock-web-socket": "3.8.1",
49
- "@webex/test-helper-mock-webex": "3.8.1",
50
- "@webex/test-helper-refresh-callback": "3.8.1",
51
- "@webex/test-helper-test-users": "3.8.1",
52
- "@webex/webex-core": "3.8.1",
41
+ "@webex/common": "3.9.0-multi-llms.0",
42
+ "@webex/common-timers": "3.9.0-multi-llms.0",
43
+ "@webex/internal-plugin-device": "3.9.0-multi-llms.2",
44
+ "@webex/internal-plugin-feature": "3.9.0-multi-llms.2",
45
+ "@webex/internal-plugin-metrics": "3.9.0-multi-llms.2",
46
+ "@webex/test-helper-chai": "3.9.0-multi-llms.0",
47
+ "@webex/test-helper-mocha": "3.9.0-multi-llms.0",
48
+ "@webex/test-helper-mock-web-socket": "3.9.0-multi-llms.0",
49
+ "@webex/test-helper-mock-webex": "3.9.0-multi-llms.0",
50
+ "@webex/test-helper-refresh-callback": "3.9.0-multi-llms.0",
51
+ "@webex/test-helper-test-users": "3.9.0-multi-llms.0",
52
+ "@webex/webex-core": "3.9.0-multi-llms.2",
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.8.1"
67
+ "version": "3.9.0-multi-llms.2"
68
68
  }
package/src/mercury.js CHANGED
@@ -68,6 +68,32 @@ const Mercury = WebexPlugin.extend({
68
68
  this.webex.internal.feature.updateFeature(envelope.data.featureToggle);
69
69
  }
70
70
  });
71
+ /*
72
+ * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury
73
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations
74
+ * */
75
+ this.on('event:ActiveClusterStatusEvent', (envelope) => {
76
+ if (
77
+ typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&
78
+ envelope &&
79
+ envelope.data
80
+ ) {
81
+ this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);
82
+ }
83
+ });
84
+ /*
85
+ * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c
86
+ * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications
87
+ * */
88
+ this.on('event:u2c.cache-invalidation', (envelope) => {
89
+ if (
90
+ typeof this.webex.internal.services?.invalidateCache === 'function' &&
91
+ envelope &&
92
+ envelope.data
93
+ ) {
94
+ this.webex.internal.services.invalidateCache(envelope.data?.timestamp);
95
+ }
96
+ });
71
97
  },
72
98
 
73
99
  /**
@@ -358,6 +384,7 @@ const Mercury = WebexPlugin.extend({
358
384
  this.connected = true;
359
385
  this.hasEverConnected = true;
360
386
  this._emit('online');
387
+ this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);
361
388
 
362
389
  return resolve();
363
390
  };
@@ -455,6 +482,7 @@ const Mercury = WebexPlugin.extend({
455
482
  this.unset('socket');
456
483
  this.connected = false;
457
484
  this._emit('offline', event);
485
+ this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);
458
486
 
459
487
  switch (event.code) {
460
488
  case 1003:
@@ -56,6 +56,7 @@ describe('plugin-mercury', () => {
56
56
  });
57
57
 
58
58
  webex.internal.metrics.submitClientMetrics = sinon.stub();
59
+ webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus = sinon.stub();
59
60
  webex.trackingId = 'fakeTrackingId';
60
61
  webex.config.mercury = mercuryConfig.mercury;
61
62
 
@@ -75,8 +75,11 @@ 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();
82
+ webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus = sinon.stub();
80
83
  webex.trackingId = 'fakeTrackingId';
81
84
  webex.config.mercury = mercuryConfig.mercury;
82
85
 
@@ -110,17 +113,31 @@ describe('plugin-mercury', () => {
110
113
 
111
114
  describe('#listen()', () => {
112
115
  it('proxies to #connect()', () => {
113
- sinon.stub(mercury, 'connect');
114
- mercury.listen();
115
- assert.called(mercury.connect);
116
+ const connectStub = sinon.stub(mercury, 'connect').callThrough();
117
+ return mercury.listen().then(() => {
118
+ assert.called(connectStub);
119
+ assert.calledWith(
120
+ webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus,
121
+ true
122
+ );
123
+ });
116
124
  });
117
125
  });
118
126
 
119
127
  describe('#stopListening()', () => {
120
128
  it('proxies to #disconnect()', () => {
121
- sinon.stub(mercury, 'connect');
122
- mercury.listen();
123
- assert.called(mercury.connect);
129
+ return mercury.connect().then(() => {
130
+ webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus.resetHistory();
131
+ const disconnectStub = sinon.stub(mercury, 'disconnect').callThrough();
132
+
133
+ mercury.stopListening();
134
+ assert.called(disconnectStub);
135
+ mockWebSocket.emit('close', {code: 1000, reason: 'test'});
136
+ assert.calledWith(
137
+ webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus,
138
+ false
139
+ );
140
+ });
124
141
  });
125
142
  });
126
143
 
@@ -147,7 +164,6 @@ describe('plugin-mercury', () => {
147
164
  },
148
165
  },
149
166
  };
150
-
151
167
  assert.isFalse(mercury.connected, 'Mercury is not connected');
152
168
  assert.isTrue(mercury.connecting, 'Mercury is connecting');
153
169
  mockWebSocket.open();
@@ -176,6 +192,67 @@ describe('plugin-mercury', () => {
176
192
  sinon.restore();
177
193
  });
178
194
  });
195
+ it('Mercury emit event:ActiveClusterStatusEvent, call services switchActiveClusterIds', () => {
196
+ const promise = mercury.connect();
197
+ const activeClusterEventEnvelope = {
198
+ data: {
199
+ activeClusters: {
200
+ wdm: 'wdm-cluster-id.com',
201
+ },
202
+ },
203
+ };
204
+ mockWebSocket.open();
205
+
206
+ return promise.then(() => {
207
+ mercury._emit('event:ActiveClusterStatusEvent', activeClusterEventEnvelope);
208
+ assert.calledOnceWithExactly(
209
+ webex.internal.services.switchActiveClusterIds,
210
+ activeClusterEventEnvelope.data.activeClusters
211
+ );
212
+ sinon.restore();
213
+ });
214
+ });
215
+ it('Mercury emit event:ActiveClusterStatusEvent with no data, not call services switchActiveClusterIds', () => {
216
+ webex.internal.feature.updateFeature = sinon.stub();
217
+ const promise = mercury.connect();
218
+ const envelope = {};
219
+
220
+ return promise.then(() => {
221
+ mercury._emit('event:ActiveClusterStatusEvent', envelope);
222
+ assert.notCalled(webex.internal.services.switchActiveClusterIds);
223
+ sinon.restore();
224
+ });
225
+ });
226
+ it('Mercury emit event:u2c.cache-invalidation, call services invalidateCache', () => {
227
+ const promise = mercury.connect();
228
+ const u2cInvalidateEventEnvelope = {
229
+ data: {
230
+ timestamp: "1759289614",
231
+ },
232
+ };
233
+
234
+ mockWebSocket.open();
235
+
236
+ return promise.then(() => {
237
+ mercury._emit('event:u2c.cache-invalidation', u2cInvalidateEventEnvelope);
238
+ assert.calledOnceWithExactly(
239
+ webex.internal.services.invalidateCache,
240
+ u2cInvalidateEventEnvelope.data.timestamp
241
+ );
242
+ sinon.restore();
243
+ });
244
+ });
245
+ it('Mercury emit event:u2c.cache-invalidation with no data, not call services switchActiveClusterIds', () => {
246
+ webex.internal.feature.updateFeature = sinon.stub();
247
+ const promise = mercury.connect();
248
+ const envelope = {};
249
+
250
+ return promise.then(() => {
251
+ mercury._emit('event:u2c.cache-invalidation', envelope);
252
+ assert.notCalled(webex.internal.services.invalidateCache);
253
+ sinon.restore();
254
+ });
255
+ });
179
256
 
180
257
  describe('when `maxRetries` is set', () => {
181
258
  const check = () => {