@webex/internal-plugin-mercury 3.0.0-beta.13 → 3.0.0-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,14 +21,12 @@ npm install --save @webex/internal-plugin-mercury
21
21
  ## Usage
22
22
 
23
23
  ```js
24
-
25
24
  import '@webex/internal-plugin-mercury';
26
25
 
27
26
  import WebexCore from '@webex/webex-core';
28
27
 
29
28
  const webex = new WebexCore();
30
- webex.internal.mercury.WHATEVER
31
-
29
+ webex.internal.mercury.WHATEVER;
32
30
  ```
33
31
 
34
32
  ## Using A Proxy Agent To Open A Websocket Connection
@@ -1 +1 @@
1
- {"version":3,"names":["mercury","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n mercury: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000\n }\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAR,CAAYC,qBAAZ,IAAqC,KAL5C;;IAMP;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAR,CAAYG,oBAAZ,IAAoC,KAV1C;;IAWP;AACJ;AACA;AACA;IACIC,cAAc,EAAEL,OAAO,CAACC,GAAR,CAAYK,wBAAZ,IAAwC,KAfjD;;IAgBP;AACJ;AACA;AACA;IACIC,gBAAgB,EAAEP,OAAO,CAACC,GAAR,CAAYO,0BAAZ,IAA0C,IApBrD;;IAqBP;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAET,OAAO,CAACC,GAAR,CAAYS,yBAAZ,IAAyC;EA1BnD;AADI,C"}
1
+ {"version":3,"names":["mercury","pingInterval","process","env","MERCURY_PING_INTERVAL","pongTimeout","MERCURY_PONG_TIMEOUT","backoffTimeMax","MERCURY_BACKOFF_TIME_MAX","backoffTimeReset","MERCURY_BACKOFF_TIME_RESET","forceCloseDelay","MERCURY_FORCE_CLOSE_DELAY"],"sources":["config.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nexport default {\n mercury: {\n /**\n * Milliseconds between pings sent up the socket\n * @type {number}\n */\n pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,\n /**\n * Milliseconds to wait for a pong before declaring the connection dead\n * @type {number}\n */\n pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,\n /**\n * Maximum milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,\n /**\n * Initial milliseconds between connection attempts\n * @type {Number}\n */\n backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,\n /**\n * Milliseconds to wait for a close frame before declaring the socket dead and\n * discarding it\n * @type {[type]}\n */\n forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,\n },\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;eAEe;EACbA,OAAO,EAAE;IACP;AACJ;AACA;AACA;IACIC,YAAY,EAAEC,OAAO,CAACC,GAAR,CAAYC,qBAAZ,IAAqC,KAL5C;;IAMP;AACJ;AACA;AACA;IACIC,WAAW,EAAEH,OAAO,CAACC,GAAR,CAAYG,oBAAZ,IAAoC,KAV1C;;IAWP;AACJ;AACA;AACA;IACIC,cAAc,EAAEL,OAAO,CAACC,GAAR,CAAYK,wBAAZ,IAAwC,KAfjD;;IAgBP;AACJ;AACA;AACA;IACIC,gBAAgB,EAAEP,OAAO,CAACC,GAAR,CAAYO,0BAAZ,IAA0C,IApBrD;;IAqBP;AACJ;AACA;AACA;AACA;IACIC,eAAe,EAAET,OAAO,CAACC,GAAR,CAAYS,yBAAZ,IAAyC;EA1BnD;AADI,C"}
@@ -1 +1 @@
1
- {"version":3,"names":["ConnectionError","event","code","value","reason","Exception","UnknownResponse","BadRequest","NotAuthorized","Forbidden"],"sources":["errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n /**\n * @param {CloseEvent} event\n * @returns {string}\n */\n parse(event = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code\n },\n reason: {\n value: event.reason\n }\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage = 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage = 'BadRequest usually implies an attempt to use service account credentials';\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n}\n\n// /**\n// * thrown for CloseCode 4404\n// */\n// export class NotFound extends ConnectionError {\n// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;\n// }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA;AACA;AACA;IACaA,e;;;;;;;;;;;;;IAGX;AACF;AACA;AACA;IACE,iBAAkB;MAAA,IAAZC,KAAY,uEAAJ,EAAI;MAChB,+BAAwB,IAAxB,EAA8B;QAC5BC,IAAI,EAAE;UACJC,KAAK,EAAEF,KAAK,CAACC;QADT,CADsB;QAI5BE,MAAM,EAAE;UACND,KAAK,EAAEF,KAAK,CAACG;QADP;MAJoB,CAA9B;MASA,OAAOH,KAAK,CAACG,MAAb;IACD;;;EAlBkCC,iB;AAqBrC;AACA;AACA;;;;8BAvBaL,e,oBACa,6B;;IAuBbM,e;;;;;;;;;;;EAAwBN,e;AAIrC;AACA;AACA;;;;8BANaM,e,oBACa,2G;;IAMbC,U;;;;;;;;;;;EAAmBP,e;AAIhC;AACA;AACA;;;;8BANaO,U,oBACa,0E;;IAMbC,a;;;;;;;;;;;EAAsBR,e;AAInC;AACA;AACA;;;;8BANaQ,a,oBACa,kC;;IAMbC,S;;;;;;;;;;;EAAkBT,e,GAI/B;AACA;AACA;AACA;AACA;AACA;;;;8BATaS,S,oBACa,wE"}
1
+ {"version":3,"names":["ConnectionError","event","code","value","reason","Exception","UnknownResponse","BadRequest","NotAuthorized","Forbidden"],"sources":["errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\n\n/**\n * Exception thrown when a websocket gets closed\n */\nexport class ConnectionError extends Exception {\n static defaultMessage = 'Failed to connect to socket';\n\n /**\n * @param {CloseEvent} event\n * @returns {string}\n */\n parse(event = {}) {\n Object.defineProperties(this, {\n code: {\n value: event.code,\n },\n reason: {\n value: event.reason,\n },\n });\n\n return event.reason;\n }\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class UnknownResponse extends ConnectionError {\n static defaultMessage =\n 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';\n}\n\n/**\n * thrown for CloseCode 4400\n */\nexport class BadRequest extends ConnectionError {\n static defaultMessage =\n 'BadRequest usually implies an attempt to use service account credentials';\n}\n\n/**\n * thrown for CloseCode 4401\n */\nexport class NotAuthorized extends ConnectionError {\n static defaultMessage = 'Please refresh your access token';\n}\n\n/**\n * thrown for CloseCode 4403\n */\nexport class Forbidden extends ConnectionError {\n static defaultMessage = 'Forbidden usually implies these credentials are not entitled for Webex';\n}\n\n// /**\n// * thrown for CloseCode 4404\n// */\n// export class NotFound extends ConnectionError {\n// static defaultMessage = `Please refresh your Mercury registration (typically via a WDM refresh)`;\n// }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;;;;;AAEA;AACA;AACA;IACaA,e;;;;;;;;;;;;;IAGX;AACF;AACA;AACA;IACE,iBAAkB;MAAA,IAAZC,KAAY,uEAAJ,EAAI;MAChB,+BAAwB,IAAxB,EAA8B;QAC5BC,IAAI,EAAE;UACJC,KAAK,EAAEF,KAAK,CAACC;QADT,CADsB;QAI5BE,MAAM,EAAE;UACND,KAAK,EAAEF,KAAK,CAACG;QADP;MAJoB,CAA9B;MASA,OAAOH,KAAK,CAACG,MAAb;IACD;;;EAlBkCC,iB;AAqBrC;AACA;AACA;;;;8BAvBaL,e,oBACa,6B;;IAuBbM,e;;;;;;;;;;;EAAwBN,e;AAKrC;AACA;AACA;;;;8BAPaM,e,oBAET,2G;;IAMSC,U;;;;;;;;;;;EAAmBP,e;AAKhC;AACA;AACA;;;;8BAPaO,U,oBAET,0E;;IAMSC,a;;;;;;;;;;;EAAsBR,e;AAInC;AACA;AACA;;;;8BANaQ,a,oBACa,kC;;IAMbC,S;;;;;;;;;;;EAAkBT,e,GAI/B;AACA;AACA;AACA;AACA;AACA;;;;8BATaS,S,oBACa,wE"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["registerInternalPlugin","Mercury","config","onBeforeLogout","disconnect"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Mercury from './mercury';\nimport config from './config';\n\nregisterInternalPlugin('mercury', Mercury, {\n config,\n onBeforeLogout() {\n return this.disconnect();\n }\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {default as Socket} from './socket';\nexport {default as config} from './config';\nexport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse\n // NotFound\n} from './errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AAWA;;AAEA;;AAxBA;AACA;AACA;AAWA,IAAAA,iCAAA,EAAuB,SAAvB,EAAkCC,gBAAlC,EAA2C;EACzCC,MAAM,EAANA,eADyC;EAEzCC,cAFyC,4BAExB;IACf,OAAO,KAAKC,UAAL,EAAP;EACD;AAJwC,CAA3C"}
1
+ {"version":3,"names":["registerInternalPlugin","Mercury","config","onBeforeLogout","disconnect"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-feature';\nimport '@webex/internal-plugin-metrics';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\n\nimport Mercury from './mercury';\nimport config from './config';\n\nregisterInternalPlugin('mercury', Mercury, {\n config,\n onBeforeLogout() {\n return this.disconnect();\n },\n});\n\nexport {default} from './mercury';\nexport {default as Mercury} from './mercury';\nexport {default as Socket} from './socket';\nexport {default as config} from './config';\nexport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from './errors';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AAWA;;AAEA;;AAxBA;AACA;AACA;AAWA,IAAAA,iCAAA,EAAuB,SAAvB,EAAkCC,gBAAlC,EAA2C;EACzCC,MAAM,EAANA,eADyC;EAEzCC,cAFyC,4BAExB;IACf,OAAO,KAAKC,UAAL,EAAP;EACD;AAJwC,CAA3C"}
package/dist/mercury.js CHANGED
@@ -551,7 +551,7 @@ var Mercury = _webexCore.WebexPlugin.extend((_dec = (0, _common.deprecated)('Mer
551
551
  this.logger.info('mercury: reconnecting');
552
552
  return this.connect(webSocketUrl);
553
553
  },
554
- version: "3.0.0-beta.13"
554
+ version: "3.0.0-beta.15"
555
555
  }, ((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)));
556
556
 
557
557
  var _default = Mercury;
@@ -1 +1 @@
1
- {"version":3,"names":["normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","session","connected","default","type","connecting","socket","localClusterServiceUrls","derived","listening","deps","fn","connect","webSocketUrl","logger","info","resolve","webex","internal","device","registered","register","then","_connectWithBackoff","disconnect","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","forEach","keyPath","_prepareUrl","feature","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","multipleConnections","format","_attemptConnection","socketUrl","callback","Socket","attemptWSUrl","on","_onclose","_onmessage","args","_emit","all","credentials","getUserToken","token","msg","reject","Error","options","forceCloseDelay","config","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","metrics","submitClientMetrics","fields","success","tags","action","refresh","catch","reason","code","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","error","markFailedUrl","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","trigger","_getEventHandlers","eventType","split","name","handlers","handlerName","push","toLowerCase","unset","_reconnect","includes","envelope","data","ENABLE_MERCURY_LOGGING","reduce","promise","handler","oneFlight"],"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 = [\n 'idle',\n 'done (forced)',\n 'pong not received',\n 'pong mismatch'\n];\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('mercury: already connected, will not connect again');\n\n return Promise.resolve();\n }\n\n this.connecting = true;\n\n return Promise.resolve(this.webex.internal.device.registered || this.webex.internal.device.register())\n .then(() => {\n this.logger.info('mercury: 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('mercury: aborting connection');\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n this.socket.close();\n\n return;\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.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\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = 'mercury: 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('mercury: 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 return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {\n fields: {\n success: true\n },\n tags: {\n action: 'connected',\n url: attemptWSUrl\n }\n });\n callback();\n\n return this.webex.internal.feature.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('mercury: 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('mercury: received unknown response code, refreshing device registration');\n\n return this.webex.internal.device.refresh()\n .then(() => callback(reason));\n }\n // NotAuthorized implies expired token\n if (reason instanceof NotAuthorized) {\n this.logger.info('mercury: received authorization error, reauthorizing');\n\n return this.webex.credentials.refresh({force: true})\n .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('mercury: 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.getFeature('developer', 'web-high-availability')\n .then((haMessagingEnabled) => {\n if (haMessagingEnabled) {\n this.logger.info('mercury: received a generic connection error, will try to connect to another datacenter');\n this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {\n fields: {\n success: false\n },\n tags: {\n action: 'failed',\n error: reason.message,\n url: attemptWSUrl\n }\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('mercury: 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(`mercury: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`);\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(`mercury: executing connection attempt ${call.getNumRetries()}`);\n this._attemptConnection(webSocketUrl, callback);\n }, onComplete);\n\n call.setStrategy(new backoff.ExponentialStrategy({\n initialDelay: this.config.backoffTimeReset,\n maxDelay: this.config.backoffTimeMax\n }));\n\n if (this.config.maxRetries) {\n call.failAfter(this.config.maxRetries);\n }\n\n call.on('abort', () => {\n this.logger.info('mercury: 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(`mercury: failed to connect; attempting retry ${number + 1} in ${delay} ms`);\n /* istanbul ignore if */\n if (process.env.NODE_ENV === 'development') {\n this.logger.debug('mercury: ', err, err.stack);\n }\n\n return;\n }\n this.logger.info('mercury: connected');\n });\n\n call.start();\n\n this.backoffCall = call;\n });\n },\n\n _emit(...args) {\n try {\n this.trigger(...args);\n }\n catch (error) {\n this.logger.error('mercury: error occurred in event handler', error);\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(`mercury: Mercury service rejected last message; will not reconnect: ${event.reason}`);\n this._emit('offline.permanent', event);\n break;\n case 4000:\n // metric: disconnect\n this.logger.info('mercury: 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('mercury: 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('mercury: 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 }\n else {\n this.logger.info('mercury: socket disconnected; will not reconnect');\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info('mercury: socket disconnected unexpectedly; will not reconnect');\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n }\n catch (error) {\n this.logger.error('mercury: 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('mercury: message envelope: ', envelope);\n }\n\n const {data} = envelope;\n\n this._applyOverrides(data);\n\n return this._getEventHandlers(data.eventType)\n .reduce((promise, handler) => promise.then(() => {\n const {namespace, name} = handler;\n\n return new Promise((resolve) => resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data)))\n .catch((reason) => this.logger.error(`mercury: error occurred in autowired event handler for ${data.eventType}`, reason));\n }), Promise.resolve())\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 }\n else {\n this._emit(`event:${namespace}`, envelope);\n this._emit(`event:${data.eventType}`, envelope);\n }\n })\n .catch((reason) => {\n this.logger.error('mercury: error occurred processing socket message', reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info('mercury: reconnecting');\n\n return this.connect(webSocketUrl);\n }\n});\n\nexport default Mercury;\n"],"mappings":"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"}
1
+ {"version":3,"names":["normalReconnectReasons","Mercury","WebexPlugin","extend","deprecated","namespace","session","connected","default","type","connecting","socket","localClusterServiceUrls","derived","listening","deps","fn","connect","webSocketUrl","logger","info","resolve","webex","internal","device","registered","register","then","_connectWithBackoff","disconnect","backoffCall","abort","removeAllListeners","once","close","listen","stopListening","processRegistrationStatusEvent","message","_applyOverrides","event","headers","headerKeys","forEach","keyPath","_prepareUrl","feature","getFeature","haMessagingEnabled","services","convertUrlToPriorityHostUrl","wsUrl","webSharedMercury","url","parse","query","outboundWireFormat","bufferStates","aliasHttpStatus","mercuryRegistrationStatus","isRegistrationRefreshEnabled","multipleConnections","format","_attemptConnection","socketUrl","callback","Socket","attemptWSUrl","on","_onclose","_onmessage","args","_emit","all","credentials","getUserToken","token","msg","reject","Error","options","forceCloseDelay","config","pingInterval","pongTimeout","toString","trackingId","sessionId","defaultMercuryOptions","open","metrics","submitClientMetrics","fields","success","tags","action","refresh","catch","reason","code","getNumRetries","retries","UnknownResponse","NotAuthorized","force","BadRequest","Forbidden","warn","ConnectionError","error","markFailedUrl","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","trigger","_getEventHandlers","eventType","split","name","handlers","handlerName","push","toLowerCase","unset","_reconnect","includes","envelope","data","ENABLE_MERCURY_LOGGING","reduce","promise","handler","oneFlight"],"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('mercury: 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('mercury: 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('mercury: aborting connection');\n this.backoffCall.abort();\n }\n\n if (this.socket) {\n this.socket.removeAllListeners('message');\n this.once('offline', resolve);\n this.socket.close();\n\n return;\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\n Promise.all([this._prepareUrl(socketUrl), this.webex.credentials.getUserToken()])\n .then(([webSocketUrl, token]) => {\n if (!this.backoffCall) {\n const msg = 'mercury: 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('mercury: 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 return socket.open(webSocketUrl, options);\n })\n .then(() => {\n this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {\n fields: {\n success: true,\n },\n tags: {\n action: 'connected',\n url: attemptWSUrl,\n },\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('mercury: 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 'mercury: 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('mercury: 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('mercury: 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 'mercury: received a generic connection error, will try to connect to another datacenter'\n );\n this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {\n fields: {\n success: false,\n },\n tags: {\n action: 'failed',\n error: reason.message,\n url: attemptWSUrl,\n },\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('mercury: 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 `mercury: 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(`mercury: 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('mercury: 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 `mercury: 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('mercury: ', err, err.stack);\n }\n\n return;\n }\n this.logger.info('mercury: 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('mercury: error occurred in event handler', error);\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 `mercury: 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('mercury: 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('mercury: 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('mercury: 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('mercury: socket disconnected; will not reconnect');\n this._emit('offline.permanent', event);\n }\n break;\n default:\n this.logger.info('mercury: socket disconnected unexpectedly; will not reconnect');\n // unexpected disconnect\n this._emit('offline.permanent', event);\n }\n } catch (error) {\n this.logger.error('mercury: 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('mercury: 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 `mercury: 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('mercury: error occurred processing socket message', reason);\n });\n },\n\n _reconnect(webSocketUrl) {\n this.logger.info('mercury: reconnecting');\n\n return this.connect(webSocketUrl);\n },\n});\n\nexport default Mercury;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["sockets","Socket","onmessage","bind","onclose","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","options","resolve","reject","socket","logger","info","code","Error","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","close","checkRequired","forEach","key","enumerable","value","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","messageId","id","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","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.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('Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way');\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: closing');\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info('socket: 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 options = defaults(options, {\n code: 1000,\n reason: 'Done'\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info('socket: no close event received, forcing closure');\n resolve(this.onclose({\n code: 1000,\n reason: 'Done (forced)'\n }));\n }\n catch (error) {\n this.logger.warn('socket: force-close failed', error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info('socket: 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 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',\n 'pingInterval',\n 'pongTimeout',\n 'token',\n 'trackingId',\n 'logger'\n ], options);\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: 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: 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: connected');\n this._authorize()\n .then(() => {\n this.logger.info('socket: authorized');\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn('socket: error event fired', event);\n };\n\n sockets.set(this, socket);\n this.logger.info('socket: 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: 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: sequence number: ', sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(`socket: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`);\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 }\n else {\n this.emit('message', processedEvent);\n }\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: 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: 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 (!event.data.type && (event.data.data.eventType === 'mercury.buffer_state' || event.data.data.eventType === 'mercury.registration_status')) {\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('socket: fixing CloseEvent code for reason: ', event.reason);\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('socket: fixing CloseEvent code for reason: ', event.reason);\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: pong', event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info('socket: received pong for wrong ping id, closing socket');\n this.logger.debug('socket: expected', id, 'received', event.data.id);\n this.close({\n code: 1000,\n reason: 'Pong mismatch'\n });\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: error occurred in confirmPongId', error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info('socket: pong not receive in expected period, closing socket');\n this.close({\n code: 1000,\n reason: 'Pong not received'\n })\n .catch((reason) => {\n this.logger.warn('socket: failed to close socket after missed pong', 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: 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 }\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: error occurred in scheduleNextPingAndCancelPongTimer', error);\n }\n };\n\n id = id || uuid.v4();\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n\n this.logger.debug(`socket: 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":["sockets","Socket","onmessage","bind","onclose","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","options","resolve","reject","socket","logger","info","code","Error","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","close","checkRequired","forEach","key","enumerable","value","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","debug","expectedSequenceNumber","processedEvent","_acknowledge","type","send","messageId","id","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","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.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: closing');\n\n if (socket.readyState === 2 || socket.readyState === 3) {\n this.logger.info('socket: 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 options = defaults(options, {\n code: 1000,\n reason: 'Done',\n });\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info('socket: no close event received, forcing closure');\n resolve(\n this.onclose({\n code: 1000,\n reason: 'Done (forced)',\n })\n );\n } catch (error) {\n this.logger.warn('socket: force-close failed', error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info('socket: 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 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: 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: 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: connected');\n this._authorize()\n .then(() => {\n this.logger.info('socket: authorized');\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn('socket: error event fired', event);\n };\n\n sockets.set(this, socket);\n this.logger.info('socket: 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: 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: sequence number: ', sequenceNumber);\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\n this.logger.debug(\n `socket: 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: 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: 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('socket: fixing CloseEvent code for reason: ', event.reason);\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('socket: fixing CloseEvent code for reason: ', event.reason);\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: pong', event.data.id);\n if (event.data && event.data.id !== id) {\n this.logger.info('socket: received pong for wrong ping id, closing socket');\n this.logger.debug('socket: 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: error occurred in confirmPongId', error);\n }\n };\n\n const onPongNotReceived = () => {\n try {\n this.logger.info('socket: pong not receive in expected period, closing socket');\n this.close({\n code: 1000,\n reason: 'Pong not received',\n }).catch((reason) => {\n this.logger.warn('socket: failed to close socket after missed pong', reason);\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: 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('socket: error occurred in scheduleNextPingAndCancelPongTimer', error);\n }\n };\n\n id = id || uuid.v4();\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\n this.once('pong', scheduleNextPingAndCancelPongTimer);\n this.once('pong', confirmPongId);\n\n this.logger.debug(`socket: ping ${id}`);\n\n return this.send({\n id,\n type: 'ping',\n });\n }\n}\n"],"mappings":"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"}
@@ -12,6 +12,8 @@ exports.default = void 0;
12
12
 
13
13
  var _socketBase = _interopRequireDefault(require("./socket-base"));
14
14
 
15
+ /* eslint-disable no-restricted-globals */
16
+
15
17
  /*!
16
18
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
17
19
  */
@@ -1 +1 @@
1
- {"version":3,"names":["Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self"],"sources":["socket.shim.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js\n let ws;\n\n if (typeof WebSocket !== 'undefined') {\n ws = WebSocket;\n }\n else if (typeof MozWebSocket !== 'undefined') {\n // eslint-disable-next-line no-undef\n ws = MozWebSocket;\n }\n else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket;\n }\n else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket;\n }\n else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket;\n }\n\n return ws;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;;;;;AAMA;;AANA;AACA;AACA;;AAEA;AAIAA,mBAAA,CAAOC,uBAAP,GAAiC,SAASA,uBAAT,GAAmC;EAClE;EACA,IAAIC,EAAJ;;EAEA,IAAI,OAAOC,SAAP,KAAqB,WAAzB,EAAsC;IACpCD,EAAE,GAAGC,SAAL;EACD,CAFD,MAGK,IAAI,OAAOC,YAAP,KAAwB,WAA5B,EAAyC;IAC5C;IACAF,EAAE,GAAGE,YAAL;EACD,CAHI,MAIA,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;IACtCH,EAAE,GAAGG,MAAM,CAACF,SAAP,IAAoBE,MAAM,CAACD,YAAhC;EACD,CAFI,MAGA,IAAI,OAAOE,MAAP,KAAkB,WAAtB,EAAmC;IACtCJ,EAAE,GAAGI,MAAM,CAACH,SAAP,IAAoBG,MAAM,CAACF,YAAhC;EACD,CAFI,MAGA,IAAI,OAAOG,IAAP,KAAgB,WAApB,EAAiC;IACpCL,EAAE,GAAGK,IAAI,CAACJ,SAAL,IAAkBI,IAAI,CAACH,YAA5B;EACD;;EAED,OAAOF,EAAP;AACD,CAtBD;;eAwBeF,mB"}
1
+ {"version":3,"names":["Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self"],"sources":["socket.shim.js"],"sourcesContent":["/* eslint-disable no-restricted-globals */\n\n/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n/* eslint-env browser */\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js\n let ws;\n\n if (typeof WebSocket !== 'undefined') {\n ws = WebSocket;\n } else if (typeof MozWebSocket !== 'undefined') {\n // eslint-disable-next-line no-undef\n ws = MozWebSocket;\n } else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket;\n } else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket;\n } else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket;\n }\n\n return ws;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;;;;;AAQA;;AARA;;AAEA;AACA;AACA;;AAEA;AAIAA,mBAAA,CAAOC,uBAAP,GAAiC,SAASA,uBAAT,GAAmC;EAClE;EACA,IAAIC,EAAJ;;EAEA,IAAI,OAAOC,SAAP,KAAqB,WAAzB,EAAsC;IACpCD,EAAE,GAAGC,SAAL;EACD,CAFD,MAEO,IAAI,OAAOC,YAAP,KAAwB,WAA5B,EAAyC;IAC9C;IACAF,EAAE,GAAGE,YAAL;EACD,CAHM,MAGA,IAAI,OAAOC,MAAP,KAAkB,WAAtB,EAAmC;IACxCH,EAAE,GAAGG,MAAM,CAACF,SAAP,IAAoBE,MAAM,CAACD,YAAhC;EACD,CAFM,MAEA,IAAI,OAAOE,MAAP,KAAkB,WAAtB,EAAmC;IACxCJ,EAAE,GAAGI,MAAM,CAACH,SAAP,IAAoBG,MAAM,CAACF,YAAhC;EACD,CAFM,MAEA,IAAI,OAAOG,IAAP,KAAgB,WAApB,EAAiC;IACtCL,EAAE,GAAGK,IAAI,CAACJ,SAAL,IAAkBI,IAAI,CAACH,YAA5B;EACD;;EAED,OAAOF,EAAP;AACD,CAlBD;;eAoBeF,mB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-mercury",
3
- "version": "3.0.0-beta.13",
3
+ "version": "3.0.0-beta.15",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -28,19 +28,19 @@
28
28
  "sinon": "^9.2.4"
29
29
  },
30
30
  "dependencies": {
31
- "@webex/common": "3.0.0-beta.13",
32
- "@webex/common-timers": "3.0.0-beta.13",
33
- "@webex/internal-plugin-device": "3.0.0-beta.13",
34
- "@webex/internal-plugin-feature": "3.0.0-beta.13",
35
- "@webex/internal-plugin-mercury": "3.0.0-beta.13",
36
- "@webex/internal-plugin-metrics": "3.0.0-beta.13",
37
- "@webex/test-helper-chai": "3.0.0-beta.13",
38
- "@webex/test-helper-mocha": "3.0.0-beta.13",
39
- "@webex/test-helper-mock-web-socket": "3.0.0-beta.13",
40
- "@webex/test-helper-mock-webex": "3.0.0-beta.13",
41
- "@webex/test-helper-refresh-callback": "3.0.0-beta.13",
42
- "@webex/test-helper-test-users": "3.0.0-beta.13",
43
- "@webex/webex-core": "3.0.0-beta.13",
31
+ "@webex/common": "3.0.0-beta.15",
32
+ "@webex/common-timers": "3.0.0-beta.15",
33
+ "@webex/internal-plugin-device": "3.0.0-beta.15",
34
+ "@webex/internal-plugin-feature": "3.0.0-beta.15",
35
+ "@webex/internal-plugin-mercury": "3.0.0-beta.15",
36
+ "@webex/internal-plugin-metrics": "3.0.0-beta.15",
37
+ "@webex/test-helper-chai": "3.0.0-beta.15",
38
+ "@webex/test-helper-mocha": "3.0.0-beta.15",
39
+ "@webex/test-helper-mock-web-socket": "3.0.0-beta.15",
40
+ "@webex/test-helper-mock-webex": "3.0.0-beta.15",
41
+ "@webex/test-helper-refresh-callback": "3.0.0-beta.15",
42
+ "@webex/test-helper-test-users": "3.0.0-beta.15",
43
+ "@webex/webex-core": "3.0.0-beta.15",
44
44
  "backoff": "^2.5.0",
45
45
  "lodash": "^4.17.21",
46
46
  "uuid": "^3.3.2",
package/src/config.js CHANGED
@@ -29,6 +29,6 @@ export default {
29
29
  * discarding it
30
30
  * @type {[type]}
31
31
  */
32
- forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000
33
- }
32
+ forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,
33
+ },
34
34
  };
package/src/errors.js CHANGED
@@ -17,11 +17,11 @@ export class ConnectionError extends Exception {
17
17
  parse(event = {}) {
18
18
  Object.defineProperties(this, {
19
19
  code: {
20
- value: event.code
20
+ value: event.code,
21
21
  },
22
22
  reason: {
23
- value: event.reason
24
- }
23
+ value: event.reason,
24
+ },
25
25
  });
26
26
 
27
27
  return event.reason;
@@ -32,14 +32,16 @@ export class ConnectionError extends Exception {
32
32
  * thrown for CloseCode 4400
33
33
  */
34
34
  export class UnknownResponse extends ConnectionError {
35
- static defaultMessage = 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';
35
+ static defaultMessage =
36
+ 'UnknownResponse is produced by IE when we receive a 4XXX. You probably want to treat this like a NotFound';
36
37
  }
37
38
 
38
39
  /**
39
40
  * thrown for CloseCode 4400
40
41
  */
41
42
  export class BadRequest extends ConnectionError {
42
- static defaultMessage = 'BadRequest usually implies an attempt to use service account credentials';
43
+ static defaultMessage =
44
+ 'BadRequest usually implies an attempt to use service account credentials';
43
45
  }
44
46
 
45
47
  /**
package/src/index.js CHANGED
@@ -15,7 +15,7 @@ registerInternalPlugin('mercury', Mercury, {
15
15
  config,
16
16
  onBeforeLogout() {
17
17
  return this.disconnect();
18
- }
18
+ },
19
19
  });
20
20
 
21
21
  export {default} from './mercury';
@@ -27,6 +27,6 @@ export {
27
27
  ConnectionError,
28
28
  Forbidden,
29
29
  NotAuthorized,
30
- UnknownResponse
30
+ UnknownResponse,
31
31
  // NotFound
32
32
  } from './errors';