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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/CallingClient/CallingClient.js +16 -10
  2. package/dist/CallingClient/CallingClient.js.map +1 -1
  3. package/dist/CallingClient/CallingClient.test.js +25 -32
  4. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  5. package/dist/CallingClient/calling/call.test.js +2 -1
  6. package/dist/CallingClient/calling/call.test.js.map +1 -1
  7. package/dist/CallingClient/line/index.js +10 -11
  8. package/dist/CallingClient/line/index.js.map +1 -1
  9. package/dist/CallingClient/line/line.test.js +9 -9
  10. package/dist/CallingClient/line/line.test.js.map +1 -1
  11. package/dist/CallingClient/line/types.js +1 -7
  12. package/dist/CallingClient/line/types.js.map +1 -1
  13. package/dist/CallingClient/registration/register.js +50 -40
  14. package/dist/CallingClient/registration/register.js.map +1 -1
  15. package/dist/CallingClient/registration/register.test.js +28 -28
  16. package/dist/CallingClient/registration/register.test.js.map +1 -1
  17. package/dist/CallingClient/registration/types.js.map +1 -1
  18. package/dist/Errors/catalog/CallingDeviceError.js +1 -1
  19. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -1
  20. package/dist/Errors/catalog/LineError.js +2 -2
  21. package/dist/Errors/catalog/LineError.js.map +1 -1
  22. package/dist/Errors/types.js.map +1 -1
  23. package/dist/Metrics/index.test.js +1 -1
  24. package/dist/Metrics/index.test.js.map +1 -1
  25. package/dist/common/Utils.js +13 -14
  26. package/dist/common/Utils.js.map +1 -1
  27. package/dist/common/Utils.test.js +1 -1
  28. package/dist/common/Utils.test.js.map +1 -1
  29. package/dist/common/types.js +8 -7
  30. package/dist/common/types.js.map +1 -1
  31. package/dist/module/CallingClient/CallingClient.js +8 -5
  32. package/dist/module/CallingClient/line/index.js +7 -10
  33. package/dist/module/CallingClient/line/types.js +0 -5
  34. package/dist/module/CallingClient/registration/register.js +28 -20
  35. package/dist/module/Errors/catalog/CallingDeviceError.js +2 -2
  36. package/dist/module/Errors/catalog/LineError.js +2 -2
  37. package/dist/module/common/Utils.js +14 -15
  38. package/dist/module/common/types.js +6 -5
  39. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  40. package/dist/types/CallingClient/line/index.d.ts +4 -5
  41. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  42. package/dist/types/CallingClient/line/types.d.ts +2 -7
  43. package/dist/types/CallingClient/line/types.d.ts.map +1 -1
  44. package/dist/types/CallingClient/registration/register.d.ts +3 -3
  45. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  46. package/dist/types/CallingClient/registration/types.d.ts +3 -3
  47. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  48. package/dist/types/Errors/catalog/CallingDeviceError.d.ts +4 -4
  49. package/dist/types/Errors/catalog/CallingDeviceError.d.ts.map +1 -1
  50. package/dist/types/Errors/catalog/LineError.d.ts +4 -4
  51. package/dist/types/Errors/catalog/LineError.d.ts.map +1 -1
  52. package/dist/types/Errors/types.d.ts +2 -3
  53. package/dist/types/Errors/types.d.ts.map +1 -1
  54. package/dist/types/common/Utils.d.ts.map +1 -1
  55. package/dist/types/common/types.d.ts +3 -2
  56. package/dist/types/common/types.d.ts.map +1 -1
  57. package/package.json +1 -1
@@ -66,7 +66,7 @@ var Registration = /*#__PURE__*/function () {
66
66
  }
67
67
  this.webex = this.sdkConnector.getWebex();
68
68
  this.userId = this.webex.internal.device.userId;
69
- this.registrationStatus = _types3.MobiusStatus.DEFAULT;
69
+ this.registrationStatus = _types3.RegistrationStatus.IDLE;
70
70
  this.failback429RetryAttempts = 0;
71
71
  _Logger.default.setLogger(logLevel, _constants.REGISTRATION_FILE);
72
72
  this.rehomingIntervalMin = _constants.DEFAULT_REHOMING_INTERVAL_MIN;
