@webex/calling 3.11.0-webex-services-ready.1 → 3.12.0-auth-prejoin-fetch.1

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 (267) hide show
  1. package/dist/CallHistory/CallHistory.js +68 -51
  2. package/dist/CallHistory/CallHistory.js.map +1 -1
  3. package/dist/CallRecording/CallRecording.js +160 -0
  4. package/dist/CallRecording/CallRecording.js.map +1 -0
  5. package/dist/CallRecording/CallRecording.test.js +257 -0
  6. package/dist/CallRecording/CallRecording.test.js.map +1 -0
  7. package/dist/CallRecording/WxcCallRecordingConnector.js +577 -0
  8. package/dist/CallRecording/WxcCallRecordingConnector.js.map +1 -0
  9. package/dist/CallRecording/WxcCallRecordingConnector.test.js +652 -0
  10. package/dist/CallRecording/WxcCallRecordingConnector.test.js.map +1 -0
  11. package/dist/CallRecording/callRecordingFixtures.js +235 -0
  12. package/dist/CallRecording/callRecordingFixtures.js.map +1 -0
  13. package/dist/CallRecording/constants.js +50 -0
  14. package/dist/CallRecording/constants.js.map +1 -0
  15. package/dist/CallRecording/types.js +137 -0
  16. package/dist/CallRecording/types.js.map +1 -0
  17. package/dist/CallRecording/utils.js +42 -0
  18. package/dist/CallRecording/utils.js.map +1 -0
  19. package/dist/CallRecording/utils.test.js +97 -0
  20. package/dist/CallRecording/utils.test.js.map +1 -0
  21. package/dist/CallingClient/CallingClient.js +522 -195
  22. package/dist/CallingClient/CallingClient.js.map +1 -1
  23. package/dist/CallingClient/CallingClient.test.js +607 -133
  24. package/dist/CallingClient/CallingClient.test.js.map +1 -1
  25. package/dist/CallingClient/calling/call.js +643 -462
  26. package/dist/CallingClient/calling/call.js.map +1 -1
  27. package/dist/CallingClient/calling/call.test.js +850 -453
  28. package/dist/CallingClient/calling/call.test.js.map +1 -1
  29. package/dist/CallingClient/calling/callManager.js +106 -35
  30. package/dist/CallingClient/calling/callManager.js.map +1 -1
  31. package/dist/CallingClient/calling/callManager.test.js +140 -0
  32. package/dist/CallingClient/calling/callManager.test.js.map +1 -1
  33. package/dist/CallingClient/calling/types.js +5 -0
  34. package/dist/CallingClient/calling/types.js.map +1 -1
  35. package/dist/CallingClient/constants.js +34 -3
  36. package/dist/CallingClient/constants.js.map +1 -1
  37. package/dist/CallingClient/line/index.js +8 -1
  38. package/dist/CallingClient/line/index.js.map +1 -1
  39. package/dist/CallingClient/line/line.test.js +62 -10
  40. package/dist/CallingClient/line/line.test.js.map +1 -1
  41. package/dist/CallingClient/registration/register.js +906 -497
  42. package/dist/CallingClient/registration/register.js.map +1 -1
  43. package/dist/CallingClient/registration/register.test.js +649 -58
  44. package/dist/CallingClient/registration/register.test.js.map +1 -1
  45. package/dist/CallingClient/registration/types.js +26 -0
  46. package/dist/CallingClient/registration/types.js.map +1 -1
  47. package/dist/CallingClient/registration/webWorker.js +41 -104
  48. package/dist/CallingClient/registration/webWorker.js.map +1 -1
  49. package/dist/CallingClient/registration/webWorker.test.js +39 -153
  50. package/dist/CallingClient/registration/webWorker.test.js.map +1 -1
  51. package/dist/CallingClient/registration/webWorkerStr.js +1 -1
  52. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -1
  53. package/dist/CallingClient/types.js +7 -0
  54. package/dist/CallingClient/types.js.map +1 -1
  55. package/dist/CallingClient/utils/constants.js +58 -0
  56. package/dist/CallingClient/utils/constants.js.map +1 -0
  57. package/dist/CallingClient/utils/index.js +63 -0
  58. package/dist/CallingClient/utils/index.js.map +1 -0
  59. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  60. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  61. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +221 -0
  62. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  63. package/dist/CallingClient/utils/request.js +435 -0
  64. package/dist/CallingClient/utils/request.js.map +1 -0
  65. package/dist/CallingClient/utils/request.test.js +999 -0
  66. package/dist/CallingClient/utils/request.test.js.map +1 -0
  67. package/dist/CallingClient/utils/types.js +7 -0
  68. package/dist/CallingClient/utils/types.js.map +1 -0
  69. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  70. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  71. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  72. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  73. package/dist/Contacts/ContactsClient.js +13 -11
  74. package/dist/Contacts/ContactsClient.js.map +1 -1
  75. package/dist/Contacts/ContactsClient.test.js +3 -8
  76. package/dist/Contacts/ContactsClient.test.js.map +1 -1
  77. package/dist/Errors/types.js +2 -0
  78. package/dist/Errors/types.js.map +1 -1
  79. package/dist/Events/types.js +38 -11
  80. package/dist/Events/types.js.map +1 -1
  81. package/dist/Metrics/index.js +63 -2
  82. package/dist/Metrics/index.js.map +1 -1
  83. package/dist/Metrics/index.test.js +357 -1
  84. package/dist/Metrics/index.test.js.map +1 -1
  85. package/dist/Metrics/types.js +19 -1
  86. package/dist/Metrics/types.js.map +1 -1
  87. package/dist/SDKConnector/types.js.map +1 -1
  88. package/dist/api.js +56 -0
  89. package/dist/api.js.map +1 -1
  90. package/dist/common/Utils.js +212 -71
  91. package/dist/common/Utils.js.map +1 -1
  92. package/dist/common/Utils.test.js +417 -181
  93. package/dist/common/Utils.test.js.map +1 -1
  94. package/dist/common/testUtil.js +10 -5
  95. package/dist/common/testUtil.js.map +1 -1
  96. package/dist/common/types.js +3 -0
  97. package/dist/common/types.js.map +1 -1
  98. package/dist/index.js +171 -40
  99. package/dist/index.js.map +1 -1
  100. package/dist/mobius-socket/config.js +24 -0
  101. package/dist/mobius-socket/config.js.map +1 -0
  102. package/dist/mobius-socket/errors.js +143 -0
  103. package/dist/mobius-socket/errors.js.map +1 -0
  104. package/dist/mobius-socket/errors.test.js +20 -0
  105. package/dist/mobius-socket/errors.test.js.map +1 -0
  106. package/dist/mobius-socket/index.js +57 -0
  107. package/dist/mobius-socket/index.js.map +1 -0
  108. package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
  109. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  110. package/dist/mobius-socket/mobius-socket.js +849 -0
  111. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  112. package/dist/mobius-socket/mobius-socket.test.js +1898 -0
  113. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  114. package/dist/mobius-socket/socket/constants.js +55 -0
  115. package/dist/mobius-socket/socket/constants.js.map +1 -0
  116. package/dist/mobius-socket/socket/index.js +15 -0
  117. package/dist/mobius-socket/socket/index.js.map +1 -0
  118. package/dist/mobius-socket/socket/socket-base.js +604 -0
  119. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  120. package/dist/mobius-socket/socket/socket.js +19 -0
  121. package/dist/mobius-socket/socket/socket.js.map +1 -0
  122. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  123. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  124. package/dist/mobius-socket/socket/types.js +7 -0
  125. package/dist/mobius-socket/socket/types.js.map +1 -0
  126. package/dist/mobius-socket/socket.test.js +727 -0
  127. package/dist/mobius-socket/socket.test.js.map +1 -0
  128. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  129. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  130. package/dist/mobius-socket/test/promise-tick.js +28 -0
  131. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  132. package/dist/mobius-socket/types.js +7 -0
  133. package/dist/mobius-socket/types.js.map +1 -0
  134. package/dist/module/CallHistory/CallHistory.js +28 -17
  135. package/dist/module/CallRecording/CallRecording.js +56 -0
  136. package/dist/module/CallRecording/WxcCallRecordingConnector.js +257 -0
  137. package/dist/module/CallRecording/callRecordingFixtures.js +201 -0
  138. package/dist/module/CallRecording/constants.js +28 -0
  139. package/dist/module/CallRecording/types.js +19 -0
  140. package/dist/module/CallRecording/utils.js +14 -0
  141. package/dist/module/CallingClient/CallingClient.js +166 -8
  142. package/dist/module/CallingClient/calling/call.js +201 -68
  143. package/dist/module/CallingClient/calling/callManager.js +51 -11
  144. package/dist/module/CallingClient/calling/types.js +2 -0
  145. package/dist/module/CallingClient/constants.js +29 -0
  146. package/dist/module/CallingClient/line/index.js +4 -2
  147. package/dist/module/CallingClient/registration/register.js +274 -64
  148. package/dist/module/CallingClient/registration/types.js +5 -1
  149. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  150. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  151. package/dist/module/CallingClient/utils/constants.js +36 -0
  152. package/dist/module/CallingClient/utils/index.js +5 -0
  153. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  154. package/dist/module/CallingClient/utils/request.js +211 -0
  155. package/dist/module/CallingClient/utils/types.js +1 -0
  156. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  157. package/dist/module/Contacts/ContactsClient.js +1 -1
  158. package/dist/module/Errors/types.js +2 -0
  159. package/dist/module/Events/types.js +23 -10
  160. package/dist/module/Metrics/index.js +48 -1
  161. package/dist/module/Metrics/types.js +18 -0
  162. package/dist/module/api.js +3 -2
  163. package/dist/module/common/Utils.js +85 -22
  164. package/dist/module/common/testUtil.js +6 -1
  165. package/dist/module/common/types.js +3 -0
  166. package/dist/module/index.js +7 -3
  167. package/dist/module/mobius-socket/config.js +15 -0
  168. package/dist/module/mobius-socket/errors.js +58 -0
  169. package/dist/module/mobius-socket/index.js +24 -0
  170. package/dist/module/mobius-socket/mobius-socket.js +593 -0
  171. package/dist/module/mobius-socket/socket/constants.js +26 -0
  172. package/dist/module/mobius-socket/socket/index.js +4 -0
  173. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  174. package/dist/module/mobius-socket/socket/socket.js +9 -0
  175. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  176. package/dist/module/mobius-socket/socket/types.js +1 -0
  177. package/dist/module/mobius-socket/types.js +1 -0
  178. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  179. package/dist/types/CallRecording/CallRecording.d.ts +18 -0
  180. package/dist/types/CallRecording/CallRecording.d.ts.map +1 -0
  181. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts +23 -0
  182. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts.map +1 -0
  183. package/dist/types/CallRecording/callRecordingFixtures.d.ts +61 -0
  184. package/dist/types/CallRecording/callRecordingFixtures.d.ts.map +1 -0
  185. package/dist/types/CallRecording/constants.d.ts +29 -0
  186. package/dist/types/CallRecording/constants.d.ts.map +1 -0
  187. package/dist/types/CallRecording/types.d.ts +176 -0
  188. package/dist/types/CallRecording/types.d.ts.map +1 -0
  189. package/dist/types/CallRecording/utils.d.ts +3 -0
  190. package/dist/types/CallRecording/utils.d.ts.map +1 -0
  191. package/dist/types/CallingClient/CallingClient.d.ts +10 -1
  192. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  193. package/dist/types/CallingClient/calling/call.d.ts +17 -3
  194. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  195. package/dist/types/CallingClient/calling/callManager.d.ts +8 -4
  196. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  197. package/dist/types/CallingClient/calling/types.d.ts +38 -9
  198. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  199. package/dist/types/CallingClient/constants.d.ts +29 -0
  200. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  201. package/dist/types/CallingClient/line/index.d.ts +1 -1
  202. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  203. package/dist/types/CallingClient/registration/register.d.ts +10 -2
  204. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  205. package/dist/types/CallingClient/registration/types.d.ts +29 -3
  206. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  207. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  208. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  209. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  210. package/dist/types/CallingClient/types.d.ts +6 -3
  211. package/dist/types/CallingClient/types.d.ts.map +1 -1
  212. package/dist/types/CallingClient/utils/constants.d.ts +35 -0
  213. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  214. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  215. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  216. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  217. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  218. package/dist/types/CallingClient/utils/request.d.ts +28 -0
  219. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  220. package/dist/types/CallingClient/utils/types.d.ts +34 -0
  221. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  222. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  223. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  224. package/dist/types/Errors/types.d.ts +2 -0
  225. package/dist/types/Errors/types.d.ts.map +1 -1
  226. package/dist/types/Events/types.d.ts +80 -16
  227. package/dist/types/Events/types.d.ts.map +1 -1
  228. package/dist/types/Metrics/index.d.ts.map +1 -1
  229. package/dist/types/Metrics/types.d.ts +19 -2
  230. package/dist/types/Metrics/types.d.ts.map +1 -1
  231. package/dist/types/SDKConnector/types.d.ts +39 -12
  232. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  233. package/dist/types/api.d.ts +6 -4
  234. package/dist/types/api.d.ts.map +1 -1
  235. package/dist/types/common/Utils.d.ts +9 -4
  236. package/dist/types/common/Utils.d.ts.map +1 -1
  237. package/dist/types/common/testUtil.d.ts +5 -1
  238. package/dist/types/common/testUtil.d.ts.map +1 -1
  239. package/dist/types/common/types.d.ts +9 -1
  240. package/dist/types/common/types.d.ts.map +1 -1
  241. package/dist/types/index.d.ts +9 -4
  242. package/dist/types/index.d.ts.map +1 -1
  243. package/dist/types/mobius-socket/config.d.ts +17 -0
  244. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  245. package/dist/types/mobius-socket/errors.d.ts +32 -0
  246. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  247. package/dist/types/mobius-socket/index.d.ts +14 -0
  248. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  249. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  250. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  251. package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
  252. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  253. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  254. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  255. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  256. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  257. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  258. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  259. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  260. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  261. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  262. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  263. package/dist/types/mobius-socket/types.d.ts +21 -0
  264. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  265. package/package.json +21 -5
  266. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  267. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -19,11 +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"));
