@webex/internal-plugin-mercury 3.10.0-next.1 → 3.10.0-next.11

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.
@@ -1 +1 @@
1
- {"version":3,"names":["_default","exports","default","mercury","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","beforeLogoutOptionsCloseReason","MERCURY_LOGOUT_REASON"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n mercury: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n /**\n * When logging out, use default reason which can trigger a reconnect,\n * or set to something else, like `done (permanent)` to prevent reconnect\n * @type {String}\n */\n beforeLogoutOptionsCloseReason: process.env.MERCURY_LOGOUT_REASON || 'done (forced)',\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAG,CAACC,qBAAqB,IAAI,KAAK;IACxD;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAG,CAACG,oBAAoB,IAAI,KAAK;IACtD;AACJ;AACA;AACA;IACIC,cAAc,EAAEL,OAAO,CAACC,GAAG,CAACK,wBAAwB,IAAI,KAAK;IAC7D;AACJ;AACA;AACA;IACIC,gBAAgB,EAAEP,OAAO,CAACC,GAAG,CAACO,0BAA0B,IAAI,IAAI;IAChE;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAET,OAAO,CAACC,GAAG,CAACS,yBAAyB,IAAI,IAAI;IAC9D;AACJ;AACA;AACA;AACA;IACIC,8BAA8B,EAAEX,OAAO,CAACC,GAAG,CAACW,qBAAqB,IAAI;EACvE;AACF,CAAC"}
1
+ {"version":3,"names":["_default","exports","default","mercury","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY","beforeLogoutOptionsCloseReason","MERCURY_LOGOUT_REASON"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n mercury: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n /**\n * When logging out, use default reason which can trigger a reconnect,\n * or set to something else, like `done (permanent)` to prevent reconnect\n * @type {String}\n */\n beforeLogoutOptionsCloseReason: process.env.MERCURY_LOGOUT_REASON || 'done (forced)',\n },\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AAFA,IAAAA,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAIe;EACbC,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAG,CAACC,qBAAqB,IAAI,KAAK;IACxD;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAG,CAACG,oBAAoB,IAAI,KAAK;IACtD;AACJ;AACA;AACA;IACIC,cAAc,EAAEL,OAAO,CAACC,GAAG,CAACK,wBAAwB,IAAI,KAAK;IAC7D;AACJ;AACA;AACA;IACIC,gBAAgB,EAAEP,OAAO,CAACC,GAAG,CAACO,0BAA0B,IAAI,IAAI;IAChE;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAET,OAAO,CAACC,GAAG,CAACS,yBAAyB,IAAI,IAAI;IAC9D;AACJ;AACA;AACA;AACA;IACIC,8BAA8B,EAAEX,OAAO,CAACC,GAAG,CAACW,qBAAqB,IAAI;EACvE;AACF,CAAC","ignoreList":[]}
package/dist/errors.js CHANGED
@@ -10,26 +10,25 @@ exports.UnknownResponse = exports.NotAuthorized = exports.Forbidden = exports.Co
10
10
  var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-properties"));
11
11
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
- var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
14
13
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
15
14
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
15
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
16
16
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
17
17
  var _common = require("@webex/common");
18
- 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); }; }
19
- 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; } } /*!
18
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
19
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
20
20
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
21
21
  */
22
22
  /**
23
23
  * Exception thrown when a websocket gets closed
24
24
  */