@@ -137,11 +137,12 @@ var Registration = /*#__PURE__*/function () {
137
137
  key: "deleteRegistration",
138
138
  value: function () {
139
139
  var _deleteRegistration = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(url, deviceId, deviceUrl) {
140
- var _headers2;
141
- var response;
140
+ var _response;
141
+ var response, _headers2;
142
142
  return _regenerator.default.wrap(function _callee2$(_context2) {
143
143
  while (1) switch (_context2.prev = _context2.next) {
144
144
  case 0:
145
+ _context2.prev = 0;
145
146
  _context2.t0 = fetch;
146
147
  _context2.t1 = "".concat(url).concat(_constants.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId);
147
148
  _context2.t2 = _types3.HTTP_METHODS.DELETE;
@@ -149,9 +150,9 @@ var Registration = /*#__PURE__*/function () {
149
150
  (0, _defineProperty2.default)(_headers2, _constants.CISCO_DEVICE_URL, deviceUrl);
150
151
  _context2.t3 = _defineProperty2.default;
151
152
  _context2.t4 = _headers2;
152
- _context2.next = 9;
153
+ _context2.next = 10;
153
154
  return this.webex.credentials.getUserToken();
154
- case 9:
155
+ case 10:
155
156
  _context2.t5 = _context2.sent;
156
157
  (0, _context2.t3)(_context2.t4, "Authorization", _context2.t5);
157
158
  (0, _defineProperty2.default)(_headers2, "trackingId", "".concat(_constants.WEBEX_WEB_CLIENT, "_").concat((0, _uuid.v4)()));
@@ -161,17 +162,25 @@ var Registration = /*#__PURE__*/function () {
161
162
  method: _context2.t2,
162
163
  headers: _context2.t6
163
164
  };
164
- _context2.next = 17;
165
+ _context2.next = 18;
165
166
  return (0, _context2.t0)(_context2.t1, _context2.t7);
166
- case 17:
167
+ case 18:
167
168
  response = _context2.sent;
169
+ _context2.next = 24;
170
+ break;
171
+ case 21:
172
+ _context2.prev = 21;
173
+ _context2.t8 = _context2["catch"](0);
174
+ _Logger.default.warn("Delete failed with Mobius", {});
175
+ case 24:
176
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
168
177
  this.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
169
- return _context2.abrupt("return", response.json());
170
- case 20:
178
+ return _context2.abrupt("return", (_response = response) === null || _response === void 0 ? void 0 : _response.json());
179
+ case 27:
171
180
  case "end":
172
181
  return _context2.stop();
173
182
  }
174
- }, _callee2, this);
183
+ }, _callee2, this, [[0, 21]]);
175
184
  }));
