@webex/internal-plugin-mercury 3.5.0-wxcc.1 → 3.6.0

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
@@ -193,7 +193,6 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
193
193
  return _this5._emit.apply(_this5, ['ping-pong-latency'].concat(args));
194
194
  });
195
195
  _promise.default.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(function (_ref) {
196
- var _this5$config$authori, _this5$config$acknowl;
197
196
  var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
198
197
  webSocketUrl = _ref2[0],
199
198
  token = _ref2[1];
@@ -209,9 +208,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
209
208
  pongTimeout: _this5.config.pongTimeout,
210
209
  token: token.toString(),
211
210
  trackingId: "".concat(_this5.webex.sessionId, "_").concat((0, _now.default)()),
212
- logger: _this5.logger,
213
- authorizationRequired: (_this5$config$authori = _this5.config.authorizationRequired) !== null && _this5$config$authori !== void 0 ? _this5$config$authori : true,
214
- acknowledgementRequired: (_this5$config$acknowl = _this5.config.acknowledgementRequired) !== null && _this5$config$acknowl !== void 0 ? _this5$config$acknowl : true
211
+ logger: _this5.logger
215
212
  };
216
213
 
217
214
  // if the consumer has supplied request options use them
@@ -362,14 +359,11 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
362
359
  }
363
360
  },
364
361
  _getEventHandlers: function _getEventHandlers(eventType) {
365
- var handlers = [];
366
- if (!eventType) {
367
- return handlers;
368
- }
369
362
  var _eventType$split = eventType.split('.'),
370
363
  _eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
371
364
  namespace = _eventType$split2[0],
372
365
  name = _eventType$split2[1];
366
+ var handlers = [];
373
367
  if (!this.webex[namespace] && !this.webex.internal[namespace]) {
374
368
  return handlers;
375
369
  }
@@ -457,16 +451,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
457
451
  });
458
452
  }, _promise.default.resolve()).then(function () {
459
453
  _this7._emit('event', event.data);
460
- if (data.eventType) {
461
- var _data$eventType$split = data.eventType.split('.'),
462
- _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
463
- namespace = _data$eventType$split2[0];
464
- if (namespace === data.eventType) {
465
- _this7._emit("event:".concat(namespace), envelope);
466
- } else {
467
- _this7._emit("event:".concat(namespace), envelope);
468
- _this7._emit("event:".concat(data.eventType), envelope);
469
- }
454
+ var _data$eventType$split = data.eventType.split('.'),
455
+ _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
456
+ namespace = _data$eventType$split2[0];
457
+ if (namespace === data.eventType) {
458
+ _this7._emit("event:".concat(namespace), envelope);
459
+ } else {
460
+ _this7._emit("event:".concat(namespace), envelope);
461
+ _this7._emit("event:".concat(data.eventType), envelope);
470
462
  }
471
463
  }).catch(function (reason) {
472
464
  _this7.logger.error("".concat(_this7.namespace, ": error occurred processing socket message"), reason);
@@ -476,7 +468,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
476
468
  this.logger.info("".concat(this.namespace, ": reconnecting"));
477
469
  return this.connect(webSocketUrl);
478
470
  },
479
- version: "3.5.0-wxcc.1"
471
+ version: "3.6.0"
480
472
  }, ((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)));
481
473
  var _default = exports.default = Mercury;