25
25
  var ConnectionError = exports.ConnectionError = /*#__PURE__*/function (_Exception) {
26
- (0, _inherits2.default)(ConnectionError, _Exception);
27
- var _super = _createSuper(ConnectionError);
28
26
  function ConnectionError() {
29
27
  (0, _classCallCheck2.default)(this, ConnectionError);
30
- return _super.apply(this, arguments);
28
+ return _callSuper(this, ConnectionError, arguments);
31
29
  }
32
- (0, _createClass2.default)(ConnectionError, [{
30
+ (0, _inherits2.default)(ConnectionError, _Exception);
31
+ return (0, _createClass2.default)(ConnectionError, [{
33
32
  key: "parse",
34
33
  value:
35
34
  /**
@@ -49,58 +48,53 @@ var ConnectionError = exports.ConnectionError = /*#__PURE__*/function (_Exceptio
49
48
  return event.reason;
50
49
  }
51
50
  }]);
52
- return ConnectionError;
53
51
  }(_common.Exception);
54
52
  /**
55
53
  * thrown for CloseCode 4400
56
54
  */
57
55
  (0, _defineProperty2.default)(ConnectionError, "defaultMessage", 'Failed to connect to socket');
58
- var UnknownResponse = exports.UnknownResponse = /*#__PURE__*/function (_ConnectionError) {
59
- (0, _inherits2.default)(UnknownResponse, _ConnectionError);
60
- var _super2 = _createSuper(UnknownResponse);
56
+ var UnknownResponse = exports.UnknownResponse = /*#__PURE__*/function (_ConnectionError2) {
61
57
  function UnknownResponse() {
62
58
  (0, _classCallCheck2.default)(this, UnknownResponse);
63
- return _super2.apply(this, arguments);
59
+ return _callSuper(this, UnknownResponse, arguments);
64
60
  }
61
+ (0, _inherits2.default)(UnknownResponse, _ConnectionError2);
65
62
  return (0, _createClass2.default)(UnknownResponse);
66
63
  }(ConnectionError);
67
64
  /**
68
65
  * thrown for CloseCode 4400
69
66
  */
70
67
  (0, _defineProperty2.default)(UnknownResponse, "defaultMessage", 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound');
71
- var BadRequest = exports.BadRequest = /*#__PURE__*/function (_ConnectionError2) {
72
- (0, _inherits2.default)(BadRequest, _ConnectionError2);
73
- var _super3 = _createSuper(BadRequest);
68
+ var BadRequest = exports.BadRequest = /*#__PURE__*/function (_ConnectionError3) {
74
69
  function BadRequest() {
75
70
  (0, _classCallCheck2.default)(this, BadRequest);
76
- return _super3.apply(this, arguments);
71
+ return _callSuper(this, BadRequest, arguments);
77
72
  }
73
+ (0, _inherits2.default)(BadRequest, _ConnectionError3);
78
74
  return (0, _createClass2.default)(BadRequest);
79
75
  }(ConnectionError);
80
76
  /**
81
77
  * thrown for CloseCode 4401
82
78
  */
83
79
  (0, _defineProperty2.default)(BadRequest, "defaultMessage", 'BadRequest usually implies an attempt to use service account credentials');
84
- var NotAuthorized = exports.NotAuthorized = /*#__PURE__*/function (_ConnectionError3) {
85
- (0, _inherits2.default)(NotAuthorized, _ConnectionError3);
86
- var _super4 = _createSuper(NotAuthorized);
80
+ var NotAuthorized = exports.NotAuthorized = /*#__PURE__*/function (_ConnectionError4) {
87
81
  function NotAuthorized() {
88
82
  (0, _classCallCheck2.default)(this, NotAuthorized);
89
- return _super4.apply(this, arguments);
83
+ return _callSuper(this, NotAuthorized, arguments);
90
84
  }
85
+ (0, _inherits2.default)(NotAuthorized, _ConnectionError4);
91
86
  return (0, _createClass2.default)(NotAuthorized);
92
87
  }(ConnectionError);
93
88
  /**
94
89
  * thrown for CloseCode 4403
95
90
  */
96
91
  (0, _defineProperty2.default)(NotAuthorized, "defaultMessage", 'Please refresh your access token');
97
- var Forbidden = exports.Forbidden = /*#__PURE__*/function (_ConnectionError4) {
98
- (0, _inherits2.default)(Forbidden, _ConnectionError4);
99
- var _super5 = _createSuper(Forbidden);
92
+ var Forbidden = exports.Forbidden = /*#__PURE__*/function (_ConnectionError5) {
100
93
  function Forbidden() {
101
94
  (0, _classCallCheck2.default)(this, Forbidden);
102
- return _super5.apply(this, arguments);
95
+ return _callSuper(this, Forbidden, arguments);
103
96
  }
97
+ (0, _inherits2.default)(Forbidden, _ConnectionError5);
104
98
  return (0, _createClass2.default)(Forbidden);
105
99
  }(ConnectionError); // /**
106
100
  // * thrown for CloseCode 4404
@@ -1 +1 @@
1
- {"version":3,"names":["_common","require","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","ConnectionError","exports","_Exception","_inherits2","_super","_classCallCheck2","_createClass2","key","value","parse","event","length","undefined","_defineProperties","code","reason","Exception","_defineProperty2","UnknownResponse","_ConnectionError","_super2","BadRequest","_ConnectionError2","_super3","NotAuthorized","_ConnectionError3","_super4","Forbidden","_ConnectionError4","_super5"],"sources":["errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n /**\n * @param {CloseEvent} event\n * @returns {string}\n */\n parse(event = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code,\n },\n reason: {\n value: event.reason,\n },\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage =\n 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage =\n 'BadRequest usually implies an attempt to use service account credentials';\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n}\n\n// /**\n// * thrown for CloseCode 4404\n// */\n// export class NotFound extends ConnectionError {\n// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;\n// }\n"],"mappings":"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"}
1
+ {"version":3,"names":["_common","require","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","ConnectionError","exports","_Exception","_classCallCheck2","arguments","_inherits2","_createClass2","key","value","parse","event","length","undefined","_defineProperties","code","reason","Exception","_defineProperty2","UnknownResponse","_ConnectionError2","BadRequest","_ConnectionError3","NotAuthorized","_ConnectionError4","Forbidden","_ConnectionError5"],"sources":["errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n /**\n * @param {CloseEvent} event\n * @returns {string}\n */\n parse(event = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code,\n },\n reason: {\n value: event.reason,\n },\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage =\n 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage =\n 'BadRequest usually implies an attempt to use service account credentials';\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n}\n\n// /**\n// * thrown for CloseCode 4404\n// */\n// export class NotFound extends ConnectionError {\n// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;\n// }\n"],"mappings":"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","ignoreList":[]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["require","_webexCore","_mercury","_interopRequireDefault","_config","_socket","_errors","registerInternalPlugin","Mercury","config","onBeforeLogout","logout"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Mercury from './mercury';\nimport config from './config';\n\nregisterInternalPlugin('mercury', Mercury, {\n config,\n onBeforeLogout() {\n return this.logout();\n },\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {default as Socket} from './socket';\nexport {default as config} from './config';\nexport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAWA,IAAAK,OAAA,GAAAF,sBAAA,CAAAH,OAAA;AAEA,IAAAM,OAAA,GAAAN,OAAA;AAxBA;AACA;AACA;;AAWA,IAAAO,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA,eAAM;EACNC,cAAc,WAAAA,eAAA,EAAG;IACf,OAAO,IAAI,CAACC,MAAM,CAAC,CAAC;EACtB;AACF,CAAC,CAAC"}
1
+ {"version":3,"names":["require","_webexCore","_mercury","_interopRequireDefault","_config","_socket","_errors","registerInternalPlugin","Mercury","config","onBeforeLogout","logout"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Mercury from './mercury';\nimport config from './config';\n\nregisterInternalPlugin('mercury', Mercury, {\n config,\n onBeforeLogout() {\n return this.logout();\n },\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {default as Socket} from './socket';\nexport {default as config} from './config';\nexport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIAA,OAAA;AACAA,OAAA;AACAA,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AAWA,IAAAK,OAAA,GAAAF,sBAAA,CAAAH,OAAA;AAEA,IAAAM,OAAA,GAAAN,OAAA;AAxBA;AACA;AACA;;AAWA,IAAAO,iCAAsB,EAAC,SAAS,EAAEC,gBAAO,EAAE;EACzCC,MAAM,EAANA,eAAM;EACNC,cAAc,WAAdA,cAAcA,CAAA,EAAG;IACf,OAAO,IAAI,CAACC,MAAM,CAAC,CAAC;EACtB;AACF,CAAC,CAAC","ignoreList":[]}
package/dist/mercury.js CHANGED
@@ -35,7 +35,7 @@ var _dec, _dec2, _obj;
35
35
  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$getOwnPropertyDescriptor2(e, r).enumerable; })), t.push.apply(t, o); } return t; }
36
36
  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$getOwnPropertyDescriptor2(t, r)); }); } return e; }
37
37
  var normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];
38
- var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mercury#listen(): Use Mercury#connect() instead'), _dec2 = (0, _common.deprecated)('Mercury#stopListening(): Use Mercury#disconnect() instead'), (_obj = {
38
+ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mercury#listen(): Use Mercury#connect() instead'), _dec2 = (0, _common.deprecated)('Mercury#stopListening(): Use Mercury#disconnect() instead'), _obj = {
39
39
  namespace: 'Mercury',
40
40
  lastError: undefined,
41
41
  session: {
@@ -258,7 +258,22 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
258
258
  }
259
259
  return this.webex.internal.feature.getFeature('developer', 'web-high-availability').then(function (haMessagingEnabled) {
260
260
  if (haMessagingEnabled) {
261
- return _this6.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
261
+ var highPrioritySocketUrl;
262
+ try {
263
+ highPrioritySocketUrl = _this6.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
264
+ } catch (e) {
265
+ _this6.logger.warn("".concat(_this6.namespace, ": error converting to high priority url"), e);
266
+ }
267
+ if (!highPrioritySocketUrl) {
268
+ var _url$parse;
269
+ var hostFromUrl = (_url$parse = _url.default.parse(webSocketUrl, true)) === null || _url$parse === void 0 ? void 0 : _url$parse.host;
270
+ var isValidHost = _this6.webex.internal.services.isValidHost(hostFromUrl);
271
+ if (!isValidHost) {
272
+ _this6.logger.error("".concat(_this6.namespace, ": host ").concat(hostFromUrl, " is not a valid host from host catalog"));
273
+ return '';
274
+ }
275
+ }
276
+ return highPrioritySocketUrl || webSocketUrl;
262
277
  }
263
278
  return webSocketUrl;
264
279
  }).then(function (wsUrl) {
@@ -266,6 +281,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
266
281
  }).then(function () {
267
282
  return _this6.webex.internal.feature.getFeature('developer', 'web-shared-mercury');
268
283
  }).then(function (webSharedMercury) {
284
+ if (!webSocketUrl) {
285
+ return '';
286
+ }
269
287
  webSocketUrl = _url.default.parse(webSocketUrl, true);
270
288
  (0, _assign.default)(webSocketUrl.query, {
271
289
  outboundWireFormat: 'text',
@@ -644,7 +662,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
644
662
  }
645
663
  },
646
664
  _onmessage: function _onmessage(event) {
647
- var _this10 = this;
665
+ var _this0 = this;
648
666
  this._setTimeOffset(event);
649
667
  var envelope = event.data;
650
668
  if (process.env.ENABLE_MERCURY_LOGGING) {
@@ -665,24 +683,24 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
665
683
  var namespace = handler.namespace,
666
684
  name = handler.name;
667
685
  return new _promise.default(function (resolve) {
668
- return resolve((_this10.webex[namespace] || _this10.webex.internal[namespace])[name](data));
686
+ return resolve((_this0.webex[namespace] || _this0.webex.internal[namespace])[name](data));
669
687
  }).catch(function (reason) {
670
- return _this10.logger.error("".concat(_this10.namespace, ": error occurred in autowired event handler for ").concat(data.eventType), reason);
688
+ return _this0.logger.error("".concat(_this0.namespace, ": error occurred in autowired event handler for ").concat(data.eventType), reason);
671
689
  });
672
690
  });
673
691
  }, _promise.default.resolve()).then(function () {
674
- _this10._emit('event', event.data);
692
+ _this0._emit('event', event.data);
675
693
  var _data$eventType$split = data.eventType.split('.'),
676
694
  _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
677
695
  namespace = _data$eventType$split2[0];
678
696
  if (namespace === data.eventType) {
679
- _this10._emit("event:".concat(namespace), envelope);
697
+ _this0._emit("event:".concat(namespace), envelope);
680
698
  } else {
681
- _this10._emit("event:".concat(namespace), envelope);
682
- _this10._emit("event:".concat(data.eventType), envelope);
699
+ _this0._emit("event:".concat(namespace), envelope);
700
+ _this0._emit("event:".concat(data.eventType), envelope);
683
701
  }
684
702
  }).catch(function (reason) {
685
- _this10.logger.error("".concat(_this10.namespace, ": error occurred processing socket message"), reason);
703
+ _this0.logger.error("".concat(_this0.namespace, ": error occurred processing socket message"), reason);
686
704
  });
687
705
  },
688
706
  _setTimeOffset: function _setTimeOffset(event) {
@@ -695,7 +713,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
695
713
  this.logger.info("".concat(this.namespace, ": reconnecting"));
696
714
  return this.connect(webSocketUrl);
697
715
  },
698
- version: "3.10.0-next.1"
699
- }, ((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)));
716
+ version: "3.10.0-next.11"
717
+ }, (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));
700
718
  var _default = exports.default = Mercury;
