@webex/calling 3.8.1 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/CallSettings/WxCallBackendConnector.js +2 -2
  2. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -1
  3. package/dist/CallSettings/WxCallBackendConnector.test.js +94 -27
  4. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -1
  5. package/dist/CallSettings/types.js.map +1 -1
  6. package/dist/CallingClient/CallingClient.js +160 -105
  7. package/dist/CallingClient/CallingClient.js.map +1 -1
  8. package/dist/CallingClient/CallingClient.test.js +168 -102
  9. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  10. package/dist/CallingClient/constants.js +3 -3
  11. package/dist/CallingClient/constants.js.map +1 -1
  12. package/dist/CallingClient/line/line.test.js +4 -10
  13. package/dist/CallingClient/line/line.test.js.map +1 -1
  14. package/dist/CallingClient/registration/register.js +486 -380
  15. package/dist/CallingClient/registration/register.js.map +1 -1
  16. package/dist/CallingClient/registration/register.test.js +441 -309
  17. package/dist/CallingClient/registration/register.test.js.map +1 -1
  18. package/dist/CallingClient/registration/types.js.map +1 -1
  19. package/dist/CallingClient/registration/webWorker.js +115 -0
  20. package/dist/CallingClient/registration/webWorker.js.map +1 -0
  21. package/dist/CallingClient/registration/webWorker.test.js +256 -0
  22. package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
  23. package/dist/CallingClient/registration/webWorkerStr.js +15 -0
  24. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
  25. package/dist/Errors/types.js +2 -0
  26. package/dist/Errors/types.js.map +1 -1
  27. package/dist/Metrics/index.js +9 -2
  28. package/dist/Metrics/index.js.map +1 -1
  29. package/dist/Metrics/index.test.js +10 -4
  30. package/dist/Metrics/index.test.js.map +1 -1
  31. package/dist/Metrics/types.js.map +1 -1
  32. package/dist/common/Utils.js +41 -34
  33. package/dist/common/Utils.js.map +1 -1
  34. package/dist/common/Utils.test.js +265 -119
  35. package/dist/common/Utils.test.js.map +1 -1
  36. package/dist/common/types.js +8 -1
  37. package/dist/common/types.js.map +1 -1
  38. package/dist/module/CallSettings/WxCallBackendConnector.js +1 -1
  39. package/dist/module/CallingClient/CallingClient.js +25 -10
  40. package/dist/module/CallingClient/constants.js +2 -2
  41. package/dist/module/CallingClient/registration/register.js +101 -65
  42. package/dist/module/CallingClient/registration/webWorker.js +59 -0
  43. package/dist/module/CallingClient/registration/webWorkerStr.js +93 -0
  44. package/dist/module/Errors/types.js +2 -0
  45. package/dist/module/Metrics/index.js +8 -1
  46. package/dist/module/common/Utils.js +10 -2
  47. package/dist/module/common/types.js +7 -0
  48. package/dist/types/CallSettings/types.d.ts +1 -1
  49. package/dist/types/CallSettings/types.d.ts.map +1 -1
  50. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  51. package/dist/types/CallingClient/constants.d.ts +2 -2
  52. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  53. package/dist/types/CallingClient/registration/register.d.ts +2 -2
  54. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  55. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  56. package/dist/types/CallingClient/registration/webWorker.d.ts +2 -0
  57. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -0
  58. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +3 -0
  59. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -0
  60. package/dist/types/Errors/types.d.ts +2 -0
  61. package/dist/types/Errors/types.d.ts.map +1 -1
  62. package/dist/types/Metrics/index.d.ts.map +1 -1
  63. package/dist/types/Metrics/types.d.ts +2 -1
  64. package/dist/types/Metrics/types.d.ts.map +1 -1
  65. package/dist/types/common/Utils.d.ts.map +1 -1
  66. package/dist/types/common/types.d.ts +12 -0
  67. package/dist/types/common/types.d.ts.map +1 -1
  68. package/package.json +4 -4
@@ -25,6 +25,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
25
25
  var _uuid = require("uuid");
26
26
  var _constants = require("../../common/constants");
27
27
  var _common = require("../../common");
28
+ var _webWorkerStr = _interopRequireDefault(require("./webWorkerStr"));
28
29
  var _types = require("../../Metrics/types");
29
30
  var _Metrics = require("../../Metrics");
30
31
  var _calling = require("../calling");
@@ -54,7 +55,6 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
54
55
  (0, _defineProperty2.default)(this, "registrationStatus", void 0);
55
56
  (0, _defineProperty2.default)(this, "failbackTimer", void 0);
56
57
  (0, _defineProperty2.default)(this, "activeMobiusUrl", void 0);
57
- (0, _defineProperty2.default)(this, "keepaliveTimer", void 0);
58
58
  (0, _defineProperty2.default)(this, "rehomingIntervalMin", void 0);
59
59
  (0, _defineProperty2.default)(this, "rehomingIntervalMax", void 0);
60
60
  (0, _defineProperty2.default)(this, "mutex", void 0);
@@ -71,6 +71,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
71
71
  (0, _defineProperty2.default)(this, "failoverImmediately", false);
72
72
  (0, _defineProperty2.default)(this, "retryAfter", void 0);
73
73
  (0, _defineProperty2.default)(this, "scheduled429Retry", false);
74
+ (0, _defineProperty2.default)(this, "webWorker", void 0);
74
75
  this.jwe = jwe;
75
76
  this.sdkConnector = _SDKConnector.default;
76
77
  this.serviceData = serviceData;
@@ -118,94 +119,65 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
118
119
  this.backupMobiusUris = backupMobiusUris;
119
120
  }
120
121
 
121
- /**
122
- * Implementation of sending keepalive.
123
- *
124
- */
125
- }, {
126
- key: "postKeepAlive",
127
- value: (function () {
128
- var _postKeepAlive = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
129
- return _regenerator.default.wrap(function _callee$(_context) {
130
- while (1) switch (_context.prev = _context.next) {
131
- case 0:
132
- return _context.abrupt("return", this.webex.request({
133
- uri: "".concat(url, "/status"),
134
- method: _types2.HTTP_METHODS.POST,
135
- headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, this.webex.internal.device.url), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
136
- service: _types2.ALLOWED_SERVICES.MOBIUS
137
- }));
138
- case 1:
139
- case "end":
140
- return _context.stop();
141
- }
142
- }, _callee, this);
143
- }));
144
- function postKeepAlive(_x) {
145
- return _postKeepAlive.apply(this, arguments);
146
- }
147
- return postKeepAlive;
148
- }()
149
122
  /**
150
123
  * Implementation of delete device.
151
124
  *
152
125
  */
