@webex/calling 3.12.0-next.9 → 3.12.0-next.91

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 (263) hide show
  1. package/dist/CallRecording/CallRecording.js +160 -0
  2. package/dist/CallRecording/CallRecording.js.map +1 -0
  3. package/dist/CallRecording/CallRecording.test.js +257 -0
  4. package/dist/CallRecording/CallRecording.test.js.map +1 -0
  5. package/dist/CallRecording/WxcCallRecordingConnector.js +577 -0
  6. package/dist/CallRecording/WxcCallRecordingConnector.js.map +1 -0
  7. package/dist/CallRecording/WxcCallRecordingConnector.test.js +652 -0
  8. package/dist/CallRecording/WxcCallRecordingConnector.test.js.map +1 -0
  9. package/dist/CallRecording/callRecordingFixtures.js +235 -0
  10. package/dist/CallRecording/callRecordingFixtures.js.map +1 -0
  11. package/dist/CallRecording/constants.js +50 -0
  12. package/dist/CallRecording/constants.js.map +1 -0
  13. package/dist/CallRecording/types.js +137 -0
  14. package/dist/CallRecording/types.js.map +1 -0
  15. package/dist/CallRecording/utils.js +42 -0
  16. package/dist/CallRecording/utils.js.map +1 -0
  17. package/dist/CallRecording/utils.test.js +97 -0
  18. package/dist/CallRecording/utils.test.js.map +1 -0
  19. package/dist/CallingClient/CallingClient.js +456 -226
  20. package/dist/CallingClient/CallingClient.js.map +1 -1
  21. package/dist/CallingClient/CallingClient.test.js +513 -154
  22. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  23. package/dist/CallingClient/calling/call.js +634 -454
  24. package/dist/CallingClient/calling/call.js.map +1 -1
  25. package/dist/CallingClient/calling/call.test.js +809 -451
  26. package/dist/CallingClient/calling/call.test.js.map +1 -1
  27. package/dist/CallingClient/calling/callManager.js +106 -35
  28. package/dist/CallingClient/calling/callManager.js.map +1 -1
  29. package/dist/CallingClient/calling/callManager.test.js +140 -0
  30. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  31. package/dist/CallingClient/calling/types.js +5 -0
  32. package/dist/CallingClient/calling/types.js.map +1 -1
  33. package/dist/CallingClient/constants.js +32 -3
  34. package/dist/CallingClient/constants.js.map +1 -1
  35. package/dist/CallingClient/line/index.js +8 -1
  36. package/dist/CallingClient/line/index.js.map +1 -1
  37. package/dist/CallingClient/line/line.test.js +62 -10
  38. package/dist/CallingClient/line/line.test.js.map +1 -1
  39. package/dist/CallingClient/registration/register.js +890 -497
  40. package/dist/CallingClient/registration/register.js.map +1 -1
  41. package/dist/CallingClient/registration/register.test.js +649 -58
  42. package/dist/CallingClient/registration/register.test.js.map +1 -1
  43. package/dist/CallingClient/registration/types.js +26 -0
  44. package/dist/CallingClient/registration/types.js.map +1 -1
  45. package/dist/CallingClient/registration/webWorker.js +41 -104
  46. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  47. package/dist/CallingClient/registration/webWorker.test.js +39 -153
  48. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  49. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  50. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  51. package/dist/CallingClient/types.js +7 -0
  52. package/dist/CallingClient/types.js.map +1 -1
  53. package/dist/CallingClient/utils/constants.js +58 -0
  54. package/dist/CallingClient/utils/constants.js.map +1 -0
  55. package/dist/CallingClient/utils/index.js +63 -0
  56. package/dist/CallingClient/utils/index.js.map +1 -0
  57. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  58. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  59. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +221 -0
  60. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  61. package/dist/CallingClient/utils/request.js +435 -0
  62. package/dist/CallingClient/utils/request.js.map +1 -0
  63. package/dist/CallingClient/utils/request.test.js +999 -0
  64. package/dist/CallingClient/utils/request.test.js.map +1 -0
  65. package/dist/CallingClient/utils/types.js +7 -0
  66. package/dist/CallingClient/utils/types.js.map +1 -0
  67. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  68. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  69. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  70. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  71. package/dist/Contacts/ContactsClient.js +13 -11
  72. package/dist/Contacts/ContactsClient.js.map +1 -1
  73. package/dist/Contacts/ContactsClient.test.js +3 -8
  74. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  75. package/dist/Errors/types.js +2 -0
  76. package/dist/Errors/types.js.map +1 -1
  77. package/dist/Events/types.js +38 -1
  78. package/dist/Events/types.js.map +1 -1
  79. package/dist/Metrics/index.js +63 -2
  80. package/dist/Metrics/index.js.map +1 -1
  81. package/dist/Metrics/index.test.js +357 -1
  82. package/dist/Metrics/index.test.js.map +1 -1
  83. package/dist/Metrics/types.js +19 -1
  84. package/dist/Metrics/types.js.map +1 -1
  85. package/dist/SDKConnector/types.js.map +1 -1
  86. package/dist/api.js +56 -0
  87. package/dist/api.js.map +1 -1
  88. package/dist/common/Utils.js +212 -71
  89. package/dist/common/Utils.js.map +1 -1
  90. package/dist/common/Utils.test.js +417 -181
  91. package/dist/common/Utils.test.js.map +1 -1
  92. package/dist/common/testUtil.js +10 -5
  93. package/dist/common/testUtil.js.map +1 -1
  94. package/dist/common/types.js +3 -0
  95. package/dist/common/types.js.map +1 -1
  96. package/dist/index.js +171 -40
  97. package/dist/index.js.map +1 -1
  98. package/dist/mobius-socket/config.js +24 -0
  99. package/dist/mobius-socket/config.js.map +1 -0
  100. package/dist/mobius-socket/errors.js +143 -0
  101. package/dist/mobius-socket/errors.js.map +1 -0
  102. package/dist/mobius-socket/errors.test.js +20 -0
  103. package/dist/mobius-socket/errors.test.js.map +1 -0
  104. package/dist/mobius-socket/index.js +57 -0
  105. package/dist/mobius-socket/index.js.map +1 -0
  106. package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
  107. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  108. package/dist/mobius-socket/mobius-socket.js +849 -0
  109. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  110. package/dist/mobius-socket/mobius-socket.test.js +1898 -0
  111. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  112. package/dist/mobius-socket/socket/constants.js +55 -0
  113. package/dist/mobius-socket/socket/constants.js.map +1 -0
  114. package/dist/mobius-socket/socket/index.js +15 -0
  115. package/dist/mobius-socket/socket/index.js.map +1 -0
  116. package/dist/mobius-socket/socket/socket-base.js +604 -0
  117. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  118. package/dist/mobius-socket/socket/socket.js +19 -0
  119. package/dist/mobius-socket/socket/socket.js.map +1 -0
  120. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  121. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  122. package/dist/mobius-socket/socket/types.js +7 -0
  123. package/dist/mobius-socket/socket/types.js.map +1 -0
  124. package/dist/mobius-socket/socket.test.js +727 -0
  125. package/dist/mobius-socket/socket.test.js.map +1 -0
  126. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  127. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  128. package/dist/mobius-socket/test/promise-tick.js +28 -0
  129. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  130. package/dist/mobius-socket/types.js +7 -0
  131. package/dist/mobius-socket/types.js.map +1 -0
  132. package/dist/module/CallRecording/CallRecording.js +56 -0
  133. package/dist/module/CallRecording/WxcCallRecordingConnector.js +257 -0
  134. package/dist/module/CallRecording/callRecordingFixtures.js +201 -0
  135. package/dist/module/CallRecording/constants.js +28 -0
  136. package/dist/module/CallRecording/types.js +19 -0
  137. package/dist/module/CallRecording/utils.js +14 -0
  138. package/dist/module/CallingClient/CallingClient.js +126 -10
  139. package/dist/module/CallingClient/calling/call.js +198 -66
  140. package/dist/module/CallingClient/calling/callManager.js +51 -11
  141. package/dist/module/CallingClient/calling/types.js +2 -0
  142. package/dist/module/CallingClient/constants.js +27 -0
  143. package/dist/module/CallingClient/line/index.js +4 -2
  144. package/dist/module/CallingClient/registration/register.js +266 -64
  145. package/dist/module/CallingClient/registration/types.js +5 -1
  146. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  147. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  148. package/dist/module/CallingClient/utils/constants.js +36 -0
  149. package/dist/module/CallingClient/utils/index.js +5 -0
  150. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  151. package/dist/module/CallingClient/utils/request.js +211 -0
  152. package/dist/module/CallingClient/utils/types.js +1 -0
  153. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  154. package/dist/module/Contacts/ContactsClient.js +1 -1
  155. package/dist/module/Errors/types.js +2 -0
  156. package/dist/module/Events/types.js +23 -0
  157. package/dist/module/Metrics/index.js +48 -1
  158. package/dist/module/Metrics/types.js +18 -0
  159. package/dist/module/api.js +3 -2
  160. package/dist/module/common/Utils.js +85 -22
  161. package/dist/module/common/testUtil.js +6 -1
  162. package/dist/module/common/types.js +3 -0
  163. package/dist/module/index.js +7 -3
  164. package/dist/module/mobius-socket/config.js +15 -0
  165. package/dist/module/mobius-socket/errors.js +58 -0
  166. package/dist/module/mobius-socket/index.js +24 -0
  167. package/dist/module/mobius-socket/mobius-socket.js +593 -0
  168. package/dist/module/mobius-socket/socket/constants.js +26 -0
  169. package/dist/module/mobius-socket/socket/index.js +4 -0
  170. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  171. package/dist/module/mobius-socket/socket/socket.js +9 -0
  172. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  173. package/dist/module/mobius-socket/socket/types.js +1 -0
  174. package/dist/module/mobius-socket/types.js +1 -0
  175. package/dist/types/CallRecording/CallRecording.d.ts +18 -0
  176. package/dist/types/CallRecording/CallRecording.d.ts.map +1 -0
  177. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts +23 -0
  178. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts.map +1 -0
  179. package/dist/types/CallRecording/callRecordingFixtures.d.ts +61 -0
  180. package/dist/types/CallRecording/callRecordingFixtures.d.ts.map +1 -0
  181. package/dist/types/CallRecording/constants.d.ts +29 -0
  182. package/dist/types/CallRecording/constants.d.ts.map +1 -0
  183. package/dist/types/CallRecording/types.d.ts +176 -0
  184. package/dist/types/CallRecording/types.d.ts.map +1 -0
  185. package/dist/types/CallRecording/utils.d.ts +3 -0
  186. package/dist/types/CallRecording/utils.d.ts.map +1 -0
  187. package/dist/types/CallingClient/CallingClient.d.ts +8 -0
  188. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  189. package/dist/types/CallingClient/calling/call.d.ts +17 -3
  190. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  191. package/dist/types/CallingClient/calling/callManager.d.ts +8 -4
  192. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  193. package/dist/types/CallingClient/calling/types.d.ts +38 -9
  194. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  195. package/dist/types/CallingClient/constants.d.ts +27 -0
  196. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  197. package/dist/types/CallingClient/line/index.d.ts +1 -1
  198. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  199. package/dist/types/CallingClient/registration/register.d.ts +8 -1
  200. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  201. package/dist/types/CallingClient/registration/types.d.ts +27 -2
  202. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  203. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  204. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  205. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  206. package/dist/types/CallingClient/types.d.ts +4 -2
  207. package/dist/types/CallingClient/types.d.ts.map +1 -1
  208. package/dist/types/CallingClient/utils/constants.d.ts +35 -0
  209. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  210. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  211. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  212. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  213. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  214. package/dist/types/CallingClient/utils/request.d.ts +28 -0
  215. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  216. package/dist/types/CallingClient/utils/types.d.ts +34 -0
  217. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  218. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  219. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  220. package/dist/types/Errors/types.d.ts +2 -0
  221. package/dist/types/Errors/types.d.ts.map +1 -1
  222. package/dist/types/Events/types.d.ts +80 -6
  223. package/dist/types/Events/types.d.ts.map +1 -1
  224. package/dist/types/Metrics/index.d.ts.map +1 -1
  225. package/dist/types/Metrics/types.d.ts +19 -2
  226. package/dist/types/Metrics/types.d.ts.map +1 -1
  227. package/dist/types/SDKConnector/types.d.ts +39 -12
  228. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  229. package/dist/types/api.d.ts +6 -4
  230. package/dist/types/api.d.ts.map +1 -1
  231. package/dist/types/common/Utils.d.ts +9 -4
  232. package/dist/types/common/Utils.d.ts.map +1 -1
  233. package/dist/types/common/testUtil.d.ts +5 -1
  234. package/dist/types/common/testUtil.d.ts.map +1 -1
  235. package/dist/types/common/types.d.ts +5 -1
  236. package/dist/types/common/types.d.ts.map +1 -1
  237. package/dist/types/index.d.ts +9 -4
  238. package/dist/types/index.d.ts.map +1 -1
  239. package/dist/types/mobius-socket/config.d.ts +17 -0
  240. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  241. package/dist/types/mobius-socket/errors.d.ts +32 -0
  242. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  243. package/dist/types/mobius-socket/index.d.ts +14 -0
  244. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  245. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  246. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  247. package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
  248. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  249. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  250. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  251. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  252. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  253. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  254. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  255. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  256. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  257. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  258. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  259. package/dist/types/mobius-socket/types.d.ts +21 -0
  260. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  261. package/package.json +21 -5
  262. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  263. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -19,12 +19,12 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regene
19
19
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
20
20
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
21
21
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
22
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
22
23
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
23
24
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
24
25
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
25
26
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
26
27
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
27
- var _uuid = require("uuid");
28
28
  var _constants = require("../../common/constants");
29
29
  var _common = require("../../common");
30
30
  var _webWorkerStr = _interopRequireDefault(require("./webWorkerStr"));
