@webex/calling 3.5.0-next.12 → 3.5.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.
@@ -60,6 +60,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
60
60
  (0, _defineProperty2.default)(this, "registerRetry", false);
61
61
  (0, _defineProperty2.default)(this, "reconnectPending", false);
62
62
  (0, _defineProperty2.default)(this, "isCCFlow", false);
63
+ (0, _defineProperty2.default)(this, "failoverImmediately", false);
63
64
  this.sdkConnector = _SDKConnector.default;
64
65
  this.serviceData = serviceData;
65
66
  this.isCCFlow = serviceData.indicator === _types3.ServiceIndicator.CONTACT_CENTER;
@@ -362,7 +363,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
362
363
  excessVal = timeElapsed + interval - TIMER_THRESHOLD;
363
364
  interval -= excessVal;
364
365
  }
365
- if (!(interval > _constants.BASE_REG_RETRY_TIMER_VAL_IN_SEC)) {
366
+ if (!(interval > _constants.BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately)) {
366
367
  _context10.next = 12;
367
368
  break;
368
369
  }
@@ -401,17 +402,18 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
401
402
  }, _callee7);
402
403
  })), interval * _constants.SEC_TO_MSEC_MFACTOR);
403
404
  _Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
404
- _context10.next = 21;
405
+ _context10.next = 22;
405
406
  break;
406
407
  case 12:
407
408
  if (!this.backupMobiusUris.length) {
408
- _context10.next = 20;
409
+ _context10.next = 21;
409
410
  break;
410
411
  }
411
412
  _Logger.default.log('Failing over to backup servers.', loggerContext);
412
- _context10.next = 16;
413
+ this.failoverImmediately = false;
414
+ _context10.next = 17;
413
415
  return this.attemptRegistrationWithServers(this.startFailoverTimer.name, this.backupMobiusUris);
414
- case 16:
416
+ case 17:
415
417
  abort = _context10.sent;
416
418
  if (!abort && !this.isDeviceRegistered()) {
417
419
  interval = this.getRegRetryInterval();
@@ -447,13 +449,13 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
447
449
  })), interval * _constants.SEC_TO_MSEC_MFACTOR);
448
450
  _Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
449
451
  }
450
- _context10.next = 21;
452
+ _context10.next = 22;
451
453
  break;
452
- case 20:
454
+ case 21:
453
455
  (0, _common.emitFinalFailure)(function (clientError) {
454
456
  _this.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
455
457
  }, loggerContext);
456
- case 21:
458
+ case 22:
457
459
  case "end":
458
460
  return _context10.stop();
459
461
  }
@@ -919,8 +921,14 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
919
921
  case 0:
920
922
  servers = _args19.length > 1 && _args19[1] !== undefined ? _args19[1] : this.primaryMobiusUris;
921
923
  abort = false;
924
+ if (!this.failoverImmediately) {
925
+ _context19.next = 4;
926
+ break;
927
+ }
928
+ return _context19.abrupt("return", abort);
929
+ case 4:
922
930
  if (!this.isDeviceRegistered()) {
923
- _context19.next = 5;
931
+ _context19.next = 7;
924
932
  break;
925
933
  }
926
934
  _Logger.default.log("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), {
@@ -928,17 +936,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
928
936
  method: this.attemptRegistrationWithServers.name
929
937
  });
930
938
  return _context19.abrupt("return", abort);
931
- case 5:
939
+ case 7:
932
940
  _iterator = _createForOfIteratorHelper(servers);
933
- _context19.prev = 6;
941
+ _context19.prev = 8;
934
942
  _iterator.s();
935
- case 8:
943
+ case 10:
936
944
  if ((_step = _iterator.n()).done) {
937
- _context19.next = 53;
945
+ _context19.next = 55;
938
946
  break;
939
947
  }
940
948
  url = _step.value;
941
- _context19.prev = 10;
949
+ _context19.prev = 12;
942
950
  abort = false;
943
951
  this.registrationStatus = _types3.RegistrationStatus.INACTIVE;
944
952
  this.lineEmitter(_types4.LINE_EVENTS.CONNECTING);
@@ -947,9 +955,9 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
947
955
  method: this.attemptRegistrationWithServers.name
948
956
  });
949
957
  // eslint-disable-next-line no-await-in-loop
950
- _context19.next = 17;
958
+ _context19.next = 19;
951
959
  return this.postRegistration(url);
952
- case 17:
960
+ case 19:
953
961
  resp = _context19.sent;
954
962
  this.deviceInfo = resp.body;
955
963
  this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
@@ -960,12 +968,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
960
968
  this.metricManager.submitRegistrationMetric(_types2.METRIC_EVENT.REGISTRATION, _types2.REG_ACTION.REGISTER, _types2.METRIC_TYPE.BEHAVIORAL, undefined);
961
969
  this.startKeepaliveTimer((_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.uri, this.deviceInfo.keepaliveInterval);
962
970
  this.initiateFailback();
963
- return _context19.abrupt("break", 53);
964
- case 30:
965
- _context19.prev = 30;
966
- _context19.t0 = _context19["catch"](10);
971
+ return _context19.abrupt("break", 55);
972
+ case 32:
973
+ _context19.prev = 32;
974
+ _context19.t0 = _context19["catch"](12);
967
975
  body = _context19.t0; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
968
- _context19.next = 35;
976
+ _context19.next = 37;
969
977
  return (0, _common.handleRegistrationErrors)(body, function (clientError, finalError) {
970
978
  if (finalError) {
971
979
  _this6.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
@@ -977,60 +985,60 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
977
985
  method: this.attemptRegistrationWithServers.name,
978
986
  file: _constants.REGISTRATION_FILE
979
987
  }, this.restoreRegistrationCallBack());
980
- case 35:
988
+ case 37:
981
989
  abort = _context19.sent;
982
990
  if (!(this.registrationStatus === _types3.RegistrationStatus.ACTIVE)) {
983
- _context19.next = 39;
991
+ _context19.next = 41;
984
992
  break;
985
993
  }
986
994
  _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(this.activeMobiusUrl), {
987
995
  file: _constants.REGISTRATION_FILE,
988
996
  method: this.attemptRegistrationWithServers.name
989
997
  });
990
- return _context19.abrupt("break", 53);
991
- case 39:
998
+ return _context19.abrupt("break", 55);
999
+ case 41:
992
1000
  if (!abort) {
993
- _context19.next = 44;
1001
+ _context19.next = 46;
994
1002
  break;
995
1003
  }
996
1004
  this.setStatus(_types3.RegistrationStatus.INACTIVE);
997
- return _context19.abrupt("break", 53);
998
- case 44:
1005
+ return _context19.abrupt("break", 55);
1006
+ case 46:
999
1007
  if (!(caller === this.executeFailback.name)) {
1000
- _context19.next = 51;
1008
+ _context19.next = 53;
1001
1009
  break;
1002
1010
  }
1003
1011
  error = body.statusCode;
1004
1012
  if (!(error === _types.ERROR_CODE.TOO_MANY_REQUESTS)) {
1005
- _context19.next = 51;
1013
+ _context19.next = 53;
1006
1014
  break;
1007
1015
  }
1008
- _context19.next = 49;
1016
+ _context19.next = 51;
1009
1017
  return this.scheduleFailback429Retry();
1010
- case 49:
1011
- abort = true;
1012
- return _context19.abrupt("break", 53);
1013
1018
  case 51:
1014
- _context19.next = 8;
1015
- break;
1019
+ abort = true;
1020
+ return _context19.abrupt("break", 55);
1016
1021
  case 53:
1017
- _context19.next = 58;
1022
+ _context19.next = 10;
1018
1023
  break;
1019
1024
  case 55:
1020
- _context19.prev = 55;
1021
- _context19.t1 = _context19["catch"](6);
1025
+ _context19.next = 60;
1026
+ break;
1027
+ case 57:
1028
+ _context19.prev = 57;
1029
+ _context19.t1 = _context19["catch"](8);
1022
1030
  _iterator.e(_context19.t1);
1023
- case 58:
1024
- _context19.prev = 58;
1031
+ case 60:
1032
+ _context19.prev = 60;
1025
1033
  _iterator.f();
1026
- return _context19.finish(58);
1027
- case 61:
1034
+ return _context19.finish(60);
1035
+ case 63:
1028
1036
  return _context19.abrupt("return", abort);
1029
- case 62:
1037
+ case 64:
1030
1038
  case "end":
1031
1039
  return _context19.stop();
1032
1040
  }
1033
- }, _callee19, this, [[6, 55, 58, 61], [10, 30]]);
1041
+ }, _callee19, this, [[8, 57, 60, 63], [12, 32]]);
1034
1042
  }));