153
- )
154
126
  }, {
155
127
  key: "deleteRegistration",
156
128
  value: (function () {
157
- var _deleteRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(url, deviceId, deviceUrl) {
129
+ var _deleteRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url, deviceId, deviceUrl) {
158
130
  var _response;
159
131
  var response;
160
- return _regenerator.default.wrap(function _callee2$(_context2) {
161
- while (1) switch (_context2.prev = _context2.next) {
132
+ return _regenerator.default.wrap(function _callee$(_context) {
133
+ while (1) switch (_context.prev = _context.next) {
162
134
  case 0:
163
- _context2.prev = 0;
164
- _context2.t0 = fetch;
165
- _context2.t1 = "".concat(url).concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId);
166
- _context2.t2 = _types2.HTTP_METHODS.DELETE;
167
- _context2.t3 = _defineProperty2.default;
168
- _context2.t4 = _defineProperty2.default;
169
- _context2.t5 = _defineProperty2.default;
170
- _context2.t6 = (0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl);
171
- _context2.next = 10;
135
+ _context.prev = 0;
136
+ _context.t0 = fetch;
137
+ _context.t1 = "".concat(url).concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId);
138
+ _context.t2 = _types2.HTTP_METHODS.DELETE;
139
+ _context.t3 = _defineProperty2.default;
140
+ _context.t4 = _defineProperty2.default;
141
+ _context.t5 = _defineProperty2.default;
142
+ _context.t6 = (0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl);
143
+ _context.next = 10;
172
144
  return this.webex.credentials.getUserToken();
173
145
  case 10:
174
- _context2.t7 = _context2.sent;
175
- _context2.t8 = (0, _context2.t5)(_context2.t6, "Authorization", _context2.t7);
176
- _context2.t9 = "".concat(_constants2.WEBEX_WEB_CLIENT, "_").concat((0, _uuid.v4)());
177
- _context2.t10 = (0, _context2.t4)(_context2.t8, "trackingId", _context2.t9);
178
- _context2.t11 = _constants2.SPARK_USER_AGENT;
179
- _context2.t12 = _constants2.CALLING_USER_AGENT;
180
- _context2.t13 = (0, _context2.t3)(_context2.t10, _context2.t11, _context2.t12);
181
- _context2.t14 = {
182
- method: _context2.t2,
183
- headers: _context2.t13
146
+ _context.t7 = _context.sent;
147
+ _context.t8 = (0, _context.t5)(_context.t6, "Authorization", _context.t7);
148
+ _context.t9 = "".concat(_constants2.WEBEX_WEB_CLIENT, "_").concat((0, _uuid.v4)());
149
+ _context.t10 = (0, _context.t4)(_context.t8, "trackingId", _context.t9);
150
+ _context.t11 = _constants2.SPARK_USER_AGENT;
151
+ _context.t12 = _constants2.CALLING_USER_AGENT;
152
+ _context.t13 = (0, _context.t3)(_context.t10, _context.t11, _context.t12);
153
+ _context.t14 = {
154
+ method: _context.t2,
155
+ headers: _context.t13
184
156
  };
185
- _context2.next = 20;
186
- return (0, _context2.t0)(_context2.t1, _context2.t14);
157
+ _context.next = 20;
158
+ return (0, _context.t0)(_context.t1, _context.t14);
187
159
  case 20:
188
- response = _context2.sent;
189
- _context2.next = 26;
160
+ response = _context.sent;
161
+ _context.next = 26;
190
162
  break;
191
163
  case 23:
192
- _context2.prev = 23;
193
- _context2.t15 = _context2["catch"](0);
194
- _Logger.default.warn("Delete failed with Mobius ".concat(_context2.t15), {
164
+ _context.prev = 23;
165
+ _context.t15 = _context["catch"](0);
166
+ _Logger.default.warn("Delete failed with Mobius ".concat(_context.t15), {
195
167
  file: _constants2.REGISTRATION_FILE,
196
168
  method: _constants2.METHODS.DEREGISTER
197
169
  });
198
170
  case 26:
199
171
  this.setStatus(_types2.RegistrationStatus.INACTIVE);
200
172
  this.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
201
- return _context2.abrupt("return", (_response = response) === null || _response === void 0 ? void 0 : _response.json());
173
+ return _context.abrupt("return", (_response = response) === null || _response === void 0 ? void 0 : _response.json());
202
174
  case 29:
203
175
  case "end":
204
- return _context2.stop();
176
+ return _context.stop();
205
177
  }
206
- }, _callee2, this, [[0, 23]]);
178
+ }, _callee, this, [[0, 23]]);
207
179
  }));
208
- function deleteRegistration(_x2, _x3, _x4) {
180
+ function deleteRegistration(_x, _x2, _x3) {
209
181
  return _deleteRegistration.apply(this, arguments);
210
182
  }
211
183
  return deleteRegistration;
@@ -218,10 +190,10 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
218
190
  }, {
219
191
  key: "postRegistration",
220
192
  value: (function () {
221
- var _postRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(url) {
193
+ var _postRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(url) {
222
194
  var deviceInfo;
223
- return _regenerator.default.wrap(function _callee3$(_context3) {
224
- while (1) switch (_context3.prev = _context3.next) {
195
+ return _regenerator.default.wrap(function _callee2$(_context2) {
196
+ while (1) switch (_context2.prev = _context2.next) {
225
197
  case 0:
226
198
  deviceInfo = {
227
199
  userId: this.userId,
@@ -230,7 +202,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
230
202
  jwe: this.jwe
231
203
  }) : this.serviceData
232
204
  };
233
- return _context3.abrupt("return", this.webex.request({
205
+ return _context2.abrupt("return", this.webex.request({
234
206
  uri: "".concat(url, "device"),
235
207
  method: _types2.HTTP_METHODS.POST,
236
208
  headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceInfo.clientDeviceUri), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
@@ -239,11 +211,11 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
239
211
  }));
240
212
  case 2:
241
213
  case "end":
242
- return _context3.stop();
214
+ return _context2.stop();
243
215
  }
244
- }, _callee3, this);
216
+ }, _callee2, this);
245
217
  }));
246
- function postRegistration(_x5) {
218
+ function postRegistration(_x4) {
247
219
  return _postRegistration.apply(this, arguments);
248
220
  }
249
221
  return postRegistration;
@@ -256,29 +228,29 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
256
228
  }, {
257
229
  key: "restorePreviousRegistration",
258
230
  value: (function () {
259
- var _restorePreviousRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(caller) {
231
+ var _restorePreviousRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(caller) {
260
232
  var abort;
261
- return _regenerator.default.wrap(function _callee4$(_context4) {
262
- while (1) switch (_context4.prev = _context4.next) {
233
+ return _regenerator.default.wrap(function _callee3$(_context3) {
234
+ while (1) switch (_context3.prev = _context3.next) {
263
235
  case 0:
264
236
  abort = false;
265
237
  if (!this.activeMobiusUrl) {
266
- _context4.next = 5;
238
+ _context3.next = 5;
267
239
  break;
268
240
  }
269
- _context4.next = 4;
241
+ _context3.next = 4;
270
242
  return this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);
271
243
  case 4:
272
- abort = _context4.sent;
244
+ abort = _context3.sent;
273
245
  case 5:
274
- return _context4.abrupt("return", abort);
246
+ return _context3.abrupt("return", abort);
275
247
  case 6:
276
248
  case "end":
277
- return _context4.stop();
249
+ return _context3.stop();
278
250
  }
279
- }, _callee4, this);
251
+ }, _callee3, this);
280
252
  }));
281
- function restorePreviousRegistration(_x6) {
253
+ function restorePreviousRegistration(_x5) {
282
254
  return _restorePreviousRegistration.apply(this, arguments);
283
255
  }
284
256
  return restorePreviousRegistration;
@@ -290,20 +262,20 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
290
262
  }, {
291
263
  key: "handle429Retry",
292
264
  value: (function () {
293
- var _handle429Retry = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(retryAfter, caller) {
265
+ var _handle429Retry = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(retryAfter, caller) {
294
266
  var interval, abort;
295
- return _regenerator.default.wrap(function _callee5$(_context5) {
296
- while (1) switch (_context5.prev = _context5.next) {
267
+ return _regenerator.default.wrap(function _callee4$(_context4) {
268
+ while (1) switch (_context4.prev = _context4.next) {
297
269
  case 0:
298
270
  if (!(caller === _constants2.FAILBACK_UTIL)) {
299
- _context5.next = 17;
271
+ _context4.next = 17;
300
272
  break;
301
273
  }
302
274
  if (!(this.failback429RetryAttempts >= _constants2.REG_FAILBACK_429_MAX_RETRIES)) {
303
- _context5.next = 3;
275
+ _context4.next = 3;
304
276
  break;
305
277
  }
306
- return _context5.abrupt("return");
278
+ return _context4.abrupt("return");
307
279
  case 3:
308
280
  this.clearFailbackTimer();
309
281
  this.failback429RetryAttempts += 1;
@@ -314,28 +286,28 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
314
286
  interval = this.getRegRetryInterval(this.failback429RetryAttempts);
315
287
  this.startFailbackTimer(interval);
316
288
  this.scheduled429Retry = true;
317
- _context5.next = 11;
289
+ _context4.next = 11;
318
290
  return this.restorePreviousRegistration(_constants2.REG_429_RETRY_UTIL);
319
291
  case 11:
320
- abort = _context5.sent;
292
+ abort = _context4.sent;
321
293
  if (!(!abort && !this.isDeviceRegistered())) {
322
- _context5.next = 15;
294
+ _context4.next = 15;
323
295
  break;
324
296
  }
325
- _context5.next = 15;
297
+ _context4.next = 15;
326
298
  return this.restartRegistration(_constants2.REG_429_RETRY_UTIL);
327
299
  case 15:
328
- _context5.next = 18;
300
+ _context4.next = 18;
329
301
  break;
330
302
  case 17:
331
303
  this.retryAfter = retryAfter;
332
304
  case 18:
333
305
  case "end":
334
- return _context5.stop();
306
+ return _context4.stop();
335
307
  }
336
- }, _callee5, this);
308
+ }, _callee4, this);
337
309
  }));
338
- function handle429Retry(_x7, _x8) {
310
+ function handle429Retry(_x6, _x7) {
339
311
  return _handle429Retry.apply(this, arguments);
340
312
  }
341
313
  return handle429Retry;
@@ -364,7 +336,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
364
336
  }, {
365
337
  key: "startFailoverTimer",
366
338
  value: (function () {
367
- var _startFailoverTimer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
339
+ var _startFailoverTimer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
368
340
  var _this = this;
369
341
  var attempt,
370
342
  timeElapsed,
@@ -374,18 +346,18 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
374
346
  excessVal,
375
347
  abort,
376
348
  scheduledTime,
377
- _args10 = arguments;
378
- return _regenerator.default.wrap(function _callee10$(_context10) {
379
- while (1) switch (_context10.prev = _context10.next) {
349
+ _args9 = arguments;
350
+ return _regenerator.default.wrap(function _callee9$(_context9) {
351
+ while (1) switch (_context9.prev = _context9.next) {
380
352
  case 0:
381
- attempt = _args10.length > 0 && _args10[0] !== undefined ? _args10[0] : 1;
382
- timeElapsed = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : 0;
353
+ attempt = _args9.length > 0 && _args9[0] !== undefined ? _args9[0] : 1;
354
+ timeElapsed = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : 0;
383
355
  loggerContext = {
384
356
  file: _constants2.REGISTRATION_FILE,
385
357
  method: _constants2.FAILOVER_UTIL
386
358
  };
387
359
  interval = this.getRegRetryInterval(attempt);
388
- TIMER_THRESHOLD = this.isCCFlow ? _constants2.REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC : _constants2.REG_TRY_BACKUP_TIMER_VAL_IN_SEC;
360
+ TIMER_THRESHOLD = _constants2.REG_TRY_BACKUP_TIMER_VAL_IN_SEC;
389
361
  if (timeElapsed + interval > TIMER_THRESHOLD) {
390
362
  excessVal = timeElapsed + interval - TIMER_THRESHOLD;
391
363
  interval -= excessVal;
@@ -394,83 +366,83 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
394
366
  this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;
395
367
  }
396
368
  if (!(interval > _constants2.BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately)) {
397
- _context10.next = 14;
369
+ _context9.next = 14;
398
370
  break;
399
371
  }
400
372
  scheduledTime = Math.floor((0, _now.default)() / 1000);
401
373
  if (this.retryAfter != null) {
402
374
  interval = Math.max(interval, this.retryAfter);
403
375
  }
404
- setTimeout( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
405
- return _regenerator.default.wrap(function _callee7$(_context7) {
406
- while (1) switch (_context7.prev = _context7.next) {
376
+ setTimeout( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
377
+ return _regenerator.default.wrap(function _callee6$(_context6) {
378
+ while (1) switch (_context6.prev = _context6.next) {
407
379
  case 0:
408
- _context7.next = 2;
409
- return _this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
380
+ _context6.next = 2;
381
+ return _this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
410
382
  var currentTime;
411
- return _regenerator.default.wrap(function _callee6$(_context6) {
412
- while (1) switch (_context6.prev = _context6.next) {
383
+ return _regenerator.default.wrap(function _callee5$(_context5) {
384
+ while (1) switch (_context5.prev = _context5.next) {
413
385
  case 0:
414
- _context6.next = 2;
386
+ _context5.next = 2;
415
387
  return _this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL);
416
388
  case 2:
417
- abort = _context6.sent;
389
+ abort = _context5.sent;
418
390
  currentTime = Math.floor((0, _now.default)() / 1000);
419
391
  if (!(!abort && !_this.isDeviceRegistered())) {
420
- _context6.next = 7;
392
+ _context5.next = 7;
421
393
  break;
422
394
  }
423
- _context6.next = 7;
395
+ _context5.next = 7;
424
396
  return _this.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));
425
397
  case 7:
426
398
  case "end":
427
- return _context6.stop();
399
+ return _context5.stop();
428
400
  }
429
- }, _callee6);
401
+ }, _callee5);
430
402
  })));
431
403
  case 2:
432
404
  case "end":
433
- return _context7.stop();
405
+ return _context6.stop();
434
406
  }
435
- }, _callee7);
407
+ }, _callee6);
436
408
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
437
409
  _Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
438
- _context10.next = 26;
410
+ _context9.next = 26;
439
411
  break;
440
412
  case 14:
441
413
  if (!this.backupMobiusUris.length) {
442
- _context10.next = 23;
414
+ _context9.next = 23;
443
415
  break;
444
416
  }
445
417
  _Logger.default.info('Failing over to backup servers.', loggerContext);
446
418
  this.failoverImmediately = false;
447
- _context10.next = 19;
419
+ _context9.next = 19;
448
420
  return this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, this.backupMobiusUris);
449
421
  case 19:
450
- abort = _context10.sent;
422
+ abort = _context9.sent;
451
423
  if (!abort && !this.isDeviceRegistered()) {
452
424
  interval = this.getRegRetryInterval();
453
425
  if (this.retryAfter != null && this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT) {
454
426
  interval = interval < this.retryAfter ? this.retryAfter : interval;
455
427
  }
456
- setTimeout( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
457
- return _regenerator.default.wrap(function _callee9$(_context9) {
458
- while (1) switch (_context9.prev = _context9.next) {
428
+ setTimeout( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
429
+ return _regenerator.default.wrap(function _callee8$(_context8) {
430
+ while (1) switch (_context8.prev = _context8.next) {
459
431
  case 0:
460
- _context9.next = 2;
461
- return _this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
462
- return _regenerator.default.wrap(function _callee8$(_context8) {
463
- while (1) switch (_context8.prev = _context8.next) {
432
+ _context8.next = 2;
433
+ return _this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
434
+ return _regenerator.default.wrap(function _callee7$(_context7) {
435
+ while (1) switch (_context7.prev = _context7.next) {
464
436
  case 0:
465
- _context8.next = 2;
437
+ _context7.next = 2;
466
438
  return _this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, _this.backupMobiusUris);
467
439
  case 2:
468
- abort = _context8.sent;
440
+ abort = _context7.sent;
469
441
  if (!(!abort && !_this.isDeviceRegistered())) {
470
- _context8.next = 7;
442
+ _context7.next = 7;
471
443
  break;
472
444
  }
473
- _context8.next = 6;
445
+ _context7.next = 6;
474
446
  return (0, _common.uploadLogs)();
475
447
  case 6:
476
448
  (0, _common.emitFinalFailure)(function (clientError) {
@@ -478,22 +450,22 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
478
450
  }, loggerContext);
479
451
  case 7:
480
452
  case "end":
481
- return _context8.stop();
453
+ return _context7.stop();
482
454
  }
483
- }, _callee8);
455
+ }, _callee7);
484
456
  })));
485
457
  case 2:
486
458
  case "end":
487
- return _context9.stop();
459
+ return _context8.stop();
488
460
  }
489
- }, _callee9);
461
+ }, _callee8);
490
462
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
491
463
  _Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
492
464
  }
493
- _context10.next = 26;
465
+ _context9.next = 26;
494
466
  break;
495
467
  case 23:
496
- _context10.next = 25;
468
+ _context9.next = 25;
497
469
  return (0, _common.uploadLogs)();
498
470
  case 25:
499
471
  (0, _common.emitFinalFailure)(function (clientError) {
@@ -501,9 +473,9 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
501
473
  }, loggerContext);
502
474
  case 26:
503
475
  case "end":
504
- return _context10.stop();
476
+ return _context9.stop();
505
477
  }
506
- }, _callee10, this);
478
+ }, _callee9, this);
507
479
  }));
508
480
  function startFailoverTimer() {
509
481
  return _startFailoverTimer.apply(this, arguments);
@@ -522,7 +494,83 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
522
494
  this.failbackTimer = undefined;
523
495
  }
524
496
  }
525
-
497
+ }, {
498
+ key: "isPrimaryActive",
499
+ value: function () {
500
+ var _isPrimaryActive = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10() {
501
+ var status, _iterator, _step, mobiusUrl, baseUri, response, _ref5, statusCode;
502
+ return _regenerator.default.wrap(function _callee10$(_context10) {
503
+ while (1) switch (_context10.prev = _context10.next) {
504
+ case 0:
505
+ _iterator = _createForOfIteratorHelper(this.primaryMobiusUris);
506
+ _context10.prev = 1;
507
+ _iterator.s();
508
+ case 3:
509
+ if ((_step = _iterator.n()).done) {
510
+ _context10.next = 23;
511
+ break;
512
+ }
513
+ mobiusUrl = _step.value;
514
+ _context10.prev = 5;
515
+ baseUri = mobiusUrl.replace(_constants2.URL_ENDPOINT, '/'); // eslint-disable-next-line no-await-in-loop
516
+ _context10.next = 9;
517
+ return this.webex.request({
518
+ uri: "".concat(baseUri, "ping"),
519
+ method: _types2.HTTP_METHODS.GET,
520
+ headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, this.webex.internal.device.url), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
521
+ service: _types2.ALLOWED_SERVICES.MOBIUS
522
+ });
523
+ case 9:
524
+ response = _context10.sent;
525
+ _ref5 = response, statusCode = _ref5.statusCode;
526
+ if (!(statusCode === 200)) {
527
+ _context10.next = 15;
528
+ break;
529
+ }
530
+ _Logger.default.info("Ping successful for primary Mobius: ".concat(mobiusUrl), {
531
+ file: _constants2.REGISTRATION_FILE,
532
+ method: _constants2.FAILBACK_UTIL
533
+ });
534
+ status = 'up';
535
+ return _context10.abrupt("break", 23);
536
+ case 15:
537
+ _context10.next = 21;
538
+ break;
539
+ case 17:
540
+ _context10.prev = 17;
541
+ _context10.t0 = _context10["catch"](5);
542
+ _Logger.default.warn("Ping failed for primary Mobius: ".concat(mobiusUrl, " with error: ").concat(_context10.t0), {
543
+ file: _constants2.REGISTRATION_FILE,
544
+ method: _constants2.FAILBACK_UTIL
545
+ });
546
+ status = 'down';
547
+ case 21:
548
+ _context10.next = 3;
549
+ break;
550
+ case 23:
551
+ _context10.next = 28;
552
+ break;
553
+ case 25:
554
+ _context10.prev = 25;
555
+ _context10.t1 = _context10["catch"](1);
556
+ _iterator.e(_context10.t1);
557
+ case 28:
558
+ _context10.prev = 28;
559
+ _iterator.f();
560
+ return _context10.finish(28);
561
+ case 31:
562
+ return _context10.abrupt("return", status === 'up');
563
+ case 32:
564
+ case "end":
565
+ return _context10.stop();
566
+ }
567
+ }, _callee10, this, [[1, 25, 28, 31], [5, 17]]);
568
+ }));
569
+ function isPrimaryActive() {
570
+ return _isPrimaryActive.apply(this, arguments);
571
+ }
572
+ return isPrimaryActive;
573
+ }()
526
574
  /**
527
575
  * Returns true if device is registered with a backup mobius.
528
576
  */
@@ -600,69 +648,73 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
600
648
  case 0:
601
649
  _context13.next = 2;
602
650
  return this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12() {
603
- var abort, abortNew;
651
+ var primaryServerStatus, abort, abortNew;
604
652
  return _regenerator.default.wrap(function _callee12$(_context12) {
605
653
  while (1) switch (_context12.prev = _context12.next) {
606
654
  case 0:
607
655
  if (!_this3.isFailbackRequired()) {
608
- _context12.next = 28;
656
+ _context12.next = 31;
609
657
  break;
610
658
  }
611
- if (!((0, _keys.default)(_this3.callManager.getActiveCalls()).length === 0)) {
612
- _context12.next = 25;
659
+ _context12.next = 3;
660
+ return _this3.isPrimaryActive();
661
+ case 3:
662
+ primaryServerStatus = _context12.sent;
663
+ if (!((0, _keys.default)(_this3.callManager.getActiveCalls()).length === 0 && primaryServerStatus)) {
664
+ _context12.next = 28;
613
665
  break;
614
666
  }
615
667
  _Logger.default.info("Attempting failback to primary.", {
616
668
  file: _constants2.REGISTRATION_FILE,
617
669
  method: _this3.executeFailback.name
618
670
  });
619
- _context12.next = 5;
671
+ _context12.next = 8;
620
672
  return _this3.deregister();
621
- case 5:
622
- _context12.next = 7;
673
+ case 8:
674
+ _context12.next = 10;
623
675
  return _this3.attemptRegistrationWithServers(_constants2.FAILBACK_UTIL);
624
- case 7:
676
+ case 10:
625
677
  abort = _context12.sent;
626
678
  if (!(_this3.scheduled429Retry || abort || _this3.isDeviceRegistered())) {
627
- _context12.next = 10;
679
+ _context12.next = 13;
628
680
  break;
629
681
  }
630
682
  return _context12.abrupt("return");
631
- case 10:
632
- _context12.next = 12;
683
+ case 13:
684
+ _context12.next = 15;
633
685
  return _this3.restorePreviousRegistration(_constants2.FAILBACK_UTIL);
634
- case 12:
686
+ case 15:
635
687
  abortNew = _context12.sent;
636
688
  if (!abortNew) {
637
- _context12.next = 16;
689
+ _context12.next = 19;
638
690
  break;
639
691
  }
640
692
  _this3.clearFailbackTimer();
641
693
  return _context12.abrupt("return");
642
- case 16:
694
+ case 19:
643
695
  if (_this3.isDeviceRegistered()) {
644
- _context12.next = 21;
696
+ _context12.next = 24;
645
697
  break;
646
698
  }
647
- _context12.next = 19;
699
+ _context12.next = 22;
648
700
  return _this3.restartRegistration(_this3.executeFailback.name);
649
- case 19:
650
- _context12.next = 23;
701
+ case 22:
702
+ _context12.next = 26;
651
703
  break;
652
- case 21:
704
+ case 24:
653
705
  _this3.failbackTimer = undefined;
654
706
  _this3.initiateFailback();
655
- case 23:
656
- _context12.next = 28;
707
+ case 26:
708
+ _context12.next = 31;
657
709
  break;
658
- case 25:
659
- _Logger.default.info('Active calls present, deferring failback to next cycle.', {
710
+ case 28:
711
+ _Logger.default.info('Active calls present or primary Mobius is down, deferring failback to next cycle.', {
660
712
  file: _constants2.REGISTRATION_FILE,
661
713
  method: _this3.executeFailback.name
662
714
  });
663
715
  _this3.failbackTimer = undefined;
664
716
  _this3.initiateFailback();
665
- case 28:
717
+ case 31:
666
718
  case "end":
667
719
  return _context12.stop();
668
720
  }
@@ -762,7 +814,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
762
814
  }
763
815
  }, _callee14, this);
764
816
  }));
765
- function restartRegistration(_x9) {
817
+ function restartRegistration(_x8) {
766
818
  return _restartRegistration.apply(this, arguments);
767
819
  }
768
820
  return restartRegistration;
@@ -837,7 +889,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
837
889
  }
838
890
  }, _callee16, this);
839
891
  }));
