@webex/internal-plugin-mercury 3.7.0 → 3.8.0-next.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/dist/mercury.js +43 -16
- package/dist/mercury.js.map +1 -1
- package/dist/socket/socket-base.js +54 -16
- package/dist/socket/socket-base.js.map +1 -1
- package/package.json +17 -17
- package/src/mercury.js +46 -10
- package/src/socket/socket-base.js +40 -22
- package/test/unit/spec/mercury.js +93 -32
- package/test/unit/spec/socket.js +126 -11
package/dist/mercury.js
CHANGED
|
@@ -52,7 +52,11 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
52
52
|
type: 'boolean'
|
|
53
53
|
},
|
|
54
54
|
socket: 'object',
|
|
55
|
-
localClusterServiceUrls: 'object'
|
|
55
|
+
localClusterServiceUrls: 'object',
|
|
56
|
+
mercuryTimeOffset: {
|
|
57
|
+
default: undefined,
|
|
58
|
+
type: 'number'
|
|
59
|
+
}
|
|
56
60
|
},
|
|
57
61
|
derived: {
|
|
58
62
|
listening: {
|
|
@@ -90,14 +94,18 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
90
94
|
return _promise.default.resolve();
|
|
91
95
|
}
|
|
92
96
|
this.connecting = true;
|
|
97
|
+
this.logger.info("".concat(this.namespace, ": starting connection attempt"));
|
|
98
|
+
this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
|
|
93
99
|
return _promise.default.resolve(this.webex.internal.device.registered || this.webex.internal.device.register()).then(function () {
|
|
94
100
|
_this2.logger.info("".concat(_this2.namespace, ": connecting"));
|
|
95
101
|
return _this2._connectWithBackoff(webSocketUrl);
|
|
96
102
|
});
|
|
97
103
|
},
|
|
98
104
|
logout: function logout() {
|
|
105
|
+
this.logger.info("".concat(this.namespace, ": logout() called"));
|
|
106
|
+
this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
|
|
99
107
|
return this.disconnect(this.config.beforeLogoutOptionsCloseReason && !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason) ? {
|
|
100
|
-
code:
|
|
108
|
+
code: 3050,
|
|
101
109
|
reason: this.config.beforeLogoutOptionsCloseReason
|
|
102
110
|
} : undefined);
|
|
103
111
|
},
|
|
@@ -181,6 +189,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
181
189
|
socket.on('message', function () {
|
|
182
190
|
return _this5._onmessage.apply(_this5, arguments);
|
|
183
191
|
});
|
|
192
|
+
socket.on('pong', function () {
|
|
193
|
+
return _this5._setTimeOffset.apply(_this5, arguments);
|
|
194
|
+
});
|
|
184
195
|
socket.on('sequence-mismatch', function () {
|
|
185
196
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
186
197
|
args[_key] = arguments[_key];
|
|
@@ -194,6 +205,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
194
205
|
return _this5._emit.apply(_this5, ['ping-pong-latency'].concat(args));
|
|
195
206
|
});
|
|
196
207
|
_promise.default.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(function (_ref) {
|
|
208
|
+
var _this5$config$authori, _this5$config$acknowl;
|
|
197
209
|
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
198
210
|
webSocketUrl = _ref2[0],
|
|
199
211
|
token = _ref2[1];
|
|
@@ -209,7 +221,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
209
221
|
pongTimeout: _this5.config.pongTimeout,
|
|
210
222
|
token: token.toString(),
|
|
211
223
|
trackingId: "".concat(_this5.webex.sessionId, "_").concat((0, _now.default)()),
|
|
212
|
-
logger: _this5.logger
|
|
224
|
+
logger: _this5.logger,
|
|
225
|
+
authorizationRequired: (_this5$config$authori = _this5.config.authorizationRequired) !== null && _this5$config$authori !== void 0 ? _this5$config$authori : true,
|
|
226
|
+
acknowledgementRequired: (_this5$config$acknowl = _this5.config.acknowledgementRequired) !== null && _this5$config$acknowl !== void 0 ? _this5$config$acknowl : true
|
|
213
227
|
};
|
|
214
228
|
|
|
215
229
|
// if the consumer has supplied request options use them
|
|
@@ -233,6 +247,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
233
247
|
return _promise.default.resolve();
|
|
234
248
|
});
|
|
235
249
|
}).catch(function (reason) {
|
|
250
|
+
var _this5$backoffCall;
|
|
236
251
|
_this5.lastError = reason; // remember the last error
|
|
237
252
|
|
|
238
253
|
// Suppress connection errors that appear to be network related. This
|
|
@@ -244,7 +259,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
244
259
|
retries: _this5.backoffCall.getNumRetries()
|
|
245
260
|
});
|
|
246
261
|
}
|
|
247
|
-
_this5.logger.info("".concat(_this5.namespace, ": connection attempt failed"), reason);
|
|
262
|
+
_this5.logger.info("".concat(_this5.namespace, ": connection attempt failed"), reason, ((_this5$backoffCall = _this5.backoffCall) === null || _this5$backoffCall === void 0 ? void 0 : _this5$backoffCall.getNumRetries()) === 0 ? reason.stack : '');
|
|
248
263
|
// UnknownResponse is produced by IE for any 4XXX; treated it like a bad
|
|
249
264
|
// web socket url and let WDM handle the token checking
|
|
250
265
|
if (reason instanceof _errors.UnknownResponse) {
|
|
@@ -357,11 +372,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
357
372
|
}
|
|
358
373
|
},
|
|
359
374
|
_getEventHandlers: function _getEventHandlers(eventType) {
|
|
375
|
+
var handlers = [];
|
|
376
|
+
if (!eventType) {
|
|
377
|
+
return handlers;
|
|
378
|
+
}
|
|
360
379
|
var _eventType$split = eventType.split('.'),
|
|
361
380
|
_eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
|
|
362
381
|
namespace = _eventType$split2[0],
|
|
363
382
|
name = _eventType$split2[1];
|
|
364
|
-
var handlers = [];
|
|
365
383
|
if (!this.webex[namespace] && !this.webex.internal[namespace]) {
|
|
366
384
|
return handlers;
|
|
367
385
|
}
|
|
@@ -407,8 +425,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
407
425
|
// if (code == 1011 && reason !== ping error) metric: unexpected disconnect
|
|
408
426
|
break;
|
|
409
427
|
case 1000:
|
|
410
|
-
case
|
|
411
|
-
//
|
|
428
|
+
case 3050:
|
|
429
|
+
// 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block
|
|
412
430
|
if (normalReconnectReasons.includes(reason)) {
|
|
413
431
|
this.logger.info("".concat(this.namespace, ": socket disconnected; reconnecting"));
|
|
414
432
|
this._emit('offline.transient', event);
|
|
@@ -431,6 +449,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
431
449
|
},
|
|
432
450
|
_onmessage: function _onmessage(event) {
|
|
433
451
|
var _this7 = this;
|
|
452
|
+
this._setTimeOffset(event);
|
|
434
453
|
var envelope = event.data;
|
|
435
454
|
if (process.env.ENABLE_MERCURY_LOGGING) {
|
|
436
455
|
this.logger.debug("".concat(this.namespace, ": message envelope: "), envelope);
|
|
@@ -449,24 +468,32 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
449
468
|
});
|
|
450
469
|
}, _promise.default.resolve()).then(function () {
|
|
451
470
|
_this7._emit('event', event.data);
|
|
452
|
-
|
|
453
|
-
_data$eventType$
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
471
|
+
if (data.eventType) {
|
|
472
|
+
var _data$eventType$split = data.eventType.split('.'),
|
|
473
|
+
_data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
|
|
474
|
+
namespace = _data$eventType$split2[0];
|
|
475
|
+
if (namespace === data.eventType) {
|
|
476
|
+
_this7._emit("event:".concat(namespace), envelope);
|
|
477
|
+
} else {
|
|
478
|
+
_this7._emit("event:".concat(namespace), envelope);
|
|
479
|
+
_this7._emit("event:".concat(data.eventType), envelope);
|
|
480
|
+
}
|
|
460
481
|
}
|
|
461
482
|
}).catch(function (reason) {
|
|
462
483
|
_this7.logger.error("".concat(_this7.namespace, ": error occurred processing socket message"), reason);
|
|
463
484
|
});
|
|
464
485
|
},
|
|
486
|
+
_setTimeOffset: function _setTimeOffset(event) {
|
|
487
|
+
var wsWriteTimestamp = event.data.wsWriteTimestamp;
|
|
488
|
+
if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {
|
|
489
|
+
this.mercuryTimeOffset = (0, _now.default)() - wsWriteTimestamp;
|
|
490
|
+
}
|
|
491
|
+
},
|
|
465
492
|
_reconnect: function _reconnect(webSocketUrl) {
|
|
466
493
|
this.logger.info("".concat(this.namespace, ": reconnecting"));
|
|
467
494
|
return this.connect(webSocketUrl);
|
|
468
495
|
},
|
|
469
|
-
version: "3.
|
|
496
|
+
version: "3.8.0-next.1"
|
|
470
497
|
}, ((0, _applyDecoratedDescriptor2.default)(_obj, "connect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "connect"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "disconnect", [_common.oneFlight], (0, _getOwnPropertyDescriptor.default)(_obj, "disconnect"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "listen", [_dec], (0, _getOwnPropertyDescriptor.default)(_obj, "listen"), _obj), (0, _applyDecoratedDescriptor2.default)(_obj, "stopListening", [_dec2], (0, _getOwnPropertyDescriptor.default)(_obj, "stopListening"), _obj)), _obj)));
|
|
471
498
|
var _default = exports.default = Mercury;
|
|
472
499
|
//# sourceMappingURL=mercury.js.map
|
package/dist/mercury.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","lastError","undefined","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","derived","listening","deps","fn","initialize","_this","on","envelope","data","webex","internal","feature","updateFeature","featureToggle","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","device","registered","register","then","_connectWithBackoff","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","reason","options","_this3","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this4","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","Error","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","refresh","catch","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this6","call","onComplete","err","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","stack","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n logout() {\n return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 1050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n @oneFlight\n disconnect(options) {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close(options || undefined));\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall.getNumRetries()});\n }\n this.logger.info(`${this.namespace}: connection attempt failed`, reason);\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n }\n },\n\n _getEventHandlers(eventType) {\n const [namespace, name] = eventType.split('.');\n const handlers = [];\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 1050: // 1050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket disconnected; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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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","getLastError","connect","webSocketUrl","_this2","logger","info","concat","_promise","resolve","Error","stack","device","registered","register","then","_connectWithBackoff","logout","disconnect","config","beforeLogoutOptionsCloseReason","includes","code","reason","options","_this3","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this4","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","clientTimestamp","_now","format","_attemptConnection","socketUrl","callback","_this5","Socket","attemptWSUrl","_onclose","_onmessage","_setTimeOffset","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_this5$config$authori","_this5$config$acknowl","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","authorizationRequired","acknowledgementRequired","defaultMercuryOptions","open","refresh","catch","_this5$backoffCall","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this6","call","onComplete","err","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","start","_len3","_key3","trigger","_getEventHandlers","eventType","handlers","_eventType$split","split","_eventType$split2","name","handlerName","camelCase","toLowerCase","unset","_reconnect","_this7","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","wsWriteTimestamp","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/* eslint-disable require-jsdoc */\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport url from 'url';\n\nimport {WebexPlugin} from '@webex/webex-core';\nimport {deprecated, oneFlight} from '@webex/common';\nimport {camelCase, get, set} from 'lodash';\nimport backoff from 'backoff';\n\nimport Socket from './socket';\nimport {\n BadRequest,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n ConnectionError,\n // NotFound\n} from './errors';\n\nconst normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];\n\nconst Mercury = WebexPlugin.extend({\n namespace: 'Mercury',\n lastError: undefined,\n\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n mercuryTimeOffset: {\n default: undefined,\n type: 'number',\n },\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n initialize() {\n /*\n When one of these legacy feature gets updated, this event would be triggered\n * group-message-notifications\n * mention-notifications\n * thread-notifications\n */\n this.on('event:featureToggle_update', (envelope) => {\n if (envelope && envelope.data) {\n this.webex.internal.feature.updateFeature(envelope.data.featureToggle);\n }\n });\n },\n\n /**\n * Get the last error.\n * @returns {any} The last error.\n */\n getLastError() {\n return this.lastError;\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n this.logger.info(`${this.namespace}: starting connection attempt`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n logout() {\n this.logger.info(`${this.namespace}: logout() called`);\n this.logger.info(\n `${this.namespace}: debug_mercury_logging stack: `,\n new Error('debug_mercury_logging').stack\n );\n\n return this.disconnect(\n this.config.beforeLogoutOptionsCloseReason &&\n !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)\n ? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}\n : undefined\n );\n },\n\n @oneFlight\n disconnect(options) {\n return new Promise((resolve) => {\n if (this.backoffCall) {\n this.logger.info(`${this.namespace}: aborting connection`);\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n resolve(this.socket.close(options || undefined));\n }\n\n resolve();\n });\n },\n\n @deprecated('Mercury#listen(): Use Mercury#connect() instead')\n listen() {\n /* eslint no-invalid-this: [0] */\n return this.connect();\n },\n\n @deprecated('Mercury#stopListening(): Use Mercury#disconnect() instead')\n stopListening() {\n /* eslint no-invalid-this: [0] */\n return this.disconnect();\n },\n\n processRegistrationStatusEvent(message) {\n this.localClusterServiceUrls = message.localClusterServiceUrls;\n },\n\n _applyOverrides(event) {\n if (!event || !event.headers) {\n return;\n }\n const headerKeys = Object.keys(event.headers);\n\n headerKeys.forEach((keyPath) => {\n set(event, keyPath, event.headers[keyPath]);\n });\n },\n\n _prepareUrl(webSocketUrl) {\n if (!webSocketUrl) {\n webSocketUrl = this.webex.internal.device.webSocketUrl;\n }\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);\n }\n\n return webSocketUrl;\n })\n .then((wsUrl) => {\n webSocketUrl = wsUrl;\n })\n .then(() => this.webex.internal.feature.getFeature('developer', 'web-shared-mercury'))\n .then((webSharedMercury) => {\n webSocketUrl = url.parse(webSocketUrl, true);\n Object.assign(webSocketUrl.query, {\n outboundWireFormat: 'text',\n bufferStates: true,\n aliasHttpStatus: true,\n });\n\n if (webSharedMercury) {\n Object.assign(webSocketUrl.query, {\n mercuryRegistrationStatus: true,\n isRegistrationRefreshEnabled: true,\n });\n Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');\n }\n\n if (get(this, 'webex.config.device.ephemeral', false)) {\n webSocketUrl.query.multipleConnections = true;\n }\n\n webSocketUrl.query.clientTimestamp = Date.now();\n\n return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('pong', (...args) => this._setTimeOffset(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n authorizationRequired: this.config.authorizationRequired ?? true,\n acknowledgementRequired: this.config.acknowledgementRequired ?? true,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n this.lastError = reason; // remember the last error\n\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall.getNumRetries()});\n }\n this.logger.info(\n `${this.namespace}: connection attempt failed`,\n reason,\n this.backoffCall?.getNumRetries() === 0 ? reason.stack : ''\n );\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(\n `${this.namespace}: error occurred in event handler:`,\n error,\n ' with args: ',\n args\n );\n }\n },\n\n _getEventHandlers(eventType) {\n const handlers = [];\n if (!eventType) {\n return handlers;\n }\n const [namespace, name] = eventType.split('.');\n\n if (!this.webex[namespace] && !this.webex.internal[namespace]) {\n return handlers;\n }\n\n const handlerName = camelCase(`process_${name}_event`);\n\n if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {\n handlers.push({\n name: handlerName,\n namespace,\n });\n }\n\n return handlers;\n },\n\n _onclose(event) {\n // I don't see any way to avoid the complexity or statement count in here.\n /* eslint complexity: [0] */\n\n try {\n const reason = event.reason && event.reason.toLowerCase();\n const socketUrl = this.socket.url;\n\n this.socket.removeAllListeners();\n this.unset('socket');\n this.connected = false;\n this._emit('offline', event);\n\n switch (event.code) {\n case 1003:\n // metric: disconnect\n this.logger.info(\n `${this.namespace}: Mercury service rejected last message; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info(`${this.namespace}: socket replaced; will not reconnect`);\n this._emit('offline.replaced', event);\n break;\n case 1001:\n case 1005:\n case 1006:\n case 1011:\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (code == 1011 && reason !== ping error) metric: unexpected disconnect\n break;\n case 1000:\n case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block\n if (normalReconnectReasons.includes(reason)) {\n this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);\n this._emit('offline.transient', event);\n this._reconnect(socketUrl);\n // metric: disconnect\n // if (reason === done forced) metric: force closure\n } else {\n this.logger.info(\n `${this.namespace}: socket disconnected; will not reconnect: ${event.reason}`\n );\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n this._setTimeOffset(event);\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n if (data.eventType) {\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _setTimeOffset(event) {\n const {wsWriteTimestamp} = event.data;\n if (typeof wsWriteTimestamp === 'number' && wsWriteTimestamp > 0) {\n this.mercuryTimeOffset = Date.now() - wsWriteTimestamp;\n }\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
4
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
7
12
|
value: true
|
|
8
13
|
});
|
|
9
14
|
exports.default = void 0;
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
16
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties"));
|
|
10
17
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
11
18
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
12
19
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
@@ -16,7 +23,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
|
|
|
16
23
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
17
24
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
18
25
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
19
|
-
var
|
|
26
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
|
|
20
27
|
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
|
|
21
28
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
22
29
|
var _events = require("events");
|
|
@@ -25,6 +32,9 @@ var _commonTimers = require("@webex/common-timers");
|
|
|
25
32
|
var _lodash = require("lodash");
|
|
26
33
|
var _uuid = _interopRequireDefault(require("uuid"));
|
|
27
34
|
var _errors = require("../errors");
|
|
35
|
+
var _excluded = ["authorizationRequired", "acknowledgementRequired"];
|
|
36
|
+
function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
37
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
28
38
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
29
39
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /*!
|
|
30
40
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -143,10 +153,12 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
143
153
|
return;
|
|
144
154
|
}
|
|
145
155
|
options = options || {};
|
|
146
|
-
if (options.code && options.code !== 1000 &&
|
|
147
|
-
reject(new Error('`options.code` must be 1000 or
|
|
156
|
+
if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {
|
|
157
|
+
reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
|
|
148
158
|
return;
|
|
149
159
|
}
|
|
160
|
+
var originalCode = options.code;
|
|
161
|
+
var originalReason = options.reason;
|
|
150
162
|
options = (0, _lodash.defaults)(options, {
|
|
151
163
|
code: 1000,
|
|
152
164
|
reason: 'Done'
|
|
@@ -154,9 +166,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
154
166
|
var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
|
|
155
167
|
try {
|
|
156
168
|
_this2.logger.info("socket,".concat(_this2._domain, ": no close event received, forcing closure"));
|
|
157
|
-
resolve(_this2.onclose(
|
|
158
|
-
code:
|
|
159
|
-
reason:
|
|
169
|
+
resolve(_this2.onclose(originalCode ? {
|
|
170
|
+
code: originalCode,
|
|
171
|
+
reason: originalReason || 'Done (unknown)'
|
|
160
172
|
} : {
|
|
161
173
|
code: 1000,
|
|
162
174
|
reason: 'Done (forced)'
|
|
@@ -185,6 +197,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
185
197
|
* @param {string} options.token (required)
|
|
186
198
|
* @param {string} options.trackingId (required)
|
|
187
199
|
* @param {Logger} options.logger (required)
|
|
200
|
+
* @param {boolean} options.authorizationRequired
|
|
201
|
+
* @param {boolean} options.acknowledgementRequired
|
|
188
202
|
* @param {string} options.logLevelToken
|
|
189
203
|
* @returns {Promise}
|
|
190
204
|
*/
|
|
@@ -209,8 +223,20 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
209
223
|
}
|
|
210
224
|
options = options || {};
|
|
211
225
|
(0, _common.checkRequired)(['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'], options);
|
|
212
|
-
|
|
213
|
-
|
|
226
|
+
|
|
227
|
+
// Destructure and set default values for authorizationRequired and acknowledgementRequired
|
|
228
|
+
var _options = options,
|
|
229
|
+
_options$authorizatio = _options.authorizationRequired,
|
|
230
|
+
authorizationRequired = _options$authorizatio === void 0 ? true : _options$authorizatio,
|
|
231
|
+
_options$acknowledgem = _options.acknowledgementRequired,
|
|
232
|
+
acknowledgementRequired = _options$acknowledgem === void 0 ? true : _options$acknowledgem,
|
|
233
|
+
remainingOptions = (0, _objectWithoutProperties2.default)(_options, _excluded);
|
|
234
|
+
_this3.authorizationRequired = authorizationRequired;
|
|
235
|
+
_this3.acknowledgementRequired = acknowledgementRequired;
|
|
236
|
+
|
|
237
|
+
// Assign the remaining options to the instance
|
|
238
|
+
(0, _keys.default)(remainingOptions).forEach(function (key) {
|
|
239
|
+
(0, _defineProperty3.default)(_this3, key, {
|
|
214
240
|
enumerable: false,
|
|
215
241
|
value: options[key]
|
|
216
242
|
});
|
|
@@ -244,11 +270,16 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
244
270
|
};
|
|
245
271
|
socket.onopen = function () {
|
|
246
272
|
_this3.logger.info("socket,".concat(_this3._domain, ": connected"));
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
273
|
+
// Added the "authorizationRequired" condition to bypass the "_authorize" in case of the contact center context, in which case it is configured as false.
|
|
274
|
+
if (_this3.authorizationRequired) {
|
|
275
|
+
_this3._authorize().then(function () {
|
|
276
|
+
_this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
|
|
277
|
+
socket.onclose = _this3.onclose;
|
|
278
|
+
resolve();
|
|
279
|
+
}).catch(reject);
|
|
280
|
+
} else {
|
|
281
|
+
_this3._ping();
|
|
282
|
+
}
|
|
252
283
|
};
|
|
253
284
|
socket.onerror = function (event) {
|
|
254
285
|
_this3.logger.warn("socket,".concat(_this3._domain, ": error event fired"), event);
|
|
@@ -301,9 +332,16 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
301
332
|
var processedEvent = {
|
|
302
333
|
data: data
|
|
303
334
|
};
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
335
|
+
|
|
336
|
+
// Added the "acknowledgementRequired" condition to bypass the "_acknowledge" in case of the contact center context, in which case it is configured as false.
|
|
337
|
+
if (this.acknowledgementRequired) {
|
|
338
|
+
this._acknowledge(processedEvent);
|
|
339
|
+
}
|
|
340
|
+
if (data.type === 'pong' || data.type === 'ping') {
|
|
341
|
+
// added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
|
|
342
|
+
this.emit('pong', _objectSpread(_objectSpread({}, processedEvent), {}, {
|
|
343
|
+
type: 'pong'
|
|
344
|
+
}));
|
|
307
345
|
} else {
|
|
308
346
|
this.emit('message', processedEvent);
|
|
309
347
|
}
|