@webex/calling 3.11.0 → 3.12.0-llmrefactor.2

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 (372) hide show
  1. package/dist/CallHistory/CallHistory.js +596 -0
  2. package/dist/CallHistory/CallHistory.js.map +1 -0
  3. package/dist/CallHistory/CallHistory.test.js +916 -0
  4. package/dist/CallHistory/CallHistory.test.js.map +1 -0
  5. package/dist/CallHistory/callHistoryFixtures.js +650 -0
  6. package/dist/CallHistory/callHistoryFixtures.js.map +1 -0
  7. package/dist/CallHistory/constants.js +38 -0
  8. package/dist/CallHistory/constants.js.map +1 -0
  9. package/dist/CallHistory/types.js +7 -0
  10. package/dist/CallHistory/types.js.map +1 -0
  11. package/dist/CallRecording/CallRecording.js +160 -0
  12. package/dist/CallRecording/CallRecording.js.map +1 -0
  13. package/dist/CallRecording/CallRecording.test.js +257 -0
  14. package/dist/CallRecording/CallRecording.test.js.map +1 -0
  15. package/dist/CallRecording/WxcCallRecordingConnector.js +577 -0
  16. package/dist/CallRecording/WxcCallRecordingConnector.js.map +1 -0
  17. package/dist/CallRecording/WxcCallRecordingConnector.test.js +652 -0
  18. package/dist/CallRecording/WxcCallRecordingConnector.test.js.map +1 -0
  19. package/dist/CallRecording/callRecordingFixtures.js +235 -0
  20. package/dist/CallRecording/callRecordingFixtures.js.map +1 -0
  21. package/dist/CallRecording/constants.js +50 -0
  22. package/dist/CallRecording/constants.js.map +1 -0
  23. package/dist/CallRecording/types.js +137 -0
  24. package/dist/CallRecording/types.js.map +1 -0
  25. package/dist/CallRecording/utils.js +42 -0
  26. package/dist/CallRecording/utils.js.map +1 -0
  27. package/dist/CallRecording/utils.test.js +97 -0
  28. package/dist/CallRecording/utils.test.js.map +1 -0
  29. package/dist/CallSettings/CallSettings.js +311 -0
  30. package/dist/CallSettings/CallSettings.js.map +1 -0
  31. package/dist/CallSettings/CallSettings.test.js +122 -0
  32. package/dist/CallSettings/CallSettings.test.js.map +1 -0
  33. package/dist/CallSettings/UcmBackendConnector.js +308 -0
  34. package/dist/CallSettings/UcmBackendConnector.js.map +1 -0
  35. package/dist/CallSettings/UcmBackendConnector.test.js +411 -0
  36. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -0
  37. package/dist/CallSettings/WxCallBackendConnector.js +597 -0
  38. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -0
  39. package/dist/CallSettings/WxCallBackendConnector.test.js +904 -0
  40. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -0
  41. package/dist/CallSettings/constants.js +31 -0
  42. package/dist/CallSettings/constants.js.map +1 -0
  43. package/dist/CallSettings/testFixtures.js +68 -0
  44. package/dist/CallSettings/testFixtures.js.map +1 -0
  45. package/dist/CallSettings/types.js +7 -0
  46. package/dist/CallSettings/types.js.map +1 -0
  47. package/dist/CallingClient/CallingClient.js +1349 -0
  48. package/dist/CallingClient/CallingClient.js.map +1 -0
  49. package/dist/CallingClient/CallingClient.test.js +1625 -0
  50. package/dist/CallingClient/CallingClient.test.js.map +1 -0
  51. package/dist/CallingClient/callRecordFixtures.js +101 -0
  52. package/dist/CallingClient/callRecordFixtures.js.map +1 -0
  53. package/dist/CallingClient/calling/CallerId/index.js +275 -0
  54. package/dist/CallingClient/calling/CallerId/index.js.map +1 -0
  55. package/dist/CallingClient/calling/CallerId/index.test.js +275 -0
  56. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -0
  57. package/dist/CallingClient/calling/CallerId/types.js +7 -0
  58. package/dist/CallingClient/calling/CallerId/types.js.map +1 -0
  59. package/dist/CallingClient/calling/call.js +3666 -0
  60. package/dist/CallingClient/calling/call.js.map +1 -0
  61. package/dist/CallingClient/calling/call.test.js +3970 -0
  62. package/dist/CallingClient/calling/call.test.js.map +1 -0
  63. package/dist/CallingClient/calling/callManager.js +531 -0
  64. package/dist/CallingClient/calling/callManager.js.map +1 -0
  65. package/dist/CallingClient/calling/callManager.test.js +881 -0
  66. package/dist/CallingClient/calling/callManager.test.js.map +1 -0
  67. package/dist/CallingClient/calling/index.js +30 -0
  68. package/dist/CallingClient/calling/index.js.map +1 -0
  69. package/dist/CallingClient/calling/types.js +79 -0
  70. package/dist/CallingClient/calling/types.js.map +1 -0
  71. package/dist/CallingClient/callingClientFixtures.js +143 -0
  72. package/dist/CallingClient/callingClientFixtures.js.map +1 -0
  73. package/dist/CallingClient/constants.js +272 -0
  74. package/dist/CallingClient/constants.js.map +1 -0
  75. package/dist/CallingClient/line/index.js +339 -0
  76. package/dist/CallingClient/line/index.js.map +1 -0
  77. package/dist/CallingClient/line/line.test.js +379 -0
  78. package/dist/CallingClient/line/line.test.js.map +1 -0
  79. package/dist/CallingClient/line/types.js +21 -0
  80. package/dist/CallingClient/line/types.js.map +1 -0
  81. package/dist/CallingClient/registration/index.js +19 -0
  82. package/dist/CallingClient/registration/index.js.map +1 -0
  83. package/dist/CallingClient/registration/register.js +2079 -0
  84. package/dist/CallingClient/registration/register.js.map +1 -0
  85. package/dist/CallingClient/registration/register.test.js +2476 -0
  86. package/dist/CallingClient/registration/register.test.js.map +1 -0
  87. package/dist/CallingClient/registration/registerFixtures.js +36 -0
  88. package/dist/CallingClient/registration/registerFixtures.js.map +1 -0
  89. package/dist/CallingClient/registration/types.js +33 -0
  90. package/dist/CallingClient/registration/types.js.map +1 -0
  91. package/dist/CallingClient/registration/webWorker.js +67 -0
  92. package/dist/CallingClient/registration/webWorker.js.map +1 -0
  93. package/dist/CallingClient/registration/webWorker.test.js +189 -0
  94. package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
  95. package/dist/CallingClient/registration/webWorkerStr.js +15 -0
  96. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
  97. package/dist/CallingClient/types.js +14 -0
  98. package/dist/CallingClient/types.js.map +1 -0
  99. package/dist/CallingClient/utils/constants.js +58 -0
  100. package/dist/CallingClient/utils/constants.js.map +1 -0
  101. package/dist/CallingClient/utils/index.js +63 -0
  102. package/dist/CallingClient/utils/index.js.map +1 -0
  103. package/dist/CallingClient/utils/mobiusSocketMapper.js +122 -0
  104. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  105. package/dist/CallingClient/utils/mobiusSocketMapper.test.js +221 -0
  106. package/dist/CallingClient/utils/mobiusSocketMapper.test.js.map +1 -0
  107. package/dist/CallingClient/utils/request.js +435 -0
  108. package/dist/CallingClient/utils/request.js.map +1 -0
  109. package/dist/CallingClient/utils/request.test.js +999 -0
  110. package/dist/CallingClient/utils/request.test.js.map +1 -0
  111. package/dist/CallingClient/utils/types.js +7 -0
  112. package/dist/CallingClient/utils/types.js.map +1 -0
  113. package/dist/CallingClient/utils/wsFeatureFlag.js +70 -0
  114. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  115. package/dist/CallingClient/utils/wsFeatureFlag.test.js +139 -0
  116. package/dist/CallingClient/utils/wsFeatureFlag.test.js.map +1 -0
  117. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +142 -0
  118. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -0
  119. package/dist/Contacts/ContactsClient.js +1208 -0
  120. package/dist/Contacts/ContactsClient.js.map +1 -0
  121. package/dist/Contacts/ContactsClient.test.js +999 -0
  122. package/dist/Contacts/ContactsClient.test.js.map +1 -0
  123. package/dist/Contacts/constants.js +40 -0
  124. package/dist/Contacts/constants.js.map +1 -0
  125. package/dist/Contacts/contactFixtures.js +430 -0
  126. package/dist/Contacts/contactFixtures.js.map +1 -0
  127. package/dist/Contacts/types.js +43 -0
  128. package/dist/Contacts/types.js.map +1 -0
  129. package/dist/Errors/catalog/CallError.js +89 -0
  130. package/dist/Errors/catalog/CallError.js.map +1 -0
  131. package/dist/Errors/catalog/CallingDeviceError.js +83 -0
  132. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -0
  133. package/dist/Errors/catalog/ExtendedError.js +42 -0
  134. package/dist/Errors/catalog/ExtendedError.js.map +1 -0
  135. package/dist/Errors/catalog/LineError.js +85 -0
  136. package/dist/Errors/catalog/LineError.js.map +1 -0
  137. package/dist/Errors/index.js +28 -0
  138. package/dist/Errors/index.js.map +1 -0
  139. package/dist/Errors/types.js +61 -0
  140. package/dist/Errors/types.js.map +1 -0
  141. package/dist/Events/impl/index.js +79 -0
  142. package/dist/Events/impl/index.js.map +1 -0
  143. package/dist/Events/types.js +134 -0
  144. package/dist/Events/types.js.map +1 -0
  145. package/dist/Logger/index.js +228 -0
  146. package/dist/Logger/index.js.map +1 -0
  147. package/dist/Logger/index.test.js +87 -0
  148. package/dist/Logger/index.test.js.map +1 -0
  149. package/dist/Logger/types.js +34 -0
  150. package/dist/Logger/types.js.map +1 -0
  151. package/dist/Metrics/index.js +595 -0
  152. package/dist/Metrics/index.js.map +1 -0
  153. package/dist/Metrics/index.test.js +819 -0
  154. package/dist/Metrics/index.test.js.map +1 -0
  155. package/dist/Metrics/types.js +82 -0
  156. package/dist/Metrics/types.js.map +1 -0
  157. package/dist/SDKConnector/index.js +102 -0
  158. package/dist/SDKConnector/index.js.map +1 -0
  159. package/dist/SDKConnector/index.test.js +9 -0
  160. package/dist/SDKConnector/index.test.js.map +1 -0
  161. package/dist/SDKConnector/types.js +7 -0
  162. package/dist/SDKConnector/types.js.map +1 -0
  163. package/dist/SDKConnector/utils.js +39 -0
  164. package/dist/SDKConnector/utils.js.map +1 -0
  165. package/dist/SDKConnector/utils.test.js +9 -0
  166. package/dist/SDKConnector/utils.test.js.map +1 -0
  167. package/dist/Voicemail/BroadworksBackendConnector.js +699 -0
  168. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -0
  169. package/dist/Voicemail/BroadworksBackendConnector.test.js +820 -0
  170. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -0
  171. package/dist/Voicemail/UcmBackendConnector.js +628 -0
  172. package/dist/Voicemail/UcmBackendConnector.js.map +1 -0
  173. package/dist/Voicemail/UcmBackendConnector.test.js +738 -0
  174. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -0
  175. package/dist/Voicemail/Voicemail.js +472 -0
  176. package/dist/Voicemail/Voicemail.js.map +1 -0
  177. package/dist/Voicemail/Voicemail.test.js +391 -0
  178. package/dist/Voicemail/Voicemail.test.js.map +1 -0
  179. package/dist/Voicemail/WxCallBackendConnector.js +657 -0
  180. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -0
  181. package/dist/Voicemail/WxCallBackendConnector.test.js +1225 -0
  182. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -0
  183. package/dist/Voicemail/constants.js +61 -0
  184. package/dist/Voicemail/constants.js.map +1 -0
  185. package/dist/Voicemail/types.js +7 -0
  186. package/dist/Voicemail/types.js.map +1 -0
  187. package/dist/Voicemail/voicemailFixture.js +524 -0
  188. package/dist/Voicemail/voicemailFixture.js.map +1 -0
  189. package/dist/api.js +213 -0
  190. package/dist/api.js.map +1 -0
  191. package/dist/common/Utils.js +1624 -0
  192. package/dist/common/Utils.js.map +1 -0
  193. package/dist/common/Utils.test.js +2225 -0
  194. package/dist/common/Utils.test.js.map +1 -0
  195. package/dist/common/constants.js +62 -0
  196. package/dist/common/constants.js.map +1 -0
  197. package/dist/common/index.js +19 -0
  198. package/dist/common/index.js.map +1 -0
  199. package/dist/common/testUtil.js +988 -0
  200. package/dist/common/testUtil.js.map +1 -0
  201. package/dist/common/types.js +78 -0
  202. package/dist/common/types.js.map +1 -0
  203. package/dist/index.js +452 -0
  204. package/dist/index.js.map +1 -0
  205. package/dist/mobius-socket/config.js +24 -0
  206. package/dist/mobius-socket/config.js.map +1 -0
  207. package/dist/mobius-socket/errors.js +143 -0
  208. package/dist/mobius-socket/errors.js.map +1 -0
  209. package/dist/mobius-socket/errors.test.js +20 -0
  210. package/dist/mobius-socket/errors.test.js.map +1 -0
  211. package/dist/mobius-socket/index.js +57 -0
  212. package/dist/mobius-socket/index.js.map +1 -0
  213. package/dist/mobius-socket/mobius-socket-events.test.js +492 -0
  214. package/dist/mobius-socket/mobius-socket-events.test.js.map +1 -0
  215. package/dist/mobius-socket/mobius-socket.js +849 -0
  216. package/dist/mobius-socket/mobius-socket.js.map +1 -0
  217. package/dist/mobius-socket/mobius-socket.test.js +1898 -0
  218. package/dist/mobius-socket/mobius-socket.test.js.map +1 -0
  219. package/dist/mobius-socket/socket/constants.js +55 -0
  220. package/dist/mobius-socket/socket/constants.js.map +1 -0
  221. package/dist/mobius-socket/socket/index.js +15 -0
  222. package/dist/mobius-socket/socket/index.js.map +1 -0
  223. package/dist/mobius-socket/socket/socket-base.js +604 -0
  224. package/dist/mobius-socket/socket/socket-base.js.map +1 -0
  225. package/dist/mobius-socket/socket/socket.js +19 -0
  226. package/dist/mobius-socket/socket/socket.js.map +1 -0
  227. package/dist/mobius-socket/socket/socket.shim.js +26 -0
  228. package/dist/mobius-socket/socket/socket.shim.js.map +1 -0
  229. package/dist/mobius-socket/socket/types.js +7 -0
  230. package/dist/mobius-socket/socket/types.js.map +1 -0
  231. package/dist/mobius-socket/socket.test.js +727 -0
  232. package/dist/mobius-socket/socket.test.js.map +1 -0
  233. package/dist/mobius-socket/test/mocha-helpers.js +23 -0
  234. package/dist/mobius-socket/test/mocha-helpers.js.map +1 -0
  235. package/dist/mobius-socket/test/promise-tick.js +28 -0
  236. package/dist/mobius-socket/test/promise-tick.js.map +1 -0
  237. package/dist/mobius-socket/types.js +7 -0
  238. package/dist/mobius-socket/types.js.map +1 -0
  239. package/dist/module/CallHistory/CallHistory.js +28 -17
  240. package/dist/module/CallRecording/CallRecording.js +56 -0
  241. package/dist/module/CallRecording/WxcCallRecordingConnector.js +257 -0
  242. package/dist/module/CallRecording/callRecordingFixtures.js +201 -0
  243. package/dist/module/CallRecording/constants.js +28 -0
  244. package/dist/module/CallRecording/types.js +19 -0
  245. package/dist/module/CallRecording/utils.js +14 -0
  246. package/dist/module/CallingClient/CallingClient.js +166 -8
  247. package/dist/module/CallingClient/calling/call.js +201 -68
  248. package/dist/module/CallingClient/calling/callManager.js +51 -11
  249. package/dist/module/CallingClient/calling/types.js +2 -0
  250. package/dist/module/CallingClient/constants.js +29 -0
  251. package/dist/module/CallingClient/line/index.js +4 -2
  252. package/dist/module/CallingClient/registration/register.js +274 -64
  253. package/dist/module/CallingClient/registration/types.js +5 -1
  254. package/dist/module/CallingClient/registration/webWorker.js +42 -61
  255. package/dist/module/CallingClient/registration/webWorkerStr.js +47 -82
  256. package/dist/module/CallingClient/utils/constants.js +36 -0
  257. package/dist/module/CallingClient/utils/index.js +5 -0
  258. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +72 -0
  259. package/dist/module/CallingClient/utils/request.js +211 -0
  260. package/dist/module/CallingClient/utils/types.js +1 -0
  261. package/dist/module/CallingClient/utils/wsFeatureFlag.js +41 -0
  262. package/dist/module/Contacts/ContactsClient.js +1 -1
  263. package/dist/module/Errors/types.js +2 -0
  264. package/dist/module/Events/types.js +23 -10
  265. package/dist/module/Metrics/index.js +48 -1
  266. package/dist/module/Metrics/types.js +18 -0
  267. package/dist/module/api.js +3 -2
  268. package/dist/module/common/Utils.js +85 -22
  269. package/dist/module/common/testUtil.js +6 -1
  270. package/dist/module/common/types.js +3 -0
  271. package/dist/module/index.js +7 -3
  272. package/dist/module/mobius-socket/config.js +15 -0
  273. package/dist/module/mobius-socket/errors.js +58 -0
  274. package/dist/module/mobius-socket/index.js +24 -0
  275. package/dist/module/mobius-socket/mobius-socket.js +593 -0
  276. package/dist/module/mobius-socket/socket/constants.js +26 -0
  277. package/dist/module/mobius-socket/socket/index.js +4 -0
  278. package/dist/module/mobius-socket/socket/socket-base.js +368 -0
  279. package/dist/module/mobius-socket/socket/socket.js +9 -0
  280. package/dist/module/mobius-socket/socket/socket.shim.js +12 -0
  281. package/dist/module/mobius-socket/socket/types.js +1 -0
  282. package/dist/module/mobius-socket/types.js +1 -0
  283. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  284. package/dist/types/CallRecording/CallRecording.d.ts +18 -0
  285. package/dist/types/CallRecording/CallRecording.d.ts.map +1 -0
  286. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts +23 -0
  287. package/dist/types/CallRecording/WxcCallRecordingConnector.d.ts.map +1 -0
  288. package/dist/types/CallRecording/callRecordingFixtures.d.ts +61 -0
  289. package/dist/types/CallRecording/callRecordingFixtures.d.ts.map +1 -0
  290. package/dist/types/CallRecording/constants.d.ts +29 -0
  291. package/dist/types/CallRecording/constants.d.ts.map +1 -0
  292. package/dist/types/CallRecording/types.d.ts +176 -0
  293. package/dist/types/CallRecording/types.d.ts.map +1 -0
  294. package/dist/types/CallRecording/utils.d.ts +3 -0
  295. package/dist/types/CallRecording/utils.d.ts.map +1 -0
  296. package/dist/types/CallingClient/CallingClient.d.ts +10 -1
  297. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  298. package/dist/types/CallingClient/calling/call.d.ts +17 -3
  299. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  300. package/dist/types/CallingClient/calling/callManager.d.ts +8 -4
  301. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  302. package/dist/types/CallingClient/calling/types.d.ts +38 -9
  303. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  304. package/dist/types/CallingClient/constants.d.ts +29 -0
  305. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  306. package/dist/types/CallingClient/line/index.d.ts +1 -1
  307. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  308. package/dist/types/CallingClient/registration/register.d.ts +10 -2
  309. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  310. package/dist/types/CallingClient/registration/types.d.ts +29 -3
  311. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  312. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  313. package/dist/types/CallingClient/registration/webWorkerStr.d.ts +1 -1
  314. package/dist/types/CallingClient/registration/webWorkerStr.d.ts.map +1 -1
  315. package/dist/types/CallingClient/types.d.ts +6 -3
  316. package/dist/types/CallingClient/types.d.ts.map +1 -1
  317. package/dist/types/CallingClient/utils/constants.d.ts +35 -0
  318. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  319. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  320. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  321. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +5 -0
  322. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  323. package/dist/types/CallingClient/utils/request.d.ts +28 -0
  324. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  325. package/dist/types/CallingClient/utils/types.d.ts +34 -0
  326. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  327. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  328. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  329. package/dist/types/Errors/types.d.ts +2 -0
  330. package/dist/types/Errors/types.d.ts.map +1 -1
  331. package/dist/types/Events/types.d.ts +80 -16
  332. package/dist/types/Events/types.d.ts.map +1 -1
  333. package/dist/types/Metrics/index.d.ts.map +1 -1
  334. package/dist/types/Metrics/types.d.ts +19 -2
  335. package/dist/types/Metrics/types.d.ts.map +1 -1
  336. package/dist/types/SDKConnector/types.d.ts +39 -12
  337. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  338. package/dist/types/api.d.ts +6 -4
  339. package/dist/types/api.d.ts.map +1 -1
  340. package/dist/types/common/Utils.d.ts +9 -4
  341. package/dist/types/common/Utils.d.ts.map +1 -1
  342. package/dist/types/common/testUtil.d.ts +5 -1
  343. package/dist/types/common/testUtil.d.ts.map +1 -1
  344. package/dist/types/common/types.d.ts +9 -1
  345. package/dist/types/common/types.d.ts.map +1 -1
  346. package/dist/types/index.d.ts +9 -4
  347. package/dist/types/index.d.ts.map +1 -1
  348. package/dist/types/mobius-socket/config.d.ts +17 -0
  349. package/dist/types/mobius-socket/config.d.ts.map +1 -0
  350. package/dist/types/mobius-socket/errors.d.ts +32 -0
  351. package/dist/types/mobius-socket/errors.d.ts.map +1 -0
  352. package/dist/types/mobius-socket/index.d.ts +14 -0
  353. package/dist/types/mobius-socket/index.d.ts.map +1 -0
  354. package/dist/types/mobius-socket/mobius-socket.d.ts +48 -0
  355. package/dist/types/mobius-socket/mobius-socket.d.ts.map +1 -0
  356. package/dist/types/mobius-socket/socket/constants.d.ts +27 -0
  357. package/dist/types/mobius-socket/socket/constants.d.ts.map +1 -0
  358. package/dist/types/mobius-socket/socket/index.d.ts +5 -0
  359. package/dist/types/mobius-socket/socket/index.d.ts.map +1 -0
  360. package/dist/types/mobius-socket/socket/socket-base.d.ts +43 -0
  361. package/dist/types/mobius-socket/socket/socket-base.d.ts.map +1 -0
  362. package/dist/types/mobius-socket/socket/socket.d.ts +6 -0
  363. package/dist/types/mobius-socket/socket/socket.d.ts.map +1 -0
  364. package/dist/types/mobius-socket/socket/socket.shim.d.ts +6 -0
  365. package/dist/types/mobius-socket/socket/socket.shim.d.ts.map +1 -0
  366. package/dist/types/mobius-socket/socket/types.d.ts +61 -0
  367. package/dist/types/mobius-socket/socket/types.d.ts.map +1 -0
  368. package/dist/types/mobius-socket/types.d.ts +21 -0
  369. package/dist/types/mobius-socket/types.d.ts.map +1 -0
  370. package/package.json +21 -5
  371. package/src/mobius-socket/socket/socket.shim.ts +22 -0
  372. package/src/mobius-socket/socket/socket.ts +14 -0
