@webex/calling 3.12.0-mobius-socket.2 → 3.12.0-mobius-socket.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/dist/CallingClient/CallingClient.js +5 -2
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/registration/register.js +360 -303
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +2 -8
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +41 -106
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.test.js +39 -153
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js +1 -1
- package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
- package/dist/CallingClient/utils/mobiusSocketMapper.js +4 -0
- package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -1
- package/dist/CallingClient/utils/request.js +48 -24
- package/dist/CallingClient/utils/request.js.map +1 -1
- package/dist/common/Utils.js +0 -3
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/types.js +2 -0
- package/dist/common/types.js.map +1 -1
- package/dist/module/CallingClient/CallingClient.js +2 -1
- package/dist/module/CallingClient/registration/register.js +43 -6
- package/dist/module/CallingClient/registration/webWorker.js +42 -61
- package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
- package/dist/module/CallingClient/utils/mobiusSocketMapper.js +5 -0
- package/dist/module/CallingClient/utils/request.js +7 -4
- package/dist/module/common/Utils.js +0 -1
- package/dist/module/common/types.js +2 -0
- package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/register.d.ts +1 -0
- package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
- package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +1 -0
- package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -1
- package/dist/types/CallingClient/utils/request.d.ts +1 -1
- package/dist/types/CallingClient/utils/request.d.ts.map +1 -1
- package/dist/types/common/Utils.d.ts.map +1 -1
- package/dist/types/common/types.d.ts +2 -0
- package/dist/types/common/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,128 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
5
4
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.default = void 0;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
11
|
-
var _uuid = require("uuid");
|
|
12
8
|
var _types = require("../../common/types");
|
|
13
9
|
/* eslint-env worker */
|
|
14
10
|
|
|
15
11
|
var keepaliveTimer;
|
|
12
|
+
var keepAliveRetryCount = 0;
|
|
13
|
+
var keepaliveInFlight = false;
|
|
14
|
+
var clearKeepaliveTimer = function clearKeepaliveTimer() {
|
|
15
|
+
if (keepaliveTimer) {
|
|
16
|
+
clearInterval(keepaliveTimer);
|
|
17
|
+
keepaliveTimer = undefined;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
16
20
|
var messageHandler = function messageHandler(event) {
|
|
17
21
|
var type = event.data.type;
|
|
18
|
-
|
|
19
|
-
// TODO: Use APIRequest to make the request
|
|
20
|
-
var postKeepAlive = /*#__PURE__*/function () {
|
|
21
|
-
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(accessToken, deviceUrl, url) {
|
|
22
|
-
var response;
|
|
23
|
-
return _regenerator.default.wrap(function (_context) {
|
|
24
|
-
while (1) switch (_context.prev = _context.next) {
|
|
25
|
-
case 0:
|
|
26
|
-
_context.next = 1;
|
|
27
|
-
return fetch("".concat(url, "/status"), {
|
|
28
|
-
method: _types.HTTP_METHODS.POST,
|
|
29
|
-
headers: {
|
|
30
|
-
'cisco-device-url': deviceUrl,
|
|
31
|
-
'spark-user-agent': 'webex-calling/beta',
|
|
32
|
-
Authorization: "".concat(accessToken),
|
|
33
|
-
trackingId: "web_worker_".concat((0, _uuid.v4)())
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
case 1:
|
|
37
|
-
response = _context.sent;
|
|
38
|
-
if (response.ok) {
|
|
39
|
-
_context.next = 2;
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
|
-
throw response;
|
|
43
|
-
case 2:
|
|
44
|
-
return _context.abrupt("return", response);
|
|
45
|
-
case 3:
|
|
46
|
-
case "end":
|
|
47
|
-
return _context.stop();
|
|
48
|
-
}
|
|
49
|
-
}, _callee);
|
|
50
|
-
}));
|
|
51
|
-
return function postKeepAlive(_x, _x2, _x3) {
|
|
52
|
-
return _ref.apply(this, arguments);
|
|
53
|
-
};
|
|
54
|
-
}();
|
|
55
22
|
if (type === _types.WorkerMessageType.START_KEEPALIVE) {
|
|
56
|
-
var keepAliveRetryCount = 0;
|
|
57
23
|
var _event$data = event.data,
|
|
58
|
-
accessToken = _event$data.accessToken,
|
|
59
|
-
deviceUrl = _event$data.deviceUrl,
|
|
60
24
|
interval = _event$data.interval,
|
|
61
|
-
retryCountThreshold = _event$data.retryCountThreshold
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
25
|
+
retryCountThreshold = _event$data.retryCountThreshold;
|
|
26
|
+
clearKeepaliveTimer();
|
|
27
|
+
keepAliveRetryCount = 0;
|
|
28
|
+
keepaliveInFlight = false;
|
|
29
|
+
keepaliveTimer = setInterval(function () {
|
|
30
|
+
if (keepAliveRetryCount < retryCountThreshold && !keepaliveInFlight) {
|
|
31
|
+
keepaliveInFlight = true;
|
|
32
|
+
postMessage({
|
|
33
|
+
type: _types.WorkerMessageType.SEND_KEEPALIVE
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}, interval * 1000);
|
|
37
|
+
}
|
|
38
|
+
if (type === _types.WorkerMessageType.KEEPALIVE_RESULT) {
|
|
39
|
+
keepaliveInFlight = false;
|
|
40
|
+
if (event.data.err === undefined) {
|
|
41
|
+
if (keepAliveRetryCount > 0) {
|
|
42
|
+
postMessage({
|
|
43
|
+
type: _types.WorkerMessageType.KEEPALIVE_SUCCESS,
|
|
44
|
+
statusCode: event.data.statusCode
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
keepAliveRetryCount = 0;
|
|
48
|
+
} else {
|
|
49
|
+
keepAliveRetryCount += 1;
|
|
50
|
+
postMessage({
|
|
51
|
+
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
52
|
+
err: event.data.err,
|
|
53
|
+
keepAliveRetryCount: keepAliveRetryCount
|
|
54
|
+
});
|
|
66
55
|
}
|
|
67
|
-
keepaliveTimer = setInterval(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
68
|
-
var res, statusCode, _err$headers, _err$headers2, headers, error, _t;
|
|
69
|
-
return _regenerator.default.wrap(function (_context2) {
|
|
70
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
71
|
-
case 0:
|
|
72
|
-
if (!(keepAliveRetryCount < retryCountThreshold)) {
|
|
73
|
-
_context2.next = 4;
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
_context2.prev = 1;
|
|
77
|
-
_context2.next = 2;
|
|
78
|
-
return postKeepAlive(accessToken, deviceUrl, url);
|
|
79
|
-
case 2:
|
|
80
|
-
res = _context2.sent;
|
|
81
|
-
statusCode = res.status;
|
|
82
|
-
if (keepAliveRetryCount > 0) {
|
|
83
|
-
postMessage({
|
|
84
|
-
type: _types.WorkerMessageType.KEEPALIVE_SUCCESS,
|
|
85
|
-
statusCode: statusCode
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
keepAliveRetryCount = 0;
|
|
89
|
-
_context2.next = 4;
|
|
90
|
-
break;
|
|
91
|
-
case 3:
|
|
92
|
-
_context2.prev = 3;
|
|
93
|
-
_t = _context2["catch"](1);
|
|
94
|
-
headers = {};
|
|
95
|
-
if ((_err$headers = _t.headers) !== null && _err$headers !== void 0 && _err$headers.has('Retry-After')) {
|
|
96
|
-
headers['retry-after'] = _t.headers.get('Retry-After');
|
|
97
|
-
}
|
|
98
|
-
if ((_err$headers2 = _t.headers) !== null && _err$headers2 !== void 0 && _err$headers2.has('Trackingid')) {
|
|
99
|
-
// eslint-disable-next-line dot-notation
|
|
100
|
-
headers['trackingid'] = _t.headers.get('Trackingid');
|
|
101
|
-
}
|
|
102
|
-
error = {
|
|
103
|
-
headers: headers,
|
|
104
|
-
statusCode: _t.status,
|
|
105
|
-
statusText: _t.statusText,
|
|
106
|
-
type: _t.type
|
|
107
|
-
};
|
|
108
|
-
keepAliveRetryCount += 1;
|
|
109
|
-
postMessage({
|
|
110
|
-
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
111
|
-
err: error,
|
|
112
|
-
keepAliveRetryCount: keepAliveRetryCount
|
|
113
|
-
});
|
|
114
|
-
case 4:
|
|
115
|
-
case "end":
|
|
116
|
-
return _context2.stop();
|
|
117
|
-
}
|
|
118
|
-
}, _callee2, null, [[1, 3]]);
|
|
119
|
-
})), interval * 1000);
|
|
120
56
|
}
|
|
121
57
|
if (type === _types.WorkerMessageType.CLEAR_KEEPALIVE) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
58
|
+
clearKeepaliveTimer();
|
|
59
|
+
keepAliveRetryCount = 0;
|
|
60
|
+
keepaliveInFlight = false;
|
|
126
61
|
}
|
|
127
62
|
};
|
|
128
63
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["_types","require","keepaliveTimer","keepAliveRetryCount","keepaliveInFlight","clearKeepaliveTimer","clearInterval","undefined","messageHandler","event","type","data","WorkerMessageType","START_KEEPALIVE","_event$data","interval","retryCountThreshold","setInterval","postMessage","SEND_KEEPALIVE","KEEPALIVE_RESULT","err","KEEPALIVE_SUCCESS","statusCode","KEEPALIVE_FAILURE","CLEAR_KEEPALIVE","self","addEventListener","_default","exports","default"],"sources":["webWorker.ts"],"sourcesContent":["/* eslint-env worker */\nimport {KeepaliveStatusMessage, WorkerMessageType} from '../../common/types';\n\nlet keepaliveTimer: NodeJS.Timeout | undefined;\nlet keepAliveRetryCount = 0;\nlet keepaliveInFlight = false;\n\nconst clearKeepaliveTimer = () => {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n};\n\nconst messageHandler = (event: MessageEvent) => {\n const {type} = event.data;\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n const {interval, retryCountThreshold} = event.data;\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n\n keepaliveTimer = setInterval(() => {\n if (keepAliveRetryCount < retryCountThreshold && !keepaliveInFlight) {\n keepaliveInFlight = true;\n postMessage({\n type: WorkerMessageType.SEND_KEEPALIVE,\n });\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.KEEPALIVE_RESULT) {\n keepaliveInFlight = false;\n\n if (event.data.err === undefined) {\n if (keepAliveRetryCount > 0) {\n postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode: event.data.statusCode,\n } as KeepaliveStatusMessage);\n }\n keepAliveRetryCount = 0;\n } else {\n keepAliveRetryCount += 1;\n postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: event.data.err,\n keepAliveRetryCount,\n } as KeepaliveStatusMessage);\n }\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n }\n};\n\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('message', messageHandler);\nexport default messageHandler;\n"],"mappings":";;;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AADA;;AAGA,IAAIC,cAA0C;AAC9C,IAAIC,mBAAmB,GAAG,CAAC;AAC3B,IAAIC,iBAAiB,GAAG,KAAK;AAE7B,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAA,EAAS;EAChC,IAAIH,cAAc,EAAE;IAClBI,aAAa,CAACJ,cAAc,CAAC;IAC7BA,cAAc,GAAGK,SAAS;EAC5B;AACF,CAAC;AAED,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,KAAmB,EAAK;EAC9C,IAAOC,IAAI,GAAID,KAAK,CAACE,IAAI,CAAlBD,IAAI;EAEX,IAAIA,IAAI,KAAKE,wBAAiB,CAACC,eAAe,EAAE;IAC9C,IAAAC,WAAA,GAAwCL,KAAK,CAACE,IAAI;MAA3CI,QAAQ,GAAAD,WAAA,CAARC,QAAQ;MAAEC,mBAAmB,GAAAF,WAAA,CAAnBE,mBAAmB;IACpCX,mBAAmB,CAAC,CAAC;IACrBF,mBAAmB,GAAG,CAAC;IACvBC,iBAAiB,GAAG,KAAK;IAEzBF,cAAc,GAAGe,WAAW,CAAC,YAAM;MACjC,IAAId,mBAAmB,GAAGa,mBAAmB,IAAI,CAACZ,iBAAiB,EAAE;QACnEA,iBAAiB,GAAG,IAAI;QACxBc,WAAW,CAAC;UACVR,IAAI,EAAEE,wBAAiB,CAACO;QAC1B,CAAC,CAAC;MACJ;IACF,CAAC,EAAEJ,QAAQ,GAAG,IAAI,CAAC;EACrB;EAEA,IAAIL,IAAI,KAAKE,wBAAiB,CAACQ,gBAAgB,EAAE;IAC/ChB,iBAAiB,GAAG,KAAK;IAEzB,IAAIK,KAAK,CAACE,IAAI,CAACU,GAAG,KAAKd,SAAS,EAAE;MAChC,IAAIJ,mBAAmB,GAAG,CAAC,EAAE;QAC3Be,WAAW,CAAC;UACVR,IAAI,EAAEE,wBAAiB,CAACU,iBAAiB;UACzCC,UAAU,EAAEd,KAAK,CAACE,IAAI,CAACY;QACzB,CAA2B,CAAC;MAC9B;MACApB,mBAAmB,GAAG,CAAC;IACzB,CAAC,MAAM;MACLA,mBAAmB,IAAI,CAAC;MACxBe,WAAW,CAAC;QACVR,IAAI,EAAEE,wBAAiB,CAACY,iBAAiB;QACzCH,GAAG,EAAEZ,KAAK,CAACE,IAAI,CAACU,GAAG;QACnBlB,mBAAmB,EAAnBA;MACF,CAA2B,CAAC;IAC9B;EACF;EAEA,IAAIO,IAAI,KAAKE,wBAAiB,CAACa,eAAe,EAAE;IAC9CpB,mBAAmB,CAAC,CAAC;IACrBF,mBAAmB,GAAG,CAAC;IACvBC,iBAAiB,GAAG,KAAK;EAC3B;AACF,CAAC;;AAED;AACAsB,IAAI,CAACC,gBAAgB,CAAC,SAAS,EAAEnB,cAAc,CAAC;AAAC,IAAAoB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAClCtB,cAAc","ignoreList":[]}
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
4
4
|
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
|
|
5
5
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
|
|
6
|
-
var _uuid = require("uuid");
|
|
7
6
|
var _webWorker = _interopRequireDefault(require("./webWorker"));
|
|
8
7
|
var _types = require("../../common/types");
|
|
9
8
|
global.self = global;
|
|
10
|
-
jest.mock('uuid');
|
|
11
9
|
describe('webWorker', function () {
|
|
12
10
|
var postMessageSpy;
|
|
13
11
|
var capturedIntervalCallback;
|
|
@@ -15,8 +13,6 @@ describe('webWorker', function () {
|
|
|
15
13
|
var clearIntervalSpy;
|
|
16
14
|
beforeEach(function () {
|
|
17
15
|
jest.useFakeTimers();
|
|
18
|
-
global.fetch = jest.fn();
|
|
19
|
-
_uuid.v4.mockReturnValue('mock-uuid');
|
|
20
16
|
postMessageSpy = jest.spyOn(global, 'postMessage').mockImplementation(function () {});
|
|
21
17
|
clearIntervalSpy = jest.spyOn(global, 'clearInterval');
|
|
22
18
|
|
|
@@ -37,133 +33,56 @@ describe('webWorker', function () {
|
|
|
37
33
|
jest.clearAllTimers();
|
|
38
34
|
jest.useRealTimers();
|
|
39
35
|
});
|
|
40
|
-
it('should
|
|
41
|
-
var fakeSuccessResponse, failureHeaders, fakeFailureResponse;
|
|
36
|
+
it('should post SEND_KEEPALIVE on a keepalive tick', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
42
37
|
return _regenerator.default.wrap(function (_context) {
|
|
43
38
|
while (1) switch (_context.prev = _context.next) {
|
|
44
39
|
case 0:
|
|
45
|
-
fakeSuccessResponse = {
|
|
46
|
-
ok: true,
|
|
47
|
-
status: 200
|
|
48
|
-
};
|
|
49
|
-
global.fetch.mockResolvedValue(fakeSuccessResponse);
|
|
50
40
|
(0, _webWorker.default)({
|
|
51
41
|
data: {
|
|
52
42
|
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
53
|
-
accessToken: 'dummy',
|
|
54
|
-
deviceUrl: 'dummyDevice',
|
|
55
43
|
interval: 1,
|
|
56
|
-
retryCountThreshold: 3
|
|
57
|
-
url: 'http://example.com'
|
|
44
|
+
retryCountThreshold: 3
|
|
58
45
|
}
|
|
59
46
|
});
|
|
60
|
-
|
|
61
|
-
// Manually invoke the captured interval callback to simulate one tick
|
|
62
47
|
_context.next = 1;
|
|
63
48
|
return capturedIntervalCallback();
|
|
64
49
|
case 1:
|
|
65
|
-
expect(global.fetch.mock.calls.length).toBe(1);
|
|
66
|
-
expect(global.fetch).toHaveBeenCalledWith('http://example.com/status', {
|
|
67
|
-
method: 'POST',
|
|
68
|
-
headers: {
|
|
69
|
-
'cisco-device-url': 'dummyDevice',
|
|
70
|
-
'spark-user-agent': 'webex-calling/beta',
|
|
71
|
-
Authorization: 'dummy',
|
|
72
|
-
trackingId: 'web_worker_mock-uuid'
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
expect(postMessageSpy).not.toHaveBeenCalled();
|
|
76
|
-
failureHeaders = {
|
|
77
|
-
has: function has(key) {
|
|
78
|
-
return key === 'Retry-After' || key === 'Trackingid';
|
|
79
|
-
},
|
|
80
|
-
get: function get(key) {
|
|
81
|
-
return (
|
|
82
|
-
// eslint-disable-next-line no-nested-ternary
|
|
83
|
-
key === 'Retry-After' ? '10' : key === 'Trackingid' ? 'web_worker_mock-uuid' : null
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
fakeFailureResponse = {
|
|
88
|
-
ok: false,
|
|
89
|
-
status: 429,
|
|
90
|
-
statusText: 'Too Many Requests',
|
|
91
|
-
headers: failureHeaders
|
|
92
|
-
};
|
|
93
|
-
global.fetch.mockResolvedValue(fakeFailureResponse);
|
|
94
|
-
(0, _webWorker.default)({
|
|
95
|
-
data: {
|
|
96
|
-
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
97
|
-
accessToken: 'dummy',
|
|
98
|
-
deviceUrl: 'dummyDevice',
|
|
99
|
-
interval: 1,
|
|
100
|
-
retryCountThreshold: 3,
|
|
101
|
-
url: 'http://example.com'
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// Manually invoke the captured interval callback to simulate one tick
|
|
106
|
-
_context.next = 2;
|
|
107
|
-
return capturedIntervalCallback();
|
|
108
|
-
case 2:
|
|
109
|
-
expect(global.fetch.mock.calls.length).toBe(2);
|
|
110
50
|
expect(postMessageSpy).toHaveBeenCalledWith({
|
|
111
|
-
type: _types.WorkerMessageType.
|
|
112
|
-
err: {
|
|
113
|
-
headers: {
|
|
114
|
-
'retry-after': '10',
|
|
115
|
-
trackingid: 'web_worker_mock-uuid'
|
|
116
|
-
},
|
|
117
|
-
statusCode: 429,
|
|
118
|
-
statusText: 'Too Many Requests',
|
|
119
|
-
type: undefined
|
|
120
|
-
},
|
|
121
|
-
keepAliveRetryCount: 1
|
|
51
|
+
type: _types.WorkerMessageType.SEND_KEEPALIVE
|
|
122
52
|
});
|
|
123
|
-
case
|
|
53
|
+
case 2:
|
|
124
54
|
case "end":
|
|
125
55
|
return _context.stop();
|
|
126
56
|
}
|
|
127
57
|
}, _callee);
|
|
128
58
|
})));
|
|
129
|
-
it('should post KEEPALIVE_FAILURE when
|
|
130
|
-
var failureHeaders2;
|
|
59
|
+
it('should post KEEPALIVE_FAILURE when keepalive result is a failure', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
131
60
|
return _regenerator.default.wrap(function (_context2) {
|
|
132
61
|
while (1) switch (_context2.prev = _context2.next) {
|
|
133
62
|
case 0:
|
|
134
|
-
failureHeaders2 = {
|
|
135
|
-
has: function has(key) {
|
|
136
|
-
return key === 'Trackingid';
|
|
137
|
-
},
|
|
138
|
-
get: function get(key) {
|
|
139
|
-
return key === 'Trackingid' ? 'web_worker_mock-uuid' : null;
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
global.fetch.mockResolvedValueOnce({
|
|
143
|
-
ok: false,
|
|
144
|
-
status: 401,
|
|
145
|
-
statusText: 'Unauthorized',
|
|
146
|
-
headers: failureHeaders2
|
|
147
|
-
});
|
|
148
63
|
(0, _webWorker.default)({
|
|
149
64
|
data: {
|
|
150
65
|
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
151
|
-
accessToken: 'dummy',
|
|
152
|
-
deviceUrl: 'dummyDevice',
|
|
153
66
|
interval: 1,
|
|
154
|
-
retryCountThreshold:
|
|
155
|
-
url: 'http://example.com'
|
|
67
|
+
retryCountThreshold: 3
|
|
156
68
|
}
|
|
157
69
|
});
|
|
158
70
|
_context2.next = 1;
|
|
159
71
|
return capturedIntervalCallback();
|
|
160
72
|
case 1:
|
|
73
|
+
(0, _webWorker.default)({
|
|
74
|
+
data: {
|
|
75
|
+
type: _types.WorkerMessageType.KEEPALIVE_RESULT,
|
|
76
|
+
err: {
|
|
77
|
+
statusCode: 401,
|
|
78
|
+
statusText: 'Unauthorized',
|
|
79
|
+
type: undefined
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
161
83
|
expect(postMessageSpy).toHaveBeenCalledWith({
|
|
162
84
|
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
163
85
|
err: {
|
|
164
|
-
headers: {
|
|
165
|
-
trackingid: 'web_worker_mock-uuid'
|
|
166
|
-
},
|
|
167
86
|
statusCode: 401,
|
|
168
87
|
statusText: 'Unauthorized',
|
|
169
88
|
type: undefined
|
|
@@ -176,77 +95,53 @@ describe('webWorker', function () {
|
|
|
176
95
|
}
|
|
177
96
|
}, _callee2);
|
|
178
97
|
})));
|
|
179
|
-
it('should post KEEPALIVE_SUCCESS after a failure when
|
|
180
|
-
var failureHeaders3, mockError;
|
|
98
|
+
it('should post KEEPALIVE_SUCCESS after a failure when keepalive result succeeds', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
181
99
|
return _regenerator.default.wrap(function (_context3) {
|
|
182
100
|
while (1) switch (_context3.prev = _context3.next) {
|
|
183
101
|
case 0:
|
|
184
|
-
// Set fetch so that first tick rejects (failure) and second tick resolves (success)
|
|
185
|
-
failureHeaders3 = {
|
|
186
|
-
has: function has(key) {
|
|
187
|
-
return key === 'Trackingid';
|
|
188
|
-
},
|
|
189
|
-
get: function get(key) {
|
|
190
|
-
return key === 'Trackingid' ? 'web_worker_mock-uuid' : null;
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
mockError = {
|
|
194
|
-
ok: false,
|
|
195
|
-
status: 404,
|
|
196
|
-
statusText: 'Not Found',
|
|
197
|
-
headers: failureHeaders3
|
|
198
|
-
};
|
|
199
|
-
global.fetch.mockResolvedValueOnce(mockError).mockResolvedValueOnce({
|
|
200
|
-
ok: true,
|
|
201
|
-
status: 200
|
|
202
|
-
});
|
|
203
102
|
(0, _webWorker.default)({
|
|
204
103
|
data: {
|
|
205
104
|
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
206
|
-
accessToken: 'dummy',
|
|
207
|
-
deviceUrl: 'dummyDevice',
|
|
208
105
|
interval: 1,
|
|
209
|
-
retryCountThreshold: 3
|
|
210
|
-
url: 'http://example.com'
|
|
106
|
+
retryCountThreshold: 3
|
|
211
107
|
}
|
|
212
108
|
});
|
|
213
|
-
|
|
214
|
-
// First tick: trigger failure
|
|
215
109
|
_context3.next = 1;
|
|
216
110
|
return capturedIntervalCallback();
|
|
217
111
|
case 1:
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
112
|
+
(0, _webWorker.default)({
|
|
113
|
+
data: {
|
|
114
|
+
type: _types.WorkerMessageType.KEEPALIVE_RESULT,
|
|
115
|
+
err: {
|
|
116
|
+
statusCode: 404,
|
|
117
|
+
statusText: 'Not Found'
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
(0, _webWorker.default)({
|
|
122
|
+
data: {
|
|
123
|
+
type: _types.WorkerMessageType.KEEPALIVE_RESULT,
|
|
124
|
+
statusCode: 200
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
expect(postMessageSpy.mock.calls[2][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
|
|
128
|
+
expect(postMessageSpy.mock.calls[2][0].statusCode).toBe(200);
|
|
223
129
|
case 2:
|
|
224
|
-
expect(postMessageSpy.mock.calls[1][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
|
|
225
|
-
expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);
|
|
226
|
-
case 3:
|
|
227
130
|
case "end":
|
|
228
131
|
return _context3.stop();
|
|
229
132
|
}
|
|
230
133
|
}, _callee3);
|
|
231
134
|
})));
|
|
232
135
|
it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
233
|
-
var
|
|
136
|
+
var startEvent;
|
|
234
137
|
return _regenerator.default.wrap(function (_context4) {
|
|
235
138
|
while (1) switch (_context4.prev = _context4.next) {
|
|
236
139
|
case 0:
|
|
237
|
-
fakeSuccessResponse = {
|
|
238
|
-
ok: true,
|
|
239
|
-
status: 200
|
|
240
|
-
};
|
|
241
|
-
global.fetch.mockResolvedValue(fakeSuccessResponse);
|
|
242
140
|
startEvent = {
|
|
243
141
|
data: {
|
|
244
142
|
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
245
|
-
accessToken: 'dummy',
|
|
246
|
-
deviceUrl: 'dummyDevice',
|
|
247
143
|
interval: 1,
|
|
248
|
-
retryCountThreshold: 1
|
|
249
|
-
url: 'http://example.com'
|
|
144
|
+
retryCountThreshold: 1
|
|
250
145
|
}
|
|
251
146
|
};
|
|
252
147
|
(0, _webWorker.default)(startEvent);
|
|
@@ -256,7 +151,6 @@ describe('webWorker', function () {
|
|
|
256
151
|
}
|
|
257
152
|
});
|
|
258
153
|
jest.advanceTimersByTime(3000);
|
|
259
|
-
expect(global.fetch.mock.calls.length).toBeLessThanOrEqual(3);
|
|
260
154
|
expect(clearIntervalSpy).toHaveBeenCalled();
|
|
261
155
|
case 1:
|
|
262
156
|
case "end":
|
|
@@ -265,24 +159,16 @@ describe('webWorker', function () {
|
|
|
265
159
|
}, _callee4);
|
|
266
160
|
})));
|
|
267
161
|
it('improve coverage: should not clear keepalive timer on receiving CLEAR_KEEPALIVE message without keepTimer', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
|
|
268
|
-
var
|
|
162
|
+
var startEvent;
|
|
269
163
|
return _regenerator.default.wrap(function (_context5) {
|
|
270
164
|
while (1) switch (_context5.prev = _context5.next) {
|
|
271
165
|
case 0:
|
|
272
166
|
jest.spyOn(global, 'setInterval').mockReturnValue(undefined);
|
|
273
|
-
fakeSuccessResponse = {
|
|
274
|
-
ok: true,
|
|
275
|
-
status: 200
|
|
276
|
-
};
|
|
277
|
-
global.fetch.mockResolvedValue(fakeSuccessResponse);
|
|
278
167
|
startEvent = {
|
|
279
168
|
data: {
|
|
280
169
|
type: _types.WorkerMessageType.START_KEEPALIVE,
|
|
281
|
-
accessToken: 'dummy',
|
|
282
|
-
deviceUrl: 'dummyDevice',
|
|
283
170
|
interval: 1,
|
|
284
|
-
retryCountThreshold: 1
|
|
285
|
-
url: 'http://example.com'
|
|
171
|
+
retryCountThreshold: 1
|
|
286
172
|
}
|
|
287
173
|
};
|
|
288
174
|
(0, _webWorker.default)(startEvent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","require","_webWorker","_interopRequireDefault","_types","global","self","jest","mock","describe","postMessageSpy","capturedIntervalCallback","capturedIntervalTimer","clearIntervalSpy","beforeEach","useFakeTimers","fetch","fn","uuid","mockReturnValue","spyOn","mockImplementation","callback","interval","dummy","afterEach","clearAllMocks","clearAllTimers","useRealTimers","it","_asyncToGenerator2","default","_regenerator","mark","_callee","fakeSuccessResponse","failureHeaders","fakeFailureResponse","wrap","_context","prev","next","ok","status","mockResolvedValue","messageHandler","data","type","WorkerMessageType","START_KEEPALIVE","accessToken","deviceUrl","retryCountThreshold","url","expect","calls","length","toBe","toHaveBeenCalledWith","method","headers","Authorization","trackingId","not","toHaveBeenCalled","has","key","get","statusText","KEEPALIVE_FAILURE","err","trackingid","statusCode","undefined","keepAliveRetryCount","stop","_callee2","failureHeaders2","_context2","mockResolvedValueOnce","_callee3","failureHeaders3","mockError","_context3","KEEPALIVE_SUCCESS","_callee4","startEvent","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toBeLessThanOrEqual","_callee5","_context5"],"sources":["webWorker.test.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport messageHandler from './webWorker';\nimport {WorkerMessageType} from '../../common/types';\n\n(global as any).self = global;\n\njest.mock('uuid');\n\ndescribe('webWorker', () => {\n let postMessageSpy: jest.SpyInstance;\n let capturedIntervalCallback: any;\n let capturedIntervalTimer: any;\n let clearIntervalSpy: jest.SpyInstance;\n\n beforeEach(() => {\n jest.useFakeTimers();\n global.fetch = jest.fn();\n (uuid as jest.Mock).mockReturnValue('mock-uuid');\n\n postMessageSpy = jest.spyOn(global, 'postMessage').mockImplementation(() => {});\n clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n // Overriding setInterval so that we capture the callback rather than schedule a timer\n jest.spyOn(global, 'setInterval').mockImplementation(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n (callback: any, interval: number): NodeJS.Timeout => {\n capturedIntervalCallback = callback;\n // Create a dummy timer object (could be any non-null value)\n capturedIntervalTimer = {dummy: true};\n\n return capturedIntervalTimer as NodeJS.Timeout;\n }\n );\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n jest.clearAllTimers();\n jest.useRealTimers();\n });\n\n it('should start keepalive lifecycle correctly', async () => {\n const fakeSuccessResponse = {\n ok: true,\n status: 200,\n };\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // Manually invoke the captured interval callback to simulate one tick\n await capturedIntervalCallback();\n\n expect((global.fetch as jest.Mock).mock.calls.length).toBe(1);\n expect(global.fetch).toHaveBeenCalledWith('http://example.com/status', {\n method: 'POST',\n headers: {\n 'cisco-device-url': 'dummyDevice',\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: 'dummy',\n trackingId: 'web_worker_mock-uuid',\n },\n });\n expect(postMessageSpy).not.toHaveBeenCalled();\n\n const failureHeaders = {\n has: (key: string) => key === 'Retry-After' || key === 'Trackingid',\n get: (key: string) =>\n // eslint-disable-next-line no-nested-ternary\n key === 'Retry-After' ? '10' : key === 'Trackingid' ? 'web_worker_mock-uuid' : null,\n };\n const fakeFailureResponse = {\n ok: false,\n status: 429,\n statusText: 'Too Many Requests',\n headers: failureHeaders,\n };\n (global.fetch as jest.Mock).mockResolvedValue(fakeFailureResponse);\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // Manually invoke the captured interval callback to simulate one tick\n await capturedIntervalCallback();\n\n expect((global.fetch as jest.Mock).mock.calls.length).toBe(2);\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {\n headers: {'retry-after': '10', trackingid: 'web_worker_mock-uuid'},\n statusCode: 429,\n statusText: 'Too Many Requests',\n type: undefined,\n },\n keepAliveRetryCount: 1,\n });\n });\n\n it('should post KEEPALIVE_FAILURE when fetch fails', async () => {\n const failureHeaders2 = {\n has: (key: string) => key === 'Trackingid',\n get: (key: string) => (key === 'Trackingid' ? 'web_worker_mock-uuid' : null),\n };\n (global.fetch as jest.Mock).mockResolvedValueOnce({\n ok: false,\n status: 401,\n statusText: 'Unauthorized',\n headers: failureHeaders2,\n });\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n await capturedIntervalCallback();\n\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {\n headers: {trackingid: 'web_worker_mock-uuid'},\n statusCode: 401,\n statusText: 'Unauthorized',\n type: undefined,\n },\n keepAliveRetryCount: 1,\n });\n });\n\n it('should post KEEPALIVE_SUCCESS after a failure when fetch succeeds', async () => {\n // Set fetch so that first tick rejects (failure) and second tick resolves (success)\n const failureHeaders3 = {\n has: (key: string) => key === 'Trackingid',\n get: (key: string) => (key === 'Trackingid' ? 'web_worker_mock-uuid' : null),\n };\n const mockError = {\n ok: false,\n status: 404,\n statusText: 'Not Found',\n headers: failureHeaders3,\n };\n\n (global.fetch as jest.Mock)\n .mockResolvedValueOnce(mockError)\n .mockResolvedValueOnce({ok: true, status: 200});\n\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 3,\n url: 'http://example.com',\n },\n } as MessageEvent);\n\n // First tick: trigger failure\n await capturedIntervalCallback();\n expect(postMessageSpy.mock.calls[0][0].type).toBe(WorkerMessageType.KEEPALIVE_FAILURE);\n\n // Second tick: trigger success.\n await capturedIntervalCallback();\n expect(postMessageSpy.mock.calls[1][0].type).toBe(WorkerMessageType.KEEPALIVE_SUCCESS);\n expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);\n });\n\n it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', async () => {\n const fakeSuccessResponse = {ok: true, status: 200};\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect((global.fetch as jest.Mock).mock.calls.length).toBeLessThanOrEqual(3);\n expect(clearIntervalSpy).toHaveBeenCalled();\n });\n\n it('improve coverage: should not clear keepalive timer on receiving CLEAR_KEEPALIVE message without keepTimer', async () => {\n jest.spyOn(global, 'setInterval').mockReturnValue(undefined);\n const fakeSuccessResponse = {ok: true, status: 200};\n (global.fetch as jest.Mock).mockResolvedValue(fakeSuccessResponse);\n\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n accessToken: 'dummy',\n deviceUrl: 'dummyDevice',\n interval: 1,\n retryCountThreshold: 1,\n url: 'http://example.com',\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect(clearIntervalSpy).not.toHaveBeenCalled();\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_webWorker","_interopRequireDefault","require","_types","global","self","describe","postMessageSpy","capturedIntervalCallback","capturedIntervalTimer","clearIntervalSpy","beforeEach","jest","useFakeTimers","spyOn","mockImplementation","callback","interval","dummy","afterEach","clearAllMocks","clearAllTimers","useRealTimers","it","_asyncToGenerator2","default","_regenerator","mark","_callee","wrap","_context","prev","next","messageHandler","data","type","WorkerMessageType","START_KEEPALIVE","retryCountThreshold","expect","toHaveBeenCalledWith","SEND_KEEPALIVE","stop","_callee2","_context2","KEEPALIVE_RESULT","err","statusCode","statusText","undefined","KEEPALIVE_FAILURE","keepAliveRetryCount","_callee3","_context3","mock","calls","toBe","KEEPALIVE_SUCCESS","_callee4","startEvent","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toHaveBeenCalled","_callee5","_context5","mockReturnValue","not"],"sources":["webWorker.test.ts"],"sourcesContent":["import messageHandler from './webWorker';\nimport {WorkerMessageType} from '../../common/types';\n\n(global as any).self = global;\n\ndescribe('webWorker', () => {\n let postMessageSpy: jest.SpyInstance;\n let capturedIntervalCallback: any;\n let capturedIntervalTimer: any;\n let clearIntervalSpy: jest.SpyInstance;\n\n beforeEach(() => {\n jest.useFakeTimers();\n\n postMessageSpy = jest.spyOn(global, 'postMessage').mockImplementation(() => {});\n clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n // Overriding setInterval so that we capture the callback rather than schedule a timer\n jest.spyOn(global, 'setInterval').mockImplementation(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n (callback: any, interval: number): NodeJS.Timeout => {\n capturedIntervalCallback = callback;\n // Create a dummy timer object (could be any non-null value)\n capturedIntervalTimer = {dummy: true};\n\n return capturedIntervalTimer as NodeJS.Timeout;\n }\n );\n });\n\n afterEach(() => {\n jest.clearAllMocks();\n jest.clearAllTimers();\n jest.useRealTimers();\n });\n\n it('should post SEND_KEEPALIVE on a keepalive tick', async () => {\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n interval: 1,\n retryCountThreshold: 3,\n },\n } as MessageEvent);\n\n await capturedIntervalCallback();\n\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.SEND_KEEPALIVE,\n });\n });\n\n it('should post KEEPALIVE_FAILURE when keepalive result is a failure', async () => {\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n interval: 1,\n retryCountThreshold: 3,\n },\n } as MessageEvent);\n\n await capturedIntervalCallback();\n\n messageHandler({\n data: {\n type: WorkerMessageType.KEEPALIVE_RESULT,\n err: {\n statusCode: 401,\n statusText: 'Unauthorized',\n type: undefined,\n },\n },\n } as MessageEvent);\n\n expect(postMessageSpy).toHaveBeenCalledWith({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: {\n statusCode: 401,\n statusText: 'Unauthorized',\n type: undefined,\n },\n keepAliveRetryCount: 1,\n });\n });\n\n it('should post KEEPALIVE_SUCCESS after a failure when keepalive result succeeds', async () => {\n messageHandler({\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n interval: 1,\n retryCountThreshold: 3,\n },\n } as MessageEvent);\n\n await capturedIntervalCallback();\n messageHandler({\n data: {\n type: WorkerMessageType.KEEPALIVE_RESULT,\n err: {\n statusCode: 404,\n statusText: 'Not Found',\n },\n },\n } as MessageEvent);\n\n messageHandler({\n data: {\n type: WorkerMessageType.KEEPALIVE_RESULT,\n statusCode: 200,\n },\n } as MessageEvent);\n\n expect(postMessageSpy.mock.calls[2][0].type).toBe(WorkerMessageType.KEEPALIVE_SUCCESS);\n expect(postMessageSpy.mock.calls[2][0].statusCode).toBe(200);\n });\n\n it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', async () => {\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n interval: 1,\n retryCountThreshold: 1,\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect(clearIntervalSpy).toHaveBeenCalled();\n });\n\n it('improve coverage: should not clear keepalive timer on receiving CLEAR_KEEPALIVE message without keepTimer', async () => {\n jest.spyOn(global, 'setInterval').mockReturnValue(undefined);\n\n const startEvent = {\n data: {\n type: WorkerMessageType.START_KEEPALIVE,\n interval: 1,\n retryCountThreshold: 1,\n },\n };\n\n messageHandler(startEvent as MessageEvent);\n messageHandler({data: {type: WorkerMessageType.CLEAR_KEEPALIVE}} as MessageEvent);\n\n jest.advanceTimersByTime(3000);\n expect(clearIntervalSpy).not.toHaveBeenCalled();\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,6 @@ exports.default = void 0;
|
|
|
10
10
|
* It can be used to create a Blob URL for the worker instead of loading it from a separate file
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
var webWorkerStr = "/* eslint-env worker */\n\nconst
|
|
13
|
+
var webWorkerStr = "/* eslint-env worker */\n\nconst WorkerMessageType = {\n START_KEEPALIVE: 'START_KEEPALIVE',\n CLEAR_KEEPALIVE: 'CLEAR_KEEPALIVE',\n SEND_KEEPALIVE: 'SEND_KEEPALIVE',\n KEEPALIVE_RESULT: 'KEEPALIVE_RESULT',\n KEEPALIVE_SUCCESS: 'KEEPALIVE_SUCCESS',\n KEEPALIVE_FAILURE: 'KEEPALIVE_FAILURE',\n};\n\nlet keepaliveTimer;\nlet keepAliveRetryCount = 0;\nlet keepaliveInFlight = false;\n\nconst clearKeepaliveTimer = () => {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n};\n\nconst messageHandler = (event) => {\n const {type} = event.data;\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n const {interval, retryCountThreshold} = event.data;\n\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n\n keepaliveTimer = setInterval(() => {\n if (keepAliveRetryCount < retryCountThreshold && !keepaliveInFlight) {\n keepaliveInFlight = true;\n self.postMessage({\n type: WorkerMessageType.SEND_KEEPALIVE,\n });\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.KEEPALIVE_RESULT) {\n keepaliveInFlight = false;\n\n if (event.data.err === undefined) {\n if (keepAliveRetryCount > 0) {\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode: event.data.statusCode,\n });\n }\n\n keepAliveRetryCount = 0;\n } else {\n keepAliveRetryCount += 1;\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: event.data.err,\n keepAliveRetryCount,\n });\n }\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n }\n};\n\nself.addEventListener('message', messageHandler);\n";
|
|
14
14
|
var _default = exports.default = webWorkerStr;
|
|
15
15
|
//# sourceMappingURL=webWorkerStr.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["webWorkerStr","_default","exports","default"],"sources":["webWorkerStr.ts"],"sourcesContent":["/**\n * This file contains the stringified version of the web worker code from webWorker.ts\n * It can be used to create a Blob URL for the worker instead of loading it from a separate file\n */\n\nconst webWorkerStr = `/* eslint-env worker */\n\nconst
|
|
1
|
+
{"version":3,"names":["webWorkerStr","_default","exports","default"],"sources":["webWorkerStr.ts"],"sourcesContent":["/**\n * This file contains the stringified version of the web worker code from webWorker.ts\n * It can be used to create a Blob URL for the worker instead of loading it from a separate file\n */\n\nconst webWorkerStr = `/* eslint-env worker */\n\nconst WorkerMessageType = {\n START_KEEPALIVE: 'START_KEEPALIVE',\n CLEAR_KEEPALIVE: 'CLEAR_KEEPALIVE',\n SEND_KEEPALIVE: 'SEND_KEEPALIVE',\n KEEPALIVE_RESULT: 'KEEPALIVE_RESULT',\n KEEPALIVE_SUCCESS: 'KEEPALIVE_SUCCESS',\n KEEPALIVE_FAILURE: 'KEEPALIVE_FAILURE',\n};\n\nlet keepaliveTimer;\nlet keepAliveRetryCount = 0;\nlet keepaliveInFlight = false;\n\nconst clearKeepaliveTimer = () => {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n};\n\nconst messageHandler = (event) => {\n const {type} = event.data;\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n const {interval, retryCountThreshold} = event.data;\n\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n\n keepaliveTimer = setInterval(() => {\n if (keepAliveRetryCount < retryCountThreshold && !keepaliveInFlight) {\n keepaliveInFlight = true;\n self.postMessage({\n type: WorkerMessageType.SEND_KEEPALIVE,\n });\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.KEEPALIVE_RESULT) {\n keepaliveInFlight = false;\n\n if (event.data.err === undefined) {\n if (keepAliveRetryCount > 0) {\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode: event.data.statusCode,\n });\n }\n\n keepAliveRetryCount = 0;\n } else {\n keepAliveRetryCount += 1;\n self.postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: event.data.err,\n keepAliveRetryCount,\n });\n }\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n clearKeepaliveTimer();\n keepAliveRetryCount = 0;\n keepaliveInFlight = false;\n }\n};\n\nself.addEventListener('message', messageHandler);\n`;\n\nexport default webWorkerStr;\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;;AAEA,IAAMA,YAAY,w0DAwEjB;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaH,YAAY","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.deriveMobiusSocketMessageType = deriveMobiusSocketMessageType;
|
|
8
|
+
exports.isSupplementaryServiceMessageType = void 0;
|
|
8
9
|
var _types = require("../../common/types");
|
|
9
10
|
var _constants = require("./constants");
|
|
10
11
|
/**
|
|
@@ -103,4 +104,7 @@ function deriveMobiusSocketMessageType(uri, httpMethodType) {
|
|
|
103
104
|
}
|
|
104
105
|
return _constants.MOBIUS_SOCKET_MESSAGE_TYPE.UNKNOWN;
|
|
105
106
|
}
|
|
107
|
+
var isSupplementaryServiceMessageType = exports.isSupplementaryServiceMessageType = function isSupplementaryServiceMessageType(type) {
|
|
108
|
+
return [_constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_HOLD, _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_RESUME, _constants.MOBIUS_SOCKET_MESSAGE_TYPE.CALL_TRANSFER].includes(type);
|
|
109
|
+
};
|
|
106
110
|
//# sourceMappingURL=mobiusSocketMapper.js.map
|