@webex/internal-plugin-mercury 3.7.0 → 3.8.0-next.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
@@ -52,7 +52,11 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
52
52
  type: 'boolean'
53
53
  },
54
54
  socket: 'object',
55
- localClusterServiceUrls: 'object'
55
+ localClusterServiceUrls: 'object',
56
+ mercuryTimeOffset: {
57
+ default: undefined,
58
+ type: 'number'
59
+ }
56
60
  },
57
61
  derived: {
58
62
  listening: {
@@ -90,14 +94,18 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
90
94
  return _promise.default.resolve();
91
95
  }
92
96
  this.connecting = true;
97
+ this.logger.info("".concat(this.namespace, ": starting connection attempt"));
98
+ this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
93
99
  return _promise.default.resolve(this.webex.internal.device.registered || this.webex.internal.device.register()).then(function () {
94
100
  _this2.logger.info("".concat(_this2.namespace, ": connecting"));
95
101
  return _this2._connectWithBackoff(webSocketUrl);
96
102
  });
97
103
  },
98
104
  logout: function logout() {
105
+ this.logger.info("".concat(this.namespace, ": logout() called"));
106
+ this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
99
107
  return this.disconnect(this.config.beforeLogoutOptionsCloseReason && !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason) ? {
100
- code: 1050,
108
+ code: 3050,
101
109
  reason: this.config.beforeLogoutOptionsCloseReason
102
110
  } : undefined);
103
111
  },
@@ -181,6 +189,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
181
189
  socket.on('message', function () {
182
190
  return _this5._onmessage.apply(_this5, arguments);
183
191
  });
192
+ socket.on('pong', function () {
193
+ return _this5._setTimeOffset.apply(_this5, arguments);
194
+ });
184
195
  socket.on('sequence-mismatch', function () {
185
196
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
186
197
  args[_key] = arguments[_key];
@@ -194,6 +205,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
194
205
  return _this5._emit.apply(_this5, ['ping-pong-latency'].concat(args));
195
206
  });
196
207
  _promise.default.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(function (_ref) {
208
+ var _this5$config$authori, _this5$config$acknowl;
197
209
  var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
198
210
  webSocketUrl = _ref2[0],
199
211
  token = _ref2[1];
@@ -209,7 +221,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
209
221
  pongTimeout: _this5.config.pongTimeout,
210
222
  token: token.toString(),
211
223
  trackingId: "".concat(_this5.webex.sessionId, "_").concat((0, _now.default)()),
212
- logger: _this5.logger
224
+ logger: _this5.logger,
225
+ authorizationRequired: (_this5$config$authori = _this5.config.authorizationRequired) !== null && _this5$config$authori !== void 0 ? _this5$config$authori : true,
226
+ acknowledgementRequired: (_this5$config$acknowl = _this5.config.acknowledgementRequired) !== null && _this5$config$acknowl !== void 0 ? _this5$config$acknowl : true
213
227
  };
214
228
 
215
229
  // if the consumer has supplied request options use them
@@ -233,6 +247,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
233
247
  return _promise.default.resolve();
234
248
  });
235
249
  }).catch(function (reason) {
250
+ var _this5$backoffCall;
236
251
  _this5.lastError = reason; // remember the last error
237
252
 
238
253
  // Suppress connection errors that appear to be network related. This
@@ -244,7 +259,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
244
259
  retries: _this5.backoffCall.getNumRetries()
245
260
  });
246
261
  }
247
- _this5.logger.info("".concat(_this5.namespace, ": connection attempt failed"), reason);
262
+ _this5.logger.info("".concat(_this5.namespace, ": connection attempt failed"), reason, ((_this5$backoffCall = _this5.backoffCall) === null || _this5$backoffCall === void 0 ? void 0 : _this5$backoffCall.getNumRetries()) === 0 ? reason.stack : '');
248
263
  // UnknownResponse is produced by IE for any 4XXX; treated it like a bad
249
264
  // web socket url and let WDM handle the token checking
250
265
  if (reason instanceof _errors.UnknownResponse) {
@@ -357,11 +372,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
357
372
  }
358
373
  },
359
374
  _getEventHandlers: function _getEventHandlers(eventType) {
375
+ var handlers = [];
376
+ if (!eventType) {
377
+ return handlers;
378
+ }
360
379
  var _eventType$split = eventType.split('.'),
361
380
  _eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
362
381
  namespace = _eventType$split2[0],
363
382
  name = _eventType$split2[1];
364
- var handlers = [];
365
383
  if (!this.webex[namespace] && !this.webex.internal[namespace]) {
366
384
  return handlers;
367
385
  }
@@ -407,8 +425,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
407
425
  // if (code == 1011 && reason !== ping error) metric: unexpected disconnect
408
426
  break;
409
427
  case 1000:
410
- case 1050:
411
- // 1050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block
428
+ case 3050:
429
+ // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block
412
430
  if (normalReconnectReasons.includes(reason)) {
413
431
  this.logger.info("".concat(this.namespace, ": socket disconnected; reconnecting"));
414
432
  this._emit('offline.transient', event);
@@ -431,6 +449,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
431
449
  },
432
450
  _onmessage: function _onmessage(event) {
433
451
  var _this7 = this;
452
+ this._setTimeOffset(event);
434
453
  var envelope = event.data;
435
454
  if (process.env.ENABLE_MERCURY_LOGGING) {
436
455
  this.logger.debug("".concat(this.namespace, ": message envelope: "), envelope);
@@ -449,24 +468,32 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
449
468
  });
450
469
  }, _promise.default.resolve()).then(function () {
451
470
  _this7._emit('event', event.data);
452
- var _data$eventType$split = data.eventType.split('.'),
453
- _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
454
- namespace = _data$eventType$split2[0];
455
- if (namespace === data.eventType) {
456
- _this7._emit("event:".concat(namespace), envelope);
457
- } else {
458
- _this7._emit("event:".concat(namespace), envelope);
459
- _this7._emit("event:".concat(data.eventType), envelope);
471
+ if (data.eventType) {
472
+ var _data$eventType$split = data.eventType.split('.'),
473
+ _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
474
+ namespace = _data$eventType$split2[0];
475
+ if (namespace === data.eventType) {
476
+ _this7._emit("event:".concat(namespace), envelope);
477
+ } else {
478
+ _this7._emit("event:".concat(namespace), envelope);
479
+ _this7._emit("event:".concat(data.eventType), envelope);
480
+ }
460
481
  }
461
482
  }).catch(function (reason) {
462
483
  _this7.logger.error("".concat(_this7.namespace, ": error occurred processing socket message"), reason);
463
484
  });
464
485
  },