840
- function handleConnectionRestoration(_x10) {
892
+ function handleConnectionRestoration(_x9) {
841
893
  return _handleConnectionRestoration.apply(this, arguments);
842
894
  }
843
895
  return handleConnectionRestoration;
@@ -853,7 +905,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
853
905
  value: function restoreRegistrationCallBack() {
854
906
  var _this5 = this;
855
907
  return /*#__PURE__*/function () {
856
- var _ref8 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(restoreData, caller) {
908
+ var _ref9 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(restoreData, caller) {
857
909
  var logContext, restore, finalError;
858
910
  return _regenerator.default.wrap(function _callee17$(_context17) {
859
911
  while (1) switch (_context17.prev = _context17.next) {
@@ -899,8 +951,8 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
899
951
  }
900
952
  }, _callee17);
901
953
  }));
902
- return function (_x11, _x12) {
903
- return _ref8.apply(this, arguments);
954
+ return function (_x10, _x11) {
955
+ return _ref9.apply(this, arguments);
904
956
  };
905
957
  }();
906
958
  }
@@ -922,7 +974,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
922
974
  break;
923
975
  }
924
976
  _context18.next = 3;
925
- return this.attemptRegistrationWithServers(this.triggerRegistration.name, this.primaryMobiusUris);
977
+ return this.attemptRegistrationWithServers(_constants2.REGISTRATION_UTIL, this.primaryMobiusUris);
926
978
  case 3:
