@webex/calling 3.11.0 → 3.12.0-mobius-socket.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) 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/CallSettings/CallSettings.js +311 -0
  12. package/dist/CallSettings/CallSettings.js.map +1 -0
  13. package/dist/CallSettings/CallSettings.test.js +122 -0
  14. package/dist/CallSettings/CallSettings.test.js.map +1 -0
  15. package/dist/CallSettings/UcmBackendConnector.js +308 -0
  16. package/dist/CallSettings/UcmBackendConnector.js.map +1 -0
  17. package/dist/CallSettings/UcmBackendConnector.test.js +411 -0
  18. package/dist/CallSettings/UcmBackendConnector.test.js.map +1 -0
  19. package/dist/CallSettings/WxCallBackendConnector.js +597 -0
  20. package/dist/CallSettings/WxCallBackendConnector.js.map +1 -0
  21. package/dist/CallSettings/WxCallBackendConnector.test.js +904 -0
  22. package/dist/CallSettings/WxCallBackendConnector.test.js.map +1 -0
  23. package/dist/CallSettings/constants.js +31 -0
  24. package/dist/CallSettings/constants.js.map +1 -0
  25. package/dist/CallSettings/testFixtures.js +68 -0
  26. package/dist/CallSettings/testFixtures.js.map +1 -0
  27. package/dist/CallSettings/types.js +7 -0
  28. package/dist/CallSettings/types.js.map +1 -0
  29. package/dist/CallingClient/CallingClient.js +1346 -0
  30. package/dist/CallingClient/CallingClient.js.map +1 -0
  31. package/dist/CallingClient/CallingClient.test.js +1352 -0
  32. package/dist/CallingClient/CallingClient.test.js.map +1 -0
  33. package/dist/CallingClient/callRecordFixtures.js +101 -0
  34. package/dist/CallingClient/callRecordFixtures.js.map +1 -0
  35. package/dist/CallingClient/calling/CallerId/index.js +275 -0
  36. package/dist/CallingClient/calling/CallerId/index.js.map +1 -0
  37. package/dist/CallingClient/calling/CallerId/index.test.js +275 -0
  38. package/dist/CallingClient/calling/CallerId/index.test.js.map +1 -0
  39. package/dist/CallingClient/calling/CallerId/types.js +7 -0
  40. package/dist/CallingClient/calling/CallerId/types.js.map +1 -0
  41. package/dist/CallingClient/calling/call.js +3489 -0
  42. package/dist/CallingClient/calling/call.js.map +1 -0
  43. package/dist/CallingClient/calling/call.test.js +3653 -0
  44. package/dist/CallingClient/calling/call.test.js.map +1 -0
  45. package/dist/CallingClient/calling/callManager.js +481 -0
  46. package/dist/CallingClient/calling/callManager.js.map +1 -0
  47. package/dist/CallingClient/calling/callManager.test.js +776 -0
  48. package/dist/CallingClient/calling/callManager.test.js.map +1 -0
  49. package/dist/CallingClient/calling/index.js +30 -0
  50. package/dist/CallingClient/calling/index.js.map +1 -0
  51. package/dist/CallingClient/calling/types.js +76 -0
  52. package/dist/CallingClient/calling/types.js.map +1 -0
  53. package/dist/CallingClient/callingClientFixtures.js +143 -0
  54. package/dist/CallingClient/callingClientFixtures.js.map +1 -0
  55. package/dist/CallingClient/constants.js +249 -0
  56. package/dist/CallingClient/constants.js.map +1 -0
  57. package/dist/CallingClient/line/index.js +332 -0
  58. package/dist/CallingClient/line/index.js.map +1 -0
  59. package/dist/CallingClient/line/line.test.js +342 -0
  60. package/dist/CallingClient/line/line.test.js.map +1 -0
  61. package/dist/CallingClient/line/types.js +21 -0
  62. package/dist/CallingClient/line/types.js.map +1 -0
  63. package/dist/CallingClient/registration/index.js +19 -0
  64. package/dist/CallingClient/registration/index.js.map +1 -0
  65. package/dist/CallingClient/registration/register.js +1713 -0
  66. package/dist/CallingClient/registration/register.js.map +1 -0
  67. package/dist/CallingClient/registration/register.test.js +1894 -0
  68. package/dist/CallingClient/registration/register.test.js.map +1 -0
  69. package/dist/CallingClient/registration/registerFixtures.js +36 -0
  70. package/dist/CallingClient/registration/registerFixtures.js.map +1 -0
  71. package/dist/CallingClient/registration/types.js +7 -0
  72. package/dist/CallingClient/registration/types.js.map +1 -0
  73. package/dist/CallingClient/registration/webWorker.js +132 -0
  74. package/dist/CallingClient/registration/webWorker.js.map +1 -0
  75. package/dist/CallingClient/registration/webWorker.test.js +303 -0
  76. package/dist/CallingClient/registration/webWorker.test.js.map +1 -0
  77. package/dist/CallingClient/registration/webWorkerStr.js +15 -0
  78. package/dist/CallingClient/registration/webWorkerStr.js.map +1 -0
  79. package/dist/CallingClient/types.js +7 -0
  80. package/dist/CallingClient/types.js.map +1 -0
  81. package/dist/CallingClient/utils/constants.js +46 -0
  82. package/dist/CallingClient/utils/constants.js.map +1 -0
  83. package/dist/CallingClient/utils/index.js +63 -0
  84. package/dist/CallingClient/utils/index.js.map +1 -0
  85. package/dist/CallingClient/utils/mobiusSocketMapper.js +106 -0
  86. package/dist/CallingClient/utils/mobiusSocketMapper.js.map +1 -0
  87. package/dist/CallingClient/utils/request.js +267 -0
  88. package/dist/CallingClient/utils/request.js.map +1 -0
  89. package/dist/CallingClient/utils/types.js +7 -0
  90. package/dist/CallingClient/utils/types.js.map +1 -0
  91. package/dist/CallingClient/utils/wsFeatureFlag.js +20 -0
  92. package/dist/CallingClient/utils/wsFeatureFlag.js.map +1 -0
  93. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js +142 -0
  94. package/dist/CallingClient/windowsChromiumIceWarmupUtils.js.map +1 -0
  95. package/dist/Contacts/ContactsClient.js +1206 -0
  96. package/dist/Contacts/ContactsClient.js.map +1 -0
  97. package/dist/Contacts/ContactsClient.test.js +1004 -0
  98. package/dist/Contacts/ContactsClient.test.js.map +1 -0
  99. package/dist/Contacts/constants.js +40 -0
  100. package/dist/Contacts/constants.js.map +1 -0
  101. package/dist/Contacts/contactFixtures.js +430 -0
  102. package/dist/Contacts/contactFixtures.js.map +1 -0
  103. package/dist/Contacts/types.js +43 -0
  104. package/dist/Contacts/types.js.map +1 -0
  105. package/dist/Errors/catalog/CallError.js +89 -0
  106. package/dist/Errors/catalog/CallError.js.map +1 -0
  107. package/dist/Errors/catalog/CallingDeviceError.js +83 -0
  108. package/dist/Errors/catalog/CallingDeviceError.js.map +1 -0
  109. package/dist/Errors/catalog/ExtendedError.js +42 -0
  110. package/dist/Errors/catalog/ExtendedError.js.map +1 -0
  111. package/dist/Errors/catalog/LineError.js +85 -0
  112. package/dist/Errors/catalog/LineError.js.map +1 -0
  113. package/dist/Errors/index.js +28 -0
  114. package/dist/Errors/index.js.map +1 -0
  115. package/dist/Errors/types.js +59 -0
  116. package/dist/Errors/types.js.map +1 -0
  117. package/dist/Events/impl/index.js +79 -0
  118. package/dist/Events/impl/index.js.map +1 -0
  119. package/dist/Events/types.js +97 -0
  120. package/dist/Events/types.js.map +1 -0
  121. package/dist/Logger/index.js +228 -0
  122. package/dist/Logger/index.js.map +1 -0
  123. package/dist/Logger/index.test.js +87 -0
  124. package/dist/Logger/index.test.js.map +1 -0
  125. package/dist/Logger/types.js +34 -0
  126. package/dist/Logger/types.js.map +1 -0
  127. package/dist/Metrics/index.js +534 -0
  128. package/dist/Metrics/index.js.map +1 -0
  129. package/dist/Metrics/index.test.js +463 -0
  130. package/dist/Metrics/index.test.js.map +1 -0
  131. package/dist/Metrics/types.js +64 -0
  132. package/dist/Metrics/types.js.map +1 -0
  133. package/dist/SDKConnector/index.js +134 -0
  134. package/dist/SDKConnector/index.js.map +1 -0
  135. package/dist/SDKConnector/index.test.js +9 -0
  136. package/dist/SDKConnector/index.test.js.map +1 -0
  137. package/dist/SDKConnector/types.js +7 -0
  138. package/dist/SDKConnector/types.js.map +1 -0
  139. package/dist/SDKConnector/utils.js +39 -0
  140. package/dist/SDKConnector/utils.js.map +1 -0
  141. package/dist/SDKConnector/utils.test.js +9 -0
  142. package/dist/SDKConnector/utils.test.js.map +1 -0
  143. package/dist/Voicemail/BroadworksBackendConnector.js +699 -0
  144. package/dist/Voicemail/BroadworksBackendConnector.js.map +1 -0
  145. package/dist/Voicemail/BroadworksBackendConnector.test.js +820 -0
  146. package/dist/Voicemail/BroadworksBackendConnector.test.js.map +1 -0
  147. package/dist/Voicemail/UcmBackendConnector.js +628 -0
  148. package/dist/Voicemail/UcmBackendConnector.js.map +1 -0
  149. package/dist/Voicemail/UcmBackendConnector.test.js +738 -0
  150. package/dist/Voicemail/UcmBackendConnector.test.js.map +1 -0
  151. package/dist/Voicemail/Voicemail.js +472 -0
  152. package/dist/Voicemail/Voicemail.js.map +1 -0
  153. package/dist/Voicemail/Voicemail.test.js +391 -0
  154. package/dist/Voicemail/Voicemail.test.js.map +1 -0
  155. package/dist/Voicemail/WxCallBackendConnector.js +657 -0
  156. package/dist/Voicemail/WxCallBackendConnector.js.map +1 -0
  157. package/dist/Voicemail/WxCallBackendConnector.test.js +1225 -0
  158. package/dist/Voicemail/WxCallBackendConnector.test.js.map +1 -0
  159. package/dist/Voicemail/constants.js +61 -0
  160. package/dist/Voicemail/constants.js.map +1 -0
  161. package/dist/Voicemail/types.js +7 -0
  162. package/dist/Voicemail/types.js.map +1 -0
  163. package/dist/Voicemail/voicemailFixture.js +524 -0
  164. package/dist/Voicemail/voicemailFixture.js.map +1 -0
  165. package/dist/api.js +157 -0
  166. package/dist/api.js.map +1 -0
  167. package/dist/common/Utils.js +1542 -0
  168. package/dist/common/Utils.js.map +1 -0
  169. package/dist/common/Utils.test.js +1989 -0
  170. package/dist/common/Utils.test.js.map +1 -0
  171. package/dist/common/constants.js +62 -0
  172. package/dist/common/constants.js.map +1 -0
  173. package/dist/common/index.js +19 -0
  174. package/dist/common/index.js.map +1 -0
  175. package/dist/common/testUtil.js +988 -0
  176. package/dist/common/testUtil.js.map +1 -0
  177. package/dist/common/types.js +75 -0
  178. package/dist/common/types.js.map +1 -0
  179. package/dist/index.js +321 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/module/CallHistory/CallHistory.js +28 -17
  182. package/dist/module/CallingClient/CallingClient.js +157 -4
  183. package/dist/module/CallingClient/calling/call.js +12 -8
  184. package/dist/module/CallingClient/calling/callManager.js +29 -10
  185. package/dist/module/CallingClient/calling/types.js +2 -0
  186. package/dist/module/CallingClient/constants.js +8 -0
  187. package/dist/module/CallingClient/registration/register.js +46 -16
  188. package/dist/module/CallingClient/utils/constants.js +30 -0
  189. package/dist/module/CallingClient/utils/index.js +5 -0
  190. package/dist/module/CallingClient/utils/mobiusSocketMapper.js +56 -0
  191. package/dist/module/CallingClient/utils/request.js +112 -0
  192. package/dist/module/CallingClient/utils/types.js +1 -0
  193. package/dist/module/CallingClient/utils/wsFeatureFlag.js +5 -0
  194. package/dist/module/Events/types.js +0 -10
  195. package/dist/module/SDKConnector/index.js +17 -0
  196. package/dist/module/common/Utils.js +35 -4
  197. package/dist/module/common/testUtil.js +3 -0
  198. package/dist/types/CallHistory/CallHistory.d.ts.map +1 -1
  199. package/dist/types/CallingClient/CallingClient.d.ts +10 -1
  200. package/dist/types/CallingClient/CallingClient.d.ts.map +1 -1
  201. package/dist/types/CallingClient/calling/call.d.ts +1 -0
  202. package/dist/types/CallingClient/calling/call.d.ts.map +1 -1
  203. package/dist/types/CallingClient/calling/callManager.d.ts +5 -4
  204. package/dist/types/CallingClient/calling/callManager.d.ts.map +1 -1
  205. package/dist/types/CallingClient/calling/types.d.ts +21 -9
  206. package/dist/types/CallingClient/calling/types.d.ts.map +1 -1
  207. package/dist/types/CallingClient/constants.d.ts +8 -0
  208. package/dist/types/CallingClient/constants.d.ts.map +1 -1
  209. package/dist/types/CallingClient/registration/register.d.ts +3 -1
  210. package/dist/types/CallingClient/registration/register.d.ts.map +1 -1
  211. package/dist/types/CallingClient/registration/types.d.ts +2 -1
  212. package/dist/types/CallingClient/registration/types.d.ts.map +1 -1
  213. package/dist/types/CallingClient/registration/webWorker.d.ts.map +1 -1
  214. package/dist/types/CallingClient/types.d.ts +3 -1
  215. package/dist/types/CallingClient/types.d.ts.map +1 -1
  216. package/dist/types/CallingClient/utils/constants.d.ts +30 -0
  217. package/dist/types/CallingClient/utils/constants.d.ts.map +1 -0
  218. package/dist/types/CallingClient/utils/index.d.ts +6 -0
  219. package/dist/types/CallingClient/utils/index.d.ts.map +1 -0
  220. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts +4 -0
  221. package/dist/types/CallingClient/utils/mobiusSocketMapper.d.ts.map +1 -0
  222. package/dist/types/CallingClient/utils/request.d.ts +20 -0
  223. package/dist/types/CallingClient/utils/request.d.ts.map +1 -0
  224. package/dist/types/CallingClient/utils/types.d.ts +23 -0
  225. package/dist/types/CallingClient/utils/types.d.ts.map +1 -0
  226. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts +4 -0
  227. package/dist/types/CallingClient/utils/wsFeatureFlag.d.ts.map +1 -0
  228. package/dist/types/Events/types.d.ts +0 -10
  229. package/dist/types/Events/types.d.ts.map +1 -1
  230. package/dist/types/SDKConnector/index.d.ts +2 -0
  231. package/dist/types/SDKConnector/index.d.ts.map +1 -1
  232. package/dist/types/SDKConnector/types.d.ts +11 -0
  233. package/dist/types/SDKConnector/types.d.ts.map +1 -1
  234. package/dist/types/common/Utils.d.ts +4 -1
  235. package/dist/types/common/Utils.d.ts.map +1 -1
  236. package/dist/types/common/testUtil.d.ts +3 -0
  237. package/dist/types/common/testUtil.d.ts.map +1 -1
  238. package/dist/types/common/types.d.ts +5 -0
  239. package/dist/types/common/types.d.ts.map +1 -1
  240. package/package.json +8 -4
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_asyncMutex","require","Media","_interopRequireWildcard","_types","_testUtil","_types2","_types3","_Logger","_interopRequireDefault","_CallingClient","_Utils","utils","_callManager","_constants","_callRecordFixtures","_callingClientFixtures","_line","_registerFixtures","_constants2","_types4","_windowsChromiumIceWarmupUtils","_request","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t5","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","ownKeys","_Object$keys2","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","jest","mock","getMobiusSocketInstance","fn","mockReturnValue","sendWssRequest","connect","on","off","global","crypto","randomUUID","spyOn","mockResolvedValue","undefined","describe","handleErrorSpy","setLoggerSpy","webex","getTestUtilsWebex","internal","services","mockCatalogUS","getMobiusClusters","mockUSServiceHosts","defaultServiceIndicator","ServiceIndicator","CALLING","callManager","getCallManager","infoSpy","log","logSpy","warnSpy","originalProcessNextTick","process","nextTick","flushPromises","_promise","resolve","beforeEach","APIRequest","resetInstance","getInstance","isMobiusSocketEnabled","afterAll","removeAllListeners","it","_asyncToGenerator2","_regenerator","mark","_callee","callingClient","wrap","_context","prev","next","_hostCatalog","_serviceUrls","mobius","createClient","logger","level","LOGGER","INFO","sent","expect","toHaveBeenCalledTimes","toStrictEqual","stop","_callee2","_context2","mockCatalogEU","mockEUServiceHosts","toBe","afterEach","_callee4","_context4","_callee3","_context3","toBeTruthy","not","toThrow","Error","_callee6","serviceDataObj","_context6","indicator","domain","_callee5","_context5","serviceData","_callee7","_t","_context7","message","toEqual","assertions","_callee8","_t2","_context8","_callee0","_context0","_callee9","_context9","_callee1","_t3","_context1","CONTACT_CENTER","_callee11","_context11","_callee10","_context10","_callee12","_context12","getLoggingLevel","clearAllTimers","clearAllMocks","useRealTimers","_callee13","_context13","request","mockResolvedValueOnce","regionPayload","discoveryPayload","toBeCalledTimes","primaryMobiusUris","primaryUrl","toBeCalled","nthCalledWith","method","uri","concat","DISCOVERY_URL","addAuthHeader","headers","SPARK_USER_AGENT","getMockRequestTemplate","URL_ENDPOINT","regionBody","clientRegion","countryCode","_callee14","failurePayload","_context14","statusCode","mockRejectedValueOnce","toBeCalledWith","anything","file","CALLING_CLIENT_FILE","objectContaining","_callee15","_context15","mockReset","discovery","region","country","toHaveBeenCalledWith","METHOD_START_MESSAGE","toBeCalledOnceWith","toHaveBeenCalled","mobiusCluster","checkCluster","_ref16","_callee16","mockServiceHosts","mockCatalog","_context16","_x","_x2","each","_ref17","_callee17","clusterName","_t4","_context17","abrupt","mockIntServiceHosts","mockCatalogUSInt","mockEUIntServiceHosts","mockCatalogEUInt","_x3","line","_callee18","_context18","_values","lineDict","_keys","getLines","reg","windowEventSpy","deRegSpy","restoreSpy","restartRegisterSpy","registerSpy","metricSpy","_callee19","_context19","useFakeTimers","registrationPayload","window","registration","register","callCollection","_callee20","g","clearKeepaliveSpy","offlineCb","_context20","fetch","calls","stringContaining","_callee21","_context21","any","_callee22","onlineCb","_context22","String","_callee23","mercuryOfflineCb","_context23","mercury","METRIC_EVENT","CONNECTION_ERROR","CONNECTION_ACTION","MERCURY_DOWN","METRIC_TYPE","BEHAVIORAL","_callee24","handleConnectionRestoreSpy","mercuryOnlineCb","_context24","advanceTimersByTime","NETWORK_FLAP_TIMEOUT","REGISTRATION_FILE","getActiveMobiusUrl","NETWORK_FLAP","_callee25","_context25","setStatus","RegistrationStatus","IDLE","_callee26","callKeepaliveSpy","deleteSpy","_context26","createCall","getActiveCalls","state","value","_callee27","_context27","MERCURY_UP","mutex","Mutex","userId","device","clientDeviceUri","url","mobiusUris","filterMobiusUris","getMobiusDiscoveryResponse","URL","primary","backupMobiusUris","backup","beforeAll","_callee28","_context28","Line","end","getSDKConnector","getWebex","makeCall","address","type","CallType","URI","getConnectedCall","mockCall","mockCall2","mockActiveCalls","mockCorrelationId","mockCorrelationId2","mockDeviceId","lineId","mockDeviceId2","mockCall3","mockCorrelationId3","mockLineId","mockLineId2","mockOn","_callee29","_context29","done","CALLING_CLIENT_EVENT_KEYS","USER_SESSION_INFO","event","data","MOCK_SESSION_EVENT","MOBIUS_EVENT_KEYS","CALL_SESSION_EVENT_INCLUSIVE","callSessionCallback","userSessions","MOCK_MULTIPLE_SESSIONS_EVENT","asyncEventCallback","mobiusSocketMock","_callee30","asyncEventOnCall","_context30","requireMock","mockClear","find","_callee31","callEventSpy","_context31","mockImplementation","eventType","callId","callUrl","deviceId","correlationId","primaryMobius","backupMobius","_callee32","_context32","_callee33","devices","responsePayload","response","_context33","status","lastSeen","addresses","body","getDevices","HTTP_METHODS","GET","service","ALLOWED_SERVICES","MOBIUS","CISCO_DEVICE_URL","CALLING_USER_AGENT","_callee34","requestCalls","_context34","origRTCPeerConnection","_Class","RTCPeerConnection","_classCallCheck2","constructor","instances","_createClass2","key","createDataChannel","addTransceiver","createOffer","sdp","setLocalDescription","desc","localDescription","setRemoteDescription","remoteDescription","createAnswer","addIceCandidate","close","addEventListener","removeEventListener","_callee35","_context35","windowsChromiumIceWarmup","resolves"],"sources":["CallingClient.test.ts"],"sourcesContent":["import {Mutex} from 'async-mutex';\nimport * as Media from '@webex/internal-media-core';\nimport {LOGGER} from '../Logger/types';\nimport {\n getTestUtilsWebex,\n getMockRequestTemplate,\n getMobiusDiscoveryResponse,\n} from '../common/testUtil';\nimport {\n CallType,\n RegistrationStatus,\n ServiceIndicator,\n ALLOWED_SERVICES,\n HTTP_METHODS,\n WebexRequestPayload,\n} from '../common/types';\n/* eslint-disable dot-notation */\nimport {CALLING_CLIENT_EVENT_KEYS, CallSessionEvent, MOBIUS_EVENT_KEYS} from '../Events/types';\nimport log from '../Logger';\nimport {createClient} from './CallingClient';\nimport {ICallingClient} from './types';\nimport * as utils from '../common/Utils';\nimport {getCallManager} from './calling/callManager';\nimport {\n CALLING_CLIENT_FILE,\n DISCOVERY_URL,\n NETWORK_FLAP_TIMEOUT,\n REGISTRATION_FILE,\n CALLING_USER_AGENT,\n CISCO_DEVICE_URL,\n SPARK_USER_AGENT,\n URL_ENDPOINT,\n} from './constants';\nimport {MOCK_MULTIPLE_SESSIONS_EVENT, MOCK_SESSION_EVENT} from './callRecordFixtures';\nimport {ILine} from './line/types';\nimport {\n regionBody,\n regionPayload,\n primaryUrl,\n discoveryPayload,\n registrationPayload,\n mockEUServiceHosts,\n mockIntServiceHosts,\n mockEUIntServiceHosts,\n mockCatalogEU,\n mockCatalogUSInt,\n mockCatalogUS,\n mockCatalogEUInt,\n mockUSServiceHosts,\n} from './callingClientFixtures';\nimport Line from './line';\nimport {filterMobiusUris} from '../common/Utils';\nimport {URL} from './registration/registerFixtures';\nimport {ICall} from './calling/types';\nimport {ServiceHost} from '../SDKConnector/types';\nimport {METHOD_START_MESSAGE} from '../common/constants';\nimport {METRIC_EVENT, CONNECTION_ACTION, METRIC_TYPE} from '../Metrics/types';\nimport windowsChromiumIceWarmup from './windowsChromiumIceWarmupUtils';\nimport {APIRequest} from './utils/request';\n\njest.mock('@webex/internal-plugin-mobius-socket', () => ({\n getMobiusSocketInstance: jest.fn().mockReturnValue({\n sendWssRequest: jest.fn(),\n connect: jest.fn(),\n on: jest.fn(),\n off: jest.fn(),\n }),\n}));\n\nglobal.crypto = {\n randomUUID: () => '12345678-1234-5678-1234-567812345678',\n} as unknown as Crypto;\n\njest.spyOn(utils, 'uploadLogs').mockResolvedValue(undefined);\n\ndescribe('CallingClient Tests', () => {\n // Common initializers\n\n const handleErrorSpy = jest.spyOn(utils, 'handleCallingClientErrors');\n const setLoggerSpy = jest.spyOn(Media, 'setLogger');\n const webex = getTestUtilsWebex();\n webex.internal.services['_hostCatalog'] = mockCatalogUS;\n webex.internal.services.getMobiusClusters = jest.fn().mockReturnValue(mockUSServiceHosts);\n const defaultServiceIndicator = ServiceIndicator.CALLING;\n const callManager = getCallManager(webex, defaultServiceIndicator);\n\n const infoSpy = jest.spyOn(log, 'info');\n const logSpy = jest.spyOn(log, 'log');\n const warnSpy = jest.spyOn(log, 'warn');\n\n const originalProcessNextTick = process.nextTick;\n function flushPromises() {\n return new Promise((resolve) => {\n originalProcessNextTick(resolve);\n });\n }\n\n beforeEach(() => {\n APIRequest.resetInstance();\n APIRequest.getInstance({webex, isMobiusSocketEnabled: false});\n });\n\n describe('CallingClient pick Mobius cluster using Service Host Tests', () => {\n afterAll(() => {\n callManager.removeAllListeners();\n webex.internal.services['_serviceUrls']['mobius'] =\n 'https://mobius.aintgen-a-1.int.infra.webex.com/api/v1';\n webex.internal.services['_hostCatalog'] = mockCatalogUS;\n });\n\n it('should use default mobius service host when Service URL is invalid', async () => {\n webex.internal.services._hostCatalog = mockCatalogUS;\n webex.internal.services._serviceUrls.mobius = 'invalid-url';\n\n const callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n expect(setLoggerSpy).toHaveBeenCalledTimes(1);\n expect(callingClient['mobiusClusters']).toStrictEqual(mockUSServiceHosts);\n });\n\n it('should set mobiusServiceHost correctly when URL is valid', async () => {\n webex.internal.services._hostCatalog = mockCatalogEU;\n webex.internal.services.getMobiusClusters = jest.fn().mockReturnValue(mockEUServiceHosts);\n webex.internal.services['_serviceUrls']['mobius'] =\n 'https://mobius-eu-central-1.prod.infra.webex.com/api/v1';\n\n const callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n\n expect(callingClient['mobiusHost']).toBe(\n 'https://mobius-eu-central-1.prod.infra.webex.com/api/v1'\n );\n expect(callingClient['mobiusClusters']).toStrictEqual(mockEUServiceHosts);\n });\n });\n\n describe('ServiceData tests', () => {\n let callingClient: ICallingClient | undefined;\n\n afterEach(() => {\n callManager.removeAllListeners();\n callingClient = undefined;\n });\n\n /**\n * No input sdk config to callingClient, it should default to service type\n * calling and empty domain value.\n */\n it('Verify valid calling serviceData with no input sdk config', async () => {\n expect(async () => {\n callingClient = await createClient(webex);\n expect(callingClient).toBeTruthy();\n }).not.toThrow(Error);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying empty string for\n * both indicator and domain in it.\n *\n * It should default to service type calling and empty domain value.\n *\n */\n it('Verify invalid empty service indicator, empty domain', async () => {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const serviceDataObj: any = {indicator: '', domain: ''};\n\n expect(async () => {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n expect(callingClient).toBeTruthy();\n }).not.toThrow(Error);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying invalid value for indicator\n * and valid domain type string for domain field in it.\n *\n * It should throw error and abort execution as indicator value is invalid.\n *\n * INDICATOR value MUST MATCH with one of the values in ServiceIndicator enum.\n */\n it('Verify invalid service indicator, valid domain', async () => {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const serviceDataObj: any = {indicator: 'test', domain: 'test.example.com'};\n\n try {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n } catch (e) {\n expect(e.message).toEqual(\n 'Invalid service indicator, Allowed values are: calling, contactcenter and guestcalling'\n );\n }\n expect.assertions(1);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying valid value for indicator\n * 'calling', but an invalid domain type string for domain field in it.\n *\n * It should throw error and abort execution as domain value is invalid.\n *\n * DOMAIN field for service type calling is allowed to be empty but if it carries a non-empty\n * string then it must be of valid domain type.\n */\n it('CALLING: verify invalid service domain', async () => {\n const serviceDataObj = {indicator: ServiceIndicator.CALLING, domain: 'test'};\n\n try {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n } catch (e) {\n expect(e.message).toEqual('Invalid service domain.');\n }\n expect.assertions(1);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying valid value for indicator\n * 'calling', and an empty string for domain field in it.\n *\n * Execution should proceed properly and createRegistration should be called with same serviceData.\n *\n * DOMAIN field for service type 'calling' is allowed to be empty.\n */\n it('CALLING: verify valid empty service domain', async () => {\n const serviceDataObj = {indicator: ServiceIndicator.CALLING, domain: ''};\n\n expect(async () => {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n expect(callingClient).toBeTruthy();\n }).not.toThrow(Error);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying valid value for indicator\n * 'contactcenter', but an empty string for domain field in it.\n *\n * It should throw error and abort execution as domain value is invalid.\n *\n * DOMAIN field for service type 'contactcenter' must carry a non-empty valid domain type string.\n */\n it('ContactCenter: verify empty invalid service domain', async () => {\n const serviceDataObj = {indicator: ServiceIndicator.CONTACT_CENTER, domain: ''};\n\n try {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n } catch (e) {\n expect(e.message).toEqual('Invalid service domain.');\n }\n expect.assertions(1);\n });\n\n /**\n * Input sdk config to callingClient with serviceData carrying valid value for indicator\n * 'contactcenter' , and a valid domain type string for domain field in it.\n *\n * Execution should proceed properly and createRegistration should be called with same serviceData.\n *\n * DOMAIN field for service type 'contactcenter' must carry a non-empty valid domain type string.\n */\n it('ContactCenter: verify valid service domain', async () => {\n const serviceDataObj = {\n indicator: ServiceIndicator.CONTACT_CENTER,\n domain: 'test.example.com',\n };\n\n expect(async () => {\n callingClient = await createClient(webex, {serviceData: serviceDataObj});\n expect(callingClient).toBeTruthy();\n }).not.toThrow(Error);\n });\n\n it('Get current log level', async () => {\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n expect(callingClient).toBeTruthy();\n expect(callingClient.getLoggingLevel).toBeTruthy();\n expect(callingClient.getLoggingLevel()).toEqual(LOGGER.INFO);\n });\n });\n\n describe('Mobius Server discovery tests', () => {\n let callingClient;\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n callingClient.removeAllListeners();\n callManager.removeAllListeners();\n callingClient = undefined;\n jest.useRealTimers();\n });\n\n it('verify successful mobius server url discovery', async () => {\n webex.request.mockResolvedValueOnce(regionPayload).mockResolvedValueOnce(discoveryPayload);\n\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n\n expect(webex.request).toBeCalledTimes(2);\n expect(callingClient.primaryMobiusUris).toEqual([primaryUrl]);\n expect(handleErrorSpy).not.toBeCalled();\n\n expect(webex.request).nthCalledWith(1, {\n method: 'GET',\n uri: `${DISCOVERY_URL}`,\n addAuthHeader: false,\n headers: {\n [SPARK_USER_AGENT]: null,\n },\n });\n\n expect(webex.request).nthCalledWith(2, {\n method: 'GET',\n ...getMockRequestTemplate(),\n uri: `${callingClient['mobiusHost']}${URL_ENDPOINT}?regionCode=${regionBody.clientRegion}&countryCode=${regionBody.countryCode}`,\n });\n });\n\n it('when region discovery succeeds but region based mobius url discovery fails with final error', async () => {\n const failurePayload = {\n statusCode: 401,\n };\n\n webex.request.mockResolvedValueOnce(regionPayload).mockRejectedValueOnce(failurePayload);\n\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n\n expect(handleErrorSpy).toBeCalledWith(failurePayload, expect.anything(), {\n file: CALLING_CLIENT_FILE,\n method: 'getMobiusServers',\n });\n expect(webex.request).toBeCalledTimes(2);\n\n expect(callingClient.primaryMobiusUris).toEqual([\n `${callingClient['mobiusHost']}${URL_ENDPOINT}`,\n ]);\n\n expect(webex.request).nthCalledWith(1, {\n method: 'GET',\n uri: `${DISCOVERY_URL}`,\n addAuthHeader: false,\n headers: {\n [SPARK_USER_AGENT]: null,\n },\n });\n\n expect(warnSpy).toBeCalledWith(\n `Couldn't resolve the region and country code. Defaulting to the catalog entries to discover mobius servers`,\n expect.objectContaining({\n file: CALLING_CLIENT_FILE,\n method: 'getMobiusServers',\n })\n );\n });\n\n it('Verify successful mobius server url discovery after initializing callingClient through a config', async () => {\n infoSpy.mockReset();\n webex.request.mockResolvedValueOnce(discoveryPayload);\n\n callingClient = await createClient(webex, {\n discovery: {\n region: 'AP-SOUTHEAST',\n country: 'IN',\n },\n logger: {\n level: LOGGER.INFO,\n },\n });\n\n expect(callingClient.primaryMobiusUris).toEqual([primaryUrl]);\n\n expect(infoSpy).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: 'CallingClient',\n method: 'getMobiusServers',\n });\n\n expect(webex.request).toBeCalledOnceWith({\n ...getMockRequestTemplate(),\n uri: `${callingClient['mobiusHost']}${URL_ENDPOINT}?regionCode=${regionBody.clientRegion}&countryCode=${regionBody.countryCode}`,\n method: 'GET',\n });\n\n expect(handleErrorSpy).not.toHaveBeenCalled();\n });\n });\n\n describe('Testing each cluster present withing host catalog', () => {\n const mobiusCluster = [\n 'mobius-eu-central-1.prod.infra.webex.com',\n 'mobius-us-east-1.int.infra.webex.com',\n 'mobius-eu-central-1.int.infra.webex.com',\n ];\n\n const checkCluster = async (\n mockServiceHosts: ServiceHost[],\n mockCatalog: Record<string, ServiceHost[]>\n ) => {\n webex.internal.services._hostCatalog = mockCatalog;\n webex.internal.services.getMobiusClusters = jest.fn().mockReturnValue(mockServiceHosts);\n const callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n\n expect(callingClient['mobiusClusters']).toStrictEqual(mockServiceHosts);\n };\n\n it.each(mobiusCluster)('%s', async (clusterName) => {\n switch (clusterName) {\n case 'mobius-eu-central-1.prod.infra.webex.com':\n checkCluster(mockEUServiceHosts, mockCatalogEU);\n break;\n case 'mobius-us-east-1.int.infra.webex.com':\n checkCluster(mockIntServiceHosts, mockCatalogUSInt);\n break;\n case 'mobius-eu-central-1.int.infra.webex.com':\n checkCluster(mockEUIntServiceHosts, mockCatalogEUInt);\n break;\n default:\n break;\n }\n });\n });\n\n describe('Line creation tests', () => {\n let callingClient;\n let line;\n\n beforeEach(async () => {\n callingClient = await createClient(webex);\n line = Object.values(callingClient.lineDict)[0];\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n callingClient.removeAllListeners();\n callManager.removeAllListeners();\n callingClient = undefined;\n jest.useRealTimers();\n });\n\n it('verify line dict successfully created', () => {\n expect(callingClient.lineDict).toBeTruthy();\n expect(line).toBeTruthy();\n expect(Object.keys(callingClient.lineDict).length).toEqual(1);\n });\n\n it('verify getLines response', () => {\n expect(callingClient.getLines).toBeTruthy();\n expect(callingClient.getLines()).toEqual(callingClient.lineDict);\n });\n });\n\n describe('Connectivity and Mercury event handlers', () => {\n let callingClient: ICallingClient;\n let line;\n let reg;\n let windowEventSpy: jest.SpyInstance;\n let deRegSpy;\n let restoreSpy;\n let restartRegisterSpy;\n let registerSpy;\n let metricSpy;\n\n beforeEach(async () => {\n jest.useFakeTimers();\n webex.request\n .mockResolvedValueOnce(regionPayload)\n .mockResolvedValueOnce(discoveryPayload)\n .mockResolvedValueOnce(registrationPayload);\n\n windowEventSpy = jest.spyOn(window, 'addEventListener');\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n line = Object.values(callingClient.lineDict)[0] as ILine;\n reg = line.registration;\n await line.register();\n\n deRegSpy = jest.spyOn(reg, 'deregister');\n restoreSpy = jest.spyOn(reg, 'restorePreviousRegistration');\n restartRegisterSpy = jest.spyOn(reg, 'restartRegistration');\n registerSpy = jest.spyOn(reg, 'attemptRegistrationWithServers');\n metricSpy = jest.spyOn(callingClient['metricManager'], 'submitConnectionMetrics');\n });\n\n afterEach(() => {\n jest.clearAllTimers();\n jest.clearAllMocks();\n callingClient.removeAllListeners();\n callingClient['callManager'].callCollection = {};\n callManager.removeAllListeners();\n callingClient = undefined;\n jest.useRealTimers();\n });\n\n it('window offline handler sets networkDown and clears keepalive when network is unreachable', async () => {\n const g = global;\n g.fetch = jest.fn().mockRejectedValueOnce(new Error('network fail'));\n\n const clearKeepaliveSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n\n const offlineCb = windowEventSpy.mock.calls[1][1];\n await offlineCb();\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Network connectivity probe failed'),\n {\n file: CALLING_CLIENT_FILE,\n method: 'pingExternal',\n }\n );\n expect(callingClient['isNetworkDown']).toBe(true);\n expect(clearKeepaliveSpy).toHaveBeenCalled();\n });\n\n it('window offline handler does not clear keepalive when network is reachable', async () => {\n const g = global;\n g.fetch = jest.fn().mockResolvedValueOnce({});\n\n const clearKeepaliveSpy = jest.spyOn(reg, 'clearKeepaliveTimer');\n\n const offlineCb = windowEventSpy.mock.calls[1][1];\n await offlineCb();\n\n expect(g.fetch).toHaveBeenCalledWith(\n 'https://www.google.com/generate_204',\n expect.any(Object)\n );\n expect(callingClient['isNetworkDown']).toBe(false);\n expect(clearKeepaliveSpy).not.toHaveBeenCalled();\n });\n\n it('window online handler sets networkUpTimestamp and logs', async () => {\n const onlineCb = windowEventSpy.mock.calls[0][1];\n await onlineCb();\n\n expect(callingClient['networkUpTimestamp']).toEqual(expect.any(String));\n expect(infoSpy).toHaveBeenCalledWith(METHOD_START_MESSAGE, {\n file: CALLING_CLIENT_FILE,\n method: 'handleNetworkOnline',\n });\n });\n\n it('mercury offline submits metrics and sets timestamp', async () => {\n const mercuryOfflineCb = webex.internal.mercury.on.mock.calls[1][1];\n await mercuryOfflineCb();\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Mercury down, waiting for connection to be up'),\n {\n file: CALLING_CLIENT_FILE,\n method: 'handleMercuryOffline',\n }\n );\n expect(callingClient['mercuryDownTimestamp']).toEqual(expect.any(String));\n expect(metricSpy).toHaveBeenCalledWith(\n METRIC_EVENT.CONNECTION_ERROR,\n CONNECTION_ACTION.MERCURY_DOWN,\n METRIC_TYPE.BEHAVIORAL,\n expect.any(String),\n ''\n );\n });\n\n it('handles reconnection with no active calls after network flap, once mercury comes back up', async () => {\n const handleConnectionRestoreSpy = jest.spyOn(reg, 'handleConnectionRestoration');\n\n callingClient['isNetworkDown'] = true;\n callingClient['networkDownTimestamp'] = '2023-01-01T00:00:00.000Z';\n callingClient['networkUpTimestamp'] = '2023-01-01T00:01:00.000Z';\n\n const mercuryOnlineCb = webex.internal.mercury.on.mock.calls[2][1];\n await mercuryOnlineCb();\n\n // Run the interval once\n jest.advanceTimersByTime(NETWORK_FLAP_TIMEOUT + 100);\n\n await flushPromises();\n\n expect(handleConnectionRestoreSpy).toHaveBeenCalledWith(true);\n expect(logSpy).toHaveBeenCalledWith(\n 'Network is up again, re-registering with Webex Calling if needed',\n {\n file: REGISTRATION_FILE,\n method: 'handleConnectionRestoration',\n }\n );\n expect(deRegSpy).toHaveBeenCalledWith();\n expect(restoreSpy).toHaveBeenCalledWith('handleConnectionRestoration');\n expect(restartRegisterSpy).toHaveBeenCalledWith('handleConnectionRestoration');\n expect(registerSpy).toHaveBeenCalledWith('handleConnectionRestoration', [\n reg.getActiveMobiusUrl(),\n ]);\n expect(registerSpy).toHaveBeenCalledWith('handleConnectionRestoration', [primaryUrl]);\n expect(metricSpy).toHaveBeenCalledWith(\n METRIC_EVENT.CONNECTION_ERROR,\n CONNECTION_ACTION.NETWORK_FLAP,\n METRIC_TYPE.BEHAVIORAL,\n '2023-01-01T00:00:00.000Z',\n '2023-01-01T00:01:00.000Z'\n );\n });\n\n it('no reconnection for idle registration with no active calls after network flap, once mercury comes back up', async () => {\n const handleConnectionRestoreSpy = jest.spyOn(reg, 'handleConnectionRestoration');\n\n callingClient['isNetworkDown'] = true;\n callingClient['networkDownTimestamp'] = '2023-01-01T00:00:00.000Z';\n callingClient['networkUpTimestamp'] = '2023-01-01T00:01:00.000Z';\n reg.setStatus(RegistrationStatus.IDLE);\n\n const mercuryOnlineCb = webex.internal.mercury.on.mock.calls[2][1];\n await mercuryOnlineCb();\n\n // Run the interval once\n jest.advanceTimersByTime(NETWORK_FLAP_TIMEOUT + 100);\n\n await flushPromises();\n\n expect(handleConnectionRestoreSpy).not.toHaveBeenCalledWith(true);\n expect(logSpy).not.toHaveBeenCalledWith(\n 'Network is up again, re-registering with Webex Calling if needed',\n {\n file: REGISTRATION_FILE,\n method: 'handleConnectionRestoration',\n }\n );\n expect(deRegSpy).not.toHaveBeenCalledWith();\n expect(restoreSpy).not.toHaveBeenCalledWith('handleConnectionRestoration');\n expect(restartRegisterSpy).not.toHaveBeenCalledWith('handleConnectionRestoration');\n expect(registerSpy).not.toHaveBeenCalledWith('handleConnectionRestoration', [\n reg.getActiveMobiusUrl(),\n ]);\n expect(registerSpy).not.toHaveBeenCalledWith('handleConnectionRestoration', [primaryUrl]);\n expect(metricSpy).toHaveBeenCalledWith(\n METRIC_EVENT.CONNECTION_ERROR,\n CONNECTION_ACTION.NETWORK_FLAP,\n METRIC_TYPE.BEHAVIORAL,\n '2023-01-01T00:00:00.000Z',\n '2023-01-01T00:01:00.000Z'\n );\n });\n\n it('handle calls status check once mercury comes back up after a network flap', async () => {\n callingClient['isNetworkDown'] = true;\n const call = callingClient['callManager'].createCall();\n const callKeepaliveSpy = jest\n .spyOn(call, 'postStatus')\n .mockRejectedValueOnce(new Error('keepalive fail'));\n const deleteSpy = jest.spyOn(call, 'delete');\n expect(Object.keys(callingClient['callManager'].getActiveCalls()).length).toBe(1);\n\n const mercuryOnlineCb = webex.internal.mercury.on.mock.calls[2][1];\n await mercuryOnlineCb();\n\n expect(callKeepaliveSpy).toHaveBeenCalled();\n\n await flushPromises();\n\n expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Call Keepalive failed'), {\n file: CALLING_CLIENT_FILE,\n method: 'checkCallStatus',\n });\n expect(call['callStateMachine'].state.value).toBe('S_CALL_CLEARED');\n expect(deleteSpy).toHaveBeenCalled();\n\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n expect(metricSpy).toHaveBeenCalledWith(\n METRIC_EVENT.CONNECTION_ERROR,\n CONNECTION_ACTION.NETWORK_FLAP,\n METRIC_TYPE.BEHAVIORAL,\n expect.any(String),\n expect.any(String)\n );\n });\n\n it('handle calls status check once mercury comes back up with stable network', async () => {\n const call = callingClient['callManager'].createCall();\n const callKeepaliveSpy = jest\n .spyOn(call, 'postStatus')\n .mockRejectedValueOnce(new Error('keepalive fail'));\n const deleteSpy = jest.spyOn(call, 'delete');\n expect(Object.keys(callingClient['callManager'].getActiveCalls()).length).toBe(1);\n\n const mercuryOnlineCb = webex.internal.mercury.on.mock.calls[2][1];\n await mercuryOnlineCb();\n\n expect(callKeepaliveSpy).toHaveBeenCalled();\n\n await flushPromises();\n\n expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Call Keepalive failed'), {\n file: CALLING_CLIENT_FILE,\n method: 'checkCallStatus',\n });\n expect(call['callStateMachine'].state.value).toBe('S_CALL_CLEARED');\n expect(deleteSpy).toHaveBeenCalled();\n\n expect(Object.keys(reg.callManager.getActiveCalls()).length).toBe(0);\n expect(metricSpy).toHaveBeenCalledWith(\n METRIC_EVENT.CONNECTION_ERROR,\n CONNECTION_ACTION.MERCURY_UP,\n METRIC_TYPE.BEHAVIORAL,\n expect.any(String),\n expect.any(String)\n );\n });\n });\n\n // Calling related test cases\n describe('Calling tests', () => {\n const mutex = new Mutex();\n const userId = webex.internal.device.userId;\n const clientDeviceUri = webex.internal.device.url;\n const mobiusUris = filterMobiusUris(getMobiusDiscoveryResponse(), URL);\n const primaryMobiusUris = jest.fn(() => mobiusUris.primary);\n const backupMobiusUris = jest.fn(() => mobiusUris.backup);\n\n let callingClient;\n let line: Line;\n\n beforeAll(async () => {\n callingClient = await createClient(webex);\n line = new Line(\n userId,\n clientDeviceUri,\n mutex,\n primaryMobiusUris(),\n backupMobiusUris(),\n LOGGER.INFO\n );\n const calls = Object.values(callManager.getActiveCalls());\n calls.forEach((call) => {\n call.end();\n });\n });\n\n afterAll(() => {\n callingClient.removeAllListeners();\n callManager.removeAllListeners();\n });\n\n it('verify calling client object', () => {\n expect(callingClient.getSDKConnector().getWebex().internal.device.userId).toBe(\n '8a67806f-fc4d-446b-a131-31e71ea5b0e9'\n );\n });\n\n it('returns undefined when there is no connected call', () => {\n line.register();\n line.makeCall({address: '123456', type: CallType.URI});\n expect(callingClient.getConnectedCall()).toEqual(undefined);\n });\n\n it('returns the connected call', () => {\n line.register();\n const mockCall = line.makeCall({address: '1234', type: CallType.URI});\n const mockCall2 = line.makeCall({address: '5678', type: CallType.URI});\n // Connected call\n mockCall['connected'] = true;\n mockCall['earlyMedia'] = false;\n mockCall['callStateMachine'].state.value = 'S_CALL_ESTABLISHED';\n\n // Held call\n mockCall2['connected'] = true;\n mockCall2['held'] = true;\n mockCall2['earlyMedia'] = false;\n mockCall2['callStateMachine'].state.value = 'S_CALL_HOLD';\n\n const mockActiveCalls: Record<string, ICall> = {\n mockCorrelationId: mockCall as ICall,\n mockCorrelationId2: mockCall2 as ICall,\n };\n\n jest.spyOn(callManager, 'getActiveCalls').mockReturnValue(mockActiveCalls);\n expect(callingClient.getConnectedCall()).toEqual(mockCall);\n });\n it('returns all active calls', () => {\n callingClient.lineDict = {\n mockDeviceId: {lineId: 'mockLineId'} as ILine,\n mockDeviceId2: {lineId: 'mockLineId2'} as ILine,\n };\n\n const mockCall = line.makeCall({address: '1234', type: CallType.URI});\n const mockCall2 = line.makeCall({address: '5678', type: CallType.URI});\n const mockCall3 = line.makeCall({address: '9101', type: CallType.URI});\n\n mockCall.lineId = 'mockLineId';\n mockCall2.lineId = 'mockLineId2';\n mockCall3.lineId = 'mockLineId2';\n\n const mockActiveCalls: Record<string, ICall> = {\n mockCorrelationId: mockCall as ICall,\n mockCorrelationId2: mockCall2 as ICall,\n mockCorrelationId3: mockCall3 as ICall,\n };\n\n jest.spyOn(callManager, 'getActiveCalls').mockReturnValue(mockActiveCalls);\n expect(callingClient.getActiveCalls()).toEqual({\n mockLineId: [mockCall],\n mockLineId2: [mockCall2, mockCall3],\n });\n });\n });\n\n describe('Call Session Event test', () => {\n const mockOn = webex.internal.mercury.on;\n let callingClient: ICallingClient;\n\n beforeEach(async () => {\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n });\n\n afterEach(() => {\n callingClient.removeAllListeners();\n callManager.removeAllListeners();\n });\n\n it('verify the recent user session event ', (done) => {\n expect.assertions(2);\n callingClient.on(CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO, (event: CallSessionEvent) => {\n expect(event.data).toEqual(MOCK_SESSION_EVENT.data);\n done();\n });\n\n expect(mockOn.mock.calls[0][0]).toEqual(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE);\n const callSessionCallback = mockOn.mock.calls[0][1];\n\n callSessionCallback(MOCK_SESSION_EVENT);\n });\n\n it('drop the recent user session if there is no webex calling type', (done) => {\n expect.assertions(2);\n callingClient.on(CALLING_CLIENT_EVENT_KEYS.USER_SESSION_INFO, (event: CallSessionEvent) => {\n expect(event.data.userSessions.userSessions.length).toEqual(1);\n done();\n });\n\n expect(mockOn.mock.calls[0][0]).toEqual(MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE);\n const callSessionCallback = mockOn.mock.calls[0][1];\n\n callSessionCallback(MOCK_MULTIPLE_SESSIONS_EVENT);\n });\n });\n\n describe('Mobius async_event routing', () => {\n let callingClient: ICallingClient;\n let asyncEventCallback;\n let mobiusSocketMock;\n\n beforeEach(async () => {\n mobiusSocketMock = (\n jest.requireMock('@webex/internal-plugin-mobius-socket') as {\n getMobiusSocketInstance: (w: unknown) => unknown;\n }\n ).getMobiusSocketInstance(webex) as {\n on: jest.Mock;\n off: jest.Mock;\n };\n (mobiusSocketMock.on as jest.Mock).mockClear();\n (mobiusSocketMock.off as jest.Mock).mockClear();\n\n callingClient = await createClient(webex, {\n logger: {level: LOGGER.INFO},\n isMobiusSocketEnabled: true,\n });\n\n const asyncEventOnCall = (mobiusSocketMock.on as jest.Mock).mock.calls.find(\n (call) => call[0] === 'async_event'\n );\n asyncEventCallback = asyncEventOnCall[1];\n });\n\n afterEach(() => {\n callingClient.removeAllListeners();\n callManager.removeAllListeners();\n });\n\n it('routes mobius.* async events to callManager', async () => {\n const callEventSpy = jest\n .spyOn(callingClient['callManager'], 'dequeueWsEvents')\n .mockImplementation(() => undefined);\n\n await asyncEventCallback({\n type: 'async_event',\n data: {\n eventType: 'mobius.call',\n callId: 'fcf86aa5-5539-4c9f-8b72-667786ae9b6c',\n callUrl: 'https://mobius-a.wbx2.com/api/v1/calling/web/devices/d1/calls/c1',\n deviceId: 'd1',\n correlationId: 'corr-1',\n },\n });\n\n expect(callEventSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'async_event',\n data: expect.objectContaining({\n eventType: 'mobius.call',\n }),\n })\n );\n });\n });\n\n describe('getDevices', () => {\n let callingClient: ICallingClient;\n const primaryMobius = 'https://mobius.primary/api/v1/calling/web/';\n const backupMobius = 'https://mobius.backup/api/v1/calling/web/';\n\n beforeEach(async () => {\n callingClient = await createClient(webex, {logger: {level: LOGGER.INFO}});\n callingClient.primaryMobiusUris = [primaryMobius];\n callingClient.backupMobiusUris = [backupMobius];\n (webex.request as jest.Mock).mockClear();\n });\n\n afterEach(() => {\n callingClient.removeAllListeners();\n });\n\n it('fetches devices for the provided userId', async () => {\n const devices = [\n {\n deviceId: 'device-1',\n uri: 'https://mobius.test/api/v1/calling/web/devices/device-1',\n status: 'ACTIVE',\n lastSeen: '2024-01-01T00:00:00Z',\n addresses: [],\n clientDeviceUri: 'client-device-uri',\n },\n ];\n\n const responsePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: {userId: 'user-123', devices},\n });\n\n (webex.request as jest.Mock).mockResolvedValue(responsePayload);\n\n const response = await callingClient.getDevices('user-123');\n\n expect(webex.request).toHaveBeenCalledWith({\n uri: 'https://mobius.primary/api/v1/calling/web/devices?userid=user-123',\n method: HTTP_METHODS.GET,\n service: ALLOWED_SERVICES.MOBIUS,\n headers: {\n [CISCO_DEVICE_URL]: webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n\n expect(response).toEqual(devices);\n });\n\n it('falls back to backup Mobius when primary fails', async () => {\n const devices = [\n {\n deviceId: 'device-2',\n uri: 'https://mobius.backup/api/v1/calling/web/devices/device-2',\n status: 'ACTIVE',\n lastSeen: '2024-01-01T00:00:00Z',\n addresses: [],\n clientDeviceUri: 'client-device-uri',\n },\n ];\n\n const failurePayload = {\n statusCode: 404,\n };\n\n const responsePayload = <WebexRequestPayload>(<unknown>{\n statusCode: 200,\n body: {userId: 'user-123', devices},\n });\n\n (webex.request as jest.Mock)\n .mockRejectedValueOnce(failurePayload)\n .mockResolvedValueOnce(responsePayload);\n\n const response = await callingClient.getDevices('user-123');\n\n const requestCalls = (webex.request as jest.Mock).mock.calls;\n expect(requestCalls[0][0]).toEqual({\n uri: 'https://mobius.primary/api/v1/calling/web/devices?userid=user-123',\n method: HTTP_METHODS.GET,\n service: ALLOWED_SERVICES.MOBIUS,\n headers: {\n [CISCO_DEVICE_URL]: webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n\n expect(requestCalls[1][0]).toEqual({\n uri: 'https://mobius.backup/api/v1/calling/web/devices?userid=user-123',\n method: HTTP_METHODS.GET,\n service: ALLOWED_SERVICES.MOBIUS,\n headers: {\n [CISCO_DEVICE_URL]: webex.internal.device.url,\n [SPARK_USER_AGENT]: CALLING_USER_AGENT,\n },\n });\n\n expect(response).toEqual(devices);\n });\n });\n\n describe('windowsChromiumIceWarmup', () => {\n let origRTCPeerConnection: any;\n\n beforeAll(() => {\n origRTCPeerConnection = global.RTCPeerConnection;\n // Minimal mock for RTCPeerConnection\n global.RTCPeerConnection = class {\n static instances: any[] = [];\n iceGatheringState = 'complete';\n localDescription = null;\n remoteDescription = null;\n onicecandidate: ((e: any) => void) | null = null;\n constructor() {\n (this.constructor as any).instances.push(this);\n }\n\n createDataChannel() {\n return {};\n }\n\n addTransceiver() {\n return {};\n }\n\n createOffer() {\n return Promise.resolve({sdp: 'offer', type: 'offer'});\n }\n\n setLocalDescription(desc: any) {\n this.localDescription = desc;\n\n return Promise.resolve();\n }\n\n setRemoteDescription(desc: any) {\n this.remoteDescription = desc;\n\n return Promise.resolve();\n }\n\n createAnswer() {\n return Promise.resolve({sdp: 'answer', type: 'answer'});\n }\n\n addIceCandidate() {\n return Promise.resolve();\n }\n\n close() {}\n addEventListener() {}\n removeEventListener() {}\n };\n });\n\n afterAll(() => {\n global.RTCPeerConnection = origRTCPeerConnection;\n });\n\n it('should complete without throwing', async () => {\n await expect(windowsChromiumIceWarmup({})).resolves.not.toThrow();\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ _Object$defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MOCK_SESSION_EVENT = exports.MOCK_MULTIPLE_SESSIONS_EVENT = void 0;
8
+ var _types = require("../Events/types");
9
+ var WEBEX_CALL_SESSION = {
10
+ id: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',
11
+ durationSecs: 438,
12
+ self: {
13
+ id: 'a24027e7-9b6e-4047-a950-42f4492148ec',
14
+ name: 'Mark',
15
+ phoneNumber: '123456'
16
+ },
17
+ url: 'https://janus-a.wbx2.com/janus/api/v1/history/userSessions/d74d19cc-6aa7-f341-6012-aec433cc6f8d',
18
+ sessionId: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',
19
+ sessionType: _types.SessionType.WEBEX_CALLING,
20
+ startTime: '2022-08-02T10:45:21.565Z',
21
+ endTime: '2022-08-02T10:53:01.624Z',
22
+ direction: 'OUTGOING',
23
+ disposition: _types.Disposition.INITIATED,
24
+ other: {
25
+ id: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',
26
+ name: 'test',
27
+ isPrivate: false,
28
+ callbackAddress: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',
29
+ phoneNumber: '123456679'
30
+ },
31
+ durationSeconds: 438,
32
+ joinedDurationSeconds: 457,
33
+ participantCount: 2,
34
+ links: {
35
+ locusUrl: 'https://locus-a.wbx2.com/locus/api/v1/loci/f5dbe4da-663b-3f73-a2fc-3a2fb0f12080',
36
+ conversationUrl: 'https://conv-a.wbx2.com/conversation/api/v1/conversations/c9252ff0-9de2-11ec-a582-59d00c02cca9',
37
+ callbackAddress: '123-456-7890'
38
+ },
39
+ isDeleted: false,
40
+ isPMR: false,
41
+ correlationIds: ['58ea6cd9-852b-4a77-957f-e704c8b0e63e']
42
+ };
43
+ var SPARK_CALL_SESSION = {
44
+ id: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',
45
+ durationSecs: 438,
46
+ self: {
47
+ id: 'a24027e7-9b6e-4047-a950-42f4492148ec',
48
+ name: 'Mark',
49
+ phoneNumber: '123456'
50
+ },
51
+ url: 'https://janus-a.wbx2.com/janus/api/v1/history/userSessions/d74d19cc-6aa7-f341-6012-aec433cc6f8d',
52
+ sessionId: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',
53
+ sessionType: _types.SessionType.SPARK,
54
+ startTime: '2022-08-02T10:45:21.565Z',
55
+ endTime: '2022-08-02T10:53:01.624Z',
56
+ direction: 'OUTGOING',
57
+ disposition: _types.Disposition.INITIATED,
58
+ other: {
59
+ id: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',
60
+ name: 'test',
61
+ isPrivate: false,
62
+ callbackAddress: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',
63
+ phoneNumber: '123456679'
64
+ },
65
+ durationSeconds: 438,
66
+ joinedDurationSeconds: 457,
67
+ participantCount: 2,
68
+ links: {
69
+ locusUrl: 'https://locus-a.wbx2.com/locus/api/v1/loci/f5dbe4da-663b-3f73-a2fc-3a2fb0f12080',
70
+ conversationUrl: 'https://conv-a.wbx2.com/conversation/api/v1/conversations/c9252ff0-9de2-11ec-a582-59d00c02cca9',
71
+ callbackAddress: '123-456-7890'
72
+ },
73
+ isDeleted: false,
74
+ isPMR: false,
75
+ correlationIds: ['58ea6cd9-852b-4a77-957f-e704c8b0e63e']
76
+ };
77
+ var MOCK_SESSION_EVENT = exports.MOCK_SESSION_EVENT = {
78
+ id: 'id',
79
+ data: {
80
+ userSessions: {
81
+ userSessions: [WEBEX_CALL_SESSION],
82
+ statusCode: 0
83
+ },
84
+ eventType: _types.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE
85
+ },
86
+ timestamp: 12345,
87
+ trackingId: 'tracking-id'
88
+ };
89
+ var MOCK_MULTIPLE_SESSIONS_EVENT = exports.MOCK_MULTIPLE_SESSIONS_EVENT = {
90
+ id: 'id',
91
+ data: {
92
+ userSessions: {
93
+ userSessions: [WEBEX_CALL_SESSION, SPARK_CALL_SESSION],
94
+ statusCode: 0
95
+ },
96
+ eventType: _types.MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE
97
+ },
98
+ timestamp: 12345,
99
+ trackingId: 'tracking-id'
100
+ };
101
+ //# sourceMappingURL=callRecordFixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","WEBEX_CALL_SESSION","id","durationSecs","self","name","phoneNumber","url","sessionId","sessionType","SessionType","WEBEX_CALLING","startTime","endTime","direction","disposition","Disposition","INITIATED","other","isPrivate","callbackAddress","durationSeconds","joinedDurationSeconds","participantCount","links","locusUrl","conversationUrl","isDeleted","isPMR","correlationIds","SPARK_CALL_SESSION","SPARK","MOCK_SESSION_EVENT","exports","data","userSessions","statusCode","eventType","MOBIUS_EVENT_KEYS","CALL_SESSION_EVENT_INCLUSIVE","timestamp","trackingId","MOCK_MULTIPLE_SESSIONS_EVENT"],"sources":["callRecordFixtures.ts"],"sourcesContent":["import {CallSessionEvent, SessionType, Disposition, MOBIUS_EVENT_KEYS} from '../Events/types';\n\nconst WEBEX_CALL_SESSION = {\n id: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',\n durationSecs: 438,\n self: {\n id: 'a24027e7-9b6e-4047-a950-42f4492148ec',\n name: 'Mark',\n phoneNumber: '123456',\n },\n url: 'https://janus-a.wbx2.com/janus/api/v1/history/userSessions/d74d19cc-6aa7-f341-6012-aec433cc6f8d',\n sessionId: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',\n sessionType: SessionType.WEBEX_CALLING,\n startTime: '2022-08-02T10:45:21.565Z',\n endTime: '2022-08-02T10:53:01.624Z',\n direction: 'OUTGOING',\n disposition: Disposition.INITIATED,\n other: {\n id: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',\n name: 'test',\n isPrivate: false,\n callbackAddress: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',\n phoneNumber: '123456679',\n },\n durationSeconds: 438,\n joinedDurationSeconds: 457,\n participantCount: 2,\n links: {\n locusUrl: 'https://locus-a.wbx2.com/locus/api/v1/loci/f5dbe4da-663b-3f73-a2fc-3a2fb0f12080',\n conversationUrl:\n 'https://conv-a.wbx2.com/conversation/api/v1/conversations/c9252ff0-9de2-11ec-a582-59d00c02cca9',\n callbackAddress: '123-456-7890',\n },\n\n isDeleted: false,\n isPMR: false,\n correlationIds: ['58ea6cd9-852b-4a77-957f-e704c8b0e63e'],\n};\n\nconst SPARK_CALL_SESSION = {\n id: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',\n durationSecs: 438,\n self: {\n id: 'a24027e7-9b6e-4047-a950-42f4492148ec',\n name: 'Mark',\n phoneNumber: '123456',\n },\n url: 'https://janus-a.wbx2.com/janus/api/v1/history/userSessions/d74d19cc-6aa7-f341-6012-aec433cc6f8d',\n sessionId: 'd74d19cc-6aa7-f341-6012-aec433cc6f8d',\n sessionType: SessionType.SPARK,\n startTime: '2022-08-02T10:45:21.565Z',\n endTime: '2022-08-02T10:53:01.624Z',\n direction: 'OUTGOING',\n disposition: Disposition.INITIATED,\n other: {\n id: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',\n name: 'test',\n isPrivate: false,\n callbackAddress: 'c9bde63c-e3e2-4db4-ba45-0d6c698ffd65',\n phoneNumber: '123456679',\n },\n durationSeconds: 438,\n joinedDurationSeconds: 457,\n participantCount: 2,\n links: {\n locusUrl: 'https://locus-a.wbx2.com/locus/api/v1/loci/f5dbe4da-663b-3f73-a2fc-3a2fb0f12080',\n conversationUrl:\n 'https://conv-a.wbx2.com/conversation/api/v1/conversations/c9252ff0-9de2-11ec-a582-59d00c02cca9',\n callbackAddress: '123-456-7890',\n },\n\n isDeleted: false,\n isPMR: false,\n correlationIds: ['58ea6cd9-852b-4a77-957f-e704c8b0e63e'],\n};\n\nexport const MOCK_SESSION_EVENT: CallSessionEvent = {\n id: 'id',\n data: {\n userSessions: {\n userSessions: [WEBEX_CALL_SESSION],\n statusCode: 0,\n },\n eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE,\n },\n timestamp: 12345,\n trackingId: 'tracking-id',\n};\n\nexport const MOCK_MULTIPLE_SESSIONS_EVENT: CallSessionEvent = {\n id: 'id',\n data: {\n userSessions: {\n userSessions: [WEBEX_CALL_SESSION, SPARK_CALL_SESSION],\n statusCode: 0,\n },\n eventType: MOBIUS_EVENT_KEYS.CALL_SESSION_EVENT_INCLUSIVE,\n },\n timestamp: 12345,\n trackingId: 'tracking-id',\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createCallerId = exports.CallerId = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
11
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
14
+ var _index = _interopRequireDefault(require("../../../Logger/index"));
15
+ var _constants = require("../../constants");
16
+ var _SDKConnector = _interopRequireDefault(require("../../../SDKConnector"));
17
+ var _common = require("../../../common");
18
+ /* eslint-disable no-underscore-dangle */
19
+ /* eslint-disable valid-jsdoc */
20
+ /**
21
+ *
22
+ */
23
+ var CallerId = exports.CallerId = /*#__PURE__*/function () {
24
+ /**
25
+ * Start the callerId instance.
26
+ *
27
+ * @param webex -.
28
+ * @param callObj -.
29
+ * @param emitter -.
30
+ */
31
+ function CallerId(webex, emitter) {
32
+ (0, _classCallCheck2.default)(this, CallerId);
33
+ (0, _defineProperty2.default)(this, "webex", void 0);
34
+ (0, _defineProperty2.default)(this, "callerInfo", void 0);
35
+ (0, _defineProperty2.default)(this, "sdkConnector", void 0);
36
+ (0, _defineProperty2.default)(this, "emitter", void 0);
37
+ this.sdkConnector = _SDKConnector.default;
38
+ this.callerInfo = {};
39
+ if (!this.sdkConnector.getWebex()) {
40
+ _SDKConnector.default.setWebex(webex);
41
+ }
42
+ this.webex = this.sdkConnector.getWebex();
43
+ this.emitter = emitter;
44
+ }
45
+
46
+ /**
47
+ * The handler which processes the data received from the SCIM query
48
+ * performed through externalId.
49
+ *
50
+ * @param filter - A filter to be used for query.
51
+ */
52
+ return (0, _createClass2.default)(CallerId, [{
53
+ key: "resolveCallerId",
54
+ value: (function () {
55
+ var _resolveCallerId = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee(filter) {
56
+ var displayResult, isChanged;
57
+ return _regenerator.default.wrap(function (_context) {
58
+ while (1) switch (_context.prev = _context.next) {
59
+ case 0:
60
+ _context.next = 1;
61
+ return (0, _common.resolveCallerIdDisplay)(filter);
62
+ case 1:
63
+ displayResult = _context.sent;
64
+ isChanged = false;
65
+ /* It makes sense to emit only if the resolution gives different results than what we already have.
66
+ * Note that results gathered from the SCIM Query is always given preference.
67
+ */
68
+ if (displayResult.name && this.callerInfo.name !== displayResult.name) {
69
+ _index.default.info('Updating Name after resolution', {
70
+ file: _constants.CALLER_ID_FILE,
71
+ method: 'resolveCallerId'
72
+ });
73
+ this.callerInfo.name = displayResult.name;
74
+ isChanged = true;
75
+ }
76
+ if (displayResult.num && this.callerInfo.num !== displayResult.num) {
77
+ _index.default.info('Updating Number after resolution', {
78
+ file: _constants.CALLER_ID_FILE,
79
+ method: 'resolveCallerId'
80
+ });
81
+ this.callerInfo.num = displayResult.num;
82
+ isChanged = true;
83
+ }
84
+ if (!this.callerInfo.avatarSrc || this.callerInfo.avatarSrc !== displayResult.avatarSrc) {
85
+ _index.default.info('Updating Avatar Id after resolution', {
86
+ file: _constants.CALLER_ID_FILE,
87
+ method: 'resolveCallerId'
88
+ });
89
+ this.callerInfo.avatarSrc = displayResult.avatarSrc;
90
+ isChanged = true;
91
+ }
92
+ if (!this.callerInfo.id || this.callerInfo.id !== displayResult.id) {
93
+ _index.default.info('Updating User Id after resolution', {
94
+ file: _constants.CALLER_ID_FILE,
95
+ method: 'resolveCallerId'
96
+ });
97
+ this.callerInfo.id = displayResult.id;
98
+ isChanged = true;
99
+ }
100
+ if (isChanged) {
101
+ this.emitter(this.callerInfo);
102
+ }
103
+ case 2:
104
+ case "end":
105
+ return _context.stop();
106
+ }
107
+ }, _callee, this);
108
+ }));
109
+ function resolveCallerId(_x) {
110
+ return _resolveCallerId.apply(this, arguments);
111
+ }
112
+ return resolveCallerId;
113
+ }()
114
+ /**
115
+ * Remote party Id parser.
116
+ *
117
+ * @param data - Entire URI string.
118
+ */
119
+ )
120
+ }, {
121
+ key: "parseRemotePartyInfo",
122
+ value: (function () {
123
+ var _parseRemotePartyInfo = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee2(data) {
124
+ var lastToken, externalId;
125
+ return _regenerator.default.wrap(function (_context2) {
126
+ while (1) switch (_context2.prev = _context2.next) {
127
+ case 0:
128
+ /* External Id will be the last token if at all it exists */
129
+ lastToken = data.split(';').slice(-1)[0];
130
+ if (lastToken.includes('externalId')) {
131
+ externalId = lastToken.split('=')[1];
132
+ _index.default.info("externalId retrieved: ".concat(externalId), {
133
+ file: _constants.CALLER_ID_FILE,
134
+ method: 'parseRemotePartyInfo'
135
+ });
136
+ this.resolveCallerId("id eq \"".concat(externalId, "\""));
137
+ } else {
138
+ _index.default.warn("externalId not found!", {
139
+ file: _constants.CALLER_ID_FILE,
140
+ method: 'parseRemotePartyInfo'
141
+ });
142
+ }
143
+ case 1:
144
+ case "end":
145
+ return _context2.stop();
146
+ }
147
+ }, _callee2, this);
148
+ }));
149
+ function parseRemotePartyInfo(_x2) {
150
+ return _parseRemotePartyInfo.apply(this, arguments);
151
+ }
152
+ return parseRemotePartyInfo;
153
+ }()
154
+ /**
155
+ * Parser for SIP Uris.
156
+ *
157
+ * @param paid - Entire sip uri. Can be PA-Id or From header.
158
+ * @returns - a collection of name and number.
159
+ * @example
160
+ * const paid1 = '"John O' Connor - (Guest)" <sip:1234567890@domain>';
161
+ * const result1 = parseSipUri(paid1);
162
+ * result1.name = "John O' Connor - (Guest)"
163
+ * result1.num = "1234567890"
164
+ */
165
+ )
166
+ }, {
167
+ key: "parseSipUri",
168
+ value: function parseSipUri(paid) {
169
+ var result = {};
170
+
171
+ // Extract name
172
+ var nameMatch = paid.split('<')[0].replace(/"/g, '');
173
+ if (nameMatch) {
174
+ result.name = nameMatch.trim();
175
+ } else {
176
+ _index.default.warn("Name field not found!", {
177
+ file: _constants.CALLER_ID_FILE,
178
+ method: 'parseSipUri'
179
+ });
180
+ }
181
+
182
+ // Extract number
183
+ var data = paid.split('@')[0].replace(/"/g, '');
184
+ var num = data.substring(data.indexOf(':') + 1, data.length);
185
+ var phoneMatch = num.match(_constants.VALID_PHONE_REGEX);
186
+ if (phoneMatch && phoneMatch[0].length === num.length) {
187
+ result.num = num;
188
+ } else {
189
+ _index.default.warn("Number field not found!", {
190
+ file: _constants.CALLER_ID_FILE,
191
+ method: 'parseSipUri'
192
+ });
193
+ }
194
+ return result;
195
+ }
196
+
197
+ /**
198
+ * The main entrypoint of the Caller-Id instance.
199
+ * It returns intermediate name and number and starts the
200
+ * caller Id resolution in background.
201
+ *
202
+ * @param callerId - CallerId data passed to us by Call Instance.
203
+ * @returns - A collection of name and number.
204
+ */
205
+ }, {
206
+ key: "fetchCallerDetails",
207
+ value: function fetchCallerDetails(callerId) {
208
+ /* resetting previously set fields */
209
+ this.callerInfo.id = undefined;
210
+ this.callerInfo.avatarSrc = undefined;
211
+ this.callerInfo.name = undefined;
212
+ this.callerInfo.num = undefined;
213
+ if ('p-asserted-identity' in callerId) {
214
+ _index.default.info('Parsing p-asserted-identity within remote party information', {
215
+ file: _constants.CALLER_ID_FILE,
216
+ method: 'fetchCallerDetails'
217
+ });
218
+ var result = this.parseSipUri(callerId['p-asserted-identity']);
219
+
220
+ /* For P-Asserted-Identity, we update the callerInfo blindly, as it is of highest preference */
221
+ this.callerInfo.name = result.name;
222
+ this.callerInfo.num = result.num;
223
+ }
224
+ if (callerId.from) {
225
+ _index.default.info('Parsing from header within the remote party information', {
226
+ file: _constants.CALLER_ID_FILE,
227
+ method: 'fetchCallerDetails'
228
+ });
229
+ var _result = this.parseSipUri(callerId.from);
230
+
231
+ /* For From header , we should only update if not filled already by P-Asserted-Identity */
232
+ if (!this.callerInfo.name && _result.name) {
233
+ _index.default.info('Updating name field from From header', {
234
+ file: _constants.CALLER_ID_FILE,
235
+ method: 'fetchCallerDetails'
236
+ });
237
+ this.callerInfo.name = _result.name;
238
+ }
239
+ if (!this.callerInfo.num && _result.num) {
240
+ _index.default.info('Updating number field from From header', {
241
+ file: _constants.CALLER_ID_FILE,
242
+ method: 'fetchCallerDetails'
243
+ });
244
+ this.callerInfo.num = _result.num;
245
+ }
246
+ }
247
+
248
+ /* Emit the intermediate CallerId */
249
+
250
+ if (this.callerInfo.name || this.callerInfo.num) {
251
+ this.emitter(this.callerInfo);
252
+ }
253
+
254
+ /* We need to parse x-broadworks-remote-party-info if present asynchronously */
255
+ if ('x-broadworks-remote-party-info' in callerId) {
256
+ _index.default.info('Parsing x-broadworks-remote-party-info within remote party information', {
257
+ file: _constants.CALLER_ID_FILE,
258
+ method: 'fetchCallerDetails'
259
+ });
260
+ this.parseRemotePartyInfo(callerId['x-broadworks-remote-party-info']);
261
+ }
262
+ return this.callerInfo;
263
+ }
264
+ }]);
265
+ }();
266
+ /**
267
+ * To create CallerId instance.
268
+ *
269
+ * @param webex -.
270
+ * @param emitterCb -.
271
+ */
272
+ var createCallerId = exports.createCallerId = function createCallerId(webex, emitterCb) {
273
+ return new CallerId(webex, emitterCb);
274
+ };
275
+ //# sourceMappingURL=index.js.map