@webex/internal-plugin-mercury 3.0.0-next.6 → 3.0.0-next.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -1
- package/dist/mercury.js +9 -2
- package/dist/mercury.js.map +1 -1
- package/package.json +17 -17
- package/src/mercury.js +8 -1
- package/test/unit/spec/mercury.js +33 -4
package/README.md
CHANGED
|
@@ -29,7 +29,9 @@ const webex = new WebexCore();
|
|
|
29
29
|
webex.internal.mercury.WHATEVER;
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
##
|
|
32
|
+
## Config Options
|
|
33
|
+
|
|
34
|
+
### Using A Proxy Agent To Open A Websocket Connection
|
|
33
35
|
|
|
34
36
|
For consumers who are not using the SDK via the browser it may be necessary to configure a proxy agent in order to connect with Mercury and open a Websocket in a proxy environment.
|
|
35
37
|
|
|
@@ -51,6 +53,17 @@ webex.init({
|
|
|
51
53
|
});
|
|
52
54
|
```
|
|
53
55
|
|
|
56
|
+
### Retries
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
The default behaviour is for Mercury to continue to try to connect with an exponential back-off. This behavior can be adjusted with the following config params:
|
|
60
|
+
|
|
61
|
+
- `maxRetries` - the number of times it will retry before error. Default: 0
|
|
62
|
+
- `initialConnectionMaxRetries` - the number of times it will retry before error on the first connection. Once a connection has been established, any further connection attempts will use `maxRetries`. Default: 0
|
|
63
|
+
- `backoffTimeMax` - The maximum time between connection attempts in ms. Default: 32000
|
|
64
|
+
- `backoffTimeReset` - The time before the first retry in ms. Default: 1000
|
|
65
|
+
|
|
66
|
+
|
|
54
67
|
## Maintainers
|
|
55
68
|
|
|
56
69
|
This package is maintained by [Cisco Webex for Developers](https://developer.webex.com/).
|
package/dist/mercury.js
CHANGED
|
@@ -45,6 +45,10 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
45
45
|
default: false,
|
|
46
46
|
type: 'boolean'
|
|
47
47
|
},
|
|
48
|
+
hasEverConnected: {
|
|
49
|
+
default: false,
|
|
50
|
+
type: 'boolean'
|
|
51
|
+
},
|
|
48
52
|
socket: 'object',
|
|
49
53
|
localClusterServiceUrls: 'object'
|
|
50
54
|
},
|
|
@@ -270,6 +274,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
270
274
|
return reject(err);
|
|
271
275
|
}
|
|
272
276
|
_this5.connected = true;
|
|
277
|
+
_this5.hasEverConnected = true;
|
|
273
278
|
_this5._emit('online');
|
|
274
279
|
return resolve();
|
|
275
280
|
};
|
|
@@ -283,7 +288,9 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
283
288
|
initialDelay: _this5.config.backoffTimeReset,
|
|
284
289
|
maxDelay: _this5.config.backoffTimeMax
|
|
285
290
|
}));
|
|
286
|
-
if (_this5.config.
|
|
291
|
+
if (_this5.config.initialConnectionMaxRetries && !_this5.hasEverConnected) {
|
|
292
|
+
call.failAfter(_this5.config.initialConnectionMaxRetries);
|
|
293
|
+
} else if (_this5.config.maxRetries) {
|
|
287
294
|
call.failAfter(_this5.config.maxRetries);
|
|
288
295
|
}
|
|
289
296
|
call.on('abort', function () {
|
|
@@ -428,7 +435,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
|
|
|
428
435
|
this.logger.info("".concat(this.namespace, ": reconnecting"));
|
|
429
436
|
return this.connect(webSocketUrl);
|
|
430
437
|
},
|
|
431
|
-
version: "3.0.0-next.
|
|
438
|
+
version: "3.0.0-next.7"
|
|
432
439
|
}, ((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)));
|
|
433
440
|
var _default = exports.default = Mercury;
|
|
434
441
|
//# 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","session","connected","type","connecting","socket","localClusterServiceUrls","derived","listening","deps","fn","connect","webSocketUrl","_this","logger","info","concat","_promise","resolve","webex","internal","device","registered","register","then","_connectWithBackoff","disconnect","_this2","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this3","feature","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","format","_attemptConnection","socketUrl","callback","_this4","Socket","attemptWSUrl","on","_onclose","_onmessage","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","Error","options","forceCloseDelay","config","pingInterval","pongTimeout","toString","trackingId","sessionId","_now","defaultMercuryOptions","open","refresh","catch","reason","code","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this5","call","onComplete","err","undefined","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","maxRetries","failAfter","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","stack","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","includes","_this6","envelope","data","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/*!\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\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n @oneFlight\n disconnect() {\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());\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 return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall.getNumRetries()});\n }\n this.logger.info(`${this.namespace}: connection attempt failed`, reason);\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this._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.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(`${this.namespace}: error occurred in event handler`, {\n error,\n arguments: 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 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(`${this.namespace}: socket disconnected; will not reconnect`);\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AAOkB,IAAAO,IAAA,EAAAC,KAAA,EAAAC,IAAA;AAnBlB;AACA;AACA;AAFA,SAAAC,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,aAAA,CAAAH,CAAA,OAAAI,6BAAA,QAAAC,CAAA,GAAAD,6BAAA,CAAAJ,CAAA,GAAAC,CAAA,KAAAI,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAL,CAAA,WAAAM,iCAAA,CAAAP,CAAA,EAAAC,CAAA,EAAAO,UAAA,OAAAN,CAAA,CAAAO,IAAA,CAAAC,KAAA,CAAAR,CAAA,EAAAG,CAAA,YAAAH,CAAA;AAAA,SAAAS,cAAAX,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAW,SAAA,CAAAC,MAAA,EAAAZ,CAAA,UAAAC,CAAA,WAAAU,SAAA,CAAAX,CAAA,IAAAW,SAAA,CAAAX,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAe,MAAA,CAAAZ,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,CAAAC,OAAA,EAAAjB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAiB,iCAAA,GAAAC,wBAAA,CAAAnB,CAAA,EAAAkB,iCAAA,CAAAhB,CAAA,KAAAH,OAAA,CAAAe,MAAA,CAAAZ,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAmB,sBAAA,CAAApB,CAAA,EAAAC,CAAA,EAAAM,iCAAA,CAAAL,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAqBA,IAAMqB,sBAAsB,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,eAAe,CAAC;AAE9F,IAAMC,OAAO,GAAGC,sBAAW,CAACC,MAAM,EAAA5B,IAAA,GA8D/B,IAAA6B,kBAAU,EAAC,iDAAiD,CAAC,EAAA5B,KAAA,GAM7D,IAAA4B,kBAAU,EAAC,2DAA2D,CAAC,GAAA3B,IAAA,GApEvC;EACjC4B,SAAS,EAAE,SAAS;EAEpBC,OAAO,EAAE;IACPC,SAAS,EAAE;MACTX,OAAO,EAAE,KAAK;MACdY,IAAI,EAAE;IACR,CAAC;IACDC,UAAU,EAAE;MACVb,OAAO,EAAE,KAAK;MACdY,IAAI,EAAE;IACR,CAAC;IACDE,MAAM,EAAE,QAAQ;IAChBC,uBAAuB,EAAE;EAC3B,CAAC;EAEDC,OAAO,EAAE;IACPC,SAAS,EAAE;MACTC,IAAI,EAAE,CAAC,WAAW,CAAC;MACnBC,EAAE,WAAAA,GAAA,EAAG;QACH,OAAO,IAAI,CAACR,SAAS;MACvB;IACF;EACF,CAAC;EAGDS,OAAO,WAAAA,QAACC,YAAY,EAAE;IAAA,IAAAC,KAAA;IACpB,IAAI,IAAI,CAACX,SAAS,EAAE;MAClB,IAAI,CAACY,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,gDAA6C,CAAC;MAEhF,OAAOiB,QAAA,CAAA1B,OAAA,CAAQ2B,OAAO,CAAC,CAAC;IAC1B;IAEA,IAAI,CAACd,UAAU,GAAG,IAAI;IAEtB,OAAOa,QAAA,CAAA1B,OAAA,CAAQ2B,OAAO,CACpB,IAAI,CAACC,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACC,UAAU,IAAI,IAAI,CAACH,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACE,QAAQ,CAAC,CAC/E,CAAC,CAACC,IAAI,CAAC,YAAM;MACXX,KAAI,CAACC,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIH,KAAI,CAACb,SAAS,iBAAc,CAAC;MAEjD,OAAOa,KAAI,CAACY,mBAAmB,CAACb,YAAY,CAAC;IAC/C,CAAC,CAAC;EACJ,CAAC;EAGDc,UAAU,WAAAA,WAAA,EAAG;IAAA,IAAAC,MAAA;IACX,OAAO,IAAAV,QAAA,CAAA1B,OAAA,CAAY,UAAC2B,OAAO,EAAK;MAC9B,IAAIS,MAAI,CAACC,WAAW,EAAE;QACpBD,MAAI,CAACb,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIW,MAAI,CAAC3B,SAAS,0BAAuB,CAAC;QAC1D2B,MAAI,CAACC,WAAW,CAACC,KAAK,CAAC,CAAC;MAC1B;MAEA,IAAIF,MAAI,CAACtB,MAAM,EAAE;QACfsB,MAAI,CAACtB,MAAM,CAACyB,kBAAkB,CAAC,SAAS,CAAC;QACzCH,MAAI,CAACI,IAAI,CAAC,SAAS,EAAEb,OAAO,CAAC;QAC7BA,OAAO,CAACS,MAAI,CAACtB,MAAM,CAAC2B,KAAK,CAAC,CAAC,CAAC;MAC9B;MAEAd,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;EACJ,CAAC;EAGDe,MAAM,WAAAA,OAAA,EAAG;IACP;IACA,OAAO,IAAI,CAACtB,OAAO,CAAC,CAAC;EACvB,CAAC;EAGDuB,aAAa,WAAAA,cAAA,EAAG;IACd;IACA,OAAO,IAAI,CAACR,UAAU,CAAC,CAAC;EAC1B,CAAC;EAEDS,8BAA8B,WAAAA,+BAACC,OAAO,EAAE;IACtC,IAAI,CAAC9B,uBAAuB,GAAG8B,OAAO,CAAC9B,uBAAuB;EAChE,CAAC;EAED+B,eAAe,WAAAA,gBAACC,KAAK,EAAE;IACrB,IAAI,CAACA,KAAK,IAAI,CAACA,KAAK,CAACC,OAAO,EAAE;MAC5B;IACF;IACA,IAAMC,UAAU,GAAG,IAAAC,KAAA,CAAAlD,OAAA,EAAY+C,KAAK,CAACC,OAAO,CAAC;IAE7CC,UAAU,CAACnD,OAAO,CAAC,UAACqD,OAAO,EAAK;MAC9B,IAAAC,WAAG,EAACL,KAAK,EAAEI,OAAO,EAAEJ,KAAK,CAACC,OAAO,CAACG,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;EACJ,CAAC;EAEDE,WAAW,WAAAA,YAAChC,YAAY,EAAE;IAAA,IAAAiC,MAAA;IACxB,IAAI,CAACjC,YAAY,EAAE;MACjBA,YAAY,GAAG,IAAI,CAACO,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACT,YAAY;IACxD;IAEA,OAAO,IAAI,CAACO,KAAK,CAACC,QAAQ,CAAC0B,OAAO,CAC/BC,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChDvB,IAAI,CAAC,UAACwB,kBAAkB,EAAK;MAC5B,IAAIA,kBAAkB,EAAE;QACtB,OAAOH,MAAI,CAAC1B,KAAK,CAACC,QAAQ,CAAC6B,QAAQ,CAACC,2BAA2B,CAACtC,YAAY,CAAC;MAC/E;MAEA,OAAOA,YAAY;IACrB,CAAC,CAAC,CACDY,IAAI,CAAC,UAAC2B,KAAK,EAAK;MACfvC,YAAY,GAAGuC,KAAK;IACtB,CAAC,CAAC,CACD3B,IAAI,CAAC;MAAA,OAAMqB,MAAI,CAAC1B,KAAK,CAACC,QAAQ,CAAC0B,OAAO,CAACC,UAAU,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAAA,EAAC,CACrFvB,IAAI,CAAC,UAAC4B,gBAAgB,EAAK;MAC1BxC,YAAY,GAAGyC,YAAG,CAACC,KAAK,CAAC1C,YAAY,EAAE,IAAI,CAAC;MAC5C,IAAA2C,OAAA,CAAAhE,OAAA,EAAcqB,YAAY,CAAC4C,KAAK,EAAE;QAChCC,kBAAkB,EAAE,MAAM;QAC1BC,YAAY,EAAE,IAAI;QAClBC,eAAe,EAAE;MACnB,CAAC,CAAC;MAEF,IAAIP,gBAAgB,EAAE;QACpB,IAAAG,OAAA,CAAAhE,OAAA,EAAcqB,YAAY,CAAC4C,KAAK,EAAE;UAChCI,yBAAyB,EAAE,IAAI;UAC/BC,4BAA4B,EAAE;QAChC,CAAC,CAAC;QACF,IAAAC,eAAA,CAAAvE,OAAA,EAAuBqB,YAAY,CAAC4C,KAAK,EAAE,cAAc,CAAC;MAC5D;MAEA,IAAI,IAAAO,WAAG,EAAClB,MAAI,EAAE,+BAA+B,EAAE,KAAK,CAAC,EAAE;QACrDjC,YAAY,CAAC4C,KAAK,CAACQ,mBAAmB,GAAG,IAAI;MAC/C;MAEA,OAAOX,YAAG,CAACY,MAAM,CAACrD,YAAY,CAAC;IACjC,CAAC,CAAC;EACN,CAAC;EAEDsD,kBAAkB,WAAAA,mBAACC,SAAS,EAAEC,QAAQ,EAAE;IAAA,IAAAC,MAAA;IACtC,IAAMhE,MAAM,GAAG,IAAIiE,eAAM,CAAC,CAAC;IAC3B,IAAIC,YAAY;IAEhBlE,MAAM,CAACmE,EAAE,CAAC,OAAO,EAAE;MAAA,OAAaH,MAAI,CAACI,QAAQ,CAAAzF,KAAA,CAAbqF,MAAI,EAAAnF,SAAiB,CAAC;IAAA,EAAC;IACvDmB,MAAM,CAACmE,EAAE,CAAC,SAAS,EAAE;MAAA,OAAaH,MAAI,CAACK,UAAU,CAAA1F,KAAA,CAAfqF,MAAI,EAAAnF,SAAmB,CAAC;IAAA,EAAC;IAC3DmB,MAAM,CAACmE,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAAG,IAAA,GAAAzF,SAAA,CAAAC,MAAA,EAAIyF,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;QAAJF,IAAI,CAAAE,IAAA,IAAA5F,SAAA,CAAA4F,IAAA;MAAA;MAAA,OAAKT,MAAI,CAACU,KAAK,CAAA/F,KAAA,CAAVqF,MAAI,GAAO,mBAAmB,EAAArD,MAAA,CAAK4D,IAAI,EAAC;IAAA,EAAC;IACrFvE,MAAM,CAACmE,EAAE,CAAC,mBAAmB,EAAE;MAAA,SAAAQ,KAAA,GAAA9F,SAAA,CAAAC,MAAA,EAAIyF,IAAI,OAAAC,KAAA,CAAAG,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;QAAJL,IAAI,CAAAK,KAAA,IAAA/F,SAAA,CAAA+F,KAAA;MAAA;MAAA,OAAKZ,MAAI,CAACU,KAAK,CAAA/F,KAAA,CAAVqF,MAAI,GAAO,mBAAmB,EAAArD,MAAA,CAAK4D,IAAI,EAAC;IAAA,EAAC;IAErF3D,QAAA,CAAA1B,OAAA,CAAQ2F,GAAG,CAAC,CAAC,IAAI,CAACtC,WAAW,CAACuB,SAAS,CAAC,EAAE,IAAI,CAAChD,KAAK,CAACgE,WAAW,CAACC,YAAY,CAAC,CAAC,CAAC,CAAC,CAC9E5D,IAAI,CAAC,UAAA6D,IAAA,EAA2B;MAAA,IAAAC,KAAA,OAAAC,eAAA,CAAAhG,OAAA,EAAA8F,IAAA;QAAzBzE,YAAY,GAAA0E,KAAA;QAAEE,KAAK,GAAAF,KAAA;MACzB,IAAI,CAACjB,MAAI,CAACzC,WAAW,EAAE;QACrB,IAAM6D,GAAG,MAAAzE,MAAA,CAAMqD,MAAI,CAACrE,SAAS,6DAA0D;QAEvFqE,MAAI,CAACvD,MAAM,CAACC,IAAI,CAAC0E,GAAG,CAAC;QAErB,OAAOxE,QAAA,CAAA1B,OAAA,CAAQmG,MAAM,CAAC,IAAIC,KAAK,CAACF,GAAG,CAAC,CAAC;MACvC;MAEAlB,YAAY,GAAG3D,YAAY;MAE3B,IAAIgF,OAAO,GAAG;QACZC,eAAe,EAAExB,MAAI,CAACyB,MAAM,CAACD,eAAe;QAC5CE,YAAY,EAAE1B,MAAI,CAACyB,MAAM,CAACC,YAAY;QACtCC,WAAW,EAAE3B,MAAI,CAACyB,MAAM,CAACE,WAAW;QACpCR,KAAK,EAAEA,KAAK,CAACS,QAAQ,CAAC,CAAC;QACvBC,UAAU,KAAAlF,MAAA,CAAKqD,MAAI,CAAClD,KAAK,CAACgF,SAAS,OAAAnF,MAAA,CAAI,IAAAoF,IAAA,CAAA7G,OAAA,EAAS,CAAC,CAAE;QACnDuB,MAAM,EAAEuD,MAAI,CAACvD;MACf,CAAC;;MAED;MACA,IAAIuD,MAAI,CAAClD,KAAK,CAAC2E,MAAM,CAACO,qBAAqB,EAAE;QAC3ChC,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIqD,MAAI,CAACrE,SAAS,6BAA0B,CAAC;QAC7D4F,OAAO,GAAA3G,aAAA,CAAAA,aAAA,KAAO2G,OAAO,GAAKvB,MAAI,CAAClD,KAAK,CAAC2E,MAAM,CAACO,qBAAqB,CAAC;MACpE;;MAEA;MACA;MACAhC,MAAI,CAAChE,MAAM,GAAGA,MAAM;MAEpBgE,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIqD,MAAI,CAACrE,SAAS,uBAAAgB,MAAA,CAAoBJ,YAAY,CAAE,CAAC;MAErE,OAAOP,MAAM,CAACiG,IAAI,CAAC1F,YAAY,EAAEgF,OAAO,CAAC;IAC3C,CAAC,CAAC,CACDpE,IAAI,CAAC,YAAM;MACV6C,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CACXqD,MAAI,CAACrE,SAAS,+DAAAgB,MAAA,CAA4DuD,YAAY,CAC3F,CAAC;MACDH,QAAQ,CAAC,CAAC;MAEV,OAAOC,MAAI,CAAClD,KAAK,CAACC,QAAQ,CAAC0B,OAAO,CAC/BC,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChDvB,IAAI,CAAC,UAACwB,kBAAkB,EAAK;QAC5B,IAAIA,kBAAkB,EAAE;UACtB,OAAOqB,MAAI,CAAClD,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACkF,OAAO,CAAC,CAAC;QAC7C;QAEA,OAAOtF,QAAA,CAAA1B,OAAA,CAAQ2B,OAAO,CAAC,CAAC;MAC1B,CAAC,CAAC;IACN,CAAC,CAAC,CACDsF,KAAK,CAAC,UAACC,MAAM,EAAK;MACjB;MACA;MACA;MACA;MACA,IAAIA,MAAM,CAACC,IAAI,KAAK,IAAI,IAAIrC,MAAI,CAACzC,WAAW,IAAIyC,MAAI,CAACzC,WAAW,CAAC+E,aAAa,CAAC,CAAC,GAAG,CAAC,EAAE;QACpFtC,MAAI,CAACU,KAAK,CAAC,mBAAmB,EAAE0B,MAAM,EAAE;UAACG,OAAO,EAAEvC,MAAI,CAACzC,WAAW,CAAC+E,aAAa,CAAC;QAAC,CAAC,CAAC;MACtF;MACAtC,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIqD,MAAI,CAACrE,SAAS,kCAA+ByG,MAAM,CAAC;MACxE;MACA;MACA,IAAIA,MAAM,YAAYI,uBAAe,EAAE;QACrCxC,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CACXqD,MAAI,CAACrE,SAAS,qEACnB,CAAC;QAED,OAAOqE,MAAI,CAAClD,KAAK,CAACC,QAAQ,CAACC,MAAM,CAACkF,OAAO,CAAC,CAAC,CAAC/E,IAAI,CAAC;UAAA,OAAM4C,QAAQ,CAACqC,MAAM,CAAC;QAAA,EAAC;MAC1E;MACA;MACA,IAAIA,MAAM,YAAYK,qBAAa,EAAE;QACnCzC,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIqD,MAAI,CAACrE,SAAS,kDAA+C,CAAC;QAElF,OAAOqE,MAAI,CAAClD,KAAK,CAACgE,WAAW,CAACoB,OAAO,CAAC;UAACQ,KAAK,EAAE;QAAI,CAAC,CAAC,CAACvF,IAAI,CAAC;UAAA,OAAM4C,QAAQ,CAACqC,MAAM,CAAC;QAAA,EAAC;MACnF;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,IAAIA,MAAM,YAAYO,kBAAU,IAAIP,MAAM,YAAYQ,iBAAS,EAAE;QAC/D5C,MAAI,CAACvD,MAAM,CAACoG,IAAI,IAAAlG,MAAA,CAAIqD,MAAI,CAACrE,SAAS,mDAAgD,CAAC;QACnFqE,MAAI,CAACzC,WAAW,CAACC,KAAK,CAAC,CAAC;QAExB,OAAOuC,QAAQ,CAACqC,MAAM,CAAC;MACzB;MACA,IAAIA,MAAM,YAAYU,uBAAe,EAAE;QACrC,OAAO9C,MAAI,CAAClD,KAAK,CAACC,QAAQ,CAAC0B,OAAO,CAC/BC,UAAU,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAChDvB,IAAI,CAAC,UAACwB,kBAAkB,EAAK;UAC5B,IAAIA,kBAAkB,EAAE;YACtBqB,MAAI,CAACvD,MAAM,CAACC,IAAI,IAAAC,MAAA,CACXqD,MAAI,CAACrE,SAAS,uHAAAgB,MAAA,CAAoHuD,YAAY,cAAAvD,MAAA,CAAWyF,MAAM,CAACrE,OAAO,CAC5K,CAAC;YAED,OAAOiC,MAAI,CAAClD,KAAK,CAACC,QAAQ,CAAC6B,QAAQ,CAACmE,aAAa,CAAC7C,YAAY,CAAC;UACjE;UAEA,OAAO,IAAI;QACb,CAAC,CAAC,CACD/C,IAAI,CAAC;UAAA,OAAM4C,QAAQ,CAACqC,MAAM,CAAC;QAAA,EAAC;MACjC;MAEA,OAAOrC,QAAQ,CAACqC,MAAM,CAAC;IACzB,CAAC,CAAC,CACDD,KAAK,CAAC,UAACC,MAAM,EAAK;MACjBpC,MAAI,CAACvD,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAIqD,MAAI,CAACrE,SAAS,4CAAyCyG,MAAM,CAAC;MACnFrC,QAAQ,CAACqC,MAAM,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDhF,mBAAmB,WAAAA,oBAACb,YAAY,EAAE;IAAA,IAAA0G,MAAA;IAChC,OAAO,IAAArG,QAAA,CAAA1B,OAAA,CAAY,UAAC2B,OAAO,EAAEwE,MAAM,EAAK;MACtC;MACA;MACA,IAAI6B,IAAI;MACR,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,GAAG,EAAK;QAC1BH,MAAI,CAAClH,UAAU,GAAG,KAAK;QAEvBkH,MAAI,CAAC1F,WAAW,GAAG8F,SAAS;QAC5B,IAAID,GAAG,EAAE;UACPH,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAEZsG,MAAI,CAACtH,SAAS,gCAAAgB,MAAA,CACauG,IAAI,CAACZ,aAAa,CAAC,CAAC,+DAAA3F,MAAA,CAA4DyG,GAAG,CAClH,CAAC;UAED,OAAO/B,MAAM,CAAC+B,GAAG,CAAC;QACpB;QACAH,MAAI,CAACpH,SAAS,GAAG,IAAI;QACrBoH,MAAI,CAACvC,KAAK,CAAC,QAAQ,CAAC;QAEpB,OAAO7D,OAAO,CAAC,CAAC;MAClB,CAAC;;MAED;MACAqG,IAAI,GAAGI,gBAAO,CAACJ,IAAI,CAAC,UAACnD,QAAQ,EAAK;QAChCkD,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACtH,SAAS,qCAAAgB,MAAA,CAAkCuG,IAAI,CAACZ,aAAa,CAAC,CAAC,CAAE,CAAC;QAC3FW,MAAI,CAACpD,kBAAkB,CAACtD,YAAY,EAAEwD,QAAQ,CAAC;MACjD,CAAC,EAAEoD,UAAU,CAAC;MAEdD,IAAI,CAACK,WAAW,CACd,IAAID,gBAAO,CAACE,mBAAmB,CAAC;QAC9BC,YAAY,EAAER,MAAI,CAACxB,MAAM,CAACiC,gBAAgB;QAC1CC,QAAQ,EAAEV,MAAI,CAACxB,MAAM,CAACmC;MACxB,CAAC,CACH,CAAC;MAED,IAAIX,MAAI,CAACxB,MAAM,CAACoC,UAAU,EAAE;QAC1BX,IAAI,CAACY,SAAS,CAACb,MAAI,CAACxB,MAAM,CAACoC,UAAU,CAAC;MACxC;MAEAX,IAAI,CAAC/C,EAAE,CAAC,OAAO,EAAE,YAAM;QACrB8C,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACtH,SAAS,yBAAsB,CAAC;QACzD0F,MAAM,CAAC,IAAIC,KAAK,CAAC,4BAA4B,CAAC,CAAC;MACjD,CAAC,CAAC;MAEF4B,IAAI,CAAC/C,EAAE,CAAC,UAAU,EAAE,UAACiD,GAAG,EAAK;QAC3B,IAAIA,GAAG,EAAE;UACP,IAAMW,MAAM,GAAGb,IAAI,CAACZ,aAAa,CAAC,CAAC;UACnC,IAAM0B,KAAK,GAAGC,IAAI,CAACC,GAAG,CAAChB,IAAI,CAACiB,SAAS,CAACC,iBAAiB,EAAEnB,MAAI,CAACxB,MAAM,CAACmC,cAAc,CAAC;UAEpFX,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CACXsG,MAAI,CAACtH,SAAS,4CAAAgB,MAAA,CAAyCoH,MAAM,GAAG,CAAC,UAAApH,MAAA,CAAOqH,KAAK,QAClF,CAAC;UACD;UACA,IAAIK,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;YAC1CtB,MAAI,CAACxG,MAAM,CAAC+H,KAAK,IAAA7H,MAAA,CAAIsG,MAAI,CAACtH,SAAS,SAAMyH,GAAG,EAAEA,GAAG,CAACqB,KAAK,CAAC;UAC1D;UAEA;QACF;QACAxB,MAAI,CAACxG,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAIsG,MAAI,CAACtH,SAAS,gBAAa,CAAC;MAClD,CAAC,CAAC;MAEFuH,IAAI,CAACwB,KAAK,CAAC,CAAC;MAEZzB,MAAI,CAAC1F,WAAW,GAAG2F,IAAI;IACzB,CAAC,CAAC;EACJ,CAAC;EAEDxC,KAAK,WAAAA,MAAA,EAAU;IAAA,SAAAiE,KAAA,GAAA9J,SAAA,CAAAC,MAAA,EAANyF,IAAI,OAAAC,KAAA,CAAAmE,KAAA,GAAAC,KAAA,MAAAA,KAAA,GAAAD,KAAA,EAAAC,KAAA;MAAJrE,IAAI,CAAAqE,KAAA,IAAA/J,SAAA,CAAA+J,KAAA;IAAA;IACX,IAAI;MACF,IAAI,CAACC,OAAO,CAAAlK,KAAA,CAAZ,IAAI,EAAY4F,IAAI,CAAC;IACvB,CAAC,CAAC,OAAOyC,KAAK,EAAE;MACd,IAAI,CAACvG,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAI,IAAI,CAAChB,SAAS,wCAAqC;QACtEqH,KAAK,EAALA,KAAK;QACLnI,SAAS,EAAE0F;MACb,CAAC,CAAC;IACJ;EACF,CAAC;EAEDuE,iBAAiB,WAAAA,kBAACC,SAAS,EAAE;IAC3B,IAAAC,gBAAA,GAA0BD,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;MAAAC,iBAAA,OAAAhE,eAAA,CAAAhG,OAAA,EAAA8J,gBAAA;MAAvCrJ,SAAS,GAAAuJ,iBAAA;MAAEC,IAAI,GAAAD,iBAAA;IACtB,IAAME,QAAQ,GAAG,EAAE;IAEnB,IAAI,CAAC,IAAI,CAACtI,KAAK,CAACnB,SAAS,CAAC,IAAI,CAAC,IAAI,CAACmB,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAE;MAC7D,OAAOyJ,QAAQ;IACjB;IAEA,IAAMC,WAAW,GAAG,IAAAC,iBAAS,aAAA3I,MAAA,CAAYwI,IAAI,WAAQ,CAAC;IAEtD,IAAI,CAAC,IAAI,CAACrI,KAAK,CAACnB,SAAS,CAAC,IAAI,IAAI,CAACmB,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAE0J,WAAW,CAAC,EAAE;MAC1ED,QAAQ,CAAC1K,IAAI,CAAC;QACZyK,IAAI,EAAEE,WAAW;QACjB1J,SAAS,EAATA;MACF,CAAC,CAAC;IACJ;IAEA,OAAOyJ,QAAQ;EACjB,CAAC;EAEDhF,QAAQ,WAAAA,SAACnC,KAAK,EAAE;IACd;IACA;;IAEA,IAAI;MACF,IAAMmE,MAAM,GAAGnE,KAAK,CAACmE,MAAM,IAAInE,KAAK,CAACmE,MAAM,CAACmD,WAAW,CAAC,CAAC;MACzD,IAAMzF,SAAS,GAAG,IAAI,CAAC9D,MAAM,CAACgD,GAAG;MAEjC,IAAI,CAAChD,MAAM,CAACyB,kBAAkB,CAAC,CAAC;MAChC,IAAI,CAAC+H,KAAK,CAAC,QAAQ,CAAC;MACpB,IAAI,CAAC3J,SAAS,GAAG,KAAK;MACtB,IAAI,CAAC6E,KAAK,CAAC,SAAS,EAAEzC,KAAK,CAAC;MAE5B,QAAQA,KAAK,CAACoE,IAAI;QAChB,KAAK,IAAI;UACP;UACA,IAAI,CAAC5F,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX,IAAI,CAAChB,SAAS,mEAAAgB,MAAA,CAAgEsB,KAAK,CAACmE,MAAM,CAC/F,CAAC;UACD,IAAI,CAAC1B,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACtC;QACF,KAAK,IAAI;UACP;UACA,IAAI,CAACxB,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,0CAAuC,CAAC;UAC1E,IAAI,CAAC+E,KAAK,CAAC,kBAAkB,EAAEzC,KAAK,CAAC;UACrC;QACF,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;QACT,KAAK,IAAI;UACP,IAAI,CAACxB,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,wCAAqC,CAAC;UACxE,IAAI,CAAC+E,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACtC,IAAI,CAACwH,UAAU,CAAC3F,SAAS,CAAC;UAC1B;UACA;UACA;QACF,KAAK,IAAI;UACP,IAAIxE,sBAAsB,CAACoK,QAAQ,CAACtD,MAAM,CAAC,EAAE;YAC3C,IAAI,CAAC3F,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,wCAAqC,CAAC;YACxE,IAAI,CAAC+E,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;YACtC,IAAI,CAACwH,UAAU,CAAC3F,SAAS,CAAC;YAC1B;YACA;UACF,CAAC,MAAM;YACL,IAAI,CAACrD,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,8CAA2C,CAAC;YAC9E,IAAI,CAAC+E,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;UACxC;UACA;QACF;UACE,IAAI,CAACxB,MAAM,CAACC,IAAI,IAAAC,MAAA,CACX,IAAI,CAAChB,SAAS,2DACnB,CAAC;UACD;UACA,IAAI,CAAC+E,KAAK,CAAC,mBAAmB,EAAEzC,KAAK,CAAC;MAC1C;IACF,CAAC,CAAC,OAAO+E,KAAK,EAAE;MACd,IAAI,CAACvG,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAI,IAAI,CAAChB,SAAS,wCAAqCqH,KAAK,CAAC;IAChF;EACF,CAAC;EAED3C,UAAU,WAAAA,WAACpC,KAAK,EAAE;IAAA,IAAA0H,MAAA;IAChB,IAAMC,QAAQ,GAAG3H,KAAK,CAAC4H,IAAI;IAE3B,IAAIxB,OAAO,CAACC,GAAG,CAACwB,sBAAsB,EAAE;MACtC,IAAI,CAACrJ,MAAM,CAAC+H,KAAK,IAAA7H,MAAA,CAAI,IAAI,CAAChB,SAAS,2BAAwBiK,QAAQ,CAAC;IACtE;IAEA,IAAOC,IAAI,GAAID,QAAQ,CAAhBC,IAAI;IAEX,IAAI,CAAC7H,eAAe,CAAC6H,IAAI,CAAC;IAE1B,OAAO,IAAI,CAACf,iBAAiB,CAACe,IAAI,CAACd,SAAS,CAAC,CAC1CgB,MAAM,CACL,UAACC,OAAO,EAAEC,OAAO;MAAA,OACfD,OAAO,CAAC7I,IAAI,CAAC,YAAM;QACjB,IAAOxB,SAAS,GAAUsK,OAAO,CAA1BtK,SAAS;UAAEwJ,IAAI,GAAIc,OAAO,CAAfd,IAAI;QAEtB,OAAO,IAAAvI,QAAA,CAAA1B,OAAA,CAAY,UAAC2B,OAAO;UAAA,OACzBA,OAAO,CAAC,CAAC8I,MAAI,CAAC7I,KAAK,CAACnB,SAAS,CAAC,IAAIgK,MAAI,CAAC7I,KAAK,CAACC,QAAQ,CAACpB,SAAS,CAAC,EAAEwJ,IAAI,CAAC,CAACU,IAAI,CAAC,CAAC;QAAA,CAChF,CAAC,CAAC1D,KAAK,CAAC,UAACC,MAAM;UAAA,OACbuD,MAAI,CAAClJ,MAAM,CAACuG,KAAK,IAAArG,MAAA,CACZgJ,MAAI,CAAChK,SAAS,sDAAAgB,MAAA,CAAmDkJ,IAAI,CAACd,SAAS,GAClF3C,MACF,CAAC;QAAA,CACH,CAAC;MACH,CAAC,CAAC;IAAA,GACJxF,QAAA,CAAA1B,OAAA,CAAQ2B,OAAO,CAAC,CAClB,CAAC,CACAM,IAAI,CAAC,YAAM;MACVwI,MAAI,CAACjF,KAAK,CAAC,OAAO,EAAEzC,KAAK,CAAC4H,IAAI,CAAC;MAC/B,IAAAK,qBAAA,GAAoBL,IAAI,CAACd,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;QAAAkB,sBAAA,OAAAjF,eAAA,CAAAhG,OAAA,EAAAgL,qBAAA;QAAtCvK,SAAS,GAAAwK,sBAAA;MAEhB,IAAIxK,SAAS,KAAKkK,IAAI,CAACd,SAAS,EAAE;QAChCY,MAAI,CAACjF,KAAK,UAAA/D,MAAA,CAAUhB,SAAS,GAAIiK,QAAQ,CAAC;MAC5C,CAAC,MAAM;QACLD,MAAI,CAACjF,KAAK,UAAA/D,MAAA,CAAUhB,SAAS,GAAIiK,QAAQ,CAAC;QAC1CD,MAAI,CAACjF,KAAK,UAAA/D,MAAA,CAAUkJ,IAAI,CAACd,SAAS,GAAIa,QAAQ,CAAC;MACjD;IACF,CAAC,CAAC,CACDzD,KAAK,CAAC,UAACC,MAAM,EAAK;MACjBuD,MAAI,CAAClJ,MAAM,CAACuG,KAAK,IAAArG,MAAA,CAAIgJ,MAAI,CAAChK,SAAS,iDAA8CyG,MAAM,CAAC;IAC1F,CAAC,CAAC;EACN,CAAC;EAEDqD,UAAU,WAAAA,WAAClJ,YAAY,EAAE;IACvB,IAAI,CAACE,MAAM,CAACC,IAAI,IAAAC,MAAA,CAAI,IAAI,CAAChB,SAAS,mBAAgB,CAAC;IAEnD,OAAO,IAAI,CAACW,OAAO,CAACC,YAAY,CAAC;EACnC,CAAC;EAAA6J,OAAA;AACH,CAAC,OAAAC,0BAAA,CAAAnL,OAAA,EAAAnB,IAAA,cAvbEuM,iBAAS,OAAAC,yBAAA,CAAArL,OAAA,EAAAnB,IAAA,cAAAA,IAAA,OAAAsM,0BAAA,CAAAnL,OAAA,EAAAnB,IAAA,iBAmBTuM,iBAAS,OAAAC,yBAAA,CAAArL,OAAA,EAAAnB,IAAA,iBAAAA,IAAA,OAAAsM,0BAAA,CAAAnL,OAAA,EAAAnB,IAAA,aAAAF,IAAA,OAAA0M,yBAAA,CAAArL,OAAA,EAAAnB,IAAA,aAAAA,IAAA,OAAAsM,0BAAA,CAAAnL,OAAA,EAAAnB,IAAA,oBAAAD,KAAA,OAAAyM,yBAAA,CAAArL,OAAA,EAAAnB,IAAA,oBAAAA,IAAA,IAAAA,IAAA,EAoaX,CAAC;AAAC,IAAAyM,QAAA,GAAAC,OAAA,CAAAvL,OAAA,GAEYK,OAAO"}
|
|
1
|
+
{"version":3,"names":["_url","_interopRequireDefault","require","_webexCore","_common","_lodash","_backoff","_socket","_errors","_dec","_dec2","_obj","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor2","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","session","connected","type","connecting","hasEverConnected","socket","localClusterServiceUrls","derived","listening","deps","fn","connect","webSocketUrl","_this","logger","info","concat","_promise","resolve","webex","internal","device","registered","register","then","_connectWithBackoff","disconnect","_this2","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","_keys","keyPath","set","_prepareUrl","_this3","feature","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","_assign","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","_deleteProperty","get","multipleConnections","format","_attemptConnection","socketUrl","callback","_this4","Socket","attemptWSUrl","on","_onclose","_onmessage","_len","args","Array","_key","_emit","_len2","_key2","all","credentials","getUserToken","_ref","_ref2","_slicedToArray2","token","msg","reject","Error","options","forceCloseDelay","config","pingInterval","pongTimeout","toString","trackingId","sessionId","_now","defaultMercuryOptions","open","refresh","catch","reason","code","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","markFailedUrl","error","_this5","call","onComplete","err","undefined","backoff","setStrategy","ExponentialStrategy","initialDelay","backoffTimeReset","maxDelay","backoffTimeMax","initialConnectionMaxRetries","failAfter","maxRetries","number","delay","Math","min","strategy_","nextBackoffDelay_","process","env","NODE_ENV","debug","stack","start","_len3","_key3","trigger","_getEventHandlers","eventType","_eventType$split","split","_eventType$split2","name","handlers","handlerName","camelCase","toLowerCase","unset","_reconnect","includes","_this6","envelope","data","ENABLE_MERCURY_LOGGING","reduce","promise","handler","_data$eventType$split","_data$eventType$split2","version","_applyDecoratedDescriptor2","oneFlight","_getOwnPropertyDescriptor","_default","exports"],"sources":["mercury.js"],"sourcesContent":["/*!\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\n session: {\n connected: {\n default: false,\n type: 'boolean',\n },\n connecting: {\n default: false,\n type: 'boolean',\n },\n hasEverConnected: {\n default: false,\n type: 'boolean',\n },\n socket: 'object',\n localClusterServiceUrls: 'object',\n },\n\n derived: {\n listening: {\n deps: ['connected'],\n fn() {\n return this.connected;\n },\n },\n },\n\n @oneFlight\n connect(webSocketUrl) {\n if (this.connected) {\n this.logger.info(`${this.namespace}: already connected, will not connect again`);\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n return Promise.resolve(\n this.webex.internal.device.registered || this.webex.internal.device.register()\n ).then(() => {\n this.logger.info(`${this.namespace}: connecting`);\n\n return this._connectWithBackoff(webSocketUrl);\n });\n },\n\n @oneFlight\n disconnect() {\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());\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 return url.format(webSocketUrl);\n });\n },\n\n _attemptConnection(socketUrl, callback) {\n const socket = new Socket();\n let attemptWSUrl;\n\n socket.on('close', (...args) => this._onclose(...args));\n socket.on('message', (...args) => this._onmessage(...args));\n socket.on('sequence-mismatch', (...args) => this._emit('sequence-mismatch', ...args));\n socket.on('ping-pong-latency', (...args) => this._emit('ping-pong-latency', ...args));\n\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = `${this.namespace}: prevent socket open when backoffCall no longer defined`;\n\n this.logger.info(msg);\n\n return Promise.reject(new Error(msg));\n }\n\n attemptWSUrl = webSocketUrl;\n\n let options = {\n forceCloseDelay: this.config.forceCloseDelay,\n pingInterval: this.config.pingInterval,\n pongTimeout: this.config.pongTimeout,\n token: token.toString(),\n trackingId: `${this.webex.sessionId}_${Date.now()}`,\n logger: this.logger,\n };\n\n // if the consumer has supplied request options use them\n if (this.webex.config.defaultMercuryOptions) {\n this.logger.info(`${this.namespace}: setting custom options`);\n options = {...options, ...this.webex.config.defaultMercuryOptions};\n }\n\n // Set the socket before opening it. This allows a disconnect() to close\n // the socket if it is in the process of being opened.\n this.socket = socket;\n\n this.logger.info(`${this.namespace} connection url: ${webSocketUrl}`);\n\n return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.logger.info(\n `${this.namespace}: connected to mercury, success, action: connected, url: ${attemptWSUrl}`\n );\n callback();\n\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n return this.webex.internal.device.refresh();\n }\n\n return Promise.resolve();\n });\n })\n .catch((reason) => {\n // Suppress connection errors that appear to be network related. This\n // may end up suppressing metrics during outages, but we might not care\n // (especially since many of our outages happen in a way that client\n // metrics can't be trusted).\n if (reason.code !== 1006 && this.backoffCall && this.backoffCall.getNumRetries() > 0) {\n this._emit('connection_failed', reason, {retries: this.backoffCall.getNumRetries()});\n }\n this.logger.info(`${this.namespace}: connection attempt failed`, reason);\n // UnknownResponse is produced by IE for any 4XXX; treated it like a bad\n // web socket url and let WDM handle the token checking\n if (reason instanceof UnknownResponse) {\n this.logger.info(\n `${this.namespace}: received unknown response code, refreshing device registration`\n );\n\n return this.webex.internal.device.refresh().then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info(`${this.namespace}: received authorization error, reauthorizing`);\n\n return this.webex.credentials.refresh({force: true}).then(() => callback(reason));\n }\n // // NotFound implies expired web socket url\n // else if (reason instanceof NotFound) {\n // this.logger.info(`mercury: received not found error, refreshing device registration`);\n // return this.webex.internal.device.refresh()\n // .then(() => callback(reason));\n // }\n // BadRequest implies current credentials are for a Service Account\n // Forbidden implies current user is not entitle for Webex\n if (reason instanceof BadRequest || reason instanceof Forbidden) {\n this.logger.warn(`${this.namespace}: received unrecoverable response from mercury`);\n this.backoffCall.abort();\n\n return callback(reason);\n }\n if (reason instanceof ConnectionError) {\n return this.webex.internal.feature\n .getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info(\n `${this.namespace}: received a generic connection error, will try to connect to another datacenter. failed, action: 'failed', url: ${attemptWSUrl} error: ${reason.message}`\n );\n\n return this.webex.internal.services.markFailedUrl(attemptWSUrl);\n }\n\n return null;\n })\n .then(() => callback(reason));\n }\n\n return callback(reason);\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: failed to handle connection failure`, reason);\n callback(reason);\n });\n },\n\n _connectWithBackoff(webSocketUrl) {\n return new Promise((resolve, reject) => {\n // eslint gets confused about whether or not call is actually used\n // eslint-disable-next-line prefer-const\n let call;\n const onComplete = (err) => {\n this.connecting = false;\n\n this.backoffCall = undefined;\n if (err) {\n this.logger.info(\n `${\n this.namespace\n }: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`\n );\n\n return reject(err);\n }\n this.connected = true;\n this.hasEverConnected = true;\n this._emit('online');\n\n return resolve();\n };\n\n // eslint-disable-next-line prefer-reflect\n call = backoff.call((callback) => {\n this.logger.info(`${this.namespace}: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(\n new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax,\n })\n );\n\n if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {\n call.failAfter(this.config.initialConnectionMaxRetries);\n } else if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info(`${this.namespace}: connection aborted`);\n reject(new Error('Mercury Connection Aborted'));\n });\n\n call.on('callback', (err) => {\n if (err) {\n const number = call.getNumRetries();\n const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);\n\n this.logger.info(\n `${this.namespace}: failed to connect; attempting retry ${number + 1} in ${delay} ms`\n );\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug(`${this.namespace}: `, err, err.stack);\n }\n\n return;\n }\n this.logger.info(`${this.namespace}: connected`);\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in event handler`, {\n error,\n arguments: 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 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(`${this.namespace}: socket disconnected; will not reconnect`);\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info(\n `${this.namespace}: socket disconnected unexpectedly; will not reconnect`\n );\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error(`${this.namespace}: error occurred in close handler`, error);\n }\n },\n\n _onmessage(event) {\n const envelope = event.data;\n\n if (process.env.ENABLE_MERCURY_LOGGING) {\n this.logger.debug(`${this.namespace}: message envelope: `, envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce(\n (promise, handler) =>\n promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) =>\n resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))\n ).catch((reason) =>\n this.logger.error(\n `${this.namespace}: error occurred in autowired event handler for ${data.eventType}`,\n reason\n )\n );\n }),\n Promise.resolve()\n )\n .then(() => {\n this._emit('event', event.data);\n const [namespace] = data.eventType.split('.');\n\n if (namespace === data.eventType) {\n this._emit(`event:${namespace}`, envelope);\n } else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error(`${this.namespace}: error occurred processing socket message`, reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info(`${this.namespace}: reconnecting`);\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
|
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.0.0-next.
|
|
33
|
-
"@webex/test-helper-mocha": "3.0.0-next.
|
|
34
|
-
"@webex/test-helper-mock-webex": "3.0.0-next.
|
|
35
|
-
"@webex/test-helper-test-users": "3.0.0-next.
|
|
32
|
+
"@webex/test-helper-chai": "3.0.0-next.6",
|
|
33
|
+
"@webex/test-helper-mocha": "3.0.0-next.6",
|
|
34
|
+
"@webex/test-helper-mock-webex": "3.0.0-next.6",
|
|
35
|
+
"@webex/test-helper-test-users": "3.0.0-next.6",
|
|
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.0.0-next.
|
|
42
|
-
"@webex/common-timers": "3.0.0-next.
|
|
43
|
-
"@webex/internal-plugin-device": "3.0.0-next.
|
|
44
|
-
"@webex/internal-plugin-feature": "3.0.0-next.
|
|
45
|
-
"@webex/internal-plugin-metrics": "3.0.0-next.
|
|
46
|
-
"@webex/test-helper-chai": "3.0.0-next.
|
|
47
|
-
"@webex/test-helper-mocha": "3.0.0-next.
|
|
48
|
-
"@webex/test-helper-mock-web-socket": "3.0.0-next.
|
|
49
|
-
"@webex/test-helper-mock-webex": "3.0.0-next.
|
|
50
|
-
"@webex/test-helper-refresh-callback": "3.0.0-next.
|
|
51
|
-
"@webex/test-helper-test-users": "3.0.0-next.
|
|
52
|
-
"@webex/webex-core": "3.0.0-next.
|
|
41
|
+
"@webex/common": "3.0.0-next.6",
|
|
42
|
+
"@webex/common-timers": "3.0.0-next.6",
|
|
43
|
+
"@webex/internal-plugin-device": "3.0.0-next.6",
|
|
44
|
+
"@webex/internal-plugin-feature": "3.0.0-next.7",
|
|
45
|
+
"@webex/internal-plugin-metrics": "3.0.0-next.6",
|
|
46
|
+
"@webex/test-helper-chai": "3.0.0-next.6",
|
|
47
|
+
"@webex/test-helper-mocha": "3.0.0-next.6",
|
|
48
|
+
"@webex/test-helper-mock-web-socket": "3.0.0-next.6",
|
|
49
|
+
"@webex/test-helper-mock-webex": "3.0.0-next.6",
|
|
50
|
+
"@webex/test-helper-refresh-callback": "3.0.0-next.6",
|
|
51
|
+
"@webex/test-helper-test-users": "3.0.0-next.6",
|
|
52
|
+
"@webex/webex-core": "3.0.0-next.6",
|
|
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.0.0-next.
|
|
67
|
+
"version": "3.0.0-next.7"
|
|
68
68
|
}
|
package/src/mercury.js
CHANGED
|
@@ -33,6 +33,10 @@ const Mercury = WebexPlugin.extend({
|
|
|
33
33
|
default: false,
|
|
34
34
|
type: 'boolean',
|
|
35
35
|
},
|
|
36
|
+
hasEverConnected: {
|
|
37
|
+
default: false,
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
},
|
|
36
40
|
socket: 'object',
|
|
37
41
|
localClusterServiceUrls: 'object',
|
|
38
42
|
},
|
|
@@ -294,6 +298,7 @@ const Mercury = WebexPlugin.extend({
|
|
|
294
298
|
return reject(err);
|
|
295
299
|
}
|
|
296
300
|
this.connected = true;
|
|
301
|
+
this.hasEverConnected = true;
|
|
297
302
|
this._emit('online');
|
|
298
303
|
|
|
299
304
|
return resolve();
|
|
@@ -312,7 +317,9 @@ const Mercury = WebexPlugin.extend({
|
|
|
312
317
|
})
|
|
313
318
|
);
|
|
314
319
|
|
|
315
|
-
if (this.config.
|
|
320
|
+
if (this.config.initialConnectionMaxRetries && !this.hasEverConnected) {
|
|
321
|
+
call.failAfter(this.config.initialConnectionMaxRetries);
|
|
322
|
+
} else if (this.config.maxRetries) {
|
|
316
323
|
call.failAfter(this.config.maxRetries);
|
|
317
324
|
}
|
|
318
325
|
|
|
@@ -152,9 +152,8 @@ describe('plugin-mercury', () => {
|
|
|
152
152
|
});
|
|
153
153
|
|
|
154
154
|
describe('when `maxRetries` is set', () => {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
mercury.config.maxRetries = 2;
|
|
155
|
+
|
|
156
|
+
const check = () => {
|
|
158
157
|
socketOpenStub.restore();
|
|
159
158
|
socketOpenStub = sinon.stub(Socket.prototype, 'open');
|
|
160
159
|
socketOpenStub.returns(Promise.reject(new ConnectionError()));
|
|
@@ -182,12 +181,42 @@ describe('plugin-mercury', () => {
|
|
|
182
181
|
.then(() => {
|
|
183
182
|
assert.calledThrice(Socket.prototype.open);
|
|
184
183
|
clock.tick(5 * mercury.config.backoffTimeReset);
|
|
185
|
-
|
|
186
184
|
return assert.isRejected(promise);
|
|
187
185
|
})
|
|
188
186
|
.then(() => {
|
|
189
187
|
assert.calledThrice(Socket.prototype.open);
|
|
190
188
|
});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// skipping due to apparent bug with lolex in all browsers but Chrome.
|
|
192
|
+
// if initial retries is zero and mercury has never connected max retries is used
|
|
193
|
+
skipInBrowser(it)('fails after `maxRetries` attempts', () => {
|
|
194
|
+
mercury.config.maxRetries = 2;
|
|
195
|
+
mercury.config.initialConnectionMaxRetries = 0;
|
|
196
|
+
|
|
197
|
+
return check();
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// initial retries is non-zero so takes precedence over maxRetries when mercury has never connected
|
|
201
|
+
skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {
|
|
202
|
+
mercury.config.maxRetries = 0;
|
|
203
|
+
mercury.config.initialConnectionMaxRetries = 2;
|
|
204
|
+
return check();
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// initial retries is non-zero so takes precedence over maxRetries when mercury has never connected
|
|
208
|
+
skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {
|
|
209
|
+
mercury.config.initialConnectionMaxRetries = 2;
|
|
210
|
+
mercury.config.maxRetries = 5;
|
|
211
|
+
return check();
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// when mercury has connected maxRetries is used and the initialConnectionMaxRetries is ignored
|
|
215
|
+
skipInBrowser(it)('fails after `initialConnectionMaxRetries` attempts', () => {
|
|
216
|
+
mercury.config.initialConnectionMaxRetries = 5;
|
|
217
|
+
mercury.config.maxRetries = 2;
|
|
218
|
+
mercury.hasEverConnected = true;
|
|
219
|
+
return check();
|
|
191
220
|
});
|
|
192
221
|
});
|
|
193
222
|
|