927
979
  abort = _context18.sent;
928
980
  if (!(!this.isDeviceRegistered() && !abort)) {
@@ -958,131 +1010,150 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
958
1010
  var _this6 = this;
959
1011
  var servers,
960
1012
  abort,
961
- _iterator,
962
- _step,
963
- url,
964
- _this$deviceInfo$devi,
965
- _this$deviceInfo$devi2,
966
- resp,
967
- body,
968
- _args19 = arguments;
969
- return _regenerator.default.wrap(function _callee19$(_context19) {
970
- while (1) switch (_context19.prev = _context19.next) {
1013
+ _iterator2,
1014
+ _step2,
1015
+ _loop,
1016
+ _ret,
1017
+ _args20 = arguments;
1018
+ return _regenerator.default.wrap(function _callee19$(_context20) {
1019
+ while (1) switch (_context20.prev = _context20.next) {
971
1020
  case 0:
972
- servers = _args19.length > 1 && _args19[1] !== undefined ? _args19[1] : this.primaryMobiusUris;
1021
+ servers = _args20.length > 1 && _args20[1] !== undefined ? _args20[1] : this.primaryMobiusUris;
973
1022
  abort = false;
974
1023
  this.retryAfter = undefined;
975
1024
  if (!this.failoverImmediately) {
976
- _context19.next = 5;
1025
+ _context20.next = 5;
977
1026
  break;
978
1027
  }
979
- return _context19.abrupt("return", abort);
1028
+ return _context20.abrupt("return", abort);
980
1029
  case 5:
981
1030
  if (!this.isDeviceRegistered()) {
982
- _context19.next = 8;
1031
+ _context20.next = 8;
983
1032
  break;
984
1033
  }
985
1034
  _Logger.default.info("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), {
986
1035
  file: _constants2.REGISTRATION_FILE,
987
1036
  method: _constants2.REGISTER_UTIL
988
1037
  });
989
- return _context19.abrupt("return", abort);
1038
+ return _context20.abrupt("return", abort);
990
1039
  case 8:
991
- _iterator = _createForOfIteratorHelper(servers);
992
- _context19.prev = 9;
993
- _iterator.s();
994
- case 11:
995
- if ((_step = _iterator.n()).done) {
996
- _context19.next = 48;
997
- break;
998
- }
999
- url = _step.value;
1000
- _context19.prev = 13;
1001
- abort = false;
1002
- this.registrationStatus = _types2.RegistrationStatus.INACTIVE;
1003
- this.lineEmitter(_types3.LINE_EVENTS.CONNECTING);
1004
- _Logger.default.info("[".concat(caller, "] : Mobius url to contact: ").concat(url), {
1005
- file: _constants2.REGISTRATION_FILE,
1006
- method: _constants2.REGISTER_UTIL
1007
- });
1008
- // eslint-disable-next-line no-await-in-loop
1009
- _context19.next = 20;
1010
- return this.postRegistration(url);
1011
- case 20:
1012
- resp = _context19.sent;
1013
- this.deviceInfo = resp.body;
1014
- this.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1015
- this.lineEmitter(_types3.LINE_EVENTS.REGISTERED, resp.body);
1016
- _Logger.default.log("Registration successful for deviceId: ".concat((_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.deviceId, " userId: ").concat(this.userId), {
1017
- file: _constants2.REGISTRATION_FILE,
1018
- method: _constants2.METHODS.REGISTER
1040
+ _iterator2 = _createForOfIteratorHelper(servers);
1041
+ _context20.prev = 9;
1042
+ _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
1043
+ var _this6$backupMobiusUr;
1044
+ var url, serverType, _this6$deviceInfo$dev, _resp$headers$trackin, _resp$headers, _this6$deviceInfo$dev2, resp, body;
1045
+ return _regenerator.default.wrap(function _loop$(_context19) {
1046
+ while (1) switch (_context19.prev = _context19.next) {
1047
+ case 0:
1048
+ url = _step2.value;
1049
+ serverType = _this6.primaryMobiusUris.includes(url) && 'PRIMARY' || ((_this6$backupMobiusUr = _this6.backupMobiusUris) === null || _this6$backupMobiusUr === void 0 ? void 0 : _this6$backupMobiusUr.includes(url)) && 'BACKUP' || 'UNKNOWN';
1050
+ _context19.prev = 2;
1051
+ abort = false;
1052
+ _this6.registrationStatus = _types2.RegistrationStatus.INACTIVE;
1053
+ _this6.lineEmitter(_types3.LINE_EVENTS.CONNECTING);
1054
+ _Logger.default.info("[".concat(caller, "] : Mobius url to contact: ").concat(url), {
1055
+ file: _constants2.REGISTRATION_FILE,
1056
+ method: _constants2.REGISTER_UTIL
1057
+ });
1058
+ // eslint-disable-next-line no-await-in-loop
1059
+ _context19.next = 9;
1060
+ return _this6.postRegistration(url);
1061
+ case 9:
1062
+ resp = _context19.sent;
1063
+ _this6.deviceInfo = resp.body;
1064
+ _this6.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1065
+ _this6.lineEmitter(_types3.LINE_EVENTS.REGISTERED, resp.body);
1066
+ _Logger.default.log("Registration successful for deviceId: ".concat((_this6$deviceInfo$dev = _this6.deviceInfo.device) === null || _this6$deviceInfo$dev === void 0 ? void 0 : _this6$deviceInfo$dev.deviceId, " userId: ").concat(_this6.userId), {
1067
+ file: _constants2.REGISTRATION_FILE,
1068
+ method: _constants2.METHODS.REGISTER
1069
+ });
1070
+ _this6.setActiveMobiusUrl(url);
1071
+ _this6.setIntervalValues(_this6.deviceInfo);
1072
+ _this6.metricManager.setDeviceInfo(_this6.deviceInfo);
1073
+ _this6.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, caller, serverType, (_resp$headers$trackin = (_resp$headers = resp.headers) === null || _resp$headers === void 0 ? void 0 : _resp$headers.trackingid) !== null && _resp$headers$trackin !== void 0 ? _resp$headers$trackin : '', undefined, undefined);
1074
+ _this6.startKeepaliveTimer((_this6$deviceInfo$dev2 = _this6.deviceInfo.device) === null || _this6$deviceInfo$dev2 === void 0 ? void 0 : _this6$deviceInfo$dev2.uri, _this6.deviceInfo.keepaliveInterval, serverType);
1075
+ _this6.initiateFailback();
1076
+ return _context19.abrupt("return", 0);
1077
+ case 23:
1078
+ _context19.prev = 23;
1079
+ _context19.t0 = _context19["catch"](2);
1080
+ body = _context19.t0; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
1081
+ _context19.next = 28;
1082
+ return (0, _common.handleRegistrationErrors)(body, function (clientError, finalError) {
1083
+ var _body$headers$trackin, _body$headers;
1084
+ if (finalError) {
1085
+ _this6.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1086
+ } else {
1087
+ _this6.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1088
+ }
1089
+ _this6.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION_ERROR, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, caller, serverType, (_body$headers$trackin = (_body$headers = body.headers) === null || _body$headers === void 0 ? void 0 : _body$headers.trackingid) !== null && _body$headers$trackin !== void 0 ? _body$headers$trackin : '', undefined, clientError);
1090
+ }, {
1091
+ method: caller,
1092
+ file: _constants2.REGISTRATION_FILE
1093
+ }, function (retryAfter, retryCaller) {
1094
+ return _this6.handle429Retry(retryAfter, retryCaller);
1095
+ }, _this6.restoreRegistrationCallBack());
1096
+ case 28:
1097
+ abort = _context19.sent;
1098
+ if (!(_this6.registrationStatus === _types2.RegistrationStatus.ACTIVE)) {
1099
+ _context19.next = 32;
1100
+ break;
1101
+ }
1102
+ _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(_this6.activeMobiusUrl), {
1103
+ file: _constants2.REGISTRATION_FILE,
1104
+ method: _this6.attemptRegistrationWithServers.name
1105
+ });
1106
+ return _context19.abrupt("return", 0);
1107
+ case 32:
1108
+ if (!abort) {
1109
+ _context19.next = 35;
1110
+ break;
1111
+ }
1112
+ _this6.setStatus(_types2.RegistrationStatus.INACTIVE);
1113
+ return _context19.abrupt("return", 0);
1114
+ case 35:
1115
+ case "end":
1116
+ return _context19.stop();
1117
+ }
1118
+ }, _loop, null, [[2, 23]]);
1019
1119
  });
1020
- this.setActiveMobiusUrl(url);
1021
- this.setIntervalValues(this.deviceInfo);
1022
- this.metricManager.setDeviceInfo(this.deviceInfo);
1023
- this.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, undefined);
1024
- this.startKeepaliveTimer((_this$deviceInfo$devi2 = this.deviceInfo.device) === null || _this$deviceInfo$devi2 === void 0 ? void 0 : _this$deviceInfo$devi2.uri, this.deviceInfo.keepaliveInterval);
1025
- this.initiateFailback();
1026
- return _context19.abrupt("break", 48);
1027
- case 34:
1028
- _context19.prev = 34;
1029
- _context19.t0 = _context19["catch"](13);
1030
- body = _context19.t0; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
1031
- _context19.next = 39;
1032
- return (0, _common.handleRegistrationErrors)(body, function (clientError, finalError) {
1033
- if (finalError) {
1034
- _this6.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1035
- } else {
1036
- _this6.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1037
- }
1038
- _this6.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION_ERROR, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, clientError);
1039
- }, {
1040
- method: caller,
1041
- file: _constants2.REGISTRATION_FILE
1042
- }, function (retryAfter, retryCaller) {
1043
- return _this6.handle429Retry(retryAfter, retryCaller);
1044
- }, this.restoreRegistrationCallBack());
1045
- case 39:
1046
- abort = _context19.sent;
1047
- if (!(this.registrationStatus === _types2.RegistrationStatus.ACTIVE)) {
1048
- _context19.next = 43;
1120
+ _iterator2.s();
1121
+ case 12:
1122
+ if ((_step2 = _iterator2.n()).done) {
1123
+ _context20.next = 19;
1049
1124
  break;
1050
1125
  }
1051
- _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(this.activeMobiusUrl), {
1052
- file: _constants2.REGISTRATION_FILE,
1053
- method: this.attemptRegistrationWithServers.name
1054
- });
1055
- return _context19.abrupt("break", 48);
1056
- case 43:
1057
- if (!abort) {
1058
- _context19.next = 46;
1126
+ return _context20.delegateYield(_loop(), "t0", 14);
1127
+ case 14:
1128
+ _ret = _context20.t0;
1129
+ if (!(_ret === 0)) {
1130
+ _context20.next = 17;
1059
1131
  break;
1060
1132
  }
1061
- this.setStatus(_types2.RegistrationStatus.INACTIVE);
1062
- return _context19.abrupt("break", 48);
1063
- case 46:
1064
- _context19.next = 11;
1133
+ return _context20.abrupt("break", 19);
1134
+ case 17:
1135
+ _context20.next = 12;
1065
1136
  break;
1066
- case 48:
1067
- _context19.next = 53;
1137
+ case 19:
1138
+ _context20.next = 24;
1068
1139
  break;
1069
- case 50:
1070
- _context19.prev = 50;
1071
- _context19.t1 = _context19["catch"](9);
1072
- _iterator.e(_context19.t1);
1073
- case 53:
1074
- _context19.prev = 53;
1075
- _iterator.f();
1076
- return _context19.finish(53);
1077
- case 56:
1078
- return _context19.abrupt("return", abort);
1079
- case 57:
1140
+ case 21:
1141
+ _context20.prev = 21;
1142
+ _context20.t1 = _context20["catch"](9);
1143
+ _iterator2.e(_context20.t1);
1144
+ case 24:
1145
+ _context20.prev = 24;
1146
+ _iterator2.f();
1147
+ return _context20.finish(24);
1148
+ case 27:
1149
+ return _context20.abrupt("return", abort);
1150
+ case 28:
1080
1151
  case "end":
1081
- return _context19.stop();
1152
+ return _context20.stop();
1082
1153
  }
1083
- }, _callee19, this, [[9, 50, 53, 56], [13, 34]]);
1154
+ }, _callee19, this, [[9, 21, 24, 27]]);
1084
1155
  }));