482
474
  //# 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","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","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","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_this5$config$authori","_this5$config$acknowl","_ref2","_slicedToArray2","token","msg","reject","Error","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","_now","authorizationRequired","acknowledgementRequired","defaultMercuryOptions","open","refresh","catch","getNumRetries","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","stack","start","_len3","_key3","trigger","_getEventHandlers","eventType","handlers","_eventType$split","split","_eventType$split2","name","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","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 },\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 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 return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 1050, 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 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('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 authorizationRequired: this.config.authorizationRequired ?? true,\n acknowledgementRequired: this.config.acknowledgementRequired ?? true,\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(`${this.namespace}: connection attempt failed`, reason);\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(`${this.namespace}: error occurred in event handler`, {\n error,\n arguments: args,\n });\n }\n },\n\n _getEventHandlers(eventType) {\n const handlers = [];\n if (!eventType) {\n return handlers;\n }\n const [namespace, name] = eventType.split('.');\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 1050: // 1050 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 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 if (data.eventType) {\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 })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\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","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","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","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","Error","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","_now","defaultMercuryOptions","open","refresh","catch","getNumRetries","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","stack","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","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 },\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 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 return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 1050, 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 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('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(`${this.namespace}: connection attempt failed`, reason);\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(`${this.namespace}: error occurred in event handler`, {\n error,\n arguments: 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 1050: // 1050 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 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 _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,19 +1,12 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
- var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
- var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
- var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
- var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
- var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
9
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
10
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
11
6
  _Object$defineProperty(exports, "__esModule", {
12
7
  value: true
13
8
  });
14
9
  exports.default = void 0;
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties"));
17
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
19
12
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
@@ -23,7 +16,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
23
16
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
24
17
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
25
18
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
26
- var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
19
+ var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
27
20
  var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
28
21
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
29
22
  var _events = require("events");
@@ -32,9 +25,6 @@ var _commonTimers = require("@webex/common-timers");
32
25
  var _lodash = require("lodash");
33
26
  var _uuid = _interopRequireDefault(require("uuid"));
34
27
  var _errors = require("../errors");
35
- var _excluded = ["authorizationRequired", "acknowledgementRequired"];
36
- function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
38
28
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
39
29
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /*!
40
30
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
@@ -195,8 +185,6 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
195
185
  * @param {string} options.token (required)
196
186
  * @param {string} options.trackingId (required)
197
187
  * @param {Logger} options.logger (required)
198
- * @param {boolean} options.authorizationRequired
199
- * @param {boolean} options.acknowledgementRequired
200
188
  * @param {string} options.logLevelToken
201
189
  * @returns {Promise}
202
190
  */
@@ -221,20 +209,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
221
209
  }
222
210
  options = options || {};
223
211
  (0, _common.checkRequired)(['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'], options);
