@webex/internal-plugin-mercury 2.59.3-next.1 → 2.59.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +6 -6
- package/README.md +64 -64
- package/babel.config.js +3 -3
- package/dist/config.js +18 -18
- package/dist/config.js.map +1 -1
- package/dist/errors.js +13 -13
- package/dist/errors.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mercury.js +1 -1
- package/dist/mercury.js.map +1 -1
- package/dist/socket/index.js.map +1 -1
- package/dist/socket/socket-base.js +76 -76
- package/dist/socket/socket-base.js.map +1 -1
- package/dist/socket/socket.js +2 -2
- package/dist/socket/socket.js.map +1 -1
- package/dist/socket/socket.shim.js +2 -2
- package/dist/socket/socket.shim.js.map +1 -1
- package/jest.config.js +3 -3
- package/package.json +23 -24
- package/process +1 -1
- package/src/config.js +34 -34
- package/src/errors.js +66 -66
- package/src/index.js +32 -32
- package/src/mercury.js +498 -498
- package/src/socket/index.js +5 -5
- package/src/socket/socket-base.js +481 -481
- package/src/socket/socket.js +13 -13
- package/src/socket/socket.shim.js +31 -31
- package/test/integration/spec/mercury.js +117 -117
- package/test/integration/spec/sharable-mercury.js +59 -59
- package/test/integration/spec/webex.js +43 -43
- package/test/unit/lib/promise-tick.js +19 -19
- package/test/unit/spec/mercury-events.js +473 -473
- package/test/unit/spec/mercury.js +709 -709
- package/test/unit/spec/socket.js +812 -812
|
@@ -31,15 +31,15 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
31
31
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
32
32
|
var sockets = new _weakMap.default();
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
* Generalized socket abstraction
|
|
34
|
+
/**
|
|
35
|
+
* Generalized socket abstraction
|
|
36
36
|
*/
|
|
37
37
|
var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
38
38
|
(0, _inherits2.default)(Socket, _EventEmitter);
|
|
39
39
|
var _super = _createSuper(Socket);
|
|
40
|
-
/**
|
|
41
|
-
* constructor
|
|
42
|
-
* @returns {Socket}
|
|
40
|
+
/**
|
|
41
|
+
* constructor
|
|
42
|
+
* @returns {Socket}
|
|
43
43
|
*/
|
|
44
44
|
function Socket() {
|
|
45
45
|
var _this;
|
|
@@ -50,9 +50,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
50
50
|
return _this;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
/**
|
|
54
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
55
|
-
* @returns {string}
|
|
53
|
+
/**
|
|
54
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
55
|
+
* @returns {string}
|
|
56
56
|
*/
|
|
57
57
|
(0, _createClass2.default)(Socket, [{
|
|
58
58
|
key: "binaryType",
|
|
@@ -60,9 +60,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
60
60
|
return sockets.get(this).binaryType;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/**
|
|
64
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
65
|
-
* @returns {number}
|
|
63
|
+
/**
|
|
64
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
65
|
+
* @returns {number}
|
|
66
66
|
*/
|
|
67
67
|
}, {
|
|
68
68
|
key: "bufferedAmount",
|
|
@@ -70,9 +70,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
70
70
|
return sockets.get(this).bufferedAmount;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
/**
|
|
74
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
75
|
-
* @returns {string}
|
|
73
|
+
/**
|
|
74
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
75
|
+
* @returns {string}
|
|
76
76
|
*/
|
|
77
77
|
}, {
|
|
78
78
|
key: "extensions",
|
|
@@ -80,9 +80,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
80
80
|
return sockets.get(this).extensions;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
/**
|
|
84
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
85
|
-
* @returns {string}
|
|
83
|
+
/**
|
|
84
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
85
|
+
* @returns {string}
|
|
86
86
|
*/
|
|
87
87
|
}, {
|
|
88
88
|
key: "protocol",
|
|
@@ -90,9 +90,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
90
90
|
return sockets.get(this).protocol;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
/**
|
|
94
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
95
|
-
* @returns {number}
|
|
93
|
+
/**
|
|
94
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
95
|
+
* @returns {number}
|
|
96
96
|
*/
|
|
97
97
|
}, {
|
|
98
98
|
key: "readyState",
|
|
@@ -100,9 +100,9 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
100
100
|
return sockets.get(this).readyState;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
/**
|
|
104
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
105
|
-
* @returns {string}
|
|
103
|
+
/**
|
|
104
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
105
|
+
* @returns {string}
|
|
106
106
|
*/
|
|
107
107
|
}, {
|
|
108
108
|
key: "url",
|
|
@@ -110,20 +110,20 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
110
110
|
return sockets.get(this).url;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
/**
|
|
114
|
-
* Provides the environmentally appropriate constructor (ws in NodeJS,
|
|
115
|
-
* WebSocket in browsers)
|
|
116
|
-
* @returns {WebSocket}
|
|
113
|
+
/**
|
|
114
|
+
* Provides the environmentally appropriate constructor (ws in NodeJS,
|
|
115
|
+
* WebSocket in browsers)
|
|
116
|
+
* @returns {WebSocket}
|
|
117
117
|
*/
|
|
118
118
|
}, {
|
|
119
119
|
key: "close",
|
|
120
120
|
value:
|
|
121
|
-
/**
|
|
122
|
-
* Closes the socket
|
|
123
|
-
* @param {Object} options
|
|
124
|
-
* @param {string} options.reason
|
|
125
|
-
* @param {number} options.code
|
|
126
|
-
* @returns {Promise}
|
|
121
|
+
/**
|
|
122
|
+
* Closes the socket
|
|
123
|
+
* @param {Object} options
|
|
124
|
+
* @param {string} options.reason
|
|
125
|
+
* @param {number} options.code
|
|
126
|
+
* @returns {Promise}
|
|
127
127
|
*/
|
|
128
128
|
function close(options) {
|
|
129
129
|
var _this2 = this;
|
|
@@ -171,18 +171,18 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
171
171
|
});
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
/**
|
|
175
|
-
* Opens a WebSocket
|
|
176
|
-
* @param {string} url
|
|
177
|
-
* @param {options} options
|
|
178
|
-
* @param {number} options.forceCloseDelay (required)
|
|
179
|
-
* @param {number} options.pingInterval (required)
|
|
180
|
-
* @param {number} options.pongTimeout (required)
|
|
181
|
-
* @param {string} options.token (required)
|
|
182
|
-
* @param {string} options.trackingId (required)
|
|
183
|
-
* @param {Logger} options.logger (required)
|
|
184
|
-
* @param {string} options.logLevelToken
|
|
185
|
-
* @returns {Promise}
|
|
174
|
+
/**
|
|
175
|
+
* Opens a WebSocket
|
|
176
|
+
* @param {string} url
|
|
177
|
+
* @param {options} options
|
|
178
|
+
* @param {number} options.forceCloseDelay (required)
|
|
179
|
+
* @param {number} options.pingInterval (required)
|
|
180
|
+
* @param {number} options.pongTimeout (required)
|
|
181
|
+
* @param {string} options.token (required)
|
|
182
|
+
* @param {string} options.trackingId (required)
|
|
183
|
+
* @param {Logger} options.logger (required)
|
|
184
|
+
* @param {string} options.logLevelToken
|
|
185
|
+
* @returns {Promise}
|
|
186
186
|
*/
|
|
187
187
|
}, {
|
|
188
188
|
key: "open",
|
|
@@ -249,10 +249,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
/**
|
|
253
|
-
* Handles incoming CloseEvents
|
|
254
|
-
* @param {CloseEvent} event
|
|
255
|
-
* @returns {undefined}
|
|
252
|
+
/**
|
|
253
|
+
* Handles incoming CloseEvents
|
|
254
|
+
* @param {CloseEvent} event
|
|
255
|
+
* @returns {undefined}
|
|
256
256
|
*/
|
|
257
257
|
}, {
|
|
258
258
|
key: "onclose",
|
|
@@ -268,10 +268,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
268
268
|
this.removeAllListeners();
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
-
/**
|
|
272
|
-
* Handles incoming message events
|
|
273
|
-
* @param {MessageEvent} event
|
|
274
|
-
* @returns {undefined}
|
|
271
|
+
/**
|
|
272
|
+
* Handles incoming message events
|
|
273
|
+
* @param {MessageEvent} event
|
|
274
|
+
* @returns {undefined}
|
|
275
275
|
*/
|
|
276
276
|
}, {
|
|
277
277
|
key: "onmessage",
|
|
@@ -307,10 +307,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
/**
|
|
311
|
-
* Sends a message up the socket
|
|
312
|
-
* @param {mixed} data
|
|
313
|
-
* @returns {Promise}
|
|
310
|
+
/**
|
|
311
|
+
* Sends a message up the socket
|
|
312
|
+
* @param {mixed} data
|
|
313
|
+
* @returns {Promise}
|
|
314
314
|
*/
|
|
315
315
|
}, {
|
|
316
316
|
key: "send",
|
|
@@ -329,10 +329,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
329
329
|
});
|
|
330
330
|
}
|
|
331
331
|
|
|
332
|
-
/**
|
|
333
|
-
* Sends an acknowledgment for a specific event
|
|
334
|
-
* @param {MessageEvent} event
|
|
335
|
-
* @returns {Promise}
|
|
332
|
+
/**
|
|
333
|
+
* Sends an acknowledgment for a specific event
|
|
334
|
+
* @param {MessageEvent} event
|
|
335
|
+
* @returns {Promise}
|
|
336
336
|
*/
|
|
337
337
|
}, {
|
|
338
338
|
key: "_acknowledge",
|
|
@@ -349,10 +349,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
349
349
|
});
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
-
/**
|
|
353
|
-
* Sends an auth message up the socket
|
|
354
|
-
* @private
|
|
355
|
-
* @returns {Promise}
|
|
352
|
+
/**
|
|
353
|
+
* Sends an auth message up the socket
|
|
354
|
+
* @private
|
|
355
|
+
* @returns {Promise}
|
|
356
356
|
*/
|
|
357
357
|
}, {
|
|
358
358
|
key: "_authorize",
|
|
@@ -380,12 +380,12 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
380
380
|
});
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
-
/**
|
|
384
|
-
* Deals with the fact that some browsers drop some close codes (but not
|
|
385
|
-
* close reasons).
|
|
386
|
-
* @param {CloseEvent} event
|
|
387
|
-
* @private
|
|
388
|
-
* @returns {CloseEvent}
|
|
383
|
+
/**
|
|
384
|
+
* Deals with the fact that some browsers drop some close codes (but not
|
|
385
|
+
* close reasons).
|
|
386
|
+
* @param {CloseEvent} event
|
|
387
|
+
* @private
|
|
388
|
+
* @returns {CloseEvent}
|
|
389
389
|
*/
|
|
390
390
|
}, {
|
|
391
391
|
key: "_fixCloseCode",
|
|
@@ -409,11 +409,11 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
409
409
|
return event;
|
|
410
410
|
}
|
|
411
411
|
|
|
412
|
-
/**
|
|
413
|
-
* Sends a ping up the socket and confirms we get it back
|
|
414
|
-
* @param {[type]} id
|
|
415
|
-
* @private
|
|
416
|
-
* @returns {[type]}
|
|
412
|
+
/**
|
|
413
|
+
* Sends a ping up the socket and confirms we get it back
|
|
414
|
+
* @param {[type]} id
|
|
415
|
+
* @private
|
|
416
|
+
* @returns {[type]}
|
|
417
417
|
*/
|
|
418
418
|
}, {
|
|
419
419
|
key: "_ping",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_common","_commonTimers","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","code","Error","_defaults2","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","checkRequired","_keys","forEach","_defineProperty","enumerable","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","concat","processedEvent","_acknowledge","type","send","_this4","_isObject2","_stringify","_has2","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","pongTimeout","EventEmitter","exports"],"sources":["socket-base.js"],"sourcesContent":["/*!\r\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\r\n */\r\n\r\nimport {EventEmitter} from 'events';\r\n\r\nimport {checkRequired} from '@webex/common';\r\nimport {safeSetTimeout} from '@webex/common-timers';\r\nimport {defaults, has, isObject} from 'lodash';\r\nimport uuid from 'uuid';\r\n\r\nimport {\r\n BadRequest,\r\n ConnectionError,\r\n Forbidden,\r\n NotAuthorized,\r\n UnknownResponse,\r\n // NotFound\r\n} from '../errors';\r\n\r\nconst sockets = new WeakMap();\r\n\r\n/**\r\n * Generalized socket abstraction\r\n */\r\nexport default class Socket extends EventEmitter {\r\n /**\r\n * constructor\r\n * @returns {Socket}\r\n */\r\n constructor() {\r\n super();\r\n this.onmessage = this.onmessage.bind(this);\r\n this.onclose = this.onclose.bind(this);\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {string}\r\n */\r\n get binaryType() {\r\n return sockets.get(this).binaryType;\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {number}\r\n */\r\n get bufferedAmount() {\r\n return sockets.get(this).bufferedAmount;\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {string}\r\n */\r\n get extensions() {\r\n return sockets.get(this).extensions;\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {string}\r\n */\r\n get protocol() {\r\n return sockets.get(this).protocol;\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {number}\r\n */\r\n get readyState() {\r\n return sockets.get(this).readyState;\r\n }\r\n\r\n /**\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\r\n * @returns {string}\r\n */\r\n get url() {\r\n return sockets.get(this).url;\r\n }\r\n\r\n /**\r\n * Provides the environmentally appropriate constructor (ws in NodeJS,\r\n * WebSocket in browsers)\r\n * @returns {WebSocket}\r\n */\r\n static getWebSocketConstructor() {\r\n throw new Error(\r\n 'Socket.getWebSocketConstructor() must be implemented in an environmentally appropriate way'\r\n );\r\n }\r\n\r\n /**\r\n * Closes the socket\r\n * @param {Object} options\r\n * @param {string} options.reason\r\n * @param {number} options.code\r\n * @returns {Promise}\r\n */\r\n close(options) {\r\n return new Promise((resolve, reject) => {\r\n const socket = sockets.get(this);\r\n\r\n if (!socket) {\r\n // Open has not been called yet so there is no socket to close\r\n resolve();\r\n\r\n return;\r\n }\r\n // logger is defined once open is called\r\n this.logger.info('socket: closing');\r\n\r\n if (socket.readyState === 2 || socket.readyState === 3) {\r\n this.logger.info('socket: already closed');\r\n resolve();\r\n\r\n return;\r\n }\r\n\r\n options = options || {};\r\n if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {\r\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\r\n\r\n return;\r\n }\r\n\r\n options = defaults(options, {\r\n code: 1000,\r\n reason: 'Done',\r\n });\r\n\r\n const closeTimer = safeSetTimeout(() => {\r\n try {\r\n this.logger.info('socket: no close event received, forcing closure');\r\n resolve(\r\n this.onclose({\r\n code: 1000,\r\n reason: 'Done (forced)',\r\n })\r\n );\r\n } catch (error) {\r\n this.logger.warn('socket: force-close failed', error);\r\n }\r\n }, this.forceCloseDelay);\r\n\r\n socket.onclose = (event) => {\r\n this.logger.info('socket: close event fired', event.code, event.reason);\r\n clearTimeout(closeTimer);\r\n this.onclose(event);\r\n resolve(event);\r\n };\r\n\r\n socket.close(options.code, options.reason);\r\n });\r\n }\r\n\r\n /**\r\n * Opens a WebSocket\r\n * @param {string} url\r\n * @param {options} options\r\n * @param {number} options.forceCloseDelay (required)\r\n * @param {number} options.pingInterval (required)\r\n * @param {number} options.pongTimeout (required)\r\n * @param {string} options.token (required)\r\n * @param {string} options.trackingId (required)\r\n * @param {Logger} options.logger (required)\r\n * @param {string} options.logLevelToken\r\n * @returns {Promise}\r\n */\r\n open(url, options) {\r\n return new Promise((resolve, reject) => {\r\n /* eslint complexity: [0] */\r\n if (!url) {\r\n reject(new Error('`url` is required'));\r\n\r\n return;\r\n }\r\n\r\n if (sockets.get(this)) {\r\n reject(new Error('Socket#open() can only be called once per instance'));\r\n\r\n return;\r\n }\r\n\r\n options = options || {};\r\n\r\n checkRequired(\r\n ['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'],\r\n options\r\n );\r\n\r\n Object.keys(options).forEach((key) => {\r\n Reflect.defineProperty(this, key, {\r\n enumerable: false,\r\n value: options[key],\r\n });\r\n });\r\n\r\n const WebSocket = Socket.getWebSocketConstructor();\r\n\r\n this.logger.info('socket: creating WebSocket');\r\n const socket = new WebSocket(url, [], options);\r\n\r\n socket.binaryType = 'arraybuffer';\r\n socket.onmessage = this.onmessage;\r\n\r\n socket.onclose = (event) => {\r\n event = this._fixCloseCode(event);\r\n this.logger.info('socket: closed before open', event.code, event.reason);\r\n switch (event.code) {\r\n case 1005:\r\n // IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume\r\n // it's a bad websocket url. That'll trigger a device refresh; if it\r\n // turns out we had a bad token, the device refresh should 401 and\r\n // trigger a token refresh.\r\n return reject(new UnknownResponse(event));\r\n case 4400:\r\n return reject(new BadRequest(event));\r\n case 4401:\r\n return reject(new NotAuthorized(event));\r\n case 4403:\r\n return reject(new Forbidden(event));\r\n // case 4404:\r\n // return reject(new NotFound(event));\r\n default:\r\n return reject(new ConnectionError(event));\r\n }\r\n };\r\n\r\n socket.onopen = () => {\r\n this.logger.info('socket: connected');\r\n this._authorize()\r\n .then(() => {\r\n this.logger.info('socket: authorized');\r\n socket.onclose = this.onclose;\r\n resolve();\r\n })\r\n .catch(reject);\r\n };\r\n\r\n socket.onerror = (event) => {\r\n this.logger.warn('socket: error event fired', event);\r\n };\r\n\r\n sockets.set(this, socket);\r\n this.logger.info('socket: waiting for server');\r\n });\r\n }\r\n\r\n /**\r\n * Handles incoming CloseEvents\r\n * @param {CloseEvent} event\r\n * @returns {undefined}\r\n */\r\n onclose(event) {\r\n this.logger.info('socket: closed', event.code, event.reason);\r\n clearTimeout(this.pongTimer);\r\n clearTimeout(this.pingTimer);\r\n\r\n event = this._fixCloseCode(event);\r\n this.emit('close', event);\r\n\r\n // Remove all listeners to (a) avoid reacting to late pongs and (b) ensure\r\n // we don't have a retain cycle.\r\n this.removeAllListeners();\r\n }\r\n\r\n /**\r\n * Handles incoming message events\r\n * @param {MessageEvent} event\r\n * @returns {undefined}\r\n */\r\n onmessage(event) {\r\n try {\r\n const data = JSON.parse(event.data);\r\n const sequenceNumber = parseInt(data.sequenceNumber, 10);\r\n\r\n this.logger.debug('socket: sequence number: ', sequenceNumber);\r\n if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {\r\n this.logger.debug(\r\n `socket: sequence number mismatch indicates lost mercury message. expected: ${this.expectedSequenceNumber}, actual: ${sequenceNumber}`\r\n );\r\n this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);\r\n }\r\n this.expectedSequenceNumber = sequenceNumber + 1;\r\n\r\n // Yes, it's a little weird looking; we want to emit message events that\r\n // look like normal socket message events, but event.data cannot be\r\n // modified and we don't actually care about anything but the data property\r\n const processedEvent = {data};\r\n\r\n this._acknowledge(processedEvent);\r\n if (data.type === 'pong') {\r\n this.emit('pong', processedEvent);\r\n } else {\r\n this.emit('message', processedEvent);\r\n }\r\n } catch (error) {\r\n // The above code should only be able to throw if we receive an unparsable\r\n // message from Mercury. At this time, the only action we have is to\r\n // ignore it and move on.\r\n /* istanbul ignore next */\r\n this.logger.warn('socket: error while receiving WebSocket message', error);\r\n }\r\n }\r\n\r\n /**\r\n * Sends a message up the socket\r\n * @param {mixed} data\r\n * @returns {Promise}\r\n */\r\n send(data) {\r\n return new Promise((resolve, reject) => {\r\n if (this.readyState !== 1) {\r\n return reject(new Error('INVALID_STATE_ERROR'));\r\n }\r\n\r\n if (isObject(data)) {\r\n data = JSON.stringify(data);\r\n }\r\n\r\n const socket = sockets.get(this);\r\n\r\n socket.send(data);\r\n\r\n return resolve();\r\n });\r\n }\r\n\r\n /**\r\n * Sends an acknowledgment for a specific event\r\n * @param {MessageEvent} event\r\n * @returns {Promise}\r\n */\r\n _acknowledge(event) {\r\n if (!event) {\r\n return Promise.reject(new Error('`event` is required'));\r\n }\r\n\r\n if (!has(event, 'data.id')) {\r\n return Promise.reject(new Error('`event.data.id` is required'));\r\n }\r\n\r\n return this.send({\r\n messageId: event.data.id,\r\n type: 'ack',\r\n });\r\n }\r\n\r\n /**\r\n * Sends an auth message up the socket\r\n * @private\r\n * @returns {Promise}\r\n */\r\n _authorize() {\r\n return new Promise((resolve) => {\r\n this.logger.info('socket: authorizing');\r\n this.send({\r\n id: uuid.v4(),\r\n type: 'authorization',\r\n data: {\r\n token: this.token,\r\n },\r\n trackingId: this.trackingId,\r\n logLevelToken: this.logLevelToken,\r\n });\r\n\r\n const waitForBufferState = (event) => {\r\n if (\r\n !event.data.type &&\r\n (event.data.data.eventType === 'mercury.buffer_state' ||\r\n event.data.data.eventType === 'mercury.registration_status')\r\n ) {\r\n this.removeListener('message', waitForBufferState);\r\n this._ping();\r\n resolve();\r\n }\r\n };\r\n\r\n this.once('message', waitForBufferState);\r\n });\r\n }\r\n\r\n /**\r\n * Deals with the fact that some browsers drop some close codes (but not\r\n * close reasons).\r\n * @param {CloseEvent} event\r\n * @private\r\n * @returns {CloseEvent}\r\n */\r\n _fixCloseCode(event) {\r\n if (event.code === 1005 && event.reason) {\r\n switch (event.reason.toLowerCase()) {\r\n case 'replaced':\r\n this.logger.info('socket: fixing CloseEvent code for reason: ', event.reason);\r\n event.code = 4000;\r\n break;\r\n case 'authentication failed':\r\n case 'authentication did not happen within the timeout window of 30000 seconds.':\r\n this.logger.info('socket: fixing CloseEvent code for reason: ', event.reason);\r\n event.code = 1008;\r\n break;\r\n default:\r\n // do nothing\r\n }\r\n }\r\n\r\n return event;\r\n }\r\n\r\n /**\r\n * Sends a ping up the socket and confirms we get it back\r\n * @param {[type]} id\r\n * @private\r\n * @returns {[type]}\r\n */\r\n _ping(id) {\r\n const confirmPongId = (event) => {\r\n try {\r\n this.logger.debug('socket: pong', event.data.id);\r\n if (event.data && event.data.id !== id) {\r\n this.logger.info('socket: received pong for wrong ping id, closing socket');\r\n this.logger.debug('socket: expected', id, 'received', event.data.id);\r\n this.close({\r\n code: 1000,\r\n reason: 'Pong mismatch',\r\n });\r\n }\r\n } catch (error) {\r\n // This try/catch block was added as a debugging step; to the best of my\r\n // knowledge, the above can never throw.\r\n /* istanbul ignore next */\r\n this.logger.error('socket: error occurred in confirmPongId', error);\r\n }\r\n };\r\n\r\n const onPongNotReceived = () => {\r\n try {\r\n this.logger.info('socket: pong not receive in expected period, closing socket');\r\n this.close({\r\n code: 1000,\r\n reason: 'Pong not received',\r\n }).catch((reason) => {\r\n this.logger.warn('socket: failed to close socket after missed pong', reason);\r\n });\r\n } catch (error) {\r\n // This try/catch block was added as a debugging step; to the best of my\r\n // knowledge, the above can never throw.\r\n /* istanbul ignore next */\r\n this.logger.error('socket: error occurred in onPongNotReceived', error);\r\n }\r\n };\r\n\r\n const scheduleNextPingAndCancelPongTimer = () => {\r\n try {\r\n clearTimeout(this.pongTimer);\r\n this.pingTimer = safeSetTimeout(() => this._ping(), this.pingInterval);\r\n } catch (error) {\r\n // This try/catch block was added as a debugging step; to the best of my\r\n // knowledge, the above can never throw.\r\n /* istanbul ignore next */\r\n this.logger.error('socket: error occurred in scheduleNextPingAndCancelPongTimer', error);\r\n }\r\n };\r\n\r\n id = id || uuid.v4();\r\n this.pongTimer = safeSetTimeout(onPongNotReceived, this.pongTimeout);\r\n this.once('pong', scheduleNextPingAndCancelPongTimer);\r\n this.once('pong', confirmPongId);\r\n\r\n this.logger.debug(`socket: ping ${id}`);\r\n\r\n return this.send({\r\n id,\r\n type: 'ping',\r\n });\r\n }\r\n}\r\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_events","require","_common","_commonTimers","_uuid","_interopRequireDefault","_errors","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","sockets","_weakMap","Socket","_EventEmitter","_inherits2","_super","_this","_classCallCheck2","onmessage","bind","_assertThisInitialized2","onclose","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","code","Error","_defaults2","reason","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","open","_this3","checkRequired","_keys","forEach","_defineProperty","enumerable","WebSocket","getWebSocketConstructor","_fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","_authorize","then","catch","onerror","set","pongTimer","pingTimer","emit","removeAllListeners","data","JSON","parse","sequenceNumber","_parseInt2","debug","expectedSequenceNumber","concat","processedEvent","_acknowledge","type","send","_this4","_isObject2","_stringify","_has2","messageId","id","_this5","uuid","v4","token","trackingId","logLevelToken","waitForBufferState","eventType","removeListener","_ping","once","toLowerCase","_this6","confirmPongId","onPongNotReceived","scheduleNextPingAndCancelPongTimer","pingInterval","pongTimeout","EventEmitter","exports"],"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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"}
|
package/dist/socket/socket.js
CHANGED
|
@@ -8,8 +8,8 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.default = void 0;
|
|
9
9
|
var _ws = _interopRequireDefault(require("ws"));
|
|
10
10
|
var _socketBase = _interopRequireDefault(require("./socket-base"));
|
|
11
|
-
/*!
|
|
12
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
11
|
+
/*!
|
|
12
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
_socketBase.default.getWebSocketConstructor = function getWebSocketConstructor() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ws","_interopRequireDefault","require","_socketBase","Socket","getWebSocketConstructor","WS","_default","exports","default"],"sources":["socket.js"],"sourcesContent":["/*!\
|
|
1
|
+
{"version":3,"names":["_ws","_interopRequireDefault","require","_socketBase","Socket","getWebSocketConstructor","WS","_default","exports","default"],"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,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AANA;AACA;AACA;;AAMAE,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;EAClE,OAAOC,WAAE;AACX,CAAC;AAAC,IAAAC,QAAA,GAEaH,mBAAM;AAAAI,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -9,8 +9,8 @@ exports.default = void 0;
|
|
|
9
9
|
var _socketBase = _interopRequireDefault(require("./socket-base"));
|
|
10
10
|
/* eslint-disable no-restricted-globals */
|
|
11
11
|
|
|
12
|
-
/*!
|
|
13
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
12
|
+
/*!
|
|
13
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
/* eslint-env browser */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_socketBase","_interopRequireDefault","require","Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self","_default","exports","default"],"sources":["socket.shim.js"],"sourcesContent":["/* eslint-disable no-restricted-globals */\
|
|
1
|
+
{"version":3,"names":["_socketBase","_interopRequireDefault","require","Socket","getWebSocketConstructor","ws","WebSocket","MozWebSocket","global","window","self","_default","exports","default"],"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,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AARA;;AAEA;AACA;AACA;;AAEA;;AAIAC,mBAAM,CAACC,uBAAuB,GAAG,SAASA,uBAAuBA,CAAA,EAAG;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,IAAAM,QAAA,GAEaR,mBAAM;AAAAS,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
package/jest.config.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const config = require('@webex/jest-config-legacy');
|
|
2
|
-
|
|
3
|
-
module.exports = config;
|
|
1
|
+
const config = require('@webex/jest-config-legacy');
|
|
2
|
+
|
|
3
|
+
module.exports = config;
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-plugin-mercury",
|
|
3
|
+
"version": "2.59.4",
|
|
3
4
|
"description": "",
|
|
4
5
|
"license": "MIT",
|
|
5
6
|
"main": "dist/index.js",
|
|
@@ -25,31 +26,31 @@
|
|
|
25
26
|
"devDependencies": {
|
|
26
27
|
"@babel/core": "^7.17.10",
|
|
27
28
|
"@sinonjs/fake-timers": "^6.0.1",
|
|
28
|
-
"@webex/babel-config-legacy": "
|
|
29
|
-
"@webex/eslint-config-legacy": "
|
|
30
|
-
"@webex/jest-config-legacy": "
|
|
31
|
-
"@webex/legacy-tools": "
|
|
32
|
-
"@webex/test-helper-chai": "
|
|
33
|
-
"@webex/test-helper-mocha": "
|
|
34
|
-
"@webex/test-helper-mock-webex": "
|
|
35
|
-
"@webex/test-helper-test-users": "
|
|
29
|
+
"@webex/babel-config-legacy": "2.59.4",
|
|
30
|
+
"@webex/eslint-config-legacy": "2.59.4",
|
|
31
|
+
"@webex/jest-config-legacy": "2.59.4",
|
|
32
|
+
"@webex/legacy-tools": "2.59.4",
|
|
33
|
+
"@webex/test-helper-chai": "2.59.4",
|
|
34
|
+
"@webex/test-helper-mocha": "2.59.4",
|
|
35
|
+
"@webex/test-helper-mock-webex": "2.59.4",
|
|
36
|
+
"@webex/test-helper-test-users": "2.59.4",
|
|
36
37
|
"eslint": "^8.24.0",
|
|
37
38
|
"prettier": "^2.7.1",
|
|
38
39
|
"sinon": "^9.2.4"
|
|
39
40
|
},
|
|
40
41
|
"dependencies": {
|
|
41
|
-
"@webex/common": "
|
|
42
|
-
"@webex/common-timers": "
|
|
43
|
-
"@webex/internal-plugin-device": "
|
|
44
|
-
"@webex/internal-plugin-feature": "
|
|
45
|
-
"@webex/internal-plugin-metrics": "
|
|
46
|
-
"@webex/test-helper-chai": "
|
|
47
|
-
"@webex/test-helper-mocha": "
|
|
48
|
-
"@webex/test-helper-mock-web-socket": "
|
|
49
|
-
"@webex/test-helper-mock-webex": "
|
|
50
|
-
"@webex/test-helper-refresh-callback": "
|
|
51
|
-
"@webex/test-helper-test-users": "
|
|
52
|
-
"@webex/webex-core": "
|
|
42
|
+
"@webex/common": "2.59.4",
|
|
43
|
+
"@webex/common-timers": "2.59.4",
|
|
44
|
+
"@webex/internal-plugin-device": "2.59.4",
|
|
45
|
+
"@webex/internal-plugin-feature": "2.59.4",
|
|
46
|
+
"@webex/internal-plugin-metrics": "2.59.4",
|
|
47
|
+
"@webex/test-helper-chai": "2.59.4",
|
|
48
|
+
"@webex/test-helper-mocha": "2.59.4",
|
|
49
|
+
"@webex/test-helper-mock-web-socket": "2.59.4",
|
|
50
|
+
"@webex/test-helper-mock-webex": "2.59.4",
|
|
51
|
+
"@webex/test-helper-refresh-callback": "2.59.4",
|
|
52
|
+
"@webex/test-helper-test-users": "2.59.4",
|
|
53
|
+
"@webex/webex-core": "2.59.4",
|
|
53
54
|
"backoff": "^2.5.0",
|
|
54
55
|
"lodash": "^4.17.21",
|
|
55
56
|
"uuid": "^3.3.2",
|
|
@@ -58,12 +59,10 @@
|
|
|
58
59
|
"scripts": {
|
|
59
60
|
"build": "yarn build:src",
|
|
60
61
|
"build:src": "webex-legacy-tools build -dest \"./dist\" -src \"./src\" -js -ts -maps",
|
|
61
|
-
"deploy:npm": "yarn npm publish",
|
|
62
62
|
"test": "yarn test:style && yarn test:unit && yarn test:integration && yarn test:browser",
|
|
63
63
|
"test:browser:broken": "webex-legacy-tools test --integration --unit --runner karma",
|
|
64
64
|
"test:integration:broken": "webex-legacy-tools test --integration --runner mocha",
|
|
65
65
|
"test:style": "eslint ./src/**/*.*",
|
|
66
66
|
"test:unit": "webex-legacy-tools test --unit --runner jest"
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}
|
|
67
|
+
}
|
|
68
|
+
}
|
package/process
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
module.exports = {browser: true};
|
|
1
|
+
module.exports = {browser: true};
|
package/src/config.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
mercury: {
|
|
7
|
-
/**
|
|
8
|
-
* Milliseconds between pings sent up the socket
|
|
9
|
-
* @type {number}
|
|
10
|
-
*/
|
|
11
|
-
pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,
|
|
12
|
-
/**
|
|
13
|
-
* Milliseconds to wait for a pong before declaring the connection dead
|
|
14
|
-
* @type {number}
|
|
15
|
-
*/
|
|
16
|
-
pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,
|
|
17
|
-
/**
|
|
18
|
-
* Maximum milliseconds between connection attempts
|
|
19
|
-
* @type {Number}
|
|
20
|
-
*/
|
|
21
|
-
backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,
|
|
22
|
-
/**
|
|
23
|
-
* Initial milliseconds between connection attempts
|
|
24
|
-
* @type {Number}
|
|
25
|
-
*/
|
|
26
|
-
backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,
|
|
27
|
-
/**
|
|
28
|
-
* Milliseconds to wait for a close frame before declaring the socket dead and
|
|
29
|
-
* discarding it
|
|
30
|
-
* @type {[type]}
|
|
31
|
-
*/
|
|
32
|
-
forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
mercury: {
|
|
7
|
+
/**
|
|
8
|
+
* Milliseconds between pings sent up the socket
|
|
9
|
+
* @type {number}
|
|
10
|
+
*/
|
|
11
|
+
pingInterval: process.env.MERCURY_PING_INTERVAL || 15000,
|
|
12
|
+
/**
|
|
13
|
+
* Milliseconds to wait for a pong before declaring the connection dead
|
|
14
|
+
* @type {number}
|
|
15
|
+
*/
|
|
16
|
+
pongTimeout: process.env.MERCURY_PONG_TIMEOUT || 14000,
|
|
17
|
+
/**
|
|
18
|
+
* Maximum milliseconds between connection attempts
|
|
19
|
+
* @type {Number}
|
|
20
|
+
*/
|
|
21
|
+
backoffTimeMax: process.env.MERCURY_BACKOFF_TIME_MAX || 32000,
|
|
22
|
+
/**
|
|
23
|
+
* Initial milliseconds between connection attempts
|
|
24
|
+
* @type {Number}
|
|
25
|
+
*/
|
|
26
|
+
backoffTimeReset: process.env.MERCURY_BACKOFF_TIME_RESET || 1000,
|
|
27
|
+
/**
|
|
28
|
+
* Milliseconds to wait for a close frame before declaring the socket dead and
|
|
29
|
+
* discarding it
|
|
30
|
+
* @type {[type]}
|
|
31
|
+
*/
|
|
32
|
+
forceCloseDelay: process.env.MERCURY_FORCE_CLOSE_DELAY || 2000,
|
|
33
|
+
},
|
|
34
|
+
};
|