176
185
  function deleteRegistration(_x2, _x3, _x4) {
177
186
  return _deleteRegistration.apply(this, arguments);
@@ -646,7 +655,7 @@ var Registration = /*#__PURE__*/function () {
646
655
  }, {
647
656
  key: "isDeviceRegistered",
648
657
  value: function isDeviceRegistered() {
649
- return this.registrationStatus === _types3.MobiusStatus.ACTIVE;
658
+ return this.registrationStatus === _types3.RegistrationStatus.ACTIVE;
650
659
  }
651
660
  }, {
652
661
  key: "getStatus",
@@ -722,7 +731,7 @@ var Registration = /*#__PURE__*/function () {
722
731
  _context15.next = 14;
723
732
  break;
724
733
  }
725
- _Logger.default.info('Mercury connection is up again, Re-registering with Mobius', {
734
+ _Logger.default.info('Mercury connection is up again, re-registering with Webex Calling if needed', {
726
735
  file: _constants.REGISTRATION_FILE,
727
736
  method: _this4.handleConnectionRestoration.name
728
737
  });
@@ -911,13 +920,13 @@ var Registration = /*#__PURE__*/function () {
911
920
  _iterator.s();
912
921
  case 8:
913
922
  if ((_step = _iterator.n()).done) {
914
- _context19.next = 52;
923
+ _context19.next = 53;
915
924
  break;
916
925
  }
917
926
  url = _step.value;
918
927
  _context19.prev = 10;
919
928
  abort = false;
920
- this.registrationStatus = _types3.MobiusStatus.DEFAULT;
929
+ this.registrationStatus = _types3.RegistrationStatus.INACTIVE;
921
930
  this.lineEmitter(_types4.LINE_EVENTS.CONNECTING);
922
931
  _Logger.default.log("[".concat(caller, "] : Mobius url to contact: ").concat(url), {
923
932
  file: _constants.REGISTRATION_FILE,
@@ -930,14 +939,14 @@ var Registration = /*#__PURE__*/function () {
930
939
  resp = _context19.sent;
931
940
  this.deviceInfo = resp.body;
932
941
  this.lineEmitter(_types4.LINE_EVENTS.REGISTERED, resp.body);
933
- this.registrationStatus = _types3.MobiusStatus.ACTIVE;
942
+ this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
934
943
  this.setActiveMobiusUrl(url);
935
944
  this.setIntervalValues(this.deviceInfo);
936
945
  this.metricManager.setDeviceInfo(this.deviceInfo);
937
946
  this.metricManager.submitRegistrationMetric(_types2.METRIC_EVENT.REGISTRATION, _types2.REG_ACTION.REGISTER, _types2.METRIC_TYPE.BEHAVIORAL, undefined);
938
947
  this.startKeepaliveTimer((_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.uri, this.deviceInfo.keepaliveInterval);
939
948
  this.initiateFailback();
940
- return _context19.abrupt("break", 52);
949
+ return _context19.abrupt("break", 53);
941
950
  case 30:
942
951
  _context19.prev = 30;
943
952
  _context19.t0 = _context19["catch"](10);
@@ -956,7 +965,7 @@ var Registration = /*#__PURE__*/function () {
956
965
  }, this.restoreRegistrationCallBack());
957
966
  case 35:
958
967
  abort = _context19.sent;
959
- if (!(this.registrationStatus === _types3.MobiusStatus.ACTIVE)) {
968
+ if (!(this.registrationStatus === _types3.RegistrationStatus.ACTIVE)) {
960
969
  _context19.next = 39;
961
970
  break;
962
971
  }
@@ -964,49 +973,50 @@ var Registration = /*#__PURE__*/function () {
964
973
  file: _constants.REGISTRATION_FILE,
965
974
  method: this.attemptRegistrationWithServers.name
966
975
  });
967
- return _context19.abrupt("break", 52);
976
+ return _context19.abrupt("break", 53);
968
977
  case 39:
969
978
  if (!abort) {
970
- _context19.next = 43;
979
+ _context19.next = 44;
971
980
  break;
972
981
  }
973
- return _context19.abrupt("break", 52);
974
- case 43:
982
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
983
+ return _context19.abrupt("break", 53);
984
+ case 44:
975
985
  if (!(caller === this.executeFailback.name)) {
976
- _context19.next = 50;
986
+ _context19.next = 51;
977
987
  break;
978
988
  }
979
989
  error = body.statusCode;
980
990
  if (!(error === _types.ERROR_CODE.TOO_MANY_REQUESTS)) {
981
- _context19.next = 50;
991
+ _context19.next = 51;
982
992
  break;
983
993
  }
984
- _context19.next = 48;
994
+ _context19.next = 49;
985
995
  return this.scheduleFailback429Retry();
986
- case 48:
996
+ case 49:
987
997
  abort = true;
988
- return _context19.abrupt("break", 52);
989
- case 50:
998
+ return _context19.abrupt("break", 53);
999
+ case 51:
990
1000
  _context19.next = 8;
991
1001
  break;
992
- case 52:
993
- _context19.next = 57;
1002
+ case 53:
1003
+ _context19.next = 58;
994
1004
  break;
995
- case 54:
996
- _context19.prev = 54;
1005
+ case 55:
1006
+ _context19.prev = 55;
997
1007
  _context19.t1 = _context19["catch"](6);
998
1008
  _iterator.e(_context19.t1);
999
- case 57:
1000
- _context19.prev = 57;
1009
+ case 58:
1010
+ _context19.prev = 58;
1001
1011
  _iterator.f();
1002
- return _context19.finish(57);
1003
- case 60:
1004
- return _context19.abrupt("return", abort);
1012
+ return _context19.finish(58);
1005
1013
  case 61:
1014
+ return _context19.abrupt("return", abort);
1015
+ case 62:
1006
1016
  case "end":
1007
1017
  return _context19.stop();
1008
1018
  }
1009
- }, _callee19, this, [[6, 54, 57, 60], [10, 30]]);
1019
+ }, _callee19, this, [[6, 55, 58, 61], [10, 30]]);
1010
1020
  }));