701
719
  //# sourceMappingURL=mercury.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","_this$webex$internal$","services","switchActiveClusterIds","_envelope$data","activeClusters","_this$webex$internal$2","invalidateCache","_envelope$data2","timestamp","_attachSocketEventListeners","_this2","event","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","concat","_len2","_key2","_handleImminentShutdown","_this3","_shutdownSwitchoverInProgress","logger","info","_shutdownSwitchoverId","_now","_connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","oldSocket","url","then","catch","err","reason","error","getLastError","connect","_this4","_promise","resolve","Error","stack","device","registered","register","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","options","_this5","backoffCall","abort","_shutdownSwitchoverBackoffCall","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this6","getFeature","haMessagingEnabled","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","format","_attemptConnection","socketUrl","callback","_this7","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","msg","reject","_prepareAndOpenSocket","refresh","_this7$backoffCall","_this7$backoffCall3","getNumRetries","_this7$backoffCall2","retries","UnknownResponse","NotAuthorized","credentials","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","_this8","logPrefix","all","getUserToken","_ref","_ref2","_slicedToArray2","token","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","customOptionsMsg","open","_this9","context","_context$isShutdownSw","_context$attemptOptio","call","onComplete","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","attemptNum","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","sourceSocket","isActiveSocket","toLowerCase","unset","_reconnect","_this10","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n /*\n * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations\n * */\n this.on('event:ActiveClusterStatusEvent', (envelope) => {\n if (\n typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);\n }\n });\n /*\n * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications\n * */\n this.on('event:u2c.cache-invalidation', (envelope) => {\n if (\n typeof this.webex.internal.services?.invalidateCache === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.invalidateCache(envelope.data?.timestamp);\n }\n });\n },\n\n /**\n * Attach event listeners to a socket.\n * @param {Socket} socket - The socket to attach listeners to\n * @returns {void}\n */\n _attachSocketEventListeners(socket) {\n socket.on('close', (event) => this._onclose(event, socket));\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\n /**\n * Handle imminent shutdown by establishing a new connection while keeping\n * the current one alive (make-before-break).\n * Idempotent: will no-op if already in progress.\n * @returns {void}\n */\n _handleImminentShutdown() {\n try {\n if (this._shutdownSwitchoverInProgress) {\n this.logger.info(`${this.namespace}: [shutdown] switchover already in progress`);\n\n return;\n }\n this._shutdownSwitchoverInProgress = true;\n this._shutdownSwitchoverId = `${Date.now()}`;\n this.logger.info(\n `${this.namespace}: [shutdown] switchover start, id=${this._shutdownSwitchoverId}`\n );\n\n this._connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, webSocketUrl) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover connected, url: ${webSocketUrl}`\n );\n\n const oldSocket = this.socket;\n // Atomically switch active socket reference\n this.socket = newSocket;\n this.connected = true; // remain connected throughout\n\n this._emit('event:mercury_shutdown_switchover_complete', {url: webSocketUrl});\n\n if (oldSocket) {\n this.logger.info(\n `${this.namespace}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(`${this.namespace}: [shutdown] switchover completed successfully`);\n })\n .catch((err) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover exhausted retries; will fall back to normal reconnection`,\n err\n );\n this._emit('event:mercury_shutdown_switchover_failed', {reason: err});\n // Old socket will eventually close with 4001, triggering normal reconnection\n });\n } catch (e) {\n this.logger.error(`${this.namespace}: [shutdown] error during switchover`, e);\n this._shutdownSwitchoverInProgress = false;\n this._emit('event:mercury_shutdown_switchover_failed', {reason: e});\n }\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @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._shutdownSwitchoverBackoffCall) {\n this.logger.info(`${this.namespace}: aborting shutdown switchover`);\n this._shutdownSwitchoverBackoffCall.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, options = {}) {\n const {isShutdownSwitchover = false, onSuccess = null} = options;\n\n const socket = new Socket();\n let newWSUrl;\n\n this._attachSocketEventListeners(socket);\n\n // Check appropriate backoff call based on connection type\n if (isShutdownSwitchover && !this._shutdownSwitchoverBackoffCall) {\n const msg = `${this.namespace}: prevent socket open when switchover backoff call no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n if (!isShutdownSwitchover && !this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n // For shutdown switchover, don't set socket yet (make-before-break)\n // For normal connection, set socket before opening to allow disconnect() to close it\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n return this._prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover)\n .then((webSocketUrl) => {\n newWSUrl = webSocketUrl;\n this.logger.info(\n `${this.namespace}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mercury, success, action: connected, url: ${newWSUrl}`\n );\n\n // Custom success handler for shutdown switchover\n if (onSuccess) {\n onSuccess(socket, webSocketUrl);\n callback();\n\n return Promise.resolve();\n }\n\n // Default behavior for normal connection\n callback();\n\n return 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 // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(`${this.namespace}: [shutdown] switchover attempt failed`, reason);\n\n return callback(reason);\n }\n\n // Normal connection error handling (existing complex logic)\n this.lastError = reason; // remember the last error\n\n // 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: ${newWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(newWSUrl);\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 _prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover = false) {\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n return Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(\n ([webSocketUrl, token]) => {\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n 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 (this.webex.config.defaultMercuryOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${this.namespace}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n this.logger.info(`${this.namespace}: ${logPrefix} url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options).then(() => webSocketUrl);\n }\n );\n },\n\n _connectWithBackoff(webSocketUrl, context = {}) {\n const {isShutdownSwitchover = false, attemptOptions = {}} = context;\n\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 // Clear state flags based on connection type\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverInProgress = false;\n this._shutdownSwitchoverBackoffCall = undefined;\n } else {\n this.connecting = false;\n this.backoffCall = undefined;\n }\n\n if (err) {\n const msg = isShutdownSwitchover\n ? `[shutdown] switchover failed after ${call.getNumRetries()} retries`\n : `failed to connect after ${call.getNumRetries()} retries`;\n\n this.logger.info(\n `${this.namespace}: ${msg}; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n\n // Default success handling for normal connections\n if (!isShutdownSwitchover) {\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n }\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n const attemptNum = call.getNumRetries();\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(`${this.namespace}: executing ${logPrefix} attempt ${attemptNum}`);\n this._attemptConnection(webSocketUrl, callback, attemptOptions);\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 (\n this.config.initialConnectionMaxRetries &&\n !this.hasEverConnected &&\n !isShutdownSwitchover\n ) {\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 const msg = isShutdownSwitchover ? 'Shutdown Switchover' : 'Connection';\n\n this.logger.info(`${this.namespace}: ${msg} aborted`);\n reject(new Error(`Mercury ${msg} 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 const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${this.namespace}: ${logPrefix} failed to connect; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n // Store backoff call reference BEFORE starting (so it's available in _attemptConnection)\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCall = call;\n } else {\n this.backoffCall = call;\n }\n\n call.start();\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, sourceSocket) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const isActiveSocket = sourceSocket === this.socket;\n const reason = event.reason && event.reason.toLowerCase();\n\n let socketUrl;\n if (isActiveSocket && this.socket) {\n // Active socket closed - get URL from current socket reference\n socketUrl = this.socket.url;\n } else if (sourceSocket) {\n // Old socket closed - get URL from the closed socket\n socketUrl = sourceSocket.url;\n }\n\n if (isActiveSocket) {\n // Only tear down state if the currently active socket closed\n if (this.socket) {\n this.socket.removeAllListeners();\n }\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${this.namespace}: [shutdown] non-active socket closed, code=${event.code}`\n );\n // Clean up listeners from old socket now that it's closed\n if (sourceSocket) {\n sourceSocket.removeAllListeners();\n }\n }\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) 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 if (isActiveSocket) this._emit('offline.replaced', event);\n // If not active, nothing to do\n break;\n case 4001:\n // replaced during shutdown\n if (isActiveSocket) {\n // Server closed active socket with 4001, meaning it expected this connection\n // to be replaced, but the switchover in _handleImminentShutdown failed.\n // This is a permanent failure - do not reconnect.\n this.logger.warn(\n `${this.namespace}: active socket closed with 4001; shutdown switchover failed`\n );\n this._emit('offline.permanent', event);\n } else {\n // Expected: old socket closed after successful switchover\n this.logger.info(\n `${this.namespace}: old socket closed with 4001 (replaced during shutdown); no reconnect needed`\n );\n this._emit('offline.replaced', event);\n }\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit('offline.transient', event);\n this.logger.info(`${this.namespace}: [shutdown] reconnecting active socket to recover`);\n this._reconnect(socketUrl);\n }\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit('offline.transient', event);\n this.logger.info(`${this.namespace}: [shutdown] reconnecting due to normal close`);\n this._reconnect(socketUrl);\n }\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 if (isActiveSocket) 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 if (isActiveSocket) 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 // Handle shutdown message shape: { type: 'shutdown' }\n if (envelope && envelope.type === 'shutdown') {\n this.logger.info(`${this.namespace}: [shutdown] imminent shutdown message received`);\n this._emit('event:mercury_shutdown_imminent', envelope);\n\n this._handleImminentShutdown();\n\n return Promise.resolve();\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