23
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/slicedToArray"));
22
24
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
23
25
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
24
26
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
25
27
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
26
- var _uuid = require("uuid");
27
28
  var _constants = require("../../common/constants");
28
29
  var _common = require("../../common");
29
30
  var _webWorkerStr = _interopRequireDefault(require("./webWorkerStr"));
@@ -31,10 +32,12 @@ var _types = require("../../Metrics/types");
31
32
  var _Metrics = require("../../Metrics");
32
33
  var _calling = require("../calling");
33
34
  var _Logger = _interopRequireDefault(require("../../Logger"));
35
+ var _types2 = require("./types");
34
36
  var _SDKConnector = _interopRequireDefault(require("../../SDKConnector"));
35
- var _types2 = require("../../common/types");
37
+ var _types3 = require("../../common/types");
36
38
  var _constants2 = require("../constants");
37
- var _types3 = require("../line/types");
39
+ var _types4 = require("../line/types");
40
+ var _request = require("../utils/request");
38
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; } } }; }
39
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; } }
40
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; }
@@ -73,16 +76,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
73
76
  (0, _defineProperty2.default)(this, "retryAfter", void 0);
74
77
  (0, _defineProperty2.default)(this, "scheduled429Retry", false);
75
78
  (0, _defineProperty2.default)(this, "webWorker", void 0);
79
+ (0, _defineProperty2.default)(this, "apiRequest", void 0);
76
80
  this.jwe = jwe;
77
81
  this.sdkConnector = _SDKConnector.default;
78
82
  this.serviceData = serviceData;
79
- this.isCCFlow = serviceData.indicator === _types2.ServiceIndicator.CONTACT_CENTER;
83
+ this.isCCFlow = serviceData.indicator === _types3.ServiceIndicator.CONTACT_CENTER;
80
84
  if (!this.sdkConnector.getWebex()) {
81
85
  _SDKConnector.default.setWebex(webex);
82
86
  }
83
87
  this.webex = this.sdkConnector.getWebex();
84
88
  this.userId = this.webex.internal.device.userId;
85
- this.registrationStatus = _types2.RegistrationStatus.IDLE;
89
+ this.registrationStatus = _types3.RegistrationStatus.IDLE;
86
90
  this.failback429RetryAttempts = 0;
87
91
  _Logger.default.setLogger(logLevel, _constants2.REGISTRATION_FILE);
88
92
  this.rehomingIntervalMin = _constants2.DEFAULT_REHOMING_INTERVAL_MIN;
@@ -93,8 +97,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
93
97
  this.lineEmitter = lineEmitter;
94
98
  this.primaryMobiusUris = [];
95
99
  this.backupMobiusUris = [];
100
+ this.apiRequest = _request.APIRequest.getInstance({
101
+ webex: this.webex
102
+ });
96
103
  }
97
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
+ }, {
98
111
  key: "getFailoverCacheKey",
99
112
  value: function getFailoverCacheKey() {
100
113
  return "".concat(_constants2.FAILOVER_CACHE_PREFIX, ".").concat(this.userId || 'unknown');
@@ -183,6 +196,21 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
183
196
  this.activeMobiusUrl = url;
184
197
  this.callManager.updateActiveMobius(url);
185
198
  }
199
+
200
+ /**
201
+ * Populate deviceInfo using a devices response body.
202
+ */
203
+ }, {
204
+ key: "setDeviceInfo",
205
+ value: function setDeviceInfo(devicesInfo) {
206
+ var _devicesInfo$devices = (0, _slicedToArray2.default)(devicesInfo.devices, 1),
207
+ device = _devicesInfo$devices[0];
208
+ this.deviceInfo = {
209
+ userId: devicesInfo.userId,
210
+ device: device,
211
+ devices: devicesInfo.devices
212
+ };
213
+ }
186
214
  }, {
187
215
  key: "setMobiusServers",
188
216
  value: function setMobiusServers(primaryMobiusUris, backupMobiusUris) {
@@ -202,50 +230,47 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
202
230
  key: "deleteRegistration",
203
231
  value: (function () {
204
232
  var _deleteRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(url, deviceId, deviceUrl) {
205
- var _response;
206
- var response, _t2, _t3, _t4, _t5, _t6, _t7, _t8, _t9, _t0;
233
+ var response, requestObj, _t2;
207
234
  return _regenerator.default.wrap(function (_context2) {
208
235
  while (1) switch (_context2.prev = _context2.next) {
209
236
  case 0:
210
- _context2.prev = 0;
211
- _t2 = fetch;
212
- _t3 = "".concat(url).concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(deviceId);
213
- _t4 = _types2.HTTP_METHODS.DELETE;
214
- _t5 = _defineProperty2.default;
215
- _t6 = _defineProperty2.default;
216
- _t7 = _defineProperty2.default;
217
- _t8 = (0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceUrl);
218
- _context2.next = 1;
219
- return this.webex.credentials.getUserToken();
220
- case 1:
221
- _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;
222
250
  _context2.next = 2;
223
- return _t2(_t3, {
224
- method: _t4,
225
- headers: _t9
226
- });
251
+ return this.apiRequest.makeRequest(requestObj);
227
252
  case 2:
228
253
  response = _context2.sent;
229
254
  _context2.next = 4;
230
255
  break;
231
256
  case 3:
232
257
  _context2.prev = 3;
233
- _t0 = _context2["catch"](0);
234
- _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)), {
235
260
  file: _constants2.REGISTRATION_FILE,
236
261
  method: _constants2.METHODS.DELETE_REGISTRATION
237
262
  });
238
263
  _context2.next = 4;
239
264
  return (0, _common.uploadLogs)();
240
265
  case 4:
241
- this.setStatus(_types2.RegistrationStatus.INACTIVE);
242
- this.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
243
- 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);
244
269
  case 5:
245
270
  case "end":
246
271
  return _context2.stop();
247
272
  }
248
- }, _callee2, this, [[0, 3]]);
273
+ }, _callee2, this, [[1, 3]]);
249
274
  }));