1011
1021
  function attemptRegistrationWithServers(_x11) {
1012
1022
  return _attemptRegistrationWithServers.apply(this, arguments);
@@ -1076,7 +1086,7 @@ var Registration = /*#__PURE__*/function () {
1076
1086
  _context20.next = 28;
1077
1087
  break;
1078
1088
  }
1079
- _this7.setStatus(_types3.MobiusStatus.DEFAULT);
1089
+ _this7.setStatus(_types3.RegistrationStatus.INACTIVE);
1080
1090
  _this7.clearKeepaliveTimer();
1081
1091
  _this7.clearFailbackTimer();
1082
1092
  _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
@@ -1141,7 +1151,7 @@ var Registration = /*#__PURE__*/function () {
1141
1151
  _Logger.default.warn("Delete failed with Mobius", {});
1142
1152
  case 8:
1143
1153
  this.clearKeepaliveTimer();
1144
- this.setStatus(_types3.MobiusStatus.DEFAULT);
1154
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
1145
1155
  case 10:
1146
1156
  case "end":
1147
1157
  return _context22.stop();
@@ -1192,7 +1202,7 @@ var Registration = /*#__PURE__*/function () {
1192
1202
  var stringToReplace = "".concat(_constants.DEVICES_ENDPOINT_RESOURCE, "/").concat(restoreData.devices[0].deviceId);
1193
1203
  var uri = restoreData.devices[0].uri.replace(stringToReplace, '');
1194
1204
  this.setActiveMobiusUrl(uri);
1195
- this.registrationStatus = _types3.MobiusStatus.ACTIVE;
1205
+ this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
1196
1206
  return true;
1197
1207
  }
1198
1208
  return false;
@@ -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","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","getWebex","setWebex","userId","internal","device","registrationStatus","MobiusStatus","DEFAULT","failback429RetryAttempts","log","setLogger","REGISTRATION_FILE","rehomingIntervalMin","DEFAULT_REHOMING_INTERVAL_MIN","rehomingIntervalMax","DEFAULT_REHOMING_INTERVAL_MAX","callManager","getCallManager","indicator","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","_headers","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","_headers2","response","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","credentials","getUserToken","t5","sent","WEBEX_WEB_CLIENT","uuid","t6","t7","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","_headers3","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","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","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","setStatus","_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","keepaliveTimer","setInterval","_callee21","_callee21$","_context21","_callee20","res","_callee20$","_context20","RECONNECTED","warn","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","exports","createRegistration"],"sources":["register.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {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 MobiusStatus,\n ServiceData,\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} 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: MobiusStatus;\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\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 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 = MobiusStatus.DEFAULT;\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 const 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\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 if (timeElapsed + interval > REG_TRY_BACKUP_TIMER_VAL_IN_SEC) {\n const excessVal = timeElapsed + interval - REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\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 === MobiusStatus.ACTIVE;\n }\n\n public getStatus(): MobiusStatus {\n return this.registrationStatus;\n }\n\n public setStatus(value: MobiusStatus) {\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 Mobius', {\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 = MobiusStatus.DEFAULT;\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\n this.deviceInfo = resp.body as IDeviceInfo;\n this.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.registrationStatus = MobiusStatus.ACTIVE;\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 === MobiusStatus.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 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 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 < 5) {\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 >= 5) {\n this.setStatus(MobiusStatus.DEFAULT);\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(MobiusStatus.DEFAULT);\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 = MobiusStatus.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","webex","serviceData","mutex","lineEmitter","logLevel","_classCallCheck2","default","_defineProperty2","sdkConnector","SDKConnector","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","indicator","metricManager","getMetricManager","primaryMobiusUris","backupMobiusUris","_createClass2","key","getActiveMobiusUrl","activeMobiusUrl","setActiveMobiusUrl","url","info","concat","method","file","updateActiveMobius","setMobiusServers","_postKeepAlive","_asyncToGenerator2","_regenerator","mark","_callee","_headers","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","_headers2","_callee2$","_context2","t0","fetch","t1","DEVICES_ENDPOINT_RESOURCE","t2","DELETE","t3","t4","credentials","getUserToken","t5","sent","WEBEX_WEB_CLIENT","uuid","t6","t7","t8","warn","setStatus","INACTIVE","LINE_EVENTS","UNREGISTERED","json","deleteRegistration","_x2","_x3","_x4","_postRegistration","_callee3","_headers3","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","excessVal","scheduledTime","_args10","_callee10$","_context10","startFailoverTimer","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","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","exports","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 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} 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\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 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 if (timeElapsed + interval > REG_TRY_BACKUP_TIMER_VAL_IN_SEC) {\n const excessVal = timeElapsed + interval - REG_TRY_BACKUP_TIMER_VAL_IN_SEC;\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.lineEmitter(LINE_EVENTS.REGISTERED, resp.body as IDeviceInfo);\n this.registrationStatus = RegistrationStatus.ACTIVE;\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 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 < 5) {\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 >= 5) {\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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"}