@webex/calling 3.0.0-next.4 → 3.0.0-next.41

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 (316) hide show
  1. package/CHANGELOG.md +1403 -1403
  2. package/README.md +74 -74
  3. package/dist/CallHistory/CallHistory.js +201 -0
  4. package/dist/CallHistory/CallHistory.js.map +1 -0
  5. package/dist/CallHistory/CallHistory.test.js +142 -0
  6. package/dist/CallHistory/CallHistory.test.js.map +1 -0
  7. package/dist/CallHistory/callHistoryFixtures.js +366 -0
  8. package/dist/CallHistory/callHistoryFixtures.js.map +1 -0
  9. package/dist/CallHistory/constants.js +17 -0
  10. package/dist/CallHistory/constants.js.map +1 -0
  11. package/dist/CallHistory/types.js +7 -0
  12. package/dist/CallHistory/types.js.map +1 -0
  13. package/dist/CallSettings/CallSettings.js +279 -0
  14. package/dist/CallSettings/CallSettings.js.map +1 -0
  15. package/dist/CallSettings/CallSettings.test.js +122 -0
  16. package/dist/CallSettings/CallSettings.test.js.map +1 -0
  17. package/dist/CallSettings/UcmBackendConnector.js +216 -0
  18. package/dist/CallSettings/UcmBackendConnector.js.map +1 -0
  19. package/dist/CallSettings/UcmBackendConnector.test.js +259 -0
  20. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -0
  21. package/dist/CallSettings/WxCallBackendConnector.js +547 -0
  22. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -0
  23. package/dist/CallSettings/WxCallBackendConnector.test.js +802 -0
  24. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -0
  25. package/dist/CallSettings/constants.js +19 -0
  26. package/dist/CallSettings/constants.js.map +1 -0
  27. package/dist/CallSettings/testFixtures.js +68 -0
  28. package/dist/CallSettings/testFixtures.js.map +1 -0
  29. package/dist/CallSettings/types.js +7 -0
  30. package/dist/CallSettings/types.js.map +1 -0
  31. package/dist/CallingClient/CallingClient.js +631 -0
  32. package/dist/CallingClient/CallingClient.js.map +1 -0
  33. package/dist/CallingClient/CallingClient.test.js +992 -0
  34. package/dist/CallingClient/CallingClient.test.js.map +1 -0
  35. package/dist/CallingClient/callRecordFixtures.js +101 -0
  36. package/dist/CallingClient/callRecordFixtures.js.map +1 -0
  37. package/dist/CallingClient/calling/CallerId/index.js +267 -0
  38. package/dist/CallingClient/calling/CallerId/index.js.map +1 -0
  39. package/dist/CallingClient/calling/CallerId/index.test.js +274 -0
  40. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -0
  41. package/dist/CallingClient/calling/CallerId/types.js +7 -0
  42. package/dist/CallingClient/calling/CallerId/types.js.map +1 -0
  43. package/dist/CallingClient/calling/call.js +3055 -0
  44. package/dist/CallingClient/calling/call.js.map +1 -0
  45. package/dist/CallingClient/calling/call.test.js +2858 -0
  46. package/dist/CallingClient/calling/call.test.js.map +1 -0
  47. package/dist/CallingClient/calling/callManager.js +432 -0
  48. package/dist/CallingClient/calling/callManager.js.map +1 -0
  49. package/dist/CallingClient/calling/callManager.test.js +683 -0
  50. package/dist/CallingClient/calling/callManager.test.js.map +1 -0
  51. package/dist/CallingClient/calling/index.js +30 -0
  52. package/dist/CallingClient/calling/index.js.map +1 -0
  53. package/dist/CallingClient/calling/types.js +69 -0
  54. package/dist/CallingClient/calling/types.js.map +1 -0
  55. package/dist/CallingClient/callingClientFixtures.js +143 -0
  56. package/dist/CallingClient/callingClientFixtures.js.map +1 -0
  57. package/dist/CallingClient/constants.js +134 -0
  58. package/dist/CallingClient/constants.js.map +1 -0
  59. package/dist/CallingClient/line/index.js +314 -0
  60. package/dist/CallingClient/line/index.js.map +1 -0
  61. package/dist/CallingClient/line/line.test.js +270 -0
  62. package/dist/CallingClient/line/line.test.js.map +1 -0
  63. package/dist/CallingClient/line/types.js +21 -0
  64. package/dist/CallingClient/line/types.js.map +1 -0
  65. package/dist/CallingClient/registration/index.js +19 -0
  66. package/dist/CallingClient/registration/index.js.map +1 -0
  67. package/dist/CallingClient/registration/register.js +1286 -0
  68. package/dist/CallingClient/registration/register.js.map +1 -0
  69. package/dist/CallingClient/registration/register.test.js +839 -0
  70. package/dist/CallingClient/registration/register.test.js.map +1 -0
  71. package/dist/CallingClient/registration/registerFixtures.js +36 -0
  72. package/dist/CallingClient/registration/registerFixtures.js.map +1 -0
  73. package/dist/CallingClient/registration/types.js +7 -0
  74. package/dist/CallingClient/registration/types.js.map +1 -0
  75. package/dist/CallingClient/types.js +7 -0
  76. package/dist/CallingClient/types.js.map +1 -0
  77. package/dist/Contacts/ContactsClient.js +1156 -0
  78. package/dist/Contacts/ContactsClient.js.map +1 -0
  79. package/dist/Contacts/ContactsClient.test.js +725 -0
  80. package/dist/Contacts/ContactsClient.test.js.map +1 -0
  81. package/dist/Contacts/constants.js +28 -0
  82. package/dist/Contacts/constants.js.map +1 -0
  83. package/dist/Contacts/contactFixtures.js +314 -0
  84. package/dist/Contacts/contactFixtures.js.map +1 -0
  85. package/dist/Contacts/types.js +43 -0
  86. package/dist/Contacts/types.js.map +1 -0
  87. package/dist/Errors/catalog/CallError.js +92 -0
  88. package/dist/Errors/catalog/CallError.js.map +1 -0
  89. package/dist/Errors/catalog/CallingDeviceError.js +86 -0
  90. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -0
  91. package/dist/Errors/catalog/ExtendedError.js +44 -0
  92. package/dist/Errors/catalog/ExtendedError.js.map +1 -0
  93. package/dist/Errors/catalog/LineError.js +88 -0
  94. package/dist/Errors/catalog/LineError.js.map +1 -0
  95. package/dist/Errors/index.js +28 -0
  96. package/dist/Errors/index.js.map +1 -0
  97. package/dist/Errors/types.js +57 -0
  98. package/dist/Errors/types.js.map +1 -0
  99. package/dist/Events/impl/index.js +81 -0
  100. package/dist/Events/impl/index.js.map +1 -0
  101. package/dist/Events/types.js +103 -0
  102. package/dist/Events/types.js.map +1 -0
  103. package/dist/Logger/index.js +220 -0
  104. package/dist/Logger/index.js.map +1 -0
  105. package/dist/Logger/index.test.js +62 -0
  106. package/dist/Logger/index.test.js.map +1 -0
  107. package/dist/Logger/types.js +34 -0
  108. package/dist/Logger/types.js.map +1 -0
  109. package/dist/Metrics/index.js +327 -0
  110. package/dist/Metrics/index.js.map +1 -0
  111. package/dist/Metrics/index.test.js +291 -0
  112. package/dist/Metrics/index.test.js.map +1 -0
  113. package/dist/Metrics/types.js +45 -0
  114. package/dist/Metrics/types.js.map +1 -0
  115. package/dist/SDKConnector/index.js +104 -0
  116. package/dist/SDKConnector/index.js.map +1 -0
  117. package/dist/SDKConnector/index.test.js +9 -0
  118. package/dist/SDKConnector/index.test.js.map +1 -0
  119. package/dist/SDKConnector/types.js +7 -0
  120. package/dist/SDKConnector/types.js.map +1 -0
  121. package/dist/SDKConnector/utils.js +39 -0
  122. package/dist/SDKConnector/utils.js.map +1 -0
  123. package/dist/SDKConnector/utils.test.js +9 -0
  124. package/dist/SDKConnector/utils.test.js.map +1 -0
  125. package/dist/Voicemail/BroadworksBackendConnector.js +641 -0
  126. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -0
  127. package/dist/Voicemail/BroadworksBackendConnector.test.js +733 -0
  128. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -0
  129. package/dist/Voicemail/UcmBackendConnector.js +574 -0
  130. package/dist/Voicemail/UcmBackendConnector.js.map +1 -0
  131. package/dist/Voicemail/UcmBackendConnector.test.js +629 -0
  132. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -0
  133. package/dist/Voicemail/Voicemail.js +380 -0
  134. package/dist/Voicemail/Voicemail.js.map +1 -0
  135. package/dist/Voicemail/Voicemail.test.js +226 -0
  136. package/dist/Voicemail/Voicemail.test.js.map +1 -0
  137. package/dist/Voicemail/WxCallBackendConnector.js +547 -0
  138. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -0
  139. package/dist/Voicemail/WxCallBackendConnector.test.js +942 -0
  140. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -0
  141. package/dist/Voicemail/constants.js +37 -0
  142. package/dist/Voicemail/constants.js.map +1 -0
  143. package/dist/Voicemail/types.js +7 -0
  144. package/dist/Voicemail/types.js.map +1 -0
  145. package/dist/Voicemail/voicemailFixture.js +524 -0
  146. package/dist/Voicemail/voicemailFixture.js.map +1 -0
  147. package/dist/api.js +157 -0
  148. package/dist/api.js.map +1 -0
  149. package/dist/common/Utils.js +1257 -0
  150. package/dist/common/Utils.js.map +1 -0
  151. package/dist/common/Utils.test.js +1227 -0
  152. package/dist/common/Utils.test.js.map +1 -0
  153. package/dist/common/constants.js +49 -0
  154. package/dist/common/constants.js.map +1 -0
  155. package/dist/common/index.js +19 -0
  156. package/dist/common/index.js.map +1 -0
  157. package/dist/common/testUtil.js +959 -0
  158. package/dist/common/testUtil.js.map +1 -0
  159. package/dist/common/types.js +66 -0
  160. package/dist/common/types.js.map +1 -0
  161. package/dist/index.js +309 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/module/CallHistory/CallHistory.js +83 -81
  164. package/dist/module/CallHistory/callHistoryFixtures.js +366 -307
  165. package/dist/module/CallHistory/constants.js +9 -9
  166. package/dist/module/CallHistory/types.js +1 -1
  167. package/dist/module/CallSettings/CallSettings.js +65 -65
  168. package/dist/module/CallSettings/UcmBackendConnector.js +100 -100
  169. package/dist/module/CallSettings/WxCallBackendConnector.js +287 -287
  170. package/dist/module/CallSettings/constants.js +11 -11
  171. package/dist/module/CallSettings/testFixtures.js +62 -62
  172. package/dist/module/CallSettings/types.js +1 -1
  173. package/dist/module/CallingClient/CallingClient.js +265 -248
  174. package/dist/module/CallingClient/callRecordFixtures.js +93 -93
  175. package/dist/module/CallingClient/calling/CallerId/index.js +149 -169
  176. package/dist/module/CallingClient/calling/CallerId/types.js +1 -1
  177. package/dist/module/CallingClient/calling/call.js +1701 -1658
  178. package/dist/module/CallingClient/calling/callManager.js +278 -284
  179. package/dist/module/CallingClient/calling/index.js +2 -2
  180. package/dist/module/CallingClient/calling/types.js +53 -53
  181. package/dist/module/CallingClient/callingClientFixtures.js +156 -38
  182. package/dist/module/CallingClient/constants.js +126 -122
  183. package/dist/module/CallingClient/line/index.js +155 -158
  184. package/dist/module/CallingClient/line/types.js +10 -15
  185. package/dist/module/CallingClient/registration/index.js +1 -1
  186. package/dist/module/CallingClient/registration/register.js +515 -507
  187. package/dist/module/CallingClient/registration/registerFixtures.js +28 -28
  188. package/dist/module/CallingClient/registration/types.js +1 -1
  189. package/dist/module/CallingClient/types.js +1 -1
  190. package/dist/module/Contacts/ContactsClient.js +487 -484
  191. package/dist/module/Contacts/constants.js +20 -20
  192. package/dist/module/Contacts/contactFixtures.js +284 -284
  193. package/dist/module/Contacts/types.js +10 -10
  194. package/dist/module/Errors/catalog/CallError.js +26 -26
  195. package/dist/module/Errors/catalog/CallingDeviceError.js +18 -18
  196. package/dist/module/Errors/catalog/ExtendedError.js +10 -10
  197. package/dist/module/Errors/catalog/LineError.js +24 -24
  198. package/dist/module/Errors/index.js +3 -2
  199. package/dist/module/Errors/types.js +48 -48
  200. package/dist/module/Events/impl/index.js +19 -19
  201. package/dist/module/Events/types.js +85 -83
  202. package/dist/module/Logger/index.js +114 -114
  203. package/dist/module/Logger/types.js +25 -25
  204. package/dist/module/Metrics/index.js +232 -232
  205. package/dist/module/Metrics/types.js +37 -37
  206. package/dist/module/SDKConnector/index.js +39 -39
  207. package/dist/module/SDKConnector/types.js +1 -1
  208. package/dist/module/SDKConnector/utils.js +12 -12
  209. package/dist/module/Voicemail/BroadworksBackendConnector.js +291 -291
  210. package/dist/module/Voicemail/UcmBackendConnector.js +279 -279
  211. package/dist/module/Voicemail/Voicemail.js +110 -110
  212. package/dist/module/Voicemail/WxCallBackendConnector.js +279 -279
  213. package/dist/module/Voicemail/constants.js +29 -29
  214. package/dist/module/Voicemail/types.js +1 -1
  215. package/dist/module/Voicemail/voicemailFixture.js +510 -510
  216. package/dist/module/api.js +7 -6
  217. package/dist/module/common/Utils.js +797 -802
  218. package/dist/module/common/constants.js +41 -41
  219. package/dist/module/common/index.js +1 -1
  220. package/dist/module/common/testUtil.js +939 -938
  221. package/dist/module/common/types.js +58 -57
  222. package/dist/module/index.js +17 -8
  223. package/dist/types/CallHistory/CallHistory.d.ts +18 -17
  224. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  225. package/dist/types/CallHistory/callHistoryFixtures.d.ts +95 -94
  226. package/dist/types/CallHistory/callHistoryFixtures.d.ts.map +1 -1
  227. package/dist/types/CallHistory/constants.d.ts +9 -9
  228. package/dist/types/CallHistory/types.d.ts +18 -18
  229. package/dist/types/CallSettings/CallSettings.d.ts +19 -19
  230. package/dist/types/CallSettings/CallSettings.d.ts.map +1 -1
  231. package/dist/types/CallSettings/UcmBackendConnector.d.ts +19 -19
  232. package/dist/types/CallSettings/UcmBackendConnector.d.ts.map +1 -1
  233. package/dist/types/CallSettings/WxCallBackendConnector.d.ts +21 -21
  234. package/dist/types/CallSettings/constants.d.ts +11 -11
  235. package/dist/types/CallSettings/testFixtures.d.ts +15 -15
  236. package/dist/types/CallSettings/types.d.ts +108 -107
  237. package/dist/types/CallSettings/types.d.ts.map +1 -1
  238. package/dist/types/CallingClient/CallingClient.d.ts +37 -35
  239. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  240. package/dist/types/CallingClient/callRecordFixtures.d.ts +3 -3
  241. package/dist/types/CallingClient/calling/CallerId/index.d.ts +17 -17
  242. package/dist/types/CallingClient/calling/CallerId/index.d.ts.map +1 -1
  243. package/dist/types/CallingClient/calling/CallerId/types.d.ts +41 -41
  244. package/dist/types/CallingClient/calling/CallerId/types.d.ts.map +1 -1
  245. package/dist/types/CallingClient/calling/call.d.ts +98 -96
  246. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  247. package/dist/types/CallingClient/calling/callManager.d.ts +24 -25
  248. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  249. package/dist/types/CallingClient/calling/index.d.ts +2 -2
  250. package/dist/types/CallingClient/calling/types.d.ts +206 -206
  251. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  252. package/dist/types/CallingClient/callingClientFixtures.d.ts +86 -18
  253. package/dist/types/CallingClient/callingClientFixtures.d.ts.map +1 -1
  254. package/dist/types/CallingClient/constants.d.ts +126 -122
  255. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  256. package/dist/types/CallingClient/line/index.d.ts +43 -43
  257. package/dist/types/CallingClient/line/index.d.ts.map +1 -1
  258. package/dist/types/CallingClient/line/types.d.ts +43 -55
  259. package/dist/types/CallingClient/line/types.d.ts.map +1 -1
  260. package/dist/types/CallingClient/registration/index.d.ts +1 -1
  261. package/dist/types/CallingClient/registration/register.d.ts +64 -64
  262. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  263. package/dist/types/CallingClient/registration/registerFixtures.d.ts +28 -28
  264. package/dist/types/CallingClient/registration/types.d.ts +20 -20
  265. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  266. package/dist/types/CallingClient/types.d.ts +31 -29
  267. package/dist/types/CallingClient/types.d.ts.map +1 -1
  268. package/dist/types/Contacts/ContactsClient.d.ts +27 -26
  269. package/dist/types/Contacts/ContactsClient.d.ts.map +1 -1
  270. package/dist/types/Contacts/constants.d.ts +19 -19
  271. package/dist/types/Contacts/contactFixtures.d.ts +280 -280
  272. package/dist/types/Contacts/types.d.ts +74 -72
  273. package/dist/types/Contacts/types.d.ts.map +1 -1
  274. package/dist/types/Errors/catalog/CallError.d.ts +11 -11
  275. package/dist/types/Errors/catalog/CallingDeviceError.d.ts +10 -10
  276. package/dist/types/Errors/catalog/CallingDeviceError.d.ts.map +1 -1
  277. package/dist/types/Errors/catalog/ExtendedError.d.ts +6 -6
  278. package/dist/types/Errors/catalog/LineError.d.ts +10 -10
  279. package/dist/types/Errors/catalog/LineError.d.ts.map +1 -1
  280. package/dist/types/Errors/index.d.ts +3 -2
  281. package/dist/types/Errors/index.d.ts.map +1 -1
  282. package/dist/types/Errors/types.d.ts +59 -60
  283. package/dist/types/Errors/types.d.ts.map +1 -1
  284. package/dist/types/Events/impl/index.d.ts +8 -8
  285. package/dist/types/Events/types.d.ts +311 -288
  286. package/dist/types/Events/types.d.ts.map +1 -1
  287. package/dist/types/Logger/index.d.ts +12 -12
  288. package/dist/types/Logger/types.d.ts +25 -25
  289. package/dist/types/Metrics/index.d.ts +5 -5
  290. package/dist/types/Metrics/types.d.ts +42 -42
  291. package/dist/types/SDKConnector/index.d.ts +12 -12
  292. package/dist/types/SDKConnector/types.d.ts +129 -128
  293. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  294. package/dist/types/SDKConnector/utils.d.ts +5 -5
  295. package/dist/types/Voicemail/BroadworksBackendConnector.d.ts +27 -27
  296. package/dist/types/Voicemail/UcmBackendConnector.d.ts +34 -34
  297. package/dist/types/Voicemail/Voicemail.d.ts +27 -27
  298. package/dist/types/Voicemail/Voicemail.d.ts.map +1 -1
  299. package/dist/types/Voicemail/WxCallBackendConnector.d.ts +23 -23
  300. package/dist/types/Voicemail/constants.d.ts +29 -29
  301. package/dist/types/Voicemail/types.d.ts +133 -133
  302. package/dist/types/Voicemail/types.d.ts.map +1 -1
  303. package/dist/types/Voicemail/voicemailFixture.d.ts +417 -417
  304. package/dist/types/api.d.ts +16 -16
  305. package/dist/types/api.d.ts.map +1 -1
  306. package/dist/types/common/Utils.d.ts +34 -34
  307. package/dist/types/common/Utils.d.ts.map +1 -1
  308. package/dist/types/common/constants.d.ts +41 -41
  309. package/dist/types/common/index.d.ts +1 -1
  310. package/dist/types/common/testUtil.d.ts +3612 -3611
  311. package/dist/types/common/testUtil.d.ts.map +1 -1
  312. package/dist/types/common/types.d.ts +192 -191
  313. package/dist/types/common/types.d.ts.map +1 -1
  314. package/dist/types/index.d.ts +21 -8
  315. package/dist/types/index.d.ts.map +1 -1
  316. package/package.json +5 -3