250
275
  function deleteRegistration(_x, _x2, _x3) {
251
276
  return _deleteRegistration.apply(this, arguments);
@@ -272,12 +297,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
272
297
  jwe: this.jwe
273
298
  }) : this.serviceData
274
299
  };
275
- return _context3.abrupt("return", this.webex.request({
300
+ return _context3.abrupt("return", this.apiRequest.makeRequest({
276
301
  uri: "".concat(url, "device"),
277
- method: _types2.HTTP_METHODS.POST,
302
+ method: _types3.HTTP_METHODS.POST,
278
303
  headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceInfo.clientDeviceUri), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
279
304
  body: deviceInfo,
280
- service: _types2.ALLOWED_SERVICES.MOBIUS
305
+ service: _types3.ALLOWED_SERVICES.MOBIUS
281
306
  }));
282
307
  case 1:
283
308
  case "end":
@@ -300,25 +325,44 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
300
325
  value: (function () {
301
326
  var _restorePreviousRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5(caller) {
302
327
  var _this = this;
303
- var abort;
328
+ var loggerContext, abort;
304
329
  return _regenerator.default.wrap(function (_context5) {
305
330
  while (1) switch (_context5.prev = _context5.next) {
306
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);
307
337
  abort = false;
308
- if (!this.activeMobiusUrl) {
309
- _context5.next = 6;
338
+ if (!(this.apiRequest.isSocketEnabled() && "".concat(this.apiRequest.getConnectedWebSocketUrl(), "/") !== this.activeMobiusUrl)) {
339
+ _context5.next = 1;
310
340
  break;
311
341
  }
342
+ _Logger.default.info("Disconnecting from Mobius socket to restore previous registration.", {
343
+ file: _constants2.REGISTRATION_FILE,
344
+ method: 'restorePreviousRegistration'
345
+ });
312
346
  _context5.next = 1;
313
- return this.attemptRegistrationWithServers(caller, [this.activeMobiusUrl]);
347
+ return this.apiRequest.disconnectFromMobiusSocket({
348
+ code: 3050,
349
+ reason: 'done (permanent)'
350
+ });
314
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:
315
359
  abort = _context5.sent;
316
360
  if (!this.retryAfter) {
317
- _context5.next = 6;
361
+ _context5.next = 7;
318
362
  break;
319
363
  }
320
364
  if (!(this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT)) {
321
- _context5.next = 2;
365
+ _context5.next = 3;
322
366
  break;
323
367
  }
324
368
  // If retry-after is less than threshold, honor it and schedule retry
@@ -334,28 +378,30 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
334
378
  }
335
379
  }, _callee4);
336
380
  })), this.retryAfter * 1000);
337
- _context5.next = 5;
381
+ _context5.next = 6;
338
382
  break;
339
- case 2:
383
+ case 3:
340
384
  if (!(this.primaryMobiusUris.includes(this.activeMobiusUrl) && this.backupMobiusUris.length > 0)) {
341
- _context5.next = 4;
385
+ _context5.next = 5;
342
386
  break;
343
387
  }
344
- _context5.next = 3;
388
+ _context5.next = 4;
345
389
  return this.attemptRegistrationWithServers(caller, this.backupMobiusUris);
346
- case 3:
390
+ case 4:
347
391
  abort = _context5.sent;
348
- _context5.next = 5;
392
+ _context5.next = 6;
349
393
  break;
350
- case 4:
351
- // If we are using backup and got 429, restart registration
352
- this.restartRegistration(caller);
353
394
  case 5:
395
+ _context5.next = 6;
396
+ return this.restartRegistration(caller);
397
+ case 6:
354
398
  this.retryAfter = undefined;
399
+ _Logger.default.log("restorePreviousRegistration completed via 429 retry-after path - caller: ".concat(caller), loggerContext);
355
400
  return _context5.abrupt("return", true);
356
- case 6:
357
- return _context5.abrupt("return", abort);
358
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:
359
405
  case "end":
360
406
  return _context5.stop();
361
407
  }
@@ -374,12 +420,17 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
374
420
  key: "handle404KeepaliveFailure",
375
421
  value: (function () {
376
422
  var _handle404KeepaliveFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6(caller) {
377
- var abort;
423
+ var loggerContext, abort;
378
424
  return _regenerator.default.wrap(function (_context6) {
379
425
  while (1) switch (_context6.prev = _context6.next) {
380
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);
381
432
  if (!(caller === _constants2.KEEPALIVE_UTIL)) {
382
- _context6.next = 2;
433
+ _context6.next = 4;
383
434
  break;
384
435
  }
385
436
  _context6.next = 1;
@@ -387,12 +438,18 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
387
438
  case 1:
388
439
  abort = _context6.sent;
389
440
  if (!(!abort && !this.isDeviceRegistered())) {
390
- _context6.next = 2;
441
+ _context6.next = 3;
391
442
  break;
392
443
  }
444
+ _Logger.default.warn('Keepalive 404 recovery: re-registration did not complete, starting failover timer', loggerContext);
393
445
  _context6.next = 2;
394
446
  return this.startFailoverTimer();
395
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:
396
453
  case "end":
397
454
  return _context6.stop();
398
455
  }
@@ -403,6 +460,60 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
403
460
  }
404
461
  return handle404KeepaliveFailure;
405
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
+ }()
406
517
  /**
407
518
  * Callback for handling 429 retry response from the server
408
519
  */
@@ -410,21 +521,21 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
410
521
  }, {
411
522
  key: "handle429Retry",
412
523
  value: (function () {
413
- 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) {
414
525
  var _this2 = this;
415
526
  var interval, abort;
416
- return _regenerator.default.wrap(function (_context8) {
417
- while (1) switch (_context8.prev = _context8.next) {
527
+ return _regenerator.default.wrap(function (_context9) {
528
+ while (1) switch (_context9.prev = _context9.next) {
418
529
  case 0:
419
530
  if (!(caller === _constants2.FAILBACK_UTIL)) {
420
- _context8.next = 4;
531
+ _context9.next = 4;
421
532
  break;
422
533
  }
423
534
  if (!(this.failback429RetryAttempts >= _constants2.REG_FAILBACK_429_MAX_RETRIES)) {
424
- _context8.next = 1;
535
+ _context9.next = 1;
425
536
  break;
426
537
  }
427
- return _context8.abrupt("return");
538
+ return _context9.abrupt("return");
428
539
  case 1:
429
540
  this.clearFailbackTimer();
430
541
  this.failback429RetryAttempts += 1;
@@ -435,26 +546,26 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
435
546
  interval = this.getRegRetryInterval(this.failback429RetryAttempts);
436
547
  this.startFailbackTimer(interval);
437
548
  this.scheduled429Retry = true;
438
- _context8.next = 2;
549
+ _context9.next = 2;
439
550
  return this.restorePreviousRegistration(_constants2.REG_429_RETRY_UTIL);
440
551
  case 2:
441
- abort = _context8.sent;
552
+ abort = _context9.sent;
442
553
  if (!(!abort && !this.isDeviceRegistered())) {
443
- _context8.next = 3;
554
+ _context9.next = 3;
444
555
  break;
445
556
  }
446
- _context8.next = 3;
557
+ _context9.next = 3;
447
558
  return this.restartRegistration(_constants2.REG_429_RETRY_UTIL);
448
559
  case 3:
449
- _context8.next = 5;
560
+ _context9.next = 5;
450
561
  break;
451
562
  case 4:
452
563
  if (caller === _constants2.KEEPALIVE_UTIL) {
453
564
  this.clearKeepaliveTimer();
454
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee7() {
565
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8() {
455
566
  var _this2$deviceInfo$dev;
456
- return _regenerator.default.wrap(function (_context7) {
457
- while (1) switch (_context7.prev = _context7.next) {
567
+ return _regenerator.default.wrap(function (_context8) {
568
+ while (1) switch (_context8.prev = _context8.next) {
458
569
  case 0:
459
570
  _Logger.default.log("Resuming keepalive after ".concat(retryAfter, " seconds"), {
460
571
  file: _constants2.REGISTRATION_FILE,
@@ -462,24 +573,24 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
462
573
  });
463
574
 
464
575
  // Resume the keepalive after waiting for the retry after period
465
- _context7.next = 1;
576
+ _context8.next = 1;
466
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');
467
578
  case 1:
468
579
  case "end":
469
- return _context7.stop();
580
+ return _context8.stop();
470
581
  }
471
- }, _callee7);
472
- })), retryAfter * 1000);
582
+ }, _callee8);
583
+ })), (retryAfter - Number(this.deviceInfo.keepaliveInterval || 0)) * 1000);
473
584
  } else {
474
585
  this.retryAfter = retryAfter;
475
586
  }
476
587
  case 5:
477
588
  case "end":
478
- return _context8.stop();
589
+ return _context9.stop();
479
590
  }
480
- }, _callee8, this);
591
+ }, _callee9, this);
481
592
  }));