1
+ {"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","mercuryTimeOffset","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","_this$webex$internal$","services","switchActiveClusterIds","_envelope$data","activeClusters","_this$webex$internal$2","invalidateCache","_envelope$data2","timestamp","_attachSocketEventListeners","_this2","event","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","concat","_len2","_key2","_handleImminentShutdown","_this3","_shutdownSwitchoverInProgress","logger","info","_shutdownSwitchoverId","_now","_connectWithBackoff","isShutdownSwitchover","attemptOptions","onSuccess","newSocket","webSocketUrl","oldSocket","url","then","catch","err","reason","error","getLastError","connect","_this4","_promise","resolve","Error","stack","device","registered","register","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","options","_this5","backoffCall","abort","_shutdownSwitchoverBackoffCall","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this6","getFeature","haMessagingEnabled","highPrioritySocketUrl","convertUrlToPriorityHostUrl","warn","_url$parse","hostFromUrl","parse","host","isValidHost","wsUrl","webSharedMercury","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","format","_attemptConnection","socketUrl","callback","_this7","_options$isShutdownSw","_options$onSuccess","Socket","newWSUrl","msg","reject","_prepareAndOpenSocket","refresh","_this7$backoffCall","_this7$backoffCall3","getNumRetries","_this7$backoffCall2","retries","UnknownResponse","NotAuthorized","credentials","force","BadRequest","Forbidden","ConnectionError","markFailedUrl","_this8","logPrefix","all","getUserToken","_ref","_ref2","_slicedToArray2","token","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","customOptionsMsg","open","_this9","context","_context$isShutdownSw","_context$attemptOptio","call","onComplete","newMetrics","callDiagnosticMetrics","setMercuryConnectedStatus","backoff","attemptNum","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","sourceSocket","isActiveSocket","toLowerCase","unset","_reconnect","_this0","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n /*\n * When Cluster Migrations, notify clients using ActiveClusterStatusEvent via mercury\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-002.html#wip-notifying-clients-of-cluster-migrations\n * */\n this.on('event:ActiveClusterStatusEvent', (envelope) => {\n if (\n typeof this.webex.internal.services?.switchActiveClusterIds === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.switchActiveClusterIds(envelope.data?.activeClusters);\n }\n });\n /*\n * Using cache-invalidation via mercury to instead the method of polling via the new /timestamp endpoint from u2c\n * https://wwwin-github.cisco.com/pages/Webex/crr-docs/techdocs/rr-005.html#websocket-notifications\n * */\n this.on('event:u2c.cache-invalidation', (envelope) => {\n if (\n typeof this.webex.internal.services?.invalidateCache === 'function' &&\n envelope &&\n envelope.data\n ) {\n this.webex.internal.services.invalidateCache(envelope.data?.timestamp);\n }\n });\n },\n\n /**\n * Attach event listeners to a socket.\n * @param {Socket} socket - The socket to attach listeners to\n * @returns {void}\n */\n _attachSocketEventListeners(socket) {\n socket.on('close', (event) => this._onclose(event, socket));\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\n /**\n * Handle imminent shutdown by establishing a new connection while keeping\n * the current one alive (make-before-break).\n * Idempotent: will no-op if already in progress.\n * @returns {void}\n */\n _handleImminentShutdown() {\n try {\n if (this._shutdownSwitchoverInProgress) {\n this.logger.info(`${this.namespace}: [shutdown] switchover already in progress`);\n\n return;\n }\n this._shutdownSwitchoverInProgress = true;\n this._shutdownSwitchoverId = `${Date.now()}`;\n this.logger.info(\n `${this.namespace}: [shutdown] switchover start, id=${this._shutdownSwitchoverId}`\n );\n\n this._connectWithBackoff(undefined, {\n isShutdownSwitchover: true,\n attemptOptions: {\n isShutdownSwitchover: true,\n onSuccess: (newSocket, webSocketUrl) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover connected, url: ${webSocketUrl}`\n );\n\n const oldSocket = this.socket;\n // Atomically switch active socket reference\n this.socket = newSocket;\n this.connected = true; // remain connected throughout\n\n this._emit('event:mercury_shutdown_switchover_complete', {url: webSocketUrl});\n\n if (oldSocket) {\n this.logger.info(\n `${this.namespace}: [shutdown] old socket retained; server will close with 4001`\n );\n }\n },\n },\n })\n .then(() => {\n this.logger.info(`${this.namespace}: [shutdown] switchover completed successfully`);\n })\n .catch((err) => {\n this.logger.info(\n `${this.namespace}: [shutdown] switchover exhausted retries; will fall back to normal reconnection`,\n err\n );\n this._emit('event:mercury_shutdown_switchover_failed', {reason: err});\n // Old socket will eventually close with 4001, triggering normal reconnection\n });\n } catch (e) {\n this.logger.error(`${this.namespace}: [shutdown] error during switchover`, e);\n this._shutdownSwitchoverInProgress = false;\n this._emit('event:mercury_shutdown_switchover_failed', {reason: e});\n }\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @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._shutdownSwitchoverBackoffCall) {\n this.logger.info(`${this.namespace}: aborting shutdown switchover`);\n this._shutdownSwitchoverBackoffCall.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 let highPrioritySocketUrl;\n try {\n highPrioritySocketUrl =\n this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n } catch (e) {\n this.logger.warn(`${this.namespace}: error converting to high priority url`, e);\n }\n if (!highPrioritySocketUrl) {\n const hostFromUrl = url.parse(webSocketUrl, true)?.host;\n const isValidHost = this.webex.internal.services.isValidHost(hostFromUrl);\n if (!isValidHost) {\n this.logger.error(\n `${this.namespace}: host ${hostFromUrl} is not a valid host from host catalog`\n );\n\n return '';\n }\n }\n\n return highPrioritySocketUrl || 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 if (!webSocketUrl) {\n return '';\n }\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, options = {}) {\n const {isShutdownSwitchover = false, onSuccess = null} = options;\n\n const socket = new Socket();\n let newWSUrl;\n\n this._attachSocketEventListeners(socket);\n\n // Check appropriate backoff call based on connection type\n if (isShutdownSwitchover && !this._shutdownSwitchoverBackoffCall) {\n const msg = `${this.namespace}: prevent socket open when switchover backoff call no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n if (!isShutdownSwitchover && !this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n const err = new Error(msg);\n\n this.logger.info(msg);\n\n // Call the callback with the error before rejecting\n callback(err);\n\n return Promise.reject(err);\n }\n\n // For shutdown switchover, don't set socket yet (make-before-break)\n // For normal connection, set socket before opening to allow disconnect() to close it\n if (!isShutdownSwitchover) {\n this.socket = socket;\n }\n\n return this._prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover)\n .then((webSocketUrl) => {\n newWSUrl = webSocketUrl;\n this.logger.info(\n `${this.namespace}: ${\n isShutdownSwitchover ? '[shutdown] switchover' : ''\n } connected to mercury, success, action: connected, url: ${newWSUrl}`\n );\n\n // Custom success handler for shutdown switchover\n if (onSuccess) {\n onSuccess(socket, webSocketUrl);\n callback();\n\n return Promise.resolve();\n }\n\n // Default behavior for normal connection\n callback();\n\n return 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 // For shutdown, simpler error handling - just callback for retry\n if (isShutdownSwitchover) {\n this.logger.info(`${this.namespace}: [shutdown] switchover attempt failed`, reason);\n\n return callback(reason);\n }\n\n // Normal connection error handling (existing complex logic)\n this.lastError = reason; // remember the last error\n\n // 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: ${newWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(newWSUrl);\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 _prepareAndOpenSocket(socket, socketUrl, isShutdownSwitchover = false) {\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n return Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(\n ([webSocketUrl, token]) => {\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n 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 (this.webex.config.defaultMercuryOptions) {\n const customOptionsMsg = isShutdownSwitchover\n ? 'setting custom options for switchover'\n : 'setting custom options';\n\n this.logger.info(`${this.namespace}: ${customOptionsMsg}`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n this.logger.info(`${this.namespace}: ${logPrefix} url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options).then(() => webSocketUrl);\n }\n );\n },\n\n _connectWithBackoff(webSocketUrl, context = {}) {\n const {isShutdownSwitchover = false, attemptOptions = {}} = context;\n\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 // Clear state flags based on connection type\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverInProgress = false;\n this._shutdownSwitchoverBackoffCall = undefined;\n } else {\n this.connecting = false;\n this.backoffCall = undefined;\n }\n\n if (err) {\n const msg = isShutdownSwitchover\n ? `[shutdown] switchover failed after ${call.getNumRetries()} retries`\n : `failed to connect after ${call.getNumRetries()} retries`;\n\n this.logger.info(\n `${this.namespace}: ${msg}; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n\n // Default success handling for normal connections\n if (!isShutdownSwitchover) {\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(true);\n }\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n const attemptNum = call.getNumRetries();\n const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : 'connection';\n\n this.logger.info(`${this.namespace}: executing ${logPrefix} attempt ${attemptNum}`);\n this._attemptConnection(webSocketUrl, callback, attemptOptions);\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 (\n this.config.initialConnectionMaxRetries &&\n !this.hasEverConnected &&\n !isShutdownSwitchover\n ) {\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 const msg = isShutdownSwitchover ? 'Shutdown Switchover' : 'Connection';\n\n this.logger.info(`${this.namespace}: ${msg} aborted`);\n reject(new Error(`Mercury ${msg} 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 const logPrefix = isShutdownSwitchover ? '[shutdown] switchover' : '';\n\n this.logger.info(\n `${this.namespace}: ${logPrefix} failed to connect; attempting retry ${\n number + 1\n } in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n // Store backoff call reference BEFORE starting (so it's available in _attemptConnection)\n if (isShutdownSwitchover) {\n this._shutdownSwitchoverBackoffCall = call;\n } else {\n this.backoffCall = call;\n }\n\n call.start();\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, sourceSocket) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const isActiveSocket = sourceSocket === this.socket;\n const reason = event.reason && event.reason.toLowerCase();\n\n let socketUrl;\n if (isActiveSocket && this.socket) {\n // Active socket closed - get URL from current socket reference\n socketUrl = this.socket.url;\n } else if (sourceSocket) {\n // Old socket closed - get URL from the closed socket\n socketUrl = sourceSocket.url;\n }\n\n if (isActiveSocket) {\n // Only tear down state if the currently active socket closed\n if (this.socket) {\n this.socket.removeAllListeners();\n }\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n this.webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus(false);\n } else {\n // Old socket closed; do not flip connection state\n this.logger.info(\n `${this.namespace}: [shutdown] non-active socket closed, code=${event.code}`\n );\n // Clean up listeners from old socket now that it's closed\n if (sourceSocket) {\n sourceSocket.removeAllListeners();\n }\n }\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n if (isActiveSocket) 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 if (isActiveSocket) this._emit('offline.replaced', event);\n // If not active, nothing to do\n break;\n case 4001:\n // replaced during shutdown\n if (isActiveSocket) {\n // Server closed active socket with 4001, meaning it expected this connection\n // to be replaced, but the switchover in _handleImminentShutdown failed.\n // This is a permanent failure - do not reconnect.\n this.logger.warn(\n `${this.namespace}: active socket closed with 4001; shutdown switchover failed`\n );\n this._emit('offline.permanent', event);\n } else {\n // Expected: old socket closed after successful switchover\n this.logger.info(\n `${this.namespace}: old socket closed with 4001 (replaced during shutdown); no reconnect needed`\n );\n this._emit('offline.replaced', event);\n }\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit('offline.transient', event);\n this.logger.info(`${this.namespace}: [shutdown] reconnecting active socket to recover`);\n this._reconnect(socketUrl);\n }\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n if (isActiveSocket) {\n this._emit('offline.transient', event);\n this.logger.info(`${this.namespace}: [shutdown] reconnecting due to normal close`);\n this._reconnect(socketUrl);\n }\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 if (isActiveSocket) 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 if (isActiveSocket) 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 // Handle shutdown message shape: { type: 'shutdown' }\n if (envelope && envelope.type === 'shutdown') {\n this.logger.info(`${this.namespace}: [shutdown] imminent shutdown message received`);\n this._emit('event:mercury_shutdown_imminent', envelope);\n\n this._handleImminentShutdown();\n\n return Promise.resolve();\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_socket","_interopRequireDefault","require"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport {default} from './socket';\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA"}
1
+ {"version":3,"names":["_socket","_interopRequireDefault","require"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport {default} from './socket';\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,OAAA,GAAAC,sBAAA,CAAAC,OAAA","ignoreList":[]}
@@ -9,10 +9,9 @@ _Object$defineProperty(exports, "__esModule", {
9
9
  exports.default = void 0;
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
11
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
12
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
13
- var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
14
12
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
15
13
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
16
15
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
17
16
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
18
17
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
@@ -25,8 +24,8 @@ var _commonTimers = require("@webex/common-timers");
25
24
  var _lodash = require("lodash");
26
25
  var _uuid = _interopRequireDefault(require("uuid"));
27
26
  var _errors = require("../errors");
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); }; }
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; } } /*!
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /*!
30
29
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
31
30
  */
