@webex/calling 3.12.0-mobius-socket.17 → 3.12.0-mobius-socket.19
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/dist/CallingClient/utils/request.js +6 -3
- package/dist/CallingClient/utils/request.js.map +1 -1
- package/dist/CallingClient/utils/request.test.js +2 -2
- package/dist/CallingClient/utils/request.test.js.map +1 -1
- package/dist/CallingClient/utils/types.js.map +1 -1
- package/dist/SDKConnector/types.js.map +1 -1
- package/dist/mobius-socket/config.js +7 -44
- package/dist/mobius-socket/config.js.map +1 -1
- package/dist/mobius-socket/errors.js +25 -21
- package/dist/mobius-socket/errors.js.map +1 -1
- package/dist/mobius-socket/index.js +0 -44
- package/dist/mobius-socket/index.js.map +1 -1
- package/dist/mobius-socket/mobius-socket-events.test.js +20 -48
- package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.js +302 -701
- package/dist/mobius-socket/mobius-socket.js.map +1 -1
- package/dist/mobius-socket/mobius-socket.test.js +435 -718
- package/dist/mobius-socket/mobius-socket.test.js.map +1 -1
- package/dist/mobius-socket/socket/socket-base.js +70 -78
- package/dist/mobius-socket/socket/socket-base.js.map +1 -1
- package/dist/mobius-socket/socket.test.js +36 -61
- package/dist/mobius-socket/socket.test.js.map +1 -1
- package/dist/mobius-socket/types.js +7 -0
- package/dist/mobius-socket/types.js.map +1 -0
- package/dist/module/CallingClient/utils/request.js +3 -2
- package/dist/module/mobius-socket/config.js +7 -10
- package/dist/module/mobius-socket/errors.js +17 -0
- package/dist/module/mobius-socket/index.js +0 -3
- package/dist/module/mobius-socket/mobius-socket.js +211 -401
- package/dist/module/mobius-socket/socket/socket-base.js +64 -69
- package/dist/module/mobius-socket/types.js +1 -0
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/types.d.ts +1 -1
- package/dist/types/CallingClient/utils/types.d.ts.map +1 -1
- package/dist/types/SDKConnector/types.d.ts +15 -0
- package/dist/types/SDKConnector/types.d.ts.map +1 -1
- package/dist/types/mobius-socket/config.d.ts +7 -8
- package/dist/types/mobius-socket/config.d.ts.map +1 -1
- package/dist/types/mobius-socket/errors.d.ts +7 -0
- package/dist/types/mobius-socket/errors.d.ts.map +1 -1
- package/dist/types/mobius-socket/index.d.ts +3 -5
- package/dist/types/mobius-socket/index.d.ts.map +1 -1
- package/dist/types/mobius-socket/mobius-socket.d.ts +26 -37
- package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -1
- package/dist/types/mobius-socket/socket/socket-base.d.ts +10 -10
- package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -1
- package/dist/types/mobius-socket/types.d.ts +21 -0
- package/dist/types/mobius-socket/types.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -41,11 +41,6 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
41
41
|
*/ // @ts-expect-error `@webex/common` is still JS-only and does not ship declarations.
|
|
42
42
|
// @ts-expect-error `@webex/common-timers` is still JS-only and does not ship declarations.
|
|
43
43
|
var sockets = new _weakMap.default();
|
|
44
|
-
var UnknownResponseCtor = _errors.UnknownResponse;
|
|
45
|
-
var BadRequestCtor = _errors.BadRequest;
|
|
46
|
-
var NotAuthorizedCtor = _errors.NotAuthorized;
|
|
47
|
-
var ForbiddenCtor = _errors.Forbidden;
|
|
48
|
-
var ConnectionErrorCtor = _errors.ConnectionError;
|
|
49
44
|
|
|
50
45
|
/**
|
|
51
46
|
* Generalized socket abstraction
|
|
@@ -59,19 +54,18 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
59
54
|
var _this;
|
|
60
55
|
(0, _classCallCheck2.default)(this, Socket);
|
|
61
56
|
_this = _callSuper(this, Socket);
|
|
62
|
-
(0, _defineProperty3.default)(_this, "
|
|
63
|
-
(0, _defineProperty3.default)(_this, "
|
|
57
|
+
(0, _defineProperty3.default)(_this, "domain", void 0);
|
|
58
|
+
(0, _defineProperty3.default)(_this, "pendingResponses", void 0);
|
|
64
59
|
(0, _defineProperty3.default)(_this, "forceCloseDelay", void 0);
|
|
65
60
|
(0, _defineProperty3.default)(_this, "logger", void 0);
|
|
66
61
|
(0, _defineProperty3.default)(_this, "refreshToken", void 0);
|
|
67
62
|
(0, _defineProperty3.default)(_this, "token", void 0);
|
|
68
63
|
(0, _defineProperty3.default)(_this, "trackingId", void 0);
|
|
69
64
|
(0, _defineProperty3.default)(_this, "wssResponseTimeout", void 0);
|
|
70
|
-
_this.
|
|
71
|
-
_this.
|
|
65
|
+
_this.domain = 'unknown-domain';
|
|
66
|
+
_this.pendingResponses = new _map.default();
|
|
72
67
|
_this.onmessage = _this.onmessage.bind(_this);
|
|
73
68
|
_this.onclose = _this.onclose.bind(_this);
|
|
74
|
-
// Increase max listeners to avoid memory leak warning in tests
|
|
75
69
|
_this.setMaxListeners(10);
|
|
76
70
|
return _this;
|
|
77
71
|
}
|
|
@@ -162,9 +156,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
162
156
|
return;
|
|
163
157
|
}
|
|
164
158
|
// logger is defined once open is called
|
|
165
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
159
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": closing"));
|
|
166
160
|
if (socket.readyState === _constants.SOCKET_READY_STATE.CLOSING || socket.readyState === _constants.SOCKET_READY_STATE.CLOSED) {
|
|
167
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
161
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": already closed"));
|
|
168
162
|
resolve();
|
|
169
163
|
return;
|
|
170
164
|
}
|
|
@@ -180,7 +174,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
180
174
|
}
|
|
181
175
|
var closeTimer = (0, _commonTimers.safeSetTimeout)(function () {
|
|
182
176
|
try {
|
|
183
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
177
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": no close event received, forcing closure"));
|
|
184
178
|
resolve(_this2.onclose(originalCode ? {
|
|
185
179
|
code: originalCode,
|
|
186
180
|
reason: originalReason || 'Done (unknown)'
|
|
@@ -189,11 +183,11 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
189
183
|
reason: 'Done (forced)'
|
|
190
184
|
}));
|
|
191
185
|
} catch (error) {
|
|
192
|
-
_this2.logger.warn("socket,".concat(_this2.
|
|
186
|
+
_this2.logger.warn("socket,".concat(_this2.domain, ": force-close failed"), error);
|
|
193
187
|
}
|
|
194
188
|
}, _this2.forceCloseDelay);
|
|
195
189
|
socket.onclose = function (event) {
|
|
196
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
190
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": close event fired"), event.code, event.reason);
|
|
197
191
|
clearTimeout(closeTimer);
|
|
198
192
|
_this2.onclose(event);
|
|
199
193
|
resolve(event);
|
|
@@ -202,7 +196,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
202
196
|
// If socket is still connecting, manually trigger close handler with desired code
|
|
203
197
|
// because calling close() on a CONNECTING socket may not preserve custom codes
|
|
204
198
|
if (socket.readyState === _constants.SOCKET_READY_STATE.CONNECTING) {
|
|
205
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
199
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": socket still connecting, triggering close manually"));
|
|
206
200
|
clearTimeout(closeTimer);
|
|
207
201
|
var closeEvent = {
|
|
208
202
|
code: resolvedOptions.code,
|
|
@@ -213,7 +207,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
213
207
|
try {
|
|
214
208
|
socket.close(resolvedOptions.code, resolvedOptions.reason);
|
|
215
209
|
} catch (error) {
|
|
216
|
-
_this2.logger.info("socket,".concat(_this2.
|
|
210
|
+
_this2.logger.info("socket,".concat(_this2.domain, ": error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes"), error);
|
|
217
211
|
}
|
|
218
212
|
} else {
|
|
219
213
|
socket.close(resolvedOptions.code, resolvedOptions.reason);
|
|
@@ -236,9 +230,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
236
230
|
value: function open(url, options) {
|
|
237
231
|
var _this3 = this;
|
|
238
232
|
try {
|
|
239
|
-
this.
|
|
233
|
+
this.domain = new URL(url).hostname;
|
|
240
234
|
} catch (_unused) {
|
|
241
|
-
this.
|
|
235
|
+
this.domain = url;
|
|
242
236
|
}
|
|
243
237
|
return new _promise.default(function (resolve, reject) {
|
|
244
238
|
/* eslint complexity: [0] */
|
|
@@ -259,45 +253,43 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
259
253
|
});
|
|
260
254
|
});
|
|
261
255
|
var WebSocket = Socket.getWebSocketConstructor();
|
|
262
|
-
_this3.logger.info("socket,".concat(_this3.
|
|
256
|
+
_this3.logger.info("socket,".concat(_this3.domain, ": creating WebSocket"));
|
|
263
257
|
var socket = new WebSocket(url, [], resolvedOptions);
|
|
264
258
|
socket.binaryType = 'arraybuffer';
|
|
265
259
|
socket.onmessage = _this3.onmessage;
|
|
266
260
|
socket.onclose = function (event) {
|
|
267
|
-
event = _this3.
|
|
268
|
-
_this3.logger.info("socket,".concat(_this3.
|
|
261
|
+
event = _this3.fixCloseCode(event);
|
|
262
|
+
_this3.logger.info("socket,".concat(_this3.domain, ": closed before open"), event.code, event.reason);
|
|
269
263
|
switch (event.code) {
|
|
270
264
|
case 1005:
|
|
271
265
|
// IE 11 doesn't seem to allow 4XXX codes, so if we get a 1005, assume
|
|
272
266
|
// it's a bad websocket url. That'll trigger a device refresh; if it
|
|
273
267
|
// turns out we had a bad token, the device refresh should 401 and
|
|
274
268
|
// trigger a token refresh.
|
|
275
|
-
return reject(new
|
|
269
|
+
return reject(new _errors.UnknownResponse(event));
|
|
276
270
|
case 4400:
|
|
277
|
-
return reject(new
|
|
271
|
+
return reject(new _errors.BadRequest(event));
|
|
278
272
|
case 4401:
|
|
279
|
-
return reject(new
|
|
273
|
+
return reject(new _errors.NotAuthorized(event));
|
|
280
274
|
case 4403:
|
|
281
|
-
return reject(new
|
|
282
|
-
// case 4404:
|
|
283
|
-
// return reject(new NotFound(event));
|
|
275
|
+
return reject(new _errors.Forbidden(event));
|
|
284
276
|
default:
|
|
285
|
-
return reject(new
|
|
277
|
+
return reject(new _errors.ConnectionError(event));
|
|
286
278
|
}
|
|
287
279
|
};
|
|
288
280
|
socket.onopen = function () {
|
|
289
|
-
_this3.logger.info("socket,".concat(_this3.
|
|
290
|
-
_this3.
|
|
291
|
-
_this3.logger.info("socket,".concat(_this3.
|
|
281
|
+
_this3.logger.info("socket,".concat(_this3.domain, ": connected"));
|
|
282
|
+
_this3.authorize(_this3.token).then(function () {
|
|
283
|
+
_this3.logger.info("socket,".concat(_this3.domain, ": authorized"));
|
|
292
284
|
socket.onclose = _this3.onclose;
|
|
293
285
|
resolve();
|
|
294
286
|
}).catch(reject);
|
|
295
287
|
};
|
|
296
288
|
socket.onerror = function (event) {
|
|
297
|
-
_this3.logger.warn("socket,".concat(_this3.
|
|
289
|
+
_this3.logger.warn("socket,".concat(_this3.domain, ": error event fired"), event);
|
|
298
290
|
};
|
|
299
291
|
sockets.set(_this3, socket);
|
|
300
|
-
_this3.logger.info("socket,".concat(_this3.
|
|
292
|
+
_this3.logger.info("socket,".concat(_this3.domain, ": waiting for server"));
|
|
301
293
|
});
|
|
302
294
|
}
|
|
303
295
|
|
|
@@ -309,9 +301,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
309
301
|
}, {
|
|
310
302
|
key: "onclose",
|
|
311
303
|
value: function onclose(event) {
|
|
312
|
-
this.logger.info("socket,".concat(this.
|
|
313
|
-
event = this.
|
|
314
|
-
this.
|
|
304
|
+
this.logger.info("socket,".concat(this.domain, ": closed"), event.code, event.reason);
|
|
305
|
+
event = this.fixCloseCode(event);
|
|
306
|
+
this.rejectPendingResponses(new _errors.ConnectionError(event));
|
|
315
307
|
this.emit('close', event);
|
|
316
308
|
|
|
317
309
|
// Remove all listeners to (a) avoid reacting to late pongs and (b) ensure
|
|
@@ -334,18 +326,18 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
334
326
|
data: data
|
|
335
327
|
};
|
|
336
328
|
if (data.type === 'async_event') {
|
|
337
|
-
this.
|
|
338
|
-
_this4.logger.warn("socket,".concat(_this4.
|
|
329
|
+
this.acknowledge(processedEvent).catch(function (error) {
|
|
330
|
+
_this4.logger.warn("socket,".concat(_this4.domain, ": failed to acknowledge async event"), error);
|
|
339
331
|
});
|
|
340
332
|
}
|
|
341
333
|
|
|
342
334
|
// Match pending request/response promises before emitting the public message event.
|
|
343
335
|
// The message is still emitted afterward for any external listeners that care about it.
|
|
344
|
-
this.
|
|
336
|
+
this.handlePendingResponse(data);
|
|
345
337
|
this.emit('message', processedEvent);
|
|
346
338
|
} catch (error) {
|
|
347
339
|
/* istanbul ignore next */
|
|
348
|
-
this.logger.warn("socket,".concat(this.
|
|
340
|
+
this.logger.warn("socket,".concat(this.domain, ": error while receiving WebSocket message"), error);
|
|
349
341
|
}
|
|
350
342
|
}
|
|
351
343
|
|
|
@@ -397,7 +389,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
397
389
|
return _promise.default.reject(new Error('`data` is required'));
|
|
398
390
|
}
|
|
399
391
|
var request = _objectSpread({}, data);
|
|
400
|
-
var trackingId = request.trackingId || this.
|
|
392
|
+
var trackingId = request.trackingId || this.createTrackingId();
|
|
401
393
|
var timeout = options.timeout || this.wssResponseTimeout || 10000;
|
|
402
394
|
var matchesResponse = options.matchesResponse || function (response) {
|
|
403
395
|
return (response === null || response === void 0 ? void 0 : response.trackingId) === trackingId && (response === null || response === void 0 ? void 0 : response.type) === 'response_event';
|
|
@@ -409,43 +401,43 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
409
401
|
return response === null || response === void 0 ? void 0 : response.statusMessage;
|
|
410
402
|
};
|
|
411
403
|
var createError = options.createError || function (response, statusCode, statusMessage) {
|
|
412
|
-
return new
|
|
404
|
+
return new _errors.ConnectionError({
|
|
413
405
|
code: statusCode,
|
|
414
406
|
reason: statusMessage || (response === null || response === void 0 ? void 0 : response.reason) || 'Socket request failed'
|
|
415
407
|
});
|
|
416
408
|
};
|
|
417
409
|
var createTimeoutError = options.createTimeoutError || function () {
|
|
418
|
-
return new
|
|
410
|
+
return new _errors.ConnectionError({
|
|
419
411
|
reason: 'Socket response not received before timeout'
|
|
420
412
|
});
|
|
421
413
|
};
|
|
422
|
-
if (this.
|
|
414
|
+
if (this.pendingResponses.has(trackingId)) {
|
|
423
415
|
return _promise.default.reject(new Error("socket request already pending for trackingId ".concat(trackingId)));
|
|
424
416
|
}
|
|
425
417
|
request.trackingId = trackingId;
|
|
426
418
|
return new _promise.default(function (_resolve, _reject) {
|
|
427
419
|
var timeoutId = (0, _commonTimers.safeSetTimeout)(function () {
|
|
428
|
-
_this6.
|
|
420
|
+
_this6.clearPendingResponse(trackingId);
|
|
429
421
|
_reject(createTimeoutError(request));
|
|
430
422
|
}, timeout);
|
|
431
|
-
_this6.
|
|
423
|
+
_this6.pendingResponses.set(trackingId, {
|
|
432
424
|
request: request,
|
|
433
425
|
matchesResponse: matchesResponse,
|
|
434
426
|
getStatusCode: getStatusCode,
|
|
435
427
|
getStatusMessage: getStatusMessage,
|
|
436
428
|
createError: createError,
|
|
437
429
|
resolve: function resolve(response) {
|
|
438
|
-
_this6.
|
|
430
|
+
_this6.clearPendingResponse(trackingId);
|
|
439
431
|
_resolve(response);
|
|
440
432
|
},
|
|
441
433
|
reject: function reject(error) {
|
|
442
|
-
_this6.
|
|
434
|
+
_this6.clearPendingResponse(trackingId);
|
|
443
435
|
_reject(error);
|
|
444
436
|
},
|
|
445
437
|
timeoutId: timeoutId
|
|
446
438
|
});
|
|
447
439
|
_this6.send(request).catch(function (error) {
|
|
448
|
-
_this6.
|
|
440
|
+
_this6.clearPendingResponse(trackingId);
|
|
449
441
|
_reject(error);
|
|
450
442
|
});
|
|
451
443
|
});
|
|
@@ -457,8 +449,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
457
449
|
* @returns {Promise}
|
|
458
450
|
*/
|
|
459
451
|
}, {
|
|
460
|
-
key: "
|
|
461
|
-
value: function
|
|
452
|
+
key: "acknowledge",
|
|
453
|
+
value: function acknowledge(event) {
|
|
462
454
|
if (!event) {
|
|
463
455
|
return _promise.default.reject(new Error('`event` is required'));
|
|
464
456
|
}
|
|
@@ -472,7 +464,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
472
464
|
}
|
|
473
465
|
return this.send({
|
|
474
466
|
type: _constants.MESSAGE_TYPES.EVENT_ACK,
|
|
475
|
-
trackingId: event.data.trackingId || this.
|
|
467
|
+
trackingId: event.data.trackingId || this.createTrackingId(),
|
|
476
468
|
eventId: event.data.eventId
|
|
477
469
|
}).catch(function (error) {
|
|
478
470
|
if (error.message === 'INVALID_STATE_ERROR') {
|
|
@@ -495,7 +487,7 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
495
487
|
} else {
|
|
496
488
|
refreshedToken = String(token);
|
|
497
489
|
}
|
|
498
|
-
return this.
|
|
490
|
+
return this.authorize(refreshedToken);
|
|
499
491
|
}
|
|
500
492
|
|
|
501
493
|
/**
|
|
@@ -504,9 +496,9 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
504
496
|
* @returns {Promise}
|
|
505
497
|
*/
|
|
506
498
|
}, {
|
|
507
|
-
key: "
|
|
508
|
-
value: function
|
|
509
|
-
this.logger.info("socket,".concat(this.
|
|
499
|
+
key: "authorize",
|
|
500
|
+
value: function authorize(token) {
|
|
501
|
+
this.logger.info("socket,".concat(this.domain, ": authorizing"));
|
|
510
502
|
return this.sendRequest({
|
|
511
503
|
type: _constants.MESSAGE_TYPES.AUTH,
|
|
512
504
|
data: {
|
|
@@ -523,13 +515,13 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
523
515
|
return response === null || response === void 0 ? void 0 : response.statusMessage;
|
|
524
516
|
},
|
|
525
517
|
createError: function createError(response, statusCode, statusMessage) {
|
|
526
|
-
return new
|
|
518
|
+
return new _errors.NotAuthorized({
|
|
527
519
|
code: statusCode,
|
|
528
520
|
reason: statusMessage || 'Mobius auth failed'
|
|
529
521
|
});
|
|
530
522
|
},
|
|
531
523
|
createTimeoutError: function createTimeoutError() {
|
|
532
|
-
return new
|
|
524
|
+
return new _errors.NotAuthorized({
|
|
533
525
|
reason: 'Mobius auth response not received before timeout'
|
|
534
526
|
});
|
|
535
527
|
}
|
|
@@ -542,8 +534,8 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
542
534
|
* @returns {string}
|
|
543
535
|
*/
|
|
544
536
|
}, {
|
|
545
|
-
key: "
|
|
546
|
-
value: function
|
|
537
|
+
key: "createTrackingId",
|
|
538
|
+
value: function createTrackingId() {
|
|
547
539
|
return "".concat(this.trackingId, "_").concat(crypto.randomUUID());
|
|
548
540
|
}
|
|
549
541
|
|
|
@@ -553,13 +545,13 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
553
545
|
* @returns {void}
|
|
554
546
|
*/
|
|
555
547
|
}, {
|
|
556
|
-
key: "
|
|
557
|
-
value: function
|
|
558
|
-
var pendingResponse = this.
|
|
548
|
+
key: "clearPendingResponse",
|
|
549
|
+
value: function clearPendingResponse(trackingId) {
|
|
550
|
+
var pendingResponse = this.pendingResponses.get(trackingId);
|
|
559
551
|
if (pendingResponse !== null && pendingResponse !== void 0 && pendingResponse.timeoutId) {
|
|
560
552
|
clearTimeout(pendingResponse.timeoutId);
|
|
561
553
|
}
|
|
562
|
-
this.
|
|
554
|
+
this.pendingResponses.delete(trackingId);
|
|
563
555
|
}
|
|
564
556
|
|
|
565
557
|
/**
|
|
@@ -568,12 +560,12 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
568
560
|
* @returns {void}
|
|
569
561
|
*/
|
|
570
562
|
}, {
|
|
571
|
-
key: "
|
|
572
|
-
value: function
|
|
573
|
-
if (!this.
|
|
563
|
+
key: "rejectPendingResponses",
|
|
564
|
+
value: function rejectPendingResponses(error) {
|
|
565
|
+
if (!this.pendingResponses.size) {
|
|
574
566
|
return;
|
|
575
567
|
}
|
|
576
|
-
(0, _from.default)(this.
|
|
568
|
+
(0, _from.default)(this.pendingResponses.values()).forEach(function (pendingResponse) {
|
|
577
569
|
pendingResponse.reject(error);
|
|
578
570
|
});
|
|
579
571
|
}
|
|
@@ -584,15 +576,15 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
584
576
|
* @returns {boolean}
|
|
585
577
|
*/
|
|
586
578
|
}, {
|
|
587
|
-
key: "
|
|
588
|
-
value: function
|
|
579
|
+
key: "handlePendingResponse",
|
|
580
|
+
value: function handlePendingResponse(response) {
|
|
589
581
|
var _this7 = this;
|
|
590
582
|
if (!response) {
|
|
591
583
|
return false;
|
|
592
584
|
}
|
|
593
585
|
|
|
594
586
|
// Pending request correlation currently requires trackingId on the response.
|
|
595
|
-
var pendingResponse = response.trackingId ? this.
|
|
587
|
+
var pendingResponse = response.trackingId ? this.pendingResponses.get(response.trackingId) : undefined;
|
|
596
588
|
if (!pendingResponse) {
|
|
597
589
|
return false;
|
|
598
590
|
}
|
|
@@ -604,10 +596,10 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
604
596
|
if (statusCode === 440 && (response === null || response === void 0 ? void 0 : response.subtype) !== _constants.MESSAGE_TYPES.AUTH) {
|
|
605
597
|
if (typeof this.refreshToken === 'function') {
|
|
606
598
|
_promise.default.resolve(this.refreshToken(response)).catch(function (error) {
|
|
607
|
-
_this7.logger.warn("socket,".concat(_this7.
|
|
599
|
+
_this7.logger.warn("socket,".concat(_this7.domain, ": failed token-expiry re-auth"), error);
|
|
608
600
|
});
|
|
609
601
|
} else {
|
|
610
|
-
this.logger.warn("socket,".concat(this.
|
|
602
|
+
this.logger.warn("socket,".concat(this.domain, ": refreshToken callback is unavailable for statusCode 440"));
|
|
611
603
|
}
|
|
612
604
|
}
|
|
613
605
|
if (statusCode === undefined) {
|
|
@@ -628,17 +620,17 @@ var Socket = exports.default = /*#__PURE__*/function (_EventEmitter) {
|
|
|
628
620
|
* @returns {CloseEvent}
|
|
629
621
|
*/
|
|
630
622
|
}, {
|
|
631
|
-
key: "
|
|
632
|
-
value: function
|
|
623
|
+
key: "fixCloseCode",
|
|
624
|
+
value: function fixCloseCode(event) {
|
|
633
625
|
if (event.code === 1005 && event.reason) {
|
|
634
626
|
switch (event.reason.toLowerCase()) {
|
|
635
627
|
case 'replaced':
|
|
636
|
-
this.logger.info("socket,".concat(this.
|
|
628
|
+
this.logger.info("socket,".concat(this.domain, ": fixing CloseEvent code for reason: "), event.reason);
|
|
637
629
|
event.code = 4000;
|
|
638
630
|
break;
|
|
639
631
|
case 'authentication failed':
|
|
640
632
|
case 'authentication did not happen within the timeout window of 30000 seconds.':
|
|
641
|
-
this.logger.info("socket,".concat(this.
|
|
633
|
+
this.logger.info("socket,".concat(this.domain, ": fixing CloseEvent code for reason: "), event.reason);
|
|
642
634
|
event.code = 1008;
|
|
643
635
|
break;
|
|
644
636
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_events","require","_common","_commonTimers","_errors","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","sockets","_weakMap","UnknownResponseCtor","UnknownResponse","BadRequestCtor","BadRequest","NotAuthorizedCtor","NotAuthorized","ForbiddenCtor","Forbidden","ConnectionErrorCtor","ConnectionError","Socket","exports","_EventEmitter","_this","_classCallCheck2","_domain","_pendingResponses","_map","onmessage","bind","onclose","setMaxListeners","_inherits2","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","SOCKET_READY_STATE","CLOSING","CLOSED","originalCode","code","originalReason","reason","resolvedOptions","_defaults2","Error","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","CONNECTING","closeEvent","open","_this3","URL","hostname","_unused","checkRequired","_keys","_defineProperty2","WebSocket","getWebSocketConstructor","_fixCloseCode","onopen","_authorize","token","then","catch","onerror","set","_rejectPendingResponses","emit","removeAllListeners","_this4","data","JSON","parse","processedEvent","type","_acknowledge","_handlePendingResponse","send","_this5","OPEN","_isObject2","_stringify","sendRequest","_this6","undefined","request","trackingId","_createTrackingId","timeout","wssResponseTimeout","matchesResponse","response","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","createTimeoutError","has","timeoutId","_clearPendingResponse","_has2","MESSAGE_TYPES","EVENT_ACK","eventId","message","refresh","refreshedToken","toString","String","AUTH","subtype","crypto","randomUUID","pendingResponse","delete","size","_from","values","_this7","refreshToken","toLowerCase","EventEmitter"],"sources":["socket-base.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\n// @ts-expect-error `@webex/common` is still JS-only and does not ship declarations.\nimport {checkRequired} from '@webex/common';\n// @ts-expect-error `@webex/common-timers` is still JS-only and does not ship declarations.\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\n\nimport {\n BadRequest,\n ConnectionError,\n Forbidden,\n NotAuthorized,\n UnknownResponse,\n // NotFound\n} from '../errors';\nimport {MESSAGE_TYPES, SOCKET_READY_STATE} from './constants';\nimport type {\n SocketCloseEvent,\n SocketLogger,\n SocketMessageEvent,\n PendingResponseEntry,\n SendRequestOptions,\n SocketOpenOptions,\n SocketResponse,\n SocketTransport,\n SocketTransportConstructor,\n} from './types';\n\nconst sockets = new WeakMap<Socket, SocketTransport>();\nconst UnknownResponseCtor = UnknownResponse as unknown as new (\n event?: SocketCloseEvent\n) => UnknownResponse;\nconst BadRequestCtor = BadRequest as unknown as new (event?: SocketCloseEvent) => BadRequest;\nconst NotAuthorizedCtor = NotAuthorized as unknown as new (\n event?: SocketCloseEvent\n) => NotAuthorized;\nconst ForbiddenCtor = Forbidden as unknown as new (event?: SocketCloseEvent) => Forbidden;\nconst ConnectionErrorCtor = ConnectionError as unknown as new (\n event?: SocketCloseEvent\n) => ConnectionError;\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n _domain: string;\n\n _pendingResponses: Map<string, PendingResponseEntry>;\n\n forceCloseDelay!: number;\n\n logger!: SocketLogger;\n\n refreshToken?: (response: SocketResponse) => unknown;\n\n token!: string;\n\n trackingId!: string;\n\n wssResponseTimeout?: number;\n\n /**\n * constructor\n * @returns {Socket}\n */\n constructor() {\n super();\n this._domain = 'unknown-domain';\n this._pendingResponses = new Map();\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n // Increase max listeners to avoid memory leak warning in tests\n this.setMaxListeners(10);\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(): unknown {\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?: {reason?: string; code?: number}) {\n return new Promise<SocketCloseEvent | void>((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,${this._domain}: closing`);\n\n if (\n socket.readyState === SOCKET_READY_STATE.CLOSING ||\n socket.readyState === SOCKET_READY_STATE.CLOSED\n ) {\n this.logger.info(`socket,${this._domain}: already closed`);\n resolve();\n\n return;\n }\n\n const originalCode = options?.code;\n const originalReason = options?.reason;\n\n const resolvedOptions = defaults(options || {}, {\n code: 1000,\n reason: 'Done',\n }) as {code: number; reason: string};\n\n if (\n resolvedOptions.code &&\n resolvedOptions.code !== 1000 &&\n (resolvedOptions.code < 3000 || resolvedOptions.code > 4999)\n ) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this._domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this._domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this._domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n // If socket is still connecting, manually trigger close handler with desired code\n // because calling close() on a CONNECTING socket may not preserve custom codes\n if (socket.readyState === SOCKET_READY_STATE.CONNECTING) {\n this.logger.info(\n `socket,${this._domain}: socket still connecting, triggering close manually`\n );\n clearTimeout(closeTimer);\n const closeEvent: SocketCloseEvent = {\n code: resolvedOptions.code,\n reason: resolvedOptions.reason,\n };\n this.onclose(closeEvent);\n resolve(closeEvent);\n try {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n } catch (error) {\n this.logger.info(\n `socket,${this._domain}: error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes`,\n error\n );\n }\n } else {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n }\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @returns {Promise}\n */\n open(url: string, options?: SocketOpenOptions) {\n try {\n this._domain = new URL(url).hostname;\n } catch {\n this._domain = url;\n }\n\n return new Promise<void>((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 const resolvedOptions = (options || {}) as SocketOpenOptions;\n\n checkRequired(['forceCloseDelay', 'token', 'trackingId', 'logger'], resolvedOptions);\n\n Object.keys(resolvedOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: resolvedOptions[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor() as SocketTransportConstructor;\n\n this.logger.info(`socket,${this._domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], resolvedOptions);\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,${this._domain}: 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 UnknownResponseCtor(event));\n case 4400:\n return reject(new BadRequestCtor(event));\n case 4401:\n return reject(new NotAuthorizedCtor(event));\n case 4403:\n return reject(new ForbiddenCtor(event));\n // case 4404:\n // return reject(new NotFound(event));\n default:\n return reject(new ConnectionErrorCtor(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this._domain}: connected`);\n this._authorize(this.token)\n .then(() => {\n this.logger.info(`socket,${this._domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this._domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this._domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n onclose(event: SocketCloseEvent) {\n this.logger.info(`socket,${this._domain}: closed`, event.code, event.reason);\n\n event = this._fixCloseCode(event);\n this._rejectPendingResponses(new ConnectionErrorCtor(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: SocketMessageEvent<string>) {\n try {\n const data = JSON.parse(event.data) as SocketResponse;\n const processedEvent = {data};\n\n if (data.type === 'async_event') {\n this._acknowledge(processedEvent).catch((error) => {\n this.logger.warn(`socket,${this._domain}: failed to acknowledge async event`, error);\n });\n }\n\n // Match pending request/response promises before emitting the public message event.\n // The message is still emitted afterward for any external listeners that care about it.\n this._handlePendingResponse(data);\n this.emit('message', processedEvent);\n } catch (error) {\n /* istanbul ignore next */\n this.logger.warn(`socket,${this._domain}: 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: string | Record<string, unknown>) {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n if (!socket) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n socket.send(data);\n\n resolve();\n });\n }\n\n /**\n * Sends a request and resolves when the matching response arrives.\n * @param {Object} data\n * @param {Object} [options={}]\n * @param {Function} [options.matchesResponse]\n * @param {Function} [options.createError]\n * @param {Function} [options.createTimeoutError]\n * @param {Function} [options.getStatusCode]\n * @param {Function} [options.getStatusMessage]\n * @param {number} [options.timeout]\n * @returns {Promise<Object>}\n */\n sendRequest(data: SocketResponse, options: SendRequestOptions = {}) {\n if (!isObject(data)) {\n return Promise.reject(new Error('`data` is required'));\n }\n\n const request = {...data};\n const trackingId = request.trackingId || this._createTrackingId();\n const timeout = options.timeout || this.wssResponseTimeout || 10000;\n const matchesResponse =\n options.matchesResponse ||\n ((response) => response?.trackingId === trackingId && response?.type === 'response_event');\n const getStatusCode = options.getStatusCode || ((response) => response?.statusCode);\n const getStatusMessage = options.getStatusMessage || ((response) => response?.statusMessage);\n const createError =\n options.createError ||\n ((response, statusCode, statusMessage) =>\n new ConnectionErrorCtor({\n code: statusCode,\n reason: statusMessage || response?.reason || 'Socket request failed',\n }));\n const createTimeoutError =\n options.createTimeoutError ||\n (() =>\n new ConnectionErrorCtor({\n reason: 'Socket response not received before timeout',\n }));\n\n if (this._pendingResponses.has(trackingId)) {\n return Promise.reject(\n new Error(`socket request already pending for trackingId ${trackingId}`)\n );\n }\n\n request.trackingId = trackingId;\n\n return new Promise<SocketResponse>((resolve, reject) => {\n const timeoutId = safeSetTimeout(() => {\n this._clearPendingResponse(trackingId);\n reject(createTimeoutError(request));\n }, timeout);\n\n this._pendingResponses.set(trackingId, {\n request,\n matchesResponse,\n getStatusCode,\n getStatusMessage,\n createError,\n resolve: (response) => {\n this._clearPendingResponse(trackingId);\n resolve(response);\n },\n reject: (error) => {\n this._clearPendingResponse(trackingId);\n reject(error);\n },\n timeoutId,\n });\n\n this.send(request).catch((error) => {\n this._clearPendingResponse(trackingId);\n reject(error);\n });\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n _acknowledge(event: SocketMessageEvent<SocketResponse>) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.eventId')) {\n return Promise.reject(new Error('`event.data.eventId` is required'));\n }\n\n // Don't try to acknowledge if socket is not in open state\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n return Promise.resolve();\n }\n\n return this.send({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: event.data.trackingId || this._createTrackingId(),\n eventId: event.data.eventId,\n }).catch((error) => {\n if (error.message === 'INVALID_STATE_ERROR') {\n return Promise.resolve();\n }\n throw error;\n });\n }\n\n refresh(token: string | {toString(): string}) {\n if (!token) {\n return Promise.reject(new Error('`token` is required for Socket#refresh()'));\n }\n\n let refreshedToken;\n\n if (typeof token === 'string') {\n refreshedToken = token;\n } else if (token && typeof token.toString === 'function') {\n refreshedToken = token.toString();\n } else {\n refreshedToken = String(token);\n }\n\n return this._authorize(refreshedToken);\n }\n\n /**\n * Sends an auth message up the socket with a refreshed token.\n * @param {string} token\n * @returns {Promise}\n */\n _authorize(token: string) {\n this.logger.info(`socket,${this._domain}: authorizing`);\n\n return this.sendRequest(\n {\n type: MESSAGE_TYPES.AUTH,\n data: {\n token,\n },\n },\n {\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === MESSAGE_TYPES.AUTH &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n new NotAuthorizedCtor({\n code: statusCode,\n reason: statusMessage || 'Mobius auth failed',\n }),\n createTimeoutError: () =>\n new NotAuthorizedCtor({\n reason: 'Mobius auth response not received before timeout',\n }),\n }\n );\n }\n\n /**\n * Creates a unique tracking ID\n * @private\n * @returns {string}\n */\n _createTrackingId() {\n return `${this.trackingId}_${crypto.randomUUID()}`;\n }\n\n /**\n * Clears a pending response entry.\n * @param {string} trackingId\n * @returns {void}\n */\n _clearPendingResponse(trackingId: string) {\n const pendingResponse = this._pendingResponses.get(trackingId);\n\n if (pendingResponse?.timeoutId) {\n clearTimeout(pendingResponse.timeoutId);\n }\n\n this._pendingResponses.delete(trackingId);\n }\n\n /**\n * Rejects all pending responses with the provided error.\n * @param {Error} error\n * @returns {void}\n */\n _rejectPendingResponses(error: unknown) {\n if (!this._pendingResponses.size) {\n return;\n }\n\n Array.from(this._pendingResponses.values()).forEach((pendingResponse) => {\n pendingResponse.reject(error);\n });\n }\n\n /**\n * Handles incoming responses for pending requests.\n * @param {Object} response\n * @returns {boolean}\n */\n _handlePendingResponse(response: SocketResponse) {\n if (!response) {\n return false;\n }\n\n // Pending request correlation currently requires trackingId on the response.\n const pendingResponse = response.trackingId\n ? this._pendingResponses.get(response.trackingId)\n : undefined;\n\n if (!pendingResponse) {\n return false;\n }\n\n if (!pendingResponse.matchesResponse(response, pendingResponse.request)) {\n return false;\n }\n\n const statusCode = pendingResponse.getStatusCode(response);\n const statusMessage = pendingResponse.getStatusMessage(response);\n\n if (statusCode === 440 && response?.subtype !== MESSAGE_TYPES.AUTH) {\n if (typeof this.refreshToken === 'function') {\n Promise.resolve(this.refreshToken(response)).catch((error) => {\n this.logger.warn(`socket,${this._domain}: failed token-expiry re-auth`, error);\n });\n } else {\n this.logger.warn(\n `socket,${this._domain}: refreshToken callback is unavailable for statusCode 440`\n );\n }\n }\n\n if (statusCode === undefined) {\n pendingResponse.reject(\n pendingResponse.createError(\n response,\n statusCode,\n statusMessage || 'Socket response missing status code'\n )\n );\n } else if (statusCode >= 200 && statusCode < 300) {\n pendingResponse.resolve(response);\n } else {\n pendingResponse.reject(pendingResponse.createError(response, statusCode, statusMessage));\n }\n\n return true;\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: SocketCloseEvent) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\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(\n `socket,${this._domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_events","require","_common","_commonTimers","_errors","_constants","ownKeys","e","r","t","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty3","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","constructor","Boolean","prototype","valueOf","call","sockets","_weakMap","Socket","exports","_EventEmitter","_this","_classCallCheck2","domain","pendingResponses","_map","onmessage","bind","onclose","setMaxListeners","_inherits2","_createClass2","key","get","binaryType","bufferedAmount","extensions","protocol","readyState","url","value","close","options","_this2","_promise","resolve","reject","socket","logger","info","concat","SOCKET_READY_STATE","CLOSING","CLOSED","originalCode","code","originalReason","reason","resolvedOptions","_defaults2","Error","closeTimer","safeSetTimeout","error","warn","forceCloseDelay","event","clearTimeout","CONNECTING","closeEvent","open","_this3","URL","hostname","_unused","checkRequired","_keys","_defineProperty2","WebSocket","getWebSocketConstructor","fixCloseCode","UnknownResponse","BadRequest","NotAuthorized","Forbidden","ConnectionError","onopen","authorize","token","then","catch","onerror","set","rejectPendingResponses","emit","removeAllListeners","_this4","data","JSON","parse","processedEvent","type","acknowledge","handlePendingResponse","send","_this5","OPEN","_isObject2","_stringify","sendRequest","_this6","undefined","request","trackingId","createTrackingId","timeout","wssResponseTimeout","matchesResponse","response","getStatusCode","statusCode","getStatusMessage","statusMessage","createError","createTimeoutError","has","timeoutId","clearPendingResponse","_has2","MESSAGE_TYPES","EVENT_ACK","eventId","message","refresh","refreshedToken","toString","String","AUTH","subtype","crypto","randomUUID","pendingResponse","delete","size","_from","values","_this7","refreshToken","toLowerCase","EventEmitter"],"sources":["socket-base.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {EventEmitter} from 'events';\n\n// @ts-expect-error `@webex/common` is still JS-only and does not ship declarations.\nimport {checkRequired} from '@webex/common';\n// @ts-expect-error `@webex/common-timers` is still JS-only and does not ship declarations.\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {defaults, has, isObject} from 'lodash';\n\nimport {BadRequest, ConnectionError, Forbidden, NotAuthorized, UnknownResponse} from '../errors';\nimport {MESSAGE_TYPES, SOCKET_READY_STATE} from './constants';\nimport type {\n SocketCloseEvent,\n SocketLogger,\n SocketMessageEvent,\n PendingResponseEntry,\n SendRequestOptions,\n SocketOpenOptions,\n SocketResponse,\n SocketTransport,\n SocketTransportConstructor,\n} from './types';\n\nconst sockets = new WeakMap<Socket, SocketTransport>();\n\n/**\n * Generalized socket abstraction\n */\nexport default class Socket extends EventEmitter {\n private domain: string;\n\n private pendingResponses: Map<string, PendingResponseEntry>;\n\n forceCloseDelay!: number;\n\n logger!: SocketLogger;\n\n refreshToken?: (response: SocketResponse) => unknown;\n\n token!: string;\n\n trackingId!: string;\n\n wssResponseTimeout?: number;\n\n /**\n * constructor\n * @returns {Socket}\n */\n public constructor() {\n super();\n this.domain = 'unknown-domain';\n this.pendingResponses = new Map();\n this.onmessage = this.onmessage.bind(this);\n this.onclose = this.onclose.bind(this);\n this.setMaxListeners(10);\n }\n\n /**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @returns {string}\n */\n public 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 public 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 public 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 public 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 public 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 public 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 public static getWebSocketConstructor(): unknown {\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 public close(options?: {reason?: string; code?: number}) {\n return new Promise<SocketCloseEvent | void>((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,${this.domain}: closing`);\n\n if (\n socket.readyState === SOCKET_READY_STATE.CLOSING ||\n socket.readyState === SOCKET_READY_STATE.CLOSED\n ) {\n this.logger.info(`socket,${this.domain}: already closed`);\n resolve();\n\n return;\n }\n\n const originalCode = options?.code;\n const originalReason = options?.reason;\n\n const resolvedOptions = defaults(options || {}, {\n code: 1000,\n reason: 'Done',\n }) as {code: number; reason: string};\n\n if (\n resolvedOptions.code &&\n resolvedOptions.code !== 1000 &&\n (resolvedOptions.code < 3000 || resolvedOptions.code > 4999)\n ) {\n reject(new Error('`options.code` must be 1000 or between 3000 and 4999 (inclusive)'));\n\n return;\n }\n\n const closeTimer = safeSetTimeout(() => {\n try {\n this.logger.info(`socket,${this.domain}: no close event received, forcing closure`);\n resolve(\n this.onclose(\n originalCode\n ? {code: originalCode, reason: originalReason || 'Done (unknown)'}\n : {\n code: 1000,\n reason: 'Done (forced)',\n }\n )\n );\n } catch (error) {\n this.logger.warn(`socket,${this.domain}: force-close failed`, error);\n }\n }, this.forceCloseDelay);\n\n socket.onclose = (event) => {\n this.logger.info(`socket,${this.domain}: close event fired`, event.code, event.reason);\n clearTimeout(closeTimer);\n this.onclose(event);\n resolve(event);\n };\n\n // If socket is still connecting, manually trigger close handler with desired code\n // because calling close() on a CONNECTING socket may not preserve custom codes\n if (socket.readyState === SOCKET_READY_STATE.CONNECTING) {\n this.logger.info(\n `socket,${this.domain}: socket still connecting, triggering close manually`\n );\n clearTimeout(closeTimer);\n const closeEvent: SocketCloseEvent = {\n code: resolvedOptions.code,\n reason: resolvedOptions.reason,\n };\n this.onclose(closeEvent);\n resolve(closeEvent);\n try {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n } catch (error) {\n this.logger.info(\n `socket,${this.domain}: error while closing CONNECTING socket, likely due to browser incompatibility with custom close codes`,\n error\n );\n }\n } else {\n socket.close(resolvedOptions.code, resolvedOptions.reason);\n }\n });\n }\n\n /**\n * Opens a WebSocket\n * @param {string} url\n * @param {options} options\n * @param {number} options.forceCloseDelay (required)\n * @param {string} options.token (required)\n * @param {string} options.trackingId (required)\n * @param {Logger} options.logger (required)\n * @returns {Promise}\n */\n public open(url: string, options?: SocketOpenOptions) {\n try {\n this.domain = new URL(url).hostname;\n } catch {\n this.domain = url;\n }\n\n return new Promise<void>((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 const resolvedOptions = (options || {}) as SocketOpenOptions;\n\n checkRequired(['forceCloseDelay', 'token', 'trackingId', 'logger'], resolvedOptions);\n\n Object.keys(resolvedOptions).forEach((key) => {\n Reflect.defineProperty(this, key, {\n enumerable: false,\n value: resolvedOptions[key],\n });\n });\n\n const WebSocket = Socket.getWebSocketConstructor() as SocketTransportConstructor;\n\n this.logger.info(`socket,${this.domain}: creating WebSocket`);\n const socket = new WebSocket(url, [], resolvedOptions);\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,${this.domain}: 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 default:\n return reject(new ConnectionError(event));\n }\n };\n\n socket.onopen = () => {\n this.logger.info(`socket,${this.domain}: connected`);\n this.authorize(this.token)\n .then(() => {\n this.logger.info(`socket,${this.domain}: authorized`);\n socket.onclose = this.onclose;\n resolve();\n })\n .catch(reject);\n };\n\n socket.onerror = (event) => {\n this.logger.warn(`socket,${this.domain}: error event fired`, event);\n };\n\n sockets.set(this, socket);\n this.logger.info(`socket,${this.domain}: waiting for server`);\n });\n }\n\n /**\n * Handles incoming CloseEvents\n * @param {CloseEvent} event\n * @returns {undefined}\n */\n public onclose(event: SocketCloseEvent) {\n this.logger.info(`socket,${this.domain}: closed`, event.code, event.reason);\n\n event = this.fixCloseCode(event);\n this.rejectPendingResponses(new ConnectionError(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 public onmessage(event: SocketMessageEvent<string>) {\n try {\n const data = JSON.parse(event.data) as SocketResponse;\n const processedEvent = {data};\n\n if (data.type === 'async_event') {\n this.acknowledge(processedEvent).catch((error) => {\n this.logger.warn(`socket,${this.domain}: failed to acknowledge async event`, error);\n });\n }\n\n // Match pending request/response promises before emitting the public message event.\n // The message is still emitted afterward for any external listeners that care about it.\n this.handlePendingResponse(data);\n this.emit('message', processedEvent);\n } catch (error) {\n /* istanbul ignore next */\n this.logger.warn(`socket,${this.domain}: 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 public send(data: string | Record<string, unknown>) {\n return new Promise<void>((resolve, reject) => {\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n if (isObject(data)) {\n data = JSON.stringify(data);\n }\n\n const socket = sockets.get(this);\n\n if (!socket) {\n reject(new Error('INVALID_STATE_ERROR'));\n\n return;\n }\n\n socket.send(data);\n\n resolve();\n });\n }\n\n /**\n * Sends a request and resolves when the matching response arrives.\n * @param {Object} data\n * @param {Object} [options={}]\n * @param {Function} [options.matchesResponse]\n * @param {Function} [options.createError]\n * @param {Function} [options.createTimeoutError]\n * @param {Function} [options.getStatusCode]\n * @param {Function} [options.getStatusMessage]\n * @param {number} [options.timeout]\n * @returns {Promise<Object>}\n */\n public sendRequest(data: SocketResponse, options: SendRequestOptions = {}) {\n if (!isObject(data)) {\n return Promise.reject(new Error('`data` is required'));\n }\n\n const request = {...data};\n const trackingId = request.trackingId || this.createTrackingId();\n const timeout = options.timeout || this.wssResponseTimeout || 10000;\n const matchesResponse =\n options.matchesResponse ||\n ((response) => response?.trackingId === trackingId && response?.type === 'response_event');\n const getStatusCode = options.getStatusCode || ((response) => response?.statusCode);\n const getStatusMessage = options.getStatusMessage || ((response) => response?.statusMessage);\n const createError =\n options.createError ||\n ((response, statusCode, statusMessage) =>\n new ConnectionError({\n code: statusCode,\n reason: statusMessage || response?.reason || 'Socket request failed',\n }));\n const createTimeoutError =\n options.createTimeoutError ||\n (() =>\n new ConnectionError({\n reason: 'Socket response not received before timeout',\n }));\n\n if (this.pendingResponses.has(trackingId)) {\n return Promise.reject(\n new Error(`socket request already pending for trackingId ${trackingId}`)\n );\n }\n\n request.trackingId = trackingId;\n\n return new Promise<SocketResponse>((resolve, reject) => {\n const timeoutId = safeSetTimeout(() => {\n this.clearPendingResponse(trackingId);\n reject(createTimeoutError(request));\n }, timeout);\n\n this.pendingResponses.set(trackingId, {\n request,\n matchesResponse,\n getStatusCode,\n getStatusMessage,\n createError,\n resolve: (response) => {\n this.clearPendingResponse(trackingId);\n resolve(response);\n },\n reject: (error) => {\n this.clearPendingResponse(trackingId);\n reject(error);\n },\n timeoutId,\n });\n\n this.send(request).catch((error) => {\n this.clearPendingResponse(trackingId);\n reject(error);\n });\n });\n }\n\n /**\n * Sends an acknowledgment for a specific event\n * @param {MessageEvent} event\n * @returns {Promise}\n */\n private acknowledge(event: SocketMessageEvent<SocketResponse>) {\n if (!event) {\n return Promise.reject(new Error('`event` is required'));\n }\n\n if (!has(event, 'data.eventId')) {\n return Promise.reject(new Error('`event.data.eventId` is required'));\n }\n\n // Don't try to acknowledge if socket is not in open state\n if (this.readyState !== SOCKET_READY_STATE.OPEN) {\n return Promise.resolve();\n }\n\n return this.send({\n type: MESSAGE_TYPES.EVENT_ACK,\n trackingId: event.data.trackingId || this.createTrackingId(),\n eventId: event.data.eventId,\n }).catch((error) => {\n if (error.message === 'INVALID_STATE_ERROR') {\n return Promise.resolve();\n }\n throw error;\n });\n }\n\n public refresh(token: string | {toString(): string}) {\n if (!token) {\n return Promise.reject(new Error('`token` is required for Socket#refresh()'));\n }\n\n let refreshedToken;\n\n if (typeof token === 'string') {\n refreshedToken = token;\n } else if (token && typeof token.toString === 'function') {\n refreshedToken = token.toString();\n } else {\n refreshedToken = String(token);\n }\n\n return this.authorize(refreshedToken);\n }\n\n /**\n * Sends an auth message up the socket with a refreshed token.\n * @param {string} token\n * @returns {Promise}\n */\n private authorize(token: string) {\n this.logger.info(`socket,${this.domain}: authorizing`);\n\n return this.sendRequest(\n {\n type: MESSAGE_TYPES.AUTH,\n data: {\n token,\n },\n },\n {\n matchesResponse: (response, request) =>\n response?.type === 'response_event' &&\n response?.subtype === MESSAGE_TYPES.AUTH &&\n response?.trackingId === request.trackingId,\n getStatusCode: (response) => response?.statusCode,\n getStatusMessage: (response) => response?.statusMessage,\n createError: (response, statusCode, statusMessage) =>\n new NotAuthorized({\n code: statusCode,\n reason: statusMessage || 'Mobius auth failed',\n }),\n createTimeoutError: () =>\n new NotAuthorized({\n reason: 'Mobius auth response not received before timeout',\n }),\n }\n );\n }\n\n /**\n * Creates a unique tracking ID\n * @private\n * @returns {string}\n */\n private createTrackingId() {\n return `${this.trackingId}_${crypto.randomUUID()}`;\n }\n\n /**\n * Clears a pending response entry.\n * @param {string} trackingId\n * @returns {void}\n */\n private clearPendingResponse(trackingId: string) {\n const pendingResponse = this.pendingResponses.get(trackingId);\n\n if (pendingResponse?.timeoutId) {\n clearTimeout(pendingResponse.timeoutId);\n }\n\n this.pendingResponses.delete(trackingId);\n }\n\n /**\n * Rejects all pending responses with the provided error.\n * @param {Error} error\n * @returns {void}\n */\n private rejectPendingResponses(error: unknown) {\n if (!this.pendingResponses.size) {\n return;\n }\n\n Array.from(this.pendingResponses.values()).forEach((pendingResponse) => {\n pendingResponse.reject(error);\n });\n }\n\n /**\n * Handles incoming responses for pending requests.\n * @param {Object} response\n * @returns {boolean}\n */\n private handlePendingResponse(response: SocketResponse) {\n if (!response) {\n return false;\n }\n\n // Pending request correlation currently requires trackingId on the response.\n const pendingResponse = response.trackingId\n ? this.pendingResponses.get(response.trackingId)\n : undefined;\n\n if (!pendingResponse) {\n return false;\n }\n\n if (!pendingResponse.matchesResponse(response, pendingResponse.request)) {\n return false;\n }\n\n const statusCode = pendingResponse.getStatusCode(response);\n const statusMessage = pendingResponse.getStatusMessage(response);\n\n if (statusCode === 440 && response?.subtype !== MESSAGE_TYPES.AUTH) {\n if (typeof this.refreshToken === 'function') {\n Promise.resolve(this.refreshToken(response)).catch((error) => {\n this.logger.warn(`socket,${this.domain}: failed token-expiry re-auth`, error);\n });\n } else {\n this.logger.warn(\n `socket,${this.domain}: refreshToken callback is unavailable for statusCode 440`\n );\n }\n }\n\n if (statusCode === undefined) {\n pendingResponse.reject(\n pendingResponse.createError(\n response,\n statusCode,\n statusMessage || 'Socket response missing status code'\n )\n );\n } else if (statusCode >= 200 && statusCode < 300) {\n pendingResponse.resolve(response);\n } else {\n pendingResponse.reject(pendingResponse.createError(response, statusCode, statusMessage));\n }\n\n return true;\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 private fixCloseCode(event: SocketCloseEvent) {\n if (event.code === 1005 && event.reason) {\n switch (event.reason.toLowerCase()) {\n case 'replaced':\n this.logger.info(\n `socket,${this.domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\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(\n `socket,${this.domain}: fixing CloseEvent code for reason: `,\n event.reason\n );\n event.code = 1008;\n break;\n default:\n // do nothing\n }\n }\n\n return event;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|