@@ -32,10 +32,12 @@ var _types = require("../../Metrics/types");
32
32
  var _Metrics = require("../../Metrics");
33
33
  var _calling = require("../calling");
34
34
  var _Logger = _interopRequireDefault(require("../../Logger"));
35
+ var _types2 = require("./types");
35
36
  var _SDKConnector = _interopRequireDefault(require("../../SDKConnector"));
36
- var _types2 = require("../../common/types");
37
+ var _types3 = require("../../common/types");
37
38
  var _constants2 = require("../constants");
38
- var _types3 = require("../line/types");
39
+ var _types4 = require("../line/types");
40
+ var _request = require("../utils/request");
39
41
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"]; if (!t) { if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
40
42
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
41
43
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -74,16 +76,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
74
76
  (0, _defineProperty2.default)(this, "retryAfter", void 0);
75
77
  (0, _defineProperty2.default)(this, "scheduled429Retry", false);
76
78
  (0, _defineProperty2.default)(this, "webWorker", void 0);
79
+ (0, _defineProperty2.default)(this, "apiRequest", void 0);
77
80
  this.jwe = jwe;
78
81
  this.sdkConnector = _SDKConnector.default;
79
82
  this.serviceData = serviceData;
80
- this.isCCFlow = serviceData.indicator === _types2.ServiceIndicator.CONTACT_CENTER;
83
+ this.isCCFlow = serviceData.indicator === _types3.ServiceIndicator.CONTACT_CENTER;
81
84
  if (!this.sdkConnector.getWebex()) {
82
85
  _SDKConnector.default.setWebex(webex);
83
86
  }
84
87
  this.webex = this.sdkConnector.getWebex();
85
88
  this.userId = this.webex.internal.device.userId;
86
- this.registrationStatus = _types2.RegistrationStatus.IDLE;
89
+ this.registrationStatus = _types3.RegistrationStatus.IDLE;
87
90
  this.failback429RetryAttempts = 0;
88
91
  _Logger.default.setLogger(logLevel, _constants2.REGISTRATION_FILE);
89
92
  this.rehomingIntervalMin = _constants2.DEFAULT_REHOMING_INTERVAL_MIN;
@@ -94,8 +97,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
94
97
  this.lineEmitter = lineEmitter;
95
98
  this.primaryMobiusUris = [];
96
99
  this.backupMobiusUris = [];
100
+ this.apiRequest = _request.APIRequest.getInstance({
101
+ webex: this.webex
102
+ });
97
103
  }
98
104
  return (0, _createClass2.default)(Registration, [{
105
+ key: "getServerType",
106
+ value: function getServerType(url) {
107
+ var _this$backupMobiusUri;
108
+ return this.primaryMobiusUris.includes(url) && 'PRIMARY' || ((_this$backupMobiusUri = this.backupMobiusUris) === null || _this$backupMobiusUri === void 0 ? void 0 : _this$backupMobiusUri.includes(url)) && 'BACKUP' || 'UNKNOWN';
109
+ }
110
+ }, {
99
111
  key: "getFailoverCacheKey",
100
112
  value: function getFailoverCacheKey() {
101
113
  return "".concat(_constants2.FAILOVER_CACHE_PREFIX, ".").concat(this.userId || 'unknown');
@@ -218,50 +230,47 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
218
230
  key: "deleteRegistration",
219
231
  value: (function () {
220
232
  var _deleteRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(url, deviceId, deviceUrl) {
221
- var _response;
222
- var response, _t2, _t3, _t4, _t5, _t6, _t7, _t8, _t9, _t0;
233
+ var response, requestObj, _t2;
223
234
  return _regenerator.default.wrap(function (_context2) {
224
235
  while (1) switch (_context2.prev = _context2.next) {
225
236
  case 0:
226
- _context2.prev = 0;
227
- _t2 = fetch;
228
- _t3 = "".concat(url).concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId);
229
- _t4 = _types2.HTTP_METHODS.DELETE;
230
- _t5 = _defineProperty2.default;
231
- _t6 = _defineProperty2.default;
232
- _t7 = _defineProperty2.default;
233
- _t8 = (0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl);
234
- _context2.next = 1;
235
- return this.webex.credentials.getUserToken();
236
- case 1:
237
- _t9 = _t5(_t6(_t7(_t8, "Authorization", _context2.sent), "trackingId", "".concat(_constants2.WEBEX_WEB_CLIENT, "_").concat((0, _uuid.v4)())), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT);
237
+ requestObj = {
238
+ uri: "".concat(url).concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId),
239
+ method: _types3.HTTP_METHODS.DELETE,
240
+ headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
241
+ service: _types3.ALLOWED_SERVICES.MOBIUS
242
+ };
243
+ if (this.apiRequest.isSocketEnabled()) {
244
+ // @ts-ignore - body is added for mobius wss support, it is not used for mobius http
245
+ requestObj.body = {
246
+ deviceId: deviceId
247
+ };
248
+ }
249
+ _context2.prev = 1;
238
250
  _context2.next = 2;
239
- return _t2(_t3, {
240
- method: _t4,
241
- headers: _t9
242
- });
251
+ return this.apiRequest.makeRequest(requestObj);
243
252
  case 2:
244
253
  response = _context2.sent;
245
254
  _context2.next = 4;
246
255
  break;
247
256
  case 3:
248
257
  _context2.prev = 3;
249
- _t0 = _context2["catch"](0);
250
- _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t0)), {
258
+ _t2 = _context2["catch"](1);
259
+ _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t2)), {
251
260
  file: _constants2.REGISTRATION_FILE,
252
261
  method: _constants2.METHODS.DELETE_REGISTRATION
253
262
  });
254
263
  _context2.next = 4;
255
264
  return (0, _common.uploadLogs)();
256
265
  case 4:
257
- this.setStatus(_types2.RegistrationStatus.INACTIVE);
258
- this.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
259
- return _context2.abrupt("return", (_response = response) === null || _response === void 0 ? void 0 : _response.json());
266
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
267
+ this.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
268
+ return _context2.abrupt("return", response);
260
269
  case 5:
261
270
  case "end":
262
271
  return _context2.stop();
263
272
  }
264
- }, _callee2, this, [[0, 3]]);
273
+ }, _callee2, this, [[1, 3]]);
265
274
  }));
266
275
  function deleteRegistration(_x, _x2, _x3) {
267
276
  return _deleteRegistration.apply(this, arguments);
@@ -288,12 +297,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
288
297
  jwe: this.jwe
289
298
  }) : this.serviceData
290
299
  };
291
- return _context3.abrupt("return", this.webex.request({
300
+ return _context3.abrupt("return", this.apiRequest.makeRequest({
292
301
  uri: "".concat(url, "device"),
293
- method: _types2.HTTP_METHODS.POST,
302
+ method: _types3.HTTP_METHODS.POST,
294
303
  headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceInfo.clientDeviceUri), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
295
304
  body: deviceInfo,
296
- service: _types2.ALLOWED_SERVICES.MOBIUS
305
+ service: _types3.ALLOWED_SERVICES.MOBIUS
297
306
  }));
298
307
  case 1:
299
308
  case "end":
@@ -316,25 +325,44 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
316
325
  value: (function () {
317
326
  var _restorePreviousRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5(caller) {
318
327
  var _this = this;
319
- var abort;
328
+ var loggerContext, abort;
320
329
  return _regenerator.default.wrap(function (_context5) {
321
330
  while (1) switch (_context5.prev = _context5.next) {
322
331
  case 0:
332
+ loggerContext = {
333
+ file: _constants2.REGISTRATION_FILE,
334
+ method: _constants2.METHODS.RESTORE_PREVIOUS_REGISTRATION
335
+ };
336
+ _Logger.default.info("".concat(_constants.METHOD_START_MESSAGE, " - caller: ").concat(caller, ", activeMobiusUrl: ").concat(this.activeMobiusUrl), loggerContext);
323
337
  abort = false;
324
- if (!this.activeMobiusUrl) {
325
- _context5.next = 6;
338
+ if (!(this.apiRequest.isSocketEnabled() && "".concat(this.apiRequest.getConnectedWebSocketUrl(), "/") !== this.activeMobiusUrl)) {
339
+ _context5.next = 1;
326
340
  break;
327
341
  }
342
+ _Logger.default.info("Disconnecting from Mobius socket to restore previous registration.", {
343
+ file: _constants2.REGISTRATION_FILE,
344
+ method: 'restorePreviousRegistration'
345
+ });
328
346
  _context5.next = 1;
329
- return this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);
347
+ return this.apiRequest.disconnectFromMobiusSocket({
348
+ code: 3050,
349
+ reason: 'done (permanent)'
350
+ });
330
351
  case 1:
352
+ if (!this.activeMobiusUrl) {
353
+ _context5.next = 7;
354
+ break;
355
+ }
356
+ _context5.next = 2;
357
+ return this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);
358
+ case 2:
331
359
  abort = _context5.sent;
332
360
  if (!this.retryAfter) {
333
- _context5.next = 6;
361
+ _context5.next = 7;
334
362
  break;
335
363
  }
336
364
  if (!(this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT)) {
337
- _context5.next = 2;
365
+ _context5.next = 3;
338
366
  break;
339
367
  }
340
368
  // If retry-after is less than threshold, honor it and schedule retry
@@ -350,28 +378,30 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
350
378
  }
351
379
  }, _callee4);
352
380
  })), this.retryAfter * 1000);
353
- _context5.next = 5;
381
+ _context5.next = 6;
354
382
  break;
355
- case 2:
383
+ case 3:
356
384
  if (!(this.primaryMobiusUris.includes(this.activeMobiusUrl) && this.backupMobiusUris.length > 0)) {
357
- _context5.next = 4;
385
+ _context5.next = 5;
358
386
  break;
359
387
  }
360
- _context5.next = 3;
388
+ _context5.next = 4;
361
389
  return this.attemptRegistrationWithServers(caller, this.backupMobiusUris);
362
- case 3:
390
+ case 4:
363
391
  abort = _context5.sent;
364
- _context5.next = 5;
392
+ _context5.next = 6;
365
393
  break;
366
- case 4:
367
- // If we are using backup and got 429, restart registration
368
- this.restartRegistration(caller);
369
394
  case 5:
395
+ _context5.next = 6;
396
+ return this.restartRegistration(caller);
397
+ case 6:
370
398
  this.retryAfter = undefined;
399
+ _Logger.default.log("restorePreviousRegistration completed via 429 retry-after path - caller: ".concat(caller), loggerContext);
371
400
  return _context5.abrupt("return", true);
372
- case 6:
373
- return _context5.abrupt("return", abort);
374
401
  case 7:
402
+ _Logger.default.log("restorePreviousRegistration completed - caller: ".concat(caller, ", deviceRegistered: ").concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
403
+ return _context5.abrupt("return", abort);
404
+ case 8:
375
405
  case "end":
376
406
  return _context5.stop();
377
407
  }
@@ -390,12 +420,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
390
420
  key: "handle404KeepaliveFailure",
