@webex/internal-plugin-mercury 3.0.0-beta.9 → 3.0.0-beta.90

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.
@@ -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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"}
@@ -1,26 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _ws = _interopRequireDefault(require("ws"));
14
-
15
10
  var _socketBase = _interopRequireDefault(require("./socket-base"));
16
-
17
11
  /*!
18
12
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
19
13
  */
14
+
20
15
  _socketBase.default.getWebSocketConstructor = function getWebSocketConstructor() {
21
16
  return _ws.default;
22
17
  };
23
-
24
18
  var _default = _socketBase.default;
25
19
  exports.default = _default;
26
20
  //# sourceMappingURL=socket.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Socket","getWebSocketConstructor","WS"],"sources":["socket.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport WS from 'ws';\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n return WS;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;;;;;AAIA;;AAEA;;AANA;AACA;AACA;AAMAA,mBAAA,CAAOC,uBAAP,GAAiC,SAASA,uBAAT,GAAmC;EAClE,OAAOC,WAAP;AACD,CAFD;;eAIeF,mB"}
1
+ {"version":3,"names":["Socket","getWebSocketConstructor","WS"],"sources":["socket.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport WS from 'ws';\n\nimport Socket from './socket-base';\n\nSocket.getWebSocketConstructor = function getWebSocketConstructor() {\n return WS;\n};\n\nexport default Socket;\n"],"mappings":";;;;;;;;AAIA;AAEA;AANA;AACA;AACA;;AAMAA,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuB,GAAG;EAClE,OAAOC,WAAE;AACX,CAAC;AAAC,eAEaF,mBAAM;AAAA"}
@@ -1,26 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _socketBase = _interopRequireDefault(require("./socket-base"));
10
+ /* eslint-disable no-restricted-globals */
14
11
 
15
12
  /*!
16
13
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
17
14
  */
18
15
 
19
16
  /* eslint-env browser */
17
+
20
18
  _socketBase.default.getWebSocketConstructor = function getWebSocketConstructor() {
21
19
  // Grabed from https://github.com/heineiuo/isomorphic-ws/blob/9b977394ac875638c045fd9cf774ed418484b394/browser.js
22
20
  var ws;
23
-
24
21
  if (typeof WebSocket !== 'undefined') {
25
22
  ws = WebSocket;
26
23
  } else if (typeof MozWebSocket !== 'undefined') {
@@ -33,10 +30,8 @@ _socketBase.default.getWebSocketConstructor = function getWebSocketConstructor()
33
30
  } else if (typeof self !== 'undefined') {
34
31
  ws = self.WebSocket || self.MozWebSocket;
35
32
  }
36
-
37
33
  return ws;
38
34
  };
39
-
40
35
  var _default = _socketBase.default;
41
36
  exports.default = _default;
42
37
  //# sourceMappingURL=socket.shim.js.map
@@ -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,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuB,GAAG;EAClE;EACA,IAAIC,EAAE;EAEN,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE;IACpCD,EAAE,GAAGC,SAAS;EAChB,CAAC,MAAM,IAAI,OAAOC,YAAY,KAAK,WAAW,EAAE;IAC9C;IACAF,EAAE,GAAGE,YAAY;EACnB,CAAC,MAAM,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;IACxCH,EAAE,GAAGG,MAAM,CAACF,SAAS,IAAIE,MAAM,CAACD,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOE,MAAM,KAAK,WAAW,EAAE;IACxCJ,EAAE,GAAGI,MAAM,CAACH,SAAS,IAAIG,MAAM,CAACF,YAAY;EAC9C,CAAC,MAAM,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;IACtCL,EAAE,GAAGK,IAAI,CAACJ,SAAS,IAAII,IAAI,CAACH,YAAY;EAC1C;EAEA,OAAOF,EAAE;AACX,CAAC;AAAC,eAEaF,mBAAM;AAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-mercury",
3
- "version": "3.0.0-beta.9",
3
+ "version": "3.0.0-beta.90",
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.9",
32
- "@webex/common-timers": "3.0.0-beta.9",
33
- "@webex/internal-plugin-device": "3.0.0-beta.9",
34
- "@webex/internal-plugin-feature": "3.0.0-beta.9",
35
- "@webex/internal-plugin-mercury": "3.0.0-beta.9",
36
- "@webex/internal-plugin-metrics": "3.0.0-beta.9",
37
- "@webex/test-helper-chai": "3.0.0-beta.9",
38
- "@webex/test-helper-mocha": "3.0.0-beta.9",
39
- "@webex/test-helper-mock-web-socket": "3.0.0-beta.9",
40
- "@webex/test-helper-mock-webex": "3.0.0-beta.9",
41
- "@webex/test-helper-refresh-callback": "3.0.0-beta.9",
42
- "@webex/test-helper-test-users": "3.0.0-beta.9",
43
- "@webex/webex-core": "3.0.0-beta.9",
31
+ "@webex/common": "3.0.0-beta.90",
32
+ "@webex/common-timers": "3.0.0-beta.90",
33
+ "@webex/internal-plugin-device": "3.0.0-beta.90",
34
+ "@webex/internal-plugin-feature": "3.0.0-beta.90",
35
+ "@webex/internal-plugin-mercury": "3.0.0-beta.90",
36
+ "@webex/internal-plugin-metrics": "3.0.0-beta.90",
37
+ "@webex/test-helper-chai": "3.0.0-beta.90",
38
+ "@webex/test-helper-mocha": "3.0.0-beta.90",
39
+ "@webex/test-helper-mock-web-socket": "3.0.0-beta.90",
40
+ "@webex/test-helper-mock-webex": "3.0.0-beta.90",
41
+ "@webex/test-helper-refresh-callback": "3.0.0-beta.90",
42
+ "@webex/test-helper-test-users": "3.0.0-beta.90",
43
+ "@webex/webex-core": "3.0.0-beta.90",
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';
package/src/mercury.js CHANGED
@@ -15,16 +15,11 @@ import {
15
15
  Forbidden,
16
16
  NotAuthorized,
17
17
  UnknownResponse,
18
- ConnectionError
18
+ ConnectionError,
19
19
  // NotFound
20
20
  } from './errors';
