@webex/internal-plugin-mercury 3.11.0 → 3.12.0-llmrefactor.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -29,6 +29,60 @@ const webex = new WebexCore();
29
29
  webex.internal.mercury.WHATEVER;
30
30
  ```
31
31
 
32
+ ### Multiple Connections
33
+
34
+ Mercury now supports multiple simultaneous websocket connections scoped by `sessionId`.
35
+
36
+ ```js
37
+ const mercury = webex.internal.mercury;
38
+
39
+ // Default session
40
+ await mercury.connect();
41
+
42
+ // Additional session
43
+ await mercury.connect(undefined, 'secondary-session');
44
+
45
+ // Disconnect only one session
46
+ await mercury.disconnect(undefined, 'secondary-session');
47
+
48
+ // Disconnect everything
49
+ await mercury.disconnectAll();
50
+ ```
51
+
52
+ #### Listening to multiple connections
53
+
54
+ ```js
55
+ const mercury = webex.internal.mercury;
56
+ const secondarySessionId = 'secondary-session';
57
+
58
+ // Connect both sessions first.
59
+ await mercury.connect();
60
+ await mercury.connect(undefined, secondarySessionId);
61
+
62
+ // Default session listeners use the base event name.
63
+ mercury.on('online', () => {
64
+ console.log('[default] online');
65
+ });
66
+
67
+ mercury.on('event:conversation.activity', (envelope) => {
68
+ console.log('[default] activity', envelope.data?.eventType);
69
+ });
70
+
71
+ // Non-default sessions use :<sessionId> suffix.
72
+ mercury.on(`online:${secondarySessionId}`, () => {
73
+ console.log(`[${secondarySessionId}] online`);
74
+ });
75
+
76
+ mercury.on(`event:conversation.activity:${secondarySessionId}`, (envelope) => {
77
+ console.log(`[${secondarySessionId}] activity`, envelope.data?.eventType);
78
+ });
79
+ ```
80
+
81
+ Notes:
82
+ - `connect(webSocketUrl, sessionId)` and `disconnect(options, sessionId)` are session-aware.
83
+ - Non-default sessions emit events with a `:<sessionId>` suffix (for example, `online:secondary-session`).
84
+ - `getSocket(sessionId)` returns the socket for a specific session.
85
+
32
86
  ## Config Options
33
87
 
34
88
  ### Using A Proxy Agent To Open A Websocket Connection
package/dist/index.js CHANGED
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
4
+ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
3
5
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
4
7
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
8
  _Object$defineProperty(exports, "__esModule", {
6
9
  value: true
@@ -29,6 +32,12 @@ _Object$defineProperty(exports, "Mercury", {
29
32
  return _mercury.default;
30
33
  }
31
34
  });
35
+ _Object$defineProperty(exports, "MercuryPlugin", {
36
+ enumerable: true,
37
+ get: function get() {
38
+ return _mercuryPlugin.MercuryPlugin;
39
+ }
40
+ });
32
41
  _Object$defineProperty(exports, "NotAuthorized", {
33
42
  enumerable: true,
34
43
  get: function get() {
@@ -63,15 +72,17 @@ require("@webex/internal-plugin-device");
63
72
  require("@webex/internal-plugin-feature");
64
73
  require("@webex/internal-plugin-metrics");
65
74
  var _webexCore = require("@webex/webex-core");
66
- var _mercury = _interopRequireDefault(require("./mercury"));
75
+ var _mercuryPlugin = _interopRequireWildcard(require("./mercury-plugin"));
67
76
  var _config = _interopRequireDefault(require("./config"));
77
+ var _mercury = _interopRequireDefault(require("./mercury"));
68
78
  var _socket = _interopRequireDefault(require("./socket"));
69
79
  var _errors = require("./errors");
80
+ function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
70
81
  /*!
71
82
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
72
83
  */
73
84
 
74
- (0, _webexCore.registerInternalPlugin)('mercury', _mercury.default, {
85
+ (0, _webexCore.registerInternalPlugin)('mercury', _mercuryPlugin.default, {
75
86
  config: _config.default,
76
87
  onBeforeLogout: function onBeforeLogout() {
77
88
  return this.logout();
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,WAAdA,cAAcA,CAAA,EAAG;IACf,OAAO,IAAI,CAACC,MAAM,CAAC,CAAC;EACtB;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["require","_webexCore","_mercuryPlugin","_interopRequireWildcard","_config","_interopRequireDefault","_mercury","_socket","_errors","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","registerInternalPlugin","MercuryPlugin","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 MercuryPlugin from './mercury-plugin';\nimport config from './config';\n\nregisterInternalPlugin('mercury', MercuryPlugin, {\n config,\n onBeforeLogout() {\n return this.logout();\n },\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {MercuryPlugin} from './mercury-plugin';\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,cAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAC,sBAAA,CAAAL,OAAA;AASA,IAAAM,QAAA,GAAAD,sBAAA,CAAAL,OAAA;AAGA,IAAAO,OAAA,GAAAF,sBAAA,CAAAL,OAAA;AAEA,IAAAQ,OAAA,GAAAR,OAAA;AAOkB,SAAAG,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAR,uBAAA,YAAAA,wBAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,EAAA,IAAAf,CAAA,gBAAAe,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,EAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,EAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,EAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,EAAA,IAAAf,CAAA,CAAAe,EAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAhClB;AACA;AACA;;AAWA,IAAAmB,iCAAsB,EAAC,SAAS,EAAEC,sBAAa,EAAE;EAC/CC,MAAM,EAANA,eAAM;EACNC,cAAc,WAAdA,cAAcA,CAAA,EAAG;IACf,OAAO,IAAI,CAACC,MAAM,CAAC,CAAC;EACtB;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+
3
+ var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
+ _Object$defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.MercuryPlugin = void 0;
10
+ _Object$defineProperty(exports, "config", {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _config.default;
14
+ }
15
+ });
16
+ exports.default = void 0;
17
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
19
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
21
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
23
+ var _webexCore = require("@webex/webex-core");
24
+ var _config = _interopRequireDefault(require("./config"));
25
+ 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)); }
26
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } /* eslint-disable require-jsdoc */ /*!
27
+ * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.
28
+ */ // @ts-ignore
29
+ // Since mercury-plugin.ts is a .ts file, the TS language server tries to parse mercury.js and chokes on the @deprecated decorator.
30
+ // using a require() call instead of import to avoid TS parsing the file:
31
+
32
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
33
+ var Mercury = require('./mercury').default;
34
+ var MercuryPlugin = exports.MercuryPlugin = /*#__PURE__*/function (_ref) {
35
+ function MercuryPlugin() {
36
+ var _this;
37
+ (0, _classCallCheck2.default)(this, MercuryPlugin);
38
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
39
+ args[_key] = arguments[_key];
40
+ }
41
+ _this = _callSuper(this, MercuryPlugin, [].concat(args));
42
+ (0, _defineProperty2.default)(_this, "namespace", 'Mercury');
43
+ (0, _defineProperty2.default)(_this, "_mercury", void 0);
44
+ _this._mercury = new Mercury({
45
+ parent: _this.webex
46
+ });
47
+
48
+ // Re-emit every event from Mercury on this plugin so listeners attached to
49
+ // `this.webex.internal.mercury` continue to work.
50
+ _this._mercury.on('all', function (eventName) {
51
+ var _ref2;
52
+ for (var _len2 = arguments.length, rest = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
53
+ rest[_key2 - 1] = arguments[_key2];
54
+ }
55
+ (_ref2 = _this).trigger.apply(_ref2, [eventName].concat(rest));
56
+ });
57
+ return _this;
58
+ }
59
+
60
+ /** True when the primary Mercury socket is connected. */
61
+ (0, _inherits2.default)(MercuryPlugin, _ref);
62
+ return (0, _createClass2.default)(MercuryPlugin, [{
63
+ key: "connected",
64
+ get: function get() {
65
+ var _this$_mercury$connec, _this$_mercury;
66
+ return (_this$_mercury$connec = (_this$_mercury = this._mercury) === null || _this$_mercury === void 0 ? void 0 : _this$_mercury.connected) !== null && _this$_mercury$connec !== void 0 ? _this$_mercury$connec : false;
67
+ }
68
+
69
+ /** The primary socket, if connected. */
70
+ }, {
71
+ key: "socket",
72
+ get: function get() {
73
+ var _this$_mercury2;
74
+ return (_this$_mercury2 = this._mercury) === null || _this$_mercury2 === void 0 ? void 0 : _this$_mercury2.socket;
75
+ }
76
+
77
+ /** Cluster service URLs received from registration status event. */
78
+ }, {
79
+ key: "localClusterServiceUrls",
80
+ get: function get() {
81
+ var _this$_mercury3;
82
+ return (_this$_mercury3 = this._mercury) === null || _this$_mercury3 === void 0 ? void 0 : _this$_mercury3.localClusterServiceUrls;
83
+ }
84
+ }, {
85
+ key: "getLastError",
86
+ value: function getLastError() {
87
+ var _this$_mercury4;
88
+ return (_this$_mercury4 = this._mercury) === null || _this$_mercury4 === void 0 ? void 0 : _this$_mercury4.getLastError();
89
+ }
90
+ }, {
91
+ key: "hasEverConnected",
92
+ get: function get() {
93
+ var _this$_mercury$hasEve, _this$_mercury5;
94
+ return (_this$_mercury$hasEve = (_this$_mercury5 = this._mercury) === null || _this$_mercury5 === void 0 ? void 0 : _this$_mercury5.hasEverConnected) !== null && _this$_mercury$hasEve !== void 0 ? _this$_mercury$hasEve : false;
95
+ }
96
+ }, {
97
+ key: "connect",
98
+ value: function connect(webSocketUrl) {
99
+ return this._mercury.connect(webSocketUrl);
100
+ }
101
+ }, {
102
+ key: "disconnect",
103
+ value: function disconnect(options) {
104
+ return this._mercury.disconnect(options);
105
+ }
106
+ }, {
107
+ key: "logout",
108
+ value: function logout() {
109
+ var normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];
110
+ var reason = this.config.beforeLogoutOptionsCloseReason;
111
+ var options = reason && !normalReconnectReasons.includes(reason) ? {
112
+ code: 3050,
113
+ reason: reason
114
+ } : undefined;
115
+ return this._mercury.disconnect(options);
116
+ }
117
+ }, {
118
+ key: "processRegistrationStatusEvent",
119
+ value: function processRegistrationStatusEvent(message) {
120
+ return this._mercury.processRegistrationStatusEvent(message);
121
+ }
122
+ }]);
123
+ }(_webexCore.WebexPlugin);
124
+ var _default = exports.default = MercuryPlugin;
125
+ //# sourceMappingURL=mercury-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_webexCore","require","_config","_interopRequireDefault","_callSuper","t","o","e","_getPrototypeOf2","default","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","apply","Boolean","prototype","valueOf","call","Mercury","MercuryPlugin","exports","_ref","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","concat","_defineProperty2","_mercury","parent","webex","on","eventName","_ref2","_len2","rest","_key2","trigger","_inherits2","_createClass2","key","get","_this$_mercury$connec","_this$_mercury","connected","_this$_mercury2","socket","_this$_mercury3","localClusterServiceUrls","value","getLastError","_this$_mercury4","_this$_mercury$hasEve","_this$_mercury5","hasEverConnected","connect","webSocketUrl","disconnect","options","logout","normalReconnectReasons","reason","config","beforeLogoutOptionsCloseReason","includes","code","undefined","processRegistrationStatusEvent","message","WebexPlugin","_default"],"sources":["mercury-plugin.ts"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2024 Cisco Systems, Inc. See LICENSE file.\n */\n\n// @ts-ignore\nimport {WebexPlugin} from '@webex/webex-core';\n\nimport config from './config';\n\n// Since mercury-plugin.ts is a .ts file, the TS language server tries to parse mercury.js and chokes on the @deprecated decorator.\n// using a require() call instead of import to avoid TS parsing the file:\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst Mercury = require('./mercury').default;\n\nexport class MercuryPlugin extends (WebexPlugin as any) {\n namespace = 'Mercury';\n\n private _mercury: any;\n\n constructor(...args: any[]) {\n super(...args);\n this._mercury = new (Mercury as any)({parent: (this as any).webex});\n\n // Re-emit every event from Mercury on this plugin so listeners attached to\n // `this.webex.internal.mercury` continue to work.\n this._mercury.on('all', (eventName: string, ...rest: any[]) => {\n (this as any).trigger(eventName, ...rest);\n });\n }\n\n /** True when the primary Mercury socket is connected. */\n get connected(): boolean {\n return this._mercury?.connected ?? false;\n }\n\n /** The primary socket, if connected. */\n get socket(): any {\n return this._mercury?.socket;\n }\n\n /** Cluster service URLs received from registration status event. */\n get localClusterServiceUrls(): any {\n return this._mercury?.localClusterServiceUrls;\n }\n\n getLastError(): any {\n return this._mercury?.getLastError();\n }\n\n get hasEverConnected(): boolean {\n return this._mercury?.hasEverConnected ?? false;\n }\n\n connect(webSocketUrl?: string): Promise<void> {\n return this._mercury.connect(webSocketUrl);\n }\n\n disconnect(options?: any): Promise<void> {\n return this._mercury.disconnect(options);\n }\n\n logout(): Promise<void> {\n const normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n const reason = this.config.beforeLogoutOptionsCloseReason;\n const options =\n reason && !normalReconnectReasons.includes(reason) ? {code: 3050, reason} : undefined;\n\n return this._mercury.disconnect(options);\n }\n\n processRegistrationStatusEvent(message: any): void {\n return this._mercury.processRegistrationStatusEvent(message);\n }\n}\n\nexport {config};\nexport default MercuryPlugin;\n"],"mappings":"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","ignoreList":[]}
package/dist/mercury.js CHANGED
@@ -13,6 +13,7 @@ _Object$defineProperty(exports, "__esModule", {
13
13
  exports.default = void 0;
14
14
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
15
15
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
16
17
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
17
18
  var _assign = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/assign"));
18
19
  var _deleteProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/delete-property"));
@@ -56,7 +57,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
56
57
  mercuryTimeOffset: {
57
58
  default: undefined,
58
59
  type: 'number'
59
- }
60
+ },
61
+ backoffCall: 'object',
62
+ _connectPromise: 'object',
63
+ _shutdownSwitchoverBackoffCall: 'object',
64
+ _shutdownSwitchoverId: 'string',
65
+ // Store the resolved (pre-proxy) URL so reconnection uses a catalog-valid host
66
+ // instead of the potentially rewritten socket.url from an interceptor.
67
+ resolvedWebSocketUrl: 'string'
60
68
  },
61
69
  derived: {
62
70
  listening: {
@@ -139,12 +147,12 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
139
147
  */
140
148
  _handleImminentShutdown: function _handleImminentShutdown() {
141
149
  var _this3 = this;
150
+ var oldSocket = this.socket;
142
151
  try {
143
- if (this._shutdownSwitchoverInProgress) {
152
+ if (this._shutdownSwitchoverBackoffCall) {
144
153
  this.logger.info("".concat(this.namespace, ": [shutdown] switchover already in progress"));
145
154
  return;
146
155
  }
147
- this._shutdownSwitchoverInProgress = true;
148
156
  this._shutdownSwitchoverId = "".concat((0, _now.default)());
149
157
  this.logger.info("".concat(this.namespace, ": [shutdown] switchover start, id=").concat(this._shutdownSwitchoverId));
150
158
  this._connectWithBackoff(undefined, {
@@ -153,7 +161,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
153
161
  isShutdownSwitchover: true,
154
162
  onSuccess: function onSuccess(newSocket, webSocketUrl) {
155
163
  _this3.logger.info("".concat(_this3.namespace, ": [shutdown] switchover connected, url: ").concat(webSocketUrl));
156
- var oldSocket = _this3.socket;
164
+
157
165
  // Atomically switch active socket reference
158
166
  _this3.socket = newSocket;
159
167
  _this3.connected = true; // remain connected throughout
@@ -177,7 +185,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
177
185
  });
178
186
  } catch (e) {
179
187
  this.logger.error("".concat(this.namespace, ": [shutdown] error during switchover"), e);
180
- this._shutdownSwitchoverInProgress = false;
188
+ this._shutdownSwitchoverBackoffCall = undefined;
181
189
  this._emit('event:mercury_shutdown_switchover_failed', {
182
190
  reason: e
183
191
  });
@@ -190,30 +198,38 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
190
198
  getLastError: function getLastError() {
191
199
  return this.lastError;
192
200
  },
201
+ /**
202
+ * Get the underlying WebSocket.
203
+ * @returns {any} The socket instance, or undefined if not connected.
204
+ */
205
+ getSocket: function getSocket() {
206
+ return this.socket;
207
+ },
193
208
  connect: function connect(webSocketUrl) {
194
209
  var _this4 = this;
195
210
  if (this.connected) {
196
211
  this.logger.info("".concat(this.namespace, ": already connected, will not connect again"));
197
212
  return _promise.default.resolve();
198
213
  }
214
+
215
+ // If already connecting, return the existing promise so callers can await it
216
+ if (this._connectPromise) {
217
+ this.logger.info("".concat(this.namespace, ": connection already in progress, returning existing promise"));
218
+ return this._connectPromise;
219
+ }
199
220
  this.connecting = true;
200
221
  this.logger.info("".concat(this.namespace, ": starting connection attempt"));
201
- this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
202
- return _promise.default.resolve(this.webex.internal.device.registered || this.webex.internal.device.register()).then(function () {
222
+ this._connectPromise = _promise.default.resolve(this.webex.internal.device.registered || this.webex.internal.device.register()).then(function () {
203
223
  _this4.logger.info("".concat(_this4.namespace, ": connecting"));
204
224
  return _this4._connectWithBackoff(webSocketUrl);
225
+ }).finally(function () {
226
+ _this4._connectPromise = null;
205
227
  });
206
- },
207
- logout: function logout() {
208
- this.logger.info("".concat(this.namespace, ": logout() called"));
209
- this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
210
- return this.disconnect(this.config.beforeLogoutOptionsCloseReason && !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason) ? {
211
- code: 3050,
212
- reason: this.config.beforeLogoutOptionsCloseReason
213
- } : undefined);
228
+ return this._connectPromise;
214
229
  },
215
230
  disconnect: function disconnect(options) {
216
231
  var _this5 = this;
232
+ this.logger.info("".concat(this.namespace, "#disconnect: connecting state: ").concat(this.connecting, ", connected state: ").concat(this.connected, ", socket exists: ").concat(!!this.socket, ", options: ").concat((0, _stringify.default)(options)));
217
233
  return new _promise.default(function (resolve) {
218
234
  if (_this5.backoffCall) {
219
235
  _this5.logger.info("".concat(_this5.namespace, ": aborting connection"));
@@ -226,7 +242,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
226
242
  if (_this5.socket) {
227
243
  _this5.socket.removeAllListeners('message');
228
244
  _this5.once('offline', resolve);
229
- resolve(_this5.socket.close(options || undefined));
245
+ _this5.socket.close(options || undefined);
246
+ return;
230
247
  }
231
248
  resolve();
232
249
  });
@@ -301,6 +318,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
301
318
  webSocketUrl.query.multipleConnections = true;
302
319
  }
303
320
  webSocketUrl.query.clientTimestamp = (0, _now.default)();
321
+ delete webSocketUrl.search;
304
322
  return _url.default.format(webSocketUrl);
305
323
  });
306
324
  },
@@ -332,6 +350,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
332
350
 
333
351
  // Call the callback with the error before rejecting
334
352
  callback(_err);
353
+
354
+ // eslint-disable-next-line no-unreachable
335
355
  return _promise.default.reject(_err);
336
356
  }
337
357
 
@@ -413,9 +433,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
413
433
  }
414
434
  if (reason instanceof _errors.ConnectionError) {
415
435
  return _this7.webex.internal.feature.getFeature('developer', 'web-high-availability').then(function (haMessagingEnabled) {
436
+ var wsUrl = newWSUrl || reason.webSocketUrl;
416
437
  if (haMessagingEnabled) {
417
- _this7.logger.info("".concat(_this7.namespace, ": received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ").concat(newWSUrl, " error: ").concat(reason.message));
418
- return _this7.webex.internal.services.markFailedUrl(newWSUrl);
438
+ _this7.logger.info("".concat(_this7.namespace, ": received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ").concat(wsUrl, " error: ").concat(reason.message));
439
+ if (wsUrl) {
440
+ _this7.logger.info("".concat(_this7.namespace, ": marking ").concat(wsUrl, " as failed due to connection error"));
441
+ return _this7.webex.internal.services.markFailedUrl(wsUrl);
442
+ }
443
+ _this7.logger.info("".concat(_this7.namespace, ": no socket url available to mark as failed due to connection error"));
419
444
  }
420
445
  return null;
421
446
  }).then(function () {
@@ -450,8 +475,18 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
450
475
  options = _objectSpread(_objectSpread({}, options), _this8.webex.config.defaultMercuryOptions);
451
476
  }
452
477
  _this8.logger.info("".concat(_this8.namespace, ": ").concat(logPrefix, " url: ").concat(webSocketUrl));
478
+
479
+ // Store the resolved URL before socket.open(), which may be rewritten by
480
+ // an interceptor (e.g. same-site websocket proxy). On reconnection we need
481
+ // the original catalog-valid URL, not the post-proxy one from socket.url.
482
+ if (!isShutdownSwitchover) {
483
+ _this8.resolvedWebSocketUrl = webSocketUrl;
484
+ }
453
485
  return socket.open(webSocketUrl, options).then(function () {
454
486
  return webSocketUrl;
487
+ }).catch(function (err) {
488
+ err.webSocketUrl = webSocketUrl;
489
+ return _promise.default.reject(err);
455
490
  });
456
491
  });
457
492
  },
@@ -469,7 +504,6 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
469
504
  var onComplete = function onComplete(err) {
470
505
  // Clear state flags based on connection type
471
506
  if (isShutdownSwitchover) {
472
- _this9._shutdownSwitchoverInProgress = false;
473
507
  _this9._shutdownSwitchoverBackoffCall = undefined;
474
508
  } else {
475
509
  _this9.connecting = false;
@@ -543,10 +577,19 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
543
577
  try {
544
578
  this.trigger.apply(this, args);
545
579
  } catch (error) {
546
- this.logger.error("".concat(this.namespace, ": error occurred in event handler:"), error, ' with args: ', args);
580
+ try {
581
+ this.logger.error("".concat(this.namespace, ": error occurred in event handler:"), error, ' with args: ', args);
582
+ } catch (logError) {
583
+ // If even logging fails, just ignore to prevent cascading errors during cleanup
584
+ // eslint-disable-next-line no-console
585
+ console.error('Mercury _emit error handling failed:', logError);
586
+ }
547
587
  }
548
588
  },
549
589
  _getEventHandlers: function _getEventHandlers(eventType) {
590
+ if (!eventType) {
591
+ return [];
592
+ }
550
593
  var _eventType$split = eventType.split('.'),
551
594
  _eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
552
595
  namespace = _eventType$split2[0],
@@ -571,14 +614,10 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
571
614
  try {
572
615
  var isActiveSocket = sourceSocket === this.socket;
573
616
  var reason = event.reason && event.reason.toLowerCase();
574
- var socketUrl;
575
- if (isActiveSocket && this.socket) {
576
- // Active socket closed - get URL from current socket reference
577
- socketUrl = this.socket.url;
578
- } else if (sourceSocket) {
579
- // Old socket closed - get URL from the closed socket
580
- socketUrl = sourceSocket.url;
581
- }
617
+
618
+ // Use the stored resolved URL for reconnection instead of sourceSocket.url,
619
+ // which may have been rewritten by an interceptor to a non-catalog host.
620
+ var socketUrl = this.resolvedWebSocketUrl || sourceSocket && sourceSocket.url;
582
621
  if (isActiveSocket) {
583
622
  // Only tear down state if the currently active socket closed
584
623
  if (this.socket) {
@@ -677,6 +716,10 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
677
716
  return _promise.default.resolve();
678
717
  }
679
718
  var data = envelope.data;
719
+ if (!data || !data.eventType) {
720
+ this._emit('event', envelope);
721
+ return _promise.default.resolve();
722
+ }
680
723
  this._applyOverrides(data);
681
724
  return this._getEventHandlers(data.eventType).reduce(function (promise, handler) {
682
725
  return promise.then(function () {
@@ -690,9 +733,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
690
733
  });
691
734
  }, _promise.default.resolve()).then(function () {
692
735
  _this0._emit('event', event.data);
693
- var _data$eventType$split = data.eventType.split('.'),
694
- _data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
695
- namespace = _data$eventType$split2[0];
736
+ var _ref3 = data.eventType ? data.eventType.split('.') : [],
737
+ _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
738
+ namespace = _ref4[0];
696
739
  if (namespace === data.eventType) {
697
740
  _this0._emit("event:".concat(namespace), envelope);
698
741
  } else {
@@ -713,7 +756,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
713
756
  this.logger.info("".concat(this.namespace, ": reconnecting"));
714
757
  return this.connect(webSocketUrl);
715
758
  },
716
- version: "0.0.0"
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));
759
+ version: "3.12.0-llmrefactor.1"
760
+ }, (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));
718
761
  var _default = exports.default = Mercury;
719
762
  //# sourceMappingURL=mercury.js.map