1035
1043
  function attemptRegistrationWithServers(_x11) {
1036
1044
  return _attemptRegistrationWithServers.apply(this, arguments);
@@ -1065,7 +1073,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1065
1073
  while (1) switch (_context20.prev = _context20.next) {
1066
1074
  case 0:
1067
1075
  if (!(_this7.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD)) {
1068
- _context20.next = 29;
1076
+ _context20.next = 30;
1069
1077
  break;
1070
1078
  }
1071
1079
  _context20.prev = 1;
@@ -1078,7 +1086,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1078
1086
  _this7.lineEmitter(_types4.LINE_EVENTS.RECONNECTED);
1079
1087
  }
1080
1088
  keepAliveRetryCount = 0;
1081
- _context20.next = 29;
1089
+ _context20.next = 30;
1082
1090
  break;
1083
1091
  case 10:
1084
1092
  _context20.prev = 10;
@@ -1099,25 +1107,26 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1099
1107
  case 17:
1100
1108
  abort = _context20.sent;
1101
1109
  if (!(abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1102
- _context20.next = 28;
1110
+ _context20.next = 29;
1103
1111
  break;
1104
1112
  }
1113
+ _this7.failoverImmediately = _this7.isCCFlow;
1105
1114
  _this7.setStatus(_types3.RegistrationStatus.INACTIVE);
1106
1115
  _this7.clearKeepaliveTimer();
1107
1116
  _this7.clearFailbackTimer();
1108
1117
  _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1109
1118
  if (abort) {
1110
- _context20.next = 26;
1119
+ _context20.next = 27;
1111
1120
  break;
1112
1121
  }
1113
- _context20.next = 26;
1122
+ _context20.next = 27;
1114
1123
  return _this7.reconnectOnFailure(_this7.startKeepaliveTimer.name);
1115
- case 26:
1116
- _context20.next = 29;
1124
+ case 27:
1125
+ _context20.next = 30;
1117
1126
  break;
1118
- case 28:
1119
- _this7.lineEmitter(_types4.LINE_EVENTS.RECONNECTING);
1120
1127
  case 29:
1128
+ _this7.lineEmitter(_types4.LINE_EVENTS.RECONNECTING);
1129
+ case 30:
1121
1130
  case "end":
1122
1131
  return _context20.stop();
1123
1132
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_uuid","require","_types","_common","_types2","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types3","_constants","_types4","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","Registration","exports","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","isCCFlow","indicator","ServiceIndicator","CONTACT_CENTER","getWebex","setWebex","userId","internal","device","registrationStatus","RegistrationStatus","IDLE","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","abrupt","request","uri","HTTP_METHODS","POST","headers","CISCO_DEVICE_URL","SPARK_USER_AGENT","CALLING_USER_AGENT","service","ALLOWED_SERVICES","MOBIUS","stop","postKeepAlive","_x","apply","arguments","_deleteRegistration","_callee2","deviceId","deviceUrl","_response","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","t5","t6","credentials","getUserToken","t7","sent","t8","t9","WEBEX_WEB_CLIENT","uuid","t10","t11","t12","t13","t14","t15","warn","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_scheduleFailback429Retry","_callee5","interval","_callee5$","_context5","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","FAILBACK_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","isDeviceRegistered","restartRegistration","scheduleFailback429Retry","attempt","undefined","BASE_REG_RETRY_TIMER_VAL_IN_SEC","Math","pow","BASE_REG_TIMER_MFACTOR","floor","random","REG_RANDOM_T_FACTOR_UPPER_LIMIT","SEC_TO_MSEC_MFACTOR","_startFailoverTimer","_callee10","_this","timeElapsed","loggerContext","TIMER_THRESHOLD","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","_now","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","_callee9","_callee9$","_context9","_callee8","_callee8$","_context8","emitFinalFailure","clientError","ERROR","failbackTimer","clearTimeout","isFailbackRequired","indexOf","getFailbackInterval","initiateFailback","intervalInMinutes","MINUTES_TO_SEC_MFACTOR","intervalInSeconds","_this2","_callee11","_callee11$","_context11","executeFailback","_executeFailback","_callee13","_this3","_callee13$","_context13","_callee12","abortNew","_callee12$","_context12","_keys","getActiveCalls","deregister","FAILBACK_UTIL","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","_restartRegistration","_callee14","_callee14$","_context14","_x7","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x8","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x9","_x10","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","resp","error","_args19","_callee19$","_context19","CONNECTING","REGISTERED","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","statusCode","ERROR_CODE","TOO_MANY_REQUESTS","finish","_x11","_this7","keepAliveRetryCount","RETRY_COUNT_THRESHOLD","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","_callee20$","_context20","RECONNECTED","KEEPALIVE_FAILURE","reconnectOnFailure","RECONNECTING","clearInterval","isReconnectPending","reconnectPending","_deregister","_callee22","_this$deviceInfo$devi2","_this$deviceInfo$devi3","_callee22$","_context22","registerRetry","devices","DEFAULT_KEEPALIVE_INTERVAL","stringToReplace","replace","_reconnectOnFailure","_callee23","_callee23$","_context23","_x12","createRegistration"],"sources":["register.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {ERROR_CODE} from '../../Errors/types';\nimport {emitFinalFailure, handleRegistrationErrors} from '../../common';\n\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, REG_ACTION} from '../../Metrics/types';\nimport {getMetricManager} from '../../Metrics';\nimport {ICallManager} from '../calling/types';\nimport {getCallManager} from '../calling';\nimport {LOGGER} from '../../Logger/types';\nimport log from '../../Logger';\nimport {IRegistration} from './types';\nimport SDKConnector from '../../SDKConnector';\nimport {\n ALLOWED_SERVICES,\n HTTP_METHODS,\n IDeviceInfo,\n RegistrationStatus,\n ServiceData,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {ISDKConnector, WebexSDK} from '../../SDKConnector/types';\nimport {\n CALLING_USER_AGENT,\n CISCO_DEVICE_URL,\n DEVICES_ENDPOINT_RESOURCE,\n SPARK_USER_AGENT,\n WEBEX_WEB_CLIENT,\n BASE_REG_RETRY_TIMER_VAL_IN_SEC,\n BASE_REG_TIMER_MFACTOR,\n SEC_TO_MSEC_MFACTOR,\n REG_RANDOM_T_FACTOR_UPPER_LIMIT,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n MINUTES_TO_SEC_MFACTOR,\n FAILBACK_429_RETRY_UTIL,\n REG_FAILBACK_429_MAX_RETRIES,\n FAILBACK_UTIL,\n REGISTRATION_FILE,\n DEFAULT_REHOMING_INTERVAL_MIN,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_KEEPALIVE_INTERVAL,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n} from '../constants';\nimport {LINE_EVENTS, LineEmitterCallback} from '../line/types';\nimport {LineError} from '../../Errors/catalog/LineError';\n\n/**\n *\n */\nexport class Registration implements IRegistration {\n private sdkConnector: ISDKConnector;\n\n private webex: WebexSDK;\n\n private userId = '';\n\n private serviceData: ServiceData;\n\n private failback429RetryAttempts: number;\n private registrationStatus: RegistrationStatus;\n private failbackTimer?: NodeJS.Timer;\n private activeMobiusUrl!: string;\n\n private keepaliveTimer: NodeJS.Timer | undefined;\n private rehomingIntervalMin: number;\n\n private rehomingIntervalMax: number;\n private mutex: Mutex;\n private metricManager: IMetricManager;\n private lineEmitter: LineEmitterCallback;\n private callManager: ICallManager;\n private deviceInfo: IDeviceInfo = {};\n private primaryMobiusUris: string[];\n private backupMobiusUris: string[];\n private registerRetry = false;\n private reconnectPending = false;\n private isCCFlow = false;\n\n /**\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n ) {\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\n this.isCCFlow = serviceData.indicator === ServiceIndicator.CONTACT_CENTER;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n this.webex = this.sdkConnector.getWebex();\n this.userId = this.webex.internal.device.userId;\n this.registrationStatus = RegistrationStatus.IDLE;\n this.failback429RetryAttempts = 0;\n log.setLogger(logLevel, REGISTRATION_FILE);\n this.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n this.mutex = mutex;\n this.callManager = getCallManager(this.webex, serviceData.indicator);\n this.metricManager = getMetricManager(this.webex, serviceData.indicator);\n this.lineEmitter = lineEmitter;\n\n this.primaryMobiusUris = [];\n this.backupMobiusUris = [];\n }\n\n public getActiveMobiusUrl(): string {\n return this.activeMobiusUrl;\n }\n\n public setActiveMobiusUrl(url: string) {\n log.info(`ActiveMobiusUrl: ${url}`, {method: 'setActiveMobiusUrl', file: REGISTRATION_FILE});\n this.activeMobiusUrl = url;\n this.callManager.updateActiveMobius(url);\n }\n\n public setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]) {\n this.primaryMobiusUris = primaryMobiusUris;\n this.backupMobiusUris = backupMobiusUris;\n }\n\n /**\n * Implementation of sending keepalive.\n *\n */\n private async postKeepAlive(url: string) {\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}/status`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: this.webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Implementation of delete device.\n *\n */\n private async deleteRegistration(url: string, deviceId: string, deviceUrl: string) {\n let response;\n try {\n response = await fetch(`${url}${DEVICES_ENDPOINT_RESOURCE}/${deviceId}`, {\n method: HTTP_METHODS.DELETE,\n headers: {\n [CISCO_DEVICE_URL]: deviceUrl,\n Authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${WEBEX_WEB_CLIENT}_${uuid()}`,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n } catch (error) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.setStatus(RegistrationStatus.INACTIVE);\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n return <WebexRequestPayload>response?.json();\n }\n\n /**\n * Implementation of POST request for device registration.\n *\n */\n private async postRegistration(url: string) {\n const deviceInfo = {\n userId: this.userId,\n clientDeviceUri: this.webex.internal.device.url,\n serviceData: this.serviceData,\n };\n\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}device`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: deviceInfo.clientDeviceUri,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n body: deviceInfo,\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Re-attempts registration with the mobius url it was last registered\n * to, that mobius url is expected to be updated already in this.activeMobiusUrl.\n */\n private async restorePreviousRegistration(caller: string): Promise<boolean> {\n let abort = false;\n\n if (this.activeMobiusUrl) {\n abort = await this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);\n }\n\n return abort;\n }\n\n /**\n * When a failback request is rejected with 429, it means the\n * request did not even land on primary mobius to know if it\n * can handle this device registration now, in such cases this\n * method is called to retry sooner than the rehoming timer value.\n */\n private async scheduleFailback429Retry() {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\n }\n this.clearFailbackTimer();\n this.failback429RetryAttempts += 1;\n log.log(`Received 429 while rehoming, 429 retry count : ${this.failback429RetryAttempts}`, {\n file: REGISTRATION_FILE,\n method: FAILBACK_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n const abort = await this.restorePreviousRegistration(FAILBACK_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(FAILBACK_429_RETRY_UTIL);\n }\n }\n\n /**\n * Calculates and returns a random interval value using input argument\n * attempt as the variable factor.\n *\n * attempted already.\n */\n private getRegRetryInterval(attempt = 1): number {\n return (\n BASE_REG_RETRY_TIMER_VAL_IN_SEC +\n BASE_REG_TIMER_MFACTOR ** attempt +\n Math.floor(\n (Math.random() * (REG_RANDOM_T_FACTOR_UPPER_LIMIT - SEC_TO_MSEC_MFACTOR + 1) +\n SEC_TO_MSEC_MFACTOR) /\n SEC_TO_MSEC_MFACTOR\n )\n );\n }\n\n /**\n * Schedules registration retry with primary mobius servers at a random\n * interval calculated based on the number of times registration retry is already done\n * Once the time taken since the beginning of retry attempt exceeds the\n * retry threshold, it switches over to backup mobius servers.\n *\n */\n private async startFailoverTimer(attempt = 1, timeElapsed = 0) {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: this.startFailoverTimer.name,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n const TIMER_THRESHOLD = this.isCCFlow\n ? REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC\n : REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n if (timeElapsed + interval > TIMER_THRESHOLD) {\n const excessVal = timeElapsed + interval - TIMER_THRESHOLD;\n\n interval -= excessVal;\n }\n\n let abort;\n\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(this.startFailoverTimer.name);\n const currentTime = Math.floor(Date.now() / 1000);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(\n `Scheduled retry with primary in ${interval} seconds, number of attempts : ${attempt}`,\n loggerContext\n );\n } else if (this.backupMobiusUris.length) {\n log.log('Failing over to backup servers.', loggerContext);\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(`Scheduled retry with backup servers in ${interval} seconds.`, loggerContext);\n }\n } else {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n }\n\n /**\n * Clears the failback timer if running.\n */\n private clearFailbackTimer() {\n if (this.failbackTimer) {\n clearTimeout(this.failbackTimer);\n this.failbackTimer = undefined;\n }\n }\n\n /**\n * Returns true if device is registered with a backup mobius.\n */\n private isFailbackRequired(): boolean {\n return this.isDeviceRegistered() && this.primaryMobiusUris.indexOf(this.activeMobiusUrl) === -1;\n }\n\n /**\n * Calculates and returns a random value between rehomingIntervalMin and\n * rehomingIntervalMax.\n */\n private getFailbackInterval(): number {\n return Math.floor(\n Math.random() * (this.rehomingIntervalMax - this.rehomingIntervalMin + 1) +\n this.rehomingIntervalMin\n );\n }\n\n /**\n * Starts failback timer to move to primary mobius if device\n * is registered with a backup mobius.\n */\n private initiateFailback() {\n if (this.isFailbackRequired()) {\n if (!this.failbackTimer) {\n this.failback429RetryAttempts = 0;\n const intervalInMinutes = this.getFailbackInterval();\n\n this.startFailbackTimer(intervalInMinutes * MINUTES_TO_SEC_MFACTOR);\n }\n } else {\n this.failback429RetryAttempts = 0;\n this.clearFailbackTimer();\n }\n }\n\n /**\n * Starts failback timer with the interval value received.\n *\n */\n private startFailbackTimer(intervalInSeconds: number) {\n this.failbackTimer = setTimeout(\n async () => this.executeFailback(),\n intervalInSeconds * SEC_TO_MSEC_MFACTOR\n );\n log.log(`Failback scheduled after ${intervalInSeconds} seconds.`, {\n file: REGISTRATION_FILE,\n method: this.startFailbackTimer.name,\n });\n }\n\n /**\n * Core logic for the failback processing, scheduled and executed\n * at failback timer expiry.\n */\n private async executeFailback() {\n await this.mutex.runExclusive(async () => {\n if (this.isFailbackRequired()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n log.info(`Attempting failback to primary.`, {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n await this.deregister();\n const abort = await this.attemptRegistrationWithServers(FAILBACK_UTIL);\n if (!abort && !this.isDeviceRegistered()) {\n const abortNew = await this.restorePreviousRegistration(FAILBACK_UTIL);\n\n if (abortNew) {\n this.clearFailbackTimer();\n\n return;\n }\n\n if (!this.isDeviceRegistered()) {\n await this.restartRegistration(this.executeFailback.name);\n } else {\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n } else {\n log.info('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n });\n }\n\n /**\n * Updates rehomingIntervalMin and rehomingIntervalMax values\n * if received in registration response from a primary mobius\n * server.\n *\n */\n private setIntervalValues(deviceInfo: IDeviceInfo) {\n if (this.primaryMobiusUris.indexOf(this.activeMobiusUrl) !== -1) {\n this.rehomingIntervalMin = deviceInfo?.rehomingIntervalMin\n ? deviceInfo.rehomingIntervalMin\n : DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = deviceInfo?.rehomingIntervalMax\n ? deviceInfo.rehomingIntervalMax\n : DEFAULT_REHOMING_INTERVAL_MAX;\n }\n }\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n public getDeviceInfo(): IDeviceInfo {\n return this.deviceInfo;\n }\n\n /**\n * Checks if the device is currently registered.\n *\n * by checking if isRegistered state is set to\n * ACTIVE, else false.\n */\n public isDeviceRegistered(): boolean {\n return this.registrationStatus === RegistrationStatus.ACTIVE;\n }\n\n public getStatus(): RegistrationStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: RegistrationStatus) {\n this.registrationStatus = value;\n }\n\n /**\n * Start fresh registration cycle with the mobius\n * server list already present.\n *\n */\n private async restartRegistration(caller: string) {\n /*\n * Cancel any failback timer running\n * and start fresh registration attempt with retry as true.\n */\n this.clearFailbackTimer();\n this.failback429RetryAttempts = 0;\n const abort = await this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer();\n }\n }\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 */\n public async handleConnectionRestoration(retry: boolean): Promise<boolean> {\n await this.mutex.runExclusive(async () => {\n /* Check retry once again to see if another timer thread has not finished the job already. */\n if (retry) {\n log.info('Mercury connection is up again, re-registering with Webex Calling if needed', {\n file: REGISTRATION_FILE,\n method: this.handleConnectionRestoration.name,\n });\n this.clearKeepaliveTimer();\n if (this.isDeviceRegistered()) {\n // eslint-disable-next-line no-await-in-loop\n await this.deregister();\n }\n\n /*\n * Do not attempt registration if mobius url is not set in this.activeMobiusUrl\n * as that'd mean initial registration itself is not finished yet, let\n * failover timer handle the registration in that case.\n */\n if (this.activeMobiusUrl) {\n /*\n * When restoring connectivity, register with same url first\n * where it was registered last even if it was a backup url,\n * because failback timer may already be running to register\n * it back to primary.\n */\n const abort = await this.restorePreviousRegistration(\n this.handleConnectionRestoration.name\n );\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(this.handleConnectionRestoration.name);\n }\n }\n retry = false;\n }\n });\n\n return retry;\n }\n\n /**\n * Callback function for restoring registration in case of failure during initial registration\n * due to device registration already exists.\n *\n */\n private restoreRegistrationCallBack() {\n return async (restoreData: IDeviceInfo, caller: string) => {\n const logContext = {file: REGISTRATION_FILE, method: caller};\n if (!this.isRegRetry()) {\n log.info('Registration restoration in progress.', logContext);\n const restore = this.getExistingDevice(restoreData);\n\n if (restore) {\n this.setRegRetry(true);\n await this.deregister();\n const finalError = await this.restorePreviousRegistration(caller);\n this.setRegRetry(false);\n if (this.isDeviceRegistered()) {\n log.info('Registration restored successfully.', logContext);\n }\n\n return finalError;\n }\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n\n return false;\n };\n }\n\n /**\n * Triggers the registration with the given list of Mobius servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n public async triggerRegistration() {\n if (this.primaryMobiusUris.length > 0) {\n const abort = await this.attemptRegistrationWithServers(\n this.triggerRegistration.name,\n this.primaryMobiusUris\n );\n\n if (!this.isDeviceRegistered() && !abort) {\n await this.startFailoverTimer();\n }\n }\n }\n\n /**\n * Attempts registration with the server list received in\n * argument one by one until registration either succeeds with\n * one or all of them are tried.\n *\n * attempt has hit a final error and a retry should not be scheduled\n * else false.\n */\n private async attemptRegistrationWithServers(\n caller: string,\n servers: string[] = this.primaryMobiusUris\n ): Promise<boolean> {\n let abort = false;\n\n if (this.isDeviceRegistered()) {\n log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n\n return abort;\n }\n for (const url of servers) {\n try {\n abort = false;\n this.registrationStatus = RegistrationStatus.INACTIVE;\n this.lineEmitter(LINE_EVENTS.CONNECTING);\n log.log(`[${caller}] : Mobius url to contact: ${url}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n // eslint-disable-next-line no-await-in-loop\n const resp = await this.postRegistration(url);\n this.deviceInfo = resp.body as IDeviceInfo;\n this.registrationStatus = RegistrationStatus.ACTIVE;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.setActiveMobiusUrl(url);\n this.setIntervalValues(this.deviceInfo);\n this.metricManager.setDeviceInfo(this.deviceInfo);\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n undefined\n );\n this.startKeepaliveTimer(\n this.deviceInfo.device?.uri as string,\n this.deviceInfo.keepaliveInterval as number\n );\n this.initiateFailback();\n break;\n } catch (err: unknown) {\n const body = err as WebexRequestPayload;\n\n // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars\n abort = await handleRegistrationErrors(\n body,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION_ERROR,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.attemptRegistrationWithServers.name, file: REGISTRATION_FILE},\n this.restoreRegistrationCallBack()\n );\n if (this.registrationStatus === RegistrationStatus.ACTIVE) {\n log.info(\n `[${caller}] : Device is already restored, active mobius url: ${this.activeMobiusUrl}`,\n {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n }\n );\n break;\n }\n if (abort) {\n this.setStatus(RegistrationStatus.INACTIVE);\n break;\n } else if (caller === this.executeFailback.name) {\n const error = body.statusCode;\n\n if (error === ERROR_CODE.TOO_MANY_REQUESTS) {\n // eslint-disable-next-line no-await-in-loop\n await this.scheduleFailback429Retry();\n abort = true;\n break;\n }\n }\n }\n }\n\n return abort;\n }\n\n /**\n * This method sets up a timer to periodically send keep-alive requests to maintain a connection.\n * It handles retries, error handling, and re-registration attempts based on the response, ensuring continuous connectivity with the server.\n */\n private startKeepaliveTimer(url: string, interval: number) {\n let keepAliveRetryCount = 0;\n this.clearKeepaliveTimer();\n const RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;\n\n this.keepaliveTimer = setInterval(async () => {\n const logContext = {\n file: REGISTRATION_FILE,\n method: this.startKeepaliveTimer.name,\n };\n await this.mutex.runExclusive(async () => {\n if (this.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD) {\n try {\n const res = await this.postKeepAlive(url);\n log.info(`Sent Keepalive, status: ${res.statusCode}`, logContext);\n if (keepAliveRetryCount > 0) {\n this.lineEmitter(LINE_EVENTS.RECONNECTED);\n }\n keepAliveRetryCount = 0;\n } catch (err: unknown) {\n keepAliveRetryCount += 1;\n const error = <WebexRequestPayload>err;\n\n log.warn(\n `Keep-alive missed ${keepAliveRetryCount} times. Status -> ${error.statusCode} `,\n logContext\n );\n\n const abort = await handleRegistrationErrors(\n error,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.KEEPALIVE_FAILURE,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.startKeepaliveTimer.name, file: REGISTRATION_FILE}\n );\n\n if (abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD) {\n this.setStatus(RegistrationStatus.INACTIVE);\n this.clearKeepaliveTimer();\n this.clearFailbackTimer();\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n if (!abort) {\n /* In case of non-final error, re-attempt registration */\n await this.reconnectOnFailure(this.startKeepaliveTimer.name);\n }\n } else {\n this.lineEmitter(LINE_EVENTS.RECONNECTING);\n }\n }\n }\n });\n }, interval * 1000);\n }\n\n /**\n * Clears the keepalive timer if running.\n */\n public clearKeepaliveTimer() {\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = undefined;\n }\n }\n\n public isReconnectPending(): boolean {\n return this.reconnectPending;\n }\n\n public async deregister() {\n try {\n await this.deleteRegistration(\n this.activeMobiusUrl as string,\n this.deviceInfo.device?.deviceId as string,\n this.deviceInfo.device?.clientDeviceUri as string\n );\n } catch (err) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.clearKeepaliveTimer();\n this.setStatus(RegistrationStatus.INACTIVE);\n }\n\n /**\n * Indicates whether the calling client is in a mode\n * to retry registration.\n */\n private isRegRetry(): boolean {\n return this.registerRetry;\n }\n\n /**\n * Sets the received value in instance variable\n * registerRetry for registration retry cases.\n *\n */\n private setRegRetry(value: boolean) {\n this.registerRetry = value;\n }\n\n /**\n * Restores the deviceInfo object in callingClient when receiving a 403 with error code 101.\n *\n */\n private getExistingDevice(restoreData: IDeviceInfo) {\n if (restoreData.devices && restoreData.devices.length > 0) {\n this.deviceInfo = {\n userId: restoreData.userId,\n device: restoreData.devices[0],\n keepaliveInterval: DEFAULT_KEEPALIVE_INTERVAL,\n rehomingIntervalMax: DEFAULT_REHOMING_INTERVAL_MAX,\n rehomingIntervalMin: DEFAULT_REHOMING_INTERVAL_MIN,\n };\n\n const stringToReplace = `${DEVICES_ENDPOINT_RESOURCE}/${restoreData.devices[0].deviceId}`;\n\n const uri = restoreData.devices[0].uri.replace(stringToReplace, '');\n this.setActiveMobiusUrl(uri);\n this.registrationStatus = RegistrationStatus.ACTIVE;\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Invoked to re-register in cases when the registration\n * is lost due to some failure.\n * If there are active calls, it will only mark reconnectPending\n * as true and then retry will happen when this method gets\n * invoked again on receiving all calls cleared event from\n * callManager.\n *\n */\n public async reconnectOnFailure(caller: string) {\n this.reconnectPending = false;\n if (!this.isDeviceRegistered()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n const abort = await this.restorePreviousRegistration(caller);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(caller);\n }\n } else {\n this.reconnectPending = true;\n log.info('Active call(s) present, deferred reconnect till call cleanup.', {\n file: REGISTRATION_FILE,\n method: this.reconnectOnFailure.name,\n });\n }\n }\n }\n}\n\n/*\n */\nexport const createRegistration = (\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel);\n"],"mappings":"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"}
1
+ {"version":3,"names":["_uuid","require","_types","_common","_types2","_Metrics","_calling","_Logger","_interopRequireDefault","_SDKConnector","_types3","_constants","_types4","_createForOfIteratorHelper","o","allowArrayLike","it","_Symbol","_Symbol$iterator","_Array$isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","_Array$from","test","arr","len","arr2","Array","Registration","exports","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","isCCFlow","indicator","ServiceIndicator","CONTACT_CENTER","getWebex","setWebex","userId","internal","device","registrationStatus","RegistrationStatus","IDLE","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","abrupt","request","uri","HTTP_METHODS","POST","headers","CISCO_DEVICE_URL","SPARK_USER_AGENT","CALLING_USER_AGENT","service","ALLOWED_SERVICES","MOBIUS","stop","postKeepAlive","_x","apply","arguments","_deleteRegistration","_callee2","deviceId","deviceUrl","_response","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","t5","t6","credentials","getUserToken","t7","sent","t8","t9","WEBEX_WEB_CLIENT","uuid","t10","t11","t12","t13","t14","t15","warn","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","deviceInfo","_callee3$","_context3","clientDeviceUri","body","postRegistration","_x5","_restorePreviousRegistration","_callee4","caller","abort","_callee4$","_context4","attemptRegistrationWithServers","restorePreviousRegistration","_x6","_scheduleFailback429Retry","_callee5","interval","_callee5$","_context5","REG_FAILBACK_429_MAX_RETRIES","clearFailbackTimer","FAILBACK_429_RETRY_UTIL","getRegRetryInterval","startFailbackTimer","isDeviceRegistered","restartRegistration","scheduleFailback429Retry","attempt","undefined","BASE_REG_RETRY_TIMER_VAL_IN_SEC","Math","pow","BASE_REG_TIMER_MFACTOR","floor","random","REG_RANDOM_T_FACTOR_UPPER_LIMIT","SEC_TO_MSEC_MFACTOR","_startFailoverTimer","_callee10","_this","timeElapsed","loggerContext","TIMER_THRESHOLD","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","REG_TRY_BACKUP_TIMER_VAL_IN_SEC","failoverImmediately","_now","setTimeout","_callee7","_callee7$","_context7","runExclusive","_callee6","currentTime","_callee6$","_context6","_callee9","_callee9$","_context9","_callee8","_callee8$","_context8","emitFinalFailure","clientError","ERROR","failbackTimer","clearTimeout","isFailbackRequired","indexOf","getFailbackInterval","initiateFailback","intervalInMinutes","MINUTES_TO_SEC_MFACTOR","intervalInSeconds","_this2","_callee11","_callee11$","_context11","executeFailback","_executeFailback","_callee13","_this3","_callee13$","_context13","_callee12","abortNew","_callee12$","_context12","_keys","getActiveCalls","deregister","FAILBACK_UTIL","setIntervalValues","getDeviceInfo","ACTIVE","getStatus","_restartRegistration","_callee14","_callee14$","_context14","_x7","_handleConnectionRestoration","_callee16","retry","_this4","_callee16$","_context16","_callee15","_callee15$","_context15","handleConnectionRestoration","clearKeepaliveTimer","_x8","restoreRegistrationCallBack","_this5","_ref8","_callee17","restoreData","logContext","restore","finalError","_callee17$","_context17","isRegRetry","getExistingDevice","setRegRetry","_x9","_x10","_triggerRegistration","_callee18","_callee18$","_context18","triggerRegistration","_attemptRegistrationWithServers","_callee19","_this6","servers","_iterator","_step","_this$deviceInfo$devi","resp","error","_args19","_callee19$","_context19","CONNECTING","REGISTERED","setDeviceInfo","submitRegistrationMetric","METRIC_EVENT","REGISTRATION","REG_ACTION","REGISTER","METRIC_TYPE","BEHAVIORAL","startKeepaliveTimer","keepaliveInterval","handleRegistrationErrors","REGISTRATION_ERROR","statusCode","ERROR_CODE","TOO_MANY_REQUESTS","finish","_x11","_this7","keepAliveRetryCount","RETRY_COUNT_THRESHOLD","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","_callee20$","_context20","RECONNECTED","KEEPALIVE_FAILURE","reconnectOnFailure","RECONNECTING","clearInterval","isReconnectPending","reconnectPending","_deregister","_callee22","_this$deviceInfo$devi2","_this$deviceInfo$devi3","_callee22$","_context22","registerRetry","devices","DEFAULT_KEEPALIVE_INTERVAL","stringToReplace","replace","_reconnectOnFailure","_callee23","_callee23$","_context23","_x12","createRegistration"],"sources":["register.ts"],"sourcesContent":["import {v4 as uuid} from 'uuid';\nimport {Mutex} from 'async-mutex';\nimport {ERROR_CODE} from '../../Errors/types';\nimport {emitFinalFailure, handleRegistrationErrors} from '../../common';\n\nimport {IMetricManager, METRIC_EVENT, METRIC_TYPE, REG_ACTION} from '../../Metrics/types';\nimport {getMetricManager} from '../../Metrics';\nimport {ICallManager} from '../calling/types';\nimport {getCallManager} from '../calling';\nimport {LOGGER} from '../../Logger/types';\nimport log from '../../Logger';\nimport {IRegistration} from './types';\nimport SDKConnector from '../../SDKConnector';\nimport {\n ALLOWED_SERVICES,\n HTTP_METHODS,\n IDeviceInfo,\n RegistrationStatus,\n ServiceData,\n ServiceIndicator,\n WebexRequestPayload,\n} from '../../common/types';\nimport {ISDKConnector, WebexSDK} from '../../SDKConnector/types';\nimport {\n CALLING_USER_AGENT,\n CISCO_DEVICE_URL,\n DEVICES_ENDPOINT_RESOURCE,\n SPARK_USER_AGENT,\n WEBEX_WEB_CLIENT,\n BASE_REG_RETRY_TIMER_VAL_IN_SEC,\n BASE_REG_TIMER_MFACTOR,\n SEC_TO_MSEC_MFACTOR,\n REG_RANDOM_T_FACTOR_UPPER_LIMIT,\n REG_TRY_BACKUP_TIMER_VAL_IN_SEC,\n MINUTES_TO_SEC_MFACTOR,\n FAILBACK_429_RETRY_UTIL,\n REG_FAILBACK_429_MAX_RETRIES,\n FAILBACK_UTIL,\n REGISTRATION_FILE,\n DEFAULT_REHOMING_INTERVAL_MIN,\n DEFAULT_REHOMING_INTERVAL_MAX,\n DEFAULT_KEEPALIVE_INTERVAL,\n REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC,\n} from '../constants';\nimport {LINE_EVENTS, LineEmitterCallback} from '../line/types';\nimport {LineError} from '../../Errors/catalog/LineError';\n\n/**\n *\n */\nexport class Registration implements IRegistration {\n private sdkConnector: ISDKConnector;\n\n private webex: WebexSDK;\n\n private userId = '';\n\n private serviceData: ServiceData;\n\n private failback429RetryAttempts: number;\n private registrationStatus: RegistrationStatus;\n private failbackTimer?: NodeJS.Timer;\n private activeMobiusUrl!: string;\n\n private keepaliveTimer: NodeJS.Timer | undefined;\n private rehomingIntervalMin: number;\n\n private rehomingIntervalMax: number;\n private mutex: Mutex;\n private metricManager: IMetricManager;\n private lineEmitter: LineEmitterCallback;\n private callManager: ICallManager;\n private deviceInfo: IDeviceInfo = {};\n private primaryMobiusUris: string[];\n private backupMobiusUris: string[];\n private registerRetry = false;\n private reconnectPending = false;\n private isCCFlow = false;\n private failoverImmediately = false;\n\n /**\n */\n constructor(\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n ) {\n this.sdkConnector = SDKConnector;\n this.serviceData = serviceData;\n this.isCCFlow = serviceData.indicator === ServiceIndicator.CONTACT_CENTER;\n\n if (!this.sdkConnector.getWebex()) {\n SDKConnector.setWebex(webex);\n }\n this.webex = this.sdkConnector.getWebex();\n this.userId = this.webex.internal.device.userId;\n this.registrationStatus = RegistrationStatus.IDLE;\n this.failback429RetryAttempts = 0;\n log.setLogger(logLevel, REGISTRATION_FILE);\n this.rehomingIntervalMin = DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = DEFAULT_REHOMING_INTERVAL_MAX;\n this.mutex = mutex;\n this.callManager = getCallManager(this.webex, serviceData.indicator);\n this.metricManager = getMetricManager(this.webex, serviceData.indicator);\n this.lineEmitter = lineEmitter;\n\n this.primaryMobiusUris = [];\n this.backupMobiusUris = [];\n }\n\n public getActiveMobiusUrl(): string {\n return this.activeMobiusUrl;\n }\n\n public setActiveMobiusUrl(url: string) {\n log.info(`ActiveMobiusUrl: ${url}`, {method: 'setActiveMobiusUrl', file: REGISTRATION_FILE});\n this.activeMobiusUrl = url;\n this.callManager.updateActiveMobius(url);\n }\n\n public setMobiusServers(primaryMobiusUris: string[], backupMobiusUris: string[]) {\n this.primaryMobiusUris = primaryMobiusUris;\n this.backupMobiusUris = backupMobiusUris;\n }\n\n /**\n * Implementation of sending keepalive.\n *\n */\n private async postKeepAlive(url: string) {\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}/status`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: this.webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Implementation of delete device.\n *\n */\n private async deleteRegistration(url: string, deviceId: string, deviceUrl: string) {\n let response;\n try {\n response = await fetch(`${url}${DEVICES_ENDPOINT_RESOURCE}/${deviceId}`, {\n method: HTTP_METHODS.DELETE,\n headers: {\n [CISCO_DEVICE_URL]: deviceUrl,\n Authorization: await this.webex.credentials.getUserToken(),\n trackingId: `${WEBEX_WEB_CLIENT}_${uuid()}`,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n } catch (error) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.setStatus(RegistrationStatus.INACTIVE);\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n return <WebexRequestPayload>response?.json();\n }\n\n /**\n * Implementation of POST request for device registration.\n *\n */\n private async postRegistration(url: string) {\n const deviceInfo = {\n userId: this.userId,\n clientDeviceUri: this.webex.internal.device.url,\n serviceData: this.serviceData,\n };\n\n return <WebexRequestPayload>this.webex.request({\n uri: `${url}device`,\n method: HTTP_METHODS.POST,\n headers: {\n [CISCO_DEVICE_URL]: deviceInfo.clientDeviceUri,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n body: deviceInfo,\n service: ALLOWED_SERVICES.MOBIUS,\n });\n }\n\n /**\n * Re-attempts registration with the mobius url it was last registered\n * to, that mobius url is expected to be updated already in this.activeMobiusUrl.\n */\n private async restorePreviousRegistration(caller: string): Promise<boolean> {\n let abort = false;\n\n if (this.activeMobiusUrl) {\n abort = await this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);\n }\n\n return abort;\n }\n\n /**\n * When a failback request is rejected with 429, it means the\n * request did not even land on primary mobius to know if it\n * can handle this device registration now, in such cases this\n * method is called to retry sooner than the rehoming timer value.\n */\n private async scheduleFailback429Retry() {\n if (this.failback429RetryAttempts >= REG_FAILBACK_429_MAX_RETRIES) {\n return;\n }\n this.clearFailbackTimer();\n this.failback429RetryAttempts += 1;\n log.log(`Received 429 while rehoming, 429 retry count : ${this.failback429RetryAttempts}`, {\n file: REGISTRATION_FILE,\n method: FAILBACK_429_RETRY_UTIL,\n });\n const interval = this.getRegRetryInterval(this.failback429RetryAttempts);\n\n this.startFailbackTimer(interval);\n const abort = await this.restorePreviousRegistration(FAILBACK_429_RETRY_UTIL);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(FAILBACK_429_RETRY_UTIL);\n }\n }\n\n /**\n * Calculates and returns a random interval value using input argument\n * attempt as the variable factor.\n *\n * attempted already.\n */\n private getRegRetryInterval(attempt = 1): number {\n return (\n BASE_REG_RETRY_TIMER_VAL_IN_SEC +\n BASE_REG_TIMER_MFACTOR ** attempt +\n Math.floor(\n (Math.random() * (REG_RANDOM_T_FACTOR_UPPER_LIMIT - SEC_TO_MSEC_MFACTOR + 1) +\n SEC_TO_MSEC_MFACTOR) /\n SEC_TO_MSEC_MFACTOR\n )\n );\n }\n\n /**\n * Schedules registration retry with primary mobius servers at a random\n * interval calculated based on the number of times registration retry is already done\n * Once the time taken since the beginning of retry attempt exceeds the\n * retry threshold, it switches over to backup mobius servers.\n *\n */\n private async startFailoverTimer(attempt = 1, timeElapsed = 0) {\n const loggerContext = {\n file: REGISTRATION_FILE,\n method: this.startFailoverTimer.name,\n };\n\n let interval = this.getRegRetryInterval(attempt);\n\n const TIMER_THRESHOLD = this.isCCFlow\n ? REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC\n : REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\n\n if (timeElapsed + interval > TIMER_THRESHOLD) {\n const excessVal = timeElapsed + interval - TIMER_THRESHOLD;\n\n interval -= excessVal;\n }\n\n let abort;\n\n if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately) {\n const scheduledTime = Math.floor(Date.now() / 1000);\n\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(this.startFailoverTimer.name);\n const currentTime = Math.floor(Date.now() / 1000);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(\n `Scheduled retry with primary in ${interval} seconds, number of attempts : ${attempt}`,\n loggerContext\n );\n } else if (this.backupMobiusUris.length) {\n log.log('Failing over to backup servers.', loggerContext);\n this.failoverImmediately = false;\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n interval = this.getRegRetryInterval();\n setTimeout(async () => {\n await this.mutex.runExclusive(async () => {\n abort = await this.attemptRegistrationWithServers(\n this.startFailoverTimer.name,\n this.backupMobiusUris\n );\n if (!abort && !this.isDeviceRegistered()) {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n });\n }, interval * SEC_TO_MSEC_MFACTOR);\n log.log(`Scheduled retry with backup servers in ${interval} seconds.`, loggerContext);\n }\n } else {\n emitFinalFailure((clientError: LineError) => {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }, loggerContext);\n }\n }\n\n /**\n * Clears the failback timer if running.\n */\n private clearFailbackTimer() {\n if (this.failbackTimer) {\n clearTimeout(this.failbackTimer);\n this.failbackTimer = undefined;\n }\n }\n\n /**\n * Returns true if device is registered with a backup mobius.\n */\n private isFailbackRequired(): boolean {\n return this.isDeviceRegistered() && this.primaryMobiusUris.indexOf(this.activeMobiusUrl) === -1;\n }\n\n /**\n * Calculates and returns a random value between rehomingIntervalMin and\n * rehomingIntervalMax.\n */\n private getFailbackInterval(): number {\n return Math.floor(\n Math.random() * (this.rehomingIntervalMax - this.rehomingIntervalMin + 1) +\n this.rehomingIntervalMin\n );\n }\n\n /**\n * Starts failback timer to move to primary mobius if device\n * is registered with a backup mobius.\n */\n private initiateFailback() {\n if (this.isFailbackRequired()) {\n if (!this.failbackTimer) {\n this.failback429RetryAttempts = 0;\n const intervalInMinutes = this.getFailbackInterval();\n\n this.startFailbackTimer(intervalInMinutes * MINUTES_TO_SEC_MFACTOR);\n }\n } else {\n this.failback429RetryAttempts = 0;\n this.clearFailbackTimer();\n }\n }\n\n /**\n * Starts failback timer with the interval value received.\n *\n */\n private startFailbackTimer(intervalInSeconds: number) {\n this.failbackTimer = setTimeout(\n async () => this.executeFailback(),\n intervalInSeconds * SEC_TO_MSEC_MFACTOR\n );\n log.log(`Failback scheduled after ${intervalInSeconds} seconds.`, {\n file: REGISTRATION_FILE,\n method: this.startFailbackTimer.name,\n });\n }\n\n /**\n * Core logic for the failback processing, scheduled and executed\n * at failback timer expiry.\n */\n private async executeFailback() {\n await this.mutex.runExclusive(async () => {\n if (this.isFailbackRequired()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n log.info(`Attempting failback to primary.`, {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n await this.deregister();\n const abort = await this.attemptRegistrationWithServers(FAILBACK_UTIL);\n if (!abort && !this.isDeviceRegistered()) {\n const abortNew = await this.restorePreviousRegistration(FAILBACK_UTIL);\n\n if (abortNew) {\n this.clearFailbackTimer();\n\n return;\n }\n\n if (!this.isDeviceRegistered()) {\n await this.restartRegistration(this.executeFailback.name);\n } else {\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n } else {\n log.info('Active calls present, deferring failback to next cycle.', {\n file: REGISTRATION_FILE,\n method: this.executeFailback.name,\n });\n this.failbackTimer = undefined;\n this.initiateFailback();\n }\n }\n });\n }\n\n /**\n * Updates rehomingIntervalMin and rehomingIntervalMax values\n * if received in registration response from a primary mobius\n * server.\n *\n */\n private setIntervalValues(deviceInfo: IDeviceInfo) {\n if (this.primaryMobiusUris.indexOf(this.activeMobiusUrl) !== -1) {\n this.rehomingIntervalMin = deviceInfo?.rehomingIntervalMin\n ? deviceInfo.rehomingIntervalMin\n : DEFAULT_REHOMING_INTERVAL_MIN;\n this.rehomingIntervalMax = deviceInfo?.rehomingIntervalMax\n ? deviceInfo.rehomingIntervalMax\n : DEFAULT_REHOMING_INTERVAL_MAX;\n }\n }\n\n /**\n * Retrieves information about the device as {@link IDeviceInfo}.\n *\n */\n public getDeviceInfo(): IDeviceInfo {\n return this.deviceInfo;\n }\n\n /**\n * Checks if the device is currently registered.\n *\n * by checking if isRegistered state is set to\n * ACTIVE, else false.\n */\n public isDeviceRegistered(): boolean {\n return this.registrationStatus === RegistrationStatus.ACTIVE;\n }\n\n public getStatus(): RegistrationStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: RegistrationStatus) {\n this.registrationStatus = value;\n }\n\n /**\n * Start fresh registration cycle with the mobius\n * server list already present.\n *\n */\n private async restartRegistration(caller: string) {\n /*\n * Cancel any failback timer running\n * and start fresh registration attempt with retry as true.\n */\n this.clearFailbackTimer();\n this.failback429RetryAttempts = 0;\n const abort = await this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.startFailoverTimer();\n }\n }\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 */\n public async handleConnectionRestoration(retry: boolean): Promise<boolean> {\n await this.mutex.runExclusive(async () => {\n /* Check retry once again to see if another timer thread has not finished the job already. */\n if (retry) {\n log.info('Mercury connection is up again, re-registering with Webex Calling if needed', {\n file: REGISTRATION_FILE,\n method: this.handleConnectionRestoration.name,\n });\n this.clearKeepaliveTimer();\n if (this.isDeviceRegistered()) {\n // eslint-disable-next-line no-await-in-loop\n await this.deregister();\n }\n\n /*\n * Do not attempt registration if mobius url is not set in this.activeMobiusUrl\n * as that'd mean initial registration itself is not finished yet, let\n * failover timer handle the registration in that case.\n */\n if (this.activeMobiusUrl) {\n /*\n * When restoring connectivity, register with same url first\n * where it was registered last even if it was a backup url,\n * because failback timer may already be running to register\n * it back to primary.\n */\n const abort = await this.restorePreviousRegistration(\n this.handleConnectionRestoration.name\n );\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(this.handleConnectionRestoration.name);\n }\n }\n retry = false;\n }\n });\n\n return retry;\n }\n\n /**\n * Callback function for restoring registration in case of failure during initial registration\n * due to device registration already exists.\n *\n */\n private restoreRegistrationCallBack() {\n return async (restoreData: IDeviceInfo, caller: string) => {\n const logContext = {file: REGISTRATION_FILE, method: caller};\n if (!this.isRegRetry()) {\n log.info('Registration restoration in progress.', logContext);\n const restore = this.getExistingDevice(restoreData);\n\n if (restore) {\n this.setRegRetry(true);\n await this.deregister();\n const finalError = await this.restorePreviousRegistration(caller);\n this.setRegRetry(false);\n if (this.isDeviceRegistered()) {\n log.info('Registration restored successfully.', logContext);\n }\n\n return finalError;\n }\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n\n return false;\n };\n }\n\n /**\n * Triggers the registration with the given list of Mobius servers\n * Registration is attempted with primary and backup until it succeeds or the list is exhausted\n */\n public async triggerRegistration() {\n if (this.primaryMobiusUris.length > 0) {\n const abort = await this.attemptRegistrationWithServers(\n this.triggerRegistration.name,\n this.primaryMobiusUris\n );\n\n if (!this.isDeviceRegistered() && !abort) {\n await this.startFailoverTimer();\n }\n }\n }\n\n /**\n * Attempts registration with the server list received in\n * argument one by one until registration either succeeds with\n * one or all of them are tried.\n *\n * attempt has hit a final error and a retry should not be scheduled\n * else false.\n */\n private async attemptRegistrationWithServers(\n caller: string,\n servers: string[] = this.primaryMobiusUris\n ): Promise<boolean> {\n let abort = false;\n\n if (this.failoverImmediately) {\n return abort;\n }\n\n if (this.isDeviceRegistered()) {\n log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n\n return abort;\n }\n for (const url of servers) {\n try {\n abort = false;\n this.registrationStatus = RegistrationStatus.INACTIVE;\n this.lineEmitter(LINE_EVENTS.CONNECTING);\n log.log(`[${caller}] : Mobius url to contact: ${url}`, {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n });\n // eslint-disable-next-line no-await-in-loop\n const resp = await this.postRegistration(url);\n this.deviceInfo = resp.body as IDeviceInfo;\n this.registrationStatus = RegistrationStatus.ACTIVE;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.setActiveMobiusUrl(url);\n this.setIntervalValues(this.deviceInfo);\n this.metricManager.setDeviceInfo(this.deviceInfo);\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n undefined\n );\n this.startKeepaliveTimer(\n this.deviceInfo.device?.uri as string,\n this.deviceInfo.keepaliveInterval as number\n );\n this.initiateFailback();\n break;\n } catch (err: unknown) {\n const body = err as WebexRequestPayload;\n\n // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars\n abort = await handleRegistrationErrors(\n body,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n } else {\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION_ERROR,\n REG_ACTION.REGISTER,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.attemptRegistrationWithServers.name, file: REGISTRATION_FILE},\n this.restoreRegistrationCallBack()\n );\n if (this.registrationStatus === RegistrationStatus.ACTIVE) {\n log.info(\n `[${caller}] : Device is already restored, active mobius url: ${this.activeMobiusUrl}`,\n {\n file: REGISTRATION_FILE,\n method: this.attemptRegistrationWithServers.name,\n }\n );\n break;\n }\n if (abort) {\n this.setStatus(RegistrationStatus.INACTIVE);\n break;\n } else if (caller === this.executeFailback.name) {\n const error = body.statusCode;\n\n if (error === ERROR_CODE.TOO_MANY_REQUESTS) {\n // eslint-disable-next-line no-await-in-loop\n await this.scheduleFailback429Retry();\n abort = true;\n break;\n }\n }\n }\n }\n\n return abort;\n }\n\n /**\n * This method sets up a timer to periodically send keep-alive requests to maintain a connection.\n * It handles retries, error handling, and re-registration attempts based on the response, ensuring continuous connectivity with the server.\n */\n private startKeepaliveTimer(url: string, interval: number) {\n let keepAliveRetryCount = 0;\n this.clearKeepaliveTimer();\n const RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;\n\n this.keepaliveTimer = setInterval(async () => {\n const logContext = {\n file: REGISTRATION_FILE,\n method: this.startKeepaliveTimer.name,\n };\n await this.mutex.runExclusive(async () => {\n if (this.isDeviceRegistered() && keepAliveRetryCount < RETRY_COUNT_THRESHOLD) {\n try {\n const res = await this.postKeepAlive(url);\n log.info(`Sent Keepalive, status: ${res.statusCode}`, logContext);\n if (keepAliveRetryCount > 0) {\n this.lineEmitter(LINE_EVENTS.RECONNECTED);\n }\n keepAliveRetryCount = 0;\n } catch (err: unknown) {\n keepAliveRetryCount += 1;\n const error = <WebexRequestPayload>err;\n\n log.warn(\n `Keep-alive missed ${keepAliveRetryCount} times. Status -> ${error.statusCode} `,\n logContext\n );\n\n const abort = await handleRegistrationErrors(\n error,\n (clientError, finalError) => {\n if (finalError) {\n this.lineEmitter(LINE_EVENTS.ERROR, undefined, clientError);\n }\n this.metricManager.submitRegistrationMetric(\n METRIC_EVENT.REGISTRATION,\n REG_ACTION.KEEPALIVE_FAILURE,\n METRIC_TYPE.BEHAVIORAL,\n clientError\n );\n },\n {method: this.startKeepaliveTimer.name, file: REGISTRATION_FILE}\n );\n\n if (abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD) {\n this.failoverImmediately = this.isCCFlow;\n this.setStatus(RegistrationStatus.INACTIVE);\n this.clearKeepaliveTimer();\n this.clearFailbackTimer();\n this.lineEmitter(LINE_EVENTS.UNREGISTERED);\n\n if (!abort) {\n /* In case of non-final error, re-attempt registration */\n await this.reconnectOnFailure(this.startKeepaliveTimer.name);\n }\n } else {\n this.lineEmitter(LINE_EVENTS.RECONNECTING);\n }\n }\n }\n });\n }, interval * 1000);\n }\n\n /**\n * Clears the keepalive timer if running.\n */\n public clearKeepaliveTimer() {\n if (this.keepaliveTimer) {\n clearInterval(this.keepaliveTimer);\n this.keepaliveTimer = undefined;\n }\n }\n\n public isReconnectPending(): boolean {\n return this.reconnectPending;\n }\n\n public async deregister() {\n try {\n await this.deleteRegistration(\n this.activeMobiusUrl as string,\n this.deviceInfo.device?.deviceId as string,\n this.deviceInfo.device?.clientDeviceUri as string\n );\n } catch (err) {\n log.warn(`Delete failed with Mobius`, {});\n }\n\n this.clearKeepaliveTimer();\n this.setStatus(RegistrationStatus.INACTIVE);\n }\n\n /**\n * Indicates whether the calling client is in a mode\n * to retry registration.\n */\n private isRegRetry(): boolean {\n return this.registerRetry;\n }\n\n /**\n * Sets the received value in instance variable\n * registerRetry for registration retry cases.\n *\n */\n private setRegRetry(value: boolean) {\n this.registerRetry = value;\n }\n\n /**\n * Restores the deviceInfo object in callingClient when receiving a 403 with error code 101.\n *\n */\n private getExistingDevice(restoreData: IDeviceInfo) {\n if (restoreData.devices && restoreData.devices.length > 0) {\n this.deviceInfo = {\n userId: restoreData.userId,\n device: restoreData.devices[0],\n keepaliveInterval: DEFAULT_KEEPALIVE_INTERVAL,\n rehomingIntervalMax: DEFAULT_REHOMING_INTERVAL_MAX,\n rehomingIntervalMin: DEFAULT_REHOMING_INTERVAL_MIN,\n };\n\n const stringToReplace = `${DEVICES_ENDPOINT_RESOURCE}/${restoreData.devices[0].deviceId}`;\n\n const uri = restoreData.devices[0].uri.replace(stringToReplace, '');\n this.setActiveMobiusUrl(uri);\n this.registrationStatus = RegistrationStatus.ACTIVE;\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Invoked to re-register in cases when the registration\n * is lost due to some failure.\n * If there are active calls, it will only mark reconnectPending\n * as true and then retry will happen when this method gets\n * invoked again on receiving all calls cleared event from\n * callManager.\n *\n */\n public async reconnectOnFailure(caller: string) {\n this.reconnectPending = false;\n if (!this.isDeviceRegistered()) {\n if (Object.keys(this.callManager.getActiveCalls()).length === 0) {\n const abort = await this.restorePreviousRegistration(caller);\n\n if (!abort && !this.isDeviceRegistered()) {\n await this.restartRegistration(caller);\n }\n } else {\n this.reconnectPending = true;\n log.info('Active call(s) present, deferred reconnect till call cleanup.', {\n file: REGISTRATION_FILE,\n method: this.reconnectOnFailure.name,\n });\n }\n }\n }\n}\n\n/*\n */\nexport const createRegistration = (\n webex: WebexSDK,\n serviceData: ServiceData,\n mutex: Mutex,\n lineEmitter: LineEmitterCallback,\n logLevel: LOGGER\n): IRegistration => new Registration(webex, serviceData, mutex, lineEmitter, logLevel);\n"],"mappings":"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"}
@@ -817,7 +817,7 @@ describe('Registration Tests', function () {
817
817
  expect(clearIntervalSpy).toBeCalledOnceWith(timer);
818
818
  expect(reg.getStatus()).toBe(_types.RegistrationStatus.INACTIVE);
819
819
  expect(reg.keepaliveTimer).not.toBe(timer);
820
- webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);
820
+ webex.request.mockResolvedValue(successPayload);
821
821
  jest.advanceTimersByTime(_constants.REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * _constants.SEC_TO_MSEC_MFACTOR);
822
822
  _context20.next = 19;
823
823
  return flushPromises();
@@ -1 +1 @@
1
- {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","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","ccMockResponse","failurePayload","statusCode","mockPostResponse","failurePayload429","successPayload","reg","restartSpy","failbackRetry429Spy","restoreSpy","postRegistrationSpy","setupRegistration","mockServiceData","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","FAILBACK_429_RETRY_UTIL","beforeEach","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","CONTACT_CENTER","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","_callee6","_callee6$","_context6","_callee7","_callee7$","_context7","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee8","_callee8$","_context8","MINUTES_TO_SEC_MFACTOR","file","REGISTRATION_FILE","failback429RetryAttempts","toBe","failbackTimer","_callee9","_callee9$","_context9","FAILBACK_UTIL","_callee10","finalErrorPayload","_callee10$","_context10","mockClear","not","toBeCalled","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","_callee13","_callee13$","_context13","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","beforeEachSetupForKeepalive","_ref14","_callee14","_callee14$","_context14","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee15","keepAlivePayload","funcSpy","_callee15$","_context15","mockReturnValue","keepaliveInterval","lastCalledWith","_callee16","timer","_callee16$","_context16","RECONNECTING","RECONNECTED","_callee17","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee17$","_context17","KEEPALIVE_UTIL","_callee18","_callee18$","_context18","setActiveMobiusUrl","toBeTruthy","_callee19","_callee19$","_context19","_callee20","_callee20$","_context20","_callee21","_callee21$","_context21","service","_callee22","_callee22$","_context22","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_FOR_CC_IN_SEC,\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 ccMockResponse = {\n ...mockResponse,\n body: {\n ...mockResponse.body,\n serviceData: {\n domain: '',\n indicator: 'contactcenter',\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 const setupRegistration = (mockServiceData) => {\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 beforeEach(() => {\n setupRegistration(MockServiceData);\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('cc: verify unreachable primary with reachable backup server', async () => {\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n\n jest.useFakeTimers();\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_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\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 const mockKeepAliveBody = {device: mockPostResponse.device};\n\n const beforeEachSetupForKeepalive = 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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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('cc: verify failover to backup server after 4 keep alive failure with primary server', async () => {\n // Register with contact center service\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n await beforeEachSetupForKeepalive();\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 jest\n .spyOn(reg, 'postKeepAlive')\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\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 jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reg.keepaliveTimer).not.toBe(timer);\n\n webex.request.mockRejectedValueOnce(failurePayload).mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n\n it('verify final error for keep-alive', async () => {\n await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const call = reg.callManager.createCall();\n\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
+ {"version":3,"names":["_asyncMutex","require","_register","_testUtil","_types","utils","_interopRequireWildcard","_Logger","_interopRequireDefault","_types2","_registerFixtures","_common","_types3","_constants","_types4","_LineError","_getRequireWildcardCache","e","_WeakMap","r","t","__esModule","_typeof","default","has","get","n","__proto__","a","_Object$defineProperty","_Object$getOwnPropertyDescriptor","u","Object","prototype","hasOwnProperty","call","i","set","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","o","filter","enumerable","push","apply","_objectSpread","arguments","length","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","ccMockResponse","failurePayload","statusCode","mockPostResponse","failurePayload429","successPayload","reg","restartSpy","failbackRetry429Spy","restoreSpy","postRegistrationSpy","setupRegistration","mockServiceData","mutex","Mutex","createRegistration","LOGGER","INFO","setMobiusServers","backup","clearAllMocks","FAILBACK_429_RETRY_UTIL","beforeEach","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","CONTACT_CENTER","REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC","_callee6","_callee6$","_context6","_callee7","_callee7$","_context7","mockResolvedValue","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","toStrictEqual","_callee8","_callee8$","_context8","MINUTES_TO_SEC_MFACTOR","file","REGISTRATION_FILE","failback429RetryAttempts","toBe","failbackTimer","_callee9","_callee9$","_context9","FAILBACK_UTIL","_callee10","finalErrorPayload","_callee10$","_context10","mockClear","not","toBeCalled","_callee11","_callee11$","_context11","_callee12","_callee12$","_context12","_callee13","_callee13$","_context13","callManager","createCall","_keys","getActiveCalls","logObj","mockKeepAliveBody","beforeEachSetupForKeepalive","_ref14","_callee14","_callee14$","_context14","keepaliveTimer","clearInterval","reconnectPending","calls","_values","end","_callee15","keepAlivePayload","funcSpy","_callee15$","_context15","mockReturnValue","keepaliveInterval","lastCalledWith","_callee16","timer","_callee16$","_context16","RECONNECTING","RECONNECTED","_callee17","restartRegSpy","reconnectSpy","clearIntervalSpy","_callee17$","_context17","KEEPALIVE_UTIL","_callee18","_callee18$","_context18","setActiveMobiusUrl","toBeTruthy","_callee19","_callee19$","_context19","_callee20","_callee20$","_context20","_callee21","_callee21$","_context21","service","_callee22","_callee22$","_context22","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_FOR_CC_IN_SEC,\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 ccMockResponse = {\n ...mockResponse,\n body: {\n ...mockResponse.body,\n serviceData: {\n domain: '',\n indicator: 'contactcenter',\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 const setupRegistration = (mockServiceData) => {\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 beforeEach(() => {\n setupRegistration(MockServiceData);\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('cc: verify unreachable primary with reachable backup server', async () => {\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n\n jest.useFakeTimers();\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_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(webex.request).toBeCalledTimes(3);\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\n method: 'POST',\n uri: `${mobiusUris.primary[0]}device`,\n });\n expect(webex.request).toBeCalledWith({\n ...ccMockResponse,\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 const mockKeepAliveBody = {device: mockPostResponse.device};\n\n const beforeEachSetupForKeepalive = 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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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('cc: verify failover to backup server after 4 keep alive failure with primary server', async () => {\n // Register with contact center service\n setupRegistration({...MockServiceData, indicator: ServiceIndicator.CONTACT_CENTER});\n await beforeEachSetupForKeepalive();\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 jest\n .spyOn(reg, 'postKeepAlive')\n .mockRejectedValueOnce(failurePayload)\n .mockRejectedValueOnce(failurePayload)\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 jest.advanceTimersByTime(5 * mockPostResponse.keepaliveInterval * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n expect(clearIntervalSpy).toBeCalledOnceWith(timer);\n expect(reg.getStatus()).toBe(RegistrationStatus.INACTIVE);\n expect(reg.keepaliveTimer).not.toBe(timer);\n\n webex.request.mockResolvedValue(successPayload);\n\n jest.advanceTimersByTime(REG_TRY_BACKUP_TIMER_VAL_FOR_CC_IN_SEC * SEC_TO_MSEC_MFACTOR);\n await flushPromises();\n\n /* Active Url must match with the backup url as per the test */\n expect(reg.getActiveMobiusUrl()).toEqual(mobiusUris.backup[0]);\n expect(reg.getStatus()).toBe(RegistrationStatus.ACTIVE);\n });\n\n it('verify final error for keep-alive', async () => {\n await beforeEachSetupForKeepalive();\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 await beforeEachSetupForKeepalive();\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const call = reg.callManager.createCall();\n\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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"}
@@ -31,6 +31,7 @@ export class Registration {
31
31
  registerRetry = false;
32
32
  reconnectPending = false;
33
33
  isCCFlow = false;
34
+ failoverImmediately = false;
34
35
  constructor(webex, serviceData, mutex, lineEmitter, logLevel) {
35
36
  this.sdkConnector = SDKConnector;
36
37
  this.serviceData = serviceData;
@@ -157,7 +158,7 @@ export class Registration {
157
158
  interval -= excessVal;
158
159
  }
159
160
  let abort;
160
- if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC) {
161
+ if (interval > BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately) {
161
162
  const scheduledTime = Math.floor(Date.now() / 1000);
162
163
  setTimeout(async () => {
163
164
  await this.mutex.runExclusive(async () => {
@@ -172,6 +173,7 @@ export class Registration {
172
173
  }
173
174
  else if (this.backupMobiusUris.length) {
174
175
  log.log('Failing over to backup servers.', loggerContext);
176
+ this.failoverImmediately = false;
175
177
  abort = await this.attemptRegistrationWithServers(this.startFailoverTimer.name, this.backupMobiusUris);
176
178
  if (!abort && !this.isDeviceRegistered()) {
177
179
  interval = this.getRegRetryInterval();
@@ -349,6 +351,9 @@ export class Registration {
349
351
  }
350
352
  async attemptRegistrationWithServers(caller, servers = this.primaryMobiusUris) {
351
353
  let abort = false;
354
+ if (this.failoverImmediately) {
355
+ return abort;
356
+ }
352
357
  if (this.isDeviceRegistered()) {
353
358
  log.log(`[${caller}] : Device already registered with : ${this.activeMobiusUrl}`, {
354
359
  file: REGISTRATION_FILE,
@@ -441,6 +446,7 @@ export class Registration {
441
446
  this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION, REG_ACTION.KEEPALIVE_FAILURE, METRIC_TYPE.BEHAVIORAL, clientError);
442
447
  }, { method: this.startKeepaliveTimer.name, file: REGISTRATION_FILE });
443
448
  if (abort || keepAliveRetryCount >= RETRY_COUNT_THRESHOLD) {
449
+ this.failoverImmediately = this.isCCFlow;
444
450
  this.setStatus(RegistrationStatus.INACTIVE);
445
451
  this.clearKeepaliveTimer();
446
452
  this.clearFailbackTimer();
@@ -26,6 +26,7 @@ export declare class Registration implements IRegistration {
26
26
  private registerRetry;
27
27
  private reconnectPending;
28
28
  private isCCFlow;
29
+ private failoverImmediately;
29
30
  constructor(webex: WebexSDK, serviceData: ServiceData, mutex: Mutex, lineEmitter: LineEmitterCallback, logLevel: LOGGER);
30
31
  getActiveMobiusUrl(): string;
31
32
  setActiveMobiusUrl(url: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/registration/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAQlC,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC,OAAO,EAGL,WAAW,EACX,kBAAkB,EAClB,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAsBjE,OAAO,EAAc,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAM/D,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;gBAKvB,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM;IAyBX,kBAAkB,IAAI,MAAM;IAI5B,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAM9B,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE;YASjE,aAAa;YAgBb,kBAAkB;YA0BlB,gBAAgB;YAuBhB,2BAA2B;YAgB3B,wBAAwB;IA0BtC,OAAO,CAAC,mBAAmB;YAmBb,kBAAkB;IAsEhC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,kBAAkB;YAeZ,eAAe;IA4C7B,OAAO,CAAC,iBAAiB;IAelB,aAAa,IAAI,WAAW;IAU5B,kBAAkB,IAAI,OAAO;IAI7B,SAAS,IAAI,kBAAkB;IAI/B,SAAS,CAAC,KAAK,EAAE,kBAAkB;YAS5B,mBAAmB;IAmBpB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C1E,OAAO,CAAC,2BAA2B;IA+BtB,mBAAmB;YAqBlB,8BAA8B;IAkG5C,OAAO,CAAC,mBAAmB;IAkEpB,mBAAmB;IAOnB,kBAAkB,IAAI,OAAO;IAIvB,UAAU;IAmBvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,iBAAiB;IA+BZ,kBAAkB,CAAC,MAAM,EAAE,MAAM;CAkB/C;AAID,eAAO,MAAM,kBAAkB,UACtB,QAAQ,eACF,WAAW,SACjB,KAAK,eACC,mBAAmB,YACtB,MAAM,KACf,aAAmF,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/CallingClient/registration/register.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAC;AAQlC,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC,OAAO,EAGL,WAAW,EACX,kBAAkB,EAClB,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAgB,QAAQ,EAAC,MAAM,0BAA0B,CAAC;AAsBjE,OAAO,EAAc,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAM/D,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,YAAY,CAAgB;IAEpC,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO,CAAC,MAAM,CAAM;IAEpB,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,mBAAmB,CAAS;IAEpC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAS;gBAKlC,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM;IAyBX,kBAAkB,IAAI,MAAM;IAI5B,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAM9B,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE;YASjE,aAAa;YAgBb,kBAAkB;YA0BlB,gBAAgB;YAuBhB,2BAA2B;YAgB3B,wBAAwB;IA0BtC,OAAO,CAAC,mBAAmB;YAmBb,kBAAkB;IAuEhC,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,kBAAkB;YAeZ,eAAe;IA4C7B,OAAO,CAAC,iBAAiB;IAelB,aAAa,IAAI,WAAW;IAU5B,kBAAkB,IAAI,OAAO;IAI7B,SAAS,IAAI,kBAAkB;IAI/B,SAAS,CAAC,KAAK,EAAE,kBAAkB;YAS5B,mBAAmB;IAmBpB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C1E,OAAO,CAAC,2BAA2B;IA+BtB,mBAAmB;YAqBlB,8BAA8B;IAsG5C,OAAO,CAAC,mBAAmB;IAmEpB,mBAAmB;IAOnB,kBAAkB,IAAI,OAAO;IAIvB,UAAU;IAmBvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,iBAAiB;IA+BZ,kBAAkB,CAAC,MAAM,EAAE,MAAM;CAkB/C;AAID,eAAO,MAAM,kBAAkB,UACtB,QAAQ,eACF,WAAW,SACjB,KAAK,eACC,mBAAmB,YACtB,MAAM,KACf,aAAmF,CAAC"}
package/package.json CHANGED
@@ -129,5 +129,5 @@
129
129
  "staticpath": "docs",
130
130
  "noprompt": true
131
131
  },
132
- "version": "3.5.0-next.12"
132
+ "version": "3.5.0-next.13"
133
133
  }