@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.0

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 (469) hide show
  1. package/.eslintrc.js +6 -0
  2. package/README.md +12 -0
  3. package/babel.config.js +3 -0
  4. package/dist/annotation/constants.js +12 -20
  5. package/dist/annotation/constants.js.map +1 -1
  6. package/dist/annotation/index.js +25 -10
  7. package/dist/annotation/index.js.map +1 -1
  8. package/dist/breakouts/breakout.js +2 -3
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/collection.js +1 -2
  11. package/dist/breakouts/collection.js.map +1 -1
  12. package/dist/breakouts/edit-lock-error.js +1 -2
  13. package/dist/breakouts/edit-lock-error.js.map +1 -1
  14. package/dist/breakouts/events.js +1 -2
  15. package/dist/breakouts/events.js.map +1 -1
  16. package/dist/breakouts/index.js +13 -14
  17. package/dist/breakouts/index.js.map +1 -1
  18. package/dist/breakouts/request.js +1 -2
  19. package/dist/breakouts/request.js.map +1 -1
  20. package/dist/breakouts/utils.js +3 -6
  21. package/dist/breakouts/utils.js.map +1 -1
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  37. package/dist/common/errors/no-meeting-info.js +50 -0
  38. package/dist/common/errors/no-meeting-info.js.map +1 -0
  39. package/dist/common/errors/parameter.js +3 -4
  40. package/dist/common/errors/parameter.js.map +1 -1
  41. package/dist/common/errors/password-error.js +1 -2
  42. package/dist/common/errors/password-error.js.map +1 -1
  43. package/dist/common/errors/permission.js +1 -2
  44. package/dist/common/errors/permission.js.map +1 -1
  45. package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
  46. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +1 -2
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +1 -2
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +1 -2
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/{types/common → common}/errors/webex-errors.d.ts +13 -1
  55. package/dist/common/errors/webex-errors.js +35 -16
  56. package/dist/common/errors/webex-errors.js.map +1 -1
  57. package/dist/common/errors/webex-meetings-error.js +1 -2
  58. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  59. package/dist/common/events/events-scope.js +1 -2
  60. package/dist/common/events/events-scope.js.map +1 -1
  61. package/dist/common/events/events.js +1 -2
  62. package/dist/common/events/events.js.map +1 -1
  63. package/dist/common/events/trigger-proxy.js +1 -2
  64. package/dist/common/events/trigger-proxy.js.map +1 -1
  65. package/dist/common/events/util.js +1 -2
  66. package/dist/common/events/util.js.map +1 -1
  67. package/dist/common/logs/logger-config.js +1 -2
  68. package/dist/common/logs/logger-config.js.map +1 -1
  69. package/dist/common/logs/logger-proxy.js +1 -2
  70. package/dist/common/logs/logger-proxy.js.map +1 -1
  71. package/dist/{types/common → common}/logs/request.d.ts +3 -1
  72. package/dist/common/logs/request.js +8 -5
  73. package/dist/common/logs/request.js.map +1 -1
  74. package/dist/common/queue.js +2 -4
  75. package/dist/common/queue.js.map +1 -1
  76. package/dist/{types/config.d.ts → config.d.ts} +1 -1
  77. package/dist/config.js +3 -3
  78. package/dist/config.js.map +1 -1
  79. package/dist/{types/constants.d.ts → constants.d.ts} +72 -15
  80. package/dist/constants.js +254 -371
  81. package/dist/constants.js.map +1 -1
  82. package/dist/controls-options-manager/constants.js +3 -6
  83. package/dist/controls-options-manager/constants.js.map +1 -1
  84. package/dist/controls-options-manager/enums.js +7 -10
  85. package/dist/controls-options-manager/enums.js.map +1 -1
  86. package/dist/controls-options-manager/index.js +27 -32
  87. package/dist/controls-options-manager/index.js.map +1 -1
  88. package/dist/controls-options-manager/util.js +1 -2
  89. package/dist/controls-options-manager/util.js.map +1 -1
  90. package/dist/index.js +8 -5
  91. package/dist/index.js.map +1 -1
  92. package/dist/interceptors/index.d.ts +2 -0
  93. package/dist/interceptors/index.js +15 -0
  94. package/dist/interceptors/index.js.map +1 -0
  95. package/dist/interceptors/locusRetry.d.ts +27 -0
  96. package/dist/interceptors/locusRetry.js +94 -0
  97. package/dist/interceptors/locusRetry.js.map +1 -0
  98. package/dist/interpretation/collection.js +1 -2
  99. package/dist/interpretation/collection.js.map +1 -1
  100. package/dist/interpretation/index.js +2 -3
  101. package/dist/interpretation/index.js.map +1 -1
  102. package/dist/interpretation/siLanguage.js +2 -3
  103. package/dist/interpretation/siLanguage.js.map +1 -1
  104. package/dist/locus-info/controlsUtils.js +12 -13
  105. package/dist/locus-info/controlsUtils.js.map +1 -1
  106. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  107. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  108. package/dist/locus-info/fullState.js +1 -2
  109. package/dist/locus-info/fullState.js.map +1 -1
  110. package/dist/locus-info/hostUtils.js +1 -2
  111. package/dist/locus-info/hostUtils.js.map +1 -1
  112. package/dist/{types/locus-info → locus-info}/index.d.ts +1 -1
  113. package/dist/locus-info/index.js +63 -38
  114. package/dist/locus-info/index.js.map +1 -1
  115. package/dist/locus-info/infoUtils.js +3 -4
  116. package/dist/locus-info/infoUtils.js.map +1 -1
  117. package/dist/locus-info/mediaSharesUtils.js +16 -3
  118. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  119. package/dist/{types/locus-info → locus-info}/parser.d.ts +3 -2
  120. package/dist/locus-info/parser.js +48 -31
  121. package/dist/locus-info/parser.js.map +1 -1
  122. package/dist/locus-info/selfUtils.js +7 -6
  123. package/dist/locus-info/selfUtils.js.map +1 -1
  124. package/dist/media/index.js +15 -10
  125. package/dist/media/index.js.map +1 -1
  126. package/dist/media/properties.js +16 -7
  127. package/dist/media/properties.js.map +1 -1
  128. package/dist/media/util.js +1 -2
  129. package/dist/media/util.js.map +1 -1
  130. package/dist/mediaQualityMetrics/config.d.ts +241 -0
  131. package/dist/mediaQualityMetrics/config.js +135 -339
  132. package/dist/mediaQualityMetrics/config.js.map +1 -1
  133. package/dist/{types/meeting → meeting}/in-meeting-actions.d.ts +4 -0
  134. package/dist/meeting/in-meeting-actions.js +18 -2
  135. package/dist/meeting/in-meeting-actions.js.map +1 -1
  136. package/dist/{types/meeting → meeting}/index.d.ts +331 -44
  137. package/dist/meeting/index.js +2639 -1367
  138. package/dist/meeting/index.js.map +1 -1
  139. package/dist/{types/meeting → meeting}/locusMediaRequest.d.ts +1 -2
  140. package/dist/meeting/locusMediaRequest.js +4 -5
  141. package/dist/meeting/locusMediaRequest.js.map +1 -1
  142. package/dist/meeting/muteState.js +2 -4
  143. package/dist/meeting/muteState.js.map +1 -1
  144. package/dist/{types/meeting → meeting}/request.d.ts +4 -1
  145. package/dist/meeting/request.js +47 -32
  146. package/dist/meeting/request.js.map +1 -1
  147. package/dist/meeting/state.js +1 -2
  148. package/dist/meeting/state.js.map +1 -1
  149. package/dist/{types/meeting → meeting}/util.d.ts +26 -1
  150. package/dist/meeting/util.js +83 -10
  151. package/dist/meeting/util.js.map +1 -1
  152. package/dist/meeting/voicea-meeting.d.ts +16 -0
  153. package/dist/meeting/voicea-meeting.js +169 -0
  154. package/dist/meeting/voicea-meeting.js.map +1 -0
  155. package/dist/meeting-info/collection.js +3 -4
  156. package/dist/meeting-info/collection.js.map +1 -1
  157. package/dist/{types/meeting-info → meeting-info}/index.d.ts +7 -0
  158. package/dist/meeting-info/index.js +53 -27
  159. package/dist/meeting-info/index.js.map +1 -1
  160. package/dist/{types/meeting-info → meeting-info}/meeting-info-v2.d.ts +1 -0
  161. package/dist/meeting-info/meeting-info-v2.js +52 -33
  162. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  163. package/dist/meeting-info/request.js +1 -2
  164. package/dist/meeting-info/request.js.map +1 -1
  165. package/dist/meeting-info/util.js +8 -8
  166. package/dist/meeting-info/util.js.map +1 -1
  167. package/dist/meeting-info/utilv2.js +12 -9
  168. package/dist/meeting-info/utilv2.js.map +1 -1
  169. package/dist/{types/meetings → meetings}/collection.d.ts +9 -0
  170. package/dist/meetings/collection.js +21 -5
  171. package/dist/meetings/collection.js.map +1 -1
  172. package/dist/{types/meetings → meetings}/index.d.ts +45 -16
  173. package/dist/meetings/index.js +166 -74
  174. package/dist/meetings/index.js.map +1 -1
  175. package/dist/meetings/request.js +2 -3
  176. package/dist/meetings/request.js.map +1 -1
  177. package/dist/meetings/util.js +3 -10
  178. package/dist/meetings/util.js.map +1 -1
  179. package/dist/{types/member → member}/index.d.ts +1 -0
  180. package/dist/member/index.js +10 -3
  181. package/dist/member/index.js.map +1 -1
  182. package/dist/member/member.types.d.ts +11 -0
  183. package/dist/member/member.types.js +17 -0
  184. package/dist/member/member.types.js.map +1 -0
  185. package/dist/member/types.js +6 -8
  186. package/dist/member/types.js.map +1 -1
  187. package/dist/member/util.js +12 -2
  188. package/dist/member/util.js.map +1 -1
  189. package/dist/members/collection.js +1 -2
  190. package/dist/members/collection.js.map +1 -1
  191. package/dist/members/index.js +25 -8
  192. package/dist/members/index.js.map +1 -1
  193. package/dist/members/request.js +2 -3
  194. package/dist/members/request.js.map +1 -1
  195. package/dist/{types/members → members}/types.d.ts +1 -0
  196. package/dist/members/types.js +3 -4
  197. package/dist/members/types.js.map +1 -1
  198. package/dist/{types/members → members}/util.d.ts +6 -1
  199. package/dist/members/util.js +18 -8
  200. package/dist/members/util.js.map +1 -1
  201. package/dist/{types/metrics → metrics}/constants.d.ts +15 -0
  202. package/dist/metrics/constants.js +16 -3
  203. package/dist/metrics/constants.js.map +1 -1
  204. package/dist/metrics/index.js +3 -2
  205. package/dist/metrics/index.js.map +1 -1
  206. package/dist/multistream/mediaRequestManager.js +9 -11
  207. package/dist/multistream/mediaRequestManager.js.map +1 -1
  208. package/dist/multistream/receiveSlot.js +3 -5
  209. package/dist/multistream/receiveSlot.js.map +1 -1
  210. package/dist/multistream/receiveSlotManager.js +7 -9
  211. package/dist/multistream/receiveSlotManager.js.map +1 -1
  212. package/dist/multistream/remoteMedia.js +3 -5
  213. package/dist/multistream/remoteMedia.js.map +1 -1
  214. package/dist/multistream/remoteMediaGroup.js +7 -6
  215. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  216. package/dist/{types/multistream → multistream}/remoteMediaManager.d.ts +9 -1
  217. package/dist/multistream/remoteMediaManager.js +74 -36
  218. package/dist/multistream/remoteMediaManager.js.map +1 -1
  219. package/dist/multistream/sendSlotManager.js +9 -6
  220. package/dist/multistream/sendSlotManager.js.map +1 -1
  221. package/dist/networkQualityMonitor/index.js +1 -2
  222. package/dist/networkQualityMonitor/index.js.map +1 -1
  223. package/dist/personal-meeting-room/index.js +2 -3
  224. package/dist/personal-meeting-room/index.js.map +1 -1
  225. package/dist/personal-meeting-room/request.js +2 -3
  226. package/dist/personal-meeting-room/request.js.map +1 -1
  227. package/dist/personal-meeting-room/util.js +1 -2
  228. package/dist/personal-meeting-room/util.js.map +1 -1
  229. package/dist/reachability/clusterReachability.d.ts +109 -0
  230. package/dist/reachability/clusterReachability.js +357 -0
  231. package/dist/reachability/clusterReachability.js.map +1 -0
  232. package/dist/reachability/index.d.ts +105 -0
  233. package/dist/reachability/index.js +279 -436
  234. package/dist/reachability/index.js.map +1 -1
  235. package/dist/{types/reachability → reachability}/request.d.ts +1 -1
  236. package/dist/reachability/request.js +14 -11
  237. package/dist/reachability/request.js.map +1 -1
  238. package/dist/reachability/util.d.ts +8 -0
  239. package/dist/reachability/util.js +29 -0
  240. package/dist/reachability/util.js.map +1 -0
  241. package/dist/reactions/constants.js +1 -2
  242. package/dist/reactions/constants.js.map +1 -1
  243. package/dist/reactions/reactions.js +2 -4
  244. package/dist/reactions/reactions.js.map +1 -1
  245. package/dist/reactions/reactions.type.js +6 -8
  246. package/dist/reactions/reactions.type.js.map +1 -1
  247. package/dist/{types/reconnection-manager → reconnection-manager}/index.d.ts +10 -0
  248. package/dist/reconnection-manager/index.js +129 -106
  249. package/dist/reconnection-manager/index.js.map +1 -1
  250. package/dist/recording-controller/enums.js +4 -5
  251. package/dist/recording-controller/enums.js.map +1 -1
  252. package/dist/recording-controller/index.js +43 -51
  253. package/dist/recording-controller/index.js.map +1 -1
  254. package/dist/recording-controller/util.js +1 -2
  255. package/dist/recording-controller/util.js.map +1 -1
  256. package/dist/{types/roap → roap}/index.d.ts +2 -1
  257. package/dist/roap/index.js +59 -28
  258. package/dist/roap/index.js.map +1 -1
  259. package/dist/{types/roap → roap}/request.d.ts +2 -1
  260. package/dist/roap/request.js +14 -22
  261. package/dist/roap/request.js.map +1 -1
  262. package/dist/{types/roap → roap}/turnDiscovery.d.ts +21 -4
  263. package/dist/roap/turnDiscovery.js +182 -89
  264. package/dist/roap/turnDiscovery.js.map +1 -1
  265. package/dist/rtcMetrics/constants.js +1 -2
  266. package/dist/rtcMetrics/constants.js.map +1 -1
  267. package/dist/{types/rtcMetrics → rtcMetrics}/index.d.ts +15 -1
  268. package/dist/rtcMetrics/index.js +72 -12
  269. package/dist/rtcMetrics/index.js.map +1 -1
  270. package/dist/statsAnalyzer/global.js +1 -2
  271. package/dist/statsAnalyzer/global.js.map +1 -1
  272. package/dist/{types/statsAnalyzer → statsAnalyzer}/index.d.ts +28 -11
  273. package/dist/statsAnalyzer/index.js +371 -318
  274. package/dist/statsAnalyzer/index.js.map +1 -1
  275. package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
  276. package/dist/statsAnalyzer/mqaUtil.js +295 -162
  277. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  278. package/dist/transcription/index.js +1 -2
  279. package/dist/transcription/index.js.map +1 -1
  280. package/dist/webinar/collection.d.ts +16 -0
  281. package/dist/webinar/collection.js +43 -0
  282. package/dist/webinar/collection.js.map +1 -0
  283. package/dist/webinar/index.d.ts +5 -0
  284. package/dist/webinar/index.js +68 -0
  285. package/dist/webinar/index.js.map +1 -0
  286. package/jest.config.js +3 -0
  287. package/package.json +44 -24
  288. package/process +1 -0
  289. package/src/common/errors/no-meeting-info.ts +24 -0
  290. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  291. package/src/common/errors/webex-errors.ts +19 -2
  292. package/src/common/logs/request.ts +5 -1
  293. package/src/config.ts +3 -5
  294. package/src/constants.ts +78 -8
  295. package/src/index.ts +4 -0
  296. package/src/interceptors/index.ts +3 -0
  297. package/src/interceptors/locusRetry.ts +67 -0
  298. package/src/locus-info/index.ts +52 -16
  299. package/src/locus-info/mediaSharesUtils.ts +16 -0
  300. package/src/locus-info/parser.ts +47 -21
  301. package/src/media/index.ts +8 -6
  302. package/src/media/properties.ts +17 -2
  303. package/src/mediaQualityMetrics/config.ts +103 -238
  304. package/src/meeting/in-meeting-actions.ts +8 -0
  305. package/src/meeting/index.ts +1692 -627
  306. package/src/meeting/request.ts +19 -1
  307. package/src/meeting/util.ts +102 -1
  308. package/src/meeting/voicea-meeting.ts +122 -0
  309. package/src/meeting-info/index.ts +47 -20
  310. package/src/meeting-info/meeting-info-v2.ts +32 -16
  311. package/src/meeting-info/util.ts +12 -9
  312. package/src/meeting-info/utilv2.ts +25 -15
  313. package/src/meetings/collection.ts +13 -0
  314. package/src/meetings/index.ts +112 -31
  315. package/src/meetings/util.ts +2 -8
  316. package/src/member/index.ts +9 -1
  317. package/src/member/member.types.ts +13 -0
  318. package/src/member/util.ts +14 -0
  319. package/src/members/index.ts +29 -2
  320. package/src/members/types.ts +1 -0
  321. package/src/members/util.ts +15 -1
  322. package/src/metrics/constants.ts +14 -0
  323. package/src/multistream/remoteMediaManager.ts +41 -4
  324. package/src/reachability/clusterReachability.ts +320 -0
  325. package/src/reachability/index.ts +221 -382
  326. package/src/reachability/request.ts +1 -1
  327. package/src/reachability/util.ts +24 -0
  328. package/src/reconnection-manager/index.ts +87 -83
  329. package/src/roap/index.ts +60 -24
  330. package/src/roap/request.ts +4 -17
  331. package/src/roap/turnDiscovery.ts +112 -39
  332. package/src/rtcMetrics/index.ts +71 -5
  333. package/src/statsAnalyzer/index.ts +430 -427
  334. package/src/statsAnalyzer/mqaUtil.ts +317 -168
  335. package/src/webinar/collection.ts +31 -0
  336. package/src/webinar/index.ts +62 -0
  337. package/test/integration/spec/converged-space-meetings.js +7 -7
  338. package/test/integration/spec/journey.js +88 -106
  339. package/test/integration/spec/space-meeting.js +10 -10
  340. package/test/unit/spec/breakouts/breakout.ts +2 -1
  341. package/test/unit/spec/breakouts/index.ts +7 -4
  342. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  343. package/test/unit/spec/locus-info/index.js +206 -13
  344. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  345. package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
  346. package/test/unit/spec/locus-info/parser.js +54 -13
  347. package/test/unit/spec/locus-info/selfUtils.js +1 -1
  348. package/test/unit/spec/media/index.ts +25 -4
  349. package/test/unit/spec/media/properties.ts +2 -2
  350. package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
  351. package/test/unit/spec/meeting/index.js +4354 -1285
  352. package/test/unit/spec/meeting/request.js +63 -12
  353. package/test/unit/spec/meeting/utils.js +145 -10
  354. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  355. package/test/unit/spec/meeting-info/index.js +180 -61
  356. package/test/unit/spec/meeting-info/meetinginfov2.js +216 -68
  357. package/test/unit/spec/meetings/collection.js +12 -0
  358. package/test/unit/spec/meetings/index.js +676 -195
  359. package/test/unit/spec/meetings/utils.js +35 -12
  360. package/test/unit/spec/member/index.js +8 -7
  361. package/test/unit/spec/member/util.js +32 -0
  362. package/test/unit/spec/members/index.js +130 -17
  363. package/test/unit/spec/members/utils.js +26 -0
  364. package/test/unit/spec/metrics/index.js +1 -2
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +1 -0
  366. package/test/unit/spec/multistream/remoteMediaManager.ts +10 -2
  367. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  368. package/test/unit/spec/reachability/index.ts +505 -135
  369. package/test/unit/spec/reachability/util.ts +40 -0
  370. package/test/unit/spec/reconnection-manager/index.js +74 -17
  371. package/test/unit/spec/recording-controller/index.js +0 -1
  372. package/test/unit/spec/roap/index.ts +181 -61
  373. package/test/unit/spec/roap/request.ts +27 -3
  374. package/test/unit/spec/roap/turnDiscovery.ts +363 -102
  375. package/test/unit/spec/rtcMetrics/index.ts +57 -3
  376. package/test/unit/spec/stats-analyzer/index.js +1225 -12
  377. package/test/unit/spec/webinar/collection.ts +13 -0
  378. package/test/unit/spec/webinar/index.ts +60 -0
  379. package/test/utils/integrationTestUtils.js +4 -4
  380. package/test/utils/webex-test-users.js +12 -4
  381. package/dist/types/mediaQualityMetrics/config.d.ts +0 -365
  382. package/dist/types/reachability/index.d.ts +0 -158
  383. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -24
  384. /package/dist/{types/annotation → annotation}/annotation.types.d.ts +0 -0
  385. /package/dist/{types/annotation → annotation}/constants.d.ts +0 -0
  386. /package/dist/{types/annotation → annotation}/index.d.ts +0 -0
  387. /package/dist/{types/breakouts → breakouts}/breakout.d.ts +0 -0
  388. /package/dist/{types/breakouts → breakouts}/collection.d.ts +0 -0
  389. /package/dist/{types/breakouts → breakouts}/edit-lock-error.d.ts +0 -0
  390. /package/dist/{types/breakouts → breakouts}/events.d.ts +0 -0
  391. /package/dist/{types/breakouts → breakouts}/index.d.ts +0 -0
  392. /package/dist/{types/breakouts → breakouts}/request.d.ts +0 -0
  393. /package/dist/{types/breakouts → breakouts}/utils.d.ts +0 -0
  394. /package/dist/{types/common → common}/browser-detection.d.ts +0 -0
  395. /package/dist/{types/common → common}/collection.d.ts +0 -0
  396. /package/dist/{types/common → common}/config.d.ts +0 -0
  397. /package/dist/{types/common → common}/errors/captcha-error.d.ts +0 -0
  398. /package/dist/{types/common → common}/errors/intent-to-join.d.ts +0 -0
  399. /package/dist/{types/common → common}/errors/join-meeting.d.ts +0 -0
  400. /package/dist/{types/common → common}/errors/media.d.ts +0 -0
  401. /package/dist/{types/common → common}/errors/parameter.d.ts +0 -0
  402. /package/dist/{types/common → common}/errors/password-error.d.ts +0 -0
  403. /package/dist/{types/common → common}/errors/permission.d.ts +0 -0
  404. /package/dist/{types/common → common}/errors/reconnection-in-progress.d.ts +0 -0
  405. /package/dist/{types/common → common}/errors/reconnection.d.ts +0 -0
  406. /package/dist/{types/common → common}/errors/stats.d.ts +0 -0
  407. /package/dist/{types/common → common}/errors/webex-meetings-error.d.ts +0 -0
  408. /package/dist/{types/common → common}/events/events-scope.d.ts +0 -0
  409. /package/dist/{types/common → common}/events/events.d.ts +0 -0
  410. /package/dist/{types/common → common}/events/trigger-proxy.d.ts +0 -0
  411. /package/dist/{types/common → common}/events/util.d.ts +0 -0
  412. /package/dist/{types/common → common}/logs/logger-config.d.ts +0 -0
  413. /package/dist/{types/common → common}/logs/logger-proxy.d.ts +0 -0
  414. /package/dist/{types/common → common}/queue.d.ts +0 -0
  415. /package/dist/{types/controls-options-manager → controls-options-manager}/constants.d.ts +0 -0
  416. /package/dist/{types/controls-options-manager → controls-options-manager}/enums.d.ts +0 -0
  417. /package/dist/{types/controls-options-manager → controls-options-manager}/index.d.ts +0 -0
  418. /package/dist/{types/controls-options-manager → controls-options-manager}/types.d.ts +0 -0
  419. /package/dist/{types/controls-options-manager → controls-options-manager}/util.d.ts +0 -0
  420. /package/dist/{types/index.d.ts → index.d.ts} +0 -0
  421. /package/dist/{types/interpretation → interpretation}/collection.d.ts +0 -0
  422. /package/dist/{types/interpretation → interpretation}/index.d.ts +0 -0
  423. /package/dist/{types/interpretation → interpretation}/siLanguage.d.ts +0 -0
  424. /package/dist/{types/locus-info → locus-info}/controlsUtils.d.ts +0 -0
  425. /package/dist/{types/locus-info → locus-info}/embeddedAppsUtils.d.ts +0 -0
  426. /package/dist/{types/locus-info → locus-info}/fullState.d.ts +0 -0
  427. /package/dist/{types/locus-info → locus-info}/hostUtils.d.ts +0 -0
  428. /package/dist/{types/locus-info → locus-info}/infoUtils.d.ts +0 -0
  429. /package/dist/{types/locus-info → locus-info}/mediaSharesUtils.d.ts +0 -0
  430. /package/dist/{types/locus-info → locus-info}/selfUtils.d.ts +0 -0
  431. /package/dist/{types/media → media}/index.d.ts +0 -0
  432. /package/dist/{types/media → media}/properties.d.ts +0 -0
  433. /package/dist/{types/media → media}/util.d.ts +0 -0
  434. /package/dist/{types/meeting → meeting}/muteState.d.ts +0 -0
  435. /package/dist/{types/meeting → meeting}/request.type.d.ts +0 -0
  436. /package/dist/{types/meeting → meeting}/state.d.ts +0 -0
  437. /package/dist/{types/meeting-info → meeting-info}/collection.d.ts +0 -0
  438. /package/dist/{types/meeting-info → meeting-info}/request.d.ts +0 -0
  439. /package/dist/{types/meeting-info → meeting-info}/util.d.ts +0 -0
  440. /package/dist/{types/meeting-info → meeting-info}/utilv2.d.ts +0 -0
  441. /package/dist/{types/meetings → meetings}/meetings.types.d.ts +0 -0
  442. /package/dist/{types/meetings → meetings}/request.d.ts +0 -0
  443. /package/dist/{types/meetings → meetings}/util.d.ts +0 -0
  444. /package/dist/{types/member → member}/types.d.ts +0 -0
  445. /package/dist/{types/member → member}/util.d.ts +0 -0
  446. /package/dist/{types/members → members}/collection.d.ts +0 -0
  447. /package/dist/{types/members → members}/index.d.ts +0 -0
  448. /package/dist/{types/members → members}/request.d.ts +0 -0
  449. /package/dist/{types/metrics → metrics}/index.d.ts +0 -0
  450. /package/dist/{types/multistream → multistream}/mediaRequestManager.d.ts +0 -0
  451. /package/dist/{types/multistream → multistream}/receiveSlot.d.ts +0 -0
  452. /package/dist/{types/multistream → multistream}/receiveSlotManager.d.ts +0 -0
  453. /package/dist/{types/multistream → multistream}/remoteMedia.d.ts +0 -0
  454. /package/dist/{types/multistream → multistream}/remoteMediaGroup.d.ts +0 -0
  455. /package/dist/{types/multistream → multistream}/sendSlotManager.d.ts +0 -0
  456. /package/dist/{types/networkQualityMonitor → networkQualityMonitor}/index.d.ts +0 -0
  457. /package/dist/{types/personal-meeting-room → personal-meeting-room}/index.d.ts +0 -0
  458. /package/dist/{types/personal-meeting-room → personal-meeting-room}/request.d.ts +0 -0
  459. /package/dist/{types/personal-meeting-room → personal-meeting-room}/util.d.ts +0 -0
  460. /package/dist/{types/reactions → reactions}/constants.d.ts +0 -0
  461. /package/dist/{types/reactions → reactions}/reactions.d.ts +0 -0
  462. /package/dist/{types/reactions → reactions}/reactions.type.d.ts +0 -0
  463. /package/dist/{types/recording-controller → recording-controller}/enums.d.ts +0 -0
  464. /package/dist/{types/recording-controller → recording-controller}/index.d.ts +0 -0
  465. /package/dist/{types/recording-controller → recording-controller}/util.d.ts +0 -0
  466. /package/dist/{types/rtcMetrics → rtcMetrics}/constants.d.ts +0 -0
  467. /package/dist/{types/statsAnalyzer → statsAnalyzer}/global.d.ts +0 -0
  468. /package/dist/{types/transcription → transcription}/index.d.ts +0 -0
  469. /package/test/unit/spec/locus-info/{selfConstant.js → lib/selfConstant.js} +0 -0