32
31
  var sockets = new _weakMap.default();
@@ -35,8 +34,6 @@ var sockets = new _weakMap.default();
35
34
  * Generalized socket abstraction
36
35
  */
37
36
  var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
38
- (0, _inherits2.default)(Socket, _EventEmitter);
39
- var _super = _createSuper(Socket);
40
37
  /**
41
38
  * constructor
42
39
  * @returns {Socket}
@@ -44,10 +41,10 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
44
41
  function Socket() {
45
42
  var _this;
46
43
  (0, _classCallCheck2.default)(this, Socket);
47
- _this = _super.call(this);
44
+ _this = _callSuper(this, Socket);
48
45
  _this._domain = 'unknown-domain';
49
- _this.onmessage = _this.onmessage.bind((0, _assertThisInitialized2.default)(_this));
50
- _this.onclose = _this.onclose.bind((0, _assertThisInitialized2.default)(_this));
46
+ _this.onmessage = _this.onmessage.bind(_this);
47
+ _this.onclose = _this.onclose.bind(_this);
51
48
  return _this;
52
49
  }
53
50
 
@@ -55,7 +52,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
55
52
  * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
56
53
  * @returns {string}
57
54
  */
58
- (0, _createClass2.default)(Socket, [{
55
+ (0, _inherits2.default)(Socket, _EventEmitter);
56
+ return (0, _createClass2.default)(Socket, [{
59
57
  key: "binaryType",
60
58
  get: function get() {
61
59
  return sockets.get(this).binaryType;
@@ -380,14 +378,14 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
380
378
  trackingId: _this5.trackingId,
381
379
  logLevelToken: _this5.logLevelToken
382
380
  });
383
- var waitForBufferState = function waitForBufferState(event) {
381
+ var _waitForBufferState = function waitForBufferState(event) {
384
382
  if (!event.data.type && (event.data.data.eventType === 'mercury.buffer_state' || event.data.data.eventType === 'mercury.registration_status')) {
385
- _this5.removeListener('message', waitForBufferState);
383
+ _this5.removeListener('message', _waitForBufferState);
386
384
  _this5._ping();
387
385
  resolve();
388
386
  }
389
387
  };
390
- _this5.once('message', waitForBufferState);
388
+ _this5.once('message', _waitForBufferState);
391
389
  });
392
390
  }
393
391
 
@@ -416,7 +414,6 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
416
414
  // do nothing
417
415
  }
418
416
  }
419
-
420
417
  return event;
421
418
  }