482
- function handle429Retry(_x7, _x8) {
593
+ function handle429Retry(_x1, _x10) {
483
594
  return _handle429Retry.apply(this, arguments);
484
595
  }
485
596
  return handle429Retry;
@@ -508,7 +619,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
508
619
  }, {
509
620
  key: "startFailoverTimer",
510
621
  value: (function () {
511
- var _startFailoverTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11() {
622
+ var _startFailoverTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
512
623
  var _this3 = this;
513
624
  var attempt,
514
625
  timeElapsed,
@@ -518,12 +629,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
518
629
  excessVal,
519
630
  abort,
520
631
  scheduledTime,
521
- _args11 = arguments;
522
- return _regenerator.default.wrap(function (_context11) {
523
- 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) {
524
635
  case 0:
525
- attempt = _args11.length > 0 && _args11[0] !== undefined ? _args11[0] : 1;
526
- 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;
527
638
  loggerContext = {
528
639
  file: _constants2.REGISTRATION_FILE,
529
640
  method: _constants2.FAILOVER_UTIL
@@ -538,7 +649,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
538
649
  this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;
539
650
  }
540
651
  if (!(interval > _constants2.BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately)) {
541
- _context11.next = 1;
652
+ _context12.next = 1;
542
653
  break;
543
654
  }
544
655
  scheduledTime = Math.floor((0, _now.default)() / 1000);
@@ -551,47 +662,60 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
551
662
  retryScheduledTime: scheduledTime,
552
663
  serverType: 'primary'
553
664
  });
554
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
555
- return _regenerator.default.wrap(function (_context0) {
556
- 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) {
557
668
  case 0:
558
- _context0.next = 1;
559
- 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() {
560
671
  var currentTime;
561
- return _regenerator.default.wrap(function (_context9) {
562
- while (1) switch (_context9.prev = _context9.next) {
672
+ return _regenerator.default.wrap(function (_context0) {
673
+ while (1) switch (_context0.prev = _context0.next) {
563
674
  case 0:
564
- _context9.next = 1;
675
+ _context0.next = 1;
565
676
  return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL);
566
677
  case 1:
567
- abort = _context9.sent;
678
+ abort = _context0.sent;
568
679
  currentTime = Math.floor((0, _now.default)() / 1000);
569
680
  if (!(!abort && !_this3.isDeviceRegistered())) {
570
- _context9.next = 2;
681
+ _context0.next = 2;
571
682
  break;
572
683
  }
573
- _context9.next = 2;
684
+ _context0.next = 2;
574
685
  return _this3.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));
575
686
  case 2:
576
687
  case "end":
577
- return _context9.stop();
688
+ return _context0.stop();
578
689
  }
579
- }, _callee9);
690
+ }, _callee0);
580
691
  })));
581
692
  case 1:
582
693
  case "end":
583
- return _context0.stop();
694
+ return _context1.stop();
584
695
  }
585
- }, _callee0);
696
+ }, _callee1);
586
697
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
587
698
  _Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
588
- _context11.next = 5;
699
+ _context12.next = 7;
589
700
  break;
590
701
  case 1:
591
702
  if (!this.backupMobiusUris.length) {
592
- _context11.next = 3;
703
+ _context12.next = 5;
704
+ break;
705
+ }
706
+ if (!this.apiRequest.isSocketEnabled()) {
707
+ _context12.next = 3;
593
708
  break;
594
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:
595
719
  this.saveFailoverState({
596
720
  attempt: attempt,
597
721
  timeElapsed: timeElapsed,
@@ -600,66 +724,66 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
600
724
  });
601
725
  _Logger.default.info('Failing over to backup servers.', loggerContext);
602
726
  this.failoverImmediately = false;
603
- _context11.next = 2;
727
+ _context12.next = 4;
604
728
  return this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, this.backupMobiusUris);
605
- case 2:
606
- abort = _context11.sent;
729
+ case 4:
730
+ abort = _context12.sent;
607
731
  if (!abort && !this.isDeviceRegistered()) {
608
732
  interval = this.getRegRetryInterval();
609
733
  if (this.retryAfter != null && this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT) {
610
734
  interval = interval < this.retryAfter ? this.retryAfter : interval;
611
735
  }
612
- setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10() {
613
- return _regenerator.default.wrap(function (_context10) {
614
- 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) {
615
739
  case 0:
616
- _context10.next = 1;
617
- return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1() {
618
- return _regenerator.default.wrap(function (_context1) {
619
- 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) {
620
744
  case 0:
621
- _context1.next = 1;
745
+ _context10.next = 1;
622
746
  return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, _this3.backupMobiusUris);
623
747
  case 1:
624
- abort = _context1.sent;
748
+ abort = _context10.sent;
625
749
  if (!(!abort && !_this3.isDeviceRegistered())) {
626
- _context1.next = 3;
750
+ _context10.next = 3;
627
751
  break;
628
752
  }
629
- _context1.next = 2;
753
+ _context10.next = 2;
630
754
  return (0, _common.uploadLogs)();
631
755
  case 2:
632
756
  (0, _common.emitFinalFailure)(function (clientError) {
633
- _this3.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
757
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
634
758
  }, loggerContext);
635
759
  case 3:
636
760
  case "end":
637
- return _context1.stop();
761
+ return _context10.stop();
638
762
  }
639
- }, _callee1);
763
+ }, _callee10);
640
764
  })));
641
765
  case 1:
642
766
  case "end":
643
- return _context10.stop();
767
+ return _context11.stop();
644
768
  }
645
- }, _callee10);
769
+ }, _callee11);
646
770
  })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
647
771
  _Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
648
772
  }
649
- _context11.next = 5;
773
+ _context12.next = 7;
650
774
  break;
651
- case 3:
652
- _context11.next = 4;
775
+ case 5:
776
+ _context12.next = 6;
653
777
  return (0, _common.uploadLogs)();
654
- case 4:
778
+ case 6:
655
779
  (0, _common.emitFinalFailure)(function (clientError) {
656
- _this3.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
657
- }, loggerContext);
658
- case 5:
780
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
781
+ }, loggerContext, interval < 0 ? 'Timer threshold exceeded during failover' : undefined);
782
+ case 7:
659
783
  case "end":
660
- return _context11.stop();
784
+ return _context12.stop();
661
785
  }
662
- }, _callee11, this);
786
+ }, _callee12, this);
663
787
  }));
664
788
  function startFailoverTimer() {
665
789
  return _startFailoverTimer.apply(this, arguments);
@@ -678,37 +802,65 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
678
802
  this.failbackTimer = undefined;
679
803
  }
680
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
+ }()
681
833
  }, {
682
834
  key: "isPrimaryActive",
683
835
  value: function () {
684
- var _isPrimaryActive = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
685
- var status, _iterator, _step, mobiusUrl, baseUri, response, _ref7, statusCode, _t1, _t10;
686
- return _regenerator.default.wrap(function (_context12) {
687
- 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) {
688
840
  case 0:
689
841
  _iterator = _createForOfIteratorHelper(this.primaryMobiusUris);
690
- _context12.prev = 1;
842
+ _context14.prev = 1;
691
843
  _iterator.s();
692
844
  case 2:
693
845
  if ((_step = _iterator.n()).done) {
694
- _context12.next = 8;
846
+ _context14.next = 8;
695
847
  break;
696
848
  }
697
849
  mobiusUrl = _step.value;
698
- _context12.prev = 3;
699
- baseUri = mobiusUrl.replace(_constants2.URL_ENDPOINT, '/'); // eslint-disable-next-line no-await-in-loop
700
- _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;
701
853
  return this.webex.request({
702
854
  uri: "".concat(baseUri, "ping"),
703
- method: _types2.HTTP_METHODS.GET,
855
+ method: _types3.HTTP_METHODS.GET,
704
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),
705
- service: _types2.ALLOWED_SERVICES.MOBIUS
857
+ service: _types3.ALLOWED_SERVICES.MOBIUS
706
858
  });
707
859
  case 4:
708
- response = _context12.sent;
860
+ response = _context14.sent;
709
861
  _ref7 = response, statusCode = _ref7.statusCode;
710
862
  if (!(statusCode === 200)) {
711
- _context12.next = 5;
863
+ _context14.next = 5;
712
864
  break;
713
865
  }
714
866
  _Logger.default.info("Ping successful for primary Mobius: ".concat(mobiusUrl), {
@@ -716,39 +868,39 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
716
868
  method: _constants2.FAILBACK_UTIL
717
869
  });
718
870
  status = 'up';
719
- return _context12.abrupt("continue", 8);
871
+ return _context14.abrupt("continue", 8);
720
872
  case 5:
721
- _context12.next = 7;
873
+ _context14.next = 7;
722
874
  break;
723
875
  case 6:
724
- _context12.prev = 6;
725
- _t1 = _context12["catch"](3);
726
- _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)), {
727
879
  file: _constants2.REGISTRATION_FILE,
728
880
  method: _constants2.FAILBACK_UTIL
729
881
  });
730
882
  status = 'down';
731
883
  case 7:
732
- _context12.next = 2;
884
+ _context14.next = 2;
733
885
  break;