486
+ _setTimeOffset: function _setTimeOffset(event) {
487
+ var wsWriteTimestamp = event.data.wsWriteTimestamp;
488
+ if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {
489
+ this.mercuryTimeOffset = (0, _now.default)() - wsWriteTimestamp;
490
+ }
491
+ },
465
492
  _reconnect: function _reconnect(webSocketUrl) {
466
493
  this.logger.info("".concat(this.namespace, ": reconnecting"));
467
494
  return this.connect(webSocketUrl);
468
495
  },
469
- version: "3.7.0"
496
+ version: "3.8.0-next.2"
470
497
  }, ((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)));
471
498
  var _default = exports.default = Mercury;
472
499
  //# 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","clientTimestamp","_now","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","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 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('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(\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 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":";;;;;;;;;;;;;;;;;;;;;;AAKA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AAOkB,IAAAO,IAAA,EAAAC,KAAA,EAAAC,IAAA;AApBlB;AACA;AACA;AACA;AAFA,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,iCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,iCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAqBA,IAAMqB,sBAAsB,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,CAAC;AAE9F,IAAMC,OAAO,GAAGC,sBAAW,CAACC,MAAM,EAAA5B,IAAA,GAkG/B,IAAA6B,kBAAU,EAAC,iDAAiD,CAAC,EAAA5B,KAAA,GAM7D,IAAA4B,kBAAU,EAAC,2DAA2D,CAAC,GAAA3B,IAAA,GAxGvC;EACjC4B,SAAS,EAAE,SAAS;EACpBC,SAAS,EAAEC,SAAS;EAEpBC,OAAO,EAAE;IACPC,SAAS,EAAE;MACTb,OAAO,EAAE,KAAK;MACdc,IAAI,EAAE;IACR,CAAC;IACDC,UAAU,EAAE;MACVf,OAAO,EAAE,KAAK;MACdc,IAAI,EAAE;IACR,CAAC;IACDE,gBAAgB,EAAE;MAChBhB,OAAO,EAAE,KAAK;MACdc,IAAI,EAAE;IACR,CAAC;IACDG,MAAM,EAAE,QAAQ;IAChBC,uBAAuB,EAAE;EAC3B,CAAC;EAEDC,OAAO,EAAE;IACPC,SAAS,EAAE;MACTC,IAAI,EAAE,CAAC,WAAW,CAAC;MACnBC,EAAE,WAAAA,GAAA,EAAG;QACH,OAAO,IAAI,CAACT,SAAS;MACvB;IACF;EACF,CAAC;EAEDU,UAAU,WAAAA,WAAA,EAAG;IAAA,IAAAC,KAAA;IACX;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,EAAE,CAAC,4BAA4B,EAAE,UAACC,QAAQ,EAAK;MAClD,IAAIA,QAAQ,IAAIA,QAAQ,CAACC,IAAI,EAAE;QAC7BH,KAAI,CAACI,KAAK,CAACC,QAAQ,CAACC,OAAO,CAACC,aAAa,CAACL,QAAQ,CAACC,IAAI,CAACK,aAAa,CAAC;MACxE;IACF,CAAC,CAAC;EACJ,CAAC;EAED;AACF;AACA;AACA;EACEC,YAAY,WAAAA,aAAA,EAAG;IACb,OAAO,IAAI,CAACvB,SAAS;EACvB,CAAC;EAGDwB,OAAO,WAAAA,QAACC,YAAY,EAAE;IAAA,IAAAC,MAAA;IACpB,IAAI,IAAI,CAACvB,SAAS,EAAE;MAClB,IAAI,CAACwB,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAC9B,SAAS,gDAA6C,CAAC;MAEhF,OAAO+B,QAAA,CAAAxC,OAAA,CAAQyC,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAI,CAAC1B,UAAU,GAAG,IAAI;IAEtB,OAAOyB,QAAA,CAAAxC,OAAA,CAAQyC,OAAO,CACpB,IAAI,CAACb,KAAK,CAACC,QAAQ,CAACa,MAAM,CAACC,UAAU,IAAI,IAAI,CAACf,KAAK,CAACC,QAAQ,CAACa,MAAM,CAACE,QAAQ,CAAC,CAC/E,CAAC,CAACC,IAAI,CAAC,YAAM;MACXT,MAAI,CAACC,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIH,MAAI,CAAC3B,SAAS,iBAAc,CAAC;MAEjD,OAAO2B,MAAI,CAACU,mBAAmB,CAACX,YAAY,CAAC;IAC/C,CAAC,CAAC;EACJ,CAAC;EAEDY,MAAM,WAAAA,OAAA,EAAG;IACP,OAAO,IAAI,CAACC,UAAU,CACpB,IAAI,CAACC,MAAM,CAACC,8BAA8B,IACxC,CAAC9C,sBAAsB,CAAC+C,QAAQ,CAAC,IAAI,CAACF,MAAM,CAACC,8BAA8B,CAAC,GAC1E;MAACE,IAAI,EAAE,IAAI;MAAEC,MAAM,EAAE,IAAI,CAACJ,MAAM,CAACC;IAA8B,CAAC,GAChEvC,SACN,CAAC;EACH,CAAC;EAGDqC,UAAU,WAAAA,WAACM,OAAO,EAAE;IAAA,IAAAC,MAAA;IAClB,OAAO,IAAAf,QAAA,CAAAxC,OAAA,CAAY,UAACyC,OAAO,EAAK;MAC9B,IAAIc,MAAI,CAACC,WAAW,EAAE;QACpBD,MAAI,CAAClB,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIgB,MAAI,CAAC9C,SAAS,0BAAuB,CAAC;QAC1D8C,MAAI,CAACC,WAAW,CAACC,KAAK,CAAC,CAAC;MAC1B;MAEA,IAAIF,MAAI,CAACtC,MAAM,EAAE;QACfsC,MAAI,CAACtC,MAAM,CAACyC,kBAAkB,CAAC,SAAS,CAAC;QACzCH,MAAI,CAACI,IAAI,CAAC,SAAS,EAAElB,OAAO,CAAC;QAC7BA,OAAO,CAACc,MAAI,CAACtC,MAAM,CAAC2C,KAAK,CAACN,OAAO,IAAI3C,SAAS,CAAC,CAAC;MAClD;MAEA8B,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ,CAAC;EAGDoB,MAAM,WAAAA,OAAA,EAAG;IACP;IACA,OAAO,IAAI,CAAC3B,OAAO,CAAC,CAAC;EACvB,CAAC;EAGD4B,aAAa,WAAAA,cAAA,EAAG;IACd;IACA,OAAO,IAAI,CAACd,UAAU,CAAC,CAAC;EAC1B,CAAC;EAEDe,8BAA8B,WAAAA,+BAACC,OAAO,EAAE;IACtC,IAAI,CAAC9C,uBAAuB,GAAG8C,OAAO,CAAC9C,uBAAuB;EAChE,CAAC;EAED+C,eAAe,WAAAA,gBAACC,KAAK,EAAE;IACrB,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAACC,OAAO,EAAE;MAC5B;IACF;IACA,IAAMC,UAAU,GAAG,IAAAC,KAAA,CAAArE,OAAA,EAAYkE,KAAK,CAACC,OAAO,CAAC;IAE7CC,UAAU,CAACtE,OAAO,CAAC,UAACwE,OAAO,EAAK;MAC9B,IAAAC,WAAG,EAACL,KAAK,EAAEI,OAAO,EAAEJ,KAAK,CAACC,OAAO,CAACG,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;EACJ,CAAC;EAEDE,WAAW,WAAAA,YAACrC,YAAY,EAAE;IAAA,IAAAsC,MAAA;IACxB,IAAI,CAACtC,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI,CAACP,KAAK,CAACC,QAAQ,CAACa,MAAM,CAACP,YAAY;IACxD;IAEA,OAAO,IAAI,CAACP,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B4C,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD7B,IAAI,CAAC,UAAC8B,kBAAkB,EAAK;MAC5B,IAAIA,kBAAkB,EAAE;QACtB,OAAOF,MAAI,CAAC7C,KAAK,CAACC,QAAQ,CAAC+C,QAAQ,CAACC,2BAA2B,CAAC1C,YAAY,CAAC;MAC/E;MAEA,OAAOA,YAAY;IACrB,CAAC,CAAC,CACDU,IAAI,CAAC,UAACiC,KAAK,EAAK;MACf3C,YAAY,GAAG2C,KAAK;IACtB,CAAC,CAAC,CACDjC,IAAI,CAAC;MAAA,OAAM4B,MAAI,CAAC7C,KAAK,CAACC,QAAQ,CAACC,OAAO,CAAC4C,UAAU,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAAA,EAAC,CACrF7B,IAAI,CAAC,UAACkC,gBAAgB,EAAK;MAC1B5C,YAAY,GAAG6C,YAAG,CAACC,KAAK,CAAC9C,YAAY,EAAE,IAAI,CAAC;MAC5C,IAAA+C,OAAA,CAAAlF,OAAA,EAAcmC,YAAY,CAACgD,KAAK,EAAE;QAChCC,kBAAkB,EAAE,MAAM;QAC1BC,YAAY,EAAE,IAAI;QAClBC,eAAe,EAAE;MACnB,CAAC,CAAC;MAEF,IAAIP,gBAAgB,EAAE;QACpB,IAAAG,OAAA,CAAAlF,OAAA,EAAcmC,YAAY,CAACgD,KAAK,EAAE;UAChCI,yBAAyB,EAAE,IAAI;UAC/BC,4BAA4B,EAAE;QAChC,CAAC,CAAC;QACF,IAAAC,eAAA,CAAAzF,OAAA,EAAuBmC,YAAY,CAACgD,KAAK,EAAE,cAAc,CAAC;MAC5D;MAEA,IAAI,IAAAO,WAAG,EAACjB,MAAI,EAAE,+BAA+B,EAAE,KAAK,CAAC,EAAE;QACrDtC,YAAY,CAACgD,KAAK,CAACQ,mBAAmB,GAAG,IAAI;MAC/C;MAEAxD,YAAY,CAACgD,KAAK,CAACS,eAAe,GAAG,IAAAC,IAAA,CAAA7F,OAAA,EAAS,CAAC;MAE/C,OAAOgF,YAAG,CAACc,MAAM,CAAC3D,YAAY,CAAC;IACjC,CAAC,CAAC;EACN,CAAC;EAED4D,kBAAkB,WAAAA,mBAACC,SAAS,EAAEC,QAAQ,EAAE;IAAA,IAAAC,MAAA;IACtC,IAAMjF,MAAM,GAAG,IAAIkF,eAAM,CAAC,CAAC;IAC3B,IAAIC,YAAY;IAEhBnF,MAAM,CAACQ,EAAE,CAAC,OAAO,EAAE;MAAA,OAAayE,MAAI,CAACG,QAAQ,CAAA5G,KAAA,CAAbyG,MAAI,EAAAvG,SAAiB,CAAC;IAAA,EAAC;IACvDsB,MAAM,CAACQ,EAAE,CAAC,SAAS,EAAE;MAAA,OAAayE,MAAI,CAACI,UAAU,CAAA7G,KAAA,CAAfyG,MAAI,EAAAvG,SAAmB,CAAC;IAAA,EAAC;IAC3DsB,MAAM,CAACQ,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAA8E,IAAA,GAAA5G,SAAA,CAAAC,MAAA,EAAI4G,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;QAAJF,IAAI,CAAAE,IAAA,IAAA/G,SAAA,CAAA+G,IAAA;MAAA;MAAA,OAAKR,MAAI,CAACS,KAAK,CAAAlH,KAAA,CAAVyG,MAAI,GAAO,mBAAmB,EAAA3D,MAAA,CAAKiE,IAAI,EAAC;IAAA,EAAC;IACrFvF,MAAM,CAACQ,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAAmF,KAAA,GAAAjH,SAAA,CAAAC,MAAA,EAAI4G,IAAI,OAAAC,KAAA,CAAAG,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJL,IAAI,CAAAK,KAAA,IAAAlH,SAAA,CAAAkH,KAAA;MAAA;MAAA,OAAKX,MAAI,CAACS,KAAK,CAAAlH,KAAA,CAAVyG,MAAI,GAAO,mBAAmB,EAAA3D,MAAA,CAAKiE,IAAI,EAAC;IAAA,EAAC;IAErFhE,QAAA,CAAAxC,OAAA,CAAQ8G,GAAG,CAAC,CAAC,IAAI,CAACtC,WAAW,CAACwB,SAAS,CAAC,EAAE,IAAI,CAACpE,KAAK,CAACmF,WAAW,CAACC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC9EnE,IAAI,CAAC,UAAAoE,IAAA,EAA2B;MAAA,IAAAC,KAAA,OAAAC,eAAA,CAAAnH,OAAA,EAAAiH,IAAA;QAAzB9E,YAAY,GAAA+E,KAAA;QAAEE,KAAK,GAAAF,KAAA;MACzB,IAAI,CAAChB,MAAI,CAAC1C,WAAW,EAAE;QACrB,IAAM6D,GAAG,MAAA9E,MAAA,CAAM2D,MAAI,CAACzF,SAAS,6DAA0D;QAEvFyF,MAAI,CAAC7D,MAAM,CAACC,IAAI,CAAC+E,GAAG,CAAC;QAErB,OAAO7E,QAAA,CAAAxC,OAAA,CAAQsH,MAAM,CAAC,IAAIC,KAAK,CAACF,GAAG,CAAC,CAAC;MACvC;MAEAjB,YAAY,GAAGjE,YAAY;MAE3B,IAAImB,OAAO,GAAG;QACZkE,eAAe,EAAEtB,MAAI,CAACjD,MAAM,CAACuE,eAAe;QAC5CC,YAAY,EAAEvB,MAAI,CAACjD,MAAM,CAACwE,YAAY;QACtCC,WAAW,EAAExB,MAAI,CAACjD,MAAM,CAACyE,WAAW;QACpCN,KAAK,EAAEA,KAAK,CAACO,QAAQ,CAAC,CAAC;QACvBC,UAAU,KAAArF,MAAA,CAAK2D,MAAI,CAACtE,KAAK,CAACiG,SAAS,OAAAtF,MAAA,CAAI,IAAAsD,IAAA,CAAA7F,OAAA,EAAS,CAAC,CAAE;QACnDqC,MAAM,EAAE6D,MAAI,CAAC7D;MACf,CAAC;;MAED;MACA,IAAI6D,MAAI,CAACtE,KAAK,CAACqB,MAAM,CAAC6E,qBAAqB,EAAE;QAC3C5B,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI2D,MAAI,CAACzF,SAAS,6BAA0B,CAAC;QAC7D6C,OAAO,GAAA5D,aAAA,CAAAA,aAAA,KAAO4D,OAAO,GAAK4C,MAAI,CAACtE,KAAK,CAACqB,MAAM,CAAC6E,qBAAqB,CAAC;MACpE;;MAEA;MACA;MACA5B,MAAI,CAACjF,MAAM,GAAGA,MAAM;MAEpBiF,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI2D,MAAI,CAACzF,SAAS,uBAAA8B,MAAA,CAAoBJ,YAAY,CAAE,CAAC;MAErE,OAAOlB,MAAM,CAAC8G,IAAI,CAAC5F,YAAY,EAAEmB,OAAO,CAAC;IAC3C,CAAC,CAAC,CACDT,IAAI,CAAC,YAAM;MACVqD,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX2D,MAAI,CAACzF,SAAS,+DAAA8B,MAAA,CAA4D6D,YAAY,CAC3F,CAAC;MACDH,QAAQ,CAAC,CAAC;MAEV,OAAOC,MAAI,CAACtE,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B4C,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD7B,IAAI,CAAC,UAAC8B,kBAAkB,EAAK;QAC5B,IAAIA,kBAAkB,EAAE;UACtB,OAAOuB,MAAI,CAACtE,KAAK,CAACC,QAAQ,CAACa,MAAM,CAACsF,OAAO,CAAC,CAAC;QAC7C;QAEA,OAAOxF,QAAA,CAAAxC,OAAA,CAAQyC,OAAO,CAAC,CAAC;MAC1B,CAAC,CAAC;IACN,CAAC,CAAC,CACDwF,KAAK,CAAC,UAAC5E,MAAM,EAAK;MACjB6C,MAAI,CAACxF,SAAS,GAAG2C,MAAM,CAAC,CAAC;;MAEzB;MACA;MACA;MACA;MACA,IAAIA,MAAM,CAACD,IAAI,KAAK,IAAI,IAAI8C,MAAI,CAAC1C,WAAW,IAAI0C,MAAI,CAAC1C,WAAW,CAAC0E,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE;QACpFhC,MAAI,CAACS,KAAK,CAAC,mBAAmB,EAAEtD,MAAM,EAAE;UAAC8E,OAAO,EAAEjC,MAAI,CAAC1C,WAAW,CAAC0E,aAAa,CAAC;QAAC,CAAC,CAAC;MACtF;MACAhC,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI2D,MAAI,CAACzF,SAAS,kCAA+B4C,MAAM,CAAC;MACxE;MACA;MACA,IAAIA,MAAM,YAAY+E,uBAAe,EAAE;QACrClC,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX2D,MAAI,CAACzF,SAAS,qEACnB,CAAC;QAED,OAAOyF,MAAI,CAACtE,KAAK,CAACC,QAAQ,CAACa,MAAM,CAACsF,OAAO,CAAC,CAAC,CAACnF,IAAI,CAAC;UAAA,OAAMoD,QAAQ,CAAC5C,MAAM,CAAC;QAAA,EAAC;MAC1E;MACA;MACA,IAAIA,MAAM,YAAYgF,qBAAa,EAAE;QACnCnC,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI2D,MAAI,CAACzF,SAAS,kDAA+C,CAAC;QAElF,OAAOyF,MAAI,CAACtE,KAAK,CAACmF,WAAW,CAACiB,OAAO,CAAC;UAACM,KAAK,EAAE;QAAI,CAAC,CAAC,CAACzF,IAAI,CAAC;UAAA,OAAMoD,QAAQ,CAAC5C,MAAM,CAAC;QAAA,EAAC;MACnF;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,IAAIA,MAAM,YAAYkF,kBAAU,IAAIlF,MAAM,YAAYmF,iBAAS,EAAE;QAC/DtC,MAAI,CAAC7D,MAAM,CAACoG,IAAI,IAAAlG,MAAA,CAAI2D,MAAI,CAACzF,SAAS,mDAAgD,CAAC;QACnFyF,MAAI,CAAC1C,WAAW,CAACC,KAAK,CAAC,CAAC;QAExB,OAAOwC,QAAQ,CAAC5C,MAAM,CAAC;MACzB;MACA,IAAIA,MAAM,YAAYqF,uBAAe,EAAE;QACrC,OAAOxC,MAAI,CAACtE,KAAK,CAACC,QAAQ,CAACC,OAAO,CAC/B4C,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChD7B,IAAI,CAAC,UAAC8B,kBAAkB,EAAK;UAC5B,IAAIA,kBAAkB,EAAE;YACtBuB,MAAI,CAAC7D,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX2D,MAAI,CAACzF,SAAS,uHAAA8B,MAAA,CAAoH6D,YAAY,cAAA7D,MAAA,CAAWc,MAAM,CAACW,OAAO,CAC5K,CAAC;YAED,OAAOkC,MAAI,CAACtE,KAAK,CAACC,QAAQ,CAAC+C,QAAQ,CAAC+D,aAAa,CAACvC,YAAY,CAAC;UACjE;UAEA,OAAO,IAAI;QACb,CAAC,CAAC,CACDvD,IAAI,CAAC;UAAA,OAAMoD,QAAQ,CAAC5C,MAAM,CAAC;QAAA,EAAC;MACjC;MAEA,OAAO4C,QAAQ,CAAC5C,MAAM,CAAC;IACzB,CAAC,CAAC,CACD4E,KAAK,CAAC,UAAC5E,MAAM,EAAK;MACjB6C,MAAI,CAAC7D,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAI2D,MAAI,CAACzF,SAAS,4CAAyC4C,MAAM,CAAC;MACnF4C,QAAQ,CAAC5C,MAAM,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDP,mBAAmB,WAAAA,oBAACX,YAAY,EAAE;IAAA,IAAA0G,MAAA;IAChC,OAAO,IAAArG,QAAA,CAAAxC,OAAA,CAAY,UAACyC,OAAO,EAAE6E,MAAM,EAAK;MACtC;MACA;MACA,IAAIwB,IAAI;MACR,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,GAAG,EAAK;QAC1BH,MAAI,CAAC9H,UAAU,GAAG,KAAK;QAEvB8H,MAAI,CAACrF,WAAW,GAAG7C,SAAS;QAC5B,IAAIqI,GAAG,EAAE;UACPH,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAEZsG,MAAI,CAACpI,SAAS,gCAAA8B,MAAA,CACauG,IAAI,CAACZ,aAAa,CAAC,CAAC,+DAAA3F,MAAA,CAA4DyG,GAAG,CAClH,CAAC;UAED,OAAO1B,MAAM,CAAC0B,GAAG,CAAC;QACpB;QACAH,MAAI,CAAChI,SAAS,GAAG,IAAI;QACrBgI,MAAI,CAAC7H,gBAAgB,GAAG,IAAI;QAC5B6H,MAAI,CAAClC,KAAK,CAAC,QAAQ,CAAC;QAEpB,OAAOlE,OAAO,CAAC,CAAC;MAClB,CAAC;;MAED;MACAqG,IAAI,GAAGG,gBAAO,CAACH,IAAI,CAAC,UAAC7C,QAAQ,EAAK;QAChC4C,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACpI,SAAS,qCAAA8B,MAAA,CAAkCuG,IAAI,CAACZ,aAAa,CAAC,CAAC,CAAE,CAAC;QAC3FW,MAAI,CAAC9C,kBAAkB,CAAC5D,YAAY,EAAE8D,QAAQ,CAAC;MACjD,CAAC,EAAE8C,UAAU,CAAC;MAEdD,IAAI,CAACI,WAAW,CACd,IAAID,gBAAO,CAACE,mBAAmB,CAAC;QAC9BC,YAAY,EAAEP,MAAI,CAAC5F,MAAM,CAACoG,gBAAgB;QAC1CC,QAAQ,EAAET,MAAI,CAAC5F,MAAM,CAACsG;MACxB,CAAC,CACH,CAAC;MAED,IAAIV,MAAI,CAAC5F,MAAM,CAACuG,2BAA2B,IAAI,CAACX,MAAI,CAAC7H,gBAAgB,EAAE;QACrE8H,IAAI,CAACW,SAAS,CAACZ,MAAI,CAAC5F,MAAM,CAACuG,2BAA2B,CAAC;MACzD,CAAC,MAAM,IAAIX,MAAI,CAAC5F,MAAM,CAACyG,UAAU,EAAE;QACjCZ,IAAI,CAACW,SAAS,CAACZ,MAAI,CAAC5F,MAAM,CAACyG,UAAU,CAAC;MACxC;MAEAZ,IAAI,CAACrH,EAAE,CAAC,OAAO,EAAE,YAAM;QACrBoH,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACpI,SAAS,yBAAsB,CAAC;QACzD6G,MAAM,CAAC,IAAIC,KAAK,CAAC,4BAA4B,CAAC,CAAC;MACjD,CAAC,CAAC;MAEFuB,IAAI,CAACrH,EAAE,CAAC,UAAU,EAAE,UAACuH,GAAG,EAAK;QAC3B,IAAIA,GAAG,EAAE;UACP,IAAMW,MAAM,GAAGb,IAAI,CAACZ,aAAa,CAAC,CAAC;UACnC,IAAM0B,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAChB,IAAI,CAACiB,SAAS,CAACC,iBAAiB,EAAEnB,MAAI,CAAC5F,MAAM,CAACsG,cAAc,CAAC;UAEpFV,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CACXsG,MAAI,CAACpI,SAAS,4CAAA8B,MAAA,CAAyCoH,MAAM,GAAG,CAAC,UAAApH,MAAA,CAAOqH,KAAK,QAClF,CAAC;UACD;UACA,IAAIK,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;YAC1CtB,MAAI,CAACxG,MAAM,CAAC+H,KAAK,IAAA7H,MAAA,CAAIsG,MAAI,CAACpI,SAAS,SAAMuI,GAAG,EAAEA,GAAG,CAACqB,KAAK,CAAC;UAC1D;UAEA;QACF;QACAxB,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACpI,SAAS,gBAAa,CAAC;MAClD,CAAC,CAAC;MAEFqI,IAAI,CAACwB,KAAK,CAAC,CAAC;MAEZzB,MAAI,CAACrF,WAAW,GAAGsF,IAAI;IACzB,CAAC,CAAC;EACJ,CAAC;EAEDnC,KAAK,WAAAA,MAAA,EAAU;IAAA,SAAA4D,KAAA,GAAA5K,SAAA,CAAAC,MAAA,EAAN4G,IAAI,OAAAC,KAAA,CAAA8D,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJhE,IAAI,CAAAgE,KAAA,IAAA7K,SAAA,CAAA6K,KAAA;IAAA;IACX,IAAI;MACF,IAAI,CAACC,OAAO,CAAAhL,KAAA,CAAZ,IAAI,EAAY+G,IAAI,CAAC;IACvB,CAAC,CAAC,OAAOoC,KAAK,EAAE;MACd,IAAI,CAACvG,MAAM,CAACuG,KAAK,IAAArG,MAAA,CACZ,IAAI,CAAC9B,SAAS,yCACjBmI,KAAK,EACL,cAAc,EACdpC,IACF,CAAC;IACH;EACF,CAAC;EAEDkE,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;IAC3B,IAAAC,gBAAA,GAA0BD,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;MAAAC,iBAAA,OAAA3D,eAAA,CAAAnH,OAAA,EAAA4K,gBAAA;MAAvCnK,SAAS,GAAAqK,iBAAA;MAAEC,IAAI,GAAAD,iBAAA;IACtB,IAAME,QAAQ,GAAG,EAAE;IAEnB,IAAI,CAAC,IAAI,CAACpJ,KAAK,CAACnB,SAAS,CAAC,IAAI,CAAC,IAAI,CAACmB,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAE;MAC7D,OAAOuK,QAAQ;IACjB;IAEA,IAAMC,WAAW,GAAG,IAAAC,iBAAS,aAAA3I,MAAA,CAAYwI,IAAI,WAAQ,CAAC;IAEtD,IAAI,CAAC,IAAI,CAACnJ,KAAK,CAACnB,SAAS,CAAC,IAAI,IAAI,CAACmB,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAEwK,WAAW,CAAC,EAAE;MAC1ED,QAAQ,CAACxL,IAAI,CAAC;QACZuL,IAAI,EAAEE,WAAW;QACjBxK,SAAS,EAATA;MACF,CAAC,CAAC;IACJ;IAEA,OAAOuK,QAAQ;EACjB,CAAC;EAED3E,QAAQ,WAAAA,SAACnC,KAAK,EAAE;IACd;IACA;;IAEA,IAAI;MACF,IAAMb,MAAM,GAAGa,KAAK,CAACb,MAAM,IAAIa,KAAK,CAACb,MAAM,CAAC8H,WAAW,CAAC,CAAC;MACzD,IAAMnF,SAAS,GAAG,IAAI,CAAC/E,MAAM,CAAC+D,GAAG;MAEjC,IAAI,CAAC/D,MAAM,CAACyC,kBAAkB,CAAC,CAAC;MAChC,IAAI,CAAC0H,KAAK,CAAC,QAAQ,CAAC;MACpB,IAAI,CAACvK,SAAS,GAAG,KAAK;MACtB,IAAI,CAAC8F,KAAK,CAAC,SAAS,EAAEzC,KAAK,CAAC;MAE5B,QAAQA,KAAK,CAACd,IAAI;QAChB,KAAK,IAAI;UACP;UACA,IAAI,CAACf,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX,IAAI,CAAC9B,SAAS,mEAAA8B,MAAA,CAAgE2B,KAAK,CAACb,MAAM,CAC/F,CAAC;UACD,IAAI,CAACsD,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACtC;QACF,KAAK,IAAI;UACP;UACA,IAAI,CAAC7B,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAC9B,SAAS,0CAAuC,CAAC;UAC1E,IAAI,CAACkG,KAAK,CAAC,kBAAkB,EAAEzC,KAAK,CAAC;UACrC;QACF,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;UACP,IAAI,CAAC7B,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAC9B,SAAS,wCAAqC,CAAC;UACxE,IAAI,CAACkG,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACtC,IAAI,CAACmH,UAAU,CAACrF,SAAS,CAAC;UAC1B;UACA;UACA;QACF,KAAK,IAAI;QACT,KAAK,IAAI;UAAE;UACT,IAAI5F,sBAAsB,CAAC+C,QAAQ,CAACE,MAAM,CAAC,EAAE;YAC3C,IAAI,CAAChB,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAC9B,SAAS,wCAAqC,CAAC;YACxE,IAAI,CAACkG,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;YACtC,IAAI,CAACmH,UAAU,CAACrF,SAAS,CAAC;YAC1B;YACA;UACF,CAAC,MAAM;YACL,IAAI,CAAC3D,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX,IAAI,CAAC9B,SAAS,iDAAA8B,MAAA,CAA8C2B,KAAK,CAACb,MAAM,CAC7E,CAAC;YACD,IAAI,CAACsD,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACxC;UACA;QACF;UACE,IAAI,CAAC7B,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX,IAAI,CAAC9B,SAAS,2DACnB,CAAC;UACD;UACA,IAAI,CAACkG,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;MAC1C;IACF,CAAC,CAAC,OAAO0E,KAAK,EAAE;MACd,IAAI,CAACvG,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAI,IAAI,CAAC9B,SAAS,wCAAqCmI,KAAK,CAAC;IAChF;EACF,CAAC;EAEDtC,UAAU,WAAAA,WAACpC,KAAK,EAAE;IAAA,IAAAoH,MAAA;IAChB,IAAM5J,QAAQ,GAAGwC,KAAK,CAACvC,IAAI;IAE3B,IAAIsI,OAAO,CAACC,GAAG,CAACqB,sBAAsB,EAAE;MACtC,IAAI,CAAClJ,MAAM,CAAC+H,KAAK,IAAA7H,MAAA,CAAI,IAAI,CAAC9B,SAAS,2BAAwBiB,QAAQ,CAAC;IACtE;IAEA,IAAOC,IAAI,GAAID,QAAQ,CAAhBC,IAAI;IAEX,IAAI,CAACsC,eAAe,CAACtC,IAAI,CAAC;IAE1B,OAAO,IAAI,CAAC+I,iBAAiB,CAAC/I,IAAI,CAACgJ,SAAS,CAAC,CAC1Ca,MAAM,CACL,UAACC,OAAO,EAAEC,OAAO;MAAA,OACfD,OAAO,CAAC5I,IAAI,CAAC,YAAM;QACjB,IAAOpC,SAAS,GAAUiL,OAAO,CAA1BjL,SAAS;UAAEsK,IAAI,GAAIW,OAAO,CAAfX,IAAI;QAEtB,OAAO,IAAAvI,QAAA,CAAAxC,OAAA,CAAY,UAACyC,OAAO;UAAA,OACzBA,OAAO,CAAC,CAAC6I,MAAI,CAAC1J,KAAK,CAACnB,SAAS,CAAC,IAAI6K,MAAI,CAAC1J,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAEsK,IAAI,CAAC,CAACpJ,IAAI,CAAC,CAAC;QAAA,CAChF,CAAC,CAACsG,KAAK,CAAC,UAAC5E,MAAM;UAAA,OACbiI,MAAI,CAACjJ,MAAM,CAACuG,KAAK,IAAArG,MAAA,CACZ+I,MAAI,CAAC7K,SAAS,sDAAA8B,MAAA,CAAmDZ,IAAI,CAACgJ,SAAS,GAClFtH,MACF,CAAC;QAAA,CACH,CAAC;MACH,CAAC,CAAC;IAAA,GACJb,QAAA,CAAAxC,OAAA,CAAQyC,OAAO,CAAC,CAClB,CAAC,CACAI,IAAI,CAAC,YAAM;MACVyI,MAAI,CAAC3E,KAAK,CAAC,OAAO,EAAEzC,KAAK,CAACvC,IAAI,CAAC;MAC/B,IAAAgK,qBAAA,GAAoBhK,IAAI,CAACgJ,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;QAAAe,sBAAA,OAAAzE,eAAA,CAAAnH,OAAA,EAAA2L,qBAAA;QAAtClL,SAAS,GAAAmL,sBAAA;MAEhB,IAAInL,SAAS,KAAKkB,IAAI,CAACgJ,SAAS,EAAE;QAChCW,MAAI,CAAC3E,KAAK,UAAApE,MAAA,CAAU9B,SAAS,GAAIiB,QAAQ,CAAC;MAC5C,CAAC,MAAM;QACL4J,MAAI,CAAC3E,KAAK,UAAApE,MAAA,CAAU9B,SAAS,GAAIiB,QAAQ,CAAC;QAC1C4J,MAAI,CAAC3E,KAAK,UAAApE,MAAA,CAAUZ,IAAI,CAACgJ,SAAS,GAAIjJ,QAAQ,CAAC;MACjD;IACF,CAAC,CAAC,CACDuG,KAAK,CAAC,UAAC5E,MAAM,EAAK;MACjBiI,MAAI,CAACjJ,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAI+I,MAAI,CAAC7K,SAAS,iDAA8C4C,MAAM,CAAC;IAC1F,CAAC,CAAC;EACN,CAAC;EAEDgI,UAAU,WAAAA,WAAClJ,YAAY,EAAE;IACvB,IAAI,CAACE,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAC9B,SAAS,mBAAgB,CAAC;IAEnD,OAAO,IAAI,CAACyB,OAAO,CAACC,YAAY,CAAC;EACnC,CAAC;EAAA0J,OAAA;AACH,CAAC,OAAAC,0BAAA,CAAA9L,OAAA,EAAAnB,IAAA,cA5cEkN,iBAAS,OAAAC,yBAAA,CAAAhM,OAAA,EAAAnB,IAAA,cAAAA,IAAA,OAAAiN,0BAAA,CAAA9L,OAAA,EAAAnB,IAAA,iBA4BTkN,iBAAS,OAAAC,yBAAA,CAAAhM,OAAA,EAAAnB,IAAA,iBAAAA,IAAA,OAAAiN,0BAAA,CAAA9L,OAAA,EAAAnB,IAAA,aAAAF,IAAA,OAAAqN,yBAAA,CAAAhM,OAAA,EAAAnB,IAAA,aAAAA,IAAA,OAAAiN,0BAAA,CAAA9L,OAAA,EAAAnB,IAAA,oBAAAD,KAAA,OAAAoN,yBAAA,CAAAhM,OAAA,EAAAnB,IAAA,oBAAAA,IAAA,IAAAA,IAAA,EAgbX,CAAC;AAAC,IAAAoN,QAAA,GAAAC,OAAA,CAAAlM,OAAA,GAEYK,OAAO"}
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","_this5$config$authori","_this5$config$acknowl","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","authorizationRequired","acknowledgementRequired","defaultMercuryOptions","open","refresh","catch","_this5$backoffCall","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","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","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 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(\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 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 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 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 _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,12 +1,19 @@
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");
4
9
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
10
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
11
  _Object$defineProperty(exports, "__esModule", {
7
12
  value: true
8
13
  });
9
14
  exports.default = void 0;
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
16
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties"));
10
17
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
19
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
@@ -16,7 +23,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
16
23
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
17
24
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
18
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
19
- var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
26
+ var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
20
27
  var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
21
28
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
22
29
  var _events = require("events");
@@ -25,6 +32,9 @@ var _commonTimers = require("@webex/common-timers");
25
32
  var _lodash = require("lodash");
26
33
  var _uuid = _interopRequireDefault(require("uuid"));
27
34
  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; }