@@ -0,0 +1,2079 @@
1
+ "use strict";
2
+
3
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
5
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
6
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
7
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
8
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
9
+ var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");
10
+ var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");
11
+ var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");
12
+ var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");
13
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
14
+ _Object$defineProperty(exports, "__esModule", {
15
+ value: true
16
+ });
17
+ exports.createRegistration = exports.Registration = void 0;
18
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
19
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
20
+ var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
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"));
24
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
25
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
26
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
27
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
28
+ var _constants = require("../../common/constants");
29
+ var _common = require("../../common");
30
+ var _webWorkerStr = _interopRequireDefault(require("./webWorkerStr"));
31
+ var _types = require("../../Metrics/types");
32
+ var _Metrics = require("../../Metrics");
33
+ var _calling = require("../calling");
34
+ var _Logger = _interopRequireDefault(require("../../Logger"));
35
+ var _types2 = require("./types");
36
+ var _SDKConnector = _interopRequireDefault(require("../../SDKConnector"));
37
+ var _types3 = require("../../common/types");
38
+ var _constants2 = require("../constants");
39
+ var _types4 = require("../line/types");
40
+ var _request = require("../utils/request");
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; } } }; }
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; } }
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; }
44
+ function ownKeys(e, r) { var t = _Object$keys2(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
45
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
46
+ /**
47
+ *
48
+ */
49
+ var Registration = exports.Registration = /*#__PURE__*/function () {
50
+ /**
51
+ */
52
+ function Registration(webex, serviceData, mutex, lineEmitter, logLevel, jwe) {
53
+ (0, _classCallCheck2.default)(this, Registration);
54
+ (0, _defineProperty2.default)(this, "sdkConnector", void 0);
55
+ (0, _defineProperty2.default)(this, "webex", void 0);
56
+ (0, _defineProperty2.default)(this, "userId", '');
57
+ (0, _defineProperty2.default)(this, "serviceData", void 0);
58
+ (0, _defineProperty2.default)(this, "failback429RetryAttempts", void 0);
59
+ (0, _defineProperty2.default)(this, "registrationStatus", void 0);
60
+ (0, _defineProperty2.default)(this, "failbackTimer", void 0);
61
+ (0, _defineProperty2.default)(this, "activeMobiusUrl", void 0);
62
+ (0, _defineProperty2.default)(this, "rehomingIntervalMin", void 0);
63
+ (0, _defineProperty2.default)(this, "rehomingIntervalMax", void 0);
64
+ (0, _defineProperty2.default)(this, "mutex", void 0);
65
+ (0, _defineProperty2.default)(this, "metricManager", void 0);
66
+ (0, _defineProperty2.default)(this, "lineEmitter", void 0);
67
+ (0, _defineProperty2.default)(this, "callManager", void 0);
68
+ (0, _defineProperty2.default)(this, "deviceInfo", {});
69
+ (0, _defineProperty2.default)(this, "primaryMobiusUris", void 0);
70
+ (0, _defineProperty2.default)(this, "backupMobiusUris", void 0);
71
+ (0, _defineProperty2.default)(this, "registerRetry", false);
72
+ (0, _defineProperty2.default)(this, "reconnectPending", false);
73
+ (0, _defineProperty2.default)(this, "jwe", void 0);
74
+ (0, _defineProperty2.default)(this, "isCCFlow", false);
75
+ (0, _defineProperty2.default)(this, "failoverImmediately", false);
76
+ (0, _defineProperty2.default)(this, "retryAfter", void 0);
77
+ (0, _defineProperty2.default)(this, "scheduled429Retry", false);
78
+ (0, _defineProperty2.default)(this, "webWorker", void 0);
79
+ (0, _defineProperty2.default)(this, "apiRequest", void 0);
80
+ this.jwe = jwe;
81
+ this.sdkConnector = _SDKConnector.default;
82
+ this.serviceData = serviceData;
83
+ this.isCCFlow = serviceData.indicator === _types3.ServiceIndicator.CONTACT_CENTER;
84
+ if (!this.sdkConnector.getWebex()) {
85
+ _SDKConnector.default.setWebex(webex);
86
+ }
87
+ this.webex = this.sdkConnector.getWebex();
88
+ this.userId = this.webex.internal.device.userId;
89
+ this.registrationStatus = _types3.RegistrationStatus.IDLE;
90
+ this.failback429RetryAttempts = 0;
91
+ _Logger.default.setLogger(logLevel, _constants2.REGISTRATION_FILE);
92
+ this.rehomingIntervalMin = _constants2.DEFAULT_REHOMING_INTERVAL_MIN;
93
+ this.rehomingIntervalMax = _constants2.DEFAULT_REHOMING_INTERVAL_MAX;
94
+ this.mutex = mutex;
95
+ this.callManager = (0, _calling.getCallManager)(this.webex, serviceData.indicator);
96
+ this.metricManager = (0, _Metrics.getMetricManager)(this.webex, serviceData.indicator);
97
+ this.lineEmitter = lineEmitter;
98
+ this.primaryMobiusUris = [];
99
+ this.backupMobiusUris = [];
100
+ this.apiRequest = _request.APIRequest.getInstance({
101
+ webex: this.webex
102
+ });
103
+ }
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
+ }, {
111
+ key: "getFailoverCacheKey",
112
+ value: function getFailoverCacheKey() {
113
+ return "".concat(_constants2.FAILOVER_CACHE_PREFIX, ".").concat(this.userId || 'unknown');
114
+ }
115
+ }, {
116
+ key: "saveFailoverState",
117
+ value: function saveFailoverState(failoverState) {
118
+ try {
119
+ localStorage.setItem(this.getFailoverCacheKey(), (0, _stringify.default)(failoverState));
120
+ } catch (error) {
121
+ _Logger.default.warn("Storing failover state in cache failed with error: ".concat(String(error)), {
122
+ file: _constants2.REGISTRATION_FILE,
123
+ method: 'saveFailoverState'
124
+ });
125
+ }
126
+ }
127
+ }, {
128
+ key: "clearFailoverState",
129
+ value: function clearFailoverState() {
130
+ try {
131
+ localStorage.removeItem(this.getFailoverCacheKey());
132
+ } catch (_unused) {
133
+ _Logger.default.warn('Clearing failover state from localStorage failed', {
134
+ file: _constants2.REGISTRATION_FILE,
135
+ method: 'clearFailoverState'
136
+ });
137
+ }
138
+ }
139
+ }, {
140
+ key: "resumeFailover",
141
+ value: function () {
142
+ var _resumeFailover = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee() {
143
+ var cachedState, failoverState, currentTime, newElapsed, _t;
144
+ return _regenerator.default.wrap(function (_context) {
145
+ while (1) switch (_context.prev = _context.next) {
146
+ case 0:
147
+ _context.prev = 0;
148
+ cachedState = localStorage.getItem(this.getFailoverCacheKey());
149
+ failoverState = cachedState ? JSON.parse(cachedState) : undefined;
150
+ if (!(failoverState && !this.isDeviceRegistered())) {
151
+ _context.next = 2;
152
+ break;
153
+ }
154
+ currentTime = Math.floor((0, _now.default)() / 1000);
155
+ newElapsed = failoverState.timeElapsed + (currentTime - failoverState.retryScheduledTime);
156
+ this.clearFailoverState();
157
+ _context.next = 1;
158
+ return this.startFailoverTimer(failoverState.attempt, newElapsed);
159
+ case 1:
160
+ return _context.abrupt("return", true);
161
+ case 2:
162
+ _context.next = 4;
163
+ break;
164
+ case 3:
165
+ _context.prev = 3;
166
+ _t = _context["catch"](0);
167
+ _Logger.default.warn("No failover state found in cache", {
168
+ file: _constants2.REGISTRATION_FILE,
169
+ method: 'triggerRegistration'
170
+ });
171
+ case 4:
172
+ return _context.abrupt("return", false);
173
+ case 5:
174
+ case "end":
175
+ return _context.stop();
176
+ }
177
+ }, _callee, this, [[0, 3]]);
178
+ }));
179
+ function resumeFailover() {
180
+ return _resumeFailover.apply(this, arguments);
181
+ }
182
+ return resumeFailover;
183
+ }()
184
+ }, {
185
+ key: "getActiveMobiusUrl",
186
+ value: function getActiveMobiusUrl() {
187
+ return this.activeMobiusUrl;
188
+ }
189
+ }, {
190
+ key: "setActiveMobiusUrl",
191
+ value: function setActiveMobiusUrl(url) {
192
+ _Logger.default.info("".concat(_constants.METHOD_START_MESSAGE, " with ").concat(url), {
193
+ method: _constants2.METHODS.UPDATE_ACTIVE_MOBIUS,
194
+ file: _constants2.REGISTRATION_FILE
195
+ });
196
+ this.activeMobiusUrl = url;
197
+ this.callManager.updateActiveMobius(url);
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
+ }
214
+ }, {
215
+ key: "setMobiusServers",
216
+ value: function setMobiusServers(primaryMobiusUris, backupMobiusUris) {
217
+ _Logger.default.log(_constants.METHOD_START_MESSAGE, {
218
+ method: _constants2.METHODS.SET_MOBIUS_SERVERS,
219
+ file: _constants2.REGISTRATION_FILE
220
+ });
221
+ this.primaryMobiusUris = primaryMobiusUris;
222
+ this.backupMobiusUris = backupMobiusUris;
223
+ }
224
+
225
+ /**
226
+ * Implementation of delete device.
227
+ *
228
+ */
229
+ }, {
230
+ key: "deleteRegistration",
231
+ value: (function () {
232
+ var _deleteRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(url, deviceId, deviceUrl) {
233
+ var response, requestObj, _t2;
234
+ return _regenerator.default.wrap(function (_context2) {
235
+ while (1) switch (_context2.prev = _context2.next) {
236
+ case 0:
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;
250
+ _context2.next = 2;
251
+ return this.apiRequest.makeRequest(requestObj);
252
+ case 2:
253
+ response = _context2.sent;
254
+ _context2.next = 4;
255
+ break;
256
+ case 3:
257
+ _context2.prev = 3;
258
+ _t2 = _context2["catch"](1);
259
+ _Logger.default.warn("Delete failed with Mobius: ".concat((0, _stringify.default)(_t2)), {
260
+ file: _constants2.REGISTRATION_FILE,
261
+ method: _constants2.METHODS.DELETE_REGISTRATION
262
+ });
263
+ _context2.next = 4;
264
+ return (0, _common.uploadLogs)();
265
+ case 4:
266
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
267
+ this.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
268
+ return _context2.abrupt("return", response);
269
+ case 5:
270
+ case "end":
271
+ return _context2.stop();
272
+ }
273
+ }, _callee2, this, [[1, 3]]);
274
+ }));
275
+ function deleteRegistration(_x, _x2, _x3) {
276
+ return _deleteRegistration.apply(this, arguments);
277
+ }
278
+ return deleteRegistration;
279
+ }()
280
+ /**
281
+ * Implementation of POST request for device registration.
282
+ *
283
+ */
284
+ )
285
+ }, {
286
+ key: "postRegistration",
287
+ value: (function () {
288
+ var _postRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee3(url) {
289
+ var deviceInfo;
290
+ return _regenerator.default.wrap(function (_context3) {
291
+ while (1) switch (_context3.prev = _context3.next) {
292
+ case 0:
293
+ deviceInfo = {
294
+ userId: this.userId,
295
+ clientDeviceUri: this.webex.internal.device.url,
296
+ serviceData: this.jwe ? _objectSpread(_objectSpread({}, this.serviceData), {}, {
297
+ jwe: this.jwe
298
+ }) : this.serviceData
299
+ };
300
+ return _context3.abrupt("return", this.apiRequest.makeRequest({
301
+ uri: "".concat(url, "device"),
302
+ method: _types3.HTTP_METHODS.POST,
303
+ headers: (0, _defineProperty2.default)((0, _defineProperty2.default)({}, _constants2.CISCO_DEVICE_URL, deviceInfo.clientDeviceUri), _constants2.SPARK_USER_AGENT, _constants2.CALLING_USER_AGENT),
304
+ body: deviceInfo,
305
+ service: _types3.ALLOWED_SERVICES.MOBIUS
306
+ }));
307
+ case 1:
308
+ case "end":
309
+ return _context3.stop();
310
+ }
311
+ }, _callee3, this);
312
+ }));
313
+ function postRegistration(_x4) {
314
+ return _postRegistration.apply(this, arguments);
315
+ }
316
+ return postRegistration;
317
+ }()
318
+ /**
319
+ * Re-attempts registration with the mobius url it was last registered
320
+ * to, that mobius url is expected to be updated already in this.activeMobiusUrl.
321
+ */
322
+ )
323
+ }, {
324
+ key: "restorePreviousRegistration",
325
+ value: (function () {
326
+ var _restorePreviousRegistration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5(caller) {
327
+ var _this = this;
328
+ var loggerContext, abort;
329
+ return _regenerator.default.wrap(function (_context5) {
330
+ while (1) switch (_context5.prev = _context5.next) {
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);
337
+ abort = false;
338
+ if (!(this.apiRequest.isSocketEnabled() && "".concat(this.apiRequest.getConnectedWebSocketUrl(), "/") !== this.activeMobiusUrl)) {
339
+ _context5.next = 1;
340
+ break;
341
+ }
342
+ _Logger.default.info("Disconnecting from Mobius socket to restore previous registration.", {
343
+ file: _constants2.REGISTRATION_FILE,
344
+ method: 'restorePreviousRegistration'
345
+ });
346
+ _context5.next = 1;
347
+ return this.apiRequest.disconnectFromMobiusSocket({
348
+ code: 3050,
349
+ reason: 'done (permanent)'
350
+ });
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:
359
+ abort = _context5.sent;
360
+ if (!this.retryAfter) {
361
+ _context5.next = 7;
362
+ break;
363
+ }
364
+ if (!(this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT)) {
365
+ _context5.next = 3;
366
+ break;
367
+ }
368
+ // If retry-after is less than threshold, honor it and schedule retry
369
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee4() {
370
+ return _regenerator.default.wrap(function (_context4) {
371
+ while (1) switch (_context4.prev = _context4.next) {
372
+ case 0:
373
+ _context4.next = 1;
374
+ return _this.restartRegistration(caller);
375
+ case 1:
376
+ case "end":
377
+ return _context4.stop();
378
+ }
379
+ }, _callee4);
380
+ })), this.retryAfter * 1000);
381
+ _context5.next = 6;
382
+ break;
383
+ case 3:
384
+ if (!(this.primaryMobiusUris.includes(this.activeMobiusUrl) && this.backupMobiusUris.length > 0)) {
385
+ _context5.next = 5;
386
+ break;
387
+ }
388
+ _context5.next = 4;
389
+ return this.attemptRegistrationWithServers(caller, this.backupMobiusUris);
390
+ case 4:
391
+ abort = _context5.sent;
392
+ _context5.next = 6;
393
+ break;
394
+ case 5:
395
+ _context5.next = 6;
396
+ return this.restartRegistration(caller);
397
+ case 6:
398
+ this.retryAfter = undefined;
399
+ _Logger.default.log("restorePreviousRegistration completed via 429 retry-after path - caller: ".concat(caller), loggerContext);
400
+ return _context5.abrupt("return", true);
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:
405
+ case "end":
406
+ return _context5.stop();
407
+ }
408
+ }, _callee5, this);
409
+ }));
410
+ function restorePreviousRegistration(_x5) {
411
+ return _restorePreviousRegistration.apply(this, arguments);
412
+ }
413
+ return restorePreviousRegistration;
414
+ }()
415
+ /**
416
+ * Callback for handling 404 response from the server for register keepalive
417
+ */
418
+ )
419
+ }, {
420
+ key: "handle404KeepaliveFailure",
421
+ value: (function () {
422
+ var _handle404KeepaliveFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee6(caller) {
423
+ var loggerContext, abort;
424
+ return _regenerator.default.wrap(function (_context6) {
425
+ while (1) switch (_context6.prev = _context6.next) {
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);
432
+ if (!(caller === _constants2.KEEPALIVE_UTIL)) {
433
+ _context6.next = 4;
434
+ break;
435
+ }
436
+ _context6.next = 1;
437
+ return this.attemptRegistrationWithServers(caller);
438
+ case 1:
439
+ abort = _context6.sent;
440
+ if (!(!abort && !this.isDeviceRegistered())) {
441
+ _context6.next = 3;
442
+ break;
443
+ }
444
+ _Logger.default.warn('Keepalive 404 recovery: re-registration did not complete, starting failover timer', loggerContext);
445
+ _context6.next = 2;
446
+ return this.startFailoverTimer();
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:
453
+ case "end":
454
+ return _context6.stop();
455
+ }
456
+ }, _callee6, this);
457
+ }));
458
+ function handle404KeepaliveFailure(_x6) {
459
+ return _handle404KeepaliveFailure.apply(this, arguments);
460
+ }
461
+ return handle404KeepaliveFailure;
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
+ }()
517
+ /**
518
+ * Callback for handling 429 retry response from the server
519
+ */
520
+ )
521
+ }, {
522
+ key: "handle429Retry",
523
+ value: (function () {
524
+ var _handle429Retry = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee9(retryAfter, caller) {
525
+ var _this2 = this;
526
+ var interval, abort;
527
+ return _regenerator.default.wrap(function (_context9) {
528
+ while (1) switch (_context9.prev = _context9.next) {
529
+ case 0:
530
+ if (!(caller === _constants2.FAILBACK_UTIL)) {
531
+ _context9.next = 4;
532
+ break;
533
+ }
534
+ if (!(this.failback429RetryAttempts >= _constants2.REG_FAILBACK_429_MAX_RETRIES)) {
535
+ _context9.next = 1;
536
+ break;
537
+ }
538
+ return _context9.abrupt("return");
539
+ case 1:
540
+ this.clearFailbackTimer();
541
+ this.failback429RetryAttempts += 1;
542
+ _Logger.default.log("Received 429 while rehoming, 429 retry count : ".concat(this.failback429RetryAttempts), {
543
+ file: _constants2.REGISTRATION_FILE,
544
+ method: _constants2.REG_429_RETRY_UTIL
545
+ });
546
+ interval = this.getRegRetryInterval(this.failback429RetryAttempts);
547
+ this.startFailbackTimer(interval);
548
+ this.scheduled429Retry = true;
549
+ _context9.next = 2;
550
+ return this.restorePreviousRegistration(_constants2.REG_429_RETRY_UTIL);
551
+ case 2:
552
+ abort = _context9.sent;
553
+ if (!(!abort && !this.isDeviceRegistered())) {
554
+ _context9.next = 3;
555
+ break;
556
+ }
557
+ _context9.next = 3;
558
+ return this.restartRegistration(_constants2.REG_429_RETRY_UTIL);
559
+ case 3:
560
+ _context9.next = 5;
561
+ break;
562
+ case 4:
563
+ if (caller === _constants2.KEEPALIVE_UTIL) {
564
+ this.clearKeepaliveTimer();
565
+ setTimeout(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee8() {
566
+ var _this2$deviceInfo$dev;
567
+ return _regenerator.default.wrap(function (_context8) {
568
+ while (1) switch (_context8.prev = _context8.next) {
569
+ case 0:
570
+ _Logger.default.log("Resuming keepalive after ".concat(retryAfter, " seconds"), {
571
+ file: _constants2.REGISTRATION_FILE,
572
+ method: _constants2.REG_429_RETRY_UTIL
573
+ });
574
+
575
+ // Resume the keepalive after waiting for the retry after period
576
+ _context8.next = 1;
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');
578
+ case 1:
579
+ case "end":
580
+ return _context8.stop();
581
+ }
582
+ }, _callee8);
583
+ })), (retryAfter - Number(this.deviceInfo.keepaliveInterval || 0)) * 1000);
584
+ } else {
585
+ this.retryAfter = retryAfter;
586
+ }
587
+ case 5:
588
+ case "end":
589
+ return _context9.stop();
590
+ }
591
+ }, _callee9, this);
592
+ }));
593
+ function handle429Retry(_x1, _x10) {
594
+ return _handle429Retry.apply(this, arguments);
595
+ }
596
+ return handle429Retry;
597
+ }()
598
+ /**
599
+ * Calculates and returns a random interval value using input argument
600
+ * attempt as the variable factor.
601
+ *
602
+ * attempted already.
603
+ */
604
+ )
605
+ }, {
606
+ key: "getRegRetryInterval",
607
+ value: function getRegRetryInterval() {
608
+ var attempt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
609
+ return _constants2.BASE_REG_RETRY_TIMER_VAL_IN_SEC + Math.pow(_constants2.BASE_REG_TIMER_MFACTOR, attempt) + Math.floor((Math.random() * (_constants2.REG_RANDOM_T_FACTOR_UPPER_LIMIT - _constants2.SEC_TO_MSEC_MFACTOR + 1) + _constants2.SEC_TO_MSEC_MFACTOR) / _constants2.SEC_TO_MSEC_MFACTOR);
610
+ }
611
+
612
+ /**
613
+ * Schedules registration retry with primary mobius servers at a random
614
+ * interval calculated based on the number of times registration retry is already done
615
+ * Once the time taken since the beginning of retry attempt exceeds the
616
+ * retry threshold, it switches over to backup mobius servers.
617
+ *
618
+ */
619
+ }, {
620
+ key: "startFailoverTimer",
621
+ value: (function () {
622
+ var _startFailoverTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee12() {
623
+ var _this3 = this;
624
+ var attempt,
625
+ timeElapsed,
626
+ loggerContext,
627
+ interval,
628
+ TIMER_THRESHOLD,
629
+ excessVal,
630
+ abort,
631
+ scheduledTime,
632
+ _args12 = arguments;
633
+ return _regenerator.default.wrap(function (_context12) {
634
+ while (1) switch (_context12.prev = _context12.next) {
635
+ case 0:
636
+ attempt = _args12.length > 0 && _args12[0] !== undefined ? _args12[0] : 1;
637
+ timeElapsed = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : 0;
638
+ loggerContext = {
639
+ file: _constants2.REGISTRATION_FILE,
640
+ method: _constants2.FAILOVER_UTIL
641
+ };
642
+ interval = this.getRegRetryInterval(attempt);
643
+ TIMER_THRESHOLD = _constants2.REG_TRY_BACKUP_TIMER_VAL_IN_SEC;
644
+ if (timeElapsed + interval > TIMER_THRESHOLD) {
645
+ excessVal = timeElapsed + interval - TIMER_THRESHOLD;
646
+ interval -= excessVal;
647
+ }
648
+ if (this.retryAfter != null && interval < this.retryAfter) {
649
+ this.failoverImmediately = this.retryAfter + timeElapsed > TIMER_THRESHOLD;
650
+ }
651
+ if (!(interval > _constants2.BASE_REG_RETRY_TIMER_VAL_IN_SEC && !this.failoverImmediately)) {
652
+ _context12.next = 1;
653
+ break;
654
+ }
655
+ scheduledTime = Math.floor((0, _now.default)() / 1000);
656
+ if (this.retryAfter != null) {
657
+ interval = Math.max(interval, this.retryAfter);
658
+ }
659
+ this.saveFailoverState({
660
+ attempt: attempt,
661
+ timeElapsed: timeElapsed,
662
+ retryScheduledTime: scheduledTime,
663
+ serverType: 'primary'
664
+ });
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) {
668
+ case 0:
669
+ _context1.next = 1;
670
+ return _this3.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee0() {
671
+ var currentTime;
672
+ return _regenerator.default.wrap(function (_context0) {
673
+ while (1) switch (_context0.prev = _context0.next) {
674
+ case 0:
675
+ _context0.next = 1;
676
+ return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL);
677
+ case 1:
678
+ abort = _context0.sent;
679
+ currentTime = Math.floor((0, _now.default)() / 1000);
680
+ if (!(!abort && !_this3.isDeviceRegistered())) {
681
+ _context0.next = 2;
682
+ break;
683
+ }
684
+ _context0.next = 2;
685
+ return _this3.startFailoverTimer(attempt + 1, timeElapsed + (currentTime - scheduledTime));
686
+ case 2:
687
+ case "end":
688
+ return _context0.stop();
689
+ }
690
+ }, _callee0);
691
+ })));
692
+ case 1:
693
+ case "end":
694
+ return _context1.stop();
695
+ }
696
+ }, _callee1);
697
+ })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
698
+ _Logger.default.log("Scheduled retry with primary in ".concat(interval, " seconds, number of attempts : ").concat(attempt), loggerContext);
699
+ _context12.next = 7;
700
+ break;
701
+ case 1:
702
+ if (!this.backupMobiusUris.length) {
703
+ _context12.next = 5;
704
+ break;
705
+ }
706
+ if (!this.apiRequest.isSocketEnabled()) {
707
+ _context12.next = 3;
708
+ break;
709
+ }
710
+ _Logger.default.info('Disconnecting from primary Mobius socket for failover to backup servers', loggerContext);
711
+ _context12.next = 2;
712
+ return this.apiRequest.disconnectFromMobiusSocket({
713
+ code: 3050,
714
+ reason: 'done (permanent)'
715
+ });
716
+ case 2:
717
+ _Logger.default.log('Mobius socket disconnect complete prior to backup failover', loggerContext);
718
+ case 3:
719
+ this.saveFailoverState({
720
+ attempt: attempt,
721
+ timeElapsed: timeElapsed,
722
+ retryScheduledTime: Math.floor((0, _now.default)() / 1000),
723
+ serverType: 'backup'
724
+ });
725
+ _Logger.default.info('Failing over to backup servers.', loggerContext);
726
+ this.failoverImmediately = false;
727
+ _context12.next = 4;
728
+ return this.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, this.backupMobiusUris);
729
+ case 4:
730
+ abort = _context12.sent;
731
+ if (!abort && !this.isDeviceRegistered()) {
732
+ interval = this.getRegRetryInterval();
733
+ if (this.retryAfter != null && this.retryAfter < _constants2.RETRY_TIMER_UPPER_LIMIT) {
734
+ interval = interval < this.retryAfter ? this.retryAfter : interval;
735
+ }
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) {
739
+ case 0:
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) {
744
+ case 0:
745
+ _context10.next = 1;
746
+ return _this3.attemptRegistrationWithServers(_constants2.FAILOVER_UTIL, _this3.backupMobiusUris);
747
+ case 1:
748
+ abort = _context10.sent;
749
+ if (!(!abort && !_this3.isDeviceRegistered())) {
750
+ _context10.next = 3;
751
+ break;
752
+ }
753
+ _context10.next = 2;
754
+ return (0, _common.uploadLogs)();
755
+ case 2:
756
+ (0, _common.emitFinalFailure)(function (clientError) {
757
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
758
+ }, loggerContext);
759
+ case 3:
760
+ case "end":
761
+ return _context10.stop();
762
+ }
763
+ }, _callee10);
764
+ })));
765
+ case 1:
766
+ case "end":
767
+ return _context11.stop();
768
+ }
769
+ }, _callee11);
770
+ })), interval * _constants2.SEC_TO_MSEC_MFACTOR);
771
+ _Logger.default.log("Scheduled retry with backup servers in ".concat(interval, " seconds."), loggerContext);
772
+ }
773
+ _context12.next = 7;
774
+ break;
775
+ case 5:
776
+ _context12.next = 6;
777
+ return (0, _common.uploadLogs)();
778
+ case 6:
779
+ (0, _common.emitFinalFailure)(function (clientError) {
780
+ _this3.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
781
+ }, loggerContext, interval < 0 ? 'Timer threshold exceeded during failover' : undefined);
782
+ case 7:
783
+ case "end":
784
+ return _context12.stop();
785
+ }
786
+ }, _callee12, this);
787
+ }));
788
+ function startFailoverTimer() {
789
+ return _startFailoverTimer.apply(this, arguments);
790
+ }
791
+ return startFailoverTimer;
792
+ }()
793
+ /**
794
+ * Clears the failback timer if running.
795
+ */
796
+ )
797
+ }, {
798
+ key: "clearFailbackTimer",
799
+ value: function clearFailbackTimer() {
800
+ if (this.failbackTimer) {
801
+ clearTimeout(this.failbackTimer);
802
+ this.failbackTimer = undefined;
803
+ }
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
+ }()
833
+ }, {
834
+ key: "isPrimaryActive",
835
+ value: function () {
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) {
840
+ case 0:
841
+ _iterator = _createForOfIteratorHelper(this.primaryMobiusUris);
842
+ _context14.prev = 1;
843
+ _iterator.s();
844
+ case 2:
845
+ if ((_step = _iterator.n()).done) {
846
+ _context14.next = 8;
847
+ break;
848
+ }
849
+ mobiusUrl = _step.value;
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;
853
+ return this.webex.request({
854
+ uri: "".concat(baseUri, "ping"),
855
+ method: _types3.HTTP_METHODS.GET,
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),
857
+ service: _types3.ALLOWED_SERVICES.MOBIUS
858
+ });
859
+ case 4:
860
+ response = _context14.sent;
861
+ _ref7 = response, statusCode = _ref7.statusCode;
862
+ if (!(statusCode === 200)) {
863
+ _context14.next = 5;
864
+ break;
865
+ }
866
+ _Logger.default.info("Ping successful for primary Mobius: ".concat(mobiusUrl), {
867
+ file: _constants2.REGISTRATION_FILE,
868
+ method: _constants2.FAILBACK_UTIL
869
+ });
870
+ status = 'up';
871
+ return _context14.abrupt("continue", 8);
872
+ case 5:
873
+ _context14.next = 7;
874
+ break;
875
+ case 6:
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)), {
879
+ file: _constants2.REGISTRATION_FILE,
880
+ method: _constants2.FAILBACK_UTIL
881
+ });
882
+ status = 'down';
883
+ case 7:
884
+ _context14.next = 2;
885
+ break;
886
+ case 8:
887
+ _context14.next = 10;
888
+ break;
889
+ case 9:
890
+ _context14.prev = 9;
891
+ _t4 = _context14["catch"](1);
892
+ _iterator.e(_t4);
893
+ case 10:
894
+ _context14.prev = 10;
895
+ _iterator.f();
896
+ return _context14.finish(10);
897
+ case 11:
898
+ return _context14.abrupt("return", status === 'up');
899
+ case 12:
900
+ case "end":
901
+ return _context14.stop();
902
+ }
903
+ }, _callee14, this, [[1, 9, 10, 11], [3, 6]]);
904
+ }));
905
+ function isPrimaryActive() {
906
+ return _isPrimaryActive.apply(this, arguments);
907
+ }
908
+ return isPrimaryActive;
909
+ }()
910
+ /**
911
+ * Returns true if device is registered with a backup mobius.
912
+ */
913
+ }, {
914
+ key: "isFailbackRequired",
915
+ value: function isFailbackRequired() {
916
+ return this.isDeviceRegistered() && this.primaryMobiusUris.indexOf(this.activeMobiusUrl) === -1;
917
+ }
918
+
919
+ /**
920
+ * Calculates and returns a random value between rehomingIntervalMin and
921
+ * rehomingIntervalMax.
922
+ */
923
+ }, {
924
+ key: "getFailbackInterval",
925
+ value: function getFailbackInterval() {
926
+ return Math.floor(Math.random() * (this.rehomingIntervalMax - this.rehomingIntervalMin + 1) + this.rehomingIntervalMin);
927
+ }
928
+
929
+ /**
930
+ * Starts failback timer to move to primary mobius if device
931
+ * is registered with a backup mobius.
932
+ */
933
+ }, {
934
+ key: "initiateFailback",
935
+ value: function initiateFailback() {
936
+ var loggerContext = {
937
+ file: _constants2.REGISTRATION_FILE,
938
+ method: _constants2.METHODS.INITIATE_FAILBACK
939
+ };
940
+ if (this.isFailbackRequired()) {
941
+ if (!this.failbackTimer) {
942
+ this.failback429RetryAttempts = 0;
943
+ var intervalInMinutes = this.getFailbackInterval();
944
+ _Logger.default.info("Scheduling failback to primary - intervalMinutes: ".concat(intervalInMinutes), loggerContext);
945
+ this.startFailbackTimer(intervalInMinutes * _constants2.MINUTES_TO_SEC_MFACTOR);
946
+ } else {
947
+ _Logger.default.info('Failback timer already scheduled, skipping', loggerContext);
948
+ }
949
+ } else {
950
+ _Logger.default.info('Failback not required, clearing any pending failback timer', loggerContext);
951
+ this.failback429RetryAttempts = 0;
952
+ this.clearFailbackTimer();
953
+ }
954
+ }
955
+
956
+ /**
957
+ * Starts failback timer with the interval value received.
958
+ *
959
+ */
960
+ }, {
961
+ key: "startFailbackTimer",
962
+ value: function startFailbackTimer(intervalInSeconds) {
963
+ var _this4 = this;
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) {
967
+ case 0:
968
+ return _context15.abrupt("return", _this4.executeFailback());
969
+ case 1:
970
+ case "end":
971
+ return _context15.stop();
972
+ }
973
+ }, _callee15);
974
+ })), intervalInSeconds * _constants2.SEC_TO_MSEC_MFACTOR);
975
+ _Logger.default.log("Failback scheduled after ".concat(intervalInSeconds, " seconds."), {
976
+ file: _constants2.REGISTRATION_FILE,
977
+ method: this.startFailbackTimer.name
978
+ });
979
+ }
980
+
981
+ /**
982
+ * Core logic for the failback processing, scheduled and executed
983
+ * at failback timer expiry.
984
+ */
985
+ }, {
986
+ key: "executeFailback",
987
+ value: (function () {
988
+ var _executeFailback = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee17() {
989
+ var _this5 = this;
990
+ var loggerContext;
991
+ return _regenerator.default.wrap(function (_context17) {
992
+ while (1) switch (_context17.prev = _context17.next) {
993
+ case 0:
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() {
1001
+ var primaryServerStatus, abort, abortNew;
1002
+ return _regenerator.default.wrap(function (_context16) {
1003
+ while (1) switch (_context16.prev = _context16.next) {
1004
+ case 0:
1005
+ if (!_this5.isFailbackRequired()) {
1006
+ _context16.next = 13;
1007
+ break;
1008
+ }
1009
+ _context16.next = 1;
1010
+ return _this5.isPrimaryActive();
1011
+ case 1:
1012
+ primaryServerStatus = _context16.sent;
1013
+ if (!((0, _keys.default)(_this5.callManager.getActiveCalls()).length === 0 && primaryServerStatus)) {
1014
+ _context16.next = 12;
1015
+ break;
1016
+ }
1017
+ _Logger.default.info("Attempting failback to primary.", loggerContext);
1018
+ _context16.next = 2;
1019
+ return _this5.deregister();
1020
+ case 2:
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
+ });
1031
+ case 3:
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;
1038
+ if (!(_this5.scheduled429Retry || abort || _this5.isDeviceRegistered())) {
1039
+ _context16.next = 6;
1040
+ break;
1041
+ }
1042
+ return _context16.abrupt("return");
1043
+ case 6:
1044
+ _context16.next = 7;
1045
+ return _this5.restorePreviousRegistration(_constants2.FAILBACK_UTIL);
1046
+ case 7:
1047
+ abortNew = _context16.sent;
1048
+ if (!abortNew) {
1049
+ _context16.next = 8;
1050
+ break;
1051
+ }
1052
+ _this5.clearFailbackTimer();
1053
+ return _context16.abrupt("return");
1054
+ case 8:
1055
+ if (_this5.isDeviceRegistered()) {
1056
+ _context16.next = 10;
1057
+ break;
1058
+ }
1059
+ _context16.next = 9;
1060
+ return _this5.restartRegistration(loggerContext.method);
1061
+ case 9:
1062
+ _context16.next = 11;
1063
+ break;
1064
+ case 10:
1065
+ _this5.failbackTimer = undefined;
1066
+ _this5.initiateFailback();
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:
1075
+ case "end":
1076
+ return _context16.stop();
1077
+ }
1078
+ }, _callee16);
1079
+ })));
1080
+ case 1:
1081
+ case "end":
1082
+ return _context17.stop();
1083
+ }
1084
+ }, _callee17, this);
1085
+ }));
1086
+ function executeFailback() {
1087
+ return _executeFailback.apply(this, arguments);
1088
+ }
1089
+ return executeFailback;
1090
+ }()
1091
+ /**
1092
+ * Updates rehomingIntervalMin and rehomingIntervalMax values
1093
+ * if received in registration response from a primary mobius
1094
+ * server.
1095
+ *
1096
+ */
1097
+ )
1098
+ }, {
1099
+ key: "setIntervalValues",
1100
+ value: function setIntervalValues(deviceInfo) {
1101
+ if (this.primaryMobiusUris.indexOf(this.activeMobiusUrl) !== -1) {
1102
+ this.rehomingIntervalMin = deviceInfo !== null && deviceInfo !== void 0 && deviceInfo.rehomingIntervalMin ? deviceInfo.rehomingIntervalMin : _constants2.DEFAULT_REHOMING_INTERVAL_MIN;
1103
+ this.rehomingIntervalMax = deviceInfo !== null && deviceInfo !== void 0 && deviceInfo.rehomingIntervalMax ? deviceInfo.rehomingIntervalMax : _constants2.DEFAULT_REHOMING_INTERVAL_MAX;
1104
+ }
1105
+ }
1106
+
1107
+ /**
1108
+ * Retrieves information about the device as {@link IDeviceInfo}.
1109
+ *
1110
+ */
1111
+ }, {
1112
+ key: "getDeviceInfo",
1113
+ value: function getDeviceInfo() {
1114
+ return this.deviceInfo;
1115
+ }
1116
+
1117
+ /**
1118
+ * Checks if the device is currently registered.
1119
+ *
1120
+ * by checking if isRegistered state is set to
1121
+ * ACTIVE, else false.
1122
+ */
1123
+ }, {
1124
+ key: "isDeviceRegistered",
1125
+ value: function isDeviceRegistered() {
1126
+ return this.registrationStatus === _types3.RegistrationStatus.ACTIVE;
1127
+ }
1128
+ }, {
1129
+ key: "getStatus",
1130
+ value: function getStatus() {
1131
+ return this.registrationStatus;
1132
+ }
1133
+ }, {
1134
+ key: "setStatus",
1135
+ value: function setStatus(value) {
1136
+ this.registrationStatus = value;
1137
+ }
1138
+
1139
+ /**
1140
+ * Start fresh registration cycle with the mobius
1141
+ * server list already present.
1142
+ *
1143
+ */
1144
+ }, {
1145
+ key: "restartRegistration",
1146
+ value: (function () {
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) {
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
+
1158
+ /*
1159
+ * Cancel any failback timer running
1160
+ * and start fresh registration attempt with retry as true.
1161
+ */
1162
+ this.clearFailbackTimer();
1163
+ this.failback429RetryAttempts = 0;
1164
+ _context18.next = 1;
1165
+ return this.attemptRegistrationWithServers(caller, this.primaryMobiusUris);
1166
+ case 1:
1167
+ abort = _context18.sent;
1168
+ if (!(!abort && !this.isDeviceRegistered())) {
1169
+ _context18.next = 2;
1170
+ break;
1171
+ }
1172
+ _context18.next = 2;
1173
+ return this.startFailoverTimer();
1174
+ case 2:
1175
+ _Logger.default.log("restartRegistration completed - caller: ".concat(caller, ", deviceRegistered: ").concat(this.isDeviceRegistered(), ", abort: ").concat(abort), loggerContext);
1176
+ case 3:
1177
+ case "end":
1178
+ return _context18.stop();
1179
+ }
1180
+ }, _callee18, this);
1181
+ }));
1182
+ function restartRegistration(_x13) {
1183
+ return _restartRegistration.apply(this, arguments);
1184
+ }
1185
+ return restartRegistration;
1186
+ }()
1187
+ /**
1188
+ * Restores the connection and attempts refreshing existing registration with server.
1189
+ * Allows retry if not restored in the first attempt.
1190
+ *
1191
+ */
1192
+ )
1193
+ }, {
1194
+ key: "handleConnectionRestoration",
1195
+ value: (function () {
1196
+ var _handleConnectionRestoration = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20(retry) {
1197
+ var _this6 = this;
1198
+ return _regenerator.default.wrap(function (_context20) {
1199
+ while (1) switch (_context20.prev = _context20.next) {
1200
+ case 0:
1201
+ _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1202
+ method: _constants2.METHODS.HANDLE_CONNECTION_RESTORATION,
1203
+ file: _constants2.REGISTRATION_FILE
1204
+ });
1205
+ _context20.next = 1;
1206
+ return this.mutex.runExclusive(/*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee19() {
1207
+ var abort;
1208
+ return _regenerator.default.wrap(function (_context19) {
1209
+ while (1) switch (_context19.prev = _context19.next) {
1210
+ case 0:
1211
+ if (!retry) {
1212
+ _context19.next = 4;
1213
+ break;
1214
+ }
1215
+ _Logger.default.log('Network is up again, re-registering with Webex Calling if needed', {
1216
+ file: _constants2.REGISTRATION_FILE,
1217
+ method: _constants2.METHODS.HANDLE_CONNECTION_RESTORATION
1218
+ });
1219
+ _this6.clearKeepaliveTimer();
1220
+ if (!_this6.isDeviceRegistered()) {
1221
+ _context19.next = 1;
1222
+ break;
1223
+ }
1224
+ _context19.next = 1;
1225
+ return _this6.deregister();
1226
+ case 1:
1227
+ if (!_this6.activeMobiusUrl) {
1228
+ _context19.next = 3;
1229
+ break;
1230
+ }
1231
+ _context19.next = 2;
1232
+ return _this6.restorePreviousRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1233
+ case 2:
1234
+ abort = _context19.sent;
1235
+ if (!(!abort && !_this6.isDeviceRegistered())) {
1236
+ _context19.next = 3;
1237
+ break;
1238
+ }
1239
+ _context19.next = 3;
1240
+ return _this6.restartRegistration(_constants2.METHODS.HANDLE_CONNECTION_RESTORATION);
1241
+ case 3:
1242
+ retry = false;
1243
+ case 4:
1244
+ case "end":
1245
+ return _context19.stop();
1246
+ }
1247
+ }, _callee19);
1248
+ })));
1249
+ case 1:
1250
+ return _context20.abrupt("return", retry);
1251
+ case 2:
1252
+ case "end":
1253
+ return _context20.stop();
1254
+ }
1255
+ }, _callee20, this);
1256
+ }));
1257
+ function handleConnectionRestoration(_x14) {
1258
+ return _handleConnectionRestoration.apply(this, arguments);
1259
+ }
1260
+ return handleConnectionRestoration;
1261
+ }()
1262
+ /**
1263
+ * Callback function for restoring registration in case of failure during initial registration
1264
+ * due to device registration already exists.
1265
+ *
1266
+ */
1267
+ )
1268
+ }, {
1269
+ key: "restoreRegistrationCallBack",
1270
+ value: function restoreRegistrationCallBack() {
1271
+ var _this7 = this;
1272
+ return /*#__PURE__*/function () {
1273
+ var _ref1 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21(restoreData, caller) {
1274
+ var logContext, restore, finalError;
1275
+ return _regenerator.default.wrap(function (_context21) {
1276
+ while (1) switch (_context21.prev = _context21.next) {
1277
+ case 0:
1278
+ logContext = {
1279
+ file: _constants2.REGISTRATION_FILE,
1280
+ method: caller
1281
+ };
1282
+ if (_this7.isRegRetry()) {
1283
+ _context21.next = 4;
1284
+ break;
1285
+ }
1286
+ _Logger.default.info('Registration restoration in progress.', logContext);
1287
+ restore = _this7.getExistingDevice(restoreData);
1288
+ if (!restore) {
1289
+ _context21.next = 3;
1290
+ break;
1291
+ }
1292
+ _this7.setRegRetry(true);
1293
+ _context21.next = 1;
1294
+ return _this7.deregister();
1295
+ case 1:
1296
+ _context21.next = 2;
1297
+ return _this7.restorePreviousRegistration(caller);
1298
+ case 2:
1299
+ finalError = _context21.sent;
1300
+ _this7.setRegRetry(false);
1301
+ if (_this7.isDeviceRegistered()) {
1302
+ _Logger.default.info('Registration restored successfully.', logContext);
1303
+ }
1304
+ return _context21.abrupt("return", finalError);
1305
+ case 3:
1306
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1307
+ _context21.next = 5;
1308
+ break;
1309
+ case 4:
1310
+ _this7.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1311
+ case 5:
1312
+ return _context21.abrupt("return", false);
1313
+ case 6:
1314
+ case "end":
1315
+ return _context21.stop();
1316
+ }
1317
+ }, _callee21);
1318
+ }));
1319
+ return function (_x15, _x16) {
1320
+ return _ref1.apply(this, arguments);
1321
+ };
1322
+ }();
1323
+ }
1324
+
1325
+ /**
1326
+ * Triggers the registration with the given list of Mobius servers
1327
+ * Registration is attempted with primary and backup until it succeeds or the list is exhausted
1328
+ */
1329
+ }, {
1330
+ key: "triggerRegistration",
1331
+ value: (function () {
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) {
1336
+ case 0:
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;
1343
+ return this.resumeFailover();
1344
+ case 1:
1345
+ if (!_context22.sent) {
1346
+ _context22.next = 2;
1347
+ break;
1348
+ }
1349
+ _Logger.default.info('Registration trigger handled by resumeFailover path', loggerContext);
1350
+ return _context22.abrupt("return");
1351
+ case 2:
1352
+ if (!(this.primaryMobiusUris.length > 0)) {
1353
+ _context22.next = 5;
1354
+ break;
1355
+ }
1356
+ _context22.next = 3;
1357
+ return this.attemptRegistrationWithServers(_constants2.REGISTRATION_UTIL, this.primaryMobiusUris);
1358
+ case 3:
1359
+ abort = _context22.sent;
1360
+ if (!(!this.isDeviceRegistered() && !abort)) {
1361
+ _context22.next = 4;
1362
+ break;
1363
+ }
1364
+ _context22.next = 4;
1365
+ return this.startFailoverTimer();
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:
1373
+ case "end":
1374
+ return _context22.stop();
1375
+ }
1376
+ }, _callee22, this);
1377
+ }));
1378
+ function triggerRegistration() {
1379
+ return _triggerRegistration.apply(this, arguments);
1380
+ }
1381
+ return triggerRegistration;
1382
+ }()
1383
+ /**
1384
+ * Attempts registration with the server list received in
1385
+ * argument one by one until registration either succeeds with
1386
+ * one or all of them are tried.
1387
+ *
1388
+ * attempt has hit a final error and a retry should not be scheduled
1389
+ * else false.
1390
+ */
1391
+ )
1392
+ }, {
1393
+ key: "attemptRegistrationWithServers",
1394
+ value: (function () {
1395
+ var _attemptRegistrationWithServers = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(caller) {
1396
+ var _this8 = this;
1397
+ var servers,
1398
+ loggerContext,
1399
+ abort,
1400
+ connectedWebSocketUrl,
1401
+ _iterator2,
1402
+ _step2,
1403
+ _loop,
1404
+ _ret,
1405
+ _args24 = arguments,
1406
+ _t6;
1407
+ return _regenerator.default.wrap(function (_context24) {
1408
+ while (1) switch (_context24.prev = _context24.next) {
1409
+ case 0:
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
+ };
1415
+ abort = false;
1416
+ this.retryAfter = undefined;
1417
+ if (!this.failoverImmediately) {
1418
+ _context24.next = 1;
1419
+ break;
1420
+ }
1421
+ return _context24.abrupt("return", abort);
1422
+ case 1:
1423
+ if (!this.isDeviceRegistered()) {
1424
+ _context24.next = 2;
1425
+ break;
1426
+ }
1427
+ _Logger.default.info("[".concat(caller, "] : Device already registered with : ").concat(this.activeMobiusUrl), loggerContext);
1428
+ return _context24.abrupt("return", abort);
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
+ }
1440
+ _iterator2 = _createForOfIteratorHelper(servers);
1441
+ _context24.prev = 3;
1442
+ _loop = /*#__PURE__*/_regenerator.default.mark(function _loop() {
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) {
1446
+ case 0:
1447
+ url = _step2.value;
1448
+ serverType = _this8.getServerType(url);
1449
+ _context23.prev = 1;
1450
+ abort = false;
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
+
1461
+ // eslint-disable-next-line no-await-in-loop
1462
+ _context23.next = 2;
1463
+ return _this8.apiRequest.connectToMobiusSocket(wssNormalizedUrl);
1464
+ case 2:
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;
1473
+ _this8.clearFailoverState();
1474
+ _this8.deviceInfo = resp.body;
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);
1479
+ _this8.setIntervalValues(_this8.deviceInfo);
1480
+ _this8.metricManager.setDeviceInfo(_this8.deviceInfo);
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);
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);
1483
+ _this8.initiateFailback();
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) {
1491
+ var _body$headers$trackin, _body$headers;
1492
+ if (isFinalError) {
1493
+ _this8.lineEmitter(_types4.LINE_EVENTS.ERROR, undefined, clientError);
1494
+ } else {
1495
+ _this8.lineEmitter(_types4.LINE_EVENTS.UNREGISTERED);
1496
+ }
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);
1498
+ }, {
1499
+ method: caller,
1500
+ file: _constants2.REGISTRATION_FILE
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;
1514
+ break;
1515
+ }
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)'
1531
+ });
1532
+ case 8:
1533
+ _Logger.default.log("[".concat(caller, "] : Mobius WebSocket disconnect complete after registration error - serverType: ").concat(serverType), loggerContext);
1534
+ case 9:
1535
+ if (!abort) {
1536
+ _context23.next = 11;
1537
+ break;
1538
+ }
1539
+ _this8.setStatus(_types3.RegistrationStatus.INACTIVE);
1540
+ // eslint-disable-next-line no-await-in-loop
1541
+ _context23.next = 10;
1542
+ return (0, _common.uploadLogs)();
1543
+ case 10:
1544
+ return _context23.abrupt("return", 0);
1545
+ case 11:
1546
+ case "end":
1547
+ return _context23.stop();
1548
+ }
1549
+ }, _loop, null, [[1, 5]]);
1550
+ });
1551
+ _iterator2.s();
1552
+ case 4:
1553
+ if ((_step2 = _iterator2.n()).done) {
1554
+ _context24.next = 7;
1555
+ break;
1556
+ }
1557
+ return _context24.delegateYield(_loop(), "t0", 5);
1558
+ case 5:
1559
+ _ret = _context24.t0;
1560
+ if (!(_ret === 0)) {
1561
+ _context24.next = 6;
1562
+ break;
1563
+ }
1564
+ return _context24.abrupt("continue", 7);
1565
+ case 6:
1566
+ _context24.next = 4;
1567
+ break;
1568
+ case 7:
1569
+ _context24.next = 9;
1570
+ break;
1571
+ case 8:
1572
+ _context24.prev = 8;
1573
+ _t6 = _context24["catch"](3);
1574
+ _iterator2.e(_t6);
1575
+ case 9:
1576
+ _context24.prev = 9;
1577
+ _iterator2.f();
1578
+ return _context24.finish(9);
1579
+ case 10:
1580
+ return _context24.abrupt("return", abort);
1581
+ case 11:
1582
+ case "end":
1583
+ return _context24.stop();
1584
+ }
1585
+ }, _callee23, this, [[3, 8, 9, 10]]);
1586
+ }));
1587
+ function attemptRegistrationWithServers(_x17) {
1588
+ return _attemptRegistrationWithServers.apply(this, arguments);
1589
+ }
1590
+ return attemptRegistrationWithServers;
1591
+ }()
1592
+ /**
1593
+ * This method sets up a timer to periodically send keep-alive requests to maintain a connection.
1594
+ * It handles retries, error handling, and re-registration attempts based on the response, ensuring continuous connectivity with the server.
1595
+ */
1596
+ )
1597
+ }, {
1598
+ key: "startKeepaliveTimer",
1599
+ value: (function () {
1600
+ var _startKeepaliveTimer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26(url, interval, serverType) {
1601
+ var _this9 = this;
1602
+ var RETRY_COUNT_THRESHOLD;
1603
+ return _regenerator.default.wrap(function (_context27) {
1604
+ while (1) switch (_context27.prev = _context27.next) {
1605
+ case 0:
1606
+ this.clearKeepaliveTimer();
1607
+ RETRY_COUNT_THRESHOLD = this.isCCFlow ? 4 : 5;
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) {
1613
+ case 0:
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;
1651
+ break;
1652
+ case 3:
1653
+ _context25.prev = 3;
1654
+ _t7 = _context25["catch"](1);
1655
+ error = {
1656
+ headers: {
1657
+ trackingid: (_err$headers = _t7.headers) === null || _err$headers === void 0 ? void 0 : _err$headers.trackingid,
1658
+ 'retry-after': _t7.headers['retry-after']
1659
+ },
1660
+ statusCode: _t7.statusCode,
1661
+ statusText: _t7.statusText,
1662
+ type: _t7.type
1663
+ };
1664
+ (_this9$webWorker2 = _this9.webWorker) === null || _this9$webWorker2 === void 0 ? void 0 : _this9$webWorker2.postMessage({
1665
+ type: _types3.WorkerMessageType.KEEPALIVE_RESULT,
1666
+ err: error
1667
+ });
1668
+ case 4:
1669
+ if (event.data.type === _types3.WorkerMessageType.KEEPALIVE_SUCCESS) {
1670
+ _Logger.default.info("Sent Keepalive, status: ".concat(event.data.statusCode), logContext);
1671
+ _this9.lineEmitter(_types4.LINE_EVENTS.RECONNECTED);
1672
+ }
1673
+ if (!(event.data.type === _types3.WorkerMessageType.KEEPALIVE_FAILURE)) {
1674
+ _context25.next = 12;
1675
+ break;
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;
1727
+ break;
1728
+ case 9:
1729
+ if (_error.statusCode === 404) {
1730
+ _this9.handle404KeepaliveFailure(_constants2.KEEPALIVE_UTIL);
1731
+ }
1732
+ case 10:
1733
+ _context25.next = 12;
1734
+ break;
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
+ }
1748
+ }
1749
+ case 1:
1750
+ case "end":
1751
+ return _context26.stop();
1752
+ }
1753
+ }, _callee25);
1754
+ })));
1755
+ case 1:
1756
+ case "end":
1757
+ return _context27.stop();
1758
+ }
1759
+ }, _callee26, this);
1760
+ }));
1761
+ function startKeepaliveTimer(_x18, _x19, _x20) {
1762
+ return _startKeepaliveTimer.apply(this, arguments);
1763
+ }
1764
+ return startKeepaliveTimer;
1765
+ }()
1766
+ /**
1767
+ * Clears the keepalive timer if running.
1768
+ */
1769
+ )
1770
+ }, {
1771
+ key: "clearKeepaliveTimer",
1772
+ value: function clearKeepaliveTimer() {
1773
+ if (this.webWorker) {
1774
+ this.webWorker.postMessage({
1775
+ type: _types3.WorkerMessageType.CLEAR_KEEPALIVE
1776
+ });
1777
+ this.webWorker.terminate();
1778
+ this.webWorker = undefined;
1779
+ }
1780
+ }
1781
+ }, {
1782
+ key: "isReconnectPending",
1783
+ value: function isReconnectPending() {
1784
+ return this.reconnectPending;
1785
+ }
1786
+ }, {
1787
+ key: "deregister",
1788
+ value: function () {
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) {
1798
+ case 0:
1799
+ closeMobiusWss = _args28.length > 0 && _args28[0] !== undefined ? _args28[0] : false;
1800
+ loggerContext = {
1801
+ file: _constants2.REGISTRATION_FILE,
1802
+ method: _constants2.METHODS.DEREGISTER
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);
1808
+ case 2:
1809
+ _Logger.default.log('Registration successfully deregistered', loggerContext);
1810
+ _context28.next = 4;
1811
+ break;
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:
1829
+ this.clearKeepaliveTimer();
1830
+ this.setStatus(_types3.RegistrationStatus.INACTIVE);
1831
+ this.clearFailoverState();
1832
+ case 7:
1833
+ case "end":
1834
+ return _context28.stop();
1835
+ }
1836
+ }, _callee27, this, [[1, 3]]);
1837
+ }));
1838
+ function deregister() {
1839
+ return _deregister.apply(this, arguments);
1840
+ }
1841
+ return deregister;
1842
+ }()
1843
+ /**
1844
+ * Indicates whether the calling client is in a mode
1845
+ * to retry registration.
1846
+ */
1847
+ }, {
1848
+ key: "isRegRetry",
1849
+ value: function isRegRetry() {
1850
+ return this.registerRetry;
1851
+ }
1852
+
1853
+ /**
1854
+ * Sets the received value in instance variable
1855
+ * registerRetry for registration retry cases.
1856
+ *
1857
+ */
1858
+ }, {
1859
+ key: "setRegRetry",
1860
+ value: function setRegRetry(value) {
1861
+ this.registerRetry = value;
1862
+ }
1863
+
1864
+ /**
1865
+ * Restores the deviceInfo object in callingClient when receiving a 403 with error code 101.
1866
+ *
1867
+ */
1868
+ }, {
1869
+ key: "getExistingDevice",
1870
+ value: function getExistingDevice(restoreData) {
1871
+ if (restoreData.devices && restoreData.devices.length > 0) {
1872
+ this.deviceInfo = {
1873
+ userId: restoreData.userId,
1874
+ device: restoreData.devices[0],
1875
+ keepaliveInterval: _constants2.DEFAULT_KEEPALIVE_INTERVAL,
1876
+ rehomingIntervalMax: _constants2.DEFAULT_REHOMING_INTERVAL_MAX,
1877
+ rehomingIntervalMin: _constants2.DEFAULT_REHOMING_INTERVAL_MIN
1878
+ };
1879
+ var stringToReplace = "".concat(_constants2.DEVICES_ENDPOINT_RESOURCE, "/").concat(restoreData.devices[0].deviceId);
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
+ }
1885
+ this.setActiveMobiusUrl(uri);
1886
+ this.registrationStatus = _types3.RegistrationStatus.ACTIVE;
1887
+ return true;
1888
+ }
1889
+ return false;
1890
+ }
1891
+
1892
+ /**
1893
+ * Invoked to re-register in cases when the registration
1894
+ * is lost due to some failure.
1895
+ * If there are active calls, it will only mark reconnectPending
1896
+ * as true and then retry will happen when this method gets
1897
+ * invoked again on receiving all calls cleared event from
1898
+ * callManager.
1899
+ *
1900
+ */
1901
+ }, {
1902
+ key: "reconnectOnFailure",
1903
+ value: (function () {
1904
+ var _reconnectOnFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee28(caller) {
1905
+ var abort;
1906
+ return _regenerator.default.wrap(function (_context29) {
1907
+ while (1) switch (_context29.prev = _context29.next) {
1908
+ case 0:
1909
+ _Logger.default.info(_constants.METHOD_START_MESSAGE, {
1910
+ method: _constants2.METHODS.RECONNECT_ON_FAILURE,
1911
+ file: _constants2.REGISTRATION_FILE
1912
+ });
1913
+ this.reconnectPending = false;
1914
+ if (this.isDeviceRegistered()) {
1915
+ _context29.next = 4;
1916
+ break;
1917
+ }
1918
+ if (!((0, _keys.default)(this.callManager.getActiveCalls()).length === 0)) {
1919
+ _context29.next = 3;
1920
+ break;
1921
+ }
1922
+ _context29.next = 1;
1923
+ return this.restorePreviousRegistration(caller);
1924
+ case 1:
1925
+ abort = _context29.sent;
1926
+ if (!(!abort && !this.isDeviceRegistered())) {
1927
+ _context29.next = 2;
1928
+ break;
1929
+ }
1930
+ _context29.next = 2;
1931
+ return this.restartRegistration(caller);
1932
+ case 2:
1933
+ _context29.next = 4;
1934
+ break;
1935
+ case 3:
1936
+ this.reconnectPending = true;
1937
+ _Logger.default.info('Active call(s) present, deferred reconnect till call cleanup.', {
1938
+ file: _constants2.REGISTRATION_FILE,
1939
+ method: _constants2.METHODS.RECONNECT_ON_FAILURE
1940
+ });
1941
+ case 4:
1942
+ case "end":
1943
+ return _context29.stop();
1944
+ }
1945
+ }, _callee28, this);
1946
+ }));
1947
+ function reconnectOnFailure(_x22) {
1948
+ return _reconnectOnFailure.apply(this, arguments);
1949
+ }
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;
2071
+ }())
2072
+ }]);
2073
+ }();
2074
+ /*
2075
+ */
2076
+ var createRegistration = exports.createRegistration = function createRegistration(webex, serviceData, mutex, lineEmitter, logLevel, jwe) {
2077
+ return new Registration(webex, serviceData, mutex, lineEmitter, logLevel, jwe);
2078
+ };
2079
+ //# sourceMappingURL=register.js.map