1085
- function attemptRegistrationWithServers(_x13) {
1156
+ function attemptRegistrationWithServers(_x12) {
1086
1157
  return _attemptRegistrationWithServers.apply(this, arguments);
1087
1158
  }
1088
1159
  return attemptRegistrationWithServers;
@@ -1094,103 +1165,138 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1094
1165
  )
1095
1166
  }, {
1096
1167
  key: "startKeepaliveTimer",
1097
- value: function startKeepaliveTimer(url, interval) {
1098
- var _this7 = this;
1099
- var keepAliveRetryCount = 0;
1100
- this.clearKeepaliveTimer();
1101
- var RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;
1102
- this.keepaliveTimer = setInterval( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
1103
- var logContext;
1104
- return _regenerator.default.wrap(function _callee21$(_context21) {
1105
- while (1) switch (_context21.prev = _context21.next) {
1168
+ value: (function () {
1169
+ var _startKeepaliveTimer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(url, interval, serverType) {
1170
+ var _this7 = this;
1171
+ var RETRY_COUNT_THRESHOLD;
1172
+ return _regenerator.default.wrap(function _callee22$(_context23) {
1173
+ while (1) switch (_context23.prev = _context23.next) {
1106
1174
  case 0:
1107
- logContext = {
1108
- file: _constants2.REGISTRATION_FILE,
1109
- method: _this7.startKeepaliveTimer.name
1110
- };
1111
- _context21.next = 3;
1112
- return _this7.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
1113
- var res, error, abort;
1114
- return _regenerator.default.wrap(function _callee20$(_context20) {
1115
- while (1) switch (_context20.prev = _context20.next) {
1175
+ this.clearKeepaliveTimer();
1176
+ RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;
1177
+ _context23.next = 4;
1178
+ return this.mutex.runExclusive( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
1179
+ var accessToken, blob, blobUrl;
1180
+ return _regenerator.default.wrap(function _callee21$(_context22) {
1181
+ while (1) switch (_context22.prev = _context22.next) {
1116
1182
  case 0:
1117
- if (!(_this7.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD)) {
1118
- _context20.next = 30;
1119
- break;
1120
- }
1121
- _context20.prev = 1;
1122
- _context20.next = 4;
1123
- return _this7.postKeepAlive(url);
1124
- case 4:
1125
- res = _context20.sent;
1126
- _Logger.default.log("Sent Keepalive, status: ".concat(res.statusCode), logContext);
1127
- if (keepAliveRetryCount > 0) {
1128
- _this7.lineEmitter(_types3.LINE_EVENTS.RECONNECTED);
1129
- }
1130
- keepAliveRetryCount = 0;
1131
- _context20.next = 30;
1132
- break;
1133
- case 10:
1134
- _context20.prev = 10;
1135
- _context20.t0 = _context20["catch"](1);
1136
- keepAliveRetryCount += 1;
1137
- error = _context20.t0;
1138
- _Logger.default.warn("Keep-alive missed ".concat(keepAliveRetryCount, " times. Status -> ").concat(error.statusCode, " "), logContext);
1139
- _context20.next = 17;
1140
- return (0, _common.handleRegistrationErrors)(error, function (clientError, finalError) {
1141
- if (finalError) {
1142
- _this7.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1143
- }
1144
- _this7.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.KEEPALIVE_FAILURE, _types.METRIC_TYPE.BEHAVIORAL, clientError);
1145
- }, {
1146
- method: _this7.startKeepaliveTimer.name,
1147
- file: _constants2.REGISTRATION_FILE
1148
- });
1149
- case 17:
1150
- abort = _context20.sent;
1151
- if (!(abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1152
- _context20.next = 29;
1183
+ if (!_this7.isDeviceRegistered()) {
1184
+ _context22.next = 5;
1153
1185
  break;
1154
1186
  }
1155
- _this7.failoverImmediately = _this7.isCCFlow;
1156
- _this7.setStatus(_types2.RegistrationStatus.INACTIVE);
1157
- _this7.clearKeepaliveTimer();
1158
- _this7.clearFailbackTimer();
1159
- _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1160
- if (abort) {
1161
- _context20.next = 27;
1162
- break;
1187
+ _context22.next = 3;
1188
+ return _this7.webex.credentials.getUserToken();
1189
+ case 3:
1190
+ accessToken = _context22.sent;
1191
+ if (!_this7.webWorker) {
1192
+ blob = new Blob([_webWorkerStr.default], {
1193
+ type: 'application/javascript'
1194
+ });
1195
+ blobUrl = URL.createObjectURL(blob);
1196
+ _this7.webWorker = new Worker(blobUrl);
1197
+ URL.revokeObjectURL(blobUrl);
1198
+ _this7.webWorker.postMessage({
1199
+ type: _types2.WorkerMessageType.START_KEEPALIVE,
1200
+ accessToken: String(accessToken),
1201
+ deviceUrl: String(_this7.webex.internal.device.url),
1202
+ interval: interval,
1203
+ retryCountThreshold: RETRY_COUNT_THRESHOLD,
1204
+ url: url
1205
+ });
1206
+ _this7.webWorker.onmessage = /*#__PURE__*/function () {
1207
+ var _ref11 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20(event) {
1208
+ var logContext, error, abort;
1209
+ return _regenerator.default.wrap(function _callee20$(_context21) {
1210
+ while (1) switch (_context21.prev = _context21.next) {
1211
+ case 0:
1212
+ logContext = {
1213
+ file: _constants2.REGISTRATION_FILE,
1214
+ method: _this7.startKeepaliveTimer.name
1215
+ };
1216
+ if (event.data.type === _types2.WorkerMessageType.KEEPALIVE_SUCCESS) {
1217
+ _Logger.default.info("Sent Keepalive, status: ".concat(event.data.statusCode), logContext);
1218
+ _this7.lineEmitter(_types3.LINE_EVENTS.RECONNECTED);
1219
+ }
1220
+ if (!(event.data.type === _types2.WorkerMessageType.KEEPALIVE_FAILURE)) {
1221
+ _context21.next = 20;
1222
+ break;
1223
+ }
1224
+ error = event.data.err;
1225
+ _Logger.default.warn("Keep-alive missed ".concat(event.data.keepAliveRetryCount, " times. Status -> ").concat(error.statusCode, " "), logContext);
1226
+ _context21.next = 7;
1227
+ return (0, _common.handleRegistrationErrors)(error, function (clientError, finalError) {
1228
+ var _error$headers$tracki, _error$headers;
1229
+ if (finalError) {
1230
+ _this7.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1231
+ }
1232
+ _this7.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.KEEPALIVE_FAILURE, _types.METRIC_TYPE.BEHAVIORAL, _constants2.KEEPALIVE_UTIL, serverType, (_error$headers$tracki = (_error$headers = error.headers) === null || _error$headers === void 0 ? void 0 : _error$headers.trackingid) !== null && _error$headers$tracki !== void 0 ? _error$headers$tracki : '', event.data.keepAliveRetryCount, clientError);
1233
+ }, {
1234
+ method: _constants2.KEEPALIVE_UTIL,
1235
+ file: _constants2.REGISTRATION_FILE
1236
+ });
1237
+ case 7:
1238
+ abort = _context21.sent;
1239
+ if (!(abort || event.data.keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1240
+ _context21.next = 19;
1241
+ break;
1242
+ }
1243
+ _this7.failoverImmediately = _this7.isCCFlow;
1244
+ _this7.setStatus(_types2.RegistrationStatus.INACTIVE);
1245
+ _this7.clearKeepaliveTimer();
1246
+ _this7.clearFailbackTimer();
1247
+ _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1248
+ if (abort) {
1249
+ _context21.next = 17;
1250
+ break;
1251
+ }
1252
+ _context21.next = 17;
1253
+ return _this7.reconnectOnFailure(_constants2.KEEPALIVE_UTIL);
1254
+ case 17:
1255
+ _context21.next = 20;
1256
+ break;
1257
+ case 19:
1258
+ _this7.lineEmitter(_types3.LINE_EVENTS.RECONNECTING);
1259
+ case 20:
1260
+ case "end":
1261
+ return _context21.stop();
1262
+ }
1263
+ }, _callee20);
1264
+ }));
1265
+ return function (_x16) {
1266
+ return _ref11.apply(this, arguments);
1267
+ };
1268
+ }();
1163
1269
  }
1164
- _context20.next = 27;
1165
- return _this7.reconnectOnFailure(_this7.startKeepaliveTimer.name);
1166
- case 27:
1167
- _context20.next = 30;
1168
- break;
1169
- case 29:
1170
- _this7.lineEmitter(_types3.LINE_EVENTS.RECONNECTING);
1171
- case 30:
1270
+ case 5:
1172
1271
  case "end":
1173
- return _context20.stop();
1272
+ return _context22.stop();
1174
1273
  }
1175
- }, _callee20, null, [[1, 10]]);
1274
+ }, _callee21);
1176
1275
  })));
1177
- case 3:
1276
+ case 4:
1178
1277
  case "end":
1179
- return _context21.stop();
1278
+ return _context23.stop();
1180
1279
  }
1181
- }, _callee21);
1182
- })), interval * 1000);
1183
- }
1184
-
1280
+ }, _callee22, this);
1281
+ }));
1282
+ function startKeepaliveTimer(_x13, _x14, _x15) {
1283
+ return _startKeepaliveTimer.apply(this, arguments);
1284
+ }
1285
+ return startKeepaliveTimer;
1286
+ }()
1185
1287
  /**
1186
1288
  * Clears the keepalive timer if running.
1187
1289
  */