224
-
225
- // Destructure and set default values for authorizationRequired and acknowledgementRequired
226
- var _options = options,
227
- _options$authorizatio = _options.authorizationRequired,
228
- authorizationRequired = _options$authorizatio === void 0 ? true : _options$authorizatio,
229
- _options$acknowledgem = _options.acknowledgementRequired,
230
- acknowledgementRequired = _options$acknowledgem === void 0 ? true : _options$acknowledgem,
231
- remainingOptions = (0, _objectWithoutProperties2.default)(_options, _excluded);
232
- _this3.authorizationRequired = authorizationRequired;
233
- _this3.acknowledgementRequired = acknowledgementRequired;
234
-
235
- // Assign the remaining options to the instance
236
- (0, _keys.default)(remainingOptions).forEach(function (key) {
237
- (0, _defineProperty3.default)(_this3, key, {
212
+ (0, _keys.default)(options).forEach(function (key) {
213
+ (0, _defineProperty.default)(_this3, key, {
238
214
  enumerable: false,
239
215
  value: options[key]
240
216
  });
@@ -268,16 +244,11 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
268
244
  };
269
245
  socket.onopen = function () {
270
246
  _this3.logger.info("socket,".concat(_this3._domain, ": connected"));
271
- // Added the "authorizationRequired" condition to bypass the "_authorize" in case of the contact center context, in which case it is configured as false.
272
- if (_this3.authorizationRequired) {
273
- _this3._authorize().then(function () {
274
- _this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
275
- socket.onclose = _this3.onclose;
276
- resolve();
277
- }).catch(reject);
278
- } else {
279
- _this3._ping();
280
- }
247
+ _this3._authorize().then(function () {
248
+ _this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
249
+ socket.onclose = _this3.onclose;
250
+ resolve();
251
+ }).catch(reject);
281
252
  };
282
253
  socket.onerror = function (event) {
283
254
  _this3.logger.warn("socket,".concat(_this3._domain, ": error event fired"), event);
@@ -330,16 +301,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
330
301
  var processedEvent = {
331
302
  data: data
332
303
  };
333
-
334
- // Added the "acknowledgementRequired" condition to bypass the "_acknowledge" in case of the contact center context, in which case it is configured as false.
335
- if (this.acknowledgementRequired) {
336
- this._acknowledge(processedEvent);
337
- }
338
- if (data.type === 'pong' || data.type === 'ping') {
339
- // added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
340
- this.emit('pong', _objectSpread(_objectSpread({}, processedEvent), {}, {
341
- type: 'pong'
342
- }));
304
+ this._acknowledge(processedEvent);
305
+ if (data.type === 'pong') {
306
+ this.emit('pong', processedEvent);
343
307
  } else {
344
308
  this.emit('message', processedEvent);
345
309
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_excluded","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","defaults","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","URL","hostname","_unused","checkRequired","_options","_options$authorizatio","authorizationRequired","_options$acknowledgem","acknowledgementRequired","remainingOptions","_objectWithoutProperties2","_keys","_defineProperty3","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","_ping","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","_this4","isObject","_stringify","has","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","calculateLatency","pingTimestamp","now","performance","latency","pongTimeout","EventEmitter"],"sources":["socket-base.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (\n options.code &&\n options.code !== 1000 &&\n options.code !== 1050 &&\n (options.code < 3000 || options.code > 4999)\n ) {\n reject(\n new Error('`options.code` must be 1000 or 1050 or between 3000 and 4999 (inclusive)')\n );\n\n return;\n }\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n options.code === 1050\n ? {code: 1050, reason: options.reason}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {boolean} options.authorizationRequired\n * @param {boolean} options.acknowledgementRequired\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n // Destructure and set default values for authorizationRequired and acknowledgementRequired\n const {\n authorizationRequired = true,\n acknowledgementRequired = true,\n ...remainingOptions\n } = options;\n\n this.authorizationRequired = authorizationRequired;\n this.acknowledgementRequired = acknowledgementRequired;\n\n // Assign the remaining options to the instance\n Object.keys(remainingOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n // Added the \"authorizationRequired\" condition to bypass the \"_authorize\" in case of the contact center context, in which case it is configured as false.\n if (this.authorizationRequired) {\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n } else {\n this._ping();\n }\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n // Added the \"acknowledgementRequired\" condition to bypass the \"_acknowledge\" in case of the contact center context, in which case it is configured as false.\n if (this.acknowledgementRequired) {\n this._acknowledge(processedEvent);\n }\n if (data.type === 'pong' || data.type === 'ping') {\n // added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'\n this.emit('pong', {...processedEvent, type: 'pong'});\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","defaults","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","URL","hostname","_unused","checkRequired","_keys","forEach","_defineProperty","enumerable","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","_this4","isObject","_stringify","has","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","calculateLatency","pingTimestamp","now","performance","latency","pongTimeout","EventEmitter"],"sources":["socket-base.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (\n options.code &&\n options.code !== 1000 &&\n options.code !== 1050 &&\n (options.code < 3000 || options.code > 4999)\n ) {\n reject(\n new Error('`options.code` must be 1000 or 1050 or between 3000 and 4999 (inclusive)')\n );\n\n return;\n }\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n options.code === 1050\n ? {code: 1050, reason: options.reason}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n Object.keys(options).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n this._acknowledge(processedEvent);\n if (data.type === 'pong') {\n this.emit('pong', processedEvent);\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -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.5.0-wxcc.1",
33
- "@webex/test-helper-mocha": "3.5.0-wxcc.1",
34
- "@webex/test-helper-mock-webex": "3.5.0-wxcc.1",
35
- "@webex/test-helper-test-users": "3.5.0-wxcc.1",
32
+ "@webex/test-helper-chai": "3.6.0",
33
+ "@webex/test-helper-mocha": "3.6.0",
34
+ "@webex/test-helper-mock-webex": "3.6.0",
35
+ "@webex/test-helper-test-users": "3.6.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.5.0-wxcc.1",
42
- "@webex/common-timers": "3.5.0-wxcc.1",
43
- "@webex/internal-plugin-device": "3.5.0-wxcc.1",
44
- "@webex/internal-plugin-feature": "3.5.0-wxcc.1",
45
- "@webex/internal-plugin-metrics": "3.5.0-wxcc.1",
46
- "@webex/test-helper-chai": "3.5.0-wxcc.1",
47
- "@webex/test-helper-mocha": "3.5.0-wxcc.1",
48
- "@webex/test-helper-mock-web-socket": "3.5.0-wxcc.1",
49
- "@webex/test-helper-mock-webex": "3.5.0-wxcc.1",
50
- "@webex/test-helper-refresh-callback": "3.5.0-wxcc.1",
51
- "@webex/test-helper-test-users": "3.5.0-wxcc.1",
52
- "@webex/webex-core": "3.5.0-wxcc.1",
41
+ "@webex/common": "3.6.0",
42
+ "@webex/common-timers": "3.6.0",
43
+ "@webex/internal-plugin-device": "3.6.0",
44
+ "@webex/internal-plugin-feature": "3.6.0",
45
+ "@webex/internal-plugin-metrics": "3.6.0",
46
+ "@webex/test-helper-chai": "3.6.0",
47
+ "@webex/test-helper-mocha": "3.6.0",
48
+ "@webex/test-helper-mock-web-socket": "3.6.0",
49
+ "@webex/test-helper-mock-webex": "3.6.0",
50
+ "@webex/test-helper-refresh-callback": "3.6.0",
51
+ "@webex/test-helper-test-users": "3.6.0",
52
+ "@webex/webex-core": "3.6.0",
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.5.0-wxcc.1"
67
+ "version": "3.6.0"
68
68
  }
package/src/mercury.js CHANGED
@@ -217,8 +217,6 @@ const Mercury = WebexPlugin.extend({
217
217
  token: token.toString(),
218
218
  trackingId: `${this.webex.sessionId}_${Date.now()}`,
219
219
  logger: this.logger,
220
- authorizationRequired: this.config.authorizationRequired ?? true,
221
- acknowledgementRequired: this.config.acknowledgementRequired ?? true,
222
220
  };
223
221
 
224
222
  // if the consumer has supplied request options use them
@@ -401,11 +399,8 @@ const Mercury = WebexPlugin.extend({
401
399
  },
402
400
 
403
401
  _getEventHandlers(eventType) {
404
- const handlers = [];
405
- if (!eventType) {
406
- return handlers;
407
- }
408
402
  const [namespace, name] = eventType.split('.');
403
+ const handlers = [];
409
404
 
410
405
  if (!this.webex[namespace] && !this.webex.internal[namespace]) {
411
406
  return handlers;
@@ -516,15 +511,13 @@ const Mercury = WebexPlugin.extend({
516
511
  )
517
512
  .then(() => {
518
513
  this._emit('event', event.data);
519
- if (data.eventType) {
520
- const [namespace] = data.eventType.split('.');
514
+ const [namespace] = data.eventType.split('.');
521
515
 
522
- if (namespace === data.eventType) {
523
- this._emit(`event:${namespace}`, envelope);
524
- } else {
525
- this._emit(`event:${namespace}`, envelope);
526
- this._emit(`event:${data.eventType}`, envelope);
527
- }
516
+ if (namespace === data.eventType) {
517
+ this._emit(`event:${namespace}`, envelope);
518
+ } else {
519
+ this._emit(`event:${namespace}`, envelope);
520
+ this._emit(`event:${data.eventType}`, envelope);
528
521
  }
529
522
  })
530
523
  .catch((reason) => {
@@ -179,8 +179,6 @@ export default class Socket extends EventEmitter {
179
179
  * @param {string} options.token (required)
180
180
  * @param {string} options.trackingId (required)
181
181
  * @param {Logger} options.logger (required)
182
- * @param {boolean} options.authorizationRequired
183
- * @param {boolean} options.acknowledgementRequired
184
182
  * @param {string} options.logLevelToken
185
183
  * @returns {Promise}
186
184
  */
@@ -212,18 +210,7 @@ export default class Socket extends EventEmitter {
212
210
  options
213
211
  );
214
212
 
215
- // Destructure and set default values for authorizationRequired and acknowledgementRequired
216
- const {
217
- authorizationRequired = true,
218
- acknowledgementRequired = true,
219
- ...remainingOptions
220
- } = options;
221
-
222
- this.authorizationRequired = authorizationRequired;
223
- this.acknowledgementRequired = acknowledgementRequired;
224
-
225
- // Assign the remaining options to the instance
226
- Object.keys(remainingOptions).forEach((key) => {
213
+ Object.keys(options).forEach((key) => {
227
214
  Reflect.defineProperty(this, key, {
228
215
  enumerable: false,
229
216
  value: options[key],
@@ -263,18 +250,13 @@ export default class Socket extends EventEmitter {
263
250
 
264
251
  socket.onopen = () => {
265
252
  this.logger.info(`socket,${this._domain}: connected`);
266
- // Added the "authorizationRequired" condition to bypass the "_authorize" in case of the contact center context, in which case it is configured as false.
267
- if (this.authorizationRequired) {
268
- this._authorize()
269
- .then(() => {
270
- this.logger.info(`socket,${this._domain}: authorized`);
271
- socket.onclose = this.onclose;
272
- resolve();
273
- })
274
- .catch(reject);
275
- } else {
276
- this._ping();
277
- }
253
+ this._authorize()
254
+ .then(() => {
255
+ this.logger.info(`socket,${this._domain}: authorized`);
256
+ socket.onclose = this.onclose;
257
+ resolve();
258
+ })
259
+ .catch(reject);
278
260
  };
279
261
 
280
262
  socket.onerror = (event) => {
@@ -328,13 +310,9 @@ export default class Socket extends EventEmitter {
328
310
  // modified and we don't actually care about anything but the data property
329
311
  const processedEvent = {data};
330
312
 
331
- // Added the "acknowledgementRequired" condition to bypass the "_acknowledge" in case of the contact center context, in which case it is configured as false.
332
- if (this.acknowledgementRequired) {
333
- this._acknowledge(processedEvent);
334
- }
335
- if (data.type === 'pong' || data.type === 'ping') {
336
- // added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
337
- this.emit('pong', {...processedEvent, type: 'pong'});
313
+ this._acknowledge(processedEvent);
314
+ if (data.type === 'pong') {
315
+ this.emit('pong', processedEvent);
338
316
  } else {
339
317
  this.emit('message', processedEvent);
340
318
  }
@@ -713,21 +713,6 @@ describe('plugin-mercury', () => {
713
713
  return res;
714
714
  });
715
715
  });
716
-
717
- it('_onmessage without eventType', () => {
718
- sinon.spy(mercury, '_getEventHandlers');
719
- sinon.spy(mercury, '_emit');
720
- const event = {data: {data: {eventType: undefined, mydata: 'some data'}}};
721
- mercury.logger.error.restore();
722
- sinon.stub(mercury.logger, 'error');
723
- return Promise.resolve(mercury._onmessage(event)).then(() => {
724
- assert.calledWith(mercury._getEventHandlers, undefined);
725
- assert.calledWith(mercury._emit, 'event', event.data);
726
- assert.notCalled(mercury.logger.error);
727
- mercury._emit.restore();
728
- mercury._getEventHandlers.restore();
729
- });
730
- });
731
716
  });
732
717
 
733
718
  describe('#_applyOverrides()', () => {
@@ -139,7 +139,6 @@ describe('plugin-mercury', () => {
139
139
  ));
140
140
 
141
141
  it('accepts a logLevelToken option', () => {
142
- const acknowledgeSpy = sinon.spy(socket, '_acknowledge');
143
142
  const promise = socket.open('ws://example.com', {
144
143
  forceCloseDelay: mockoptions.forceCloseDelay,
145
144
  pingInterval: mockoptions.pingInterval,
@@ -148,7 +147,6 @@ describe('plugin-mercury', () => {
148
147
  token: 'mocktoken',
149
148
  trackingId: 'mocktrackingid',
150
149
  logLevelToken: 'mocklogleveltoken',
151
- acknowledgementRequired: true,
152
150
  });
153
151
 
154
152
  mockWebSocket.readyState = 1;
@@ -164,83 +162,9 @@ describe('plugin-mercury', () => {
164
162
  });
165
163
 
166
164
  return promise.then(() => {
167
- assert.called(acknowledgeSpy);
168
165
  assert.equal(socket.logLevelToken, 'mocklogleveltoken');
169
166
  });
170
167
  });
171
-
172
- it('accepts acknowledgementRequired option as false and skip acknowledge', () => {
173
- const acknowledgeSpy = sinon.spy(socket, '_acknowledge');
174
- const promise = socket.open('ws://example.com', {
175
- forceCloseDelay: mockoptions.forceCloseDelay,
176
- pingInterval: mockoptions.pingInterval,
177
- pongTimeout: mockoptions.pongTimeout,
178
- logger: console,
179
- token: 'mocktoken',
180
- trackingId: 'mocktrackingid',
181
- logLevelToken: 'mocklogleveltoken',
182
- acknowledgementRequired: false,
183
- });
184
-
185
- mockWebSocket.readyState = 1;
186
- mockWebSocket.emit('open');
187
-
188
- mockWebSocket.emit('message', {
189
- data: JSON.stringify({
190
- id: uuid.v4(),
191
- data: {
192
- eventType: 'mercury.buffer_state',
193
- },
194
- }),
195
- });
196
-
197
- return promise.then(() => {
198
- assert.notCalled(acknowledgeSpy);
199
- assert.equal(socket.logLevelToken, 'mocklogleveltoken');
200
- });
201
- });
202
-
203
- it('accepts authorizationRequired option as false and skip authorize', () => {
204
- const s = new Socket();
205
- const authorizeSpy = sinon.spy(socket, '_authorize');
206
- socket.open('ws://example.com', {
207
- forceCloseDelay: mockoptions.forceCloseDelay,
208
- pingInterval: mockoptions.pingInterval,
209
- pongTimeout: mockoptions.pongTimeout,
210
- logger: console,
211
- token: 'mocktoken',
212
- trackingId: 'mocktrackingid',
213
- logLevelToken: 'mocklogleveltoken',
214
- authorizationRequired: false,
215
- });
216
-
217
- mockWebSocket.readyState = 1;
218
- mockWebSocket.emit('open');
219
-
220
- assert.notCalled(authorizeSpy);
221
- assert.called(socket._ping);
222
- });
223
-
224
- it('accepts authorizationRequired option as true and calles authorize', () => {
225
- const s = new Socket();
226
- const authorizeSpy = sinon.spy(socket, '_authorize');
227
- socket.open('ws://example.com', {
228
- forceCloseDelay: mockoptions.forceCloseDelay,
229
- pingInterval: mockoptions.pingInterval,
230
- pongTimeout: mockoptions.pongTimeout,
231
- logger: console,
232
- token: 'mocktoken',
233
- trackingId: 'mocktrackingid',
234
- logLevelToken: 'mocklogleveltoken',
235
- authorizationRequired: true,
236
- });
237
-
238
- mockWebSocket.readyState = 1;
239
- mockWebSocket.emit('open');
240
-
241
- assert.called(authorizeSpy);
242
- assert.called(socket._ping);
243
- });
244
168
  });
245
169
 
246
170
  describe('#binaryType', () => {