@webex/internal-plugin-mercury 3.0.0-beta.9 → 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.
- package/README.md +1 -3
- package/dist/config.js +0 -7
- package/dist/config.js.map +1 -1
- package/dist/errors.js +0 -44
- package/dist/errors.js.map +1 -1
- package/dist/index.js +1 -20
- package/dist/index.js.map +1 -1
- package/dist/mercury.js +29 -148
- package/dist/mercury.js.map +1 -1
- package/dist/socket/index.js +0 -4
- package/dist/socket/index.js.map +1 -1
- package/dist/socket/socket-base.js +25 -116
- package/dist/socket/socket-base.js.map +1 -1
- package/dist/socket/socket.js +1 -7
- package/dist/socket/socket.js.map +1 -1
- package/dist/socket/socket.shim.js +2 -7
- package/dist/socket/socket.shim.js.map +1 -1
- package/dist/types/config.d.ts +10 -0
- package/dist/types/errors.d.ts +31 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/mercury.d.ts +2 -0
- package/dist/types/socket/index.d.ts +1 -0
- package/dist/types/socket/socket-base.d.ts +120 -0
- package/dist/types/socket/socket.d.ts +2 -0
- package/dist/types/socket/socket.shim.d.ts +2 -0
- package/package.json +14 -14
- package/src/config.js +2 -2
- package/src/errors.js +7 -5
- package/src/index.js +2 -2
- package/src/mercury.js +74 -59
- package/src/socket/socket-base.js +45 -46
- package/src/socket/socket.shim.js +6 -8
- package/test/integration/spec/mercury.js +49 -39
- package/test/integration/spec/sharable-mercury.js +19 -15
- package/test/integration/spec/webex.js +8 -7
- package/test/unit/spec/mercury-events.js +51 -60
- package/test/unit/spec/mercury.js +179 -150
- package/test/unit/spec/socket.js +246 -202
|
@@ -1,151 +1,120 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
9
|
exports.default = void 0;
|
|
14
|
-
|
|
15
10
|
var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
|
|
16
|
-
|
|
17
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
18
|
-
|
|
19
12
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
20
|
-
|
|
21
13
|
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/define-property"));
|
|
22
|
-
|
|
23
14
|
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/parse-int"));
|
|
24
|
-
|
|
25
15
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
26
|
-
|
|
27
16
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
28
|
-
|
|
29
17
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
30
|
-
|
|
31
18
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
32
|
-
|
|
33
19
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
34
|
-
|
|
35
20
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
36
|
-
|
|
37
21
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
38
|
-
|
|
39
22
|
var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
|
|
40
|
-
|
|
41
23
|
var _has2 = _interopRequireDefault(require("lodash/has"));
|
|
42
|
-
|
|
43
24
|
var _defaults2 = _interopRequireDefault(require("lodash/defaults"));
|
|
44
|
-
|
|
45
25
|
var _events = require("events");
|
|
46
|
-
|
|
47
26
|
var _common = require("@webex/common");
|
|
48
|
-
|
|
49
27
|
var _commonTimers = require("@webex/common-timers");
|
|
50
|
-
|
|
51
28
|
var _uuid = _interopRequireDefault(require("uuid"));
|
|
52
|
-
|
|
53
29
|
var _errors = require("../errors");
|
|
54
|
-
|
|
55
30
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
56
|
-
|
|
57
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; } }
|
|
58
|
-
|
|
59
32
|
var sockets = new _weakMap.default();
|
|
33
|
+
|
|
60
34
|
/**
|
|
61
35
|
* Generalized socket abstraction
|
|
62
36
|
*/
|
|
63
|
-
|
|
64
37
|
var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
65
38
|
(0, _inherits2.default)(Socket, _EventEmitter);
|
|
66
|
-
|
|
67
39
|
var _super = _createSuper(Socket);
|
|
68
|
-
|
|
69
40
|
/**
|
|
70
41
|
* constructor
|
|
71
42
|
* @returns {Socket}
|
|
72
43
|
*/
|
|
73
44
|
function Socket() {
|
|
74
45
|
var _this;
|
|
75
|
-
|
|
76
46
|
(0, _classCallCheck2.default)(this, Socket);
|
|
77
47
|
_this = _super.call(this);
|
|
78
48
|
_this.onmessage = _this.onmessage.bind((0, _assertThisInitialized2.default)(_this));
|
|
79
49
|
_this.onclose = _this.onclose.bind((0, _assertThisInitialized2.default)(_this));
|
|
80
50
|
return _this;
|
|
81
51
|
}
|
|
52
|
+
|
|
82
53
|
/**
|
|
83
54
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
84
55
|
* @returns {string}
|
|
85
56
|
*/
|
|
86
|
-
|
|
87
|
-
|
|
88
57
|
(0, _createClass2.default)(Socket, [{
|
|
89
58
|
key: "binaryType",
|
|
90
59
|
get: function get() {
|
|
91
60
|
return sockets.get(this).binaryType;
|
|
92
61
|
}
|
|
62
|
+
|
|
93
63
|
/**
|
|
94
64
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
95
65
|
* @returns {number}
|
|
96
66
|
*/
|
|
97
|
-
|
|
98
67
|
}, {
|
|
99
68
|
key: "bufferedAmount",
|
|
100
69
|
get: function get() {
|
|
101
70
|
return sockets.get(this).bufferedAmount;
|
|
102
71
|
}
|
|
72
|
+
|
|
103
73
|
/**
|
|
104
74
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
105
75
|
* @returns {string}
|
|
106
76
|
*/
|
|
107
|
-
|
|
108
77
|
}, {
|
|
109
78
|
key: "extensions",
|
|
110
79
|
get: function get() {
|
|
111
80
|
return sockets.get(this).extensions;
|
|
112
81
|
}
|
|
82
|
+
|
|
113
83
|
/**
|
|
114
84
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
115
85
|
* @returns {string}
|
|
116
86
|
*/
|
|
117
|
-
|
|
118
87
|
}, {
|
|
119
88
|
key: "protocol",
|
|
120
89
|
get: function get() {
|
|
121
90
|
return sockets.get(this).protocol;
|
|
122
91
|
}
|
|
92
|
+
|
|
123
93
|
/**
|
|
124
94
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
125
95
|
* @returns {number}
|
|
126
96
|
*/
|
|
127
|
-
|
|
128
97
|
}, {
|
|
129
98
|
key: "readyState",
|
|
130
99
|
get: function get() {
|
|
131
100
|
return sockets.get(this).readyState;
|
|
132
101
|
}
|
|
102
|
+
|
|
133
103
|
/**
|
|
134
104
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
|
|
135
105
|
* @returns {string}
|
|
136
106
|
*/
|
|
137
|
-
|
|
138
107
|
}, {
|
|
139
108
|
key: "url",
|
|
140
109
|
get: function get() {
|
|
141
110
|
return sockets.get(this).url;
|
|
142
111
|
}
|
|
112
|
+
|
|
143
113
|
/**
|
|
144
114
|
* Provides the environmentally appropriate constructor (ws in NodeJS,
|
|
145
115
|
* WebSocket in browsers)
|
|
146
116
|
* @returns {WebSocket}
|
|
147
117
|
*/
|
|
148
|
-
|
|
149
118
|
}, {
|
|
150
119
|
key: "close",
|
|
151
120
|
value:
|
|
@@ -158,33 +127,25 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
158
127
|
*/
|
|
159
128
|
function close(options) {
|
|
160
129
|
var _this2 = this;
|
|
161
|
-
|
|
162
130
|
return new _promise.default(function (resolve, reject) {
|
|
163
131
|
var socket = sockets.get(_this2);
|
|
164
|
-
|
|
165
132
|
if (!socket) {
|
|
166
133
|
// Open has not been called yet so there is no socket to close
|
|
167
134
|
resolve();
|
|
168
135
|
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
|
|
136
|
+
}
|
|
137
|
+
// logger is defined once open is called
|
|
172
138
|
_this2.logger.info('socket: closing');
|
|
173
|
-
|
|
174
139
|
if (socket.readyState === 2 || socket.readyState === 3) {
|
|
175
140
|
_this2.logger.info('socket: already closed');
|
|
176
|
-
|
|
177
141
|
resolve();
|
|
178
142
|
return;
|
|
179
143
|
}
|
|
180
|
-
|
|
181
144
|
options = options || {};
|
|
182
|
-
|
|
183
145
|
if (options.code && options.code !== 1000 && (options.code < 3000 || options.code > 4999)) {
|
|
184
146
|
reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));
|
|
185
147
|
return;
|
|
186
148
|
}
|
|
187
|
-
|
|
188
149
|
options = (0, _defaults2.default)(options, {
|
|
189
150
|
code: 1000,
|
|
190
151
|
reason: 'Done'
|
|
@@ -192,7 +153,6 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
192
153
|
var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
|
|
193
154
|
try {
|
|
194
155
|
_this2.logger.info('socket: no close event received, forcing closure');
|
|
195
|
-
|
|
196
156
|
resolve(_this2.onclose({
|
|
197
157
|
code: 1000,
|
|
198
158
|
reason: 'Done (forced)'
|
|
@@ -201,20 +161,16 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
201
161
|
_this2.logger.warn('socket: force-close failed', error);
|
|
202
162
|
}
|
|
203
163
|
}, _this2.forceCloseDelay);
|
|
204
|
-
|
|
205
164
|
socket.onclose = function (event) {
|
|
206
165
|
_this2.logger.info('socket: close event fired', event.code, event.reason);
|
|
207
|
-
|
|
208
166
|
clearTimeout(closeTimer);
|
|
209
|
-
|
|
210
167
|
_this2.onclose(event);
|
|
211
|
-
|
|
212
168
|
resolve(event);
|
|
213
169
|
};
|
|
214
|
-
|
|
215
170
|
socket.close(options.code, options.reason);
|
|
216
171
|
});
|
|
217
172
|
}
|
|
173
|
+
|
|
218
174
|
/**
|
|
219
175
|
* Opens a WebSocket
|
|
220
176
|
* @param {string} url
|
|
@@ -228,24 +184,20 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
228
184
|
* @param {string} options.logLevelToken
|
|
229
185
|
* @returns {Promise}
|
|
230
186
|
*/
|
|
231
|
-
|
|
232
187
|
}, {
|
|
233
188
|
key: "open",
|
|
234
189
|
value: function open(url, options) {
|
|
235
190
|
var _this3 = this;
|
|
236
|
-
|
|
237
191
|
return new _promise.default(function (resolve, reject) {
|
|
238
192
|
/* eslint complexity: [0] */
|
|
239
193
|
if (!url) {
|
|
240
194
|
reject(new Error('`url` is required'));
|
|
241
195
|
return;
|
|
242
196
|
}
|
|
243
|
-
|
|
244
197
|
if (sockets.get(_this3)) {
|
|
245
198
|
reject(new Error('Socket#open() can only be called once per instance'));
|
|
246
199
|
return;
|
|
247
200
|
}
|
|
248
|
-
|
|
249
201
|
options = options || {};
|
|
250
202
|
(0, _common.checkRequired)(['forceCloseDelay', 'pingInterval', 'pongTimeout', 'token', 'trackingId', 'logger'], options);
|
|
251
203
|
(0, _keys.default)(options).forEach(function (key) {
|
|
@@ -255,18 +207,13 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
255
207
|
});
|
|
256
208
|
});
|
|
257
209
|
var WebSocket = Socket.getWebSocketConstructor();
|
|
258
|
-
|
|
259
210
|
_this3.logger.info('socket: creating WebSocket');
|
|
260
|
-
|
|
261
211
|
var socket = new WebSocket(url, [], options);
|
|
262
212
|
socket.binaryType = 'arraybuffer';
|
|
263
213
|
socket.onmessage = _this3.onmessage;
|
|
264
|
-
|
|
265
214
|
socket.onclose = function (event) {
|
|
266
215
|
event = _this3._fixCloseCode(event);
|
|
267
|
-
|
|
268
216
|
_this3.logger.info('socket: closed before open', event.code, event.reason);
|
|
269
|
-
|
|
270
217
|
switch (event.code) {
|
|
271
218
|
case 1005:
|
|
272
219
|
// IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume
|
|
@@ -274,49 +221,39 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
274
221
|
// turns out we had a bad token, the device refresh should 401 and
|
|
275
222
|
// trigger a token refresh.
|
|
276
223
|
return reject(new _errors.UnknownResponse(event));
|
|
277
|
-
|
|
278
224
|
case 4400:
|
|
279
225
|
return reject(new _errors.BadRequest(event));
|
|
280
|
-
|
|
281
226
|
case 4401:
|
|
282
227
|
return reject(new _errors.NotAuthorized(event));
|
|
283
|
-
|
|
284
228
|
case 4403:
|
|
285
229
|
return reject(new _errors.Forbidden(event));
|
|
286
230
|
// case 4404:
|
|
287
231
|
// return reject(new NotFound(event));
|
|
288
|
-
|
|
289
232
|
default:
|
|
290
233
|
return reject(new _errors.ConnectionError(event));
|
|
291
234
|
}
|
|
292
235
|
};
|
|
293
|
-
|
|
294
236
|
socket.onopen = function () {
|
|
295
237
|
_this3.logger.info('socket: connected');
|
|
296
|
-
|
|
297
238
|
_this3._authorize().then(function () {
|
|
298
239
|
_this3.logger.info('socket: authorized');
|
|
299
|
-
|
|
300
240
|
socket.onclose = _this3.onclose;
|
|
301
241
|
resolve();
|
|
302
242
|
}).catch(reject);
|
|
303
243
|
};
|
|
304
|
-
|
|
305
244
|
socket.onerror = function (event) {
|
|
306
245
|
_this3.logger.warn('socket: error event fired', event);
|
|
307
246
|
};
|
|
308
|
-
|
|
309
247
|
sockets.set(_this3, socket);
|
|
310
|
-
|
|
311
248
|
_this3.logger.info('socket: waiting for server');
|
|
312
249
|
});
|
|
313
250
|
}
|
|
251
|
+
|
|
314
252
|
/**
|
|
315
253
|
* Handles incoming CloseEvents
|
|
316
254
|
* @param {CloseEvent} event
|
|
317
255
|
* @returns {undefined}
|
|
318
256
|
*/
|
|
319
|
-
|
|
320
257
|
}, {
|
|
321
258
|
key: "onclose",
|
|
322
259
|
value: function onclose(event) {
|
|
@@ -324,17 +261,18 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
324
261
|
clearTimeout(this.pongTimer);
|
|
325
262
|
clearTimeout(this.pingTimer);
|
|
326
263
|
event = this._fixCloseCode(event);
|
|
327
|
-
this.emit('close', event);
|
|
328
|
-
// we don't have a retain cycle.
|
|
264
|
+
this.emit('close', event);
|
|
329
265
|
|
|
266
|
+
// Remove all listeners to (a) avoid reacting to late pongs and (b) ensure
|
|
267
|
+
// we don't have a retain cycle.
|
|
330
268
|
this.removeAllListeners();
|
|
331
269
|
}
|
|
270
|
+
|
|
332
271
|
/**
|
|
333
272
|
* Handles incoming message events
|
|
334
273
|
* @param {MessageEvent} event
|
|
335
274
|
* @returns {undefined}
|
|
336
275
|
*/
|
|
337
|
-
|
|
338
276
|
}, {
|
|
339
277
|
key: "onmessage",
|
|
340
278
|
value: function onmessage(event) {
|
|
@@ -342,22 +280,19 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
342
280
|
var data = JSON.parse(event.data);
|
|
343
281
|
var sequenceNumber = (0, _parseInt2.default)(data.sequenceNumber, 10);
|
|
344
282
|
this.logger.debug('socket: sequence number: ', sequenceNumber);
|
|
345
|
-
|
|
346
283
|
if (this.expectedSequenceNumber && sequenceNumber !== this.expectedSequenceNumber) {
|
|
347
284
|
this.logger.debug("socket: sequence number mismatch indicates lost mercury message. expected: ".concat(this.expectedSequenceNumber, ", actual: ").concat(sequenceNumber));
|
|
348
285
|
this.emit('sequence-mismatch', sequenceNumber, this.expectedSequenceNumber);
|
|
349
286
|
}
|
|
287
|
+
this.expectedSequenceNumber = sequenceNumber + 1;
|
|
350
288
|
|
|
351
|
-
|
|
289
|
+
// Yes, it's a little weird looking; we want to emit message events that
|
|
352
290
|
// look like normal socket message events, but event.data cannot be
|
|
353
291
|
// modified and we don't actually care about anything but the data property
|
|
354
|
-
|
|
355
292
|
var processedEvent = {
|
|
356
293
|
data: data
|
|
357
294
|
};
|
|
358
|
-
|
|
359
295
|
this._acknowledge(processedEvent);
|
|
360
|
-
|
|
361
296
|
if (data.type === 'pong') {
|
|
362
297
|
this.emit('pong', processedEvent);
|
|
363
298
|
} else {
|
|
@@ -367,72 +302,64 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
367
302
|
// The above code should only be able to throw if we receive an unparsable
|
|
368
303
|
// message from Mercury. At this time, the only action we have is to
|
|
369
304
|
// ignore it and move on.
|
|
370
|
-
|
|
371
305
|
/* istanbul ignore next */
|
|
372
306
|
this.logger.warn('socket: error while receiving WebSocket message', error);
|
|
373
307
|
}
|
|
374
308
|
}
|
|
309
|
+
|
|
375
310
|
/**
|
|
376
311
|
* Sends a message up the socket
|
|
377
312
|
* @param {mixed} data
|
|
378
313
|
* @returns {Promise}
|
|
379
314
|
*/
|
|
380
|
-
|
|
381
315
|
}, {
|
|
382
316
|
key: "send",
|
|
383
317
|
value: function send(data) {
|
|
384
318
|
var _this4 = this;
|
|
385
|
-
|
|
386
319
|
return new _promise.default(function (resolve, reject) {
|
|
387
320
|
if (_this4.readyState !== 1) {
|
|
388
321
|
return reject(new Error('INVALID_STATE_ERROR'));
|
|
389
322
|
}
|
|
390
|
-
|
|
391
323
|
if ((0, _isObject2.default)(data)) {
|
|
392
324
|
data = (0, _stringify.default)(data);
|
|
393
325
|
}
|
|
394
|
-
|
|
395
326
|
var socket = sockets.get(_this4);
|
|
396
327
|
socket.send(data);
|
|
397
328
|
return resolve();
|
|
398
329
|
});
|
|
399
330
|
}
|
|
331
|
+
|
|
400
332
|
/**
|
|
401
333
|
* Sends an acknowledgment for a specific event
|
|
402
334
|
* @param {MessageEvent} event
|
|
403
335
|
* @returns {Promise}
|
|
404
336
|
*/
|
|
405
|
-
|
|
406
337
|
}, {
|
|
407
338
|
key: "_acknowledge",
|
|
408
339
|
value: function _acknowledge(event) {
|
|
409
340
|
if (!event) {
|
|
410
341
|
return _promise.default.reject(new Error('`event` is required'));
|
|
411
342
|
}
|
|
412
|
-
|
|
413
343
|
if (!(0, _has2.default)(event, 'data.id')) {
|
|
414
344
|
return _promise.default.reject(new Error('`event.data.id` is required'));
|
|
415
345
|
}
|
|
416
|
-
|
|
417
346
|
return this.send({
|
|
418
347
|
messageId: event.data.id,
|
|
419
348
|
type: 'ack'
|
|
420
349
|
});
|
|
421
350
|
}
|
|
351
|
+
|
|
422
352
|
/**
|
|
423
353
|
* Sends an auth message up the socket
|
|
424
354
|
* @private
|
|
425
355
|
* @returns {Promise}
|
|
426
356
|
*/
|
|
427
|
-
|
|
428
357
|
}, {
|
|
429
358
|
key: "_authorize",
|
|
430
359
|
value: function _authorize() {
|
|
431
360
|
var _this5 = this;
|
|
432
|
-
|
|
433
361
|
return new _promise.default(function (resolve) {
|
|
434
362
|
_this5.logger.info('socket: authorizing');
|
|
435
|
-
|
|
436
363
|
_this5.send({
|
|
437
364
|
id: _uuid.default.v4(),
|
|
438
365
|
type: 'authorization',
|
|
@@ -442,20 +369,17 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
442
369
|
trackingId: _this5.trackingId,
|
|
443
370
|
logLevelToken: _this5.logLevelToken
|
|
444
371
|
});
|
|
445
|
-
|
|
446
372
|
var waitForBufferState = function waitForBufferState(event) {
|
|
447
373
|
if (!event.data.type && (event.data.data.eventType === 'mercury.buffer_state' || event.data.data.eventType === 'mercury.registration_status')) {
|
|
448
374
|
_this5.removeListener('message', waitForBufferState);
|
|
449
|
-
|
|
450
375
|
_this5._ping();
|
|
451
|
-
|
|
452
376
|
resolve();
|
|
453
377
|
}
|
|
454
378
|
};
|
|
455
|
-
|
|
456
379
|
_this5.once('message', waitForBufferState);
|
|
457
380
|
});
|
|
458
381
|
}
|
|
382
|
+
|
|
459
383
|
/**
|
|
460
384
|
* Deals with the fact that some browsers drop some close codes (but not
|
|
461
385
|
* close reasons).
|
|
@@ -463,7 +387,6 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
463
387
|
* @private
|
|
464
388
|
* @returns {CloseEvent}
|
|
465
389
|
*/
|
|
466
|
-
|
|
467
390
|
}, {
|
|
468
391
|
key: "_fixCloseCode",
|
|
469
392
|
value: function _fixCloseCode(event) {
|
|
@@ -473,41 +396,35 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
473
396
|
this.logger.info('socket: fixing CloseEvent code for reason: ', event.reason);
|
|
474
397
|
event.code = 4000;
|
|
475
398
|
break;
|
|
476
|
-
|
|
477
399
|
case 'authentication failed':
|
|
478
400
|
case 'authentication did not happen within the timeout window of 30000 seconds.':
|
|
479
401
|
this.logger.info('socket: fixing CloseEvent code for reason: ', event.reason);
|
|
480
402
|
event.code = 1008;
|
|
481
403
|
break;
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
404
|
+
default:
|
|
405
|
+
// do nothing
|
|
485
406
|
}
|
|
486
407
|
}
|
|
487
408
|
|
|
488
409
|
return event;
|
|
489
410
|
}
|
|
411
|
+
|
|
490
412
|
/**
|
|
491
413
|
* Sends a ping up the socket and confirms we get it back
|
|
492
414
|
* @param {[type]} id
|
|
493
415
|
* @private
|
|
494
416
|
* @returns {[type]}
|
|
495
417
|
*/
|
|
496
|
-
|
|
497
418
|
}, {
|
|
498
419
|
key: "_ping",
|
|
499
420
|
value: function _ping(id) {
|
|
500
421
|
var _this6 = this;
|
|
501
|
-
|
|
502
422
|
var confirmPongId = function confirmPongId(event) {
|
|
503
423
|
try {
|
|
504
424
|
_this6.logger.debug('socket: pong', event.data.id);
|
|
505
|
-
|
|
506
425
|
if (event.data && event.data.id !== id) {
|
|
507
426
|
_this6.logger.info('socket: received pong for wrong ping id, closing socket');
|
|
508
|
-
|
|
509
427
|
_this6.logger.debug('socket: expected', id, 'received', event.data.id);
|
|
510
|
-
|
|
511
428
|
_this6.close({
|
|
512
429
|
code: 1000,
|
|
513
430
|
reason: 'Pong mismatch'
|
|
@@ -516,16 +433,13 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
516
433
|
} catch (error) {
|
|
517
434
|
// This try/catch block was added as a debugging step; to the best of my
|
|
518
435
|
// knowledge, the above can never throw.
|
|
519
|
-
|
|
520
436
|
/* istanbul ignore next */
|
|
521
437
|
_this6.logger.error('socket: error occurred in confirmPongId', error);
|
|
522
438
|
}
|
|
523
439
|
};
|
|
524
|
-
|
|
525
440
|
var onPongNotReceived = function onPongNotReceived() {
|
|
526
441
|
try {
|
|
527
442
|
_this6.logger.info('socket: pong not receive in expected period, closing socket');
|
|
528
|
-
|
|
529
443
|
_this6.close({
|
|
530
444
|
code: 1000,
|
|
531
445
|
reason: 'Pong not received'
|
|
@@ -535,12 +449,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
535
449
|
} catch (error) {
|
|
536
450
|
// This try/catch block was added as a debugging step; to the best of my
|
|
537
451
|
// knowledge, the above can never throw.
|
|
538
|
-
|
|
539
452
|
/* istanbul ignore next */
|
|
540
453
|
_this6.logger.error('socket: error occurred in onPongNotReceived', error);
|
|
541
454
|
}
|
|
542
455
|
};
|
|
543
|
-
|
|
544
456
|
var scheduleNextPingAndCancelPongTimer = function scheduleNextPingAndCancelPongTimer() {
|
|
545
457
|
try {
|
|
546
458
|
clearTimeout(_this6.pongTimer);
|
|
@@ -550,12 +462,10 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
550
462
|
} catch (error) {
|
|
551
463
|
// This try/catch block was added as a debugging step; to the best of my
|
|
552
464
|
// knowledge, the above can never throw.
|
|
553
|
-
|
|
554
465
|
/* istanbul ignore next */
|
|
555
466
|
_this6.logger.error('socket: error occurred in scheduleNextPingAndCancelPongTimer', error);
|
|
556
467
|
}
|
|
557
468
|
};
|
|
558
|
-
|
|
559
469
|
id = id || _uuid.default.v4();
|
|
560
470
|
this.pongTimer = (0, _commonTimers.safeSetTimeout)(onPongNotReceived, this.pongTimeout);
|
|
561
471
|
this.once('pong', scheduleNextPingAndCancelPongTimer);
|
|
@@ -574,6 +484,5 @@ var Socket = /*#__PURE__*/function (_EventEmitter) {
|
|
|
574
484
|
}]);
|
|
575
485
|
return Socket;
|
|
576
486
|
}(_events.EventEmitter);
|
|
577
|
-
|
|
578
487
|
exports.default = Socket;
|
|
579
488
|
//# sourceMappingURL=socket-base.js.map
|