@webex/calling 3.0.0-next.12 → 3.0.0-next.13

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 (57) hide show
  1. package/dist/CallingClient/CallingClient.js +16 -10
  2. package/dist/CallingClient/CallingClient.js.map +1 -1
  3. package/dist/CallingClient/CallingClient.test.js +25 -32
  4. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  5. package/dist/CallingClient/calling/call.test.js +2 -1
  6. package/dist/CallingClient/calling/call.test.js.map +1 -1
  7. package/dist/CallingClient/line/index.js +10 -11
  8. package/dist/CallingClient/line/index.js.map +1 -1
  9. package/dist/CallingClient/line/line.test.js +9 -9
  10. package/dist/CallingClient/line/line.test.js.map +1 -1
  11. package/dist/CallingClient/line/types.js +1 -7
  12. package/dist/CallingClient/line/types.js.map +1 -1
  13. package/dist/CallingClient/registration/register.js +50 -40
  14. package/dist/CallingClient/registration/register.js.map +1 -1
  15. package/dist/CallingClient/registration/register.test.js +28 -28
  16. package/dist/CallingClient/registration/register.test.js.map +1 -1
  17. package/dist/CallingClient/registration/types.js.map +1 -1
  18. package/dist/Errors/catalog/CallingDeviceError.js +1 -1
  19. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
  20. package/dist/Errors/catalog/LineError.js +2 -2
  21. package/dist/Errors/catalog/LineError.js.map +1 -1
  22. package/dist/Errors/types.js.map +1 -1
  23. package/dist/Metrics/index.test.js +1 -1
  24. package/dist/Metrics/index.test.js.map +1 -1
  25. package/dist/common/Utils.js +13 -14
  26. package/dist/common/Utils.js.map +1 -1
  27. package/dist/common/Utils.test.js +1 -1
  28. package/dist/common/Utils.test.js.map +1 -1
  29. package/dist/common/types.js +8 -7
  30. package/dist/common/types.js.map +1 -1
  31. package/dist/module/CallingClient/CallingClient.js +8 -5
  32. package/dist/module/CallingClient/line/index.js +7 -10
  33. package/dist/module/CallingClient/line/types.js +0 -5
  34. package/dist/module/CallingClient/registration/register.js +28 -20
  35. package/dist/module/Errors/catalog/CallingDeviceError.js +2 -2
  36. package/dist/module/Errors/catalog/LineError.js +2 -2
  37. package/dist/module/common/Utils.js +14 -15
  38. package/dist/module/common/types.js +6 -5
  39. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  40. package/dist/types/CallingClient/line/index.d.ts +4 -5
  41. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  42. package/dist/types/CallingClient/line/types.d.ts +2 -7
  43. package/dist/types/CallingClient/line/types.d.ts.map +1 -1
  44. package/dist/types/CallingClient/registration/register.d.ts +3 -3
  45. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  46. package/dist/types/CallingClient/registration/types.d.ts +3 -3
  47. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  48. package/dist/types/Errors/catalog/CallingDeviceError.d.ts +4 -4
  49. package/dist/types/Errors/catalog/CallingDeviceError.d.ts.map +1 -1
  50. package/dist/types/Errors/catalog/LineError.d.ts +4 -4
  51. package/dist/types/Errors/catalog/LineError.d.ts.map +1 -1
  52. package/dist/types/Errors/types.d.ts +2 -3
  53. package/dist/types/Errors/types.d.ts.map +1 -1
  54. package/dist/types/common/Utils.d.ts.map +1 -1
  55. package/dist/types/common/types.d.ts +3 -2
  56. package/dist/types/common/types.d.ts.map +1 -1
  57. package/package.json +1 -1
@@ -106,7 +106,7 @@ describe('Registration Tests', function () {
106
106
  expect(webex.request).toBeCalledOnceWith(_objectSpread(_objectSpread({}, mockResponse), {}, {
107
107
  method: 'POST'
108
108
  }));
109
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
109
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
110
110
  expect(lineEmitter).toBeCalledTimes(2);
111
111
  expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.CONNECTING);
112
112
  expect(lineEmitter).toBeCalledWith(_types4.LINE_EVENTS.REGISTERED, _registerFixtures.mockPostResponse);
@@ -131,8 +131,8 @@ describe('Registration Tests', function () {
131
131
  expect(webex.request).toBeCalledOnceWith(_objectSpread(_objectSpread({}, mockResponse), {}, {
132
132
  method: 'POST'
133
133
  }));
134
- error = (0, _LineError.createLineError)('User is unauthorized due to an expired token. Sign out, then sign back in.', {}, _types3.ERROR_TYPE.TOKEN_ERROR, _types4.LineStatus.INACTIVE);
135
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
134
+ error = (0, _LineError.createLineError)('User is unauthorized due to an expired token. Sign out, then sign back in.', {}, _types3.ERROR_TYPE.TOKEN_ERROR, _types.RegistrationStatus.INACTIVE);
135
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
136
136
  expect(lineEmitter).toBeCalledTimes(2);
137
137
  expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.CONNECTING);
138
138
  expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.ERROR, undefined, error);
@@ -164,7 +164,7 @@ describe('Registration Tests', function () {
164
164
  }
165
165
  });
166
166
  });
167
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
167
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
168
168
  _context3.next = 5;
169
169
  return reg.triggerRegistration();
170
170
  case 5:
@@ -179,7 +179,7 @@ describe('Registration Tests', function () {
179
179
  expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());
180
180
  expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());
181
181
  expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());
182
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
182
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
183
183
  expect(lineEmitter).toBeCalledTimes(4);
184
184
  expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.CONNECTING);
185
185
  expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.UNREGISTERED);
@@ -199,7 +199,7 @@ describe('Registration Tests', function () {
199
199
  jest.useFakeTimers();
200
200
  // try the primary twice and register successfully with backup servers
201
201
  webex.request.mockRejectedValueOnce(failurePayload).mockRejectedValueOnce(failurePayload).mockResolvedValueOnce(successPayload);
202
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
202
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
203
203
  _context4.next = 5;
204
204
  return reg.triggerRegistration();
205
205
  case 5:
@@ -216,7 +216,7 @@ describe('Registration Tests', function () {
216
216
  method: 'POST',
217
217
  uri: "".concat(mobiusUris.backup[0], "device")
218
218
  }));
219
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
219
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
220
220
  /* Active Url must match with the backup url as per the test */
221
221
  expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);
222
222
  case 13:
@@ -232,7 +232,7 @@ describe('Registration Tests', function () {
232
232
  jest.useFakeTimers();
233
233
  // try the primary twice and register successfully with backup servers
234
234
  webex.request.mockRejectedValue(failurePayload);
235
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
235
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.IDLE);
236
236
  _context5.next = 5;
237
237
  return reg.triggerRegistration();
238
238
  case 5:
@@ -263,7 +263,7 @@ describe('Registration Tests', function () {
263
263
  method: 'POST',
264
264
  uri: "".concat(mobiusUris.backup[1], "device")
265
265
  }));
266
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
266
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
267
267
  case 17:
268
268
  case "end":
269
269
  return _context5.stop();
@@ -295,7 +295,7 @@ describe('Registration Tests', function () {
295
295
 
296
296
  /* Active Url must match with the backup url as per the test */
297
297
  expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
298
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
298
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
299
299
  case 13:
300
300
  case "end":
301
301
  return _context6.stop();
@@ -331,7 +331,7 @@ describe('Registration Tests', function () {
331
331
  });
332
332
  expect(failbackRetry429Spy).toBeCalledOnceWith();
333
333
  expect(reg.failback429RetryAttempts).toBe(0);
334
- expect(reg.getStatus()).toBe(_types.MobiusStatus.DEFAULT);
334
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
335
335
  expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_429_RETRY_UTIL);
336
336
  expect(restartSpy).toBeCalledOnceWith(_constants.FAILBACK_429_RETRY_UTIL);
337
337
  expect(reg.failbackTimer).toBe(undefined);
@@ -358,7 +358,7 @@ describe('Registration Tests', function () {
358
358
  method: 'executeFailback',
359
359
  file: _constants.REGISTRATION_FILE
360
360
  });
361
- expect(reg.getStatus()).toBe(_types.MobiusStatus.DEFAULT);
361
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
362
362
  expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
363
363
  expect(restartSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
364
364
  expect(reg.rehomingIntervalMin).toBe(_constants.DEFAULT_REHOMING_INTERVAL_MIN);
@@ -389,7 +389,7 @@ describe('Registration Tests', function () {
389
389
  method: 'executeFailback',
390
390
  file: _constants.REGISTRATION_FILE
391
391
  });
392
- expect(reg.getStatus()).toBe(_types.MobiusStatus.DEFAULT);
392
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
393
393
  expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
394
394
  expect(restartSpy).not.toBeCalled();
395
395
  expect(reg.failbackTimer).toBe(undefined);
@@ -418,7 +418,7 @@ describe('Registration Tests', function () {
418
418
  });
419
419
  /* Active Url should still match backup url */
420
420
  expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
421
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
421
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
422
422
  expect(restoreSpy).toBeCalledOnceWith(_constants.FAILBACK_UTIL);
423
423
  expect(restartSpy).not.toBeCalled();
424
424
  expect(reg.rehomingIntervalMin).toBe(_constants.DEFAULT_REHOMING_INTERVAL_MIN);
@@ -447,7 +447,7 @@ describe('Registration Tests', function () {
447
447
 
448
448
  /* Active Url must now match with the primary url */
449
449
  expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);
450
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
450
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
451
451
  expect(reg.failbackTimer).toBe(undefined);
452
452
  expect(restoreSpy).not.toBeCalled();
453
453
  expect(reg.rehomingIntervalMin).toBe(_registerFixtures.mockPostResponse.rehomingIntervalMin);
@@ -479,7 +479,7 @@ describe('Registration Tests', function () {
479
479
 
480
480
  /* Active Url should still match backup url */
481
481
  expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);
482
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
482
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
483
483
  expect(restoreSpy).not.toBeCalled();
484
484
  expect(restartSpy).not.toBeCalled();
485
485
  expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {
@@ -514,7 +514,7 @@ describe('Registration Tests', function () {
514
514
  _context13.next = 4;
515
515
  return reg.triggerRegistration();
516
516
  case 4:
517
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
517
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
518
518
  case 5:
519
519
  case "end":
520
520
  return _context13.stop();
@@ -581,7 +581,7 @@ describe('Registration Tests', function () {
581
581
  method: 'startKeepaliveTimer',
582
582
  file: _constants.REGISTRATION_FILE
583
583
  });
584
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
584
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
585
585
  expect(reg.keepaliveTimer).toBe(timer);
586
586
  expect(lineEmitter).nthCalledWith(1, _types4.LINE_EVENTS.RECONNECTING);
587
587
  expect(lineEmitter).nthCalledWith(2, _types4.LINE_EVENTS.RECONNECTED);
@@ -607,7 +607,7 @@ describe('Registration Tests', function () {
607
607
  clearIntervalSpy = jest.spyOn(global, 'clearInterval');
608
608
  lineEmitter.mockClear();
609
609
  webex.request.mockRejectedValue(failurePayload);
610
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
610
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
611
611
  timer = reg.keepaliveTimer;
612
612
  jest.advanceTimersByTime(5 * _registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
613
613
  _context16.next = 12;
@@ -618,7 +618,7 @@ describe('Registration Tests', function () {
618
618
  // sendKeepAlive tries to retry 5 times before accepting failure
619
619
  // later 2 attempts to register with primary server
620
620
  expect(handleErrorSpy).toBeCalledTimes(7);
621
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.DEFAULT);
621
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.INACTIVE);
622
622
  expect(reg.reconnectPending).toStrictEqual(false);
623
623
  expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
624
624
  expect(restoreSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
@@ -663,7 +663,7 @@ describe('Registration Tests', function () {
663
663
  /* successful registration */
664
664
  // webex.request.mockResolvedValue(successPayload);
665
665
 
666
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
666
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
667
667
  url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';
668
668
  /* set active Url and expect the registration to restore to this url */
669
669
  reg.setActiveMobiusUrl(url);
@@ -674,7 +674,7 @@ describe('Registration Tests', function () {
674
674
  case 14:
675
675
  expect(clearIntervalSpy).toBeCalledOnceWith(timer);
676
676
  expect(handleErrorSpy).toBeCalledTimes(5);
677
- expect(reg.getStatus()).toEqual(_types.MobiusStatus.ACTIVE);
677
+ expect(reg.getStatus()).toEqual(_types.RegistrationStatus.ACTIVE);
678
678
  expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
679
679
  expect(restoreSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
680
680
  expect(restartRegSpy).not.toBeCalled();
@@ -703,14 +703,14 @@ describe('Registration Tests', function () {
703
703
  };
704
704
  clearIntervalSpy = jest.spyOn(global, 'clearInterval');
705
705
  webex.request.mockRejectedValueOnce(failurePayload).mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);
706
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
706
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
707
707
  timer = reg.keepaliveTimer; // sendKeepAlive tries to retry 3 times and receiving success on third time
708
708
  jest.advanceTimersByTime(3 * _registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
709
709
  _context18.next = 9;
710
710
  return flushPromises();
711
711
  case 9:
712
712
  expect(webex.request).toBeCalledTimes(3);
713
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
713
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
714
714
  expect(handleErrorSpy).toBeCalledTimes(2);
715
715
  expect(clearIntervalSpy).not.toBeCalled();
716
716
  expect(reg.keepaliveTimer).toBe(timer);
@@ -734,7 +734,7 @@ describe('Registration Tests', function () {
734
734
  };
735
735
  clearIntervalSpy = jest.spyOn(global, 'clearInterval');
736
736
  webex.request.mockRejectedValue(failurePayload);
737
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
737
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
738
738
 
739
739
  /* send one keepalive */
740
740
  jest.advanceTimersByTime(_registerFixtures.mockPostResponse.keepaliveInterval * _constants.SEC_TO_MSEC_MFACTOR);
@@ -742,7 +742,7 @@ describe('Registration Tests', function () {
742
742
  return flushPromises();
743
743
  case 10:
744
744
  expect(clearIntervalSpy).toBeCalledTimes(1);
745
- expect(reg.getStatus()).toBe(_types.MobiusStatus.DEFAULT);
745
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
746
746
  expect(reconnectSpy).not.toBeCalled();
747
747
  expect(restoreSpy).not.toBeCalled();
748
748
  expect(restartRegSpy).not.toBeCalled();
@@ -801,7 +801,7 @@ describe('Registration Tests', function () {
801
801
  expect(handleErrorSpy).toBeCalledTimes(5);
802
802
  expect(reg.keepaliveTimer).toStrictEqual(undefined);
803
803
  expect(reg.failbackTimer).toStrictEqual(undefined);
804
- expect(reg.getStatus()).toBe(_types.MobiusStatus.DEFAULT);
804
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
805
805
  expect(lineEmitter).lastCalledWith(_types4.LINE_EVENTS.UNREGISTERED);
806
806
  expect(reconnectSpy).toBeCalledOnceWith(_constants.KEEPALIVE_UTIL);
807
807
  expect(restoreSpy).not.toBeCalled();
@@ -819,7 +819,7 @@ describe('Registration Tests', function () {
819
819
  return reg.reconnectOnFailure(_constants.CALLS_CLEARED_HANDLER_UTIL);
820
820
  case 31:
821
821
  expect((0, _keys.default)(reg.callManager.getActiveCalls()).length).toBe(0);
822
- expect(reg.getStatus()).toBe(_types.MobiusStatus.ACTIVE);
822
+ expect(reg.getStatus()).toBe(_types.RegistrationStatus.ACTIVE);
823
823
  expect(reconnectSpy).toBeCalledOnceWith(_constants.CALLS_CLEARED_HANDLER_UTIL);
824
824
  expect(restoreSpy).toBeCalledOnceWith(_constants.CALLS_CLEARED_HANDLER_UTIL);
825
825
  expect(restartRegSpy).not.toBeCalled();
@@ -1 +1 @@
1
- {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","nodeInterop","_WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","_Object$defineProperty","_Object$getOwnPropertyDescriptor","key","Object","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","_Object$keys2","_Object$getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","webex","getTestUtilsWebex","MockServiceData","indicator","ServiceIndicator","CALLING","domain","logSpy","jest","spyOn","log","warnSpy","handleErrorSpy","describe","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","lineEmitter","fn","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","mockResponse","getMockRequestTemplate","uri","concat","primary","body","userId","internal","device","clientDeviceUri","url","serviceData","failurePayload","statusCode","mockPostResponse","failurePayload429","successPayload","reg","restartSpy","failbackRetry429Spy","restoreSpy","postRegistrationSpy","beforeEach","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","FAILBACK_429_RETRY_UTIL","afterEach","request","clearAllTimers","useRealTimers","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","mockReturnValueOnce","triggerRegistration","expect","toBeCalledOnceWith","method","getStatus","toEqual","MobiusStatus","ACTIVE","toBeCalledTimes","toBeCalledWith","LINE_EVENTS","CONNECTING","REGISTERED","stop","_callee2","error","_callee2$","_context2","mockRejectedValue","createLineError","ERROR_TYPE","TOKEN_ERROR","LineStatus","INACTIVE","DEFAULT","nthCalledWith","ERROR","undefined","_callee3","_callee3$","_context3","mockRejectedValueOnce","errorCode","devices","mockResolvedValueOnce","global","fetch","json","mockDeleteResponse","headers","anything","UNREGISTERED","_callee4","_callee4$","_context4","useFakeTimers","advanceTimersByTime","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","SEC_TO_MSEC_MFACTOR","getActiveMobiusUrl","_callee5","_callee5$","_context5","_callee6","_callee6$","_context6","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee7","_callee7$","_context7","MINUTES_TO_SEC_MFACTOR","file","REGISTRATION_FILE","failback429RetryAttempts","toBe","failbackTimer","_callee8","_callee8$","_context8","FAILBACK_UTIL","_callee9","finalErrorPayload","_callee9$","_context9","mockClear","not","toBeCalled","_callee10","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","_callee13","_callee13$","_context13","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee14","keepAlivePayload","funcSpy","_callee14$","_context14","mockReturnValue","keepaliveInterval","lastCalledWith","_callee15","timer","_callee15$","_context15","RECONNECTING","RECONNECTED","_callee16","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee16$","_context16","KEEPALIVE_UTIL","_callee17","_callee17$","_context17","setActiveMobiusUrl","toBeTruthy","_callee18","_callee18$","_context18","_callee19","_callee19$","_context19","service","_callee20","_callee20$","_context20","any","String","callCollection","reconnectOnFailure","CALLS_CLEARED_HANDLER_UTIL"],"sources":["register.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-shadow */\nimport {Mutex} from 'async-mutex';\nimport {createRegistration} from './register';\nimport {\n getMobiusDiscoveryResponse,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {MobiusStatus, ServiceIndicator, WebexRequestPayload} from '../../common/types';\nimport * as utils from '../../common/Utils';\nimport log from '../../Logger';\nimport {LOGGER} from '../../Logger/types';\nimport {URL, mockDeleteResponse, mockPostResponse} from './registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {ERROR_TYPE} from '../../Errors/types';\nimport {\n CALLS_CLEARED_HANDLER_UTIL,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_REHOMING_INTERVAL_MIN,\n FAILBACK_429_RETRY_UTIL,\n FAILBACK_UTIL,\n KEEPALIVE_UTIL,\n MINUTES_TO_SEC_MFACTOR,\n REGISTRATION_FILE,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n SEC_TO_MSEC_MFACTOR,\n} from '../constants';\nimport {ICall} from '../calling/types';\nimport {LINE_EVENTS, LineStatus} from '../line/types';\nimport {createLineError} from '../../Errors/catalog/LineError';\nimport {IRegistration} from './types';\n\nconst webex = getTestUtilsWebex();\nconst MockServiceData = {\n indicator: ServiceIndicator.CALLING,\n domain: '',\n};\nconst logSpy = jest.spyOn(log, 'info');\nconst warnSpy = jest.spyOn(log, 'warn');\nconst handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n\ndescribe('Registration Tests', () => {\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n const lineEmitter = jest.fn();\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n\n const mockResponse = {\n ...getMockRequestTemplate(),\n uri: `${mobiusUris.primary[0]}device`,\n body: {\n userId: webex.internal.device.userId,\n clientDeviceUri: webex.internal.device.url,\n serviceData: {\n domain: '',\n indicator: 'calling',\n },\n },\n };\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n body: mockPostResponse,\n });\n\n const failurePayload429 = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockPostResponse,\n });\n\n let reg: IRegistration;\n let restartSpy;\n let failbackRetry429Spy;\n let restoreSpy;\n let postRegistrationSpy;\n\n beforeEach(() => {\n const mutex = new Mutex();\n reg = createRegistration(webex, MockServiceData, mutex, lineEmitter, LOGGER.INFO);\n reg.setMobiusServers(mobiusUris.primary, mobiusUris.backup);\n jest.clearAllMocks();\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n failbackRetry429Spy = jest.spyOn(reg, FAILBACK_429_RETRY_UTIL);\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n postRegistrationSpy = jest.spyOn(reg, 'postRegistration');\n });\n\n afterEach(() => {\n webex.request = jest.fn();\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('verify successful registration', async () => {\n webex.request.mockReturnValueOnce({\n body: mockPostResponse,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.CONNECTING);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n it('verify failure registration', async () => {\n webex.request.mockRejectedValue({\n body: mockPostResponse,\n statusCode: 401,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n const error = createLineError(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.',\n {},\n ERROR_TYPE.TOKEN_ERROR,\n LineStatus.INACTIVE\n );\n\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.ERROR, undefined, error);\n });\n\n it('verify failure registration 403-101', async () => {\n webex.request\n .mockRejectedValueOnce({\n body: {\n userId: mockPostResponse.userId,\n errorCode: 101,\n devices: [mockPostResponse.device],\n },\n statusCode: 403,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockPostResponse,\n });\n\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n await reg.triggerRegistration();\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n });\n expect(global.fetch).toBeCalledOnceWith(mockPostResponse.device.uri, {\n method: 'DELETE',\n headers: expect.anything(),\n });\n\n expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());\n\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(4);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(3, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n describe('Registration failover tests', () => {\n it('verify unreachable primary with reachable backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('verify unreachable primary and backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /*\n * 2 calls for primary -> initial and after timer expiry.\n * 2 calls for each backup entry -> 2 * 2 = 4.\n * So a total of 6 calls to webex.request and handleErrors\n */\n expect(webex.request).toBeCalledTimes(6);\n expect(handleErrorSpy).toBeCalledTimes(6);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[1]}device`,\n });\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n });\n });\n\n describe('Registration failback tests', () => {\n beforeEach(async () => {\n /* keep keepalive as active so that it wont interfere with the failback tests */\n jest.spyOn(reg, 'postKeepAlive').mockResolvedValue(successPayload);\n jest.useFakeTimers();\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n reg.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n reg.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n\n /* These 2 calls to handleErrorSpy are for primary after which it fails over to backup */\n expect(handleErrorSpy).toBeCalledTimes(2);\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n });\n\n it('verify 429 error with failback to primary after initial registration with backup: Restore failure', async () => {\n // delete should be successful\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n postRegistrationSpy.mockRejectedValue(failurePayload429);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n expect(failbackRetry429Spy).toBeCalledOnceWith();\n expect(reg.failback429RetryAttempts).toBe(0);\n expect(reg.getStatus()).toBe(MobiusStatus.DEFAULT);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure', async () => {\n postRegistrationSpy.mockRejectedValue(failurePayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(MobiusStatus.DEFAULT);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure with final error', async () => {\n const finalErrorPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 401,\n body: mockPostResponse,\n });\n postRegistrationSpy.mockClear();\n postRegistrationSpy\n .mockRejectedValue(finalErrorPayload)\n .mockRejectedValueOnce(failurePayload);\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(MobiusStatus.DEFAULT);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore success', async () => {\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify successful failback to primary after initial registration with backup', async () => {\n postRegistrationSpy.mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url must now match with the primary url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(reg.failbackTimer).toBe(undefined);\n expect(restoreSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(mockPostResponse.rehomingIntervalMin);\n expect(reg.rehomingIntervalMax).toBe(mockPostResponse.rehomingIntervalMax);\n });\n\n it('verify unsuccessful failback attempt due to active call', async () => {\n /** create a new call */\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Active calls present, deferring failback to next cycle.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(restoreSpy).not.toBeCalled();\n expect(restartSpy).not.toBeCalled();\n\n expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: FAILBACK_UTIL,\n });\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n });\n\n // Keep-alive related test cases\n describe('Keep-alive Tests', () => {\n const logObj = {\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n };\n\n const mockKeepAliveBody = {device: mockPostResponse.device};\n\n beforeEach(async () => {\n postRegistrationSpy.mockResolvedValueOnce(successPayload);\n jest.useFakeTimers();\n await reg.triggerRegistration();\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n\n if (reg.keepaliveTimer) {\n clearInterval(reg.keepaliveTimer);\n reg.keepaliveTimer = undefined;\n }\n reg.reconnectPending = false;\n const calls = Object.values(reg.callManager.getActiveCalls()) as ICall[];\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('verify successful keep-alive cases', async () => {\n const keepAlivePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n webex.request.mockReturnValue(keepAlivePayload);\n\n const funcSpy = jest.spyOn(reg, 'postKeepAlive');\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(funcSpy).toBeCalledTimes(2); // should be called 2 times: first try and after the interval.\n expect(logSpy).lastCalledWith('Sent Keepalive, status: 200', logObj);\n });\n\n it('verify failure keep-alive cases: Retry Success', async () => {\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = {\n statusCode: 200,\n body: mockKeepAliveBody,\n };\n\n const timer = reg.keepaliveTimer;\n\n lineEmitter.mockClear();\n webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n method: 'startKeepaliveTimer',\n file: REGISTRATION_FILE,\n });\n\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(reg.keepaliveTimer).toBe(timer);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.RECONNECTED);\n expect(lineEmitter).toBeCalledTimes(2);\n });\n\n it('verify failure keep-alive cases: Restore failure', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n lineEmitter.mockClear();\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n\n // sendKeepAlive tries to retry 5 times before accepting failure\n // later 2 attempts to register with primary server\n expect(handleErrorSpy).toBeCalledTimes(7);\n expect(reg.getStatus()).toEqual(MobiusStatus.DEFAULT);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n\n expect(webex.request).toBeCalledTimes(7);\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(5, LINE_EVENTS.UNREGISTERED);\n\n /** there will be 2 registration attempts */\n expect(lineEmitter).nthCalledWith(6, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(7, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(8, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(9, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).toBeCalledTimes(9);\n });\n\n it('verify failure keep-alive cases: Restore Success', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n /* successful registration */\n // webex.request.mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n /* set active Url and expect the registration to restore to this url */\n reg.setActiveMobiusUrl(url);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.getStatus()).toEqual(MobiusStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n\n it('verify failure followed by recovery of keepalive', async () => {\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n // sendKeepAlive tries to retry 3 times and receiving success on third time\n jest.advanceTimersByTime(3 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(handleErrorSpy).toBeCalledTimes(2);\n expect(clearIntervalSpy).not.toBeCalled();\n expect(reg.keepaliveTimer).toBe(timer);\n });\n\n it('verify final error for keep-alive', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 404,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n\n /* send one keepalive */\n jest.advanceTimersByTime(mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledTimes(1);\n expect(reg.getStatus()).toBe(MobiusStatus.DEFAULT);\n expect(reconnectSpy).not.toBeCalled();\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(webex.request).toBeCalledOnceWith({\n headers: mockResponse.headers,\n uri: `${mockKeepAliveBody.device.uri}/status`,\n method: 'POST',\n service: mockResponse.service,\n });\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n });\n });\n\n it('verify failure keep-alive case with active call present: Restore Success after call ends', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n // jest.spyOn(callingClient['registration'], 'createDevice').mockResolvedValue(successPayload);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n reg.setActiveMobiusUrl(url);\n\n expect(reg.reconnectPending).toStrictEqual(false);\n\n const timer = reg.keepaliveTimer;\n\n /* add a call to the callManager */\n const call = reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n /* send one keepalive */\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.keepaliveTimer).toStrictEqual(undefined);\n expect(reg.failbackTimer).toStrictEqual(undefined);\n expect(reg.getStatus()).toBe(MobiusStatus.DEFAULT);\n expect(lineEmitter).lastCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(true);\n expect(logSpy).toBeCalledWith(\n 'Active call(s) present, deferred reconnect till call cleanup.',\n {file: REGISTRATION_FILE, method: expect.any(String)}\n );\n\n reconnectSpy.mockClear();\n\n /* simulate call disconnect and Calling client will trigger reconnect upon receiving disconnect event from CallManager */\n reg.callManager.callCollection = {};\n await reg.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n\n expect(reg.getStatus()).toBe(MobiusStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n });\n});\n"],"mappings":"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"}
1
+ {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","nodeInterop","_WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","default","cache","has","get","newObj","hasPropertyDescriptor","_Object$defineProperty","_Object$getOwnPropertyDescriptor","key","Object","prototype","hasOwnProperty","call","desc","set","ownKeys","object","enumerableOnly","keys","_Object$keys2","_Object$getOwnPropertySymbols","symbols","filter","sym","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","webex","getTestUtilsWebex","MockServiceData","indicator","ServiceIndicator","CALLING","domain","logSpy","jest","spyOn","log","warnSpy","handleErrorSpy","describe","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","lineEmitter","fn","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","mockResponse","getMockRequestTemplate","uri","concat","primary","body","userId","internal","device","clientDeviceUri","url","serviceData","failurePayload","statusCode","mockPostResponse","failurePayload429","successPayload","reg","restartSpy","failbackRetry429Spy","restoreSpy","postRegistrationSpy","beforeEach","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","FAILBACK_429_RETRY_UTIL","afterEach","request","clearAllTimers","useRealTimers","it","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","mockReturnValueOnce","triggerRegistration","expect","toBeCalledOnceWith","method","getStatus","toEqual","RegistrationStatus","ACTIVE","toBeCalledTimes","toBeCalledWith","LINE_EVENTS","CONNECTING","REGISTERED","stop","_callee2","error","_callee2$","_context2","mockRejectedValue","createLineError","ERROR_TYPE","TOKEN_ERROR","INACTIVE","nthCalledWith","ERROR","undefined","_callee3","_callee3$","_context3","mockRejectedValueOnce","errorCode","devices","mockResolvedValueOnce","global","fetch","json","mockDeleteResponse","IDLE","headers","anything","UNREGISTERED","_callee4","_callee4$","_context4","useFakeTimers","advanceTimersByTime","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","SEC_TO_MSEC_MFACTOR","getActiveMobiusUrl","_callee5","_callee5$","_context5","_callee6","_callee6$","_context6","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee7","_callee7$","_context7","MINUTES_TO_SEC_MFACTOR","file","REGISTRATION_FILE","failback429RetryAttempts","toBe","failbackTimer","_callee8","_callee8$","_context8","FAILBACK_UTIL","_callee9","finalErrorPayload","_callee9$","_context9","mockClear","not","toBeCalled","_callee10","_callee10$","_context10","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","_callee13","_callee13$","_context13","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee14","keepAlivePayload","funcSpy","_callee14$","_context14","mockReturnValue","keepaliveInterval","lastCalledWith","_callee15","timer","_callee15$","_context15","RECONNECTING","RECONNECTED","_callee16","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee16$","_context16","KEEPALIVE_UTIL","_callee17","_callee17$","_context17","setActiveMobiusUrl","toBeTruthy","_callee18","_callee18$","_context18","_callee19","_callee19$","_context19","service","_callee20","_callee20$","_context20","any","String","callCollection","reconnectOnFailure","CALLS_CLEARED_HANDLER_UTIL"],"sources":["register.test.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-shadow */\nimport {Mutex} from 'async-mutex';\nimport {createRegistration} from './register';\nimport {\n getMobiusDiscoveryResponse,\n getMockRequestTemplate,\n getTestUtilsWebex,\n} from '../../common/testUtil';\nimport {RegistrationStatus, ServiceIndicator, WebexRequestPayload} from '../../common/types';\nimport * as utils from '../../common/Utils';\nimport log from '../../Logger';\nimport {LOGGER} from '../../Logger/types';\nimport {URL, mockDeleteResponse, mockPostResponse} from './registerFixtures';\nimport {filterMobiusUris} from '../../common';\nimport {ERROR_TYPE} from '../../Errors/types';\nimport {\n CALLS_CLEARED_HANDLER_UTIL,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_REHOMING_INTERVAL_MIN,\n FAILBACK_429_RETRY_UTIL,\n FAILBACK_UTIL,\n KEEPALIVE_UTIL,\n MINUTES_TO_SEC_MFACTOR,\n REGISTRATION_FILE,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n SEC_TO_MSEC_MFACTOR,\n} from '../constants';\nimport {ICall} from '../calling/types';\nimport {LINE_EVENTS} from '../line/types';\nimport {createLineError} from '../../Errors/catalog/LineError';\nimport {IRegistration} from './types';\n\nconst webex = getTestUtilsWebex();\nconst MockServiceData = {\n indicator: ServiceIndicator.CALLING,\n domain: '',\n};\nconst logSpy = jest.spyOn(log, 'info');\nconst warnSpy = jest.spyOn(log, 'warn');\nconst handleErrorSpy = jest.spyOn(utils, 'handleRegistrationErrors');\n\ndescribe('Registration Tests', () => {\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n const lineEmitter = jest.fn();\n\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n\n const mockResponse = {\n ...getMockRequestTemplate(),\n uri: `${mobiusUris.primary[0]}device`,\n body: {\n userId: webex.internal.device.userId,\n clientDeviceUri: webex.internal.device.url,\n serviceData: {\n domain: '',\n indicator: 'calling',\n },\n },\n };\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 500,\n body: mockPostResponse,\n });\n\n const failurePayload429 = <WebexRequestPayload>(<unknown>{\n statusCode: 429,\n body: mockPostResponse,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockPostResponse,\n });\n\n let reg: IRegistration;\n let restartSpy;\n let failbackRetry429Spy;\n let restoreSpy;\n let postRegistrationSpy;\n\n beforeEach(() => {\n const mutex = new Mutex();\n reg = createRegistration(webex, MockServiceData, mutex, lineEmitter, LOGGER.INFO);\n reg.setMobiusServers(mobiusUris.primary, mobiusUris.backup);\n jest.clearAllMocks();\n restartSpy = jest.spyOn(reg, 'restartRegistration');\n failbackRetry429Spy = jest.spyOn(reg, FAILBACK_429_RETRY_UTIL);\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n postRegistrationSpy = jest.spyOn(reg, 'postRegistration');\n });\n\n afterEach(() => {\n webex.request = jest.fn();\n jest.clearAllTimers();\n jest.clearAllMocks();\n jest.useRealTimers();\n });\n\n it('verify successful registration', async () => {\n webex.request.mockReturnValueOnce({\n body: mockPostResponse,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.CONNECTING);\n expect(lineEmitter).toBeCalledWith(LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n it('verify failure registration', async () => {\n webex.request.mockRejectedValue({\n body: mockPostResponse,\n statusCode: 401,\n });\n\n await reg.triggerRegistration();\n\n expect(webex.request).toBeCalledOnceWith({\n ...mockResponse,\n method: 'POST',\n });\n\n const error = createLineError(\n 'User is unauthorized due to an expired token. Sign out, then sign back in.',\n {},\n ERROR_TYPE.TOKEN_ERROR,\n RegistrationStatus.INACTIVE\n );\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(lineEmitter).toBeCalledTimes(2);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.ERROR, undefined, error);\n });\n\n it('verify failure registration 403-101', async () => {\n webex.request\n .mockRejectedValueOnce({\n body: {\n userId: mockPostResponse.userId,\n errorCode: 101,\n devices: [mockPostResponse.device],\n },\n statusCode: 403,\n })\n .mockResolvedValueOnce({\n statusCode: 200,\n body: mockPostResponse,\n });\n\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n expect(webex.request).toBeCalledTimes(2);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n });\n expect(global.fetch).toBeCalledOnceWith(mockPostResponse.device.uri, {\n method: 'DELETE',\n headers: expect.anything(),\n });\n\n expect(warnSpy).toBeCalledWith('User device limit exceeded', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restoration in progress.', expect.anything());\n expect(logSpy).toBeCalledWith('Registration restored successfully.', expect.anything());\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(lineEmitter).toBeCalledTimes(4);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(3, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.REGISTERED, mockPostResponse);\n });\n\n describe('Registration failover tests', () => {\n it('verify unreachable primary with reachable backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n });\n\n it('verify unreachable primary and backup servers', async () => {\n jest.useFakeTimers();\n // try the primary twice and register successfully with backup servers\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.IDLE);\n await reg.triggerRegistration();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /*\n * 2 calls for primary -> initial and after timer expiry.\n * 2 calls for each backup entry -> 2 * 2 = 4.\n * So a total of 6 calls to webex.request and handleErrors\n */\n expect(webex.request).toBeCalledTimes(6);\n expect(handleErrorSpy).toBeCalledTimes(6);\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...mockResponse,\n method: 'POST',\n uri: `${mobiusUris.backup[1]}device`,\n });\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n });\n });\n\n describe('Registration failback tests', () => {\n beforeEach(async () => {\n /* keep keepalive as active so that it wont interfere with the failback tests */\n jest.spyOn(reg, 'postKeepAlive').mockResolvedValue(successPayload);\n jest.useFakeTimers();\n postRegistrationSpy\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(successPayload);\n\n await reg.triggerRegistration();\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n reg.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n reg.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n\n /* These 2 calls to handleErrorSpy are for primary after which it fails over to backup */\n expect(handleErrorSpy).toBeCalledTimes(2);\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n });\n\n it('verify 429 error with failback to primary after initial registration with backup: Restore failure', async () => {\n // delete should be successful\n global.fetch = jest.fn(() => Promise.resolve({json: () => mockDeleteResponse})) as jest.Mock;\n\n postRegistrationSpy.mockRejectedValue(failurePayload429);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n expect(failbackRetry429Spy).toBeCalledOnceWith();\n expect(reg.failback429RetryAttempts).toBe(0);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_429_RETRY_UTIL);\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure', async () => {\n postRegistrationSpy.mockRejectedValue(failurePayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore failure with final error', async () => {\n const finalErrorPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 401,\n body: mockPostResponse,\n });\n postRegistrationSpy.mockClear();\n postRegistrationSpy\n .mockRejectedValue(finalErrorPayload)\n .mockRejectedValueOnce(failurePayload);\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.failbackTimer).toBe(undefined);\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify unsuccessful failback to primary after initial registration with backup: Restore success', async () => {\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).toBeCalledOnceWith(FAILBACK_UTIL);\n expect(restartSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n\n it('verify successful failback to primary after initial registration with backup', async () => {\n postRegistrationSpy.mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Attempting failback to primary.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url must now match with the primary url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.primary[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.failbackTimer).toBe(undefined);\n expect(restoreSpy).not.toBeCalled();\n expect(reg.rehomingIntervalMin).toBe(mockPostResponse.rehomingIntervalMin);\n expect(reg.rehomingIntervalMax).toBe(mockPostResponse.rehomingIntervalMax);\n });\n\n it('verify unsuccessful failback attempt due to active call', async () => {\n /** create a new call */\n reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n postRegistrationSpy.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n /* Wait for failback to be triggered. */\n jest.advanceTimersByTime(\n reg.rehomingIntervalMax * MINUTES_TO_SEC_MFACTOR * SEC_TO_MSEC_MFACTOR\n );\n await flushPromises();\n\n expect(logSpy).toBeCalledWith(`Active calls present, deferring failback to next cycle.`, {\n method: 'executeFailback',\n file: REGISTRATION_FILE,\n });\n\n /* Active Url should still match backup url */\n expect(reg.getActiveMobiusUrl()).toStrictEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(restoreSpy).not.toBeCalled();\n expect(restartSpy).not.toBeCalled();\n\n expect(logSpy).toBeCalledWith('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: FAILBACK_UTIL,\n });\n expect(reg.rehomingIntervalMin).toBe(DEFAULT_REHOMING_INTERVAL_MIN);\n expect(reg.rehomingIntervalMax).toBe(DEFAULT_REHOMING_INTERVAL_MAX);\n });\n });\n\n // Keep-alive related test cases\n describe('Keep-alive Tests', () => {\n const logObj = {\n file: REGISTRATION_FILE,\n method: 'startKeepaliveTimer',\n };\n\n const mockKeepAliveBody = {device: mockPostResponse.device};\n\n beforeEach(async () => {\n postRegistrationSpy.mockResolvedValueOnce(successPayload);\n jest.useFakeTimers();\n await reg.triggerRegistration();\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n\n if (reg.keepaliveTimer) {\n clearInterval(reg.keepaliveTimer);\n reg.keepaliveTimer = undefined;\n }\n reg.reconnectPending = false;\n const calls = Object.values(reg.callManager.getActiveCalls()) as ICall[];\n\n calls.forEach((call) => {\n call.end();\n });\n });\n\n it('verify successful keep-alive cases', async () => {\n const keepAlivePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n webex.request.mockReturnValue(keepAlivePayload);\n\n const funcSpy = jest.spyOn(reg, 'postKeepAlive');\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n expect(funcSpy).toBeCalledTimes(2); // should be called 2 times: first try and after the interval.\n expect(logSpy).lastCalledWith('Sent Keepalive, status: 200', logObj);\n });\n\n it('verify failure keep-alive cases: Retry Success', async () => {\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = {\n statusCode: 200,\n body: mockKeepAliveBody,\n };\n\n const timer = reg.keepaliveTimer;\n\n lineEmitter.mockClear();\n webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(2 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n method: 'startKeepaliveTimer',\n file: REGISTRATION_FILE,\n });\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reg.keepaliveTimer).toBe(timer);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(2, LINE_EVENTS.RECONNECTED);\n expect(lineEmitter).toBeCalledTimes(2);\n });\n\n it('verify failure keep-alive cases: Restore failure', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n lineEmitter.mockClear();\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n\n // sendKeepAlive tries to retry 5 times before accepting failure\n // later 2 attempts to register with primary server\n expect(handleErrorSpy).toBeCalledTimes(7);\n expect(reg.getStatus()).toEqual(RegistrationStatus.INACTIVE);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n\n expect(webex.request).toBeCalledTimes(7);\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(lineEmitter).nthCalledWith(1, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(4, LINE_EVENTS.RECONNECTING);\n expect(lineEmitter).nthCalledWith(5, LINE_EVENTS.UNREGISTERED);\n\n /** there will be 2 registration attempts */\n expect(lineEmitter).nthCalledWith(6, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(7, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).nthCalledWith(8, LINE_EVENTS.CONNECTING);\n expect(lineEmitter).nthCalledWith(9, LINE_EVENTS.UNREGISTERED);\n expect(lineEmitter).toBeCalledTimes(9);\n });\n\n it('verify failure keep-alive cases: Restore Success', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n /* successful registration */\n // webex.request.mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n /* set active Url and expect the registration to restore to this url */\n reg.setActiveMobiusUrl(url);\n\n const timer = reg.keepaliveTimer;\n\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.getStatus()).toEqual(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n\n it('verify failure followed by recovery of keepalive', async () => {\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n const timer = reg.keepaliveTimer;\n\n // sendKeepAlive tries to retry 3 times and receiving success on third time\n jest.advanceTimersByTime(3 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(handleErrorSpy).toBeCalledTimes(2);\n expect(clearIntervalSpy).not.toBeCalled();\n expect(reg.keepaliveTimer).toBe(timer);\n });\n\n it('verify final error for keep-alive', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 404,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request.mockRejectedValue(failurePayload);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n\n /* send one keepalive */\n jest.advanceTimersByTime(mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledTimes(1);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reconnectSpy).not.toBeCalled();\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(webex.request).toBeCalledOnceWith({\n headers: mockResponse.headers,\n uri: `${mockKeepAliveBody.device.uri}/status`,\n method: 'POST',\n service: mockResponse.service,\n });\n expect(reg.keepaliveTimer).toBe(undefined);\n expect(handleErrorSpy).toBeCalledOnceWith(failurePayload, expect.anything(), {\n file: REGISTRATION_FILE,\n method: KEEPALIVE_UTIL,\n });\n });\n\n it('verify failure keep-alive case with active call present: Restore Success after call ends', async () => {\n const restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n const restartRegSpy = jest.spyOn(reg, 'restartRegistration');\n const reconnectSpy = jest.spyOn(reg, 'reconnectOnFailure');\n const failurePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 503,\n body: mockKeepAliveBody,\n });\n\n const successPayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: mockKeepAliveBody,\n });\n\n const clearIntervalSpy = jest.spyOn(global, 'clearInterval');\n\n webex.request\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValue(successPayload);\n\n // jest.spyOn(callingClient['registration'], 'createDevice').mockResolvedValue(successPayload);\n\n const url = 'https://mobius.asydm-m-1.prod.infra.webex.com/api/v1';\n\n reg.setActiveMobiusUrl(url);\n\n expect(reg.reconnectPending).toStrictEqual(false);\n\n const timer = reg.keepaliveTimer;\n\n /* add a call to the callManager */\n const call = reg.callManager.createCall();\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(1);\n\n /* send one keepalive */\n jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(handleErrorSpy).toBeCalledTimes(5);\n expect(reg.keepaliveTimer).toStrictEqual(undefined);\n expect(reg.failbackTimer).toStrictEqual(undefined);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(lineEmitter).lastCalledWith(LINE_EVENTS.UNREGISTERED);\n expect(reconnectSpy).toBeCalledOnceWith(KEEPALIVE_UTIL);\n expect(restoreSpy).not.toBeCalled();\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(true);\n expect(logSpy).toBeCalledWith(\n 'Active call(s) present, deferred reconnect till call cleanup.',\n {file: REGISTRATION_FILE, method: expect.any(String)}\n );\n\n reconnectSpy.mockClear();\n\n /* simulate call disconnect and Calling client will trigger reconnect upon receiving disconnect event from CallManager */\n reg.callManager.callCollection = {};\n await reg.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n expect(reconnectSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restoreSpy).toBeCalledOnceWith(CALLS_CLEARED_HANDLER_UTIL);\n expect(restartRegSpy).not.toBeCalled();\n expect(reg.reconnectPending).toStrictEqual(false);\n expect(reg.getActiveMobiusUrl()).toStrictEqual(url);\n expect(reg.keepaliveTimer).toBeTruthy();\n expect(reg.keepaliveTimer).not.toBe(timer);\n });\n });\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {IDeviceInfo, MobiusStatus} from '../../common/types';\n\nexport type Header = {\n [key: string]: string;\n};\n\nexport type restoreRegistrationCallBack = (\n restoreData: IDeviceInfo,\n caller: string\n) => Promise<boolean>;\n\n/**\n * Represents an interface for managing registration-related operations.\n */\nexport interface IRegistration {\n /**\n * Sets the primary and backup Mobius server URLs.\n *\n * @param primaryMobiusUris - An array of primary Mobius server URLs.\n * @param backupMobiusUris - An array of backup Mobius server URLs.\n */\n setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]): void;\n\n /**\n * Triggers the registration process with the given list of servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n triggerRegistration(): Promise<void>;\n\n /**\n * Checks if the device is currently registered.\n *\n */\n isDeviceRegistered(): boolean;\n\n /**\n * Sets the status of the registration.\n *\n * @param value - The registration status to set.\n */\n setStatus(value: MobiusStatus): void;\n\n /**\n * Retrieves the current registration status.\n *\n */\n getStatus(): MobiusStatus;\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n getDeviceInfo(): IDeviceInfo;\n\n /**\n * Clears the keep-alive timer used for registration.\n */\n clearKeepaliveTimer(): void;\n\n /**\n * Deregisters the device.\n */\n deregister(): void;\n\n /**\n * Sets the active Mobius server URL to use for registration.\n *\n * @param url - The Mobius server URL to set as active.\n */\n setActiveMobiusUrl(url: string): void;\n\n /**\n * Retrieves the active Mobius server URL.\n *\n */\n getActiveMobiusUrl(): string;\n\n /**\n * Attempts to reconnect after a connection failure.\n *\n * @param caller - The caller's identifier for reconnection.\n */\n reconnectOnFailure(caller: string): Promise<void>;\n\n /**\n * Checks if a reconnection attempt is pending.\n *\n */\n isReconnectPending(): boolean;\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n * @param retry - Set to `true` to trigger a retry after restoration.\n */\n handleConnectionRestoration(retry: boolean): Promise<boolean>;\n}\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import {IDeviceInfo, RegistrationStatus} from '../../common/types';\n\nexport type Header = {\n [key: string]: string;\n};\n\nexport type restoreRegistrationCallBack = (\n restoreData: IDeviceInfo,\n caller: string\n) => Promise<boolean>;\n\n/**\n * Represents an interface for managing registration-related operations.\n */\nexport interface IRegistration {\n /**\n * Sets the primary and backup Mobius server URLs.\n *\n * @param primaryMobiusUris - An array of primary Mobius server URLs.\n * @param backupMobiusUris - An array of backup Mobius server URLs.\n */\n setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]): void;\n\n /**\n * Triggers the registration process with the given list of servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n triggerRegistration(): Promise<void>;\n\n /**\n * Checks if the device is currently registered.\n *\n */\n isDeviceRegistered(): boolean;\n\n /**\n * Sets the status of the registration.\n *\n * @param value - The registration status to set.\n */\n setStatus(value: RegistrationStatus): void;\n\n /**\n * Retrieves the current registration status.\n *\n */\n getStatus(): RegistrationStatus;\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n getDeviceInfo(): IDeviceInfo;\n\n /**\n * Clears the keep-alive timer used for registration.\n */\n clearKeepaliveTimer(): void;\n\n /**\n * Deregisters the device.\n */\n deregister(): void;\n\n /**\n * Sets the active Mobius server URL to use for registration.\n *\n * @param url - The Mobius server URL to set as active.\n */\n setActiveMobiusUrl(url: string): void;\n\n /**\n * Retrieves the active Mobius server URL.\n *\n */\n getActiveMobiusUrl(): string;\n\n /**\n * Attempts to reconnect after a connection failure.\n *\n * @param caller - The caller's identifier for reconnection.\n */\n reconnectOnFailure(caller: string): Promise<void>;\n\n /**\n * Checks if a reconnection attempt is pending.\n *\n */\n isReconnectPending(): boolean;\n\n /**\n * Restores the connection and attempts refreshing existing registration with server.\n * Allows retry if not restored in the first attempt.\n *\n * @param retry - Set to `true` to trigger a retry after restoration.\n */\n handleConnectionRestoration(retry: boolean): Promise<boolean>;\n}\n"],"mappings":""}
@@ -36,7 +36,7 @@ var CallingClientError = /*#__PURE__*/function (_ExtendedError) {
36
36
  var _this;
37
37
  (0, _classCallCheck2.default)(this, CallingClientError);
38
38
  _this = _super.call(this, msg, context, type);
39
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "status", _types.MobiusStatus.DEFAULT);
39
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "status", _types.RegistrationStatus.INACTIVE);
40
40
  _this.status = status;
41
41
  return _this;
42
42
  }