422
419
 
@@ -503,6 +500,5 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
503
500
  throw new Error('Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way');
504
501
  }
505
502
  }]);
506
- return Socket;
507
503
  }(_events.EventEmitter);
508
504
  //# sourceMappingURL=socket-base.js.map
@@ -1 +1 @@
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","originalCode","originalReason","reason","defaults","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 (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const originalCode = options.code;\n const originalReason = options.reason;\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 originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\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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"}
1
+ {"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","sockets","_weakMap","Socket","exports","_EventEmitter","_this","_classCallCheck2","_domain","onmessage","bind","onclose","_inherits2","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","originalCode","originalReason","reason","defaults","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 (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const originalCode = options.code;\n const originalReason = options.reason;\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 originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\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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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_ws","_interopRequireDefault","require","_socketBase","Socket","getWebSocketConstructor","WS","_default","exports","default"],"sources":["socket.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport WS from 'ws';\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n return WS;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;AAIA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AANA;AACA;AACA;;AAMAE,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;EAClE,OAAOC,WAAE;AACX,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaL,mBAAM"}
1
+ {"version":3,"names":["_ws","_interopRequireDefault","require","_socketBase","Socket","getWebSocketConstructor","WS","_default","exports","default"],"sources":["socket.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport WS from 'ws';\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n return WS;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;AAIA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AANA;AACA;AACA;;AAMAE,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;EAClE,OAAOC,WAAE;AACX,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaL,mBAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_socketBase","_interopRequireDefault","require","Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self","_default","exports","default"],"sources":["socket.shim.js"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js\n let ws;\n\n if (typeof WebSocket !== 'undefined') {\n ws = WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n // eslint-disable-next-line no-undef\n ws = MozWebSocket;\n } else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket;\n } else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket;\n } else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket;\n }\n\n return ws;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;AAQA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AARA;;AAEA;AACA;AACA;;AAEA;;AAIAC,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;EAClE;EACA,IAAIC,EAAE;EAEN,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE;IACpCD,EAAE,GAAGC,SAAS;EAChB,CAAC,MAAM,IAAI,OAAOC,YAAY,KAAK,WAAW,EAAE;IAC9C;IACAF,EAAE,GAAGE,YAAY;EACnB,CAAC,MAAM,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACxCH,EAAE,GAAGG,MAAM,CAACF,SAAS,IAAIE,MAAM,CAACD,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOE,MAAM,KAAK,WAAW,EAAE;IACxCJ,EAAE,GAAGI,MAAM,CAACH,SAAS,IAAIG,MAAM,CAACF,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;IACtCL,EAAE,GAAGK,IAAI,CAACJ,SAAS,IAAII,IAAI,CAACH,YAAY;EAC1C;EAEA,OAAOF,EAAE;AACX,CAAC;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaV,mBAAM"}
1
+ {"version":3,"names":["_socketBase","_interopRequireDefault","require","Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self","_default","exports","default"],"sources":["socket.shim.js"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js\n let ws;\n\n if (typeof WebSocket !== 'undefined') {\n ws = WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n // eslint-disable-next-line no-undef\n ws = MozWebSocket;\n } else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket;\n } else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket;\n } else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket;\n }\n\n return ws;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;AAQA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AARA;;AAEA;AACA;AACA;;AAEA;;AAIAC,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;EAClE;EACA,IAAIC,EAAE;EAEN,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE;IACpCD,EAAE,GAAGC,SAAS;EAChB,CAAC,MAAM,IAAI,OAAOC,YAAY,KAAK,WAAW,EAAE;IAC9C;IACAF,EAAE,GAAGE,YAAY;EACnB,CAAC,MAAM,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACxCH,EAAE,GAAGG,MAAM,CAACF,SAAS,IAAIE,MAAM,CAACD,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOE,MAAM,KAAK,WAAW,EAAE;IACxCJ,EAAE,GAAGI,MAAM,CAACH,SAAS,IAAIG,MAAM,CAACF,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;IACtCL,EAAE,GAAGK,IAAI,CAACJ,SAAS,IAAII,IAAI,CAACH,YAAY;EAC1C;EAEA,OAAOF,EAAE;AACX,CAAC;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaV,mBAAM","ignoreList":[]}
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.8.1-next.11",
33
- "@webex/test-helper-mocha": "3.8.1-next.11",
34
- "@webex/test-helper-mock-webex": "3.8.1-next.11",
35
- "@webex/test-helper-test-users": "3.8.1-next.11",
32
+ "@webex/test-helper-chai": "3.10.0-next.1",
33
+ "@webex/test-helper-mocha": "3.10.0-next.1",
34
+ "@webex/test-helper-mock-webex": "3.10.0-next.1",
35
+ "@webex/test-helper-test-users": "3.10.0-next.1",
36
36
  "eslint": "^8.24.0",
37
37
  "prettier": "^2.7.1",
38
38
  "sinon": "^9.2.4"
39
39
  },
40
40
  "dependencies": {
41
- "@webex/common": "3.8.1-next.11",
42
- "@webex/common-timers": "3.8.1-next.11",
43
- "@webex/internal-plugin-device": "3.10.0-next.1",
44
- "@webex/internal-plugin-feature": "3.10.0-next.1",
45
- "@webex/internal-plugin-metrics": "3.10.0-next.1",
46
- "@webex/test-helper-chai": "3.8.1-next.11",
47
- "@webex/test-helper-mocha": "3.8.1-next.11",
48
- "@webex/test-helper-mock-web-socket": "3.8.1-next.11",
49
- "@webex/test-helper-mock-webex": "3.8.1-next.11",
50
- "@webex/test-helper-refresh-callback": "3.8.1-next.11",
51
- "@webex/test-helper-test-users": "3.8.1-next.11",
52
- "@webex/webex-core": "3.10.0-next.1",
41
+ "@webex/common": "3.10.0-next.1",
42
+ "@webex/common-timers": "3.10.0-next.1",
43
+ "@webex/internal-plugin-device": "3.10.0-next.11",
44
+ "@webex/internal-plugin-feature": "3.10.0-next.11",
45
+ "@webex/internal-plugin-metrics": "3.10.0-next.11",
46
+ "@webex/test-helper-chai": "3.10.0-next.1",
47
+ "@webex/test-helper-mocha": "3.10.0-next.1",
48
+ "@webex/test-helper-mock-web-socket": "3.10.0-next.1",
49
+ "@webex/test-helper-mock-webex": "3.10.0-next.1",
50
+ "@webex/test-helper-refresh-callback": "3.10.0-next.1",
51
+ "@webex/test-helper-test-users": "3.10.0-next.1",
52
+ "@webex/webex-core": "3.10.0-next.11",
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.10.0-next.1"
67
+ "version": "3.10.0-next.11"
68
68
  }
package/src/mercury.js CHANGED
@@ -277,7 +277,26 @@ const Mercury = WebexPlugin.extend({
277
277
  .getFeature('developer', 'web-high-availability')
278
278
  .then((haMessagingEnabled) => {
279
279
  if (haMessagingEnabled) {
280
- return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
280
+ let highPrioritySocketUrl;
281
+ try {
282
+ highPrioritySocketUrl =
283
+ this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
284
+ } catch (e) {
285
+ this.logger.warn(`${this.namespace}: error converting to high priority url`, e);
286
+ }
287
+ if (!highPrioritySocketUrl) {
288
+ const hostFromUrl = url.parse(webSocketUrl, true)?.host;
289
+ const isValidHost = this.webex.internal.services.isValidHost(hostFromUrl);
290
+ if (!isValidHost) {
291
+ this.logger.error(
292
+ `${this.namespace}: host ${hostFromUrl} is not a valid host from host catalog`
293
+ );
294
+
295
+ return '';
296
+ }
297
+ }
298
+
299
+ return highPrioritySocketUrl || webSocketUrl;
281
300
  }
282
301
 
283
302
  return webSocketUrl;
@@ -287,6 +306,9 @@ const Mercury = WebexPlugin.extend({
287
306
  })
288
307
  .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))
289
308
  .then((webSharedMercury) => {
309
+ if (!webSocketUrl) {
310
+ return '';
311
+ }
290
312
  webSocketUrl = url.parse(webSocketUrl, true);
291
313
  Object.assign(webSocketUrl.query, {
292
314
  outboundWireFormat: 'text',
@@ -77,6 +77,7 @@ describe('plugin-mercury', () => {
77
77
  markFailedUrl: sinon.stub().returns(Promise.resolve()),
78
78
  switchActiveClusterIds: sinon.stub(),
79
79
  invalidateCache: sinon.stub(),
80
+ isValidHost: sinon.stub().returns(Promise.resolve(true)),
80
81
  };
81
82
  webex.internal.metrics.submitClientMetrics = sinon.stub();
82
83
  webex.internal.newMetrics.callDiagnosticMetrics.setMercuryConnectedStatus = sinon.stub();
@@ -936,6 +937,15 @@ describe('plugin-mercury', () => {
936
937
  ._prepareUrl()
937
938
  .then((wsUrl) => assert.match(wsUrl, /example-2.com/));
938
939
  });
940
+ it('uses high priority url instead of provided webSocketUrl', () => {
941
+ webex.internal.feature.getFeature.onCall(0).returns(Promise.resolve(true));
942
+ webex.internal.services.convertUrlToPriorityHostUrl = sinon
943
+ .stub()
944
+ .returns(Promise.resolve('ws://example-2.com'));
945
+ return webex.internal.mercury
946
+ ._prepareUrl('ws://provided.com')
947
+ .then((wsUrl) => assert.match(wsUrl, /example-2.com/));
948
+ });
939
949
  });
940
950
 
941
951
  describe("when 'web-shared-socket' is enabled", () => {