@webex/calling 3.10.0-next.13 → 3.10.0-next.14

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.
Files changed (87) hide show
  1. package/dist/CallHistory/CallHistory.js +118 -124
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallHistory/CallHistory.test.js +189 -201
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -1
  5. package/dist/CallSettings/CallSettings.js +17 -18
  6. package/dist/CallSettings/CallSettings.js.map +1 -1
  7. package/dist/CallSettings/CallSettings.test.js +14 -14
  8. package/dist/CallSettings/CallSettings.test.js.map +1 -1
  9. package/dist/CallSettings/UcmBackendConnector.js +19 -20
  10. package/dist/CallSettings/UcmBackendConnector.js.map +1 -1
  11. package/dist/CallSettings/UcmBackendConnector.test.js +32 -32
  12. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -1
  13. package/dist/CallSettings/WxCallBackendConnector.js +135 -137
  14. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  15. package/dist/CallSettings/WxCallBackendConnector.test.js +145 -149
  16. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  17. package/dist/CallingClient/CallingClient.js +198 -201
  18. package/dist/CallingClient/CallingClient.js.map +1 -1
  19. package/dist/CallingClient/CallingClient.test.js +168 -168
  20. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  21. package/dist/CallingClient/calling/CallerId/index.js +7 -8
  22. package/dist/CallingClient/calling/CallerId/index.js.map +1 -1
  23. package/dist/CallingClient/calling/CallerId/index.test.js +24 -24
  24. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -1
  25. package/dist/CallingClient/calling/call.js +364 -366
  26. package/dist/CallingClient/calling/call.js.map +1 -1
  27. package/dist/CallingClient/calling/call.test.js +340 -340
  28. package/dist/CallingClient/calling/call.test.js.map +1 -1
  29. package/dist/CallingClient/calling/callManager.js +15 -18
  30. package/dist/CallingClient/calling/callManager.js.map +1 -1
  31. package/dist/CallingClient/calling/callManager.test.js +113 -113
  32. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  33. package/dist/CallingClient/line/index.js +57 -74
  34. package/dist/CallingClient/line/index.js.map +1 -1
  35. package/dist/CallingClient/line/line.test.js +22 -22
  36. package/dist/CallingClient/line/line.test.js.map +1 -1
  37. package/dist/CallingClient/registration/register.js +293 -300
  38. package/dist/CallingClient/registration/register.js.map +1 -1
  39. package/dist/CallingClient/registration/register.test.js +246 -246
  40. package/dist/CallingClient/registration/register.test.js.map +1 -1
  41. package/dist/CallingClient/registration/webWorker.js +24 -24
  42. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  43. package/dist/CallingClient/registration/webWorker.test.js +20 -20
  44. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  45. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +28 -28
  46. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -1
  47. package/dist/Contacts/ContactsClient.js +250 -253
  48. package/dist/Contacts/ContactsClient.js.map +1 -1
  49. package/dist/Contacts/ContactsClient.test.js +60 -60
  50. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  51. package/dist/Errors/catalog/CallError.js +7 -10
  52. package/dist/Errors/catalog/CallError.js.map +1 -1
  53. package/dist/Errors/catalog/CallingDeviceError.js +6 -9
  54. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
  55. package/dist/Errors/catalog/ExtendedError.js +6 -8
  56. package/dist/Errors/catalog/ExtendedError.js.map +1 -1
  57. package/dist/Errors/catalog/LineError.js +6 -9
  58. package/dist/Errors/catalog/LineError.js.map +1 -1
  59. package/dist/Events/impl/index.js +11 -13
  60. package/dist/Events/impl/index.js.map +1 -1
  61. package/dist/Metrics/index.js +1 -2
  62. package/dist/Metrics/index.js.map +1 -1
  63. package/dist/SDKConnector/index.js +1 -2
  64. package/dist/SDKConnector/index.js.map +1 -1
  65. package/dist/Voicemail/BroadworksBackendConnector.js +126 -127
  66. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -1
  67. package/dist/Voicemail/BroadworksBackendConnector.test.js +98 -98
  68. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -1
  69. package/dist/Voicemail/UcmBackendConnector.js +84 -85
  70. package/dist/Voicemail/UcmBackendConnector.js.map +1 -1
  71. package/dist/Voicemail/UcmBackendConnector.test.js +72 -72
  72. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -1
  73. package/dist/Voicemail/Voicemail.js +58 -61
  74. package/dist/Voicemail/Voicemail.js.map +1 -1
  75. package/dist/Voicemail/Voicemail.test.js +20 -20
  76. package/dist/Voicemail/Voicemail.test.js.map +1 -1
  77. package/dist/Voicemail/WxCallBackendConnector.js +116 -117
  78. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -1
  79. package/dist/Voicemail/WxCallBackendConnector.test.js +140 -140
  80. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -1
  81. package/dist/common/Utils.js +168 -167
  82. package/dist/common/Utils.js.map +1 -1
  83. package/dist/common/Utils.test.js +120 -120
  84. package/dist/common/Utils.test.js.map +1 -1
  85. package/dist/common/testUtil.js +3 -3
  86. package/dist/common/testUtil.js.map +1 -1
  87. 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 _callee$(_context) {
21
+ return _regenerator.default.wrap(function (_context) {
22
22
  while (1) switch (_context.prev = _context.next) {
23
23
  case 0:
24
- _context.next = 2;
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 2:
34
+ case 1:
35
35
  response = _context.sent;
36
36
  if (response.ok) {
37
- _context.next = 5;
37
+ _context.next = 2;
38
38
  break;
39
39
  }
40
40
  throw response;
41
- case 5:
41
+ case 2:
42
42
  return _context.abrupt("return", response);
43
- case 6:
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 _callee2$(_context2) {
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 = 18;
71
+ _context2.next = 4;
72
72
  break;
73
73
  }
74
74
  _context2.prev = 1;
75
- _context2.next = 4;
75
+ _context2.next = 2;
76
76
  return postKeepAlive(accessToken, deviceUrl, url);
77
- case 4:
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 = 18;
87
+ _context2.next = 4;
88
88
  break;
89
- case 10:
90
- _context2.prev = 10;
91
- _context2.t0 = _context2["catch"](1);
89
+ case 3:
90
+ _context2.prev = 3;
91
+ _t = _context2["catch"](1);
92
92
  headers = {};
93
- if ((_err$headers = _context2.t0.headers) !== null && _err$headers !== void 0 && _err$headers.has('Retry-After')) {
94
- headers['retry-after'] = _context2.t0.headers.get('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 = _context2.t0.headers) !== null && _err$headers2 !== void 0 && _err$headers2.has('Trackingid')) {
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'] = _context2.t0.headers.get('Trackingid');
98
+ headers['trackingid'] = _t.headers.get('Trackingid');
99
99
  }
100
100
  error = {
101
101
  headers: headers,
102
- statusCode: _context2.t0.status,
103
- statusText: _context2.t0.statusText,
104
- type: _context2.t0.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 18:
112
+ case 4:
113
113
  case "end":
114
114
  return _context2.stop();
115
115
  }
116
- }, _callee2, null, [[1, 10]]);
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","_callee$","_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","_callee2$","_context2","status","postMessage","KEEPALIVE_SUCCESS","t0","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":";;;;;;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAFA;;AAIA,IAAIE,cAA0C;AAE9C,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,KAAmB,EAAK;EAC9C,IAAOC,IAAI,GAAID,KAAK,CAACE,IAAI,CAAlBD,IAAI;EAEX,IAAME,aAAa;IAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAG,SAAAC,QAAOC,WAAmB,EAAEC,SAAiB,EAAEC,GAAW;MAAA,IAAAC,QAAA;MAAA,OAAAN,YAAA,CAAAD,OAAA,CAAAQ,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAE,IAAA;YAAA,OACvDC,KAAK,IAAAC,MAAA,CAAIR,GAAG,cAAW;cAC5CS,MAAM,EAAEC,mBAAY,CAACC,IAAI;cACzBC,OAAO,EAAE;gBACP,kBAAkB,EAAEb,SAAS;gBAC7B,kBAAkB,EAAE,oBAAoB;gBACxCc,aAAa,KAAAL,MAAA,CAAKV,WAAW,CAAE;gBAC/BgB,UAAU,gBAAAN,MAAA,CAAgB,IAAAO,QAAI,EAAC,CAAC;cAClC;YACF,CAAC,CAAC;UAAA;YARId,QAAQ,GAAAG,QAAA,CAAAY,IAAA;YAAA,IAUTf,QAAQ,CAACgB,EAAE;cAAAb,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,MACRL,QAAQ;UAAA;YAAA,OAAAG,QAAA,CAAAc,MAAA,WAGTjB,QAAQ;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAe,IAAA;QAAA;MAAA,GAAAtB,OAAA;IAAA,CAChB;IAAA,gBAhBKN,aAAaA,CAAA6B,EAAA,EAAAC,GAAA,EAAAC,GAAA;MAAA,OAAA9B,IAAA,CAAA+B,KAAA,OAAAC,SAAA;IAAA;EAAA,GAgBlB;EAED,IAAInC,IAAI,KAAKoC,wBAAiB,CAACC,eAAe,EAAE;IAC9C,IAAIC,mBAAmB,GAAG,CAAC;IAC3B,IAAAC,WAAA,GAAqExC,KAAK,CAACE,IAAI;MAAxEQ,WAAW,GAAA8B,WAAA,CAAX9B,WAAW;MAAEC,SAAS,GAAA6B,WAAA,CAAT7B,SAAS;MAAE8B,QAAQ,GAAAD,WAAA,CAARC,QAAQ;MAAEC,mBAAmB,GAAAF,WAAA,CAAnBE,mBAAmB;MAAE9B,GAAG,GAAA4B,WAAA,CAAH5B,GAAG;IAEjE,IAAId,cAAc,EAAE;MAClB6C,aAAa,CAAC7C,cAAc,CAAC;MAC7BA,cAAc,GAAG8C,SAAS;IAC5B;IAEA9C,cAAc,GAAG+C,WAAW,kBAAAxC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAC,SAAAsC,SAAA;MAAA,IAAAC,GAAA,EAAAC,UAAA,EAAAC,YAAA,EAAAC,aAAA,EAAA1B,OAAA,EAAA2B,KAAA;MAAA,OAAA5C,YAAA,CAAAD,OAAA,CAAAQ,IAAA,UAAAsC,UAAAC,SAAA;QAAA,kBAAAA,SAAA,CAAApC,IAAA,GAAAoC,SAAA,CAAAnC,IAAA;UAAA;YAAA,MACvBqB,mBAAmB,GAAGG,mBAAmB;cAAAW,SAAA,CAAAnC,IAAA;cAAA;YAAA;YAAAmC,SAAA,CAAApC,IAAA;YAAAoC,SAAA,CAAAnC,IAAA;YAAA,OAEvBf,aAAa,CAACO,WAAW,EAAEC,SAAS,EAAEC,GAAG,CAAC;UAAA;YAAtDmC,GAAG,GAAAM,SAAA,CAAAzB,IAAA;YACHoB,UAAU,GAAGD,GAAG,CAACO,MAAM;YAC7B,IAAIf,mBAAmB,GAAG,CAAC,EAAE;cAC3BgB,WAAW,CAAC;gBACVtD,IAAI,EAAEoC,wBAAiB,CAACmB,iBAAiB;gBACzCR,UAAU,EAAVA;cACF,CAA2B,CAAC;YAC9B;YACAT,mBAAmB,GAAG,CAAC;YAACc,SAAA,CAAAnC,IAAA;YAAA;UAAA;YAAAmC,SAAA,CAAApC,IAAA;YAAAoC,SAAA,CAAAI,EAAA,GAAAJ,SAAA;YAElB7B,OAAO,GAAG,CAAC,CAAC;YAClB,KAAAyB,YAAA,GAAII,SAAA,CAAAI,EAAA,CAAIjC,OAAO,cAAAyB,YAAA,eAAXA,YAAA,CAAaS,GAAG,CAAC,aAAa,CAAC,EAAE;cACnClC,OAAO,CAAC,aAAa,CAAC,GAAG6B,SAAA,CAAAI,EAAA,CAAIjC,OAAO,CAACmC,GAAG,CAAC,aAAa,CAAC;YACzD;YAEA,KAAAT,aAAA,GAAIG,SAAA,CAAAI,EAAA,CAAIjC,OAAO,cAAA0B,aAAA,eAAXA,aAAA,CAAaQ,GAAG,CAAC,YAAY,CAAC,EAAE;cAClC;cACAlC,OAAO,CAAC,YAAY,CAAC,GAAG6B,SAAA,CAAAI,EAAA,CAAIjC,OAAO,CAACmC,GAAG,CAAC,YAAY,CAAC;YACvD;YAEMR,KAAK,GAAG;cACZ3B,OAAO,EAAPA,OAAO;cACPwB,UAAU,EAAEK,SAAA,CAAAI,EAAA,CAAIH,MAAM;cACtBM,UAAU,EAAEP,SAAA,CAAAI,EAAA,CAAIG,UAAU;cAC1B3D,IAAI,EAAEoD,SAAA,CAAAI,EAAA,CAAIxD;YACZ,CAAC;YACDsC,mBAAmB,IAAI,CAAC;YACxBgB,WAAW,CAAC;cACVtD,IAAI,EAAEoC,wBAAiB,CAACwB,iBAAiB;cACzCC,GAAG,EAAEX,KAAK;cACVZ,mBAAmB,EAAnBA;YACF,CAA2B,CAAC;UAAC;UAAA;YAAA,OAAAc,SAAA,CAAAtB,IAAA;QAAA;MAAA,GAAAe,QAAA;IAAA,CAGlC,IAAEL,QAAQ,GAAG,IAAI,CAAC;EACrB;EAEA,IAAIxC,IAAI,KAAKoC,wBAAiB,CAAC0B,eAAe,EAAE;IAC9C,IAAIjE,cAAc,EAAE;MAClB6C,aAAa,CAAC7C,cAAc,CAAC;MAC7BA,cAAc,GAAG8C,SAAS;IAC5B;EACF;AACF,CAAC;;AAED;AACAoB,IAAI,CAACC,gBAAgB,CAAC,SAAS,EAAElE,cAAc,CAAC;AAAC,IAAAmE,QAAA,GAAAC,OAAA,CAAA7D,OAAA,GAClCP,cAAc","ignoreList":[]}
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 _callee$(_context) {
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 = 5;
62
+ _context.next = 1;
63
63
  return capturedIntervalCallback();
64
- case 5:
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 = 14;
106
+ _context.next = 2;
107
107
  return capturedIntervalCallback();
108
- case 14:
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 16:
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 _callee2$(_context2) {
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 = 5;
158
+ _context2.next = 1;
159
159
  return capturedIntervalCallback();
160
- case 5:
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 6:
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 _callee3$(_context3) {
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 = 6;
215
+ _context3.next = 1;
216
216
  return capturedIntervalCallback();
217
- case 6:
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 = 9;
221
+ _context3.next = 2;
222
222
  return capturedIntervalCallback();
223
- case 9:
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 11:
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 _callee4$(_context4) {
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 8:
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 _callee5$(_context5) {
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 8:
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":";;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAECI,MAAM,CAASC,IAAI,GAAGD,MAAM;AAE7BE,IAAI,CAACC,IAAI,CAAC,MAAM,CAAC;AAEjBC,QAAQ,CAAC,WAAW,EAAE,YAAM;EAC1B,IAAIC,cAAgC;EACpC,IAAIC,wBAA6B;EACjC,IAAIC,qBAA0B;EAC9B,IAAIC,gBAAkC;EAEtCC,UAAU,CAAC,YAAM;IACfP,IAAI,CAACQ,aAAa,CAAC,CAAC;IACpBV,MAAM,CAACW,KAAK,GAAGT,IAAI,CAACU,EAAE,CAAC,CAAC;IACvBC,QAAI,CAAeC,eAAe,CAAC,WAAW,CAAC;IAEhDT,cAAc,GAAGH,IAAI,CAACa,KAAK,CAACf,MAAM,EAAE,aAAa,CAAC,CAACgB,kBAAkB,CAAC,YAAM,CAAC,CAAC,CAAC;IAC/ER,gBAAgB,GAAGN,IAAI,CAACa,KAAK,CAACf,MAAM,EAAE,eAAe,CAAC;;IAEtD;IACAE,IAAI,CAACa,KAAK,CAACf,MAAM,EAAE,aAAa,CAAC,CAACgB,kBAAkB;IAClD;IACA,UAACC,QAAa,EAAEC,QAAgB,EAAqB;MACnDZ,wBAAwB,GAAGW,QAAQ;MACnC;MACAV,qBAAqB,GAAG;QAACY,KAAK,EAAE;MAAI,CAAC;MAErC,OAAOZ,qBAAqB;IAC9B,CACF,CAAC;EACH,CAAC,CAAC;EAEFa,SAAS,CAAC,YAAM;IACdlB,IAAI,CAACmB,aAAa,CAAC,CAAC;IACpBnB,IAAI,CAACoB,cAAc,CAAC,CAAC;IACrBpB,IAAI,CAACqB,aAAa,CAAC,CAAC;EACtB,CAAC,CAAC;EAEFC,EAAE,CAAC,4CAA4C,mBAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAE,SAAAC,QAAA;IAAA,IAAAC,mBAAA,EAAAC,cAAA,EAAAC,mBAAA;IAAA,OAAAL,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UACzCP,mBAAmB,GAAG;YAC1BQ,EAAE,EAAE,IAAI;YACRC,MAAM,EAAE;UACV,CAAC;UACAvC,MAAM,CAACW,KAAK,CAAe6B,iBAAiB,CAACV,mBAAmB,CAAC;UAElE,IAAAW,kBAAc,EAAC;YACbC,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAiB,CAAC;;UAElB;UAAAd,QAAA,CAAAE,IAAA;UAAA,OACM/B,wBAAwB,CAAC,CAAC;QAAA;UAEhC4C,MAAM,CAAElD,MAAM,CAACW,KAAK,CAAeR,IAAI,CAACgD,KAAK,CAACC,MAAM,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;UAC7DH,MAAM,CAAClD,MAAM,CAACW,KAAK,CAAC,CAAC2C,oBAAoB,CAAC,2BAA2B,EAAE;YACrEC,MAAM,EAAE,MAAM;YACdC,OAAO,EAAE;cACP,kBAAkB,EAAE,aAAa;cACjC,kBAAkB,EAAE,oBAAoB;cACxCC,aAAa,EAAE,OAAO;cACtBC,UAAU,EAAE;YACd;UACF,CAAC,CAAC;UACFR,MAAM,CAAC7C,cAAc,CAAC,CAACsD,GAAG,CAACC,gBAAgB,CAAC,CAAC;UAEvC7B,cAAc,GAAG;YACrB8B,GAAG,EAAE,SAAAA,IAACC,GAAW;cAAA,OAAKA,GAAG,KAAK,aAAa,IAAIA,GAAG,KAAK,YAAY;YAAA;YACnEC,GAAG,EAAE,SAAAA,IAACD,GAAW;cAAA;gBACf;gBACAA,GAAG,KAAK,aAAa,GAAG,IAAI,GAAGA,GAAG,KAAK,YAAY,GAAG,sBAAsB,GAAG;cAAI;YAAA;UACvF,CAAC;UACK9B,mBAAmB,GAAG;YAC1BM,EAAE,EAAE,KAAK;YACTC,MAAM,EAAE,GAAG;YACXyB,UAAU,EAAE,mBAAmB;YAC/BR,OAAO,EAAEzB;UACX,CAAC;UACA/B,MAAM,CAACW,KAAK,CAAe6B,iBAAiB,CAACR,mBAAmB,CAAC;UAElE,IAAAS,kBAAc,EAAC;YACbC,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAiB,CAAC;;UAElB;UAAAd,QAAA,CAAAE,IAAA;UAAA,OACM/B,wBAAwB,CAAC,CAAC;QAAA;UAEhC4C,MAAM,CAAElD,MAAM,CAACW,KAAK,CAAeR,IAAI,CAACgD,KAAK,CAACC,MAAM,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC;UAC7DH,MAAM,CAAC7C,cAAc,CAAC,CAACiD,oBAAoB,CAAC;YAC1CX,IAAI,EAAEC,wBAAiB,CAACqB,iBAAiB;YACzCC,GAAG,EAAE;cACHV,OAAO,EAAE;gBAAC,aAAa,EAAE,IAAI;gBAAEW,UAAU,EAAE;cAAsB,CAAC;cAClEC,UAAU,EAAE,GAAG;cACfJ,UAAU,EAAE,mBAAmB;cAC/BrB,IAAI,EAAE0B;YACR,CAAC;YACDC,mBAAmB,EAAE;UACvB,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAnC,QAAA,CAAAoC,IAAA;MAAA;IAAA,GAAA1C,OAAA;EAAA,CACJ,GAAC;EAEFL,EAAE,CAAC,gDAAgD,mBAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAE,SAAA4C,SAAA;IAAA,IAAAC,eAAA;IAAA,OAAA9C,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAAyC,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAvC,IAAA,GAAAuC,SAAA,CAAAtC,IAAA;QAAA;UAC7CoC,eAAe,GAAG;YACtBZ,GAAG,EAAE,SAAAA,IAACC,GAAW;cAAA,OAAKA,GAAG,KAAK,YAAY;YAAA;YAC1CC,GAAG,EAAE,SAAAA,IAACD,GAAW;cAAA,OAAMA,GAAG,KAAK,YAAY,GAAG,sBAAsB,GAAG,IAAI;YAAA;UAC7E,CAAC;UACA9D,MAAM,CAACW,KAAK,CAAeiE,qBAAqB,CAAC;YAChDtC,EAAE,EAAE,KAAK;YACTC,MAAM,EAAE,GAAG;YACXyB,UAAU,EAAE,cAAc;YAC1BR,OAAO,EAAEiB;UACX,CAAC,CAAC;UAEF,IAAAhC,kBAAc,EAAC;YACbC,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAiB,CAAC;UAAC0B,SAAA,CAAAtC,IAAA;UAAA,OAEb/B,wBAAwB,CAAC,CAAC;QAAA;UAEhC4C,MAAM,CAAC7C,cAAc,CAAC,CAACiD,oBAAoB,CAAC;YAC1CX,IAAI,EAAEC,wBAAiB,CAACqB,iBAAiB;YACzCC,GAAG,EAAE;cACHV,OAAO,EAAE;gBAACW,UAAU,EAAE;cAAsB,CAAC;cAC7CC,UAAU,EAAE,GAAG;cACfJ,UAAU,EAAE,cAAc;cAC1BrB,IAAI,EAAE0B;YACR,CAAC;YACDC,mBAAmB,EAAE;UACvB,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAK,SAAA,CAAAJ,IAAA;MAAA;IAAA,GAAAC,QAAA;EAAA,CACJ,GAAC;EAEFhD,EAAE,CAAC,mEAAmE,mBAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAE,SAAAiD,SAAA;IAAA,IAAAC,eAAA,EAAAC,SAAA;IAAA,OAAApD,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAA+C,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAA7C,IAAA,GAAA6C,SAAA,CAAA5C,IAAA;QAAA;UACtE;UACMyC,eAAe,GAAG;YACtBjB,GAAG,EAAE,SAAAA,IAACC,GAAW;cAAA,OAAKA,GAAG,KAAK,YAAY;YAAA;YAC1CC,GAAG,EAAE,SAAAA,IAACD,GAAW;cAAA,OAAMA,GAAG,KAAK,YAAY,GAAG,sBAAsB,GAAG,IAAI;YAAA;UAC7E,CAAC;UACKiB,SAAS,GAAG;YAChBzC,EAAE,EAAE,KAAK;YACTC,MAAM,EAAE,GAAG;YACXyB,UAAU,EAAE,WAAW;YACvBR,OAAO,EAAEsB;UACX,CAAC;UAEA9E,MAAM,CAACW,KAAK,CACViE,qBAAqB,CAACG,SAAS,CAAC,CAChCH,qBAAqB,CAAC;YAACtC,EAAE,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAG,CAAC,CAAC;UAEjD,IAAAE,kBAAc,EAAC;YACbC,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAiB,CAAC;;UAElB;UAAAgC,SAAA,CAAA5C,IAAA;UAAA,OACM/B,wBAAwB,CAAC,CAAC;QAAA;UAChC4C,MAAM,CAAC7C,cAAc,CAACF,IAAI,CAACgD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACR,IAAI,CAAC,CAACU,IAAI,CAACT,wBAAiB,CAACqB,iBAAiB,CAAC;;UAEtF;UAAAgB,SAAA,CAAA5C,IAAA;UAAA,OACM/B,wBAAwB,CAAC,CAAC;QAAA;UAChC4C,MAAM,CAAC7C,cAAc,CAACF,IAAI,CAACgD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACR,IAAI,CAAC,CAACU,IAAI,CAACT,wBAAiB,CAACsC,iBAAiB,CAAC;UACtFhC,MAAM,CAAC7C,cAAc,CAACF,IAAI,CAACgD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACiB,UAAU,CAAC,CAACf,IAAI,CAAC,GAAG,CAAC;QAAC;QAAA;UAAA,OAAA4B,SAAA,CAAAV,IAAA;MAAA;IAAA,GAAAM,QAAA;EAAA,CAC9D,GAAC;EAEFrD,EAAE,CAAC,mEAAmE,mBAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAE,SAAAuD,SAAA;IAAA,IAAArD,mBAAA,EAAAsD,UAAA;IAAA,OAAAzD,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAAoD,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAlD,IAAA,GAAAkD,SAAA,CAAAjD,IAAA;QAAA;UAChEP,mBAAmB,GAAG;YAACQ,EAAE,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAG,CAAC;UAClDvC,MAAM,CAACW,KAAK,CAAe6B,iBAAiB,CAACV,mBAAmB,CAAC;UAE5DsD,UAAU,GAAG;YACjB1C,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAC;UAED,IAAAR,kBAAc,EAAC2C,UAA0B,CAAC;UAC1C,IAAA3C,kBAAc,EAAC;YAACC,IAAI,EAAE;cAACC,IAAI,EAAEC,wBAAiB,CAAC2C;YAAe;UAAC,CAAiB,CAAC;UAEjFrF,IAAI,CAACsF,mBAAmB,CAAC,IAAI,CAAC;UAC9BtC,MAAM,CAAElD,MAAM,CAACW,KAAK,CAAeR,IAAI,CAACgD,KAAK,CAACC,MAAM,CAAC,CAACqC,mBAAmB,CAAC,CAAC,CAAC;UAC5EvC,MAAM,CAAC1C,gBAAgB,CAAC,CAACoD,gBAAgB,CAAC,CAAC;QAAC;QAAA;UAAA,OAAA0B,SAAA,CAAAf,IAAA;MAAA;IAAA,GAAAY,QAAA;EAAA,CAC7C,GAAC;EAEF3D,EAAE,CAAC,2GAA2G,mBAAAC,kBAAA,CAAAC,OAAA,eAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAE,SAAA8D,SAAA;IAAA,IAAA5D,mBAAA,EAAAsD,UAAA;IAAA,OAAAzD,YAAA,CAAAD,OAAA,CAAAO,IAAA,UAAA0D,UAAAC,SAAA;MAAA,kBAAAA,SAAA,CAAAxD,IAAA,GAAAwD,SAAA,CAAAvD,IAAA;QAAA;UAC9GnC,IAAI,CAACa,KAAK,CAACf,MAAM,EAAE,aAAa,CAAC,CAACc,eAAe,CAACuD,SAAS,CAAC;UACtDvC,mBAAmB,GAAG;YAACQ,EAAE,EAAE,IAAI;YAAEC,MAAM,EAAE;UAAG,CAAC;UAClDvC,MAAM,CAACW,KAAK,CAAe6B,iBAAiB,CAACV,mBAAmB,CAAC;UAE5DsD,UAAU,GAAG;YACjB1C,IAAI,EAAE;cACJC,IAAI,EAAEC,wBAAiB,CAACC,eAAe;cACvCC,WAAW,EAAE,OAAO;cACpBC,SAAS,EAAE,aAAa;cACxB7B,QAAQ,EAAE,CAAC;cACX8B,mBAAmB,EAAE,CAAC;cACtBC,GAAG,EAAE;YACP;UACF,CAAC;UAED,IAAAR,kBAAc,EAAC2C,UAA0B,CAAC;UAC1C,IAAA3C,kBAAc,EAAC;YAACC,IAAI,EAAE;cAACC,IAAI,EAAEC,wBAAiB,CAAC2C;YAAe;UAAC,CAAiB,CAAC;UAEjFrF,IAAI,CAACsF,mBAAmB,CAAC,IAAI,CAAC;UAC9BtC,MAAM,CAAC1C,gBAAgB,CAAC,CAACmD,GAAG,CAACC,gBAAgB,CAAC,CAAC;QAAC;QAAA;UAAA,OAAAgC,SAAA,CAAArB,IAAA;MAAA;IAAA,GAAAmB,QAAA;EAAA,CACjD,GAAC;AACJ,CAAC,CAAC","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 onChange = function onChange() {
37
+ var _onChange = function onChange() {
38
38
  if (pc.iceGatheringState === 'complete' && !done) {
39
39
  done = true;
40
- pc.removeEventListener('icegatheringstatechange', onChange);
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', onChange);
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', onChange);
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 _callee$(_context) {
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 = 7;
88
+ _context.next = 1;
89
89
  return pc1.createDataChannel('warmup');
90
- case 7:
91
- _context.next = 9;
90
+ case 1:
91
+ _context.next = 2;
92
92
  return pc1.addTransceiver('audio');
93
- case 9:
94
- _context.next = 11;
93
+ case 2:
94
+ _context.next = 3;
95
95
  return pc1.createOffer();
96
- case 11:
96
+ case 3:
97
97
  offer = _context.sent;
98
- _context.next = 14;
98
+ _context.next = 4;
99
99
  return pc1.setLocalDescription(offer);
100
- case 14:
101
- _context.next = 16;
100
+ case 4:
101
+ _context.next = 5;
102
102
  return waitForIceComplete(pc1, timeoutMs);
103
- case 16:
104
- _context.next = 18;
103
+ case 5:
104
+ _context.next = 6;
105
105
  return pc2.setRemoteDescription(offer);
106
- case 18:
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 = 21;
112
+ _context.next = 7;
113
113
  return pc2.createAnswer();
114
- case 21:
114
+ case 7:
115
115
  answer = _context.sent;
116
- _context.next = 24;
116
+ _context.next = 8;
117
117
  return pc2.setLocalDescription(answer);
118
- case 24:
119
- _context.next = 26;
118
+ case 8:
119
+ _context.next = 9;
120
120
  return pc1.setRemoteDescription(answer);
121
- case 26:
122
- _context.next = 28;
121
+ case 9:
122
+ _context.next = 10;
123
123
  return waitForIceComplete(pc2, timeoutMs);
124
- case 28:
125
- _context.next = 30;
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 30:
131
+ case 11:
132
132
  pc1.close();
133
133
  pc2.close();
134
- case 32:
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","_callee$","_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":[]}
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":[]}