391
421
  value: (function () {
392
422
  var _handle404KeepaliveFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6(caller) {
393
- var abort;
423
+ var loggerContext, abort;
394
424
  return _regenerator.default.wrap(function (_context6) {
395
425
  while (1) switch (_context6.prev = _context6.next) {
396
426
  case 0:
427
+ loggerContext = {
428
+ file: _constants2.REGISTRATION_FILE,
429
+ method: _constants2.METHODS.HANDLE_404_KEEPALIVE_FAILURE
430
+ };
431
+ _Logger.default.info("".concat(_constants.METHOD_START_MESSAGE, " - caller: ").concat(caller), loggerContext);
397
432
  if (!(caller === _constants2.KEEPALIVE_UTIL)) {
398
- _context6.next = 2;
433
+ _context6.next = 4;
399
434
  break;
400
435
  }
401
436
  _context6.next = 1;
@@ -403,12 +438,18 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
403
438
  case 1:
404
439
  abort = _context6.sent;
405
440
  if (!(!abort && !this.isDeviceRegistered())) {
406
- _context6.next = 2;
441
+ _context6.next = 3;
407
442
  break;
408
443
  }
444
+ _Logger.default.warn('Keepalive 404 recovery: re-registration did not complete, starting failover timer', loggerContext);
409
445
  _context6.next = 2;
410
446
  return this.startFailoverTimer();
411
447
  case 2:
448
+ _context6.next = 4;
449
+ break;
450
+ case 3:
451
+ _Logger.default.log("Keepalive 404 recovery handled - deviceRegistered: ".concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
452
+ case 4:
412
453
  case "end":
413
454
  return _context6.stop();
414
455
  }
@@ -419,6 +460,60 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
419
460
  }
420
461
  return handle404KeepaliveFailure;
421
462
  }()
463
+ /**
464
+ * Hard stops a calling session that Mobius reported as superseded, in response to a
465
+ * `409 Conflict` on a keepalive (device_status) message.
466
+ *
467
+ * Mobius returns 409 when this deviceId is gone but the same user still has an active
468
+ * registration elsewhere (typically calling opened in another browser tab, which
469
+ * superseded this device). Re-registering here would unregister the other device and
470
+ * restart the registration ping-pong between the two, so no registration is attempted:
471
+ * the keepalive worker is terminated, the Mobius WebSocket is closed and the consumer
472
+ * receives `LINE_EVENTS.UNREGISTERED` carrying `lineError` as the reason.
473
+ *
474
+ * @param lineError - Superseded-session error built by `handleRegistrationErrors`.
475
+ * @param error - The keepalive failure payload forwarded by the keepalive worker.
476
+ * @param serverType - Mobius server type the keepalive was sent to, for metrics.
477
+ * @param keepaliveRetryCount - Consecutive keepalive failures reported by the worker.
478
+ */
479
+ )
480
+ }, {
481
+ key: "handle409KeepaliveFailure",
482
+ value: (function () {
483
+ var _handle409KeepaliveFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7(lineError, error, serverType, keepaliveRetryCount) {
484
+ var _error$headers$tracki, _error$headers;
485
+ var loggerContext;
486
+ return _regenerator.default.wrap(function (_context7) {
487
+ while (1) switch (_context7.prev = _context7.next) {
488
+ case 0:
489
+ loggerContext = {
490
+ file: _constants2.REGISTRATION_FILE,
491
+ method: _constants2.METHODS.HANDLE_409_KEEPALIVE_FAILURE
492
+ };
493
+ _Logger.default.warn("Stopping keepalive without re-registration, session superseded by another device for this user - keepaliveRetryCount: ".concat(keepaliveRetryCount), loggerContext);
494
+
495
+ /* Stop the keepalive worker up front so no further keepalive is sent while cleanup waits on the mutex. */
496
+ this.clearKeepaliveTimer();
497
+ this.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.KEEPALIVE_ERROR, _types.REG_ACTION.KEEPALIVE_FAILURE, _types.METRIC_TYPE.BEHAVIORAL, _constants2.METHODS.HANDLE_409_KEEPALIVE_FAILURE, serverType, (_error$headers$tracki = (_error$headers = error.headers) === null || _error$headers === void 0 ? void 0 : _error$headers.trackingid) !== null && _error$headers$tracki !== void 0 ? _error$headers$tracki : '', keepaliveRetryCount, lineError);
498
+ _context7.next = 1;
499
+ return this.registrationCleanup(_constants2.METHODS.HANDLE_409_KEEPALIVE_FAILURE, {
500
+ reason: _types2.HARD_STOP_REASON.SESSION_SUPERSEDED,
501
+ error: lineError
502
+ });
503
+ case 1:
504
+ _context7.next = 2;
505
+ return (0, _common.uploadLogs)();
506
+ case 2:
507
+ case "end":
508
+ return _context7.stop();
509
+ }
510
+ }, _callee7, this);
511
+ }));
512
+ function handle409KeepaliveFailure(_x7, _x8, _x9, _x0) {
513
+ return _handle409KeepaliveFailure.apply(this, arguments);
514
+ }
515
+ return handle409KeepaliveFailure;
516
+ }()
422
517
  /**
423
518
  * Callback for handling 429 retry response from the server
424
519
  */
@@ -426,21 +521,21 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
426
521
  }, {
427
522
  key: "handle429Retry",
428
523
  value: (function () {
429
- var _handle429Retry = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8(retryAfter, caller) {
524
+ var _handle429Retry = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee9(retryAfter, caller) {
430
525
  var _this2 = this;
431
526
  var interval, abort;
432
- return _regenerator.default.wrap(function (_context8) {
433
- while (1) switch (_context8.prev = _context8.next) {
527
+ return _regenerator.default.wrap(function (_context9) {
528
+ while (1) switch (_context9.prev = _context9.next) {
434
529
  case 0:
435
530
  if (!(caller === _constants2.FAILBACK_UTIL)) {
436
- _context8.next = 4;
531
+ _context9.next = 4;
437
532
  break;
438
533
  }
439
534
  if (!(this.failback429RetryAttempts >= _constants2.REG_FAILBACK_429_MAX_RETRIES)) {
440
- _context8.next = 1;
535
+ _context9.next = 1;
441
536
  break;
442
537
  }
443
- return _context8.abrupt("return");
538
+ return _context9.abrupt("return");
444
539
  case 1:
445
540
  this.clearFailbackTimer();
446
541
  this.failback429RetryAttempts += 1;
@@ -451,26 +546,26 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
451
546
  interval = this.getRegRetryInterval(this.failback429RetryAttempts);
452
547
  this.startFailbackTimer(interval);
453
548
  this.scheduled429Retry = true;
454
- _context8.next = 2;
549
+ _context9.next = 2;
455
550
  return this.restorePreviousRegistration(_constants2.REG_429_RETRY_UTIL);
456
551
  case 2:
457
- abort = _context8.sent;
552
+ abort = _context9.sent;
458
553
  if (!(!abort && !this.isDeviceRegistered())) {
459
- _context8.next = 3;
554
+ _context9.next = 3;
460
555
  break;
461
556
  }
462
- _context8.next = 3;
557
+ _context9.next = 3;
463
558
  return this.restartRegistration(_constants2.REG_429_RETRY_UTIL);
464
559
  case 3:
465
- _context8.next = 5;
560
+ _context9.next = 5;
466
561
  break;
467
562
  case 4:
468
563
  if (caller === _constants2.KEEPALIVE_UTIL) {
469
564
  this.clearKeepaliveTimer();
470
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7() {
565
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8() {
471
566
  var _this2$deviceInfo$dev;
472
- return _regenerator.default.wrap(function (_context7) {
473
- while (1) switch (_context7.prev = _context7.next) {
567
+ return _regenerator.default.wrap(function (_context8) {
568
+ while (1) switch (_context8.prev = _context8.next) {
474
569
  case 0:
475
570
  _Logger.default.log("Resuming keepalive after ".concat(retryAfter, " seconds"), {
476
571
  file: _constants2.REGISTRATION_FILE,
@@ -478,24 +573,24 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
478
573
  });
479
574
 
480
575
  // Resume the keepalive after waiting for the retry after period
481
- _context7.next = 1;
576
+ _context8.next = 1;
482
577
  return _this2.startKeepaliveTimer((_this2$deviceInfo$dev = _this2.deviceInfo.device) === null || _this2$deviceInfo$dev === void 0 ? void 0 : _this2$deviceInfo$dev.uri, _this2.deviceInfo.keepaliveInterval, 'UNKNOWN');
483
578
  case 1:
484
579
  case "end":
485
- return _context7.stop();
580
+ return _context8.stop();
486
581
  }
487
- }, _callee7);
488
- })), retryAfter * 1000);
582
+ }, _callee8);
583
+ })), (retryAfter - Number(this.deviceInfo.keepaliveInterval || 0)) * 1000);
489
584
  } else {
490
585
  this.retryAfter = retryAfter;
491
586
  }
492
587
  case 5:
493
588
  case "end":
494
- return _context8.stop();
589
+ return _context9.stop();
495
590
  }
496
- }, _callee8, this);
591
+ }, _callee9, this);
497
592
  }));
498
- function handle429Retry(_x7, _x8) {
593
+ function handle429Retry(_x1, _x10) {
499
594
  return _handle429Retry.apply(this, arguments);
500
595
  }
501
596
  return handle429Retry;
@@ -524,7 +619,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
524
619
  }, {
525
620
  key: "startFailoverTimer",
526
621
  value: (function () {
527
- var _startFailoverTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11() {
622
+ var _startFailoverTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
528
623
  var _this3 = this;
529
624
  var attempt,
530
625
  timeElapsed,
@@ -534,12 +629,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
534
629
  excessVal,
535
630
  abort,
536
631
  scheduledTime,
537
- _args11 = arguments;
538
- return _regenerator.default.wrap(function (_context11) {
539
- while (1) switch (_context11.prev = _context11.next) {
632
+ _args12 = arguments;
633
+ return _regenerator.default.wrap(function (_context12) {
634
+ while (1) switch (_context12.prev = _context12.next) {
540
635
  case 0:
541
- attempt = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : 1;
542
- timeElapsed = _args11.length > 1 && _args11[1] !== undefined ? _args11[1] : 0;
636
+ attempt = _args12.length > 0 && _args12[0] !== undefined ? _args12[0] : 1;
637
+ timeElapsed = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : 0;
543
638
  loggerContext = {
544
639
  file: _constants2.REGISTRATION_FILE,
545
640
  method: _constants2.FAILOVER_UTIL
@@ -554,7 +649,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
554
649
  this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;
555
650
  }
556
651
  if (!(interval > _constants2.BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately)) {
557
- _context11.next = 1;
652
+ _context12.next = 1;
558
653
  break;
559
654
  }
560
655
  scheduledTime = Math.floor((0, _now.default)() / 1000);
@@ -567,47 +662,60 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
567
662
  retryScheduledTime: scheduledTime,
568
663
  serverType: 'primary'
569
664
  });
570
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
571
- return _regenerator.default.wrap(function (_context0) {
572
- while (1) switch (_context0.prev = _context0.next) {
665
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1() {
666
+ return _regenerator.default.wrap(function (_context1) {
667
+ while (1) switch (_context1.prev = _context1.next) {
573
668
  case 0:
574
- _context0.next = 1;
575
- return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee9() {
669
+ _context1.next = 1;
670
+ return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
576
671
  var currentTime;
577
- return _regenerator.default.wrap(function (_context9) {
578
- while (1) switch (_context9.prev = _context9.next) {
672
+ return _regenerator.default.wrap(function (_context0) {
673
+ while (1) switch (_context0.prev = _context0.next) {
579
674
  case 0:
580
- _context9.next = 1;
675
+ _context0.next = 1;
581
676
  return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL);
582
677
  case 1:
583
- abort = _context9.sent;
678
+ abort = _context0.sent;
584
679
  currentTime = Math.floor((0, _now.default)() / 1000);
585
680
  if (!(!abort && !_this3.isDeviceRegistered())) {
586
- _context9.next = 2;
681
+ _context0.next = 2;
587
682
  break;
588
683
  }
589
- _context9.next = 2;
684
+ _context0.next = 2;
590
685
  return _this3.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));
591
686
  case 2:
592
687
  case "end":
593
- return _context9.stop();
688
+ return _context0.stop();
594
689
  }
595
- }, _callee9);
690
+ }, _callee0);
596
691
  })));
597
692
  case 1:
598
693
  case "end":
599
- return _context0.stop();
694
+ return _context1.stop();
600
695
  }
601
- }, _callee0);
696
+ }, _callee1);
602
697
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
603
698
  _Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
604
- _context11.next = 5;
699
+ _context12.next = 7;
605
700
  break;
606
701
  case 1:
607
702
  if (!this.backupMobiusUris.length) {
608
- _context11.next = 3;
703
+ _context12.next = 5;
609
704
  break;
610
705
  }
706
+ if (!this.apiRequest.isSocketEnabled()) {
707
+ _context12.next = 3;
708
+ break;
709
+ }
710
+ _Logger.default.info('Disconnecting from primary Mobius socket for failover to backup servers', loggerContext);
711
+ _context12.next = 2;
712
+ return this.apiRequest.disconnectFromMobiusSocket({
713
+ code: 3050,
714
+ reason: 'done (permanent)'
715
+ });
716
+ case 2:
717
+ _Logger.default.log('Mobius socket disconnect complete prior to backup failover', loggerContext);
718
+ case 3:
611
719
  this.saveFailoverState({
612
720
  attempt: attempt,
613
721
  timeElapsed: timeElapsed,
@@ -616,66 +724,66 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
616
724
  });
617
725
  _Logger.default.info('Failing over to backup servers.', loggerContext);
618
726
  this.failoverImmediately = false;
619
- _context11.next = 2;
727
+ _context12.next = 4;
620
728
  return this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, this.backupMobiusUris);
621
- case 2:
622
- abort = _context11.sent;
729
+ case 4:
730
+ abort = _context12.sent;
623
731
  if (!abort && !this.isDeviceRegistered()) {
624
732
  interval = this.getRegRetryInterval();
625
733
  if (this.retryAfter != null && this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT) {
626
734
  interval = interval < this.retryAfter ? this.retryAfter : interval;
627
735
  }
628
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10() {
629
- return _regenerator.default.wrap(function (_context10) {
630
- while (1) switch (_context10.prev = _context10.next) {
736
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11() {
737
+ return _regenerator.default.wrap(function (_context11) {
738
+ while (1) switch (_context11.prev = _context11.next) {
631
739
  case 0:
632
- _context10.next = 1;
633
- return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1() {
634
- return _regenerator.default.wrap(function (_context1) {
635
- while (1) switch (_context1.prev = _context1.next) {
740
+ _context11.next = 1;
741
+ return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10() {
742
+ return _regenerator.default.wrap(function (_context10) {
743
+ while (1) switch (_context10.prev = _context10.next) {
636
744
  case 0:
637
- _context1.next = 1;
745
+ _context10.next = 1;
638
746
  return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, _this3.backupMobiusUris);
639
747
  case 1:
640
- abort = _context1.sent;
748
+ abort = _context10.sent;
641
749
  if (!(!abort && !_this3.isDeviceRegistered())) {
642
- _context1.next = 3;
750
+ _context10.next = 3;
643
751
  break;
644
752
  }
645
- _context1.next = 2;
753
+ _context10.next = 2;
646
754
  return (0, _common.uploadLogs)();
647
755
  case 2:
648
756
  (0, _common.emitFinalFailure)(function (clientError) {
649
- _this3.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
757
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
650
758
  }, loggerContext);
651
759
  case 3:
652
760
  case "end":
653
- return _context1.stop();
761
+ return _context10.stop();
654
762
  }
655
- }, _callee1);
763
+ }, _callee10);
656
764
  })));
657
765
  case 1:
658
766
  case "end":
659
- return _context10.stop();
767
+ return _context11.stop();
660
768
  }
661
- }, _callee10);
769
+ }, _callee11);
662
770
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
663
771
  _Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
664
772
  }
665
- _context11.next = 5;
773
+ _context12.next = 7;
666
774
  break;
667
- case 3:
668
- _context11.next = 4;
775
+ case 5:
776
+ _context12.next = 6;
669
777
  return (0, _common.uploadLogs)();
670
- case 4:
778
+ case 6:
671
779
  (0, _common.emitFinalFailure)(function (clientError) {
672
- _this3.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
673
- }, loggerContext);
674
- case 5:
780
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
781
+ }, loggerContext, interval < 0 ? 'Timer threshold exceeded during failover' : undefined);
782
+ case 7:
675
783
  case "end":
676
- return _context11.stop();
784
+ return _context12.stop();
677
785
  }
678
- }, _callee11, this);
786
+ }, _callee12, this);
679
787
  }));
680
788
  function startFailoverTimer() {
681
789
  return _startFailoverTimer.apply(this, arguments);
@@ -694,37 +802,65 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
694
802
  this.failbackTimer = undefined;
695
803
  }