21
21
 
22
- const normalReconnectReasons = [
23
- 'idle',
24
- 'done (forced)',
25
- 'pong not received',
26
- 'pong mismatch'
27
- ];
22
+ const normalReconnectReasons = ['idle', 'done (forced)', 'pong not received', 'pong mismatch'];
28
23
 
29
24
  const Mercury = WebexPlugin.extend({
30
25
  namespace: 'Mercury',
@@ -32,14 +27,14 @@ const Mercury = WebexPlugin.extend({
32
27
  session: {
33
28
  connected: {
34
29
  default: false,
35
- type: 'boolean'
30
+ type: 'boolean',
36
31
  },
37
32
  connecting: {
38
33
  default: false,
39
- type: 'boolean'
34
+ type: 'boolean',
40
35
  },
41
36
  socket: 'object',
42
- localClusterServiceUrls: 'object'
37
+ localClusterServiceUrls: 'object',
43
38
  },
44
39
 
45
40
  derived: {
@@ -47,8 +42,8 @@ const Mercury = WebexPlugin.extend({
47
42
  deps: ['connected'],
48
43
  fn() {
49
44
  return this.connected;
50
- }
51
- }
45
+ },
46
+ },
52
47
  },
53
48
 
54
49
  @oneFlight
@@ -61,12 +56,13 @@ const Mercury = WebexPlugin.extend({
61
56
 
62
57
  this.connecting = true;
63
58
 
64
- return Promise.resolve(this.webex.internal.device.registered || this.webex.internal.device.register())
65
- .then(() => {
66
- this.logger.info('mercury: connecting');
59
+ return Promise.resolve(
60
+ this.webex.internal.device.registered || this.webex.internal.device.register()
61
+ ).then(() => {
62
+ this.logger.info('mercury: connecting');
67
63
 
68
- return this._connectWithBackoff(webSocketUrl);
69
- });
64
+ return this._connectWithBackoff(webSocketUrl);
65
+ });
70
66
  },
71
67
 
72
68
  @oneFlight
@@ -121,7 +117,8 @@ const Mercury = WebexPlugin.extend({
121
117
  webSocketUrl = this.webex.internal.device.webSocketUrl;
122
118
  }
123
119
 
124
- return this.webex.internal.feature.getFeature('developer', 'web-high-availability')
120
+ return this.webex.internal.feature
121
+ .getFeature('developer', 'web-high-availability')
125
122
  .then((haMessagingEnabled) => {
126
123
  if (haMessagingEnabled) {
127
124
  return this.webex.internal.services.convertUrlToPriorityHostUrl(webSocketUrl);
@@ -138,13 +135,13 @@ const Mercury = WebexPlugin.extend({
138
135
  Object.assign(webSocketUrl.query, {
139
136
  outboundWireFormat: 'text',
140
137
  bufferStates: true,
141
- aliasHttpStatus: true
138
+ aliasHttpStatus: true,
142
139
  });
143
140
 
144
141
  if (webSharedMercury) {
145
142
  Object.assign(webSocketUrl.query, {
146
143
  mercuryRegistrationStatus: true,
147
- isRegistrationRefreshEnabled: true
144
+ isRegistrationRefreshEnabled: true,
148
145
  });
149
146
  Reflect.deleteProperty(webSocketUrl.query, 'bufferStates');
150
147
  }
@@ -183,7 +180,7 @@ const Mercury = WebexPlugin.extend({
183
180
  pongTimeout: this.config.pongTimeout,
184
181
  token: token.toString(),
185
182
  trackingId: `${this.webex.sessionId}_${Date.now()}`,
186
- logger: this.logger
183
+ logger: this.logger,
187
184
  };
188
185
 
189
186
  // if the consumer has supplied request options use them
@@ -201,16 +198,17 @@ const Mercury = WebexPlugin.extend({
201
198
  .then(() => {
202
199
  this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {
203
200
  fields: {
204
- success: true
201
+ success: true,
205
202
  },
206
203
  tags: {
207
204
  action: 'connected',
208
- url: attemptWSUrl
209
- }
205
+ url: attemptWSUrl,
206
+ },
210
207
  });
211
208
  callback();
212
209
 
213
- return this.webex.internal.feature.getFeature('developer', 'web-high-availability')
210
+ return this.webex.internal.feature
211
+ .getFeature('developer', 'web-high-availability')
214
212
  .then((haMessagingEnabled) => {
215
213
  if (haMessagingEnabled) {
216
214
  return this.webex.internal.device.refresh();
@@ -231,17 +229,17 @@ const Mercury = WebexPlugin.extend({
231
229
  // UnknownResponse is produced by IE for any 4XXX; treated it like a bad
232
230
  // web socket url and let WDM handle the token checking
233
231
  if (reason instanceof UnknownResponse) {
234
- this.logger.info('mercury: received unknown response code, refreshing device registration');
232
+ this.logger.info(
233
+ 'mercury: received unknown response code, refreshing device registration'
234
+ );
235
235
 
236
- return this.webex.internal.device.refresh()
237
- .then(() => callback(reason));
236
+ return this.webex.internal.device.refresh().then(() => callback(reason));
238
237
  }
239
238
  // NotAuthorized implies expired token
240
239
  if (reason instanceof NotAuthorized) {
241
240
  this.logger.info('mercury: received authorization error, reauthorizing');
242
241
 
243
- return this.webex.credentials.refresh({force: true})
244
- .then(() => callback(reason));
242
+ return this.webex.credentials.refresh({force: true}).then(() => callback(reason));
245
243
  }
246
244
  // // NotFound implies expired web socket url
247
245
  // else if (reason instanceof NotFound) {
@@ -258,19 +256,22 @@ const Mercury = WebexPlugin.extend({
258
256
  return callback(reason);
259
257
  }
260
258
  if (reason instanceof ConnectionError) {
261
- return this.webex.internal.feature.getFeature('developer', 'web-high-availability')
259
+ return this.webex.internal.feature
260
+ .getFeature('developer', 'web-high-availability')
262
261
  .then((haMessagingEnabled) => {
263
262
  if (haMessagingEnabled) {
264
- this.logger.info('mercury: received a generic connection error, will try to connect to another datacenter');
263
+ this.logger.info(
264
+ 'mercury: received a generic connection error, will try to connect to another datacenter'
265
+ );
265
266
  this.webex.internal.metrics.submitClientMetrics('web-ha-mercury', {
266
267
  fields: {
267
- success: false
268
+ success: false,
268
269
  },
269
270
  tags: {
270
271
  action: 'failed',
271
272
  error: reason.message,
272
- url: attemptWSUrl
273
- }
273
+ url: attemptWSUrl,
274
+ },
274
275
  });
275
276
 
276
277
  return this.webex.internal.services.markFailedUrl(attemptWSUrl);
@@ -299,7 +300,9 @@ const Mercury = WebexPlugin.extend({
299
300
 
300
301
  this.backoffCall = undefined;
301
302
  if (err) {
302
- this.logger.info(`mercury: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`);
303
+ this.logger.info(
304
+ `mercury: failed to connect after ${call.getNumRetries()} retries; log statement about next retry was inaccurate; ${err}`
305
+ );
303
306
 
304
307
  return reject(err);
305
308
  }
@@ -315,10 +318,12 @@ const Mercury = WebexPlugin.extend({
315
318
  this._attemptConnection(webSocketUrl, callback);
316
319
  }, onComplete);
317
320
 
318
- call.setStrategy(new backoff.ExponentialStrategy({
319
- initialDelay: this.config.backoffTimeReset,
320
- maxDelay: this.config.backoffTimeMax
321
- }));
321
+ call.setStrategy(
322
+ new backoff.ExponentialStrategy({
323
+ initialDelay: this.config.backoffTimeReset,
324
+ maxDelay: this.config.backoffTimeMax,
325
+ })
326
+ );
322
327
 
323
328
  if (this.config.maxRetries) {
324
329
  call.failAfter(this.config.maxRetries);
@@ -334,7 +339,9 @@ const Mercury = WebexPlugin.extend({
334
339
  const number = call.getNumRetries();
335
340
  const delay = Math.min(call.strategy_.nextBackoffDelay_, this.config.backoffTimeMax);
336
341
 
337
- this.logger.info(`mercury: failed to connect; attempting retry ${number + 1} in ${delay} ms`);
342
+ this.logger.info(
343
+ `mercury: failed to connect; attempting retry ${number + 1} in ${delay} ms`
344
+ );
338
345
  /* istanbul ignore if */
339
346
  if (process.env.NODE_ENV === 'development') {
340
347
  this.logger.debug('mercury: ', err, err.stack);
@@ -354,8 +361,7 @@ const Mercury = WebexPlugin.extend({
354
361
  _emit(...args) {
355
362
  try {
356
363
  this.trigger(...args);
357
- }
358
- catch (error) {
364
+ } catch (error) {
359
365
  this.logger.error('mercury: error occurred in event handler', error);
360
366
  }
361
367
  },
@@ -373,7 +379,7 @@ const Mercury = WebexPlugin.extend({
373
379
  if ((this.webex[namespace] || this.webex.internal[namespace])[handlerName]) {
374
380
  handlers.push({
375
381
  name: handlerName,
376
- namespace
382
+ namespace,
377
383
  });
378
384
  }
379
385
 
@@ -395,8 +401,10 @@ const Mercury = WebexPlugin.extend({
395
401
 
396
402
  switch (event.code) {
397
403
  case 1003:
398
- // metric: disconnect
399
- this.logger.info(`mercury: Mercury service rejected last message; will not reconnect: ${event.reason}`);
404
+ // metric: disconnect
405
+ this.logger.info(
406
+ `mercury: Mercury service rejected last message; will not reconnect: ${event.reason}`
407
+ );
400
408
  this._emit('offline.permanent', event);
401
409
  break;
402
410
  case 4000:
@@ -421,8 +429,7 @@ const Mercury = WebexPlugin.extend({
421
429
  this._reconnect(socketUrl);
422
430
  // metric: disconnect
423
431
  // if (reason === done forced) metric: force closure
424
- }
425
- else {
432
+ } else {
426
433
  this.logger.info('mercury: socket disconnected; will not reconnect');
427
434
  this._emit('offline.permanent', event);
428
435
  }
@@ -432,8 +439,7 @@ const Mercury = WebexPlugin.extend({
432
439
  // unexpected disconnect
433
440
  this._emit('offline.permanent', event);
434
441
  }
435
- }
436
- catch (error) {
442
+ } catch (error) {
437
443
  this.logger.error('mercury: error occurred in close handler', error);
438
444
  }
439
445
  },
@@ -450,20 +456,29 @@ const Mercury = WebexPlugin.extend({
450
456
  this._applyOverrides(data);
451
457
 
452
458
  return this._getEventHandlers(data.eventType)
453
- .reduce((promise, handler) => promise.then(() => {
454
- const {namespace, name} = handler;
455
-
456
- return new Promise((resolve) => resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data)))
457
- .catch((reason) => this.logger.error(`mercury: error occurred in autowired event handler for ${data.eventType}`, reason));
458
- }), Promise.resolve())
459
+ .reduce(
460
+ (promise, handler) =>
461
+ promise.then(() => {
462
+ const {namespace, name} = handler;
463
+
464
+ return new Promise((resolve) =>
465
+ resolve((this.webex[namespace] || this.webex.internal[namespace])[name](data))
466
+ ).catch((reason) =>
467
+ this.logger.error(
468
+ `mercury: error occurred in autowired event handler for ${data.eventType}`,
469
+ reason
470
+ )
471
+ );
472
+ }),
473
+ Promise.resolve()
474
+ )
459
475
  .then(() => {
460
476
  this._emit('event', event.data);
461
477
  const [namespace] = data.eventType.split('.');
462
478
 
463
479
  if (namespace === data.eventType) {
464
480
  this._emit(`event:${namespace}`, envelope);
465
- }
466
- else {
481
+ } else {
467
482
  this._emit(`event:${namespace}`, envelope);
468
483
  this._emit(`event:${data.eventType}`, envelope);
469
484
  }
@@ -477,7 +492,7 @@ const Mercury = WebexPlugin.extend({
477
492
  this.logger.info('mercury: reconnecting');
478
493
 
479
494
  return this.connect(webSocketUrl);
480
- }
495
+ },
481
496
  });
482
497
 
483
498
  export default Mercury;