28
38
  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); }; }
29
39
  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; } } /*!
30
40
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
@@ -143,10 +153,12 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
143
153
  return;
144
154
  }
145
155
  options = options || {};
146
- if (options.code && options.code !== 1000 && options.code !== 1050 && (options.code < 3000 || options.code > 4999)) {
147
- reject(new Error('`options.code` must be 1000 or 1050 or between 3000 and 4999 (inclusive)'));
156
+ if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {
157
+ reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
148
158
  return;
149
159
  }
160
+ var originalCode = options.code;
161
+ var originalReason = options.reason;
150
162
  options = (0, _lodash.defaults)(options, {
151
163
  code: 1000,
152
164
  reason: 'Done'
@@ -154,9 +166,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
154
166
  var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
155
167
  try {
156
168
  _this2.logger.info("socket,".concat(_this2._domain, ": no close event received, forcing closure"));
157
- resolve(_this2.onclose(options.code === 1050 ? {
158
- code: 1050,
159
- reason: options.reason
169
+ resolve(_this2.onclose(originalCode ? {
170
+ code: originalCode,
171
+ reason: originalReason || 'Done (unknown)'
160
172
  } : {
161
173
  code: 1000,
162
174
  reason: 'Done (forced)'
@@ -185,6 +197,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
185
197
  * @param {string} options.token (required)
186
198
  * @param {string} options.trackingId (required)
187
199
  * @param {Logger} options.logger (required)
200
+ * @param {boolean} options.authorizationRequired
201
+ * @param {boolean} options.acknowledgementRequired
188
202
  * @param {string} options.logLevelToken
189
203
  * @returns {Promise}
190
204
  */