696
804
  }
805
+ }, {
806
+ key: "postKeepAlive",
807
+ value: function () {
808
+ var _postKeepAlive = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee13(deviceUrl, url) {
809
+ var _this$deviceInfo$devi;
810
+ return _regenerator.default.wrap(function (_context13) {
811
+ while (1) switch (_context13.prev = _context13.next) {
812
+ case 0:
813
+ return _context13.abrupt("return", this.apiRequest.makeRequest({
814
+ uri: "".concat(url, "/status"),
815
+ method: _types3.HTTP_METHODS.POST,
816
+ headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
817
+ body: {
818
+ deviceId: (_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.deviceId
819
+ },
820
+ service: _types3.ALLOWED_SERVICES.MOBIUS
821
+ }));
822
+ case 1:
823
+ case "end":
824
+ return _context13.stop();
825
+ }
826
+ }, _callee13, this);
827
+ }));
828
+ function postKeepAlive(_x11, _x12) {
829
+ return _postKeepAlive.apply(this, arguments);
830
+ }
831
+ return postKeepAlive;
832
+ }()
697
833
  }, {
698
834
  key: "isPrimaryActive",
699
835
  value: function () {
700
- var _isPrimaryActive = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
701
- var status, _iterator, _step, mobiusUrl, baseUri, response, _ref7, statusCode, _t1, _t10;
702
- return _regenerator.default.wrap(function (_context12) {
703
- while (1) switch (_context12.prev = _context12.next) {
836
+ var _isPrimaryActive = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee14() {
837
+ var status, _iterator, _step, mobiusUrl, baseUri, response, _ref7, statusCode, _t3, _t4;
838
+ return _regenerator.default.wrap(function (_context14) {
839
+ while (1) switch (_context14.prev = _context14.next) {
704
840
  case 0:
705
841
  _iterator = _createForOfIteratorHelper(this.primaryMobiusUris);
706
- _context12.prev = 1;
842
+ _context14.prev = 1;
707
843
  _iterator.s();
708
844
  case 2:
709
845
  if ((_step = _iterator.n()).done) {
710
- _context12.next = 8;
846
+ _context14.next = 8;
711
847
  break;
712
848
  }
713
849
  mobiusUrl = _step.value;
714
- _context12.prev = 3;
715
- baseUri = mobiusUrl.replace(_constants2.URL_ENDPOINT, '/'); // eslint-disable-next-line no-await-in-loop
716
- _context12.next = 4;
850
+ _context14.prev = 3;
851
+ baseUri = mobiusUrl.replace(_constants2.URL_ENDPOINT, '/').replace('wss://', 'https://'); // eslint-disable-next-line no-await-in-loop
852
+ _context14.next = 4;
717
853
  return this.webex.request({
718
854
  uri: "".concat(baseUri, "ping"),
719
- method: _types2.HTTP_METHODS.GET,
855
+ method: _types3.HTTP_METHODS.GET,
720
856
  headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, this.webex.internal.device.url), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
721
- service: _types2.ALLOWED_SERVICES.MOBIUS
857
+ service: _types3.ALLOWED_SERVICES.MOBIUS
722
858
  });
723
859
  case 4:
724
- response = _context12.sent;
860
+ response = _context14.sent;
725
861
  _ref7 = response, statusCode = _ref7.statusCode;
726
862
  if (!(statusCode === 200)) {
727
- _context12.next = 5;
863
+ _context14.next = 5;
728
864
  break;
729
865
  }
730
866
  _Logger.default.info("Ping successful for primary Mobius: ".concat(mobiusUrl), {
@@ -732,39 +868,39 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
732
868
  method: _constants2.FAILBACK_UTIL
733
869
  });
734
870
  status = 'up';
735
- return _context12.abrupt("continue", 8);
871
+ return _context14.abrupt("continue", 8);
736
872
  case 5:
737
- _context12.next = 7;
873
+ _context14.next = 7;
738
874
  break;
739
875
  case 6:
740
- _context12.prev = 6;
741
- _t1 = _context12["catch"](3);
742
- _Logger.default.warn("Ping failed for primary Mobius: ".concat(mobiusUrl, " with error: ").concat((0, _stringify.default)(_t1)), {
876
+ _context14.prev = 6;
877
+ _t3 = _context14["catch"](3);
878
+ _Logger.default.warn("Ping failed for primary Mobius: ".concat(mobiusUrl, " with error: ").concat((0, _stringify.default)(_t3)), {
743
879
  file: _constants2.REGISTRATION_FILE,
744
880
  method: _constants2.FAILBACK_UTIL
745
881
  });
746
882
  status = 'down';
747
883
  case 7:
748
- _context12.next = 2;
884
+ _context14.next = 2;
749
885
  break;
750
886
  case 8:
751
- _context12.next = 10;
887
+ _context14.next = 10;
752
888
  break;
753
889
  case 9:
754
- _context12.prev = 9;
755
- _t10 = _context12["catch"](1);
756
- _iterator.e(_t10);
890
+ _context14.prev = 9;
891
+ _t4 = _context14["catch"](1);
892
+ _iterator.e(_t4);
757
893
  case 10:
758
- _context12.prev = 10;
894
+ _context14.prev = 10;
759
895
  _iterator.f();
760
- return _context12.finish(10);
896
+ return _context14.finish(10);
761
897
  case 11:
762
- return _context12.abrupt("return", status === 'up');
898
+ return _context14.abrupt("return", status === 'up');
763
899
  case 12:
764
900
  case "end":
765
- return _context12.stop();
901
+ return _context14.stop();
766
902
  }
767
- }, _callee12, this, [[1, 9, 10, 11], [3, 6]]);
903
+ }, _callee14, this, [[1, 9, 10, 11], [3, 6]]);
768
904
  }));
769
905
  function isPrimaryActive() {
770
906
  return _isPrimaryActive.apply(this, arguments);
@@ -797,13 +933,21 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
797
933
  }, {
798
934
  key: "initiateFailback",
799
935
  value: function initiateFailback() {
936
+ var loggerContext = {
937
+ file: _constants2.REGISTRATION_FILE,
938
+ method: _constants2.METHODS.INITIATE_FAILBACK
939
+ };
800
940
  if (this.isFailbackRequired()) {
801
941
  if (!this.failbackTimer) {
802
942
  this.failback429RetryAttempts = 0;
803
943
  var intervalInMinutes = this.getFailbackInterval();
944
+ _Logger.default.info("Scheduling failback to primary - intervalMinutes: ".concat(intervalInMinutes), loggerContext);
804
945
  this.startFailbackTimer(intervalInMinutes * _constants2.MINUTES_TO_SEC_MFACTOR);
946
+ } else {
947
+ _Logger.default.info('Failback timer already scheduled, skipping', loggerContext);
805
948
  }
806
949
  } else {
950
+ _Logger.default.info('Failback not required, clearing any pending failback timer', loggerContext);
807
951
  this.failback429RetryAttempts = 0;
808
952
  this.clearFailbackTimer();
809
953
  }
@@ -817,16 +961,16 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
817
961
  key: "startFailbackTimer",
818
962
  value: function startFailbackTimer(intervalInSeconds) {
819
963
  var _this4 = this;
820
- this.failbackTimer = setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee13() {
821
- return _regenerator.default.wrap(function (_context13) {
822
- while (1) switch (_context13.prev = _context13.next) {
964
+ this.failbackTimer = setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee15() {
965
+ return _regenerator.default.wrap(function (_context15) {
966
+ while (1) switch (_context15.prev = _context15.next) {
823
967
  case 0:
824
- return _context13.abrupt("return", _this4.executeFailback());
968
+ return _context15.abrupt("return", _this4.executeFailback());
825
969
  case 1:
826
970
  case "end":
827
- return _context13.stop();
971
+ return _context15.stop();
828
972
  }
829
- }, _callee13);
973
+ }, _callee15);
830
974
  })), intervalInSeconds * _constants2.SEC_TO_MSEC_MFACTOR);
831
975
  _Logger.default.log("Failback scheduled after ".concat(intervalInSeconds, " seconds."), {
832
976
  file: _constants2.REGISTRATION_FILE,
@@ -841,90 +985,103 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
841
985
  }, {
842
986
  key: "executeFailback",
843
987
  value: (function () {
844
- var _executeFailback = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee15() {
988
+ var _executeFailback = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee17() {
845
989
  var _this5 = this;
846
- return _regenerator.default.wrap(function (_context15) {
847
- while (1) switch (_context15.prev = _context15.next) {
990
+ var loggerContext;
991
+ return _regenerator.default.wrap(function (_context17) {
992
+ while (1) switch (_context17.prev = _context17.next) {
848
993
  case 0:
849
- _context15.next = 1;
850
- return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee14() {
994
+ loggerContext = {
995
+ file: _constants2.REGISTRATION_FILE,
996
+ method: _constants2.METHODS.EXECUTE_FAILBACK
997
+ };
998
+ _Logger.default.info(_constants.METHOD_START_MESSAGE, loggerContext);
999
+ _context17.next = 1;
1000
+ return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee16() {
851
1001
  var primaryServerStatus, abort, abortNew;
852
- return _regenerator.default.wrap(function (_context14) {
853
- while (1) switch (_context14.prev = _context14.next) {
1002
+ return _regenerator.default.wrap(function (_context16) {
1003
+ while (1) switch (_context16.prev = _context16.next) {
854
1004
  case 0:
855
1005
  if (!_this5.isFailbackRequired()) {
856
- _context14.next = 11;
1006
+ _context16.next = 13;
857
1007
  break;
858
1008
  }
859
- _context14.next = 1;
1009
+ _context16.next = 1;
860
1010
  return _this5.isPrimaryActive();
861
1011
  case 1:
862
- primaryServerStatus = _context14.sent;
1012
+ primaryServerStatus = _context16.sent;
863
1013
  if (!((0, _keys.default)(_this5.callManager.getActiveCalls()).length === 0 && primaryServerStatus)) {
864
- _context14.next = 10;
1014
+ _context16.next = 12;
865
1015
  break;
866
1016
  }
867
- _Logger.default.info("Attempting failback to primary.", {
868
- file: _constants2.REGISTRATION_FILE,
869
- method: _this5.executeFailback.name
870
- });
871
- _context14.next = 2;
1017
+ _Logger.default.info("Attempting failback to primary.", loggerContext);
1018
+ _context16.next = 2;
872
1019
  return _this5.deregister();
873
1020
  case 2:
874
- _context14.next = 3;
875
- return _this5.attemptRegistrationWithServers(_constants2.FAILBACK_UTIL);
1021
+ if (!_this5.apiRequest.isSocketEnabled()) {
1022
+ _context16.next = 4;
1023
+ break;
1024
+ }
1025
+ _Logger.default.info('Disconnecting from backup Mobius socket for failback to primary', loggerContext);
1026
+ _context16.next = 3;
1027
+ return _this5.apiRequest.disconnectFromMobiusSocket({
1028
+ code: 3050,
1029
+ reason: 'done (permanent)'
1030
+ });
876
1031
  case 3:
877
- abort = _context14.sent;
1032
+ _Logger.default.log('Mobius socket disconnect complete prior to primary failback', loggerContext);
1033
+ case 4:
1034
+ _context16.next = 5;
1035
+ return _this5.attemptRegistrationWithServers(_constants2.FAILBACK_UTIL);
1036
+ case 5:
1037
+ abort = _context16.sent;
878
1038
  if (!(_this5.scheduled429Retry || abort || _this5.isDeviceRegistered())) {
879
- _context14.next = 4;
1039
+ _context16.next = 6;
880
1040
  break;
881
1041
  }
882
- return _context14.abrupt("return");
883
- case 4:
884
- _context14.next = 5;
1042
+ return _context16.abrupt("return");
1043
+ case 6:
1044
+ _context16.next = 7;
885
1045
  return _this5.restorePreviousRegistration(_constants2.FAILBACK_UTIL);
886
- case 5:
887
- abortNew = _context14.sent;
1046
+ case 7:
1047
+ abortNew = _context16.sent;
888
1048
  if (!abortNew) {
889
- _context14.next = 6;
1049
+ _context16.next = 8;
890
1050
  break;
891
1051
  }
892
1052
  _this5.clearFailbackTimer();
893
- return _context14.abrupt("return");
894
- case 6:
1053
+ return _context16.abrupt("return");
1054
+ case 8:
895
1055
  if (_this5.isDeviceRegistered()) {
896
- _context14.next = 8;
1056
+ _context16.next = 10;
897
1057
  break;
898
1058
  }
899
- _context14.next = 7;
900
- return _this5.restartRegistration(_this5.executeFailback.name);
901
- case 7:
902
- _context14.next = 9;
903
- break;
904
- case 8:
905
- _this5.failbackTimer = undefined;
906
- _this5.initiateFailback();
1059
+ _context16.next = 9;
1060
+ return _this5.restartRegistration(loggerContext.method);
907
1061
  case 9:
908
- _context14.next = 11;
1062
+ _context16.next = 11;
909
1063
  break;
910
1064
  case 10:
911
- _Logger.default.info('Active calls present or primary Mobius is down, deferring failback to next cycle.', {
912
- file: _constants2.REGISTRATION_FILE,
913
- method: _this5.executeFailback.name
914
- });
915
1065
  _this5.failbackTimer = undefined;
916
1066
  _this5.initiateFailback();
917
1067
  case 11:
1068
+ _context16.next = 13;
1069
+ break;
1070
+ case 12:
1071
+ _Logger.default.info('Active calls present or primary Mobius is down, deferring failback to next cycle.', loggerContext);
1072
+ _this5.failbackTimer = undefined;
1073
+ _this5.initiateFailback();
1074
+ case 13:
918
1075
  case "end":
919
- return _context14.stop();
1076
+ return _context16.stop();
920
1077
  }
921
- }, _callee14);
1078
+ }, _callee16);
922
1079
  })));
923
1080
  case 1:
924
1081
  case "end":
925
- return _context15.stop();
1082
+ return _context17.stop();
926
1083
  }
927
- }, _callee15, this);
1084
+ }, _callee17, this);
928
1085
  }));
929
1086
  function executeFailback() {
930
1087
  return _executeFailback.apply(this, arguments);
@@ -966,7 +1123,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
966
1123
  }, {
967
1124
  key: "isDeviceRegistered",
968
1125
  value: function isDeviceRegistered() {
969
- return this.registrationStatus === _types2.RegistrationStatus.ACTIVE;
1126
+ return this.registrationStatus === _types3.RegistrationStatus.ACTIVE;
970
1127
  }
971
1128
  }, {
972
1129
  key: "getStatus",
@@ -987,34 +1144,42 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
987
1144
  }, {
988
1145
  key: "restartRegistration",
989
1146
  value: (function () {
990
- var _restartRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee16(caller) {
991
- var abort;
992
- return _regenerator.default.wrap(function (_context16) {
993
- while (1) switch (_context16.prev = _context16.next) {
1147
+ var _restartRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18(caller) {
1148
+ var loggerContext, abort;
1149
+ return _regenerator.default.wrap(function (_context18) {
1150
+ while (1) switch (_context18.prev = _context18.next) {
994
1151
  case 0:
1152
+ loggerContext = {
1153
+ file: _constants2.REGISTRATION_FILE,
1154
+ method: _constants2.METHODS.RESTART_REGISTRATION
1155
+ };
1156
+ _Logger.default.info("".concat(_constants.METHOD_START_MESSAGE, " - caller: ").concat(caller), loggerContext);
1157
+
995
1158
  /*
996
1159
  * Cancel any failback timer running
997
1160
  * and start fresh registration attempt with retry as true.
998
1161
  */
999
1162
  this.clearFailbackTimer();
1000
1163
  this.failback429RetryAttempts = 0;
1001
- _context16.next = 1;
1164
+ _context18.next = 1;
1002
1165
  return this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);
1003
1166
  case 1:
1004
- abort = _context16.sent;
1167
+ abort = _context18.sent;
1005
1168
  if (!(!abort && !this.isDeviceRegistered())) {
1006
- _context16.next = 2;
1169
+ _context18.next = 2;
1007
1170
  break;
1008
1171
  }
1009
- _context16.next = 2;
1172
+ _context18.next = 2;
1010
1173
  return this.startFailoverTimer();
1011
1174
  case 2:
1175
+ _Logger.default.log("restartRegistration completed - caller: ".concat(caller, ", deviceRegistered: ").concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
1176
+ case 3:
1012
1177
  case "end":
1013
- return _context16.stop();
1178
+ return _context18.stop();
1014
1179
  }
1015
- }, _callee16, this);
1180
+ }, _callee18, this);
1016
1181
  }));
1017
- function restartRegistration(_x9) {
1182
+ function restartRegistration(_x13) {
1018
1183
  return _restartRegistration.apply(this, arguments);
1019
1184
  }
1020
1185
  return restartRegistration;
@@ -1028,23 +1193,23 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1028
1193
  }, {
1029
1194
  key: "handleConnectionRestoration",
1030
1195
  value: (function () {
1031
- var _handleConnectionRestoration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18(retry) {
1196
+ var _handleConnectionRestoration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20(retry) {
1032
1197
  var _this6 = this;
1033
- return _regenerator.default.wrap(function (_context18) {
1034
- while (1) switch (_context18.prev = _context18.next) {
1198
+ return _regenerator.default.wrap(function (_context20) {
1199
+ while (1) switch (_context20.prev = _context20.next) {
1035
1200
  case 0:
1036
1201
  _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1037
1202
  method: _constants2.METHODS.HANDLE_CONNECTION_RESTORATION,
1038
1203
  file: _constants2.REGISTRATION_FILE
1039
1204
  });
1040
- _context18.next = 1;
1041
- return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee17() {
1205
+ _context20.next = 1;
1206
+ return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee19() {
1042
1207
  var abort;
1043
- return _regenerator.default.wrap(function (_context17) {
1044
- while (1) switch (_context17.prev = _context17.next) {
1208
+ return _regenerator.default.wrap(function (_context19) {
1209
+ while (1) switch (_context19.prev = _context19.next) {
1045
1210
  case 0:
1046
1211
  if (!retry) {
1047
- _context17.next = 4;
1212
+ _context19.next = 4;
1048
1213
  break;
1049
1214
  }
1050
1215
  _Logger.default.log('Network is up again, re-registering with Webex Calling if needed', {
@@ -1053,43 +1218,43 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1053
1218
  });
1054
1219
  _this6.clearKeepaliveTimer();
1055
1220
  if (!_this6.isDeviceRegistered()) {
1056
- _context17.next = 1;
1221
+ _context19.next = 1;
1057
1222
  break;
1058
1223
  }
1059
- _context17.next = 1;
1224
+ _context19.next = 1;
1060
1225
  return _this6.deregister();
1061
1226
  case 1:
1062
1227
  if (!_this6.activeMobiusUrl) {
1063
- _context17.next = 3;
1228
+ _context19.next = 3;
1064
1229
  break;
1065
1230
  }
1066
- _context17.next = 2;
1231
+ _context19.next = 2;
1067
1232
  return _this6.restorePreviousRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1068
1233
  case 2:
1069
- abort = _context17.sent;
1234
+ abort = _context19.sent;
1070
1235
  if (!(!abort && !_this6.isDeviceRegistered())) {
1071
- _context17.next = 3;
1236
+ _context19.next = 3;
1072
1237
  break;
1073
1238
  }
1074
- _context17.next = 3;
1239
+ _context19.next = 3;
1075
1240
  return _this6.restartRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1076
1241
  case 3:
1077
1242
  retry = false;
1078
1243
  case 4:
1079
1244
  case "end":
1080
- return _context17.stop();
1245
+ return _context19.stop();
1081
1246
  }
1082
- }, _callee17);
1247
+ }, _callee19);
1083
1248
  })));
1084
1249
  case 1:
1085
- return _context18.abrupt("return", retry);
1250
+ return _context20.abrupt("return", retry);
1086
1251
  case 2:
1087
1252
  case "end":
1088
- return _context18.stop();
1253
+ return _context20.stop();
1089
1254
  }
1090
- }, _callee18, this);
1255
+ }, _callee20, this);
1091
1256
  }));
1092
- function handleConnectionRestoration(_x0) {
1257
+ function handleConnectionRestoration(_x14) {
1093
1258
  return _handleConnectionRestoration.apply(this, arguments);
1094
1259
  }
1095
1260
  return handleConnectionRestoration;
@@ -1105,53 +1270,53 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1105
1270
  value: function restoreRegistrationCallBack() {
1106
1271
  var _this7 = this;
1107
1272
  return /*#__PURE__*/function () {
1108
- var _ref1 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee19(restoreData, caller) {
1273
+ var _ref1 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21(restoreData, caller) {
1109
1274
  var logContext, restore, finalError;
1110
- return _regenerator.default.wrap(function (_context19) {
1111
- while (1) switch (_context19.prev = _context19.next) {
1275
+ return _regenerator.default.wrap(function (_context21) {
1276
+ while (1) switch (_context21.prev = _context21.next) {
1112
1277
  case 0:
1113
1278
  logContext = {
1114
1279
  file: _constants2.REGISTRATION_FILE,
1115
1280
  method: caller
1116
1281
  };
1117
1282
  if (_this7.isRegRetry()) {
1118
- _context19.next = 4;
1283
+ _context21.next = 4;
1119
1284
  break;
1120
1285
  }
1121
1286
  _Logger.default.info('Registration restoration in progress.', logContext);
1122
1287
  restore = _this7.getExistingDevice(restoreData);
1123
1288
  if (!restore) {
1124
- _context19.next = 3;
1289
+ _context21.next = 3;
1125
1290
  break;
1126
1291
  }
1127
1292
  _this7.setRegRetry(true);
1128
- _context19.next = 1;
1293
+ _context21.next = 1;
1129
1294
  return _this7.deregister();
1130
1295
  case 1:
1131
- _context19.next = 2;
1296
+ _context21.next = 2;
1132
1297
  return _this7.restorePreviousRegistration(caller);
1133
1298
  case 2:
1134
- finalError = _context19.sent;
1299
+ finalError = _context21.sent;
1135
1300
  _this7.setRegRetry(false);
1136
1301
  if (_this7.isDeviceRegistered()) {
1137
1302
  _Logger.default.info('Registration restored successfully.', logContext);
1138
1303
  }
1139
- return _context19.abrupt("return", finalError);
1304
+ return _context21.abrupt("return", finalError);
1140
1305
  case 3:
1141
- _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1142
- _context19.next = 5;
1306
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1307
+ _context21.next = 5;
1143
1308
  break;
1144
1309
  case 4:
1145
- _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1310
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1146
1311
  case 5:
1147
- return _context19.abrupt("return", false);
1312
+ return _context21.abrupt("return", false);
1148
1313
  case 6:
1149
1314
  case "end":
1150
- return _context19.stop();
1315
+ return _context21.stop();
1151
1316
  }
1152
- }, _callee19);
1317
+ }, _callee21);
1153
1318
  }));
1154
- return function (_x1, _x10) {
1319
+ return function (_x15, _x16) {
1155
1320
  return _ref1.apply(this, arguments);
1156
1321
  };
1157
1322
  }();
@@ -1164,39 +1329,51 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1164
1329
  }, {
1165
1330
  key: "triggerRegistration",
1166
1331
  value: (function () {
1167
- var _triggerRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20() {
1168
- var abort;
1169
- return _regenerator.default.wrap(function (_context20) {
1170
- while (1) switch (_context20.prev = _context20.next) {
1332
+ var _triggerRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22() {
1333
+ var loggerContext, abort;
1334
+ return _regenerator.default.wrap(function (_context22) {
1335
+ while (1) switch (_context22.prev = _context22.next) {
1171
1336
  case 0:
1172
- _context20.next = 1;
1337
+ loggerContext = {
1338
+ file: _constants2.REGISTRATION_FILE,
1339
+ method: _constants2.METHODS.TRIGGER_REGISTRATION
1340
+ };
1341
+ _Logger.default.info(_constants.METHOD_START_MESSAGE, loggerContext);
1342
+ _context22.next = 1;
1173
1343
  return this.resumeFailover();
1174
1344
  case 1:
1175
- if (!_context20.sent) {
1176
- _context20.next = 2;
1345
+ if (!_context22.sent) {
1346
+ _context22.next = 2;
1177
1347
  break;
1178
1348
  }
1179
- return _context20.abrupt("return");
1349
+ _Logger.default.info('Registration trigger handled by resumeFailover path', loggerContext);
1350
+ return _context22.abrupt("return");
1180
1351
  case 2:
1181
1352
  if (!(this.primaryMobiusUris.length > 0)) {
1182
- _context20.next = 4;
1353
+ _context22.next = 5;
1183
1354
  break;
1184
1355
  }
1185
- _context20.next = 3;
1356
+ _context22.next = 3;
1186
1357
  return this.attemptRegistrationWithServers(_constants2.REGISTRATION_UTIL, this.primaryMobiusUris);
1187
1358
  case 3:
1188
- abort = _context20.sent;
1359
+ abort = _context22.sent;
1189
1360
  if (!(!this.isDeviceRegistered() && !abort)) {
1190
- _context20.next = 4;
1361
+ _context22.next = 4;
1191
1362
  break;
1192
1363
  }
1193
- _context20.next = 4;
1364
+ _context22.next = 4;
1194
1365
  return this.startFailoverTimer();
1195
1366
  case 4:
1367
+ _Logger.default.log("triggerRegistration completed - deviceRegistered: ".concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
1368
+ _context22.next = 6;
1369
+ break;
1370
+ case 5:
1371
+ _Logger.default.warn('triggerRegistration skipped: no primary Mobius URIs available', loggerContext);
1372
+ case 6:
1196
1373
  case "end":
1197
- return _context20.stop();
1374
+ return _context22.stop();
1198
1375
  }
1199
- }, _callee20, this);
1376
+ }, _callee22, this);
1200
1377
  }));
1201
1378
  function triggerRegistration() {
1202
1379
  return _triggerRegistration.apply(this, arguments);
@@ -1215,160 +1392,199 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1215
1392
  }, {
1216
1393
  key: "attemptRegistrationWithServers",
1217
1394
  value: (function () {
1218
- var _attemptRegistrationWithServers = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21(caller) {
1395
+ var _attemptRegistrationWithServers = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(caller) {
1219
1396
  var _this8 = this;
1220
1397
  var servers,
1398
+ loggerContext,
1221
1399
  abort,
1400
+ connectedWebSocketUrl,
1222
1401
  _iterator2,
1223
1402
  _step2,
1224
1403
  _loop,
1225
1404
  _ret,
1226
- _args22 = arguments,
1227
- _t12;
1228
- return _regenerator.default.wrap(function (_context22) {
1229
- while (1) switch (_context22.prev = _context22.next) {
1405
+ _args24 = arguments,
1406
+ _t6;
1407
+ return _regenerator.default.wrap(function (_context24) {
1408
+ while (1) switch (_context24.prev = _context24.next) {
1230
1409
  case 0:
1231
- servers = _args22.length > 1 && _args22[1] !== undefined ? _args22[1] : this.primaryMobiusUris;
1410
+ servers = _args24.length > 1 && _args24[1] !== undefined ? _args24[1] : this.primaryMobiusUris;
1411
+ loggerContext = {
1412
+ file: _constants2.REGISTRATION_FILE,
1413
+ method: _constants2.REGISTER_UTIL
1414
+ };
1232
1415
  abort = false;
1233
1416
  this.retryAfter = undefined;
1234
1417
  if (!this.failoverImmediately) {
1235
- _context22.next = 1;
1418
+ _context24.next = 1;
1236
1419
  break;
1237
1420
  }
1238
- return _context22.abrupt("return", abort);
1421
+ return _context24.abrupt("return", abort);
1239
1422
  case 1:
1240
1423
  if (!this.isDeviceRegistered()) {
1241
- _context22.next = 2;
1424
+ _context24.next = 2;
1242
1425
  break;
1243
1426
  }
1244
- _Logger.default.info("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), {
1245
- file: _constants2.REGISTRATION_FILE,
1246
- method: _constants2.REGISTER_UTIL
1247
- });
1248
- return _context22.abrupt("return", abort);
1427
+ _Logger.default.info("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), loggerContext);
1428
+ return _context24.abrupt("return", abort);
1249
1429
  case 2:
1430
+ /*
1431
+ * Align the active transport with this server group. When the Mobius socket is enabled
1432
+ * but a group has no WSS URL, CallingClient hands us its HTTP URIs instead; routing those
1433
+ * over the socket would fail, so toggle the transport from the group's URL scheme. This
1434
+ * keeps every socket-gated path below (connect, teardown, makeRequest) consistent for the
1435
+ * group being registered, while primary and backup are resolved independently.
1436
+ */
1437
+ if (servers.length) {
1438
+ this.apiRequest.setSocketEnabled(servers[0].startsWith('wss://'));
1439
+ }
1250
1440
  _iterator2 = _createForOfIteratorHelper(servers);
1251
- _context22.prev = 3;
1441
+ _context24.prev = 3;
1252
1442
  _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
1253
- var _this8$backupMobiusUr;
1254
- var url, serverType, _this8$deviceInfo$dev, _resp$headers, _resp$headers$trackin, _resp$headers2, _this8$deviceInfo$dev2, resp, body, _t11;
1255
- return _regenerator.default.wrap(function (_context21) {
1256
- while (1) switch (_context21.prev = _context21.next) {
1443
+ var url, serverType, _this8$deviceInfo$dev, _resp$headers, _resp$headers$trackin, _resp$headers2, _this8$deviceInfo$dev2, wssNormalizedUrl, resp, body, _yield$handleRegistra, finalError, shouldDisconnect, _t5;
1444
+ return _regenerator.default.wrap(function (_context23) {
1445
+ while (1) switch (_context23.prev = _context23.next) {
1257
1446
  case 0:
1258
1447
  url = _step2.value;
1259
- serverType = _this8.primaryMobiusUris.includes(url) && 'PRIMARY' || ((_this8$backupMobiusUr = _this8.backupMobiusUris) === null || _this8$backupMobiusUr === void 0 ? void 0 : _this8$backupMobiusUr.includes(url)) && 'BACKUP' || 'UNKNOWN';
1260
- _context21.prev = 1;
1448
+ serverType = _this8.getServerType(url);
1449
+ _context23.prev = 1;
1261
1450
  abort = false;
1262
- _this8.registrationStatus = _types2.RegistrationStatus.INACTIVE;
1263
- _this8.lineEmitter(_types3.LINE_EVENTS.CONNECTING);
1264
- _Logger.default.info("[".concat(caller, "] : Mobius url to contact: ").concat(url), {
1265
- file: _constants2.REGISTRATION_FILE,
1266
- method: _constants2.REGISTER_UTIL
1267
- });
1451
+ _this8.registrationStatus = _types3.RegistrationStatus.INACTIVE;
1452
+ _this8.lineEmitter(_types4.LINE_EVENTS.CONNECTING);
1453
+ _Logger.default.info("[".concat(caller, "] : Mobius url to contact: ").concat(url), loggerContext);
1454
+ if (!_this8.apiRequest.isSocketEnabled()) {
1455
+ _context23.next = 3;
1456
+ break;
1457
+ }
1458
+ wssNormalizedUrl = url.endsWith('/') ? url.slice(0, -1) : url;
1459
+ _Logger.default.info("[".concat(caller, "] : Connecting to Mobius WebSocket - serverType: ").concat(serverType, ", wssUrl: ").concat(wssNormalizedUrl), loggerContext);
1460
+
1268
1461
  // eslint-disable-next-line no-await-in-loop
1269
- _context21.next = 2;
1270
- return _this8.postRegistration(url);
1462
+ _context23.next = 2;
1463
+ return _this8.apiRequest.connectToMobiusSocket(wssNormalizedUrl);
1271
1464
  case 2:
1272
- resp = _context21.sent;
1465
+ connectedWebSocketUrl = _context23.sent;
1466
+ connectedWebSocketUrl = connectedWebSocketUrl ? "".concat(connectedWebSocketUrl, "/") : undefined;
1467
+ _Logger.default.log("[".concat(caller, "] : Mobius WebSocket connected - serverType: ").concat(serverType, ", connectedWebSocketUrl: ").concat(connectedWebSocketUrl), loggerContext);
1468
+ case 3:
1469
+ _context23.next = 4;
1470
+ return _this8.postRegistration(url);
1471
+ case 4:
1472
+ resp = _context23.sent;
1273
1473
  _this8.clearFailoverState();
1274
1474
  _this8.deviceInfo = resp.body;
1275
- _this8.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1276
- _this8.setActiveMobiusUrl(url);
1277
- _this8.lineEmitter(_types3.LINE_EVENTS.REGISTERED, resp.body);
1278
- _Logger.default.log("Registration successful for deviceId: ".concat((_this8$deviceInfo$dev = _this8.deviceInfo.device) === null || _this8$deviceInfo$dev === void 0 ? void 0 : _this8$deviceInfo$dev.deviceId, " userId: ").concat(_this8.userId, " responseTrackingId: ").concat((_resp$headers = resp.headers) === null || _resp$headers === void 0 ? void 0 : _resp$headers.trackingid), {
1279
- file: _constants2.REGISTRATION_FILE,
1280
- method: _constants2.METHODS.REGISTER
1281
- });
1475
+ _this8.registrationStatus = _types3.RegistrationStatus.ACTIVE;
1476
+ _this8.setActiveMobiusUrl(connectedWebSocketUrl || url);
1477
+ _this8.lineEmitter(_types4.LINE_EVENTS.REGISTERED, resp.body);
1478
+ _Logger.default.log("Registration successful for deviceId: ".concat((_this8$deviceInfo$dev = _this8.deviceInfo.device) === null || _this8$deviceInfo$dev === void 0 ? void 0 : _this8$deviceInfo$dev.deviceId, " userId: ").concat(_this8.userId, " responseTrackingId: ").concat((_resp$headers = resp.headers) === null || _resp$headers === void 0 ? void 0 : _resp$headers.trackingid), loggerContext);
1282
1479
  _this8.setIntervalValues(_this8.deviceInfo);
1283
1480
  _this8.metricManager.setDeviceInfo(_this8.deviceInfo);
1284
1481
  _this8.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, caller, serverType, (_resp$headers$trackin = (_resp$headers2 = resp.headers) === null || _resp$headers2 === void 0 ? void 0 : _resp$headers2.trackingid) !== null && _resp$headers$trackin !== void 0 ? _resp$headers$trackin : '', undefined, undefined);
1285
1482
  _this8.startKeepaliveTimer((_this8$deviceInfo$dev2 = _this8.deviceInfo.device) === null || _this8$deviceInfo$dev2 === void 0 ? void 0 : _this8$deviceInfo$dev2.uri, _this8.deviceInfo.keepaliveInterval, serverType);
1286
1483
  _this8.initiateFailback();
1287
- return _context21.abrupt("return", 0);
1288
- case 3:
1289
- _context21.prev = 3;
1290
- _t11 = _context21["catch"](1);
1291
- body = _t11; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
1292
- _context21.next = 4;
1293
- return (0, _common.handleRegistrationErrors)(body, function (clientError, finalError) {
1484
+ return _context23.abrupt("return", 0);
1485
+ case 5:
1486
+ _context23.prev = 5;
1487
+ _t5 = _context23["catch"](1);
1488
+ body = _t5; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
1489
+ _context23.next = 6;
1490
+ return (0, _common.handleRegistrationErrors)(body, function (clientError, isFinalError) {
1294
1491
  var _body$headers$trackin, _body$headers;
1295
- if (finalError) {
1296
- _this8.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1492
+ if (isFinalError) {
1493
+ _this8.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
1297
1494
  } else {
1298
- _this8.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1495
+ _this8.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1299
1496
  }
1300
1497
  _this8.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.REGISTRATION_ERROR, _types.REG_ACTION.REGISTER, _types.METRIC_TYPE.BEHAVIORAL, caller, serverType, (_body$headers$trackin = (_body$headers = body.headers) === null || _body$headers === void 0 ? void 0 : _body$headers.trackingid) !== null && _body$headers$trackin !== void 0 ? _body$headers$trackin : '', undefined, clientError);
1301
1498
  }, {
1302
1499
  method: caller,
1303
1500
  file: _constants2.REGISTRATION_FILE
1304
- }, function (retryAfter, retryCaller) {
1305
- return _this8.handle429Retry(retryAfter, retryCaller);
1306
- }, _this8.restoreRegistrationCallBack());
1307
- case 4:
1308
- abort = _context21.sent;
1309
- if (!(_this8.registrationStatus === _types2.RegistrationStatus.ACTIVE)) {
1310
- _context21.next = 5;
1501
+ }, {
1502
+ retry429Cb: function retry429Cb(retryAfter, retryCaller) {
1503
+ return _this8.handle429Retry(retryAfter, retryCaller);
1504
+ },
1505
+ restoreRegCb: _this8.restoreRegistrationCallBack()
1506
+ }, servers.length);
1507
+ case 6:
1508
+ _yield$handleRegistra = _context23.sent;
1509
+ finalError = _yield$handleRegistra.finalError;
1510
+ shouldDisconnect = _yield$handleRegistra.shouldDisconnect;
1511
+ abort = finalError;
1512
+ if (!(_this8.registrationStatus === _types3.RegistrationStatus.ACTIVE)) {
1513
+ _context23.next = 7;
1311
1514
  break;
1312
1515
  }
1313
- _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(_this8.activeMobiusUrl), {
1314
- file: _constants2.REGISTRATION_FILE,
1315
- method: _this8.attemptRegistrationWithServers.name
1516
+ _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(_this8.activeMobiusUrl), loggerContext);
1517
+ return _context23.abrupt("return", 0);
1518
+ case 7:
1519
+ if (!(shouldDisconnect && _this8.apiRequest.isSocketEnabled())) {
1520
+ _context23.next = 9;
1521
+ break;
1522
+ }
1523
+ connectedWebSocketUrl = undefined;
1524
+ _Logger.default.info("[".concat(caller, "] : Tearing down Mobius WebSocket after registration error - serverType: ").concat(serverType), loggerContext);
1525
+
1526
+ // eslint-disable-next-line no-await-in-loop
1527
+ _context23.next = 8;
1528
+ return _this8.apiRequest.disconnectFromMobiusSocket({
1529
+ code: 3050,
1530
+ reason: 'done (permanent)'
1316
1531
  });
1317
- return _context21.abrupt("return", 0);
1318
- case 5:
1532
+ case 8:
1533
+ _Logger.default.log("[".concat(caller, "] : Mobius WebSocket disconnect complete after registration error - serverType: ").concat(serverType), loggerContext);
1534
+ case 9:
1319
1535
  if (!abort) {
1320
- _context21.next = 7;
1536
+ _context23.next = 11;
1321
1537
  break;
1322
1538
  }
1323
- _this8.setStatus(_types2.RegistrationStatus.INACTIVE);
1539
+ _this8.setStatus(_types3.RegistrationStatus.INACTIVE);
1324
1540
  // eslint-disable-next-line no-await-in-loop
1325
- _context21.next = 6;
1541
+ _context23.next = 10;
1326
1542
  return (0, _common.uploadLogs)();
1327
- case 6:
1328
- return _context21.abrupt("return", 0);
1329
- case 7:
1543
+ case 10:
1544
+ return _context23.abrupt("return", 0);
1545
+ case 11:
1330
1546
  case "end":
1331
- return _context21.stop();
1547
+ return _context23.stop();
1332
1548
  }
1333
- }, _loop, null, [[1, 3]]);
1549
+ }, _loop, null, [[1, 5]]);
1334
1550
  });
1335
1551
  _iterator2.s();
1336
1552
  case 4:
1337
1553
  if ((_step2 = _iterator2.n()).done) {
1338
- _context22.next = 7;
1554
+ _context24.next = 7;
1339
1555
  break;
1340
1556
  }
1341
- return _context22.delegateYield(_loop(), "t0", 5);
1557
+ return _context24.delegateYield(_loop(), "t0", 5);
1342
1558
  case 5:
1343
- _ret = _context22.t0;
1559
+ _ret = _context24.t0;
1344
1560
  if (!(_ret === 0)) {
1345
- _context22.next = 6;
1561
+ _context24.next = 6;
1346
1562
  break;
1347
1563
  }
1348
- return _context22.abrupt("continue", 7);
1564
+ return _context24.abrupt("continue", 7);
1349
1565
  case 6:
1350
- _context22.next = 4;
1566
+ _context24.next = 4;
1351
1567
  break;
1352
1568
  case 7:
1353
- _context22.next = 9;
1569
+ _context24.next = 9;
1354
1570
  break;
1355
1571
  case 8:
1356
- _context22.prev = 8;
1357
- _t12 = _context22["catch"](3);
1358
- _iterator2.e(_t12);
1572
+ _context24.prev = 8;
1573
+ _t6 = _context24["catch"](3);
1574
+ _iterator2.e(_t6);
1359
1575
  case 9:
1360
- _context22.prev = 9;
1576
+ _context24.prev = 9;
1361
1577
  _iterator2.f();
1362
- return _context22.finish(9);
1578
+ return _context24.finish(9);
1363
1579
  case 10:
1364
- return _context22.abrupt("return", abort);
1580
+ return _context24.abrupt("return", abort);
1365
1581
  case 11:
1366
1582
  case "end":
1367
- return _context22.stop();
1583
+ return _context24.stop();
1368
1584
  }
1369
- }, _callee21, this, [[3, 8, 9, 10]]);
1585
+ }, _callee23, this, [[3, 8, 9, 10]]);
1370
1586
  }));
1371
- function attemptRegistrationWithServers(_x11) {
1587
+ function attemptRegistrationWithServers(_x17) {
1372
1588
  return _attemptRegistrationWithServers.apply(this, arguments);
1373
1589
  }
1374
1590
  return attemptRegistrationWithServers;
@@ -1381,132 +1597,168 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1381
1597
  }, {
1382
1598
  key: "startKeepaliveTimer",
1383
1599
  value: (function () {
1384
- var _startKeepaliveTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee24(url, interval, serverType) {
1600
+ var _startKeepaliveTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26(url, interval, serverType) {
1385
1601
  var _this9 = this;
1386
1602
  var RETRY_COUNT_THRESHOLD;
1387
- return _regenerator.default.wrap(function (_context25) {
1388
- while (1) switch (_context25.prev = _context25.next) {
1603
+ return _regenerator.default.wrap(function (_context27) {
1604
+ while (1) switch (_context27.prev = _context27.next) {
1389
1605
  case 0:
1390
1606
  this.clearKeepaliveTimer();
1391
1607
  RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;
1392
- _context25.next = 1;
1393
- return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23() {
1394
- var accessToken, blob, blobUrl;
1395
- return _regenerator.default.wrap(function (_context24) {
1396
- while (1) switch (_context24.prev = _context24.next) {
1608
+ _context27.next = 1;
1609
+ return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
1610
+ var blob, blobUrl;
1611
+ return _regenerator.default.wrap(function (_context26) {
1612
+ while (1) switch (_context26.prev = _context26.next) {
1397
1613
  case 0:
1398
- if (!_this9.isDeviceRegistered()) {
1399
- _context24.next = 2;
1400
- break;
1401
- }
1402
- _context24.next = 1;
1403
- return _this9.webex.credentials.getUserToken();
1404
- case 1:
1405
- accessToken = _context24.sent;
1406
- if (!_this9.webWorker) {
1407
- blob = new Blob([_webWorkerStr.default], {
1408
- type: 'application/javascript'
1409
- });
1410
- blobUrl = URL.createObjectURL(blob);
1411
- _this9.webWorker = new Worker(blobUrl);
1412
- URL.revokeObjectURL(blobUrl);
1413
- _this9.webWorker.postMessage({
1414
- type: _types2.WorkerMessageType.START_KEEPALIVE,
1415
- accessToken: String(accessToken),
1416
- deviceUrl: String(_this9.webex.internal.device.url),
1417
- interval: interval,
1418
- retryCountThreshold: RETRY_COUNT_THRESHOLD,
1419
- url: url
1420
- });
1421
- _this9.webWorker.onmessage = /*#__PURE__*/function () {
1422
- var _ref11 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22(event) {
1423
- var logContext, error, abort;
1424
- return _regenerator.default.wrap(function (_context23) {
1425
- while (1) switch (_context23.prev = _context23.next) {
1426
- case 0:
1427
- logContext = {
1428
- file: _constants2.REGISTRATION_FILE,
1429
- method: _constants2.KEEPALIVE_UTIL
1430
- };
1431
- if (event.data.type === _types2.WorkerMessageType.KEEPALIVE_SUCCESS) {
1432
- _Logger.default.info("Sent Keepalive, status: ".concat(event.data.statusCode), logContext);
1433
- _this9.lineEmitter(_types3.LINE_EVENTS.RECONNECTED);
1434
- }
1435
- if (!(event.data.type === _types2.WorkerMessageType.KEEPALIVE_FAILURE)) {
1436
- _context23.next = 7;
1614
+ if (_this9.isDeviceRegistered()) {
1615
+ if (!_this9.webWorker) {
1616
+ blob = new Blob([_webWorkerStr.default], {
1617
+ type: 'application/javascript'
1618
+ });
1619
+ blobUrl = URL.createObjectURL(blob);
1620
+ _this9.webWorker = new Worker(blobUrl);
1621
+ URL.revokeObjectURL(blobUrl);
1622
+ _this9.webWorker.postMessage({
1623
+ type: _types3.WorkerMessageType.START_KEEPALIVE,
1624
+ interval: interval,
1625
+ retryCountThreshold: RETRY_COUNT_THRESHOLD
1626
+ });
1627
+ _this9.webWorker.onmessage = /*#__PURE__*/function () {
1628
+ var _ref11 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee24(event) {
1629
+ var logContext, _this9$webWorker, res, _err$headers, _this9$webWorker2, error, _error, _yield$handleRegistra2, abort, handledByCallback, _t7;
1630
+ return _regenerator.default.wrap(function (_context25) {
1631
+ while (1) switch (_context25.prev = _context25.next) {
1632
+ case 0:
1633
+ logContext = {
1634
+ file: _constants2.REGISTRATION_FILE,
1635
+ method: _constants2.KEEPALIVE_UTIL
1636
+ };
1637
+ if (!(event.data.type === _types3.WorkerMessageType.SEND_KEEPALIVE)) {
1638
+ _context25.next = 4;
1639
+ break;
1640
+ }
1641
+ _context25.prev = 1;
1642
+ _context25.next = 2;
1643
+ return _this9.postKeepAlive(String(_this9.webex.internal.device.url), url);
1644
+ case 2:
1645
+ res = _context25.sent;
1646
+ (_this9$webWorker = _this9.webWorker) === null || _this9$webWorker === void 0 ? void 0 : _this9$webWorker.postMessage({
1647
+ type: _types3.WorkerMessageType.KEEPALIVE_RESULT,
1648
+ statusCode: res.statusCode
1649
+ });
1650
+ _context25.next = 4;
1437
1651
  break;
1438
- }
1439
- error = event.data.err;
1440
- _Logger.default.warn("Keep-alive missed ".concat(event.data.keepAliveRetryCount, " times. Status -> ").concat(error.statusCode, " "), logContext);
1441
- _context23.next = 1;
1442
- return (0, _common.handleRegistrationErrors)(error, function (clientError, finalError) {
1443
- var _error$headers$tracki, _error$headers;
1444
- if (finalError) {
1445
- _this9.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1652
+ case 3:
1653
+ _context25.prev = 3;
1654
+ _t7 = _context25["catch"](1);
1655
+ error = {
1656
+ headers: {
1657
+ trackingid: (_err$headers = _t7.headers) === null || _err$headers === void 0 ? void 0 : _err$headers.trackingid,
1658
+ 'retry-after': _t7.headers['retry-after']
1659
+ },
1660
+ statusCode: _t7.statusCode,
1661
+ statusText: _t7.statusText,
1662
+ type: _t7.type
1663
+ };
1664
+ (_this9$webWorker2 = _this9.webWorker) === null || _this9$webWorker2 === void 0 ? void 0 : _this9$webWorker2.postMessage({
1665
+ type: _types3.WorkerMessageType.KEEPALIVE_RESULT,
1666
+ err: error
1667
+ });
1668
+ case 4:
1669
+ if (event.data.type === _types3.WorkerMessageType.KEEPALIVE_SUCCESS) {
1670
+ _Logger.default.info("Sent Keepalive, status: ".concat(event.data.statusCode), logContext);
1671
+ _this9.lineEmitter(_types4.LINE_EVENTS.RECONNECTED);
1672
+ }
1673
+ if (!(event.data.type === _types3.WorkerMessageType.KEEPALIVE_FAILURE)) {
1674
+ _context25.next = 12;
1675
+ break;
1446
1676
  }
1447
- _this9.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.KEEPALIVE_ERROR, _types.REG_ACTION.KEEPALIVE_FAILURE, _types.METRIC_TYPE.BEHAVIORAL, _constants2.KEEPALIVE_UTIL, serverType, (_error$headers$tracki = (_error$headers = error.headers) === null || _error$headers === void 0 ? void 0 : _error$headers.trackingid) !== null && _error$headers$tracki !== void 0 ? _error$headers$tracki : '', event.data.keepAliveRetryCount, clientError);
1448
- }, {
1449
- method: _constants2.KEEPALIVE_UTIL,
1450
- file: _constants2.REGISTRATION_FILE
1451
- }, function (retryAfter, retryCaller) {
1452
- return _this9.handle429Retry(retryAfter, retryCaller);
1453
- });
1454
- case 1:
1455
- abort = _context23.sent;
1456
- if (!(abort || event.data.keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1457
- _context23.next = 6;
1677
+ _error = event.data.err;
1678
+ _Logger.default.warn("Keep-alive missed ".concat(event.data.keepAliveRetryCount, " times. Status -> ").concat(_error.statusCode, " "), logContext);
1679
+ _context25.next = 5;
1680
+ return (0, _common.handleRegistrationErrors)(_error, function (clientError, finalError) {
1681
+ var _error$headers$tracki2, _error$headers2;
1682
+ if (finalError) {
1683
+ _this9.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
1684
+ }
1685
+ _this9.metricManager.submitRegistrationMetric(_types.METRIC_EVENT.KEEPALIVE_ERROR, _types.REG_ACTION.KEEPALIVE_FAILURE, _types.METRIC_TYPE.BEHAVIORAL, _constants2.KEEPALIVE_UTIL, serverType, (_error$headers$tracki2 = (_error$headers2 = _error.headers) === null || _error$headers2 === void 0 ? void 0 : _error$headers2.trackingid) !== null && _error$headers$tracki2 !== void 0 ? _error$headers$tracki2 : '', event.data.keepAliveRetryCount, clientError);
1686
+ }, {
1687
+ method: _constants2.KEEPALIVE_UTIL,
1688
+ file: _constants2.REGISTRATION_FILE
1689
+ }, {
1690
+ retry429Cb: function retry429Cb(retryAfter, retryCaller) {
1691
+ return _this9.handle429Retry(retryAfter, retryCaller);
1692
+ },
1693
+ sessionSupersededCb: function sessionSupersededCb(clientError) {
1694
+ return _this9.handle409KeepaliveFailure(clientError, _error, serverType, event.data.keepAliveRetryCount);
1695
+ }
1696
+ });
1697
+ case 5:
1698
+ _yield$handleRegistra2 = _context25.sent;
1699
+ abort = _yield$handleRegistra2.finalError;
1700
+ handledByCallback = _yield$handleRegistra2.handledByCallback;
1701
+ if (!handledByCallback) {
1702
+ _context25.next = 6;
1703
+ break;
1704
+ }
1705
+ return _context25.abrupt("return");
1706
+ case 6:
1707
+ if (!(abort || event.data.keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1708
+ _context25.next = 11;
1709
+ break;
1710
+ }
1711
+ _this9.failoverImmediately = _this9.isCCFlow;
1712
+ _this9.setStatus(_types3.RegistrationStatus.INACTIVE);
1713
+ _this9.clearKeepaliveTimer();
1714
+ _this9.clearFailbackTimer();
1715
+ _this9.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1716
+ _context25.next = 7;
1717
+ return (0, _common.uploadLogs)();
1718
+ case 7:
1719
+ if (abort) {
1720
+ _context25.next = 9;
1721
+ break;
1722
+ }
1723
+ _context25.next = 8;
1724
+ return _this9.reconnectOnFailure(_constants2.RECONNECT_ON_FAILURE_UTIL);
1725
+ case 8:
1726
+ _context25.next = 10;
1458
1727
  break;
1459
- }
1460
- _this9.failoverImmediately = _this9.isCCFlow;
1461
- _this9.setStatus(_types2.RegistrationStatus.INACTIVE);
1462
- _this9.clearKeepaliveTimer();
1463
- _this9.clearFailbackTimer();
1464
- _this9.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1465
- _context23.next = 2;
1466
- return (0, _common.uploadLogs)();
1467
- case 2:
1468
- if (abort) {
1469
- _context23.next = 4;
1728
+ case 9:
1729
+ if (_error.statusCode === 404) {
1730
+ _this9.handle404KeepaliveFailure(_constants2.KEEPALIVE_UTIL);
1731
+ }
1732
+ case 10:
1733
+ _context25.next = 12;
1470
1734
  break;
1471
- }
1472
- _context23.next = 3;
1473
- return _this9.reconnectOnFailure(_constants2.RECONNECT_ON_FAILURE_UTIL);
1474
- case 3:
1475
- _context23.next = 5;
1476
- break;
1477
- case 4:
1478
- if (error.statusCode === 404) {
1479
- _this9.handle404KeepaliveFailure(_constants2.KEEPALIVE_UTIL);
1480
- }
1481
- case 5:
1482
- _context23.next = 7;
1483
- break;
1484
- case 6:
1485
- _this9.lineEmitter(_types3.LINE_EVENTS.RECONNECTING);
1486
- case 7:
1487
- case "end":
1488
- return _context23.stop();
1489
- }
1490
- }, _callee22);
1491
- }));
1492
- return function (_x15) {
1493
- return _ref11.apply(this, arguments);
1494
- };
1495
- }();
1735
+ case 11:
1736
+ _this9.lineEmitter(_types4.LINE_EVENTS.RECONNECTING);
1737
+ case 12:
1738
+ case "end":
1739
+ return _context25.stop();
1740
+ }
1741
+ }, _callee24, null, [[1, 3]]);
1742
+ }));
1743
+ return function (_x21) {
1744
+ return _ref11.apply(this, arguments);
1745
+ };
1746
+ }();
1747
+ }
1496
1748
  }
1497
- case 2:
1749
+ case 1:
1498
1750
  case "end":
1499
- return _context24.stop();
1751
+ return _context26.stop();
1500
1752
  }
1501
- }, _callee23);
1753
+ }, _callee25);
1502
1754
  })));
1503
1755
  case 1:
1504
1756
  case "end":
1505
- return _context25.stop();
1757
+ return _context27.stop();
1506
1758
  }
1507
- }, _callee24, this);
1759
+ }, _callee26, this);
1508
1760
  }));
1509
- function startKeepaliveTimer(_x12, _x13, _x14) {
1761
+ function startKeepaliveTimer(_x18, _x19, _x20) {
1510
1762
  return _startKeepaliveTimer.apply(this, arguments);
1511
1763
  }
1512
1764
  return startKeepaliveTimer;
@@ -1520,7 +1772,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1520
1772
  value: function clearKeepaliveTimer() {
1521
1773
  if (this.webWorker) {
1522
1774
  this.webWorker.postMessage({
1523
- type: _types2.WorkerMessageType.CLEAR_KEEPALIVE
1775
+ type: _types3.WorkerMessageType.CLEAR_KEEPALIVE
1524
1776
  });
1525
1777
  this.webWorker.terminate();
1526
1778
  this.webWorker = undefined;
@@ -1534,37 +1786,54 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1534
1786
  }, {
1535
1787
  key: "deregister",
1536
1788
  value: function () {
1537
- var _deregister = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
1538
- var _this$deviceInfo$devi, _this$deviceInfo$devi2, _t13;
1539
- return _regenerator.default.wrap(function (_context26) {
1540
- while (1) switch (_context26.prev = _context26.next) {
1789
+ var _deregister = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee27() {
1790
+ var closeMobiusWss,
1791
+ loggerContext,
1792
+ _this$deviceInfo$devi2,
1793
+ _this$deviceInfo$devi3,
1794
+ _args28 = arguments,
1795
+ _t8;
1796
+ return _regenerator.default.wrap(function (_context28) {
1797
+ while (1) switch (_context28.prev = _context28.next) {
1541
1798
  case 0:
1542
- _context26.prev = 0;
1543
- _context26.next = 1;
1544
- return this.deleteRegistration(this.activeMobiusUrl, (_this$deviceInfo$devi = this.deviceInfo.device) === null || _this$deviceInfo$devi === void 0 ? void 0 : _this$deviceInfo$devi.deviceId, (_this$deviceInfo$devi2 = this.deviceInfo.device) === null || _this$deviceInfo$devi2 === void 0 ? void 0 : _this$deviceInfo$devi2.clientDeviceUri);
1545
- case 1:
1546
- _Logger.default.log('Registration successfully deregistered', {
1799
+ closeMobiusWss = _args28.length > 0 && _args28[0] !== undefined ? _args28[0] : false;
1800
+ loggerContext = {
1547
1801
  file: _constants2.REGISTRATION_FILE,
1548
1802
  method: _constants2.METHODS.DEREGISTER
1549
- });
1550
- _context26.next = 3;
1551
- break;
1803
+ };
1804
+ _Logger.default.info(_constants.METHOD_START_MESSAGE, loggerContext);
1805
+ _context28.prev = 1;
1806
+ _context28.next = 2;
1807
+ return this.deleteRegistration(this.activeMobiusUrl, (_this$deviceInfo$devi2 = this.deviceInfo.device) === null || _this$deviceInfo$devi2 === void 0 ? void 0 : _this$deviceInfo$devi2.deviceId, (_this$deviceInfo$devi3 = this.deviceInfo.device) === null || _this$deviceInfo$devi3 === void 0 ? void 0 : _this$deviceInfo$devi3.clientDeviceUri);
1552
1808
  case 2:
1553
- _context26.prev = 2;
1554
- _t13 = _context26["catch"](0);
1555
- _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t13)), {
1556
- file: _constants2.REGISTRATION_FILE,
1557
- method: _constants2.METHODS.DEREGISTER
1558
- });
1809
+ _Logger.default.log('Registration successfully deregistered', loggerContext);
1810
+ _context28.next = 4;
1811
+ break;
1559
1812
  case 3:
1813
+ _context28.prev = 3;
1814
+ _t8 = _context28["catch"](1);
1815
+ _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t8)), loggerContext);
1816
+ case 4:
1817
+ if (!closeMobiusWss) {
1818
+ _context28.next = 6;
1819
+ break;
1820
+ }
1821
+ _context28.next = 5;
1822
+ return this.apiRequest.disconnectFromMobiusSocket({
1823
+ code: 3050,
1824
+ reason: 'done (permanent)'
1825
+ });
1826
+ case 5:
1827
+ _Logger.default.log('Mobius socket disconnect complete after deregistration', loggerContext);
1828
+ case 6:
1560
1829
  this.clearKeepaliveTimer();
1561
- this.setStatus(_types2.RegistrationStatus.INACTIVE);
1830
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
1562
1831
  this.clearFailoverState();
1563
- case 4:
1832
+ case 7:
1564
1833
  case "end":
1565
- return _context26.stop();
1834
+ return _context28.stop();
1566
1835
  }
1567
- }, _callee25, this, [[0, 2]]);
1836
+ }, _callee27, this, [[1, 3]]);
1568
1837
  }));
1569
1838
  function deregister() {
1570
1839
  return _deregister.apply(this, arguments);
@@ -1609,8 +1878,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1609
1878
  };
1610
1879
  var stringToReplace = "".concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(restoreData.devices[0].deviceId);
1611
1880
  var uri = restoreData.devices[0].uri.replace(stringToReplace, '');
1881
+ if (this.apiRequest.isSocketEnabled()) {
1882
+ uri = uri.replace('https://', 'wss://');
1883
+ uri = !uri.endsWith('/') ? "".concat(uri, "/") : uri;
1884
+ }
1612
1885
  this.setActiveMobiusUrl(uri);
1613
- this.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1886
+ this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
1614
1887
  return true;
1615
1888
  }
1616
1889
  return false;
@@ -1628,10 +1901,10 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1628
1901
  }, {
1629
1902
  key: "reconnectOnFailure",
1630
1903
  value: (function () {
1631
- var _reconnectOnFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26(caller) {
1904
+ var _reconnectOnFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee28(caller) {
1632
1905
  var abort;
1633
- return _regenerator.default.wrap(function (_context27) {
1634
- while (1) switch (_context27.prev = _context27.next) {
1906
+ return _regenerator.default.wrap(function (_context29) {
1907
+ while (1) switch (_context29.prev = _context29.next) {
1635
1908
  case 0:
1636
1909
  _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1637
1910
  method: _constants2.METHODS.RECONNECT_ON_FAILURE,
@@ -1639,25 +1912,25 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1639
1912
  });
1640
1913
  this.reconnectPending = false;
1641
1914
  if (this.isDeviceRegistered()) {
1642
- _context27.next = 4;
1915
+ _context29.next = 4;
1643
1916
  break;
1644
1917
  }
1645
1918
  if (!((0, _keys.default)(this.callManager.getActiveCalls()).length === 0)) {
1646
- _context27.next = 3;
1919
+ _context29.next = 3;
1647
1920
  break;
1648
1921
  }
1649
- _context27.next = 1;
1922
+ _context29.next = 1;
1650
1923
  return this.restorePreviousRegistration(caller);
1651
1924
  case 1:
1652
- abort = _context27.sent;
1925
+ abort = _context29.sent;
1653
1926
  if (!(!abort && !this.isDeviceRegistered())) {
1654
- _context27.next = 2;
1927
+ _context29.next = 2;
1655
1928
  break;
1656
1929
  }
1657
- _context27.next = 2;
1930
+ _context29.next = 2;
1658
1931
  return this.restartRegistration(caller);
1659
1932
  case 2:
1660
- _context27.next = 4;
1933
+ _context29.next = 4;
1661
1934
  break;
1662
1935
  case 3:
1663
1936
  this.reconnectPending = true;
@@ -1667,14 +1940,134 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1667
1940
  });
1668
1941
  case 4:
1669
1942
  case "end":
1670
- return _context27.stop();
1943
+ return _context29.stop();
1671
1944
  }
1672
- }, _callee26, this);
1945
+ }, _callee28, this);
1673
1946
  }));
1674
- function reconnectOnFailure(_x16) {
1947
+ function reconnectOnFailure(_x22) {
1675
1948
  return _reconnectOnFailure.apply(this, arguments);
1676
1949
  }
1677
1950
  return reconnectOnFailure;
1951
+ }()
1952
+ /**
1953
+ * Handles an async REGISTRATION_DOWN event emitted by Mobius. Ends the first
1954
+ * active call (if any) and runs registration-side cleanup.
1955
+ *
1956
+ * @param event - The Mobius async event payload (trackingId/eventId used for logs).
1957
+ */
1958
+ )
1959
+ }, {
1960
+ key: "handleRegistrationDownEvent",
1961
+ value: (function () {
1962
+ var _handleRegistrationDownEvent = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee29(event) {
1963
+ var _event$trackingId, _event$eventId;
1964
+ var loggerContext, _Object$values, _Object$values2, activeCall;
1965
+ return _regenerator.default.wrap(function (_context30) {
1966
+ while (1) switch (_context30.prev = _context30.next) {
1967
+ case 0:
1968
+ loggerContext = {
1969
+ file: _constants2.REGISTRATION_FILE,
1970
+ method: _constants2.METHODS.HANDLE_REGISTRATION_DOWN_EVENT
1971
+ };
1972
+ _Logger.default.info("Registration down received - trackingId: ".concat((_event$trackingId = event === null || event === void 0 ? void 0 : event.trackingId) !== null && _event$trackingId !== void 0 ? _event$trackingId : 'unknown', ", eventId: ").concat((_event$eventId = event === null || event === void 0 ? void 0 : event.eventId) !== null && _event$eventId !== void 0 ? _event$eventId : 'unknown'), loggerContext);
1973
+ _Object$values = (0, _values.default)(this.callManager.getActiveCalls()), _Object$values2 = (0, _slicedToArray2.default)(_Object$values, 1), activeCall = _Object$values2[0];
1974
+ activeCall === null || activeCall === void 0 ? void 0 : activeCall.end();
1975
+ _context30.next = 1;
1976
+ return this.registrationCleanup(_constants2.METHODS.HANDLE_REGISTRATION_DOWN_EVENT, {
1977
+ reason: _types2.HARD_STOP_REASON.REGISTRATION_DOWN
1978
+ });
1979
+ case 1:
1980
+ case "end":
1981
+ return _context30.stop();
1982
+ }
1983
+ }, _callee29, this);
1984
+ }));
1985
+ function handleRegistrationDownEvent(_x23) {
1986
+ return _handleRegistrationDownEvent.apply(this, arguments);
1987
+ }
1988
+ return handleRegistrationDownEvent;
1989
+ }()
1990
+ /**
1991
+ * Cleans up registration-side state for a hard stop, i.e. a registration that is gone
1992
+ * and must not be re-established by the SDK (Mobius registration-down event, or a
1993
+ * session superseded by another registration for the same user).
1994
+ *
1995
+ * Stops timers, resets transient flags, clears failover cache, sets status to
1996
+ * INACTIVE, tears down the Mobius WebSocket (when enabled), and finally emits
1997
+ * `LINE_EVENTS.UNREGISTERED` so the SDK consumer is notified. A superseded session
1998
+ * carries its `LineError` on that event as the reason the line will stay unregistered.
1999
+ *
2000
+ * Runs under the shared mutex to avoid racing with other registration flows.
2001
+ *
2002
+ * @param caller - Identifier of the caller, used for logs.
2003
+ * @param hardStop - Why the registration is being torn down as {@link HardStop}.
2004
+ */
2005
+ )
2006
+ }, {
2007
+ key: "registrationCleanup",
2008
+ value: (function () {
2009
+ var _registrationCleanup = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee31(caller, hardStop) {
2010
+ var _this0 = this;
2011
+ var loggerContext;
2012
+ return _regenerator.default.wrap(function (_context32) {
2013
+ while (1) switch (_context32.prev = _context32.next) {
2014
+ case 0:
2015
+ loggerContext = {
2016
+ file: _constants2.REGISTRATION_FILE,
2017
+ method: caller
2018
+ };
2019
+ _Logger.default.info("[".concat(caller, "] : Running ").concat(hardStop.reason, " cleanup"), loggerContext);
2020
+ _context32.next = 1;
2021
+ return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee30() {
2022
+ var _t9;
2023
+ return _regenerator.default.wrap(function (_context31) {
2024
+ while (1) switch (_context31.prev = _context31.next) {
2025
+ case 0:
2026
+ _this0.clearFailbackTimer();
2027
+ _this0.clearKeepaliveTimer();
2028
+ _this0.reconnectPending = false;
2029
+ _this0.scheduled429Retry = false;
2030
+ _this0.failoverImmediately = false;
2031
+ _this0.retryAfter = undefined;
2032
+ _this0.registerRetry = false;
2033
+ _this0.clearFailoverState();
2034
+ _this0.setStatus(_types3.RegistrationStatus.INACTIVE);
2035
+ if (!_this0.apiRequest.isSocketEnabled()) {
2036
+ _context31.next = 4;
2037
+ break;
2038
+ }
2039
+ _context31.prev = 1;
2040
+ _context31.next = 2;
2041
+ return _this0.apiRequest.disconnectFromMobiusSocket({
2042
+ code: 3050,
2043
+ reason: 'done (permanent)'
2044
+ });
2045
+ case 2:
2046
+ _Logger.default.log("Mobius socket disconnect complete after ".concat(hardStop.reason), loggerContext);
2047
+ _context31.next = 4;
2048
+ break;
2049
+ case 3:
2050
+ _context31.prev = 3;
2051
+ _t9 = _context31["catch"](1);
2052
+ _Logger.default.warn("Mobius socket disconnect failed after ".concat(hardStop.reason, ": ").concat(String(_t9)), loggerContext);
2053
+ case 4:
2054
+ _this0.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED, undefined, hardStop.error);
2055
+ case 5:
2056
+ case "end":
2057
+ return _context31.stop();
2058
+ }
2059
+ }, _callee30, null, [[1, 3]]);
2060
+ })));
2061
+ case 1:
2062
+ case "end":
2063
+ return _context32.stop();
2064
+ }
2065
+ }, _callee31, this);
2066
+ }));
2067
+ function registrationCleanup(_x24, _x25) {
2068
+ return _registrationCleanup.apply(this, arguments);
2069
+ }
2070
+ return registrationCleanup;
1678
2071
  }())
1679
2072
  }]);
1680
2073
  }();