@@ -1,248 +1,265 @@
1
- import * as Media from '@webex/internal-media-core';
2
- import { Mutex } from 'async-mutex';
3
- import { filterMobiusUris, handleCallingClientErrors, validateServiceData } from '../common/Utils';
4
- import { LOGGER } from '../Logger/types';
5
- import SDKConnector from '../SDKConnector';
6
- import { Eventing } from '../Events/impl';
7
- import { MOBIUS_EVENT_KEYS, SessionType, CALLING_CLIENT_EVENT_KEYS, } from '../Events/types';
8
- import { ServiceIndicator, ALLOWED_SERVICES, HTTP_METHODS, } from '../common/types';
9
- import log from '../Logger';
10
- import { getCallManager } from './calling/callManager';
11
- import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL, IP_ENDPOINT, SPARK_USER_AGENT, URL_ENDPOINT, NETWORK_FLAP_TIMEOUT, } from './constants';
12
- import Line from './line';
13
- import { LINE_EVENTS, LineStatus } from './line/types';
14
- import { METRIC_EVENT, REG_ACTION, METRIC_TYPE } from '../Metrics/types';
15
- import { getMetricManager } from '../Metrics';
16
- export class CallingClient extends Eventing {
17
- sdkConnector;
18
- webex;
19
- mutex;
20
- callManager;
21
- metricManager;
22
- sdkConfig;
23
- primaryMobiusUris;
24
- backupMobiusUris;
25
- mediaEngine;
26
- lineDict = {};
27
- constructor(webex, config) {
28
- super();
29
- this.sdkConnector = SDKConnector;
30
- if (!this.sdkConnector.getWebex()) {
31
- SDKConnector.setWebex(webex);
32
- }
33
- this.mutex = new Mutex();
34
- this.webex = this.sdkConnector.getWebex();
35
- this.sdkConfig = config;
36
- const serviceData = this.sdkConfig?.serviceData?.indicator
37
- ? this.sdkConfig.serviceData
38
- : { indicator: ServiceIndicator.CALLING, domain: '' };
39
- const logLevel = this.sdkConfig?.logger?.level ? this.sdkConfig.logger.level : LOGGER.ERROR;
40
- validateServiceData(serviceData);
41
- this.callManager = getCallManager(this.webex, serviceData.indicator);
42
- this.metricManager = getMetricManager(this.webex, serviceData.indicator);
43
- this.mediaEngine = Media;
44
- this.primaryMobiusUris = [];
45
- this.backupMobiusUris = [];
46
- this.registerSessionsListener();
47
- log.setLogger(logLevel, CALLING_CLIENT_FILE);
48
- this.registerCallsClearedListener();
49
- }
50
- async init() {
51
- await this.getMobiusServers();
52
- await this.createLine();
53
- this.detectNetworkChange();
54
- }
55
- async detectNetworkChange() {
56
- let retry = false;
57
- const line = Object.values(this.lineDict)[0];
58
- setInterval(async () => {
59
- if (!this.webex.internal.mercury.connected &&
60
- !retry &&
61
- !Object.keys(this.callManager.getActiveCalls()).length) {
62
- log.warn(`Network has flapped, waiting for mercury connection to be up`, {
63
- file: CALLING_CLIENT_FILE,
64
- method: this.detectNetworkChange.name,
65
- });
66
- line.lineEmitter(LINE_EVENTS.UNREGISTERED);
67
- line.registration.clearKeepaliveTimer();
68
- retry = true;
69
- }
70
- if (retry && this.webex.internal.mercury.connected) {
71
- retry = await line.registration.handleConnectionRestoration(retry);
72
- }
73
- }, NETWORK_FLAP_TIMEOUT);
74
- }
75
- async getClientRegionInfo() {
76
- const regionInfo = {};
77
- try {
78
- const temp = await this.webex.request({
79
- uri: `${this.webex.internal.services._serviceUrls.mobius}${URL_ENDPOINT}${IP_ENDPOINT}`,
80
- method: HTTP_METHODS.GET,
81
- headers: {
82
- [CISCO_DEVICE_URL]: this.webex.internal.device.url,
83
- [SPARK_USER_AGENT]: CALLING_USER_AGENT,
84
- },
85
- service: ALLOWED_SERVICES.MOBIUS,
86
- });
87
- const myIP = temp.body.ipv4;
88
- const response = await this.webex.request({
89
- uri: `${DISCOVERY_URL}/${myIP}`,
90
- method: HTTP_METHODS.GET,
91
- addAuthHeader: false,
92
- headers: {
93
- [SPARK_USER_AGENT]: null,
94
- },
95
- });
96
- const clientRegionInfo = response.body;
97
- regionInfo.clientRegion = clientRegionInfo?.clientRegion ? clientRegionInfo.clientRegion : '';
98
- regionInfo.countryCode = clientRegionInfo?.countryCode ? clientRegionInfo.countryCode : '';
99
- }
100
- catch (err) {
101
- handleCallingClientErrors(err, (clientError) => {
102
- this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, clientError);
103
- this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
104
- }, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
105
- regionInfo.clientRegion = '';
106
- regionInfo.countryCode = '';
107
- }
108
- return regionInfo;
109
- }
110
- async getMobiusServers() {
111
- let useDefault = false;
112
- let clientRegion;
113
- let countryCode;
114
- if (this.sdkConfig?.discovery?.country && this.sdkConfig?.discovery?.region) {
115
- log.info('Updating region and country from the SDK config', {
116
- file: CALLING_CLIENT_FILE,
117
- method: GET_MOBIUS_SERVERS_UTIL,
118
- });
119
- clientRegion = this.sdkConfig?.discovery?.region;
120
- countryCode = this.sdkConfig?.discovery?.country;
121
- }
122
- else {
123
- log.info('Updating region and country through Region discovery', {
124
- file: CALLING_CLIENT_FILE,
125
- method: GET_MOBIUS_SERVERS_UTIL,
126
- });
127
- const regionInfo = await this.getClientRegionInfo();
128
- clientRegion = regionInfo.clientRegion;
129
- countryCode = regionInfo.countryCode;
130
- }
131
- if (clientRegion && countryCode) {
132
- log.log(`Found Region: ${clientRegion} and country: ${countryCode}, going to fetch Mobius server`, '');
133
- try {
134
- const temp = await this.webex.request({
135
- uri: `${this.webex.internal.services._serviceUrls.mobius}${URL_ENDPOINT}?regionCode=${clientRegion}&countryCode=${countryCode}`,
136
- method: HTTP_METHODS.GET,
137
- headers: {
138
- [CISCO_DEVICE_URL]: this.webex.internal.device.url,
139
- [SPARK_USER_AGENT]: CALLING_USER_AGENT,
140
- },
141
- service: ALLOWED_SERVICES.MOBIUS,
142
- });
143
- log.log('Mobius Server found for the region', '');
144
- const mobiusServers = temp.body;
145
- const mobiusUris = filterMobiusUris(mobiusServers, this.webex.internal.services._serviceUrls.mobius);
146
- this.primaryMobiusUris = mobiusUris.primary;
147
- this.backupMobiusUris = mobiusUris.backup;
148
- log.info(`Final list of Mobius Servers, primary: ${mobiusUris.primary} and backup: ${mobiusUris.backup}`, '');
149
- }
150
- catch (err) {
151
- handleCallingClientErrors(err, (clientError) => {
152
- this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, clientError);
153
- this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
154
- }, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
155
- useDefault = true;
156
- }
157
- }
158
- else {
159
- useDefault = true;
160
- }
161
- if (useDefault) {
162
- log.warn('Error in finding Mobius Servers. Will use the default URL.', '');
163
- this.primaryMobiusUris = [
164
- `${this.webex.internal.services._serviceUrls.mobius}${URL_ENDPOINT}`,
165
- ];
166
- }
167
- }
168
- registerCallsClearedListener() {
169
- const logContext = {
170
- file: CALLING_CLIENT_FILE,
171
- method: this.registerCallsClearedListener.name,
172
- };
173
- log.log('Registering listener for all calls cleared event', logContext);
174
- this.callManager.on(CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED, this.callsClearedHandler);
175
- }
176
- callsClearedHandler = async () => {
177
- const { registration } = Object.values(this.lineDict)[0];
178
- if (!registration.isDeviceRegistered()) {
179
- await this.mutex.runExclusive(async () => {
180
- if (registration.isReconnectPending()) {
181
- log.log('All calls cleared, reconnecting', {
182
- file: CALLING_CLIENT_FILE,
183
- method: CALLS_CLEARED_HANDLER_UTIL,
184
- });
185
- await registration.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);
186
- }
187
- });
188
- }
189
- };
190
- getLoggingLevel() {
191
- return log.getLogLevel();
192
- }
193
- getSDKConnector() {
194
- return this.sdkConnector;
195
- }
196
- registerSessionsListener() {
197
- this.sdkConnector.registerListener(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE, async (event) => {
198
- if (event && event.data.userSessions.userSessions) {
199
- const sessionArr = event?.data.userSessions.userSessions;
200
- if (sessionArr.length === 1) {
201
- if (sessionArr[0].sessionType !== SessionType.WEBEX_CALLING) {
202
- return;
203
- }
204
- }
205
- for (let i = 0; i < sessionArr.length; i += 1) {
206
- if (sessionArr[i].sessionType !== SessionType.WEBEX_CALLING) {
207
- sessionArr.splice(i, 1);
208
- }
209
- }
210
- this.emit(CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO, event);
211
- }
212
- });
213
- }
214
- async createLine() {
215
- const line = new Line(this.webex.internal.device.userId, this.webex.internal.device.url, LineStatus.INACTIVE, this.mutex, this.primaryMobiusUris, this.backupMobiusUris, this.getLoggingLevel(), this.sdkConfig?.serviceData);
216
- this.lineDict[line.lineId] = line;
217
- }
218
- getLines() {
219
- return this.lineDict;
220
- }
221
- getActiveCalls() {
222
- const activeCalls = {};
223
- const calls = this.callManager.getActiveCalls();
224
- Object.keys(calls).forEach((correlationId) => {
225
- const call = calls[correlationId];
226
- if (!activeCalls[call.lineId]) {
227
- activeCalls[call.lineId] = [];
228
- }
229
- activeCalls[call.lineId].push(call);
230
- });
231
- return activeCalls;
232
- }
233
- getConnectedCall() {
234
- let connectCall;
235
- const calls = this.callManager.getActiveCalls();
236
- Object.keys(calls).forEach((correlationId) => {
237
- if (calls[correlationId].isConnected() && !calls[correlationId].isHeld()) {
238
- connectCall = calls[correlationId];
239
- }
240
- });
241
- return connectCall;
242
- }
243
- }
244
- export const createClient = async (webex, config) => {
245
- const callingClientInstance = new CallingClient(webex, config);
246
- await callingClientInstance.init();
247
- return callingClientInstance;
248
- };
1
+ import * as Media from '@webex/internal-media-core';
2
+ import { Mutex } from 'async-mutex';
3
+ import { filterMobiusUris, handleCallingClientErrors, validateServiceData } from '../common/Utils';
4
+ import { LOGGER } from '../Logger/types';
5
+ import SDKConnector from '../SDKConnector';
6
+ import { Eventing } from '../Events/impl';
7
+ import { MOBIUS_EVENT_KEYS, SessionType, CALLING_CLIENT_EVENT_KEYS, } from '../Events/types';
8
+ import { ServiceIndicator, ALLOWED_SERVICES, HTTP_METHODS, RegistrationStatus, } from '../common/types';
9
+ import log from '../Logger';
10
+ import { getCallManager } from './calling/callManager';
11
+ import { CALLING_CLIENT_FILE, CALLS_CLEARED_HANDLER_UTIL, CALLING_USER_AGENT, CISCO_DEVICE_URL, DISCOVERY_URL, GET_MOBIUS_SERVERS_UTIL, IP_ENDPOINT, SPARK_USER_AGENT, URL_ENDPOINT, NETWORK_FLAP_TIMEOUT, API_V1, MOBIUS_US_PROD, MOBIUS_EU_PROD, MOBIUS_US_INT, MOBIUS_EU_INT, } from './constants';
12
+ import Line from './line';
13
+ import { METRIC_EVENT, REG_ACTION, METRIC_TYPE } from '../Metrics/types';
14
+ import { getMetricManager } from '../Metrics';
15
+ export class CallingClient extends Eventing {
16
+ sdkConnector;
17
+ webex;
18
+ mutex;
19
+ callManager;
20
+ metricManager;
21
+ sdkConfig;
22
+ primaryMobiusUris;
23
+ backupMobiusUris;
24
+ mobiusClusters;
25
+ mobiusHost;
26
+ mediaEngine;
27
+ lineDict = {};
28
+ constructor(webex, config) {
29
+ super();
30
+ this.sdkConnector = SDKConnector;
31
+ if (!this.sdkConnector.getWebex()) {
32
+ SDKConnector.setWebex(webex);
33
+ }
34
+ this.mutex = new Mutex();
35
+ this.webex = this.sdkConnector.getWebex();
36
+ this.sdkConfig = config;
37
+ const serviceData = this.sdkConfig?.serviceData?.indicator
38
+ ? this.sdkConfig.serviceData
39
+ : { indicator: ServiceIndicator.CALLING, domain: '' };
40
+ const logLevel = this.sdkConfig?.logger?.level ? this.sdkConfig.logger.level : LOGGER.ERROR;
41
+ validateServiceData(serviceData);
42
+ this.callManager = getCallManager(this.webex, serviceData.indicator);
43
+ this.metricManager = getMetricManager(this.webex, serviceData.indicator);
44
+ this.mediaEngine = Media;
45
+ this.primaryMobiusUris = [];
46
+ this.backupMobiusUris = [];
47
+ this.mobiusClusters =
48
+ this.webex.internal.services._hostCatalog[MOBIUS_US_PROD] ||
49
+ this.webex.internal.services._hostCatalog[MOBIUS_EU_PROD] ||
50
+ this.webex.internal.services._hostCatalog[MOBIUS_US_INT] ||
51
+ this.webex.internal.services._hostCatalog[MOBIUS_EU_INT];
52
+ this.mobiusHost = '';
53
+ this.registerSessionsListener();
54
+ log.setLogger(logLevel, CALLING_CLIENT_FILE);
55
+ this.registerCallsClearedListener();
56
+ }
57
+ async init() {
58
+ await this.getMobiusServers();
59
+ await this.createLine();
60
+ this.detectNetworkChange();
61
+ }
62
+ async detectNetworkChange() {
63
+ let retry = false;
64
+ const line = Object.values(this.lineDict)[0];
65
+ setInterval(async () => {
66
+ if (!this.webex.internal.mercury.connected &&
67
+ !retry &&
68
+ !Object.keys(this.callManager.getActiveCalls()).length) {
69
+ log.warn(`Network has flapped, waiting for mercury connection to be up`, {
70
+ file: CALLING_CLIENT_FILE,
71
+ method: this.detectNetworkChange.name,
72
+ });
73
+ line.registration.clearKeepaliveTimer();
74
+ retry = true;
75
+ }
76
+ if (retry && this.webex.internal.mercury.connected) {
77
+ if (line.getStatus() !== RegistrationStatus.IDLE) {
78
+ retry = await line.registration.handleConnectionRestoration(retry);
79
+ }
80
+ else {
81
+ retry = false;
82
+ }
83
+ }
84
+ }, NETWORK_FLAP_TIMEOUT);
85
+ }
86
+ async getClientRegionInfo() {
87
+ const regionInfo = {};
88
+ for (const mobius of this.mobiusClusters) {
89
+ this.mobiusHost = `https://${mobius.host}${API_V1}`;
90
+ try {
91
+ const temp = await this.webex.request({
92
+ uri: `${this.mobiusHost}${URL_ENDPOINT}${IP_ENDPOINT}`,
93
+ method: HTTP_METHODS.GET,
94
+ headers: {
95
+ [CISCO_DEVICE_URL]: this.webex.internal.device.url,
96
+ [SPARK_USER_AGENT]: CALLING_USER_AGENT,
97
+ },
98
+ service: ALLOWED_SERVICES.MOBIUS,
99
+ });
100
+ const myIP = temp.body.ipv4;
101
+ const response = await this.webex.request({
102
+ uri: `${DISCOVERY_URL}/${myIP}`,
103
+ method: HTTP_METHODS.GET,
104
+ addAuthHeader: false,
105
+ headers: {
106
+ [SPARK_USER_AGENT]: null,
107
+ },
108
+ });
109
+ const clientRegionInfo = response.body;
110
+ regionInfo.clientRegion = clientRegionInfo?.clientRegion
111
+ ? clientRegionInfo.clientRegion
112
+ : '';
113
+ regionInfo.countryCode = clientRegionInfo?.countryCode ? clientRegionInfo.countryCode : '';
114
+ break;
115
+ }
116
+ catch (err) {
117
+ handleCallingClientErrors(err, (clientError) => {
118
+ this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, clientError);
119
+ this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
120
+ }, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
121
+ regionInfo.clientRegion = '';
122
+ regionInfo.countryCode = '';
123
+ }
124
+ }
125
+ return regionInfo;
126
+ }
127
+ async getMobiusServers() {
128
+ let useDefault = false;
129
+ let clientRegion;
130
+ let countryCode;
131
+ if (this.sdkConfig?.discovery?.country && this.sdkConfig?.discovery?.region) {
132
+ log.info('Updating region and country from the SDK config', {
133
+ file: CALLING_CLIENT_FILE,
134
+ method: GET_MOBIUS_SERVERS_UTIL,
135
+ });
136
+ clientRegion = this.sdkConfig?.discovery?.region;
137
+ countryCode = this.sdkConfig?.discovery?.country;
138
+ this.mobiusHost = this.webex.internal.services._serviceUrls.mobius;
139
+ }
140
+ else {
141
+ log.info('Updating region and country through Region discovery', {
142
+ file: CALLING_CLIENT_FILE,
143
+ method: GET_MOBIUS_SERVERS_UTIL,
144
+ });
145
+ const regionInfo = await this.getClientRegionInfo();
146
+ clientRegion = regionInfo.clientRegion;
147
+ countryCode = regionInfo.countryCode;
148
+ }
149
+ if (clientRegion && countryCode) {
150
+ log.log(`Found Region: ${clientRegion} and country: ${countryCode}, going to fetch Mobius server`, '');
151
+ try {
152
+ const temp = await this.webex.request({
153
+ uri: `${this.mobiusHost}${URL_ENDPOINT}?regionCode=${clientRegion}&countryCode=${countryCode}`,
154
+ method: HTTP_METHODS.GET,
155
+ headers: {
156
+ [CISCO_DEVICE_URL]: this.webex.internal.device.url,
157
+ [SPARK_USER_AGENT]: CALLING_USER_AGENT,
158
+ },
159
+ service: ALLOWED_SERVICES.MOBIUS,
160
+ });
161
+ log.log('Mobius Server found for the region', '');
162
+ const mobiusServers = temp.body;
163
+ const mobiusUris = filterMobiusUris(mobiusServers, this.mobiusHost);
164
+ this.primaryMobiusUris = mobiusUris.primary;
165
+ this.backupMobiusUris = mobiusUris.backup;
166
+ log.info(`Final list of Mobius Servers, primary: ${mobiusUris.primary} and backup: ${mobiusUris.backup}`, '');
167
+ }
168
+ catch (err) {
169
+ handleCallingClientErrors(err, (clientError) => {
170
+ this.metricManager.submitRegistrationMetric(METRIC_EVENT.REGISTRATION_ERROR, REG_ACTION.REGISTER, METRIC_TYPE.BEHAVIORAL, clientError);
171
+ this.emit(CALLING_CLIENT_EVENT_KEYS.ERROR, clientError);
172
+ }, { method: GET_MOBIUS_SERVERS_UTIL, file: CALLING_CLIENT_FILE });
173
+ useDefault = true;
174
+ }
175
+ }
176
+ else {
177
+ useDefault = true;
178
+ }
179
+ if (useDefault) {
180
+ log.warn(`Couldn't resolve the region and country code. Defaulting to the catalog entries to discover mobius servers`, '');
181
+ this.mobiusHost = `https://${this.mobiusClusters[0].host}${API_V1}`;
182
+ this.primaryMobiusUris = [`${this.mobiusHost}${URL_ENDPOINT}`];
183
+ }
184
+ }
185
+ registerCallsClearedListener() {
186
+ const logContext = {
187
+ file: CALLING_CLIENT_FILE,
188
+ method: this.registerCallsClearedListener.name,
189
+ };
190
+ log.log('Registering listener for all calls cleared event', logContext);
191
+ this.callManager.on(CALLING_CLIENT_EVENT_KEYS.ALL_CALLS_CLEARED, this.callsClearedHandler);
192
+ }
193
+ callsClearedHandler = async () => {
194
+ const { registration } = Object.values(this.lineDict)[0];
195
+ if (!registration.isDeviceRegistered()) {
196
+ await this.mutex.runExclusive(async () => {
197
+ if (registration.isReconnectPending()) {
198
+ log.log('All calls cleared, reconnecting', {
199
+ file: CALLING_CLIENT_FILE,
200
+ method: CALLS_CLEARED_HANDLER_UTIL,
201
+ });
202
+ await registration.reconnectOnFailure(CALLS_CLEARED_HANDLER_UTIL);
203
+ }
204
+ });
205
+ }
206
+ };
207
+ getLoggingLevel() {
208
+ return log.getLogLevel();
209
+ }
210
+ getSDKConnector() {
211
+ return this.sdkConnector;
212
+ }
213
+ registerSessionsListener() {
214
+ this.sdkConnector.registerListener(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE, async (event) => {
215
+ if (event && event.data.userSessions.userSessions) {
216
+ const sessionArr = event?.data.userSessions.userSessions;
217
+ if (sessionArr.length === 1) {
218
+ if (sessionArr[0].sessionType !== SessionType.WEBEX_CALLING) {
219
+ return;
220
+ }
221
+ }
222
+ for (let i = 0; i < sessionArr.length; i += 1) {
223
+ if (sessionArr[i].sessionType !== SessionType.WEBEX_CALLING) {
224
+ sessionArr.splice(i, 1);
225
+ }
226
+ }
227
+ this.emit(CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO, event);
228
+ }
229
+ });
230
+ }
231
+ async createLine() {
232
+ const line = new Line(this.webex.internal.device.userId, this.webex.internal.device.url, this.mutex, this.primaryMobiusUris, this.backupMobiusUris, this.getLoggingLevel(), this.sdkConfig?.serviceData);
233
+ this.lineDict[line.lineId] = line;
234
+ }
235
+ getLines() {
236
+ return this.lineDict;
237
+ }
238
+ getActiveCalls() {
239
+ const activeCalls = {};
240
+ const calls = this.callManager.getActiveCalls();
241
+ Object.keys(calls).forEach((correlationId) => {
242
+ const call = calls[correlationId];
243
+ if (!activeCalls[call.lineId]) {
244
+ activeCalls[call.lineId] = [];
245
+ }
246
+ activeCalls[call.lineId].push(call);
247
+ });
248
+ return activeCalls;
249
+ }
250
+ getConnectedCall() {
251
+ let connectCall;
252
+ const calls = this.callManager.getActiveCalls();
253
+ Object.keys(calls).forEach((correlationId) => {
254
+ if (calls[correlationId].isConnected() && !calls[correlationId].isHeld()) {
255
+ connectCall = calls[correlationId];
256
+ }
257
+ });
258
+ return connectCall;
259
+ }
260
+ }
261
+ export const createClient = async (webex, config) => {
262
+ const callingClientInstance = new CallingClient(webex, config);
263
+ await callingClientInstance.init();
264
+ return callingClientInstance;
265
+ };