@@ -209,8 +223,20 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
209
223
  }
210
224
  options = options || {};
211
225
  (0, _common.checkRequired)(['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'], options);
212
- (0, _keys.default)(options).forEach(function (key) {
213
- (0, _defineProperty.default)(_this3, key, {
226
+
227
+ // Destructure and set default values for authorizationRequired and acknowledgementRequired
228
+ var _options = options,
229
+ _options$authorizatio = _options.authorizationRequired,
230
+ authorizationRequired = _options$authorizatio === void 0 ? true : _options$authorizatio,
231
+ _options$acknowledgem = _options.acknowledgementRequired,
232
+ acknowledgementRequired = _options$acknowledgem === void 0 ? true : _options$acknowledgem,
233
+ remainingOptions = (0, _objectWithoutProperties2.default)(_options, _excluded);
234
+ _this3.authorizationRequired = authorizationRequired;
235
+ _this3.acknowledgementRequired = acknowledgementRequired;
236
+
237
+ // Assign the remaining options to the instance
238
+ (0, _keys.default)(remainingOptions).forEach(function (key) {
239
+ (0, _defineProperty3.default)(_this3, key, {
214
240
  enumerable: false,
215
241
  value: options[key]
216
242
  });
@@ -244,11 +270,16 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
244
270
  };
245
271
  socket.onopen = function () {
246
272
  _this3.logger.info("socket,".concat(_this3._domain, ": connected"));
247
- _this3._authorize().then(function () {
248
- _this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
249
- socket.onclose = _this3.onclose;
250
- resolve();
251
- }).catch(reject);
273
+ // Added the "authorizationRequired" condition to bypass the "_authorize" in case of the contact center context, in which case it is configured as false.
274
+ if (_this3.authorizationRequired) {
275
+ _this3._authorize().then(function () {
276
+ _this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
277
+ socket.onclose = _this3.onclose;
278
+ resolve();
279
+ }).catch(reject);
280
+ } else {
281
+ _this3._ping();
282
+ }
252
283
  };
253
284
  socket.onerror = function (event) {
254
285
  _this3.logger.warn("socket,".concat(_this3._domain, ": error event fired"), event);
@@ -301,9 +332,16 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
301
332
  var processedEvent = {
302
333
  data: data
303
334
  };
304
- this._acknowledge(processedEvent);
305
- if (data.type === 'pong') {
306
- this.emit('pong', processedEvent);
335
+
336
+ // Added the "acknowledgementRequired" condition to bypass the "_acknowledge" in case of the contact center context, in which case it is configured as false.
337
+ if (this.acknowledgementRequired) {
338
+ this._acknowledge(processedEvent);
339
+ }
340
+ if (data.type === 'pong' || data.type === 'ping') {
341
+ // added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
342
+ this.emit('pong', _objectSpread(_objectSpread({}, processedEvent), {}, {
343
+ type: 'pong'
344
+ }));
307
345
  } else {
308
346
  this.emit('message', processedEvent);
309
347
  }