@webex/calling 3.10.0-next.13 → 3.10.0-next.15
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/CallHistory/CallHistory.js +118 -124
- package/dist/CallHistory/CallHistory.js.map +1 -1
- package/dist/CallHistory/CallHistory.test.js +189 -201
- package/dist/CallHistory/CallHistory.test.js.map +1 -1
- package/dist/CallSettings/CallSettings.js +17 -18
- package/dist/CallSettings/CallSettings.js.map +1 -1
- package/dist/CallSettings/CallSettings.test.js +14 -14
- package/dist/CallSettings/CallSettings.test.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.js +71 -24
- package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
- package/dist/CallSettings/UcmBackendConnector.test.js +136 -47
- package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.js +135 -137
- package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
- package/dist/CallSettings/WxCallBackendConnector.test.js +145 -149
- package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
- package/dist/CallingClient/CallingClient.js +198 -201
- package/dist/CallingClient/CallingClient.js.map +1 -1
- package/dist/CallingClient/CallingClient.test.js +168 -168
- package/dist/CallingClient/CallingClient.test.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.js +7 -8
- package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
- package/dist/CallingClient/calling/CallerId/index.test.js +24 -24
- package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
- package/dist/CallingClient/calling/call.js +364 -366
- package/dist/CallingClient/calling/call.js.map +1 -1
- package/dist/CallingClient/calling/call.test.js +340 -340
- package/dist/CallingClient/calling/call.test.js.map +1 -1
- package/dist/CallingClient/calling/callManager.js +15 -18
- package/dist/CallingClient/calling/callManager.js.map +1 -1
- package/dist/CallingClient/calling/callManager.test.js +113 -113
- package/dist/CallingClient/calling/callManager.test.js.map +1 -1
- package/dist/CallingClient/line/index.js +57 -74
- package/dist/CallingClient/line/index.js.map +1 -1
- package/dist/CallingClient/line/line.test.js +22 -22
- package/dist/CallingClient/line/line.test.js.map +1 -1
- package/dist/CallingClient/registration/register.js +293 -300
- package/dist/CallingClient/registration/register.js.map +1 -1
- package/dist/CallingClient/registration/register.test.js +246 -246
- package/dist/CallingClient/registration/register.test.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.js +24 -24
- package/dist/CallingClient/registration/webWorker.js.map +1 -1
- package/dist/CallingClient/registration/webWorker.test.js +20 -20
- package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +28 -28
- package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -1
- package/dist/Contacts/ContactsClient.js +250 -253
- package/dist/Contacts/ContactsClient.js.map +1 -1
- package/dist/Contacts/ContactsClient.test.js +60 -60
- package/dist/Contacts/ContactsClient.test.js.map +1 -1
- package/dist/Errors/catalog/CallError.js +7 -10
- package/dist/Errors/catalog/CallError.js.map +1 -1
- package/dist/Errors/catalog/CallingDeviceError.js +6 -9
- package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
- package/dist/Errors/catalog/ExtendedError.js +6 -8
- package/dist/Errors/catalog/ExtendedError.js.map +1 -1
- package/dist/Errors/catalog/LineError.js +6 -9
- package/dist/Errors/catalog/LineError.js.map +1 -1
- package/dist/Events/impl/index.js +11 -13
- package/dist/Events/impl/index.js.map +1 -1
- package/dist/Metrics/index.js +1 -2
- package/dist/Metrics/index.js.map +1 -1
- package/dist/SDKConnector/index.js +1 -2
- package/dist/SDKConnector/index.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.js +126 -127
- package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
- package/dist/Voicemail/BroadworksBackendConnector.test.js +98 -98
- package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.js +84 -85
- package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
- package/dist/Voicemail/UcmBackendConnector.test.js +72 -72
- package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
- package/dist/Voicemail/Voicemail.js +58 -61
- package/dist/Voicemail/Voicemail.js.map +1 -1
- package/dist/Voicemail/Voicemail.test.js +20 -20
- package/dist/Voicemail/Voicemail.test.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.js +116 -117
- package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
- package/dist/Voicemail/WxCallBackendConnector.test.js +140 -140
- package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
- package/dist/common/Utils.js +168 -167
- package/dist/common/Utils.js.map +1 -1
- package/dist/common/Utils.test.js +120 -120
- package/dist/common/Utils.test.js.map +1 -1
- package/dist/common/constants.js +3 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/testUtil.js +3 -3
- package/dist/common/testUtil.js.map +1 -1
- package/dist/module/CallSettings/UcmBackendConnector.js +20 -6
- package/dist/module/common/constants.js +2 -0
- package/dist/types/CallSettings/UcmBackendConnector.d.ts +1 -0
- package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
- package/dist/types/common/constants.d.ts +2 -0
- package/dist/types/common/constants.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -18,10 +18,10 @@ var messageHandler = function messageHandler(event) {
|
|
|
18
18
|
var postKeepAlive = /*#__PURE__*/function () {
|
|
19
19
|
var _ref = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(accessToken, deviceUrl, url) {
|
|
20
20
|
var response;
|
|
21
|
-
return _regenerator.default.wrap(function
|
|
21
|
+
return _regenerator.default.wrap(function (_context) {
|
|
22
22
|
while (1) switch (_context.prev = _context.next) {
|
|
23
23
|
case 0:
|
|
24
|
-
_context.next =
|
|
24
|
+
_context.next = 1;
|
|
25
25
|
return fetch("".concat(url, "/status"), {
|
|
26
26
|
method: _types.HTTP_METHODS.POST,
|
|
27
27
|
headers: {
|
|
@@ -31,16 +31,16 @@ var messageHandler = function messageHandler(event) {
|
|
|
31
31
|
trackingId: "web_worker_".concat((0, _uuid.v4)())
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
|
-
case
|
|
34
|
+
case 1:
|
|
35
35
|
response = _context.sent;
|
|
36
36
|
if (response.ok) {
|
|
37
|
-
_context.next =
|
|
37
|
+
_context.next = 2;
|
|
38
38
|
break;
|
|
39
39
|
}
|
|
40
40
|
throw response;
|
|
41
|
-
case
|
|
41
|
+
case 2:
|
|
42
42
|
return _context.abrupt("return", response);
|
|
43
|
-
case
|
|
43
|
+
case 3:
|
|
44
44
|
case "end":
|
|
45
45
|
return _context.stop();
|
|
46
46
|
}
|
|
@@ -63,18 +63,18 @@ var messageHandler = function messageHandler(event) {
|
|
|
63
63
|
keepaliveTimer = undefined;
|
|
64
64
|
}
|
|
65
65
|
keepaliveTimer = setInterval(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
66
|
-
var res, statusCode, _err$headers, _err$headers2, headers, error;
|
|
67
|
-
return _regenerator.default.wrap(function
|
|
66
|
+
var res, statusCode, _err$headers, _err$headers2, headers, error, _t;
|
|
67
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
68
68
|
while (1) switch (_context2.prev = _context2.next) {
|
|
69
69
|
case 0:
|
|
70
70
|
if (!(keepAliveRetryCount < retryCountThreshold)) {
|
|
71
|
-
_context2.next =
|
|
71
|
+
_context2.next = 4;
|
|
72
72
|
break;
|
|
73
73
|
}
|
|
74
74
|
_context2.prev = 1;
|
|
75
|
-
_context2.next =
|
|
75
|
+
_context2.next = 2;
|
|
76
76
|
return postKeepAlive(accessToken, deviceUrl, url);
|
|
77
|
-
case
|
|
77
|
+
case 2:
|
|
78
78
|
res = _context2.sent;
|
|
79
79
|
statusCode = res.status;
|
|
80
80
|
if (keepAliveRetryCount > 0) {
|
|
@@ -84,24 +84,24 @@ var messageHandler = function messageHandler(event) {
|
|
|
84
84
|
});
|
|
85
85
|
}
|
|
86
86
|
keepAliveRetryCount = 0;
|
|
87
|
-
_context2.next =
|
|
87
|
+
_context2.next = 4;
|
|
88
88
|
break;
|
|
89
|
-
case
|
|
90
|
-
_context2.prev =
|
|
91
|
-
|
|
89
|
+
case 3:
|
|
90
|
+
_context2.prev = 3;
|
|
91
|
+
_t = _context2["catch"](1);
|
|
92
92
|
headers = {};
|
|
93
|
-
if ((_err$headers =
|
|
94
|
-
headers['retry-after'] =
|
|
93
|
+
if ((_err$headers = _t.headers) !== null && _err$headers !== void 0 && _err$headers.has('Retry-After')) {
|
|
94
|
+
headers['retry-after'] = _t.headers.get('Retry-After');
|
|
95
95
|
}
|
|
96
|
-
if ((_err$headers2 =
|
|
96
|
+
if ((_err$headers2 = _t.headers) !== null && _err$headers2 !== void 0 && _err$headers2.has('Trackingid')) {
|
|
97
97
|
// eslint-disable-next-line dot-notation
|
|
98
|
-
headers['trackingid'] =
|
|
98
|
+
headers['trackingid'] = _t.headers.get('Trackingid');
|
|
99
99
|
}
|
|
100
100
|
error = {
|
|
101
101
|
headers: headers,
|
|
102
|
-
statusCode:
|
|
103
|
-
statusText:
|
|
104
|
-
type:
|
|
102
|
+
statusCode: _t.status,
|
|
103
|
+
statusText: _t.statusText,
|
|
104
|
+
type: _t.type
|
|
105
105
|
};
|
|
106
106
|
keepAliveRetryCount += 1;
|
|
107
107
|
postMessage({
|
|
@@ -109,11 +109,11 @@ var messageHandler = function messageHandler(event) {
|
|
|
109
109
|
err: error,
|
|
110
110
|
keepAliveRetryCount: keepAliveRetryCount
|
|
111
111
|
});
|
|
112
|
-
case
|
|
112
|
+
case 4:
|
|
113
113
|
case "end":
|
|
114
114
|
return _context2.stop();
|
|
115
115
|
}
|
|
116
|
-
}, _callee2, null, [[1,
|
|
116
|
+
}, _callee2, null, [[1, 3]]);
|
|
117
117
|
})), interval * 1000);
|
|
118
118
|
}
|
|
119
119
|
if (type === _types.WorkerMessageType.CLEAR_KEEPALIVE) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","event","type","data","postKeepAlive","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","accessToken","deviceUrl","url","response","wrap","
|
|
1
|
+
{"version":3,"names":["_uuid","require","_types","keepaliveTimer","messageHandler","event","type","data","postKeepAlive","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","accessToken","deviceUrl","url","response","wrap","_context","prev","next","fetch","concat","method","HTTP_METHODS","POST","headers","Authorization","trackingId","uuid","sent","ok","abrupt","stop","_x","_x2","_x3","apply","arguments","WorkerMessageType","START_KEEPALIVE","keepAliveRetryCount","_event$data","interval","retryCountThreshold","clearInterval","undefined","setInterval","_callee2","res","statusCode","_err$headers","_err$headers2","error","_t","_context2","status","postMessage","KEEPALIVE_SUCCESS","has","get","statusText","KEEPALIVE_FAILURE","err","CLEAR_KEEPALIVE","self","addEventListener","_default","exports"],"sources":["webWorker.ts"],"sourcesContent":["/* eslint-env worker */\nimport {v4 as uuid} from 'uuid';\nimport {HTTP_METHODS, KeepaliveStatusMessage, WorkerMessageType} from '../../common/types';\n\nlet keepaliveTimer: NodeJS.Timeout | undefined;\n\nconst messageHandler = (event: MessageEvent) => {\n const {type} = event.data;\n\n const postKeepAlive = async (accessToken: string, deviceUrl: string, url: string) => {\n const response = await fetch(`${url}/status`, {\n method: HTTP_METHODS.POST,\n headers: {\n 'cisco-device-url': deviceUrl,\n 'spark-user-agent': 'webex-calling/beta',\n Authorization: `${accessToken}`,\n trackingId: `web_worker_${uuid()}`,\n },\n });\n\n if (!response.ok) {\n throw response;\n }\n\n return response;\n };\n\n if (type === WorkerMessageType.START_KEEPALIVE) {\n let keepAliveRetryCount = 0;\n const {accessToken, deviceUrl, interval, retryCountThreshold, url} = event.data;\n\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n\n keepaliveTimer = setInterval(async () => {\n if (keepAliveRetryCount < retryCountThreshold) {\n try {\n const res = await postKeepAlive(accessToken, deviceUrl, url);\n const statusCode = res.status;\n if (keepAliveRetryCount > 0) {\n postMessage({\n type: WorkerMessageType.KEEPALIVE_SUCCESS,\n statusCode,\n } as KeepaliveStatusMessage);\n }\n keepAliveRetryCount = 0;\n } catch (err: any) {\n const headers = {} as Record<string, string>;\n if (err.headers?.has('Retry-After')) {\n headers['retry-after'] = err.headers.get('Retry-After');\n }\n\n if (err.headers?.has('Trackingid')) {\n // eslint-disable-next-line dot-notation\n headers['trackingid'] = err.headers.get('Trackingid');\n }\n\n const error = {\n headers,\n statusCode: err.status,\n statusText: err.statusText,\n type: err.type,\n };\n keepAliveRetryCount += 1;\n postMessage({\n type: WorkerMessageType.KEEPALIVE_FAILURE,\n err: error,\n keepAliveRetryCount,\n } as KeepaliveStatusMessage);\n }\n }\n }, interval * 1000);\n }\n\n if (type === WorkerMessageType.CLEAR_KEEPALIVE) {\n if (keepaliveTimer) {\n clearInterval(keepaliveTimer);\n keepaliveTimer = undefined;\n }\n }\n};\n\n// eslint-disable-next-line no-restricted-globals\nself.addEventListener('message', messageHandler);\nexport default messageHandler;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -39,7 +39,7 @@ describe('webWorker', function () {
|
|
|
39
39
|
});
|
|
40
40
|
it('should start keepalive lifecycle correctly', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
|
|
41
41
|
var fakeSuccessResponse, failureHeaders, fakeFailureResponse;
|
|
42
|
-
return _regenerator.default.wrap(function
|
|
42
|
+
return _regenerator.default.wrap(function (_context) {
|
|
43
43
|
while (1) switch (_context.prev = _context.next) {
|
|
44
44
|
case 0:
|
|
45
45
|
fakeSuccessResponse = {
|
|
@@ -59,9 +59,9 @@ describe('webWorker', function () {
|
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
// Manually invoke the captured interval callback to simulate one tick
|
|
62
|
-
_context.next =
|
|
62
|
+
_context.next = 1;
|
|
63
63
|
return capturedIntervalCallback();
|
|
64
|
-
case
|
|
64
|
+
case 1:
|
|
65
65
|
expect(global.fetch.mock.calls.length).toBe(1);
|
|
66
66
|
expect(global.fetch).toHaveBeenCalledWith('http://example.com/status', {
|
|
67
67
|
method: 'POST',
|
|
@@ -103,9 +103,9 @@ describe('webWorker', function () {
|
|
|
103
103
|
});
|
|
104
104
|
|
|
105
105
|
// Manually invoke the captured interval callback to simulate one tick
|
|
106
|
-
_context.next =
|
|
106
|
+
_context.next = 2;
|
|
107
107
|
return capturedIntervalCallback();
|
|
108
|
-
case
|
|
108
|
+
case 2:
|
|
109
109
|
expect(global.fetch.mock.calls.length).toBe(2);
|
|
110
110
|
expect(postMessageSpy).toHaveBeenCalledWith({
|
|
111
111
|
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
@@ -120,7 +120,7 @@ describe('webWorker', function () {
|
|
|
120
120
|
},
|
|
121
121
|
keepAliveRetryCount: 1
|
|
122
122
|
});
|
|
123
|
-
case
|
|
123
|
+
case 3:
|
|
124
124
|
case "end":
|
|
125
125
|
return _context.stop();
|
|
126
126
|
}
|
|
@@ -128,7 +128,7 @@ describe('webWorker', function () {
|
|
|
128
128
|
})));
|
|
129
129
|
it('should post KEEPALIVE_FAILURE when fetch fails', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2() {
|
|
130
130
|
var failureHeaders2;
|
|
131
|
-
return _regenerator.default.wrap(function
|
|
131
|
+
return _regenerator.default.wrap(function (_context2) {
|
|
132
132
|
while (1) switch (_context2.prev = _context2.next) {
|
|
133
133
|
case 0:
|
|
134
134
|
failureHeaders2 = {
|
|
@@ -155,9 +155,9 @@ describe('webWorker', function () {
|
|
|
155
155
|
url: 'http://example.com'
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
|
-
_context2.next =
|
|
158
|
+
_context2.next = 1;
|
|
159
159
|
return capturedIntervalCallback();
|
|
160
|
-
case
|
|
160
|
+
case 1:
|
|
161
161
|
expect(postMessageSpy).toHaveBeenCalledWith({
|
|
162
162
|
type: _types.WorkerMessageType.KEEPALIVE_FAILURE,
|
|
163
163
|
err: {
|
|
@@ -170,7 +170,7 @@ describe('webWorker', function () {
|
|
|
170
170
|
},
|
|
171
171
|
keepAliveRetryCount: 1
|
|
172
172
|
});
|
|
173
|
-
case
|
|
173
|
+
case 2:
|
|
174
174
|
case "end":
|
|
175
175
|
return _context2.stop();
|
|
176
176
|
}
|
|
@@ -178,7 +178,7 @@ describe('webWorker', function () {
|
|
|
178
178
|
})));
|
|
179
179
|
it('should post KEEPALIVE_SUCCESS after a failure when fetch succeeds', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3() {
|
|
180
180
|
var failureHeaders3, mockError;
|
|
181
|
-
return _regenerator.default.wrap(function
|
|
181
|
+
return _regenerator.default.wrap(function (_context3) {
|
|
182
182
|
while (1) switch (_context3.prev = _context3.next) {
|
|
183
183
|
case 0:
|
|
184
184
|
// Set fetch so that first tick rejects (failure) and second tick resolves (success)
|
|
@@ -212,18 +212,18 @@ describe('webWorker', function () {
|
|
|
212
212
|
});
|
|
213
213
|
|
|
214
214
|
// First tick: trigger failure
|
|
215
|
-
_context3.next =
|
|
215
|
+
_context3.next = 1;
|
|
216
216
|
return capturedIntervalCallback();
|
|
217
|
-
case
|
|
217
|
+
case 1:
|
|
218
218
|
expect(postMessageSpy.mock.calls[0][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_FAILURE);
|
|
219
219
|
|
|
220
220
|
// Second tick: trigger success.
|
|
221
|
-
_context3.next =
|
|
221
|
+
_context3.next = 2;
|
|
222
222
|
return capturedIntervalCallback();
|
|
223
|
-
case
|
|
223
|
+
case 2:
|
|
224
224
|
expect(postMessageSpy.mock.calls[1][0].type).toBe(_types.WorkerMessageType.KEEPALIVE_SUCCESS);
|
|
225
225
|
expect(postMessageSpy.mock.calls[1][0].statusCode).toBe(200);
|
|
226
|
-
case
|
|
226
|
+
case 3:
|
|
227
227
|
case "end":
|
|
228
228
|
return _context3.stop();
|
|
229
229
|
}
|
|
@@ -231,7 +231,7 @@ describe('webWorker', function () {
|
|
|
231
231
|
})));
|
|
232
232
|
it('should clear keepalive timer on receiving CLEAR_KEEPALIVE message', /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
|
|
233
233
|
var fakeSuccessResponse, startEvent;
|
|
234
|
-
return _regenerator.default.wrap(function
|
|
234
|
+
return _regenerator.default.wrap(function (_context4) {
|
|
235
235
|
while (1) switch (_context4.prev = _context4.next) {
|
|
236
236
|
case 0:
|
|
237
237
|
fakeSuccessResponse = {
|
|
@@ -258,7 +258,7 @@ describe('webWorker', function () {
|
|
|
258
258
|
jest.advanceTimersByTime(3000);
|
|
259
259
|
expect(global.fetch.mock.calls.length).toBeLessThanOrEqual(3);
|
|
260
260
|
expect(clearIntervalSpy).toHaveBeenCalled();
|
|
261
|
-
case
|
|
261
|
+
case 1:
|
|
262
262
|
case "end":
|
|
263
263
|
return _context4.stop();
|
|
264
264
|
}
|
|
@@ -266,7 +266,7 @@ describe('webWorker', function () {
|
|
|
266
266
|
})));
|
|
267
267
|
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
268
|
var fakeSuccessResponse, startEvent;
|
|
269
|
-
return _regenerator.default.wrap(function
|
|
269
|
+
return _regenerator.default.wrap(function (_context5) {
|
|
270
270
|
while (1) switch (_context5.prev = _context5.next) {
|
|
271
271
|
case 0:
|
|
272
272
|
jest.spyOn(global, 'setInterval').mockReturnValue(undefined);
|
|
@@ -293,7 +293,7 @@ describe('webWorker', function () {
|
|
|
293
293
|
});
|
|
294
294
|
jest.advanceTimersByTime(3000);
|
|
295
295
|
expect(clearIntervalSpy).not.toHaveBeenCalled();
|
|
296
|
-
case
|
|
296
|
+
case 1:
|
|
297
297
|
case "end":
|
|
298
298
|
return _context5.stop();
|
|
299
299
|
}
|
|
@@ -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","_callee$","_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","_callee2$","_context2","mockResolvedValueOnce","_callee3","failureHeaders3","mockError","_callee3$","_context3","KEEPALIVE_SUCCESS","_callee4","startEvent","_callee4$","_context4","CLEAR_KEEPALIVE","advanceTimersByTime","toBeLessThanOrEqual","_callee5","_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":["_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":[]}
|
|
@@ -34,23 +34,23 @@ function waitForIceComplete(pc, timeoutMs) {
|
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
var done = false;
|
|
37
|
-
var
|
|
37
|
+
var _onChange = function onChange() {
|
|
38
38
|
if (pc.iceGatheringState === 'complete' && !done) {
|
|
39
39
|
done = true;
|
|
40
|
-
pc.removeEventListener('icegatheringstatechange',
|
|
40
|
+
pc.removeEventListener('icegatheringstatechange', _onChange);
|
|
41
41
|
resolve({
|
|
42
42
|
ok: true,
|
|
43
43
|
reached: 'event'
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
pc.addEventListener('icegatheringstatechange',
|
|
47
|
+
pc.addEventListener('icegatheringstatechange', _onChange);
|
|
48
48
|
|
|
49
49
|
// timeout fallback
|
|
50
50
|
setTimeout(function () {
|
|
51
51
|
if (done) return;
|
|
52
52
|
done = true;
|
|
53
|
-
pc.removeEventListener('icegatheringstatechange',
|
|
53
|
+
pc.removeEventListener('icegatheringstatechange', _onChange);
|
|
54
54
|
resolve({
|
|
55
55
|
ok: pc.iceGatheringState === 'complete',
|
|
56
56
|
reached: 'timeout'
|
|
@@ -64,7 +64,7 @@ function windowsChromiumIceWarmup(_x) {
|
|
|
64
64
|
function _windowsChromiumIceWarmup() {
|
|
65
65
|
_windowsChromiumIceWarmup = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(_ref) {
|
|
66
66
|
var _ref$iceServers, iceServers, _ref$timeoutMs, timeoutMs, pc1, pc2, candidates, offer, answer;
|
|
67
|
-
return _regenerator.default.wrap(function
|
|
67
|
+
return _regenerator.default.wrap(function (_context) {
|
|
68
68
|
while (1) switch (_context.prev = _context.next) {
|
|
69
69
|
case 0:
|
|
70
70
|
_ref$iceServers = _ref.iceServers, iceServers = _ref$iceServers === void 0 ? [] : _ref$iceServers, _ref$timeoutMs = _ref.timeoutMs, timeoutMs = _ref$timeoutMs === void 0 ? 1000 : _ref$timeoutMs;
|
|
@@ -85,53 +85,53 @@ function _windowsChromiumIceWarmup() {
|
|
|
85
85
|
candidates.pc1.push(e.candidate);
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
|
-
_context.next =
|
|
88
|
+
_context.next = 1;
|
|
89
89
|
return pc1.createDataChannel('warmup');
|
|
90
|
-
case
|
|
91
|
-
_context.next =
|
|
90
|
+
case 1:
|
|
91
|
+
_context.next = 2;
|
|
92
92
|
return pc1.addTransceiver('audio');
|
|
93
|
-
case
|
|
94
|
-
_context.next =
|
|
93
|
+
case 2:
|
|
94
|
+
_context.next = 3;
|
|
95
95
|
return pc1.createOffer();
|
|
96
|
-
case
|
|
96
|
+
case 3:
|
|
97
97
|
offer = _context.sent;
|
|
98
|
-
_context.next =
|
|
98
|
+
_context.next = 4;
|
|
99
99
|
return pc1.setLocalDescription(offer);
|
|
100
|
-
case
|
|
101
|
-
_context.next =
|
|
100
|
+
case 4:
|
|
101
|
+
_context.next = 5;
|
|
102
102
|
return waitForIceComplete(pc1, timeoutMs);
|
|
103
|
-
case
|
|
104
|
-
_context.next =
|
|
103
|
+
case 5:
|
|
104
|
+
_context.next = 6;
|
|
105
105
|
return pc2.setRemoteDescription(offer);
|
|
106
|
-
case
|
|
106
|
+
case 6:
|
|
107
107
|
pc2.onicecandidate = function (e) {
|
|
108
108
|
if (e.candidate && e.candidate.type !== 'host') {
|
|
109
109
|
candidates.pc2.push(e.candidate);
|
|
110
110
|
}
|
|
111
111
|
};
|
|
112
|
-
_context.next =
|
|
112
|
+
_context.next = 7;
|
|
113
113
|
return pc2.createAnswer();
|
|
114
|
-
case
|
|
114
|
+
case 7:
|
|
115
115
|
answer = _context.sent;
|
|
116
|
-
_context.next =
|
|
116
|
+
_context.next = 8;
|
|
117
117
|
return pc2.setLocalDescription(answer);
|
|
118
|
-
case
|
|
119
|
-
_context.next =
|
|
118
|
+
case 8:
|
|
119
|
+
_context.next = 9;
|
|
120
120
|
return pc1.setRemoteDescription(answer);
|
|
121
|
-
case
|
|
122
|
-
_context.next =
|
|
121
|
+
case 9:
|
|
122
|
+
_context.next = 10;
|
|
123
123
|
return waitForIceComplete(pc2, timeoutMs);
|
|
124
|
-
case
|
|
125
|
-
_context.next =
|
|
124
|
+
case 10:
|
|
125
|
+
_context.next = 11;
|
|
126
126
|
return _promise.default.all([].concat((0, _toConsumableArray2.default)(candidates.pc1.map(function (candidate) {
|
|
127
127
|
return pc2.addIceCandidate(candidate).catch(console.error);
|
|
128
128
|
})), (0, _toConsumableArray2.default)(candidates.pc2.map(function (candidate) {
|
|
129
129
|
return pc1.addIceCandidate(candidate).catch(console.error);
|
|
130
130
|
}))));
|
|
131
|
-
case
|
|
131
|
+
case 11:
|
|
132
132
|
pc1.close();
|
|
133
133
|
pc2.close();
|
|
134
|
-
case
|
|
134
|
+
case 12:
|
|
135
135
|
case "end":
|
|
136
136
|
return _context.stop();
|
|
137
137
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["waitForIceComplete","pc","timeoutMs","_promise","default","resolve","ok","reason","iceGatheringState","reached","done","onChange","removeEventListener","addEventListener","setTimeout","windowsChromiumIceWarmup","_x","_windowsChromiumIceWarmup","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","_ref","_ref$iceServers","iceServers","_ref$timeoutMs","pc1","pc2","candidates","offer","answer","wrap","
|
|
1
|
+
{"version":3,"names":["waitForIceComplete","pc","timeoutMs","_promise","default","resolve","ok","reason","iceGatheringState","reached","done","onChange","removeEventListener","addEventListener","setTimeout","windowsChromiumIceWarmup","_x","_windowsChromiumIceWarmup","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","_ref","_ref$iceServers","iceServers","_ref$timeoutMs","pc1","pc2","candidates","offer","answer","wrap","_context","prev","next","RTCPeerConnection","iceCandidatePoolSize","onicecandidate","e","candidate","type","push","createDataChannel","addTransceiver","createOffer","sent","setLocalDescription","setRemoteDescription","createAnswer","all","concat","_toConsumableArray2","map","addIceCandidate","catch","console","error","close","stop"],"sources":["windowsChromiumIceWarmupUtils.ts"],"sourcesContent":["// This file contains a workaround for a known issue in Windows Chromium-based browsers\n// See: https://issues.chromium.org/issues/332933530\n// There is a rare condition where WebRTC doesn't work on the first try due to ICE gathering issues.\n// This function attempts to \"warm up\" the ICE gathering process by creating a pair of peer connections\n// and forcing ICE candidate gathering and exchange before the actual call setup.\n// We need to try establishing the connection through the srflx candidates since the host candidate won't work\n// This is intended to be called once at the start of the calling SDK to reduce the likelihood of ICE issues later.\nfunction waitForIceComplete(pc: RTCPeerConnection, timeoutMs: number) {\n return new Promise((resolve) => {\n if (!pc) {\n resolve({ok: false, reason: 'no-pc'});\n\n return;\n }\n if (pc.iceGatheringState === 'complete') {\n resolve({ok: true, reached: 'already'});\n\n return;\n }\n\n let done = false;\n const onChange = () => {\n if (pc.iceGatheringState === 'complete' && !done) {\n done = true;\n pc.removeEventListener('icegatheringstatechange', onChange);\n resolve({ok: true, reached: 'event'});\n }\n };\n pc.addEventListener('icegatheringstatechange', onChange);\n\n // timeout fallback\n setTimeout(() => {\n if (done) return;\n done = true;\n pc.removeEventListener('icegatheringstatechange', onChange);\n resolve({ok: pc.iceGatheringState === 'complete', reached: 'timeout'});\n }, timeoutMs);\n });\n}\n\nexport default async function windowsChromiumIceWarmup({iceServers = [], timeoutMs = 1000}) {\n const pc1 = new RTCPeerConnection({iceServers, iceCandidatePoolSize: 1});\n const pc2 = new RTCPeerConnection({iceServers, iceCandidatePoolSize: 1});\n\n const candidates: {pc1: RTCIceCandidate[]; pc2: RTCIceCandidate[]} = {pc1: [], pc2: []};\n pc1.onicecandidate = (e) => {\n if (e.candidate && e.candidate.type !== 'host') {\n candidates.pc1.push(e.candidate);\n }\n };\n\n await pc1.createDataChannel('warmup');\n await pc1.addTransceiver('audio');\n\n const offer = await pc1.createOffer();\n await pc1.setLocalDescription(offer);\n\n await waitForIceComplete(pc1, timeoutMs);\n\n await pc2.setRemoteDescription(offer);\n pc2.onicecandidate = (e) => {\n if (e.candidate && e.candidate.type !== 'host') {\n candidates.pc2.push(e.candidate);\n }\n };\n\n const answer = await pc2.createAnswer();\n await pc2.setLocalDescription(answer);\n await pc1.setRemoteDescription(answer);\n\n await waitForIceComplete(pc2, timeoutMs);\n\n // Add ice candidates that were gathered\n await Promise.all([\n ...candidates.pc1.map((candidate) => pc2.addIceCandidate(candidate).catch(console.error)),\n ...candidates.pc2.map((candidate) => pc1.addIceCandidate(candidate).catch(console.error)),\n ]);\n\n pc1.close();\n pc2.close();\n}\n"],"mappings":"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","ignoreList":[]}
|