@@ -0,0 +1,266 @@
1
+ import {
2
+ getSpeakerFromProxyOrStore,
3
+ processNewCaptions,
4
+ } from '@webex/plugin-meetings/src/meeting/voicea-meeting';
5
+ import {assert} from '@webex/test-helper-chai';
6
+ import { expect } from 'chai';
7
+
8
+ describe('plugin-meetings', () => {
9
+ let fakeMeeting, fakeVoiceaPayload;
10
+ const fakeMemberId = "4f35a5ab-f750-3ba7-b309-dea62a512257";
11
+ beforeEach(() => {
12
+ const fakeMemberList = {
13
+ [fakeMemberId]: {
14
+ participant: {
15
+ person: {
16
+ id: "8093d335-9b96-4f9d-a6b2-7293423be88a",
17
+ name: "John Doe",
18
+ isExternal: false,
19
+ orgId: "1eb65fdf-9643-417f-9974-ad72cae0e10f",
20
+ incomingCallProtocols: []
21
+ },
22
+ status: {
23
+ audioStatus: "SENDRECV",
24
+ videoStatus: "INACTIVE",
25
+ videoSlidesStatus: "RECVONLY",
26
+ audioSlidesStatus: "INACTIVE",
27
+ csis: [
28
+ 3060099329,
29
+ 3060099328,
30
+ 1234867712,
31
+ 1234867713
32
+ ]
33
+ },
34
+ },
35
+ id: fakeMemberId
36
+ }
37
+ };
38
+
39
+ const fakeCaptions = {
40
+ captions: [
41
+ {
42
+ id: "6bece1b9-4e50-fafe-fb63-d27d5fb27280",
43
+ isFinal: true,
44
+ text: "Oh it's not update.",
45
+ currentSpokenLanguage: "en",
46
+ timestamp: "1:34",
47
+ speaker: {
48
+ speakerId: "8093d335-9b96-4f9d-a6b2-7293423be88a",
49
+ name: "John Doe"
50
+ }
51
+ },
52
+ {
53
+ id: "c34400a9-cb2b-20c3-d20c-bd7981cc62a9",
54
+ isFinal: true,
55
+ text: "Nice.",
56
+ currentSpokenLanguage: "en",
57
+ timestamp: "1:60",
58
+ speaker: {
59
+ speakerId: "8093d335-9b96-4f9d-a6b2-7293423be88a",
60
+ name: "John Doe"
61
+ }
62
+ },
63
+ {
64
+ id: "311cc182-e657-c077-c078-795f866c4e9b_8093d335-9b96-4f9d-a6b2-7293423be88a",
65
+ isFinal: false,
66
+ text: " Don't bother me talking I'm just going to get the transcript data that is interim and I",
67
+ currentCaptionLanguage: "en",
68
+ speaker: {
69
+ speakerId: "8093d335-9b96-4f9d-a6b2-7293423be88a",
70
+ name: "John Doe"
71
+ }
72
+ }
73
+ ],
74
+ interimCaptions: {
75
+ "6bece1b9-4e50-fafe-fb63-d27d5fb27280": [],
76
+ "c34400a9-cb2b-20c3-d20c-bd7981cc62a9": [],
77
+ "311cc182-e657-c077-c078-795f866c4e9b": [
78
+ "311cc182-e657-c077-c078-795f866c4e9b_8093d335-9b96-4f9d-a6b2-7293423be88a"
79
+ ]
80
+ },
81
+ speakerProxy: {},
82
+ };
83
+
84
+ fakeMeeting = {
85
+ members: {
86
+ membersCollection: {
87
+ members: fakeMemberList
88
+ }
89
+ },
90
+ transcription: fakeCaptions
91
+ }
92
+
93
+ fakeVoiceaPayload = {
94
+ isFinal: true,
95
+ transcriptId: "311cc182-e657-c077-c078-795f866c4e9b",
96
+ transcripts: [
97
+ {
98
+ text: "Don't bother me talking I'm just going to get the transcript data that is interim and I needed if I keep talking, I get the interim data",
99
+ csis: [
100
+ 1234867712
101
+ ],
102
+ transcript_language_code: "en"
103
+ }
104
+ ],
105
+ transcript: {
106
+ text: "Don't bother me talking I'm just going to get the transcript data that is interim and I needed if I keep talking, I get the interim data",
107
+ csis: [
108
+ 1234867712
109
+ ],
110
+ transcript_language_code: "en"
111
+ }
112
+ };
113
+ });
114
+
115
+ describe('voicea-meeting', () => {
116
+ it('should export the correct members', () => {
117
+ assert.isFunction(getSpeakerFromProxyOrStore);
118
+ assert.isFunction(processNewCaptions);
119
+ });
120
+
121
+ describe('getSpeakerFromProxyOrStore', () => {
122
+ it('should return a cached speaker if csisKey is in speakerProxy', () => {
123
+ // Add a speaker to the speakerProxy
124
+ const csisKey = 1234867712;
125
+ const cachedSpeaker = {
126
+ speakerId: 'cached-speaker-id',
127
+ name: 'Cached Speaker'
128
+ };
129
+ fakeMeeting.transcription.speakerProxy[csisKey] = cachedSpeaker;
130
+
131
+ const { speaker, needsCaching } = getSpeakerFromProxyOrStore({
132
+ csisKey,
133
+ meetingMembers: fakeMeeting.members.membersCollection.members,
134
+ transcriptData: fakeMeeting.transcription
135
+ });
136
+
137
+ expect(speaker).to.deep.equal(cachedSpeaker);
138
+ expect(needsCaching).to.be.false;
139
+ });
140
+
141
+ it('should find and cache a speaker if not already in speakerProxy', () => {
142
+ const csisKey = 1234867712; // This csis exists in the fakeMemberList
143
+
144
+ // Ensure speakerProxy is empty
145
+ fakeMeeting.transcription.speakerProxy = {};
146
+
147
+ const { speaker, needsCaching } = getSpeakerFromProxyOrStore({
148
+ csisKey,
149
+ meetingMembers: fakeMeeting.members.membersCollection.members,
150
+ transcriptData: fakeMeeting.transcription
151
+ });
152
+
153
+ expect(speaker.speakerId).to.equal(fakeMeeting.members.membersCollection.members[fakeMemberId].participant.person.id);
154
+ expect(speaker.name).to.equal(fakeMeeting.members.membersCollection.members[fakeMemberId].participant.person.name);
155
+ expect(needsCaching).to.be.true;
156
+ });
157
+ });
158
+
159
+ describe('processNewCaptions', () => {
160
+ it('should process new final captions correctly', () => {
161
+ let transcriptData = fakeMeeting.transcription;
162
+ let transcriptId = fakeVoiceaPayload.transcriptId;
163
+ delete fakeVoiceaPayload.transcripts;
164
+
165
+ // Assuming that processNewCaptions is a pure function that doesn't mutate the input but returns a new state
166
+ processNewCaptions({
167
+ data: fakeVoiceaPayload,
168
+ meeting: fakeMeeting
169
+ });
170
+
171
+ // Check if speaker details are cached if needed
172
+ const csisKey = fakeVoiceaPayload.transcript.csis[0];
173
+ const speaker = transcriptData.speakerProxy[csisKey];
174
+ expect(speaker).to.exist;
175
+
176
+ // Check if interim captions are removed
177
+ expect(transcriptData.interimCaptions[transcriptId]).to.deep.equal([]);
178
+
179
+ //check if the interim caption is removed
180
+ const oldInterimCaption = transcriptData.captions.find(caption => caption.id === `${transcriptId}_${speaker.speakerId}`);
181
+ expect(oldInterimCaption).to.not.exist;
182
+
183
+ // Check the final caption data
184
+ const newCaption = transcriptData.captions.find(caption => caption.id === transcriptId);
185
+ expect(newCaption).to.exist;
186
+ expect(newCaption).to.include({
187
+ id: transcriptId,
188
+ isFinal: fakeVoiceaPayload.isFinal,
189
+ text: fakeVoiceaPayload.transcript.text,
190
+ currentSpokenLanguage: fakeVoiceaPayload.transcript.transcript_language_code,
191
+ });
192
+
193
+ // Check the speaker data in the new caption
194
+ expect(newCaption.speaker).to.deep.equal(speaker);
195
+ });
196
+
197
+ it('should process new interim captions correctly', () => {
198
+ let transcriptData = fakeMeeting.transcription;
199
+ let transcriptId = fakeVoiceaPayload.transcriptId;
200
+ delete fakeVoiceaPayload.transcript;
201
+
202
+ transcriptData.captions.splice(transcriptData.length - 1, 1);
203
+ fakeVoiceaPayload.isFinal = false;
204
+
205
+ processNewCaptions({
206
+ data: fakeVoiceaPayload,
207
+ meeting: fakeMeeting
208
+ });
209
+
210
+ // Check if speaker details are cached if needed
211
+ const csisKey = fakeVoiceaPayload.transcripts[0].csis[0];
212
+ const speaker = transcriptData.speakerProxy[csisKey];
213
+ expect(speaker).to.exist;
214
+
215
+ // Check the final caption data
216
+ const newCaption = transcriptData.captions.find(caption => caption.id === `${transcriptId}_${speaker.speakerId}`);
217
+ expect(newCaption).to.exist;
218
+ expect(newCaption).to.include({
219
+ id: `${transcriptId}_${speaker.speakerId}`,
220
+ isFinal: fakeVoiceaPayload.isFinal,
221
+ text: fakeVoiceaPayload.transcripts[0].text,
222
+ currentCaptionLanguage: fakeVoiceaPayload.transcripts[0].transcript_language_code,
223
+ });
224
+
225
+ // Check if interim captions has the right caption id
226
+ expect(transcriptData.interimCaptions[transcriptId]).to.deep.equal([newCaption.id]);
227
+
228
+ // Check the speaker data in the new caption
229
+ expect(newCaption.speaker).to.deep.equal(speaker);
230
+ });
231
+
232
+ it('should process interim captions with an existing one correctly', () => {
233
+ let transcriptData = fakeMeeting.transcription;
234
+ let transcriptId = fakeVoiceaPayload.transcriptId;
235
+ delete fakeVoiceaPayload.transcript;
236
+ fakeVoiceaPayload.isFinal = false;
237
+
238
+ processNewCaptions({
239
+ data: fakeVoiceaPayload,
240
+ meeting: fakeMeeting
241
+ });
242
+
243
+ // Check if speaker details are cached if needed
244
+ const csisKey = fakeVoiceaPayload.transcripts[0].csis[0];
245
+ const speaker = transcriptData.speakerProxy[csisKey];
246
+ expect(speaker).to.exist;
247
+
248
+ // Check the final caption data
249
+ const newCaption = transcriptData.captions.find(caption => caption.id === `${transcriptId}_${speaker.speakerId}`);
250
+ expect(newCaption).to.exist;
251
+ expect(newCaption).to.include({
252
+ id: `${transcriptId}_${speaker.speakerId}`,
253
+ isFinal: fakeVoiceaPayload.isFinal,
254
+ text: fakeVoiceaPayload.transcripts[0].text,
255
+ currentCaptionLanguage: fakeVoiceaPayload.transcripts[0].transcript_language_code,
256
+ });
257
+
258
+ // Check if interim captions has the right caption id
259
+ expect(transcriptData.interimCaptions[transcriptId]).to.deep.equal([newCaption.id]);
260
+
261
+ // Check the speaker data in the new caption
262
+ expect(newCaption.speaker).to.deep.equal(speaker);
263
+ });
264
+ });
265
+ });
266
+ });
@@ -25,42 +25,78 @@ describe('plugin-meetings', () => {
25
25
  });