734
886
  case 8:
735
- _context12.next = 10;
887
+ _context14.next = 10;
736
888
  break;
737
889
  case 9:
738
- _context12.prev = 9;
739
- _t10 = _context12["catch"](1);
740
- _iterator.e(_t10);
890
+ _context14.prev = 9;
891
+ _t4 = _context14["catch"](1);
892
+ _iterator.e(_t4);
741
893
  case 10:
742
- _context12.prev = 10;
894
+ _context14.prev = 10;
743
895
  _iterator.f();
744
- return _context12.finish(10);
896
+ return _context14.finish(10);
745
897
  case 11:
746
- return _context12.abrupt("return", status === 'up');
898
+ return _context14.abrupt("return", status === 'up');
747
899
  case 12:
748
900
  case "end":
749
- return _context12.stop();
901
+ return _context14.stop();
750
902
  }
751
- }, _callee12, this, [[1, 9, 10, 11], [3, 6]]);
903
+ }, _callee14, this, [[1, 9, 10, 11], [3, 6]]);
752
904
  }));
753
905
  function isPrimaryActive() {
754
906
  return _isPrimaryActive.apply(this, arguments);
@@ -781,13 +933,21 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
781
933
  }, {
782
934
  key: "initiateFailback",
783
935
  value: function initiateFailback() {
936
+ var loggerContext = {
937
+ file: _constants2.REGISTRATION_FILE,
938
+ method: _constants2.METHODS.INITIATE_FAILBACK
939
+ };
784
940
  if (this.isFailbackRequired()) {
785
941
  if (!this.failbackTimer) {
786
942
  this.failback429RetryAttempts = 0;
787
943
  var intervalInMinutes = this.getFailbackInterval();
944
+ _Logger.default.info("Scheduling failback to primary - intervalMinutes: ".concat(intervalInMinutes), loggerContext);
788
945
  this.startFailbackTimer(intervalInMinutes * _constants2.MINUTES_TO_SEC_MFACTOR);
946
+ } else {
947
+ _Logger.default.info('Failback timer already scheduled, skipping', loggerContext);
789
948
  }
790
949
  } else {
950
+ _Logger.default.info('Failback not required, clearing any pending failback timer', loggerContext);
791
951
  this.failback429RetryAttempts = 0;
792
952
  this.clearFailbackTimer();
793
953
  }
@@ -801,16 +961,16 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
801
961
  key: "startFailbackTimer",
802
962
  value: function startFailbackTimer(intervalInSeconds) {
803
963
  var _this4 = this;
804
- this.failbackTimer = setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee13() {
805
- return _regenerator.default.wrap(function (_context13) {
806
- 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) {
807
967
  case 0:
808
- return _context13.abrupt("return", _this4.executeFailback());
968
+ return _context15.abrupt("return", _this4.executeFailback());
809
969
  case 1:
810
970
  case "end":
811
- return _context13.stop();
971
+ return _context15.stop();
812
972
  }
813
- }, _callee13);
973
+ }, _callee15);
814
974
  })), intervalInSeconds * _constants2.SEC_TO_MSEC_MFACTOR);
815
975
  _Logger.default.log("Failback scheduled after ".concat(intervalInSeconds, " seconds."), {
816
976
  file: _constants2.REGISTRATION_FILE,
@@ -825,90 +985,103 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
825
985
  }, {
826
986
  key: "executeFailback",
827
987
  value: (function () {
828
- var _executeFailback = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee15() {
988
+ var _executeFailback = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee17() {
829
989
  var _this5 = this;
830
- return _regenerator.default.wrap(function (_context15) {
831
- 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) {
832
993
  case 0:
833
- _context15.next = 1;
834
- 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() {
835
1001
  var primaryServerStatus, abort, abortNew;
836
- return _regenerator.default.wrap(function (_context14) {
837
- while (1) switch (_context14.prev = _context14.next) {
1002
+ return _regenerator.default.wrap(function (_context16) {
1003
+ while (1) switch (_context16.prev = _context16.next) {
838
1004
  case 0:
839
1005
  if (!_this5.isFailbackRequired()) {
840
- _context14.next = 11;
1006
+ _context16.next = 13;
841
1007
  break;
842
1008
  }
843
- _context14.next = 1;
1009
+ _context16.next = 1;
844
1010
  return _this5.isPrimaryActive();
845
1011
  case 1:
846
- primaryServerStatus = _context14.sent;
1012
+ primaryServerStatus = _context16.sent;
847
1013
  if (!((0, _keys.default)(_this5.callManager.getActiveCalls()).length === 0 && primaryServerStatus)) {
848
- _context14.next = 10;
1014
+ _context16.next = 12;
849
1015
  break;
850
1016
  }
851
- _Logger.default.info("Attempting failback to primary.", {
852
- file: _constants2.REGISTRATION_FILE,
853
- method: _this5.executeFailback.name
854
- });
855
- _context14.next = 2;
1017
+ _Logger.default.info("Attempting failback to primary.", loggerContext);
1018
+ _context16.next = 2;
856
1019
  return _this5.deregister();
857
1020
  case 2:
858
- _context14.next = 3;
859
- 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
+ });
860
1031
  case 3:
861
- 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;
862
1038
  if (!(_this5.scheduled429Retry || abort || _this5.isDeviceRegistered())) {
863
- _context14.next = 4;
1039
+ _context16.next = 6;
864
1040
  break;
865
1041
  }
866
- return _context14.abrupt("return");
867
- case 4:
868
- _context14.next = 5;
1042
+ return _context16.abrupt("return");
1043
+ case 6:
1044
+ _context16.next = 7;
869
1045
  return _this5.restorePreviousRegistration(_constants2.FAILBACK_UTIL);
870
- case 5:
871
- abortNew = _context14.sent;
1046
+ case 7:
1047
+ abortNew = _context16.sent;
872
1048
  if (!abortNew) {
873
- _context14.next = 6;
1049
+ _context16.next = 8;
874
1050
  break;
875
1051
  }
876
1052
  _this5.clearFailbackTimer();
877
- return _context14.abrupt("return");
878
- case 6:
1053
+ return _context16.abrupt("return");
1054
+ case 8:
879
1055
  if (_this5.isDeviceRegistered()) {
880
- _context14.next = 8;
1056
+ _context16.next = 10;
881
1057
  break;
882
1058
  }
883
- _context14.next = 7;
884
- return _this5.restartRegistration(_this5.executeFailback.name);
885
- case 7:
886
- _context14.next = 9;
887
- break;
888
- case 8:
889
- _this5.failbackTimer = undefined;
890
- _this5.initiateFailback();
1059
+ _context16.next = 9;
1060
+ return _this5.restartRegistration(loggerContext.method);
891
1061
  case 9:
892
- _context14.next = 11;
1062
+ _context16.next = 11;
893
1063
  break;
894
1064
  case 10:
895
- _Logger.default.info('Active calls present or primary Mobius is down, deferring failback to next cycle.', {
896
- file: _constants2.REGISTRATION_FILE,
897
- method: _this5.executeFailback.name
898
- });
899
1065
  _this5.failbackTimer = undefined;
900
1066
  _this5.initiateFailback();
901
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:
902
1075
  case "end":
903
- return _context14.stop();
1076
+ return _context16.stop();
904
1077
  }
905
- }, _callee14);
1078
+ }, _callee16);
906
1079
  })));
907
1080
  case 1:
908
1081
  case "end":
909
- return _context15.stop();
1082
+ return _context17.stop();
910
1083
  }
911
- }, _callee15, this);
1084
+ }, _callee17, this);
912
1085
  }));
913
1086
  function executeFailback() {
914
1087
  return _executeFailback.apply(this, arguments);
@@ -950,7 +1123,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
950
1123
  }, {
951
1124
  key: "isDeviceRegistered",
952
1125
  value: function isDeviceRegistered() {
953
- return this.registrationStatus === _types2.RegistrationStatus.ACTIVE;
1126
+ return this.registrationStatus === _types3.RegistrationStatus.ACTIVE;
954
1127
  }
955
1128
  }, {
956
1129
  key: "getStatus",
@@ -971,34 +1144,42 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
971
1144
  }, {
972
1145
  key: "restartRegistration",
973
1146
  value: (function () {
974
- var _restartRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee16(caller) {
975
- var abort;
976
- return _regenerator.default.wrap(function (_context16) {
977
- 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) {
978
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
+
979
1158
  /*
980
1159
  * Cancel any failback timer running
981
1160
  * and start fresh registration attempt with retry as true.
982
1161
  */
983
1162
  this.clearFailbackTimer();
984
1163
  this.failback429RetryAttempts = 0;
985
- _context16.next = 1;
1164
+ _context18.next = 1;
986
1165
  return this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);
987
1166
  case 1:
988
- abort = _context16.sent;
1167
+ abort = _context18.sent;
989
1168
  if (!(!abort && !this.isDeviceRegistered())) {
990
- _context16.next = 2;
1169
+ _context18.next = 2;
991
1170
  break;
992
1171
  }
993
- _context16.next = 2;
1172
+ _context18.next = 2;
994
1173
  return this.startFailoverTimer();
995
1174
  case 2:
1175
+ _Logger.default.log("restartRegistration completed - caller: ".concat(caller, ", deviceRegistered: ").concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
1176
+ case 3:
996
1177
  case "end":
997
- return _context16.stop();
1178
+ return _context18.stop();
998
1179
  }
999
- }, _callee16, this);
1180
+ }, _callee18, this);
1000
1181
  }));