1290
+ )
1188
1291
  }, {
1189
1292
  key: "clearKeepaliveTimer",
1190
1293
  value: function clearKeepaliveTimer() {
1191
- if (this.keepaliveTimer) {
1192
- clearInterval(this.keepaliveTimer);
1193
- this.keepaliveTimer = undefined;
1294
+ if (this.webWorker) {
1295
+ this.webWorker.postMessage({
1296
+ type: _types2.WorkerMessageType.CLEAR_KEEPALIVE
1297
+ });
1298
+ this.webWorker.terminate();
1299
+ this.webWorker = undefined;
1194
1300
  }
1195
1301
  }
1196
1302
  }, {
@@ -1201,25 +1307,25 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1201
1307
  }, {
1202
1308
  key: "deregister",
1203
1309
  value: function () {
1204
- var _deregister = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22() {
1205
- var _this$deviceInfo$devi3, _this$deviceInfo$devi4;
1206
- return _regenerator.default.wrap(function _callee22$(_context22) {
1207
- while (1) switch (_context22.prev = _context22.next) {
1310
+ var _deregister = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23() {
1311
+ var _this$deviceInfo$devi, _this$deviceInfo$devi2;
1312
+ return _regenerator.default.wrap(function _callee23$(_context24) {
1313
+ while (1) switch (_context24.prev = _context24.next) {
1208
1314
  case 0:
1209
- _context22.prev = 0;
1210
- _context22.next = 3;
1211
- return this.deleteRegistration(this.activeMobiusUrl, (_this$deviceInfo$devi3 = this.deviceInfo.device) === null || _this$deviceInfo$devi3 === void 0 ? void 0 : _this$deviceInfo$devi3.deviceId, (_this$deviceInfo$devi4 = this.deviceInfo.device) === null || _this$deviceInfo$devi4 === void 0 ? void 0 : _this$deviceInfo$devi4.clientDeviceUri);
1315
+ _context24.prev = 0;
1316
+ _context24.next = 3;
1317
+ return this.deleteRegistration(this.activeMobiusUrl, (_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.deviceId, (_this$deviceInfo$devi2 = this.deviceInfo.device) === null || _this$deviceInfo$devi2 === void 0 ? void 0 : _this$deviceInfo$devi2.clientDeviceUri);
1212
1318
  case 3:
1213
1319
  _Logger.default.log('Registration successfully deregistered', {
1214
1320
  file: _constants2.REGISTRATION_FILE,
1215
1321
  method: _constants2.METHODS.DEREGISTER
1216
1322
  });
1217
- _context22.next = 9;
1323
+ _context24.next = 9;
1218
1324
  break;
1219
1325
  case 6:
1220
- _context22.prev = 6;
1221
- _context22.t0 = _context22["catch"](0);
1222
- _Logger.default.warn("Delete failed with Mobius: ".concat(_context22.t0), {
1326
+ _context24.prev = 6;
1327
+ _context24.t0 = _context24["catch"](0);
1328
+ _Logger.default.warn("Delete failed with Mobius: ".concat(_context24.t0), {
1223
1329
  file: _constants2.REGISTRATION_FILE,
1224
1330
  method: _constants2.METHODS.DEREGISTER
1225
1331
  });
@@ -1228,9 +1334,9 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1228
1334
  this.setStatus(_types2.RegistrationStatus.INACTIVE);
1229
1335
  case 11:
1230
1336
  case "end":
1231
- return _context22.stop();
1337
+ return _context24.stop();
1232
1338
  }
1233
- }, _callee22, this, [[0, 6]]);
1339
+ }, _callee23, this, [[0, 6]]);
1234
1340
  }));
1235
1341
  function deregister() {
1236
1342
  return _deregister.apply(this, arguments);
@@ -1238,8 +1344,8 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1238
1344
  return deregister;
1239
1345
  }()
1240
1346
  /**
1241
- * Indicates whether the calling client is in a mode
1242
- * to retry registration.
1347
+ * Indicates whether the calling client is in a mode
1348
+ * to retry registration.
1243
1349
  */
1244
1350
  }, {
1245
1351
  key: "isRegRetry",
@@ -1294,10 +1400,10 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1294
1400
  }, {
1295
1401
  key: "reconnectOnFailure",
1296
1402
  value: (function () {
1297
- var _reconnectOnFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23(caller) {
1403
+ var _reconnectOnFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24(caller) {
1298
1404
  var abort;
1299
- return _regenerator.default.wrap(function _callee23$(_context23) {
1300
- while (1) switch (_context23.prev = _context23.next) {
1405
+ return _regenerator.default.wrap(function _callee24$(_context25) {
1406
+ while (1) switch (_context25.prev = _context25.next) {
1301
1407
  case 0:
1302
1408
  _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1303
1409
  method: _constants2.METHODS.RECONNECT_ON_FAILURE,
@@ -1305,25 +1411,25 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1305
1411
  });
1306
1412
  this.reconnectPending = false;
1307
1413
  if (this.isDeviceRegistered()) {
1308
- _context23.next = 14;
1414
+ _context25.next = 14;
1309
1415
  break;
1310
1416
  }
1311
1417
  if (!((0, _keys.default)(this.callManager.getActiveCalls()).length === 0)) {
1312
- _context23.next = 12;
1418
+ _context25.next = 12;
1313
1419
  break;
1314
1420
  }
1315
- _context23.next = 6;
1421
+ _context25.next = 6;
1316
1422
  return this.restorePreviousRegistration(caller);
1317
1423
  case 6:
1318
- abort = _context23.sent;
1424
+ abort = _context25.sent;
1319
1425
  if (!(!abort && !this.isDeviceRegistered())) {
1320
- _context23.next = 10;
1426
+ _context25.next = 10;
1321
1427
  break;
1322
1428
  }
1323
- _context23.next = 10;
1429
+ _context25.next = 10;
1324
1430
  return this.restartRegistration(caller);
1325
1431
  case 10:
1326
- _context23.next = 14;
1432
+ _context25.next = 14;
1327
1433
  break;
1328
1434
  case 12:
1329
1435
  this.reconnectPending = true;
@@ -1333,11 +1439,11 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1333
1439
  });
1334
1440
  case 14:
1335
1441
  case "end":
1336
- return _context23.stop();
1442
+ return _context25.stop();
1337
1443
  }
1338
- }, _callee23, this);
1444
+ }, _callee24, this);
1339
1445
  }));
1340
- function reconnectOnFailure(_x14) {
1446
+ function reconnectOnFailure(_x17) {
1341
1447
  return _reconnectOnFailure.apply(this, arguments);
1342
1448
  }
1343
1449
  return reconnectOnFailure;