26
26
 
27
27
  describe('#fetchMeetingInfo', () => {
28
- it('should send ca events if meetingId present', async () => {
29
- const body = {meetingKey: '1234323'};
28
+ const checkResolvedFetchMeetingInfo = async ({meetingId, sendCAevents, shouldSendCAMetrics, confIdStrProp}) => {
29
+ const body = {meetingKey: '1234323', url: 'url-123', confID: '123', meetingId: '321'};
30
+ const bodyConfIdStr = {meetingKey: '1234323', url: 'url-123', confIdStr: '123', meetingId: '321'};
30
31
 
31
32
  sinon
32
33
  .stub(MeetingInfoUtil, 'generateOptions')
33
34
  .resolves({type: 'MEETING_ID', destination: '123456'});
34
- sinon.stub(MeetingInfoRequest.prototype, 'fetchMeetingInfo').returns(Promise.resolve(body));
35
+ sinon.stub(MeetingInfoRequest.prototype, 'fetchMeetingInfo').returns(Promise.resolve(confIdStrProp ? bodyConfIdStr : body));
35
36
 
36
37
  await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, null, null, null, null, null, {
37
- meetingId: 'meetingId',
38
+ meetingId,
39
+ sendCAevents,
38
40
  });
39
41
 
40
42
  const submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
43
+ const submitClientEventCalls = webex.internal.newMetrics.submitClientEvent.getCalls();
41
44
 
42
- assert.deepEqual(submitInternalEventCalls[0].args[0], {
43
- name: 'internal.client.meetinginfo.request',
44
- });
45
- assert.deepEqual(submitInternalEventCalls[1].args[0], {
46
- name: 'internal.client.meetinginfo.response',
47
- });
45
+ if (shouldSendCAMetrics) {
46
+ assert.deepEqual(submitInternalEventCalls[0].args[0], {
47
+ name: 'internal.client.meetinginfo.request',
48
+ });
49
+
50
+ assert.deepEqual(submitClientEventCalls[0].args[0], {
51
+ name: 'client.meetinginfo.request',
52
+ options: {
53
+ meetingId,
54
+ },
55
+ });
56
+
57
+ assert.deepEqual(submitInternalEventCalls[1].args[0], {
58
+ name: 'internal.client.meetinginfo.response',
59
+ });
60
+
61
+ assert.deepEqual(submitClientEventCalls[1].args[0], {
62
+ name: 'client.meetinginfo.response',
63
+ payload: {
64
+ identifiers: {
65
+ meetingLookupUrl: 'url-123',
66
+ },
67
+ },
68
+ options: {
69
+ meetingId,
70
+ webexConferenceIdStr: '123',
71
+ globalMeetingId: '321'
72
+ },
73
+ });
74
+ } else {
75
+ assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
76
+ assert.notCalled(webex.internal.newMetrics.submitClientEvent);
77
+ }
78
+ }
79
+ it('should send ca events if meetingId present and send CA events is authorized', async () => {
80
+ checkResolvedFetchMeetingInfo({meetingId: 'meetingId', sendCAevents: true, shouldSendCAMetrics: true});
48
81
  });
49
82
 
50
- it('should not send ca events if meetingId not present', async () => {
51
- const body = {meetingKey: '1234323'};
83
+ it('should send ca events if meetingId present and send CA events is authorized and confIdStrProp is true', async () => {
84
+ checkResolvedFetchMeetingInfo({meetingId: 'meetingId', sendCAevents: true, shouldSendCAMetrics: true, confIdStrProp: true});
85
+ });
52
86
 
53
- sinon
54
- .stub(MeetingInfoUtil, 'generateOptions')
55
- .resolves({type: 'MEETING_ID', destination: '123456'});
56
- sinon.stub(MeetingInfoRequest.prototype, 'fetchMeetingInfo').returns(Promise.resolve(body));
87
+ it('should not send ca events if meetingId not present even if CA events are authorized', async () => {
88
+ checkResolvedFetchMeetingInfo({sendCAevents: true, shouldSendCAMetrics: false});
89
+ });
57
90
 
58
- await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, null, null, null, null, null);
91
+ it('should not send ca events if CA events are not authorized', async () => {
92
+ checkResolvedFetchMeetingInfo({meetingId: 'meetingId', shouldSendCAMetrics: false});
93
+ });
59
94
 
60
- assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
95
+ it('should not send ca events if meeting id is not present and CA events are not authorized', async () => {
96
+ checkResolvedFetchMeetingInfo({shouldSendCAMetrics: false});
61
97
  });
62
98
 
63
- it('should send ca events when fails and if meetingId present', async () => {
99
+ const checkFailingFetchMeetingInfo = async ({meetingId, sendCAevents, shouldSendCAMetrics}) => {
64
100
  const reject = {
65
101
  statusCode: 403,
66
102
  body: {message: 'msg', code: 403102, data: {meetingInfo: {}}},
@@ -84,32 +120,66 @@ describe('plugin-meetings', () => {
84
120
  null,
85
121
  null,
86
122
  {
87
- meetingId: 'meetingId',
123
+ meetingId,
124
+ sendCAevents,
88
125
  }
89
126
  );
90
127
  } catch (err) {
91
128
  const submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
129
+ const submitClientEventCalls = webex.internal.newMetrics.submitClientEvent.getCalls();
92
130
 
93
- assert.deepEqual(submitInternalEventCalls[0].args[0], {
94
- name: 'internal.client.meetinginfo.request',
95
- });
131
+ if(shouldSendCAMetrics) {
132
+ assert.deepEqual(submitInternalEventCalls[0].args[0], {
133
+ name: 'internal.client.meetinginfo.request',
134
+ });
96
135
 
97
- assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
98
- name: 'client.meetinginfo.response',
99
- payload: {
100
- identifiers: {
101
- meetingLookupUrl: 'http://api-url.com',
136
+ assert.deepEqual(submitClientEventCalls[0].args[0], {
137
+ name: 'client.meetinginfo.request',
138
+ options: {
139
+ meetingId: 'meetingId',
102
140
  },
103
- },
104
- options: {
105
- meetingId: 'meetingId',
106
- rawError: err,
107
- },
108
- });
141
+ });
142
+
143
+ assert.deepEqual(submitInternalEventCalls[1].args[0], {
144
+ name: 'internal.client.meetinginfo.response',
145
+ });
146
+
147
+ assert.deepEqual(submitClientEventCalls[1].args[0], {
148
+ name: 'client.meetinginfo.response',
149
+ payload: {
150
+ identifiers: {
151
+ meetingLookupUrl: 'http://api-url.com',
152
+ },
153
+ },
154
+ options: {
155
+ meetingId: 'meetingId',
156
+ rawError: err,
157
+ },
158
+ });
159
+ } else {
160
+ assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
161
+ assert.notCalled(webex.internal.newMetrics.submitClientEvent);
162
+ }
109
163
  }
164
+ }
165
+
166
+ it('should send ca events when fails if meetingId present and CA events are authorized', async () => {
167
+ checkFailingFetchMeetingInfo({meetingId: 'meetingId', sendCAevents: true, shouldSendCAMetrics: true})
168
+ });
169
+
170
+ it('should not send ca events when fails if meetingId present and CA events are not authorized', async () => {
171
+ checkFailingFetchMeetingInfo({meetingId: 'meetingId', shouldSendCAMetrics: false})
172
+ });
173
+
174
+ it('should not send ca events when fails if meetingId not present even if CA events are authorized', async () => {
175
+ checkFailingFetchMeetingInfo({sendCAevents: true, shouldSendCAMetrics: false})
176
+ });
177
+
178
+ it('should not send ca events when fails if meetingId not present and CA events are not authorized', async () => {
179
+ checkFailingFetchMeetingInfo({shouldSendCAMetrics: false})
110
180
  });
111
181
 
112
- it('should send ca events when in the retry as well if meetingId present', async () => {
182
+ const checkRetryFetchMeetingInfo = async ({meetingId, sendCAevents, shouldSendCAMetrics}) => {
113
183
  const reject = {
114
184
  statusCode: 403,
115
185
  body: {message: 'msg', code: 403102, data: {meetingInfo: {}}},
@@ -118,7 +188,7 @@ describe('plugin-meetings', () => {
118
188
 
119
189
  sinon
120
190
  .stub(MeetingInfoUtil, 'generateOptions')
121
- .resolves({type: 'MEETING_LINK', destination: '123456'});
191
+ .resolves({type: 'MEETING_LINK', destination: '123456', url: 'success-url-123'});
122
192
  const requestStub = sinon
123
193
  .stub(MeetingInfoRequest.prototype, 'fetchMeetingInfo')
124
194
  .rejects(reject);
@@ -133,48 +203,97 @@ describe('plugin-meetings', () => {
133
203
  null,
134
204
  null,
135
205
  {
136
- meetingId: 'meetingId',
206
+ meetingId,
207
+ sendCAevents,
137
208
  }
138
209
  );
139
210
  assert.fail('fetchMeetingInfo should have thrown, but has not done that');
140
211
  } catch (err) {
141
212
  let submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
213
+ let submitClientEventCalls = webex.internal.newMetrics.submitClientlEvent.getCalls();
142
214
 
143
- assert.deepEqual(submitInternalEventCalls[0].args[0], {
144
- name: 'internal.client.meetinginfo.request',
145
- });
215
+ if(shouldSendCAMetrics) {
216
+ assert.deepEqual(submitInternalEventCalls[0].args[0], {
217
+ name: 'internal.client.meetinginfo.request',
218
+ });
146
219
 
147
- assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
148
- name: 'client.meetinginfo.response',
149
- payload: {
150
- identifiers: {
151
- meetingLookupUrl: 'http://api-url.com',
152
- },
153
- },
154
- options: {
155
- meetingId: 'meetingId',
156
- rawError: err,
157
- },
158
- });
220
+ assert.deepEqual(submitClientEventCalls[0].args[0], {
221
+ name: 'client.meetinginfo.request',
222
+ });
159
223
 
160
- assert.deepEqual(submitInternalEventCalls[1].args[0], {
161
- name: 'internal.client.meetinginfo.response',
162
- });
224
+ assert.deepEqual(submitInternalEventCalls[1].args[0], {
225
+ name: 'internal.client.meetinginfo.response',
226
+ });
227
+
228
+ assert.deepEqual(submitClientEventCalls[1].args[0], {
229
+ name: 'client.meetinginfo.response',
230
+ payload: {
231
+ identifiers: {
232
+ meetingLookupUrl: 'http://api-url.com',
233
+ },
234
+ },
235
+ options: {
236
+ meetingId: 'meetingId',
237
+ rawError: err,
238
+ },
239
+ });
163
240
 
164
- assert.deepEqual(submitInternalEventCalls[2].args[0], {
165
- name: 'internal.client.meetinginfo.request',
166
- });
241
+ assert.deepEqual(submitInternalEventCalls[2].args[0], {
242
+ name: 'internal.client.meetinginfo.request',
243
+ });
244
+
245
+ assert.deepEqual(submitClientEventCalls[2].args[0], {
246
+ name: 'client.meetinginfo.request',
247
+ payload: {
248
+ identifiers: {
249
+ meetingLookupUrl: 'success-url-123',
250
+ },
251
+ },
252
+ });
253
+ } else {
254
+ assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
255
+ assert.notCalled(webex.internal.newMetrics.submitClientEvent);
256
+ }
167
257
 
168
258
  requestStub.resolves({});
169
259
 
170
260
  await flushPromises();
171
261
 
172
262
  submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
263
+ submitClientEventCalls = webex.internal.newMetrics.submitClientEvent.getCalls();
173
264
 
174
- assert.deepEqual(submitInternalEventCalls[3].args[0], {
175
- name: 'internal.client.meetinginfo.response',
176
- });
265
+ if(shouldSendInternalCAMetrics) {
266
+ assert.deepEqual(submitInternalEventCalls[3].args[0], {
267
+ name: 'internal.client.meetinginfo.response',
268
+ });
269
+ } else {
270
+ assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
271
+ }
272
+
273
+ if(shouldSendCAMetrics) {
274
+ assert.deepEqual(submitClientEventCalls[3].args[0], {
275
+ name: 'internal.client.meetinginfo.response',
276
+ });
277
+ } else {
278
+ assert.notCalled(webex.internal.newMetrics.submitClientEvent);
279
+ }
177
280
  }
281
+ }
282
+
283
+ it('should send ca events when in the retry as well if meetingId present and CA events are authorized', async () => {
284
+ checkRetryFetchMeetingInfo({meetingId: 'meetingId', sendCAevents: true, shouldSendCAMetrics: true})
285
+ });
286
+
287
+ it('should not send ca events when in the retry as well if meetingId not present and CA events are authorized', async () => {
288
+ checkRetryFetchMeetingInfo({sendCAevents: true, shouldSendCAMetrics: false})
289
+ });
290
+
291
+ it('should not send ca events when in the retry as well if meetingId present and CA events are not authorized', async () => {
292
+ checkRetryFetchMeetingInfo({meetingId: 'meetingId', shouldSendCAMetrics: false})
293
+ });
294
+
295
+ it('should not send ca events when in the retry as well if meetingId not present and CA events are not authorized', async () => {
296
+ checkRetryFetchMeetingInfo({shouldSendCAMetrics: false})
178
297
  });
179
298
  });
180
299
  });