1001
- function restartRegistration(_x9) {
1182
+ function restartRegistration(_x13) {
1002
1183
  return _restartRegistration.apply(this, arguments);
1003
1184
  }
1004
1185
  return restartRegistration;
@@ -1012,23 +1193,23 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1012
1193
  }, {
1013
1194
  key: "handleConnectionRestoration",
1014
1195
  value: (function () {
1015
- 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) {
1016
1197
  var _this6 = this;
1017
- return _regenerator.default.wrap(function (_context18) {
1018
- while (1) switch (_context18.prev = _context18.next) {
1198
+ return _regenerator.default.wrap(function (_context20) {
1199
+ while (1) switch (_context20.prev = _context20.next) {
1019
1200
  case 0:
1020
1201
  _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1021
1202
  method: _constants2.METHODS.HANDLE_CONNECTION_RESTORATION,
1022
1203
  file: _constants2.REGISTRATION_FILE
1023
1204
  });
1024
- _context18.next = 1;
1025
- 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() {
1026
1207
  var abort;
1027
- return _regenerator.default.wrap(function (_context17) {
1028
- while (1) switch (_context17.prev = _context17.next) {
1208
+ return _regenerator.default.wrap(function (_context19) {
1209
+ while (1) switch (_context19.prev = _context19.next) {
1029
1210
  case 0:
1030
1211
  if (!retry) {
1031
- _context17.next = 4;
1212
+ _context19.next = 4;
1032
1213
  break;
1033
1214
  }
1034
1215
  _Logger.default.log('Network is up again, re-registering with Webex Calling if needed', {
@@ -1037,43 +1218,43 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1037
1218
  });
1038
1219
  _this6.clearKeepaliveTimer();
1039
1220
  if (!_this6.isDeviceRegistered()) {
1040
- _context17.next = 1;
1221
+ _context19.next = 1;
1041
1222
  break;
1042
1223
  }
1043
- _context17.next = 1;
1224
+ _context19.next = 1;
1044
1225
  return _this6.deregister();
1045
1226
  case 1:
1046
1227
  if (!_this6.activeMobiusUrl) {
1047
- _context17.next = 3;
1228
+ _context19.next = 3;
1048
1229
  break;
1049
1230
  }
1050
- _context17.next = 2;
1231
+ _context19.next = 2;
1051
1232
  return _this6.restorePreviousRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1052
1233
  case 2:
1053
- abort = _context17.sent;
1234
+ abort = _context19.sent;
1054
1235
  if (!(!abort && !_this6.isDeviceRegistered())) {
1055
- _context17.next = 3;
1236
+ _context19.next = 3;
1056
1237
  break;
1057
1238
  }
1058
- _context17.next = 3;
1239
+ _context19.next = 3;
1059
1240
  return _this6.restartRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1060
1241
  case 3:
1061
1242
  retry = false;
1062
1243
  case 4:
1063
1244
  case "end":
1064
- return _context17.stop();
1245
+ return _context19.stop();
1065
1246
  }
1066
- }, _callee17);
1247
+ }, _callee19);
1067
1248
  })));
1068
1249
  case 1:
1069
- return _context18.abrupt("return", retry);
1250
+ return _context20.abrupt("return", retry);
1070
1251
  case 2:
1071
1252
  case "end":
1072
- return _context18.stop();
1253
+ return _context20.stop();
1073
1254
  }
1074
- }, _callee18, this);
1255
+ }, _callee20, this);
1075
1256
  }));
1076
- function handleConnectionRestoration(_x0) {
1257
+ function handleConnectionRestoration(_x14) {
1077
1258
  return _handleConnectionRestoration.apply(this, arguments);
1078
1259
  }
1079
1260
  return handleConnectionRestoration;
@@ -1089,53 +1270,53 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1089
1270
  value: function restoreRegistrationCallBack() {
1090
1271
  var _this7 = this;
1091
1272
  return /*#__PURE__*/function () {
1092
- 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) {
1093
1274
  var logContext, restore, finalError;
1094
- return _regenerator.default.wrap(function (_context19) {
1095
- while (1) switch (_context19.prev = _context19.next) {
1275
+ return _regenerator.default.wrap(function (_context21) {
1276
+ while (1) switch (_context21.prev = _context21.next) {
1096
1277
  case 0:
1097
1278
  logContext = {
1098
1279
  file: _constants2.REGISTRATION_FILE,
1099
1280
  method: caller
1100
1281
  };
1101
1282
  if (_this7.isRegRetry()) {
1102
- _context19.next = 4;
1283
+ _context21.next = 4;
1103
1284
  break;
1104
1285
  }
1105
1286
  _Logger.default.info('Registration restoration in progress.', logContext);
1106
1287
  restore = _this7.getExistingDevice(restoreData);
1107
1288
  if (!restore) {
1108
- _context19.next = 3;
1289
+ _context21.next = 3;
1109
1290
  break;
1110
1291
  }
1111
1292
  _this7.setRegRetry(true);
1112
- _context19.next = 1;
1293
+ _context21.next = 1;
1113
1294
  return _this7.deregister();
1114
1295
  case 1:
1115
- _context19.next = 2;
1296
+ _context21.next = 2;
1116
1297
  return _this7.restorePreviousRegistration(caller);
1117
1298
  case 2:
1118
- finalError = _context19.sent;
1299
+ finalError = _context21.sent;
1119
1300
  _this7.setRegRetry(false);
1120
1301
  if (_this7.isDeviceRegistered()) {
1121
1302
  _Logger.default.info('Registration restored successfully.', logContext);
1122
1303
  }
1123
- return _context19.abrupt("return", finalError);
1304
+ return _context21.abrupt("return", finalError);
1124
1305
  case 3:
1125
- _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1126
- _context19.next = 5;
1306
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1307
+ _context21.next = 5;
1127
1308
  break;
1128
1309
  case 4:
1129
- _this7.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1310
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1130
1311
  case 5:
1131
- return _context19.abrupt("return", false);
1312
+ return _context21.abrupt("return", false);
1132
1313
  case 6:
1133
1314
  case "end":
1134
- return _context19.stop();
1315
+ return _context21.stop();
1135
1316
  }
1136
- }, _callee19);
1317
+ }, _callee21);
1137
1318
  }));
1138
- return function (_x1, _x10) {
1319
+ return function (_x15, _x16) {
1139
1320
  return _ref1.apply(this, arguments);
1140
1321
  };
1141
1322
  }();
@@ -1148,39 +1329,51 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1148
1329
  }, {
1149
1330
  key: "triggerRegistration",
1150
1331
  value: (function () {
1151
- var _triggerRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20() {
1152
- var abort;
1153
- return _regenerator.default.wrap(function (_context20) {
1154
- 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) {
1155
1336
  case 0:
1156
- _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;
1157
1343
  return this.resumeFailover();
1158
1344
  case 1:
1159
- if (!_context20.sent) {
1160
- _context20.next = 2;
1345
+ if (!_context22.sent) {
1346
+ _context22.next = 2;
1161
1347
  break;
1162
1348
  }
1163
- return _context20.abrupt("return");
1349
+ _Logger.default.info('Registration trigger handled by resumeFailover path', loggerContext);
1350
+ return _context22.abrupt("return");
1164
1351
  case 2:
1165
1352
  if (!(this.primaryMobiusUris.length > 0)) {
1166
- _context20.next = 4;
1353
+ _context22.next = 5;
1167
1354
  break;
1168
1355
  }
1169
- _context20.next = 3;
1356
+ _context22.next = 3;
1170
1357
  return this.attemptRegistrationWithServers(_constants2.REGISTRATION_UTIL, this.primaryMobiusUris);
1171
1358
  case 3:
1172
- abort = _context20.sent;
1359
+ abort = _context22.sent;
1173
1360
  if (!(!this.isDeviceRegistered() && !abort)) {
1174
- _context20.next = 4;
1361
+ _context22.next = 4;
1175
1362
  break;
1176
1363
  }
1177
- _context20.next = 4;
1364
+ _context22.next = 4;
1178
1365
  return this.startFailoverTimer();
1179
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:
1180
1373
  case "end":
1181
- return _context20.stop();
1374
+ return _context22.stop();
1182
1375
  }
1183
- }, _callee20, this);
1376
+ }, _callee22, this);
1184
1377
  }));
