@webex/internal-plugin-mercury 3.0.0-beta.8 → 3.0.0-bnr.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;AAIA;AAEA;AACA;AAEA;AAEA;AAOmB;AAAA;AAEnB,IAAMA,OAAO,GAAG,sBAAa;;AAE7B;AACA;AACA;AAFA,IAGqBC,MAAM;EAAA;EAAA;EACzB;AACF;AACA;AACA;EACE,kBAAc;IAAA;IAAA;IACZ;IACA,MAAKC,SAAS,GAAG,MAAKA,SAAS,CAACC,IAAI,6CAAM;IAC1C,MAAKC,OAAO,GAAG,MAAKA,OAAO,CAACD,IAAI,6CAAM;IAAC;EACzC;;EAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAiB;MACf,OAAOH,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACC,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAqB;MACnB,OAAON,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACE,cAAc;IACzC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAiB;MACf,OAAOP,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACG,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAe;MACb,OAAOR,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACI,QAAQ;IACnC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAiB;MACf,OAAOT,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACK,UAAU;IACrC;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,KAIA,eAAU;MACR,OAAOV,OAAO,CAACK,GAAG,CAAC,IAAI,CAAC,CAACM,GAAG;IAC9B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA;IAWA;AACF;AACA;AACA;AACA;AACA;AACA;IACE,eAAMC,OAAO,EAAE;MAAA;MACb,OAAO,qBAAY,UAACC,OAAO,EAAEC,MAAM,EAAK;QACtC,IAAMC,MAAM,GAAGf,OAAO,CAACK,GAAG,CAAC,MAAI,CAAC;QAEhC,IAAI,CAACU,MAAM,EAAE;UACX;UACAF,OAAO,EAAE;UAET;QACF;QACA;QACA,MAAI,CAACG,MAAM,CAACC,IAAI,CAAC,iBAAiB,CAAC;QAEnC,IAAIF,MAAM,CAACL,UAAU,KAAK,CAAC,IAAIK,MAAM,CAACL,UAAU,KAAK,CAAC,EAAE;UACtD,MAAI,CAACM,MAAM,CAACC,IAAI,CAAC,wBAAwB,CAAC;UAC1CJ,OAAO,EAAE;UAET;QACF;QAEAD,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;QACvB,IAAIA,OAAO,CAACM,IAAI,IAAIN,OAAO,CAACM,IAAI,KAAK,IAAI,KAAKN,OAAO,CAACM,IAAI,GAAG,IAAI,IAAIN,OAAO,CAACM,IAAI,GAAG,IAAI,CAAC,EAAE;UACzFJ,MAAM,CAAC,IAAIK,KAAK,CAAC,kEAAkE,CAAC,CAAC;UAErF;QACF;QAEAP,OAAO,GAAG,wBAASA,OAAO,EAAE;UAC1BM,IAAI,EAAE,IAAI;UACVE,MAAM,EAAE;QACV,CAAC,CAAC;QAEF,IAAMC,UAAU,GAAG,IAAAC,4BAAc,EAAC,YAAM;UACtC,IAAI;YACF,MAAI,CAACN,MAAM,CAACC,IAAI,CAAC,kDAAkD,CAAC;YACpEJ,OAAO,CACL,MAAI,CAACT,OAAO,CAAC;cACXc,IAAI,EAAE,IAAI;cACVE,MAAM,EAAE;YACV,CAAC,CAAC,CACH;UACH,CAAC,CAAC,OAAOG,KAAK,EAAE;YACd,MAAI,CAACP,MAAM,CAACQ,IAAI,CAAC,4BAA4B,EAAED,KAAK,CAAC;UACvD;QACF,CAAC,EAAE,MAAI,CAACE,eAAe,CAAC;QAExBV,MAAM,CAACX,OAAO,GAAG,UAACsB,KAAK,EAAK;UAC1B,MAAI,CAACV,MAAM,CAACC,IAAI,CAAC,2BAA2B,EAAES,KAAK,CAACR,IAAI,EAAEQ,KAAK,CAACN,MAAM,CAAC;UACvEO,YAAY,CAACN,UAAU,CAAC;UACxB,MAAI,CAACjB,OAAO,CAACsB,KAAK,CAAC;UACnBb,OAAO,CAACa,KAAK,CAAC;QAChB,CAAC;QAEDX,MAAM,CAACa,KAAK,CAAChB,OAAO,CAACM,IAAI,EAAEN,OAAO,CAACQ,MAAM,CAAC;MAC5C,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EAZE;IAAA;IAAA,OAaA,cAAKT,GAAG,EAAEC,OAAO,EAAE;MAAA;MACjB,OAAO,qBAAY,UAACC,OAAO,EAAEC,MAAM,EAAK;QACtC;QACA,IAAI,CAACH,GAAG,EAAE;UACRG,MAAM,CAAC,IAAIK,KAAK,CAAC,mBAAmB,CAAC,CAAC;UAEtC;QACF;QAEA,IAAInB,OAAO,CAACK,GAAG,CAAC,MAAI,CAAC,EAAE;UACrBS,MAAM,CAAC,IAAIK,KAAK,CAAC,oDAAoD,CAAC,CAAC;UAEvE;QACF;QAEAP,OAAO,GAAGA,OAAO,IAAI,CAAC,CAAC;QAEvB,IAAAiB,qBAAa,EACX,CAAC,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EACnFjB,OAAO,CACR;QAED,mBAAYA,OAAO,CAAC,CAACkB,OAAO,CAAC,UAACC,GAAG,EAAK;UACpC,6BAAuB,MAAI,EAAEA,GAAG,EAAE;YAChCC,UAAU,EAAE,KAAK;YACjBC,KAAK,EAAErB,OAAO,CAACmB,GAAG;UACpB,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,IAAMG,SAAS,GAAGjC,MAAM,CAACkC,uBAAuB,EAAE;QAElD,MAAI,CAACnB,MAAM,CAACC,IAAI,CAAC,4BAA4B,CAAC;QAC9C,IAAMF,MAAM,GAAG,IAAImB,SAAS,CAACvB,GAAG,EAAE,EAAE,EAAEC,OAAO,CAAC;QAE9CG,MAAM,CAACT,UAAU,GAAG,aAAa;QACjCS,MAAM,CAACb,SAAS,GAAG,MAAI,CAACA,SAAS;QAEjCa,MAAM,CAACX,OAAO,GAAG,UAACsB,KAAK,EAAK;UAC1BA,KAAK,GAAG,MAAI,CAACU,aAAa,CAACV,KAAK,CAAC;UACjC,MAAI,CAACV,MAAM,CAACC,IAAI,CAAC,4BAA4B,EAAES,KAAK,CAACR,IAAI,EAAEQ,KAAK,CAACN,MAAM,CAAC;UACxE,QAAQM,KAAK,CAACR,IAAI;YAChB,KAAK,IAAI;cACP;cACA;cACA;cACA;cACA,OAAOJ,MAAM,CAAC,IAAIuB,uBAAe,CAACX,KAAK,CAAC,CAAC;YAC3C,KAAK,IAAI;cACP,OAAOZ,MAAM,CAAC,IAAIwB,kBAAU,CAACZ,KAAK,CAAC,CAAC;YACtC,KAAK,IAAI;cACP,OAAOZ,MAAM,CAAC,IAAIyB,qBAAa,CAACb,KAAK,CAAC,CAAC;YACzC,KAAK,IAAI;cACP,OAAOZ,MAAM,CAAC,IAAI0B,iBAAS,CAACd,KAAK,CAAC,CAAC;YACrC;YACA;YACA;cACE,OAAOZ,MAAM,CAAC,IAAI2B,uBAAe,CAACf,KAAK,CAAC,CAAC;UAAC;QAEhD,CAAC;QAEDX,MAAM,CAAC2B,MAAM,GAAG,YAAM;UACpB,MAAI,CAAC1B,MAAM,CAACC,IAAI,CAAC,mBAAmB,CAAC;UACrC,MAAI,CAAC0B,UAAU,EAAE,CACdC,IAAI,CAAC,YAAM;YACV,MAAI,CAAC5B,MAAM,CAACC,IAAI,CAAC,oBAAoB,CAAC;YACtCF,MAAM,CAACX,OAAO,GAAG,MAAI,CAACA,OAAO;YAC7BS,OAAO,EAAE;UACX,CAAC,CAAC,CACDgC,KAAK,CAAC/B,MAAM,CAAC;QAClB,CAAC;QAEDC,MAAM,CAAC+B,OAAO,GAAG,UAACpB,KAAK,EAAK;UAC1B,MAAI,CAACV,MAAM,CAACQ,IAAI,CAAC,2BAA2B,EAAEE,KAAK,CAAC;QACtD,CAAC;QAED1B,OAAO,CAAC+C,GAAG,CAAC,MAAI,EAAEhC,MAAM,CAAC;QACzB,MAAI,CAACC,MAAM,CAACC,IAAI,CAAC,4BAA4B,CAAC;MAChD,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,iBAAQS,KAAK,EAAE;MACb,IAAI,CAACV,MAAM,CAACC,IAAI,CAAC,gBAAgB,EAAES,KAAK,CAACR,IAAI,EAAEQ,KAAK,CAACN,MAAM,CAAC;MAC5DO,YAAY,CAAC,IAAI,CAACqB,SAAS,CAAC;MAC5BrB,YAAY,CAAC,IAAI,CAACsB,SAAS,CAAC;MAE5BvB,KAAK,GAAG,IAAI,CAACU,aAAa,CAACV,KAAK,CAAC;MACjC,IAAI,CAACwB,IAAI,CAAC,OAAO,EAAExB,KAAK,CAAC;;MAEzB;MACA;MACA,IAAI,CAACyB,kBAAkB,EAAE;IAC3B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,mBAAUzB,KAAK,EAAE;MACf,IAAI;QACF,IAAM0B,IAAI,GAAGC,IAAI,CAACC,KAAK,CAAC5B,KAAK,CAAC0B,IAAI,CAAC;QACnC,IAAMG,cAAc,GAAG,wBAASH,IAAI,CAACG,cAAc,EAAE,EAAE,CAAC;QAExD,IAAI,CAACvC,MAAM,CAACwC,KAAK,CAAC,2BAA2B,EAAED,cAAc,CAAC;QAC9D,IAAI,IAAI,CAACE,sBAAsB,IAAIF,cAAc,KAAK,IAAI,CAACE,sBAAsB,EAAE;UACjF,IAAI,CAACzC,MAAM,CAACwC,KAAK,sFAC+D,IAAI,CAACC,sBAAsB,uBAAaF,cAAc,EACrI;UACD,IAAI,CAACL,IAAI,CAAC,mBAAmB,EAAEK,cAAc,EAAE,IAAI,CAACE,sBAAsB,CAAC;QAC7E;QACA,IAAI,CAACA,sBAAsB,GAAGF,cAAc,GAAG,CAAC;;QAEhD;QACA;QACA;QACA,IAAMG,cAAc,GAAG;UAACN,IAAI,EAAJA;QAAI,CAAC;QAE7B,IAAI,CAACO,YAAY,CAACD,cAAc,CAAC;QACjC,IAAIN,IAAI,CAACQ,IAAI,KAAK,MAAM,EAAE;UACxB,IAAI,CAACV,IAAI,CAAC,MAAM,EAAEQ,cAAc,CAAC;QACnC,CAAC,MAAM;UACL,IAAI,CAACR,IAAI,CAAC,SAAS,EAAEQ,cAAc,CAAC;QACtC;MACF,CAAC,CAAC,OAAOnC,KAAK,EAAE;QACd;QACA;QACA;QACA;QACA,IAAI,CAACP,MAAM,CAACQ,IAAI,CAAC,iDAAiD,EAAED,KAAK,CAAC;MAC5E;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,cAAK6B,IAAI,EAAE;MAAA;MACT,OAAO,qBAAY,UAACvC,OAAO,EAAEC,MAAM,EAAK;QACtC,IAAI,MAAI,CAACJ,UAAU,KAAK,CAAC,EAAE;UACzB,OAAOI,MAAM,CAAC,IAAIK,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACjD;QAEA,IAAI,wBAASiC,IAAI,CAAC,EAAE;UAClBA,IAAI,GAAG,wBAAeA,IAAI,CAAC;QAC7B;QAEA,IAAMrC,MAAM,GAAGf,OAAO,CAACK,GAAG,CAAC,MAAI,CAAC;QAEhCU,MAAM,CAAC8C,IAAI,CAACT,IAAI,CAAC;QAEjB,OAAOvC,OAAO,EAAE;MAClB,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,sBAAaa,KAAK,EAAE;MAClB,IAAI,CAACA,KAAK,EAAE;QACV,OAAO,iBAAQZ,MAAM,CAAC,IAAIK,KAAK,CAAC,qBAAqB,CAAC,CAAC;MACzD;MAEA,IAAI,CAAC,mBAAIO,KAAK,EAAE,SAAS,CAAC,EAAE;QAC1B,OAAO,iBAAQZ,MAAM,CAAC,IAAIK,KAAK,CAAC,6BAA6B,CAAC,CAAC;MACjE;MAEA,OAAO,IAAI,CAAC0C,IAAI,CAAC;QACfC,SAAS,EAAEpC,KAAK,CAAC0B,IAAI,CAACW,EAAE;QACxBH,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA;IAAA,OAKA,sBAAa;MAAA;MACX,OAAO,qBAAY,UAAC/C,OAAO,EAAK;QAC9B,MAAI,CAACG,MAAM,CAACC,IAAI,CAAC,qBAAqB,CAAC;QACvC,MAAI,CAAC4C,IAAI,CAAC;UACRE,EAAE,EAAEC,aAAI,CAACC,EAAE,EAAE;UACbL,IAAI,EAAE,eAAe;UACrBR,IAAI,EAAE;YACJc,KAAK,EAAE,MAAI,CAACA;UACd,CAAC;UACDC,UAAU,EAAE,MAAI,CAACA,UAAU;UAC3BC,aAAa,EAAE,MAAI,CAACA;QACtB,CAAC,CAAC;QAEF,IAAMC,kBAAkB,GAAG,SAArBA,kBAAkB,CAAI3C,KAAK,EAAK;UACpC,IACE,CAACA,KAAK,CAAC0B,IAAI,CAACQ,IAAI,KACflC,KAAK,CAAC0B,IAAI,CAACA,IAAI,CAACkB,SAAS,KAAK,sBAAsB,IACnD5C,KAAK,CAAC0B,IAAI,CAACA,IAAI,CAACkB,SAAS,KAAK,6BAA6B,CAAC,EAC9D;YACA,MAAI,CAACC,cAAc,CAAC,SAAS,EAAEF,kBAAkB,CAAC;YAClD,MAAI,CAACG,KAAK,EAAE;YACZ3D,OAAO,EAAE;UACX;QACF,CAAC;QAED,MAAI,CAAC4D,IAAI,CAAC,SAAS,EAAEJ,kBAAkB,CAAC;MAC1C,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,uBAAc3C,KAAK,EAAE;MACnB,IAAIA,KAAK,CAACR,IAAI,KAAK,IAAI,IAAIQ,KAAK,CAACN,MAAM,EAAE;QACvC,QAAQM,KAAK,CAACN,MAAM,CAACsD,WAAW,EAAE;UAChC,KAAK,UAAU;YACb,IAAI,CAAC1D,MAAM,CAACC,IAAI,CAAC,6CAA6C,EAAES,KAAK,CAACN,MAAM,CAAC;YAC7EM,KAAK,CAACR,IAAI,GAAG,IAAI;YACjB;UACF,KAAK,uBAAuB;UAC5B,KAAK,2EAA2E;YAC9E,IAAI,CAACF,MAAM,CAACC,IAAI,CAAC,6CAA6C,EAAES,KAAK,CAACN,MAAM,CAAC;YAC7EM,KAAK,CAACR,IAAI,GAAG,IAAI;YACjB;UACF;UACA;QAAA;MAEJ;;MAEA,OAAOQ,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,eAAMqC,EAAE,EAAE;MAAA;MACR,IAAMY,aAAa,GAAG,SAAhBA,aAAa,CAAIjD,KAAK,EAAK;QAC/B,IAAI;UACF,MAAI,CAACV,MAAM,CAACwC,KAAK,CAAC,cAAc,EAAE9B,KAAK,CAAC0B,IAAI,CAACW,EAAE,CAAC;UAChD,IAAIrC,KAAK,CAAC0B,IAAI,IAAI1B,KAAK,CAAC0B,IAAI,CAACW,EAAE,KAAKA,EAAE,EAAE;YACtC,MAAI,CAAC/C,MAAM,CAACC,IAAI,CAAC,yDAAyD,CAAC;YAC3E,MAAI,CAACD,MAAM,CAACwC,KAAK,CAAC,kBAAkB,EAAEO,EAAE,EAAE,UAAU,EAAErC,KAAK,CAAC0B,IAAI,CAACW,EAAE,CAAC;YACpE,MAAI,CAACnC,KAAK,CAAC;cACTV,IAAI,EAAE,IAAI;cACVE,MAAM,EAAE;YACV,CAAC,CAAC;UACJ;QACF,CAAC,CAAC,OAAOG,KAAK,EAAE;UACd;UACA;UACA;UACA,MAAI,CAACP,MAAM,CAACO,KAAK,CAAC,yCAAyC,EAAEA,KAAK,CAAC;QACrE;MACF,CAAC;MAED,IAAMqD,iBAAiB,GAAG,SAApBA,iBAAiB,GAAS;QAC9B,IAAI;UACF,MAAI,CAAC5D,MAAM,CAACC,IAAI,CAAC,6DAA6D,CAAC;UAC/E,MAAI,CAACW,KAAK,CAAC;YACTV,IAAI,EAAE,IAAI;YACVE,MAAM,EAAE;UACV,CAAC,CAAC,CAACyB,KAAK,CAAC,UAACzB,MAAM,EAAK;YACnB,MAAI,CAACJ,MAAM,CAACQ,IAAI,CAAC,kDAAkD,EAAEJ,MAAM,CAAC;UAC9E,CAAC,CAAC;QACJ,CAAC,CAAC,OAAOG,KAAK,EAAE;UACd;UACA;UACA;UACA,MAAI,CAACP,MAAM,CAACO,KAAK,CAAC,6CAA6C,EAAEA,KAAK,CAAC;QACzE;MACF,CAAC;MAED,IAAMsD,kCAAkC,GAAG,SAArCA,kCAAkC,GAAS;QAC/C,IAAI;UACFlD,YAAY,CAAC,MAAI,CAACqB,SAAS,CAAC;UAC5B,MAAI,CAACC,SAAS,GAAG,IAAA3B,4BAAc,EAAC;YAAA,OAAM,MAAI,CAACkD,KAAK,EAAE;UAAA,GAAE,MAAI,CAACM,YAAY,CAAC;QACxE,CAAC,CAAC,OAAOvD,KAAK,EAAE;UACd;UACA;UACA;UACA,MAAI,CAACP,MAAM,CAACO,KAAK,CAAC,8DAA8D,EAAEA,KAAK,CAAC;QAC1F;MACF,CAAC;MAEDwC,EAAE,GAAGA,EAAE,IAAIC,aAAI,CAACC,EAAE,EAAE;MACpB,IAAI,CAACjB,SAAS,GAAG,IAAA1B,4BAAc,EAACsD,iBAAiB,EAAE,IAAI,CAACG,WAAW,CAAC;MACpE,IAAI,CAACN,IAAI,CAAC,MAAM,EAAEI,kCAAkC,CAAC;MACrD,IAAI,CAACJ,IAAI,CAAC,MAAM,EAAEE,aAAa,CAAC;MAEhC,IAAI,CAAC3D,MAAM,CAACwC,KAAK,wBAAiBO,EAAE,EAAG;MAEvC,OAAO,IAAI,CAACF,IAAI,CAAC;QACfE,EAAE,EAAFA,EAAE;QACFH,IAAI,EAAE;MACR,CAAC,CAAC;IACJ;EAAC;IAAA;IAAA,OAtYD,mCAAiC;MAC/B,MAAM,IAAIzC,KAAK,CACb,4FAA4F,CAC7F;IACH;EAAC;EAAA;AAAA,EApEiC6D,oBAAY;AAAA"}
@@ -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"}
@@ -0,0 +1,10 @@
1
+ declare namespace _default {
2
+ namespace mercury {
3
+ const pingInterval: number;
4
+ const pongTimeout: number;
5
+ const backoffTimeMax: number;
6
+ const backoffTimeReset: number;
7
+ const forceCloseDelay: [type];
8
+ }
9
+ }
10
+ export default _default;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Exception thrown when a websocket gets closed
3
+ */
4
+ export class ConnectionError {
5
+ static defaultMessage: string;
6
+ /**
7
+ * @param {CloseEvent} event
8
+ * @returns {string}
9
+ */
10
+ parse(event?: CloseEvent): string;
11
+ }
12
+ /**
13
+ * thrown for CloseCode 4400
14
+ */
15
+ export class UnknownResponse extends ConnectionError {
16
+ }
17
+ /**
18
+ * thrown for CloseCode 4400
19
+ */
20
+ export class BadRequest extends ConnectionError {
21
+ }
22
+ /**
23
+ * thrown for CloseCode 4401
24
+ */
25
+ export class NotAuthorized extends ConnectionError {
26
+ }
27
+ /**
28
+ * thrown for CloseCode 4403
29
+ */
30
+ export class Forbidden extends ConnectionError {
31
+ }
@@ -0,0 +1,4 @@
1
+ export { default as Socket } from "./socket";
2
+ export { default as config } from "./config";
3
+ export { default, default as Mercury } from "./mercury";
4
+ export { BadRequest, ConnectionError, Forbidden, NotAuthorized, UnknownResponse } from "./errors";
@@ -0,0 +1,2 @@
1
+ export default Mercury;
2
+ declare const Mercury: any;
@@ -0,0 +1 @@
1
+ export { default } from "./socket";
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Generalized socket abstraction
3
+ */
4
+ export default class Socket extends EventEmitter {
5
+ /**
6
+ * Provides the environmentally appropriate constructor (ws in NodeJS,
7
+ * WebSocket in browsers)
8
+ * @returns {WebSocket}
9
+ */
10
+ static getWebSocketConstructor(): WebSocket;
11
+ /**
12
+ * constructor
13
+ * @returns {Socket}
14
+ */
15
+ constructor();
16
+ /**
17
+ * Handles incoming message events
18
+ * @param {MessageEvent} event
19
+ * @returns {undefined}
20
+ */
21
+ onmessage(event: MessageEvent): undefined;
22
+ /**
23
+ * Handles incoming CloseEvents
24
+ * @param {CloseEvent} event
25
+ * @returns {undefined}
26
+ */
27
+ onclose(event: CloseEvent): undefined;
28
+ /**
29
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
30
+ * @returns {string}
31
+ */
32
+ get binaryType(): string;
33
+ /**
34
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
35
+ * @returns {number}
36
+ */
37
+ get bufferedAmount(): number;
38
+ /**
39
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
40
+ * @returns {string}
41
+ */
42
+ get extensions(): string;
43
+ /**
44
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
45
+ * @returns {string}
46
+ */
47
+ get protocol(): string;
48
+ /**
49
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
50
+ * @returns {number}
51
+ */
52
+ get readyState(): number;
53
+ /**
54
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
55
+ * @returns {string}
56
+ */
57
+ get url(): string;
58
+ /**
59
+ * Closes the socket
60
+ * @param {Object} options
61
+ * @param {string} options.reason
62
+ * @param {number} options.code
63
+ * @returns {Promise}
64
+ */
65
+ close(options: {
66
+ reason: string;
67
+ code: number;
68
+ }): Promise<any>;
69
+ /**
70
+ * Opens a WebSocket
71
+ * @param {string} url
72
+ * @param {options} options
73
+ * @param {number} options.forceCloseDelay (required)
74
+ * @param {number} options.pingInterval (required)
75
+ * @param {number} options.pongTimeout (required)
76
+ * @param {string} options.token (required)
77
+ * @param {string} options.trackingId (required)
78
+ * @param {Logger} options.logger (required)
79
+ * @param {string} options.logLevelToken
80
+ * @returns {Promise}
81
+ */
82
+ open(url: string, options: any): Promise<any>;
83
+ expectedSequenceNumber: any;
84
+ /**
85
+ * Sends a message up the socket
86
+ * @param {mixed} data
87
+ * @returns {Promise}
88
+ */
89
+ send(data: mixed): Promise<any>;
90
+ /**
91
+ * Sends an acknowledgment for a specific event
92
+ * @param {MessageEvent} event
93
+ * @returns {Promise}
94
+ */
95
+ _acknowledge(event: MessageEvent): Promise<any>;
96
+ /**
97
+ * Sends an auth message up the socket
98
+ * @private
99
+ * @returns {Promise}
100
+ */
101
+ private _authorize;
102
+ /**
103
+ * Deals with the fact that some browsers drop some close codes (but not
104
+ * close reasons).
105
+ * @param {CloseEvent} event
106
+ * @private
107
+ * @returns {CloseEvent}
108
+ */
109
+ private _fixCloseCode;
110
+ /**
111
+ * Sends a ping up the socket and confirms we get it back
112
+ * @param {[type]} id
113
+ * @private
114
+ * @returns {[type]}
115
+ */
116
+ private _ping;
117
+ pingTimer: any;
118
+ pongTimer: any;
119
+ }
120
+ import { EventEmitter } from "events";
@@ -0,0 +1,2 @@
1
+ export default Socket;
2
+ import Socket from "./socket-base";
@@ -0,0 +1,2 @@
1
+ export default Socket;
2
+ import Socket from "./socket-base";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-plugin-mercury",
3
- "version": "3.0.0-beta.8",
3
+ "version": "3.0.0-bnr.0",
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.8",
32
- "@webex/common-timers": "3.0.0-beta.8",
33
- "@webex/internal-plugin-device": "3.0.0-beta.8",
34
- "@webex/internal-plugin-feature": "3.0.0-beta.8",
35
- "@webex/internal-plugin-mercury": "3.0.0-beta.8",
36
- "@webex/internal-plugin-metrics": "3.0.0-beta.8",
37
- "@webex/test-helper-chai": "3.0.0-beta.8",
38
- "@webex/test-helper-mocha": "3.0.0-beta.8",
39
- "@webex/test-helper-mock-web-socket": "3.0.0-beta.8",
40
- "@webex/test-helper-mock-webex": "3.0.0-beta.8",
41
- "@webex/test-helper-refresh-callback": "3.0.0-beta.8",
42
- "@webex/test-helper-test-users": "3.0.0-beta.8",
43
- "@webex/webex-core": "3.0.0-beta.8",
31
+ "@webex/common": "3.0.0-bnr.0",
32
+ "@webex/common-timers": "3.0.0-bnr.0",
33
+ "@webex/internal-plugin-device": "3.0.0-bnr.0",
34
+ "@webex/internal-plugin-feature": "3.0.0-bnr.0",
35
+ "@webex/internal-plugin-mercury": "3.0.0-bnr.0",
36
+ "@webex/internal-plugin-metrics": "3.0.0-bnr.0",
37
+ "@webex/test-helper-chai": "3.0.0-bnr.0",
38
+ "@webex/test-helper-mocha": "3.0.0-bnr.0",
39
+ "@webex/test-helper-mock-web-socket": "3.0.0-bnr.0",
40
+ "@webex/test-helper-mock-webex": "3.0.0-bnr.0",
41
+ "@webex/test-helper-refresh-callback": "3.0.0-bnr.0",
42
+ "@webex/test-helper-test-users": "3.0.0-bnr.0",
43
+ "@webex/webex-core": "3.0.0-bnr.0",
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';