@webex/internal-plugin-mercury 3.7.0-wxcc.1 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mercury.js +14 -22
- package/dist/mercury.js.map +1 -1
- package/dist/socket/socket-base.js +18 -52
- package/dist/socket/socket-base.js.map +1 -1
- package/package.json +17 -17
- package/src/mercury.js +9 -16
- package/src/socket/socket-base.js +18 -44
- package/test/unit/spec/mercury.js +6 -21
- package/test/unit/spec/socket.js +50 -87
package/dist/mercury.js
CHANGED
|
@@ -105,7 +105,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
105
105
|
this.logger.info("".concat(this.namespace, ": logout() called"));
|
|
106
106
|
this.logger.info("".concat(this.namespace, ": debug_mercury_logging stack: "), new Error('debug_mercury_logging').stack);
|
|
107
107
|
return this.disconnect(this.config.beforeLogoutOptionsCloseReason && !normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason) ? {
|
|
108
|
-
code:
|
|
108
|
+
code: 3050,
|
|
109
109
|
reason: this.config.beforeLogoutOptionsCloseReason
|
|
110
110
|
} : undefined);
|
|
111
111
|
},
|
|
@@ -205,7 +205,6 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
205
205
|
return _this5._emit.apply(_this5, ['ping-pong-latency'].concat(args));
|
|
206
206
|
});
|
|
207
207
|
_promise.default.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()]).then(function (_ref) {
|
|
208
|
-
var _this5$config$authori, _this5$config$acknowl;
|
|
209
208
|
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
210
209
|
webSocketUrl = _ref2[0],
|
|
211
210
|
token = _ref2[1];
|
|
@@ -221,9 +220,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
221
220
|
pongTimeout: _this5.config.pongTimeout,
|
|
222
221
|
token: token.toString(),
|
|
223
222
|
trackingId: "".concat(_this5.webex.sessionId, "_").concat((0, _now.default)()),
|
|
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
|
|
223
|
+
logger: _this5.logger
|
|
227
224
|
};
|
|
228
225
|
|
|
229
226
|
// if the consumer has supplied request options use them
|
|
@@ -372,14 +369,11 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
372
369
|
}
|
|
373
370
|
},
|
|
374
371
|
_getEventHandlers: function _getEventHandlers(eventType) {
|
|
375
|
-
var handlers = [];
|
|
376
|
-
if (!eventType) {
|
|
377
|
-
return handlers;
|
|
378
|
-
}
|
|
379
372
|
var _eventType$split = eventType.split('.'),
|
|
380
373
|
_eventType$split2 = (0, _slicedToArray2.default)(_eventType$split, 2),
|
|
381
374
|
namespace = _eventType$split2[0],
|
|
382
375
|
name = _eventType$split2[1];
|
|
376
|
+
var handlers = [];
|
|
383
377
|
if (!this.webex[namespace] && !this.webex.internal[namespace]) {
|
|
384
378
|
return handlers;
|
|
385
379
|
}
|
|
@@ -425,8 +419,8 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
425
419
|
// if (code == 1011 && reason !== ping error) metric: unexpected disconnect
|
|
426
420
|
break;
|
|
427
421
|
case 1000:
|
|
428
|
-
case
|
|
429
|
-
//
|
|
422
|
+
case 3050:
|
|
423
|
+
// 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block
|
|
430
424
|
if (normalReconnectReasons.includes(reason)) {
|
|
431
425
|
this.logger.info("".concat(this.namespace, ": socket disconnected; reconnecting"));
|
|
432
426
|
this._emit('offline.transient', event);
|
|
@@ -468,16 +462,14 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
468
462
|
});
|
|
469
463
|
}, _promise.default.resolve()).then(function () {
|
|
470
464
|
_this7._emit('event', event.data);
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
_this7._emit("event:".concat(data.eventType), envelope);
|
|
480
|
-
}
|
|
465
|
+
var _data$eventType$split = data.eventType.split('.'),
|
|
466
|
+
_data$eventType$split2 = (0, _slicedToArray2.default)(_data$eventType$split, 1),
|
|
467
|
+
namespace = _data$eventType$split2[0];
|
|
468
|
+
if (namespace === data.eventType) {
|
|
469
|
+
_this7._emit("event:".concat(namespace), envelope);
|
|
470
|
+
} else {
|
|
471
|
+
_this7._emit("event:".concat(namespace), envelope);
|
|
472
|
+
_this7._emit("event:".concat(data.eventType), envelope);
|
|
481
473
|
}
|
|
482
474
|
}).catch(function (reason) {
|
|
483
475
|
_this7.logger.error("".concat(_this7.namespace, ": error occurred processing socket message"), reason);
|
|
@@ -493,7 +485,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
493
485
|
this.logger.info("".concat(this.namespace, ": reconnecting"));
|
|
494
486
|
return this.connect(webSocketUrl);
|
|
495
487
|
},
|
|
496
|
-
version: "3.
|
|
488
|
+
version: "3.8.0"
|
|
497
489
|
}, ((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)));
|
|
498
490
|
var _default = exports.default = Mercury;
|
|
499
491
|
//# 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","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: 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('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 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 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
|
+
{"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","_ref2","_slicedToArray2","token","msg","reject","forceCloseDelay","pingInterval","pongTimeout","toString","trackingId","sessionId","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","_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","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 };\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 [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 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 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,19 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
-
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
-
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
-
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
9
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
10
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
11
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
12
7
|
value: true
|
|
13
8
|
});
|
|
14
9
|
exports.default = void 0;
|
|
15
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
16
|
-
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties"));
|
|
17
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
18
11
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
19
12
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
@@ -23,7 +16,7 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
|
|
|
23
16
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
24
17
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
25
18
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
26
|
-
var
|
|
19
|
+
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
|
|
27
20
|
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
|
|
28
21
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
29
22
|
var _events = require("events");
|
|
@@ -32,9 +25,6 @@ var _commonTimers = require("@webex/common-timers");
|
|
|
32
25
|
var _lodash = require("lodash");
|
|
33
26
|
var _uuid = _interopRequireDefault(require("uuid"));
|
|
34
27
|
var _errors = require("../errors");
|
|
35
|
-
var _excluded = ["authorizationRequired", "acknowledgementRequired"];
|
|
36
|
-
function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
37
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
38
28
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
39
29
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /*!
|
|
40
30
|
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
@@ -153,10 +143,12 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
153
143
|
return;
|
|
154
144
|
}
|
|
155
145
|
options = options || {};
|
|
156
|
-
if (options.code && options.code !== 1000 &&
|
|
157
|
-
reject(new Error('`options.code` must be 1000 or
|
|
146
|
+
if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {
|
|
147
|
+
reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
|
|
158
148
|
return;
|
|
159
149
|
}
|
|
150
|
+
var originalCode = options.code;
|
|
151
|
+
var originalReason = options.reason;
|
|
160
152
|
options = (0, _lodash.defaults)(options, {
|
|
161
153
|
code: 1000,
|
|
162
154
|
reason: 'Done'
|
|
@@ -164,9 +156,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
164
156
|
var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
|
|
165
157
|
try {
|
|
166
158
|
_this2.logger.info("socket,".concat(_this2._domain, ": no close event received, forcing closure"));
|
|
167
|
-
resolve(_this2.onclose(
|
|
168
|
-
code:
|
|
169
|
-
reason:
|
|
159
|
+
resolve(_this2.onclose(originalCode ? {
|
|
160
|
+
code: originalCode,
|
|
161
|
+
reason: originalReason || 'Done (unknown)'
|
|
170
162
|
} : {
|
|
171
163
|
code: 1000,
|
|
172
164
|
reason: 'Done (forced)'
|
|
@@ -195,8 +187,6 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
195
187
|
* @param {string} options.token (required)
|
|
196
188
|
* @param {string} options.trackingId (required)
|
|
197
189
|
* @param {Logger} options.logger (required)
|
|
198
|
-
* @param {boolean} options.authorizationRequired
|
|
199
|
-
* @param {boolean} options.acknowledgementRequired
|
|
200
190
|
* @param {string} options.logLevelToken
|
|
201
191
|
* @returns {Promise}
|
|
202
192
|
*/
|
|
@@ -221,20 +211,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
221
211
|
}
|
|
222
212
|
options = options || {};
|
|
223
213
|
(0, _common.checkRequired)(['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'], options);
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
var _options = options,
|
|
227
|
-
_options$authorizatio = _options.authorizationRequired,
|
|
228
|
-
authorizationRequired = _options$authorizatio === void 0 ? true : _options$authorizatio,
|
|
229
|
-
_options$acknowledgem = _options.acknowledgementRequired,
|
|
230
|
-
acknowledgementRequired = _options$acknowledgem === void 0 ? true : _options$acknowledgem,
|
|
231
|
-
remainingOptions = (0, _objectWithoutProperties2.default)(_options, _excluded);
|
|
232
|
-
_this3.authorizationRequired = authorizationRequired;
|
|
233
|
-
_this3.acknowledgementRequired = acknowledgementRequired;
|
|
234
|
-
|
|
235
|
-
// Assign the remaining options to the instance
|
|
236
|
-
(0, _keys.default)(remainingOptions).forEach(function (key) {
|
|
237
|
-
(0, _defineProperty3.default)(_this3, key, {
|
|
214
|
+
(0, _keys.default)(options).forEach(function (key) {
|
|
215
|
+
(0, _defineProperty.default)(_this3, key, {
|
|
238
216
|
enumerable: false,
|
|
239
217
|
value: options[key]
|
|
240
218
|
});
|
|
@@ -268,16 +246,11 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
268
246
|
};
|
|
269
247
|
socket.onopen = function () {
|
|
270
248
|
_this3.logger.info("socket,".concat(_this3._domain, ": connected"));
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
resolve();
|
|
277
|
-
}).catch(reject);
|
|
278
|
-
} else {
|
|
279
|
-
_this3._ping();
|
|
280
|
-
}
|
|
249
|
+
_this3._authorize().then(function () {
|
|
250
|
+
_this3.logger.info("socket,".concat(_this3._domain, ": authorized"));
|
|
251
|
+
socket.onclose = _this3.onclose;
|
|
252
|
+
resolve();
|
|
253
|
+
}).catch(reject);
|
|
281
254
|
};
|
|
282
255
|
socket.onerror = function (event) {
|
|
283
256
|
_this3.logger.warn("socket,".concat(_this3._domain, ": error event fired"), event);
|
|
@@ -330,16 +303,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
330
303
|
var processedEvent = {
|
|
331
304
|
data: data
|
|
332
305
|
};
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
this._acknowledge(processedEvent);
|
|
337
|
-
}
|
|
338
|
-
if (data.type === 'pong' || data.type === 'ping') {
|
|
339
|
-
// added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
|
|
340
|
-
this.emit('pong', _objectSpread(_objectSpread({}, processedEvent), {}, {
|
|
341
|
-
type: 'pong'
|
|
342
|
-
}));
|
|
306
|
+
this._acknowledge(processedEvent);
|
|
307
|
+
if (data.type === 'pong') {
|
|
308
|
+
this.emit('pong', processedEvent);
|
|
343
309
|
} else {
|
|
344
310
|
this.emit('message', processedEvent);
|
|
345
311
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_excluded","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","result","NewTarget","constructor","_Reflect$construct","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","defaults","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","URL","hostname","_unused","checkRequired","_options","_options$authorizatio","authorizationRequired","_options$acknowledgem","acknowledgementRequired","remainingOptions","_objectWithoutProperties2","_keys","_defineProperty3","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","_ping","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","_this4","isObject","_stringify","has","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","calculateLatency","pingTimestamp","now","performance","latency","pongTimeout","EventEmitter"],"sources":["socket-base.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\nimport {checkRequired} from '@webex/common';\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\nimport uuid from 'uuid';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\n\nconst sockets = new WeakMap();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get binaryType() {\n return sockets.get(this).binaryType;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get bufferedAmount() {\n return sockets.get(this).bufferedAmount;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get extensions() {\n return sockets.get(this).extensions;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get protocol() {\n return sockets.get(this).protocol;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {number}\n */\n get readyState() {\n return sockets.get(this).readyState;\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n get url() {\n return sockets.get(this).url;\n }\n\n /**\n * Provides the environmentally appropriate constructor (ws in NodeJS,\n * WebSocket in browsers)\n * @returns {WebSocket}\n */\n static getWebSocketConstructor() {\n throw new Error(\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\n );\n }\n\n /**\n * Closes the socket\n * @param {Object} options\n * @param {string} options.reason\n * @param {number} options.code\n * @returns {Promise}\n */\n close(options) {\n return new Promise((resolve, reject) => {\n const socket = sockets.get(this);\n\n if (!socket) {\n // Open has not been called yet so there is no socket to close\n resolve();\n\n return;\n }\n // logger is defined once open is called\n this.logger.info(`socket,${this._domain}: closing`);\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n options = options || {};\n if (\n options.code &&\n options.code !== 1000 &&\n options.code !== 1050 &&\n (options.code < 3000 || options.code > 4999)\n ) {\n reject(\n new Error('`options.code` must be 1000 or 1050 or between 3000 and 4999 (inclusive)')\n );\n\n return;\n }\n\n options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n options.code === 1050\n ? {code: 1050, reason: options.reason}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n socket.close(options.code, options.reason);\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {number} options.pingInterval (required)\n * @param {number} options.pongTimeout (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @param {boolean} options.authorizationRequired\n * @param {boolean} options.acknowledgementRequired\n * @param {string} options.logLevelToken\n * @returns {Promise}\n */\n open(url, options) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise((resolve, reject) => {\n /* eslint complexity: [0] */\n if (!url) {\n reject(new Error('`url` is required'));\n\n return;\n }\n\n if (sockets.get(this)) {\n reject(new Error('Socket#open() can only be called once per instance'));\n\n return;\n }\n\n options = options || {};\n\n checkRequired(\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\n options\n );\n\n // Destructure and set default values for authorizationRequired and acknowledgementRequired\n const {\n authorizationRequired = true,\n acknowledgementRequired = true,\n ...remainingOptions\n } = options;\n\n this.authorizationRequired = authorizationRequired;\n this.acknowledgementRequired = acknowledgementRequired;\n\n // Assign the remaining options to the instance\n Object.keys(remainingOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: options[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor();\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], options);\n\n socket.binaryType = 'arraybuffer';\n socket.onmessage = this.onmessage;\n\n socket.onclose = (event) => {\n event = this._fixCloseCode(event);\n this.logger.info(`socket,${this._domain}: closed before open`, event.code, event.reason);\n switch (event.code) {\n case 1005:\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\n // it's a bad websocket url. That'll trigger a device refresh; if it\n // turns out we had a bad token, the device refresh should 401 and\n // trigger a token refresh.\n return reject(new UnknownResponse(event));\n case 4400:\n return reject(new BadRequest(event));\n case 4401:\n return reject(new NotAuthorized(event));\n case 4403:\n return reject(new Forbidden(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n // Added the \"authorizationRequired\" condition to bypass the \"_authorize\" in case of the contact center context, in which case it is configured as false.\n if (this.authorizationRequired) {\n this._authorize()\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n } else {\n this._ping();\n }\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n clearTimeout(this.pongTimer);\n clearTimeout(this.pingTimer);\n\n event = this._fixCloseCode(event);\n this.emit('close', event);\n\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\n // we don't have a retain cycle.\n this.removeAllListeners();\n }\n\n /**\n * Handles incoming message events\n * @param {MessageEvent} event\n * @returns {undefined}\n */\n onmessage(event) {\n try {\n const data = JSON.parse(event.data);\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\n\n this.logger.debug(`socket,${this._domain}: sequence number: `, sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket,${this._domain}: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\n );\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\n }\n this.expectedSequenceNumber = sequenceNumber + 1;\n\n // Yes, it's a little weird looking; we want to emit message events that\n // look like normal socket message events, but event.data cannot be\n // modified and we don't actually care about anything but the data property\n const processedEvent = {data};\n\n // Added the \"acknowledgementRequired\" condition to bypass the \"_acknowledge\" in case of the contact center context, in which case it is configured as false.\n if (this.acknowledgementRequired) {\n this._acknowledge(processedEvent);\n }\n if (data.type === 'pong' || data.type === 'ping') {\n // added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'\n this.emit('pong', {...processedEvent, type: 'pong'});\n } else {\n this.emit('message', processedEvent);\n }\n } catch (error) {\n // The above code should only be able to throw if we receive an unparsable\n // message from Mercury. At this time, the only action we have is to\n // ignore it and move on.\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: error while receiving WebSocket message`, error);\n }\n }\n\n /**\n * Sends a message up the socket\n * @param {mixed} data\n * @returns {Promise}\n */\n send(data) {\n return new Promise((resolve, reject) => {\n if (this.readyState !== 1) {\n return reject(new Error('INVALID_STATE_ERROR'));\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n socket.send(data);\n\n return resolve();\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.id')) {\n return Promise.reject(new Error('`event.data.id` is required'));\n }\n\n return this.send({\n messageId: event.data.id,\n type: 'ack',\n });\n }\n\n /**\n * Sends an auth message up the socket\n * @private\n * @returns {Promise}\n */\n _authorize() {\n return new Promise((resolve) => {\n this.logger.info(`socket,${this._domain}: authorizing`);\n this.send({\n id: uuid.v4(),\n type: 'authorization',\n data: {\n token: this.token,\n },\n trackingId: this.trackingId,\n logLevelToken: this.logLevelToken,\n });\n\n const waitForBufferState = (event) => {\n if (\n !event.data.type &&\n (event.data.data.eventType === 'mercury.buffer_state' ||\n event.data.data.eventType === 'mercury.registration_status')\n ) {\n this.removeListener('message', waitForBufferState);\n this._ping();\n resolve();\n }\n };\n\n this.once('message', waitForBufferState);\n });\n }\n\n /**\n * Deals with the fact that some browsers drop some close codes (but not\n * close reasons).\n * @param {CloseEvent} event\n * @private\n * @returns {CloseEvent}\n */\n _fixCloseCode(event) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 4000;\n break;\n case 'authentication failed':\n case 'authentication did not happen within the timeout window of 30000 seconds.':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n\n /**\n * Sends a ping up the socket and confirms we get it back\n * @param {[type]} id\n * @private\n * @returns {[type]}\n */\n _ping(id) {\n const confirmPongId = (event) => {\n try {\n this.logger.debug(`socket,${this._domain}: pong`, event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info(\n `socket,${this._domain}: received pong for wrong ping id, closing socket`\n );\n this.logger.debug(`socket,${this._domain}: expected`, id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch',\n });\n }\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in confirmPongId`, error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info(\n `socket,${this._domain}: pong not receive in expected period, closing socket`\n );\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn(\n `socket,${this._domain}: failed to close socket after missed pong`,\n reason\n );\n });\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(`socket,${this._domain}: error occurred in onPongNotReceived`, error);\n }\n };\n\n const scheduleNextPingAndCancelPongTimer = () => {\n try {\n clearTimeout(this.pongTimer);\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\n } catch (error) {\n // This try/catch block was added as a debugging step; to the best of my\n // knowledge, the above can never throw.\n /* istanbul ignore next */\n this.logger.error(\n `socket,${this._domain}: error occurred in scheduleNextPingAndCancelPongTimer`,\n error\n );\n }\n };\n\n const calculateLatency = (pingTimestamp) => {\n const now = performance.now();\n const latency = now - pingTimestamp;\n\n this.logger.debug(`socket,${this._domain}: latency: `, latency);\n this.emit('ping-pong-latency', latency);\n };\n\n id = id || uuid.v4();\n const pingTimestamp = performance.now();\n\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n this.once('pong', () => calculateLatency(pingTimestamp));\n this.logger.debug(`socket,${this._domain}: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_events","require","_common","_commonTimers","_lodash","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","exports","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","_domain","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","code","Error","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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"}
|
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.
|
|
33
|
-
"@webex/test-helper-mocha": "3.
|
|
34
|
-
"@webex/test-helper-mock-webex": "3.
|
|
35
|
-
"@webex/test-helper-test-users": "3.
|
|
32
|
+
"@webex/test-helper-chai": "3.8.0",
|
|
33
|
+
"@webex/test-helper-mocha": "3.8.0",
|
|
34
|
+
"@webex/test-helper-mock-webex": "3.8.0",
|
|
35
|
+
"@webex/test-helper-test-users": "3.8.0",
|
|
36
36
|
"eslint": "^8.24.0",
|
|
37
37
|
"prettier": "^2.7.1",
|
|
38
38
|
"sinon": "^9.2.4"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@webex/common": "3.
|
|
42
|
-
"@webex/common-timers": "3.
|
|
43
|
-
"@webex/internal-plugin-device": "3.
|
|
44
|
-
"@webex/internal-plugin-feature": "3.
|
|
45
|
-
"@webex/internal-plugin-metrics": "3.
|
|
46
|
-
"@webex/test-helper-chai": "3.
|
|
47
|
-
"@webex/test-helper-mocha": "3.
|
|
48
|
-
"@webex/test-helper-mock-web-socket": "3.
|
|
49
|
-
"@webex/test-helper-mock-webex": "3.
|
|
50
|
-
"@webex/test-helper-refresh-callback": "3.
|
|
51
|
-
"@webex/test-helper-test-users": "3.
|
|
52
|
-
"@webex/webex-core": "3.
|
|
41
|
+
"@webex/common": "3.8.0",
|
|
42
|
+
"@webex/common-timers": "3.8.0",
|
|
43
|
+
"@webex/internal-plugin-device": "3.8.0",
|
|
44
|
+
"@webex/internal-plugin-feature": "3.8.0",
|
|
45
|
+
"@webex/internal-plugin-metrics": "3.8.0",
|
|
46
|
+
"@webex/test-helper-chai": "3.8.0",
|
|
47
|
+
"@webex/test-helper-mocha": "3.8.0",
|
|
48
|
+
"@webex/test-helper-mock-web-socket": "3.8.0",
|
|
49
|
+
"@webex/test-helper-mock-webex": "3.8.0",
|
|
50
|
+
"@webex/test-helper-refresh-callback": "3.8.0",
|
|
51
|
+
"@webex/test-helper-test-users": "3.8.0",
|
|
52
|
+
"@webex/webex-core": "3.8.0",
|
|
53
53
|
"backoff": "^2.5.0",
|
|
54
54
|
"lodash": "^4.17.21",
|
|
55
55
|
"uuid": "^3.3.2",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"test:style": "eslint ./src/**/*.*",
|
|
65
65
|
"test:unit": "webex-legacy-tools test --unit --runner mocha"
|
|
66
66
|
},
|
|
67
|
-
"version": "3.
|
|
67
|
+
"version": "3.8.0"
|
|
68
68
|
}
|
package/src/mercury.js
CHANGED
|
@@ -113,7 +113,7 @@ const Mercury = WebexPlugin.extend({
|
|
|
113
113
|
return this.disconnect(
|
|
114
114
|
this.config.beforeLogoutOptionsCloseReason &&
|
|
115
115
|
!normalReconnectReasons.includes(this.config.beforeLogoutOptionsCloseReason)
|
|
116
|
-
? {code:
|
|
116
|
+
? {code: 3050, reason: this.config.beforeLogoutOptionsCloseReason}
|
|
117
117
|
: undefined
|
|
118
118
|
);
|
|
119
119
|
},
|
|
@@ -236,8 +236,6 @@ const Mercury = WebexPlugin.extend({
|
|
|
236
236
|
token: token.toString(),
|
|
237
237
|
trackingId: `${this.webex.sessionId}_${Date.now()}`,
|
|
238
238
|
logger: this.logger,
|
|
239
|
-
authorizationRequired: this.config.authorizationRequired ?? true,
|
|
240
|
-
acknowledgementRequired: this.config.acknowledgementRequired ?? true,
|
|
241
239
|
};
|
|
242
240
|
|
|
243
241
|
// if the consumer has supplied request options use them
|
|
@@ -426,11 +424,8 @@ const Mercury = WebexPlugin.extend({
|
|
|
426
424
|
},
|
|
427
425
|
|
|
428
426
|
_getEventHandlers(eventType) {
|
|
429
|
-
const handlers = [];
|
|
430
|
-
if (!eventType) {
|
|
431
|
-
return handlers;
|
|
432
|
-
}
|
|
433
427
|
const [namespace, name] = eventType.split('.');
|
|
428
|
+
const handlers = [];
|
|
434
429
|
|
|
435
430
|
if (!this.webex[namespace] && !this.webex.internal[namespace]) {
|
|
436
431
|
return handlers;
|
|
@@ -485,7 +480,7 @@ const Mercury = WebexPlugin.extend({
|
|
|
485
480
|
// if (code == 1011 && reason !== ping error) metric: unexpected disconnect
|
|
486
481
|
break;
|
|
487
482
|
case 1000:
|
|
488
|
-
case
|
|
483
|
+
case 3050: // 3050 indicates logout form of closure, default to old behavior, use config reason defined by consumer to proceed with the permanent block
|
|
489
484
|
if (normalReconnectReasons.includes(reason)) {
|
|
490
485
|
this.logger.info(`${this.namespace}: socket disconnected; reconnecting`);
|
|
491
486
|
this._emit('offline.transient', event);
|
|
@@ -542,15 +537,13 @@ const Mercury = WebexPlugin.extend({
|
|
|
542
537
|
)
|
|
543
538
|
.then(() => {
|
|
544
539
|
this._emit('event', event.data);
|
|
545
|
-
|
|
546
|
-
const [namespace] = data.eventType.split('.');
|
|
540
|
+
const [namespace] = data.eventType.split('.');
|
|
547
541
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
}
|
|
542
|
+
if (namespace === data.eventType) {
|
|
543
|
+
this._emit(`event:${namespace}`, envelope);
|
|
544
|
+
} else {
|
|
545
|
+
this._emit(`event:${namespace}`, envelope);
|
|
546
|
+
this._emit(`event:${data.eventType}`, envelope);
|
|
554
547
|
}
|
|
555
548
|
})
|
|
556
549
|
.catch((reason) => {
|
|
@@ -122,19 +122,15 @@ export default class Socket extends EventEmitter {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
options = options || {};
|
|
125
|
-
if (
|
|
126
|
-
options.code
|
|
127
|
-
options.code !== 1000 &&
|
|
128
|
-
options.code !== 1050 &&
|
|
129
|
-
(options.code < 3000 || options.code > 4999)
|
|
130
|
-
) {
|
|
131
|
-
reject(
|
|
132
|
-
new Error('`options.code` must be 1000 or 1050 or between 3000 and 4999 (inclusive)')
|
|
133
|
-
);
|
|
125
|
+
if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {
|
|
126
|
+
reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
|
|
134
127
|
|
|
135
128
|
return;
|
|
136
129
|
}
|
|
137
130
|
|
|
131
|
+
const originalCode = options.code;
|
|
132
|
+
const originalReason = options.reason;
|
|
133
|
+
|
|
138
134
|
options = defaults(options, {
|
|
139
135
|
code: 1000,
|
|
140
136
|
reason: 'Done',
|
|
@@ -145,8 +141,8 @@ export default class Socket extends EventEmitter {
|
|
|
145
141
|
this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);
|
|
146
142
|
resolve(
|
|
147
143
|
this.onclose(
|
|
148
|
-
|
|
149
|
-
? {code:
|
|
144
|
+
originalCode
|
|
145
|
+
? {code: originalCode, reason: originalReason || 'Done (unknown)'}
|
|
150
146
|
: {
|
|
151
147
|
code: 1000,
|
|
152
148
|
reason: 'Done (forced)',
|
|
@@ -179,8 +175,6 @@ export default class Socket extends EventEmitter {
|
|
|
179
175
|
* @param {string} options.token (required)
|
|
180
176
|
* @param {string} options.trackingId (required)
|
|
181
177
|
* @param {Logger} options.logger (required)
|
|
182
|
-
* @param {boolean} options.authorizationRequired
|
|
183
|
-
* @param {boolean} options.acknowledgementRequired
|
|
184
178
|
* @param {string} options.logLevelToken
|
|
185
179
|
* @returns {Promise}
|
|
186
180
|
*/
|
|
@@ -212,18 +206,7 @@ export default class Socket extends EventEmitter {
|
|
|
212
206
|
options
|
|
213
207
|
);
|
|
214
208
|
|
|
215
|
-
|
|
216
|
-
const {
|
|
217
|
-
authorizationRequired = true,
|
|
218
|
-
acknowledgementRequired = true,
|
|
219
|
-
...remainingOptions
|
|
220
|
-
} = options;
|
|
221
|
-
|
|
222
|
-
this.authorizationRequired = authorizationRequired;
|
|
223
|
-
this.acknowledgementRequired = acknowledgementRequired;
|
|
224
|
-
|
|
225
|
-
// Assign the remaining options to the instance
|
|
226
|
-
Object.keys(remainingOptions).forEach((key) => {
|
|
209
|
+
Object.keys(options).forEach((key) => {
|
|
227
210
|
Reflect.defineProperty(this, key, {
|
|
228
211
|
enumerable: false,
|
|
229
212
|
value: options[key],
|
|
@@ -263,18 +246,13 @@ export default class Socket extends EventEmitter {
|
|
|
263
246
|
|
|
264
247
|
socket.onopen = () => {
|
|
265
248
|
this.logger.info(`socket,${this._domain}: connected`);
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
})
|
|
274
|
-
.catch(reject);
|
|
275
|
-
} else {
|
|
276
|
-
this._ping();
|
|
277
|
-
}
|
|
249
|
+
this._authorize()
|
|
250
|
+
.then(() => {
|
|
251
|
+
this.logger.info(`socket,${this._domain}: authorized`);
|
|
252
|
+
socket.onclose = this.onclose;
|
|
253
|
+
resolve();
|
|
254
|
+
})
|
|
255
|
+
.catch(reject);
|
|
278
256
|
};
|
|
279
257
|
|
|
280
258
|
socket.onerror = (event) => {
|
|
@@ -328,13 +306,9 @@ export default class Socket extends EventEmitter {
|
|
|
328
306
|
// modified and we don't actually care about anything but the data property
|
|
329
307
|
const processedEvent = {data};
|
|
330
308
|
|
|
331
|
-
|
|
332
|
-
if (
|
|
333
|
-
this.
|
|
334
|
-
}
|
|
335
|
-
if (data.type === 'pong' || data.type === 'ping') {
|
|
336
|
-
// added above ping condition to handle pong messages of contact center where type is 'ping' instead of 'pong'
|
|
337
|
-
this.emit('pong', {...processedEvent, type: 'pong'});
|
|
309
|
+
this._acknowledge(processedEvent);
|
|
310
|
+
if (data.type === 'pong') {
|
|
311
|
+
this.emit('pong', processedEvent);
|
|
338
312
|
} else {
|
|
339
313
|
this.emit('message', processedEvent);
|
|
340
314
|
}
|
|
@@ -521,18 +521,18 @@ describe('plugin-mercury', () => {
|
|
|
521
521
|
);
|
|
522
522
|
});
|
|
523
523
|
|
|
524
|
-
it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code
|
|
524
|
+
it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code 3050 for logout', () => {
|
|
525
525
|
sinon.stub(mercury, 'disconnect');
|
|
526
526
|
mercury.config.beforeLogoutOptionsCloseReason = 'done (permanent)';
|
|
527
527
|
mercury.logout();
|
|
528
|
-
assert.calledWith(mercury.disconnect, {code:
|
|
528
|
+
assert.calledWith(mercury.disconnect, {code: 3050, reason: 'done (permanent)'});
|
|
529
529
|
});
|
|
530
530
|
|
|
531
|
-
it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code
|
|
531
|
+
it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send code 3050 for logout if the reason is different than standard', () => {
|
|
532
532
|
sinon.stub(mercury, 'disconnect');
|
|
533
533
|
mercury.config.beforeLogoutOptionsCloseReason = 'test';
|
|
534
534
|
mercury.logout();
|
|
535
|
-
assert.calledWith(mercury.disconnect, {code:
|
|
535
|
+
assert.calledWith(mercury.disconnect, {code: 3050, reason: 'test'});
|
|
536
536
|
});
|
|
537
537
|
|
|
538
538
|
it('uses the config.beforeLogoutOptionsCloseReason to disconnect and will send undefined for logout if the reason is same as standard', () => {
|
|
@@ -565,7 +565,7 @@ describe('plugin-mercury', () => {
|
|
|
565
565
|
assert.isUndefined(mercury.mockWebSocket, 'Mercury does not have a mockWebSocket');
|
|
566
566
|
}));
|
|
567
567
|
|
|
568
|
-
it('disconnects the WebSocket with code
|
|
568
|
+
it('disconnects the WebSocket with code 3050', () =>
|
|
569
569
|
mercury
|
|
570
570
|
.connect()
|
|
571
571
|
.then(() => {
|
|
@@ -574,7 +574,7 @@ describe('plugin-mercury', () => {
|
|
|
574
574
|
const promise = mercury.disconnect();
|
|
575
575
|
|
|
576
576
|
mockWebSocket.emit('close', {
|
|
577
|
-
code:
|
|
577
|
+
code: 3050,
|
|
578
578
|
reason: 'done (permanent)',
|
|
579
579
|
});
|
|
580
580
|
|
|
@@ -727,21 +727,6 @@ describe('plugin-mercury', () => {
|
|
|
727
727
|
return res;
|
|
728
728
|
});
|
|
729
729
|
});
|
|
730
|
-
|
|
731
|
-
it('_onmessage without eventType', () => {
|
|
732
|
-
sinon.spy(mercury, '_getEventHandlers');
|
|
733
|
-
sinon.spy(mercury, '_emit');
|
|
734
|
-
const event = {data: {data: {eventType: undefined, mydata: 'some data'}}};
|
|
735
|
-
mercury.logger.error.restore();
|
|
736
|
-
sinon.stub(mercury.logger, 'error');
|
|
737
|
-
return Promise.resolve(mercury._onmessage(event)).then(() => {
|
|
738
|
-
assert.calledWith(mercury._getEventHandlers, undefined);
|
|
739
|
-
assert.calledWith(mercury._emit, 'event', event.data);
|
|
740
|
-
assert.notCalled(mercury.logger.error);
|
|
741
|
-
mercury._emit.restore();
|
|
742
|
-
mercury._getEventHandlers.restore();
|
|
743
|
-
});
|
|
744
|
-
});
|
|
745
730
|
});
|
|
746
731
|
|
|
747
732
|
describe('#_applyOverrides()', () => {
|
package/test/unit/spec/socket.js
CHANGED
|
@@ -139,7 +139,6 @@ describe('plugin-mercury', () => {
|
|
|
139
139
|
));
|
|
140
140
|
|
|
141
141
|
it('accepts a logLevelToken option', () => {
|
|
142
|
-
const acknowledgeSpy = sinon.spy(socket, '_acknowledge');
|
|
143
142
|
const promise = socket.open('ws://example.com', {
|
|
144
143
|
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
145
144
|
pingInterval: mockoptions.pingInterval,
|
|
@@ -148,7 +147,6 @@ describe('plugin-mercury', () => {
|
|
|
148
147
|
token: 'mocktoken',
|
|
149
148
|
trackingId: 'mocktrackingid',
|
|
150
149
|
logLevelToken: 'mocklogleveltoken',
|
|
151
|
-
acknowledgementRequired: true,
|
|
152
150
|
});
|
|
153
151
|
|
|
154
152
|
mockWebSocket.readyState = 1;
|
|
@@ -164,83 +162,9 @@ describe('plugin-mercury', () => {
|
|
|
164
162
|
});
|
|
165
163
|
|
|
166
164
|
return promise.then(() => {
|
|
167
|
-
assert.called(acknowledgeSpy);
|
|
168
165
|
assert.equal(socket.logLevelToken, 'mocklogleveltoken');
|
|
169
166
|
});
|
|
170
167
|
});
|
|
171
|
-
|
|
172
|
-
it('accepts acknowledgementRequired option as false and skip acknowledge', () => {
|
|
173
|
-
const acknowledgeSpy = sinon.spy(socket, '_acknowledge');
|
|
174
|
-
const promise = socket.open('ws://example.com', {
|
|
175
|
-
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
176
|
-
pingInterval: mockoptions.pingInterval,
|
|
177
|
-
pongTimeout: mockoptions.pongTimeout,
|
|
178
|
-
logger: console,
|
|
179
|
-
token: 'mocktoken',
|
|
180
|
-
trackingId: 'mocktrackingid',
|
|
181
|
-
logLevelToken: 'mocklogleveltoken',
|
|
182
|
-
acknowledgementRequired: false,
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
mockWebSocket.readyState = 1;
|
|
186
|
-
mockWebSocket.emit('open');
|
|
187
|
-
|
|
188
|
-
mockWebSocket.emit('message', {
|
|
189
|
-
data: JSON.stringify({
|
|
190
|
-
id: uuid.v4(),
|
|
191
|
-
data: {
|
|
192
|
-
eventType: 'mercury.buffer_state',
|
|
193
|
-
},
|
|
194
|
-
}),
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
return promise.then(() => {
|
|
198
|
-
assert.notCalled(acknowledgeSpy);
|
|
199
|
-
assert.equal(socket.logLevelToken, 'mocklogleveltoken');
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('accepts authorizationRequired option as false and skip authorize', () => {
|
|
204
|
-
const s = new Socket();
|
|
205
|
-
const authorizeSpy = sinon.spy(socket, '_authorize');
|
|
206
|
-
socket.open('ws://example.com', {
|
|
207
|
-
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
208
|
-
pingInterval: mockoptions.pingInterval,
|
|
209
|
-
pongTimeout: mockoptions.pongTimeout,
|
|
210
|
-
logger: console,
|
|
211
|
-
token: 'mocktoken',
|
|
212
|
-
trackingId: 'mocktrackingid',
|
|
213
|
-
logLevelToken: 'mocklogleveltoken',
|
|
214
|
-
authorizationRequired: false,
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
mockWebSocket.readyState = 1;
|
|
218
|
-
mockWebSocket.emit('open');
|
|
219
|
-
|
|
220
|
-
assert.notCalled(authorizeSpy);
|
|
221
|
-
assert.called(socket._ping);
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
it('accepts authorizationRequired option as true and calles authorize', () => {
|
|
225
|
-
const s = new Socket();
|
|
226
|
-
const authorizeSpy = sinon.spy(socket, '_authorize');
|
|
227
|
-
socket.open('ws://example.com', {
|
|
228
|
-
forceCloseDelay: mockoptions.forceCloseDelay,
|
|
229
|
-
pingInterval: mockoptions.pingInterval,
|
|
230
|
-
pongTimeout: mockoptions.pongTimeout,
|
|
231
|
-
logger: console,
|
|
232
|
-
token: 'mocktoken',
|
|
233
|
-
trackingId: 'mocktrackingid',
|
|
234
|
-
logLevelToken: 'mocklogleveltoken',
|
|
235
|
-
authorizationRequired: true,
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
mockWebSocket.readyState = 1;
|
|
239
|
-
mockWebSocket.emit('open');
|
|
240
|
-
|
|
241
|
-
assert.called(authorizeSpy);
|
|
242
|
-
assert.called(socket._ping);
|
|
243
|
-
});
|
|
244
168
|
});
|
|
245
169
|
|
|
246
170
|
describe('#binaryType', () => {
|
|
@@ -528,7 +452,7 @@ describe('plugin-mercury', () => {
|
|
|
528
452
|
Promise.all([
|
|
529
453
|
assert.isRejected(
|
|
530
454
|
socket.close({code: 1001}),
|
|
531
|
-
/`options.code` must be 1000 or
|
|
455
|
+
/`options.code` must be 1000 or between 3000 and 4999 \(inclusive\)/
|
|
532
456
|
),
|
|
533
457
|
socket.close({code: 1000}),
|
|
534
458
|
]));
|
|
@@ -544,10 +468,10 @@ describe('plugin-mercury', () => {
|
|
|
544
468
|
it('accepts the logout reason', () =>
|
|
545
469
|
socket
|
|
546
470
|
.close({
|
|
547
|
-
code:
|
|
471
|
+
code: 3050,
|
|
548
472
|
reason: 'done (permanent)',
|
|
549
473
|
})
|
|
550
|
-
.then(() => assert.calledWith(mockWebSocket.close,
|
|
474
|
+
.then(() => assert.calledWith(mockWebSocket.close, 3050, 'done (permanent)')));
|
|
551
475
|
|
|
552
476
|
it('can safely be called called multiple times', () => {
|
|
553
477
|
const p1 = socket.close();
|
|
@@ -597,7 +521,7 @@ describe('plugin-mercury', () => {
|
|
|
597
521
|
});
|
|
598
522
|
});
|
|
599
523
|
|
|
600
|
-
it('signals closure if no close frame is received within the specified window, but uses the initial options as
|
|
524
|
+
it('signals closure if no close frame is received within the specified window, but uses the initial options as 3050 if specified by options call', () => {
|
|
601
525
|
const socket = new Socket();
|
|
602
526
|
const promise = socket.open('ws://example.com', mockoptions);
|
|
603
527
|
|
|
@@ -622,21 +546,21 @@ describe('plugin-mercury', () => {
|
|
|
622
546
|
});
|
|
623
547
|
mockWebSocket.removeAllListeners('close');
|
|
624
548
|
|
|
625
|
-
const promise = socket.close({code:
|
|
549
|
+
const promise = socket.close({code: 3050, reason: 'done (permanent)'});
|
|
626
550
|
|
|
627
551
|
clock.tick(mockoptions.forceCloseDelay);
|
|
628
552
|
|
|
629
553
|
return promise.then(() => {
|
|
630
554
|
assert.called(spy);
|
|
631
555
|
assert.calledWith(spy, {
|
|
632
|
-
code:
|
|
556
|
+
code: 3050,
|
|
633
557
|
reason: 'done (permanent)',
|
|
634
558
|
});
|
|
635
559
|
});
|
|
636
560
|
});
|
|
637
561
|
});
|
|
638
562
|
|
|
639
|
-
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not
|
|
563
|
+
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {
|
|
640
564
|
const socket = new Socket();
|
|
641
565
|
const promise = socket.open('ws://example.com', mockoptions);
|
|
642
566
|
|
|
@@ -669,7 +593,46 @@ describe('plugin-mercury', () => {
|
|
|
669
593
|
assert.called(spy);
|
|
670
594
|
assert.calledWith(spy, {
|
|
671
595
|
code: 1000,
|
|
672
|
-
reason: '
|
|
596
|
+
reason: 'test',
|
|
597
|
+
});
|
|
598
|
+
});
|
|
599
|
+
});
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
it('signals closure if no close frame is received within the specified window, and uses default options as 1000 if the code is not 3050', () => {
|
|
603
|
+
const socket = new Socket();
|
|
604
|
+
const promise = socket.open('ws://example.com', mockoptions);
|
|
605
|
+
|
|
606
|
+
mockWebSocket.readyState = 1;
|
|
607
|
+
mockWebSocket.emit('open');
|
|
608
|
+
mockWebSocket.emit('message', {
|
|
609
|
+
data: JSON.stringify({
|
|
610
|
+
id: uuid.v4(),
|
|
611
|
+
data: {
|
|
612
|
+
eventType: 'mercury.buffer_state',
|
|
613
|
+
},
|
|
614
|
+
}),
|
|
615
|
+
});
|
|
616
|
+
|
|
617
|
+
return promise.then(() => {
|
|
618
|
+
const spy = sinon.spy();
|
|
619
|
+
|
|
620
|
+
socket.on('close', spy);
|
|
621
|
+
mockWebSocket.close = () =>
|
|
622
|
+
new Promise(() => {
|
|
623
|
+
/* eslint no-inline-comments: [0] */
|
|
624
|
+
});
|
|
625
|
+
mockWebSocket.removeAllListeners('close');
|
|
626
|
+
|
|
627
|
+
const promise = socket.close({code: 1000});
|
|
628
|
+
|
|
629
|
+
clock.tick(mockoptions.forceCloseDelay);
|
|
630
|
+
|
|
631
|
+
return promise.then(() => {
|
|
632
|
+
assert.called(spy);
|
|
633
|
+
assert.calledWith(spy, {
|
|
634
|
+
code: 1000,
|
|
635
|
+
reason: 'Done (unknown)',
|
|
673
636
|
});
|
|
674
637
|
});
|
|
675
638
|
});
|
|
@@ -781,9 +744,9 @@ describe('plugin-mercury', () => {
|
|
|
781
744
|
);
|
|
782
745
|
});
|
|
783
746
|
|
|
784
|
-
describe('when it receives close code
|
|
785
|
-
it(`emits code
|
|
786
|
-
const code =
|
|
747
|
+
describe('when it receives close code 3050', () => {
|
|
748
|
+
it(`emits code 3050 for code 3050`, () => {
|
|
749
|
+
const code = 3050;
|
|
787
750
|
const reason = 'done (permanent)';
|
|
788
751
|
const spy = sinon.spy();
|
|
789
752
|
|