1185
1378
  function triggerRegistration() {
1186
1379
  return _triggerRegistration.apply(this, arguments);
@@ -1199,160 +1392,199 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1199
1392
  }, {
1200
1393
  key: "attemptRegistrationWithServers",
1201
1394
  value: (function () {
1202
- 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) {
1203
1396
  var _this8 = this;
1204
1397
  var servers,
1398
+ loggerContext,
1205
1399
  abort,
1400
+ connectedWebSocketUrl,
1206
1401
  _iterator2,
1207
1402
  _step2,
1208
1403
  _loop,
1209
1404
  _ret,
1210
- _args22 = arguments,
1211
- _t12;
1212
- return _regenerator.default.wrap(function (_context22) {
1213
- 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) {
1214
1409
  case 0:
1215
- 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
+ };
1216
1415
  abort = false;
1217
1416
  this.retryAfter = undefined;
1218
1417
  if (!this.failoverImmediately) {
1219
- _context22.next = 1;
1418
+ _context24.next = 1;
1220
1419
  break;
1221
1420
  }
1222
- return _context22.abrupt("return", abort);
1421
+ return _context24.abrupt("return", abort);
1223
1422
  case 1:
1224
1423
  if (!this.isDeviceRegistered()) {
1225
- _context22.next = 2;
1424
+ _context24.next = 2;
1226
1425
  break;
1227
1426
  }
1228
- _Logger.default.info("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), {
1229
- file: _constants2.REGISTRATION_FILE,
1230
- method: _constants2.REGISTER_UTIL
1231
- });
1232
- 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);
1233
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
+ }
1234
1440
  _iterator2 = _createForOfIteratorHelper(servers);
1235
- _context22.prev = 3;
1441
+ _context24.prev = 3;
1236
1442
  _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
1237
- var _this8$backupMobiusUr;
1238
- var url, serverType, _this8$deviceInfo$dev, _resp$headers, _resp$headers$trackin, _resp$headers2, _this8$deviceInfo$dev2, resp, body, _t11;
1239
- return _regenerator.default.wrap(function (_context21) {
1240
- 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) {
1241
1446
  case 0:
1242
1447
  url = _step2.value;
1243
- serverType = _this8.primaryMobiusUris.includes(url) && 'PRIMARY' || ((_this8$backupMobiusUr = _this8.backupMobiusUris) === null || _this8$backupMobiusUr === void 0 ? void 0 : _this8$backupMobiusUr.includes(url)) && 'BACKUP' || 'UNKNOWN';
1244
- _context21.prev = 1;
1448
+ serverType = _this8.getServerType(url);
1449
+ _context23.prev = 1;
1245
1450
  abort = false;
1246
- _this8.registrationStatus = _types2.RegistrationStatus.INACTIVE;
1247
- _this8.lineEmitter(_types3.LINE_EVENTS.CONNECTING);
1248
- _Logger.default.info("[".concat(caller, "] : Mobius url to contact: ").concat(url), {
1249
- file: _constants2.REGISTRATION_FILE,
1250
- method: _constants2.REGISTER_UTIL
1251
- });
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
+
1252
1461
  // eslint-disable-next-line no-await-in-loop
1253
- _context21.next = 2;
1254
- return _this8.postRegistration(url);
1462
+ _context23.next = 2;
1463
+ return _this8.apiRequest.connectToMobiusSocket(wssNormalizedUrl);
1255
1464
  case 2:
1256
- 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;
1257
1473
  _this8.clearFailoverState();
1258
1474
  _this8.deviceInfo = resp.body;
1259
- _this8.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1260
- _this8.setActiveMobiusUrl(url);
1261
- _this8.lineEmitter(_types3.LINE_EVENTS.REGISTERED, resp.body);
1262
- _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), {
1263
- file: _constants2.REGISTRATION_FILE,
1264
- method: _constants2.METHODS.REGISTER
1265
- });
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);
1266
1479
  _this8.setIntervalValues(_this8.deviceInfo);
1267
1480
  _this8.metricManager.setDeviceInfo(_this8.deviceInfo);
1268
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);
1269
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);
1270
1483
  _this8.initiateFailback();
1271
- return _context21.abrupt("return", 0);
1272
- case 3:
1273
- _context21.prev = 3;
1274
- _t11 = _context21["catch"](1);
1275
- body = _t11; // eslint-disable-next-line no-await-in-loop, @typescript-eslint/no-unused-vars
1276
- _context21.next = 4;
1277
- 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) {
1278
1491
  var _body$headers$trackin, _body$headers;
1279
- if (finalError) {
1280
- _this8.lineEmitter(_types3.LINE_EVENTS.ERROR, undefined, clientError);
1492
+ if (isFinalError) {
1493
+ _this8.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
1281
1494
  } else {
1282
- _this8.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1495
+ _this8.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1283
1496
  }
1284
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);
1285
1498
  }, {
1286
1499
  method: caller,
1287
1500
  file: _constants2.REGISTRATION_FILE
1288
- }, function (retryAfter, retryCaller) {
1289
- return _this8.handle429Retry(retryAfter, retryCaller);
1290
- }, _this8.restoreRegistrationCallBack());
1291
- case 4:
1292
- abort = _context21.sent;
1293
- if (!(_this8.registrationStatus === _types2.RegistrationStatus.ACTIVE)) {
1294
- _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;
1295
1514
  break;
1296
1515
  }
1297
- _Logger.default.info("[".concat(caller, "] : Device is already restored, active mobius url: ").concat(_this8.activeMobiusUrl), {
1298
- file: _constants2.REGISTRATION_FILE,
1299
- 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)'
1300
1531
  });
1301
- return _context21.abrupt("return", 0);
1302
- 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:
1303
1535
  if (!abort) {
1304
- _context21.next = 7;
1536
+ _context23.next = 11;
1305
1537
  break;
1306
1538
  }
1307
- _this8.setStatus(_types2.RegistrationStatus.INACTIVE);
1539
+ _this8.setStatus(_types3.RegistrationStatus.INACTIVE);
1308
1540
  // eslint-disable-next-line no-await-in-loop
1309
- _context21.next = 6;
1541
+ _context23.next = 10;
1310
1542
  return (0, _common.uploadLogs)();
1311
- case 6:
1312
- return _context21.abrupt("return", 0);
1313
- case 7:
1543
+ case 10:
1544
+ return _context23.abrupt("return", 0);
1545
+ case 11:
1314
1546
  case "end":
1315
- return _context21.stop();
1547
+ return _context23.stop();
1316
1548
  }
1317
- }, _loop, null, [[1, 3]]);
1549
+ }, _loop, null, [[1, 5]]);
1318
1550
  });
1319
1551
  _iterator2.s();
1320
1552
  case 4:
1321
1553
  if ((_step2 = _iterator2.n()).done) {
1322
- _context22.next = 7;
1554
+ _context24.next = 7;
1323
1555
  break;
1324
1556
  }
1325
- return _context22.delegateYield(_loop(), "t0", 5);
1557
+ return _context24.delegateYield(_loop(), "t0", 5);
1326
1558
  case 5:
1327
- _ret = _context22.t0;
1559
+ _ret = _context24.t0;
1328
1560
  if (!(_ret === 0)) {
1329
- _context22.next = 6;
1561
+ _context24.next = 6;
1330
1562
  break;
1331
1563
  }
1332
- return _context22.abrupt("continue", 7);
1564
+ return _context24.abrupt("continue", 7);
1333
1565
  case 6:
1334
- _context22.next = 4;
1566
+ _context24.next = 4;
1335
1567
  break;
1336
1568
  case 7:
1337
- _context22.next = 9;
1569
+ _context24.next = 9;
1338
1570
  break;
1339
1571
  case 8:
1340
- _context22.prev = 8;
1341
- _t12 = _context22["catch"](3);
1342
- _iterator2.e(_t12);
1572
+ _context24.prev = 8;
1573
+ _t6 = _context24["catch"](3);
1574
+ _iterator2.e(_t6);
1343
1575
  case 9:
1344
- _context22.prev = 9;
1576
+ _context24.prev = 9;
1345
1577
  _iterator2.f();
1346
- return _context22.finish(9);
1578
+ return _context24.finish(9);
1347
1579
  case 10:
1348
- return _context22.abrupt("return", abort);
1580
+ return _context24.abrupt("return", abort);
1349
1581
  case 11:
1350
1582
  case "end":
1351
- return _context22.stop();
1583
+ return _context24.stop();
1352
1584
  }
1353
- }, _callee21, this, [[3, 8, 9, 10]]);
1585
+ }, _callee23, this, [[3, 8, 9, 10]]);
1354
1586
  }));
1355
- function attemptRegistrationWithServers(_x11) {
1587
+ function attemptRegistrationWithServers(_x17) {
1356
1588
  return _attemptRegistrationWithServers.apply(this, arguments);
1357
1589
  }
1358
1590
  return attemptRegistrationWithServers;
@@ -1365,132 +1597,168 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1365
1597
  }, {
1366
1598
  key: "startKeepaliveTimer",
1367
1599
  value: (function () {
1368
- 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) {
1369
1601
  var _this9 = this;
1370
1602
  var RETRY_COUNT_THRESHOLD;
1371
- return _regenerator.default.wrap(function (_context25) {
1372
- while (1) switch (_context25.prev = _context25.next) {
1603
+ return _regenerator.default.wrap(function (_context27) {
1604
+ while (1) switch (_context27.prev = _context27.next) {
1373
1605
  case 0:
1374
1606
  this.clearKeepaliveTimer();
1375
1607
  RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;
1376
- _context25.next = 1;
1377
- return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23() {
1378
- var accessToken, blob, blobUrl;
1379
- return _regenerator.default.wrap(function (_context24) {
1380
- 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) {
1381
1613
  case 0:
1382
- if (!_this9.isDeviceRegistered()) {
1383
- _context24.next = 2;
1384
- break;
1385
- }
1386
- _context24.next = 1;
1387
- return _this9.webex.credentials.getUserToken();
1388
- case 1:
1389
- accessToken = _context24.sent;
1390
- if (!_this9.webWorker) {
1391
- blob = new Blob([_webWorkerStr.default], {
1392
- type: 'application/javascript'
1393
- });
1394
- blobUrl = URL.createObjectURL(blob);
1395
- _this9.webWorker = new Worker(blobUrl);
1396
- URL.revokeObjectURL(blobUrl);
1397
- _this9.webWorker.postMessage({
1398
- type: _types2.WorkerMessageType.START_KEEPALIVE,
1399
- accessToken: String(accessToken),
1400
- deviceUrl: String(_this9.webex.internal.device.url),
1401
- interval: interval,
1402
- retryCountThreshold: RETRY_COUNT_THRESHOLD,
1403
- url: url
1404
- });
1405
- _this9.webWorker.onmessage = /*#__PURE__*/function () {
1406
- var _ref11 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22(event) {
1407
- var logContext, error, abort;
1408
- return _regenerator.default.wrap(function (_context23) {
1409
- while (1) switch (_context23.prev = _context23.next) {
1410
- case 0:
1411
- logContext = {
1412
- file: _constants2.REGISTRATION_FILE,
1413
- method: _constants2.KEEPALIVE_UTIL
1414
- };
1415
- if (event.data.type === _types2.WorkerMessageType.KEEPALIVE_SUCCESS) {
1416
- _Logger.default.info("Sent Keepalive, status: ".concat(event.data.statusCode), logContext);
1417
- _this9.lineEmitter(_types3.LINE_EVENTS.RECONNECTED);
1418
- }
1419
- if (!(event.data.type === _types2.WorkerMessageType.KEEPALIVE_FAILURE)) {
1420
- _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;
1421
1651
  break;
1422
- }
1423
- error = event.data.err;
1424
- _Logger.default.warn("Keep-alive missed ".concat(event.data.keepAliveRetryCount, " times. Status -> ").concat(error.statusCode, " "), logContext);
1425
- _context23.next = 1;
1426
- return (0, _common.handleRegistrationErrors)(error, function (clientError, finalError) {
1427
- var _error$headers$tracki, _error$headers;
1428
- if (finalError) {
1429
- _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);
1430
1672
  }
1431
- _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);
1432
- }, {
1433
- method: _constants2.KEEPALIVE_UTIL,
1434
- file: _constants2.REGISTRATION_FILE
1435
- }, function (retryAfter, retryCaller) {
1436
- return _this9.handle429Retry(retryAfter, retryCaller);
1437
- });
1438
- case 1:
1439
- abort = _context23.sent;
1440
- if (!(abort || event.data.keepAliveRetryCount >= RETRY_COUNT_THRESHOLD)) {
1441
- _context23.next = 6;
1673
+ if (!(event.data.type === _types3.WorkerMessageType.KEEPALIVE_FAILURE)) {
1674
+ _context25.next = 12;
1675
+ break;
1676
+ }
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;
1442
1727
  break;
1443
- }
1444
- _this9.failoverImmediately = _this9.isCCFlow;
1445
- _this9.setStatus(_types2.RegistrationStatus.INACTIVE);
1446
- _this9.clearKeepaliveTimer();
1447
- _this9.clearFailbackTimer();
1448
- _this9.lineEmitter(_types3.LINE_EVENTS.UNREGISTERED);
1449
- _context23.next = 2;
1450
- return (0, _common.uploadLogs)();
1451
- case 2:
1452
- if (abort) {
1453
- _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;
1454
1734
  break;
1455
- }
1456
- _context23.next = 3;
1457
- return _this9.reconnectOnFailure(_constants2.RECONNECT_ON_FAILURE_UTIL);
1458
- case 3:
1459
- _context23.next = 5;
1460
- break;
1461
- case 4:
1462
- if (error.statusCode === 404) {
1463
- _this9.handle404KeepaliveFailure(_constants2.KEEPALIVE_UTIL);
1464
- }
1465
- case 5:
1466
- _context23.next = 7;
1467
- break;
1468
- case 6:
1469
- _this9.lineEmitter(_types3.LINE_EVENTS.RECONNECTING);
1470
- case 7:
1471
- case "end":
1472
- return _context23.stop();
1473
- }
1474
- }, _callee22);
1475
- }));
1476
- return function (_x15) {
1477
- return _ref11.apply(this, arguments);
1478
- };
1479
- }();
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
+ }
1480
1748
  }
1481
- case 2:
1749
+ case 1:
1482
1750
  case "end":
1483
- return _context24.stop();
1751
+ return _context26.stop();
1484
1752
  }
1485
- }, _callee23);
1753
+ }, _callee25);
1486
1754
  })));
1487
1755
  case 1:
1488
1756
  case "end":
1489
- return _context25.stop();
1757
+ return _context27.stop();
1490
1758
  }
1491
- }, _callee24, this);
1759
+ }, _callee26, this);
1492
1760
  }));
1493
- function startKeepaliveTimer(_x12, _x13, _x14) {
1761
+ function startKeepaliveTimer(_x18, _x19, _x20) {
1494
1762
  return _startKeepaliveTimer.apply(this, arguments);
1495
1763
  }
1496
1764
  return startKeepaliveTimer;
@@ -1504,7 +1772,7 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1504
1772
  value: function clearKeepaliveTimer() {
1505
1773
  if (this.webWorker) {
1506
1774
  this.webWorker.postMessage({
1507
- type: _types2.WorkerMessageType.CLEAR_KEEPALIVE
1775
+ type: _types3.WorkerMessageType.CLEAR_KEEPALIVE
1508
1776
  });
1509
1777
  this.webWorker.terminate();
1510
1778
  this.webWorker = undefined;
@@ -1518,37 +1786,54 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1518
1786
  }, {
1519
1787
  key: "deregister",
1520
1788
  value: function () {
1521
- var _deregister = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
1522
- var _this$deviceInfo$devi, _this$deviceInfo$devi2, _t13;
1523
- return _regenerator.default.wrap(function (_context26) {
1524
- 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) {
1525
1798
  case 0:
1526
- _context26.prev = 0;
1527
- _context26.next = 1;
1528
- 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);
1529
- case 1:
1530
- _Logger.default.log('Registration successfully deregistered', {
1799
+ closeMobiusWss = _args28.length > 0 && _args28[0] !== undefined ? _args28[0] : false;
1800
+ loggerContext = {
1531
1801
  file: _constants2.REGISTRATION_FILE,
1532
1802
  method: _constants2.METHODS.DEREGISTER
1533
- });
1534
- _context26.next = 3;
1535
- 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);
1536
1808
  case 2:
1537
- _context26.prev = 2;
1538
- _t13 = _context26["catch"](0);
1539
- _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t13)), {
1540
- file: _constants2.REGISTRATION_FILE,
1541
- method: _constants2.METHODS.DEREGISTER
1542
- });
1809
+ _Logger.default.log('Registration successfully deregistered', loggerContext);
1810
+ _context28.next = 4;
1811
+ break;
1543
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:
1544
1829
  this.clearKeepaliveTimer();
1545
- this.setStatus(_types2.RegistrationStatus.INACTIVE);
1830
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
1546
1831
  this.clearFailoverState();
1547
- case 4:
1832
+ case 7:
1548
1833
  case "end":
1549
- return _context26.stop();
1834
+ return _context28.stop();
1550
1835
  }
1551
- }, _callee25, this, [[0, 2]]);
1836
+ }, _callee27, this, [[1, 3]]);
1552
1837
  }));
1553
1838
  function deregister() {
1554
1839
  return _deregister.apply(this, arguments);
@@ -1593,8 +1878,12 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1593
1878
  };
1594
1879
  var stringToReplace = "".concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(restoreData.devices[0].deviceId);
1595
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
+ }
1596
1885
  this.setActiveMobiusUrl(uri);
1597
- this.registrationStatus = _types2.RegistrationStatus.ACTIVE;
1886
+ this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
1598
1887
  return true;
1599
1888
  }
1600
1889
  return false;
@@ -1612,10 +1901,10 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1612
1901
  }, {
1613
1902
  key: "reconnectOnFailure",
1614
1903
  value: (function () {
1615
- 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) {
1616
1905
  var abort;
1617
- return _regenerator.default.wrap(function (_context27) {
1618
- while (1) switch (_context27.prev = _context27.next) {
1906
+ return _regenerator.default.wrap(function (_context29) {
1907
+ while (1) switch (_context29.prev = _context29.next) {
1619
1908
  case 0:
1620
1909
  _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1621
1910
  method: _constants2.METHODS.RECONNECT_ON_FAILURE,
@@ -1623,25 +1912,25 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1623
1912
  });
1624
1913
  this.reconnectPending = false;
1625
1914
  if (this.isDeviceRegistered()) {
1626
- _context27.next = 4;
1915
+ _context29.next = 4;
1627
1916
  break;
1628
1917
  }
1629
1918
  if (!((0, _keys.default)(this.callManager.getActiveCalls()).length === 0)) {
1630
- _context27.next = 3;
1919
+ _context29.next = 3;
1631
1920
  break;
1632
1921
  }
1633
- _context27.next = 1;
1922
+ _context29.next = 1;
1634
1923
  return this.restorePreviousRegistration(caller);
1635
1924
  case 1:
1636
- abort = _context27.sent;
1925
+ abort = _context29.sent;
1637
1926
  if (!(!abort && !this.isDeviceRegistered())) {
1638
- _context27.next = 2;
1927
+ _context29.next = 2;
1639
1928
  break;
1640
1929
  }
1641
- _context27.next = 2;
1930
+ _context29.next = 2;
1642
1931
  return this.restartRegistration(caller);
1643
1932
  case 2:
1644
- _context27.next = 4;
1933
+ _context29.next = 4;
1645
1934
  break;
1646
1935
  case 3:
1647
1936
  this.reconnectPending = true;
@@ -1651,14 +1940,134 @@ var Registration = exports.Registration = /*#__PURE__*/function () {
1651
1940
  });
1652
1941
  case 4:
1653
1942
  case "end":
1654
- return _context27.stop();
1943
+ return _context29.stop();
1655
1944
  }
1656
- }, _callee26, this);
1945
+ }, _callee28, this);
1657
1946
  }));
1658
- function reconnectOnFailure(_x16) {
1947
+ function reconnectOnFailure(_x22) {
1659
1948
  return _reconnectOnFailure.apply(this, arguments);
1660
1949
  }
1661
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;
1662
2071
  }())
1663
2072
  }]);
1664
2073
  }();