@webex/plugin-meetings 2.60.0 → 2.60.1-next.10

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 (539) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +234 -100
  90. package/dist/constants.js +433 -444
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +705 -520
  159. package/dist/meeting/index.js +5047 -3089
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +304 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +118 -1
  176. package/dist/meeting/util.js +676 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting/voicea-meeting.d.ts +20 -0
  179. package/dist/meeting/voicea-meeting.js +201 -0
  180. package/dist/meeting/voicea-meeting.js.map +1 -0
  181. package/dist/meeting-info/collection.js +3 -4
  182. package/dist/meeting-info/collection.js.map +1 -1
  183. package/dist/meeting-info/index.d.ts +13 -1
  184. package/dist/meeting-info/index.js +74 -7
  185. package/dist/meeting-info/index.js.map +1 -1
  186. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/meeting-info/meeting-info-v2.js +200 -63
  188. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  189. package/dist/meeting-info/request.js +1 -2
  190. package/dist/meeting-info/request.js.map +1 -1
  191. package/dist/meeting-info/util.js +2 -3
  192. package/dist/meeting-info/util.js.map +1 -1
  193. package/dist/meeting-info/utilv2.js +39 -41
  194. package/dist/meeting-info/utilv2.js.map +1 -1
  195. package/dist/meetings/collection.d.ts +17 -0
  196. package/dist/meetings/collection.js +42 -4
  197. package/dist/meetings/collection.js.map +1 -1
  198. package/dist/meetings/index.d.ts +114 -20
  199. package/dist/meetings/index.js +540 -126
  200. package/dist/meetings/index.js.map +1 -1
  201. package/dist/meetings/meetings.types.d.ts +4 -0
  202. package/dist/meetings/meetings.types.js +7 -0
  203. package/dist/meetings/meetings.types.js.map +1 -0
  204. package/dist/meetings/request.js +4 -3
  205. package/dist/meetings/request.js.map +1 -1
  206. package/dist/meetings/util.js +107 -6
  207. package/dist/meetings/util.js.map +1 -1
  208. package/dist/member/index.d.ts +13 -1
  209. package/dist/member/index.js +45 -2
  210. package/dist/member/index.js.map +1 -1
  211. package/dist/member/member.types.js +3 -4
  212. package/dist/member/member.types.js.map +1 -1
  213. package/dist/member/types.d.ts +32 -0
  214. package/dist/member/types.js +23 -0
  215. package/dist/member/types.js.map +1 -0
  216. package/dist/member/util.js +120 -29
  217. package/dist/member/util.js.map +1 -1
  218. package/dist/members/collection.d.ts +5 -0
  219. package/dist/members/collection.js +11 -2
  220. package/dist/members/collection.js.map +1 -1
  221. package/dist/members/index.d.ts +56 -11
  222. package/dist/members/index.js +174 -47
  223. package/dist/members/index.js.map +1 -1
  224. package/dist/members/request.d.ts +67 -11
  225. package/dist/members/request.js +102 -54
  226. package/dist/members/request.js.map +1 -1
  227. package/dist/members/types.js +3 -4
  228. package/dist/members/types.js.map +1 -1
  229. package/dist/members/util.d.ts +214 -1
  230. package/dist/members/util.js +327 -284
  231. package/dist/members/util.js.map +1 -1
  232. package/dist/metrics/constants.d.ts +15 -6
  233. package/dist/metrics/constants.js +17 -9
  234. package/dist/metrics/constants.js.map +1 -1
  235. package/dist/metrics/index.d.ts +4 -111
  236. package/dist/metrics/index.js +4 -452
  237. package/dist/metrics/index.js.map +1 -1
  238. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  239. package/dist/multistream/mediaRequestManager.js +344 -0
  240. package/dist/multistream/mediaRequestManager.js.map +1 -0
  241. package/dist/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/multistream/receiveSlot.js +200 -0
  243. package/dist/multistream/receiveSlot.js.map +1 -0
  244. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  245. package/dist/multistream/receiveSlotManager.js +174 -0
  246. package/dist/multistream/receiveSlotManager.js.map +1 -0
  247. package/dist/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/multistream/remoteMedia.js +268 -0
  249. package/dist/multistream/remoteMedia.js.map +1 -0
  250. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  251. package/dist/multistream/remoteMediaGroup.js +267 -0
  252. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  253. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  254. package/dist/multistream/remoteMediaManager.js +1211 -0
  255. package/dist/multistream/remoteMediaManager.js.map +1 -0
  256. package/dist/multistream/sendSlotManager.d.ts +61 -0
  257. package/dist/multistream/sendSlotManager.js +236 -0
  258. package/dist/multistream/sendSlotManager.js.map +1 -0
  259. package/dist/networkQualityMonitor/index.js +5 -4
  260. package/dist/networkQualityMonitor/index.js.map +1 -1
  261. package/dist/personal-meeting-room/index.js +2 -3
  262. package/dist/personal-meeting-room/index.js.map +1 -1
  263. package/dist/personal-meeting-room/request.js +2 -3
  264. package/dist/personal-meeting-room/request.js.map +1 -1
  265. package/dist/personal-meeting-room/util.js +1 -2
  266. package/dist/personal-meeting-room/util.js.map +1 -1
  267. package/dist/reachability/clusterReachability.d.ts +109 -0
  268. package/dist/reachability/clusterReachability.js +357 -0
  269. package/dist/reachability/clusterReachability.js.map +1 -0
  270. package/dist/reachability/index.d.ts +61 -95
  271. package/dist/reachability/index.js +304 -392
  272. package/dist/reachability/index.js.map +1 -1
  273. package/dist/reachability/request.d.ts +7 -3
  274. package/dist/reachability/request.js +18 -10
  275. package/dist/reachability/request.js.map +1 -1
  276. package/dist/reachability/util.d.ts +8 -0
  277. package/dist/reachability/util.js +29 -0
  278. package/dist/reachability/util.js.map +1 -0
  279. package/dist/reactions/constants.d.ts +3 -0
  280. package/dist/reactions/constants.js +12 -0
  281. package/dist/reactions/constants.js.map +1 -0
  282. package/dist/reactions/reactions.d.ts +2 -2
  283. package/dist/reactions/reactions.js +4 -6
  284. package/dist/reactions/reactions.js.map +1 -1
  285. package/dist/reactions/reactions.type.d.ts +23 -3
  286. package/dist/reactions/reactions.type.js +21 -23
  287. package/dist/reactions/reactions.type.js.map +1 -1
  288. package/dist/reconnection-manager/index.d.ts +32 -8
  289. package/dist/reconnection-manager/index.js +285 -232
  290. package/dist/reconnection-manager/index.js.map +1 -1
  291. package/dist/recording-controller/enums.js +4 -5
  292. package/dist/recording-controller/enums.js.map +1 -1
  293. package/dist/recording-controller/index.d.ts +15 -1
  294. package/dist/recording-controller/index.js +57 -46
  295. package/dist/recording-controller/index.js.map +1 -1
  296. package/dist/recording-controller/util.d.ts +5 -4
  297. package/dist/recording-controller/util.js +10 -10
  298. package/dist/recording-controller/util.js.map +1 -1
  299. package/dist/roap/index.d.ts +9 -47
  300. package/dist/roap/index.js +100 -238
  301. package/dist/roap/index.js.map +1 -1
  302. package/dist/roap/request.d.ts +18 -12
  303. package/dist/roap/request.js +126 -180
  304. package/dist/roap/request.js.map +1 -1
  305. package/dist/roap/turnDiscovery.d.ts +27 -16
  306. package/dist/roap/turnDiscovery.js +115 -105
  307. package/dist/roap/turnDiscovery.js.map +1 -1
  308. package/dist/rtcMetrics/constants.d.ts +4 -0
  309. package/dist/rtcMetrics/constants.js +11 -0
  310. package/dist/rtcMetrics/constants.js.map +1 -0
  311. package/dist/rtcMetrics/index.d.ts +54 -0
  312. package/dist/rtcMetrics/index.js +140 -0
  313. package/dist/rtcMetrics/index.js.map +1 -0
  314. package/dist/statsAnalyzer/global.d.ts +1 -83
  315. package/dist/statsAnalyzer/global.js +2 -85
  316. package/dist/statsAnalyzer/global.js.map +1 -1
  317. package/dist/statsAnalyzer/index.d.ts +50 -30
  318. package/dist/statsAnalyzer/index.js +436 -511
  319. package/dist/statsAnalyzer/index.js.map +1 -1
  320. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  321. package/dist/statsAnalyzer/mqaUtil.js +130 -90
  322. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  323. package/dist/transcription/index.js +1 -2
  324. package/dist/transcription/index.js.map +1 -1
  325. package/dist/webinar/collection.d.ts +16 -0
  326. package/dist/webinar/collection.js +43 -0
  327. package/dist/webinar/collection.js.map +1 -0
  328. package/dist/webinar/index.d.ts +5 -0
  329. package/dist/webinar/index.js +68 -0
  330. package/dist/webinar/index.js.map +1 -0
  331. package/package.json +39 -26
  332. package/src/annotation/annotation.types.ts +50 -0
  333. package/src/annotation/constants.ts +36 -0
  334. package/src/annotation/index.ts +328 -0
  335. package/src/breakouts/README.md +220 -0
  336. package/src/breakouts/breakout.ts +188 -0
  337. package/src/breakouts/collection.ts +19 -0
  338. package/src/breakouts/edit-lock-error.ts +25 -0
  339. package/src/breakouts/events.ts +56 -0
  340. package/src/breakouts/index.ts +925 -0
  341. package/src/breakouts/request.ts +55 -0
  342. package/src/breakouts/utils.ts +57 -0
  343. package/src/common/errors/no-meeting-info.ts +24 -0
  344. package/src/common/errors/webex-errors.ts +36 -12
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/common/logs/request.ts +5 -1
  347. package/src/common/queue.ts +22 -8
  348. package/src/config.ts +6 -7
  349. package/src/constants.ts +265 -100
  350. package/src/controls-options-manager/enums.ts +12 -0
  351. package/src/controls-options-manager/index.ts +116 -21
  352. package/src/controls-options-manager/types.ts +59 -0
  353. package/src/controls-options-manager/util.ts +294 -14
  354. package/src/index.ts +44 -0
  355. package/src/interceptors/index.ts +3 -0
  356. package/src/interceptors/locusRetry.ts +67 -0
  357. package/src/interpretation/README.md +60 -0
  358. package/src/interpretation/collection.ts +19 -0
  359. package/src/interpretation/index.ts +332 -0
  360. package/src/interpretation/siLanguage.ts +18 -0
  361. package/src/locus-info/controlsUtils.ts +110 -0
  362. package/src/locus-info/index.ts +450 -61
  363. package/src/locus-info/infoUtils.ts +14 -2
  364. package/src/locus-info/mediaSharesUtils.ts +64 -0
  365. package/src/locus-info/parser.ts +258 -47
  366. package/src/locus-info/selfUtils.ts +85 -2
  367. package/src/media/index.ts +153 -370
  368. package/src/media/properties.ts +106 -136
  369. package/src/media/util.ts +0 -21
  370. package/src/mediaQualityMetrics/config.ts +244 -377
  371. package/src/meeting/in-meeting-actions.ts +176 -0
  372. package/src/meeting/index.ts +4306 -2581
  373. package/src/meeting/locusMediaRequest.ts +313 -0
  374. package/src/meeting/muteState.ts +224 -138
  375. package/src/meeting/request.ts +214 -127
  376. package/src/meeting/request.type.ts +13 -0
  377. package/src/meeting/util.ts +687 -423
  378. package/src/meeting/voicea-meeting.ts +161 -0
  379. package/src/meeting-info/index.ts +81 -8
  380. package/src/meeting-info/meeting-info-v2.ts +163 -13
  381. package/src/meeting-info/util.ts +1 -1
  382. package/src/meeting-info/utilv2.ts +28 -28
  383. package/src/meetings/collection.ts +33 -0
  384. package/src/meetings/index.ts +529 -127
  385. package/src/meetings/meetings.types.ts +12 -0
  386. package/src/meetings/request.ts +2 -0
  387. package/src/meetings/util.ts +116 -5
  388. package/src/member/index.ts +43 -1
  389. package/src/member/types.ts +38 -0
  390. package/src/member/util.ts +125 -28
  391. package/src/members/collection.ts +8 -0
  392. package/src/members/index.ts +187 -52
  393. package/src/members/request.ts +87 -27
  394. package/src/members/util.ts +332 -291
  395. package/src/metrics/constants.ts +15 -6
  396. package/src/metrics/index.ts +1 -471
  397. package/src/multistream/mediaRequestManager.ts +440 -0
  398. package/src/multistream/receiveSlot.ts +184 -0
  399. package/src/multistream/receiveSlotManager.ts +166 -0
  400. package/src/multistream/remoteMedia.ts +254 -0
  401. package/src/multistream/remoteMediaGroup.ts +284 -0
  402. package/src/multistream/remoteMediaManager.ts +1145 -0
  403. package/src/multistream/sendSlotManager.ts +170 -0
  404. package/src/networkQualityMonitor/index.ts +6 -6
  405. package/src/reachability/clusterReachability.ts +320 -0
  406. package/src/reachability/index.ts +246 -347
  407. package/src/reachability/request.ts +17 -8
  408. package/src/reachability/util.ts +24 -0
  409. package/src/reactions/constants.ts +4 -0
  410. package/src/reactions/reactions.ts +4 -4
  411. package/src/reactions/reactions.type.ts +30 -4
  412. package/src/reconnection-manager/index.ts +168 -156
  413. package/src/recording-controller/index.ts +20 -3
  414. package/src/recording-controller/util.ts +26 -9
  415. package/src/roap/index.ts +96 -241
  416. package/src/roap/request.ts +74 -148
  417. package/src/roap/turnDiscovery.ts +62 -56
  418. package/src/rtcMetrics/constants.ts +3 -0
  419. package/src/rtcMetrics/index.ts +124 -0
  420. package/src/statsAnalyzer/global.ts +1 -84
  421. package/src/statsAnalyzer/index.ts +479 -645
  422. package/src/statsAnalyzer/mqaUtil.ts +128 -126
  423. package/src/webinar/collection.ts +31 -0
  424. package/src/webinar/index.ts +62 -0
  425. package/test/integration/spec/converged-space-meetings.js +233 -0
  426. package/test/integration/spec/journey.js +320 -264
  427. package/test/integration/spec/space-meeting.js +77 -4
  428. package/test/unit/spec/annotation/index.ts +418 -0
  429. package/test/unit/spec/breakouts/breakout.ts +237 -0
  430. package/test/unit/spec/breakouts/collection.ts +15 -0
  431. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  432. package/test/unit/spec/breakouts/events.ts +89 -0
  433. package/test/unit/spec/breakouts/index.ts +1790 -0
  434. package/test/unit/spec/breakouts/request.ts +104 -0
  435. package/test/unit/spec/breakouts/utils.js +72 -0
  436. package/test/unit/spec/common/queue.js +31 -2
  437. package/test/unit/spec/controls-options-manager/index.js +163 -0
  438. package/test/unit/spec/controls-options-manager/util.js +576 -60
  439. package/test/unit/spec/fixture/locus.js +1 -0
  440. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  441. package/test/unit/spec/interpretation/collection.ts +15 -0
  442. package/test/unit/spec/interpretation/index.ts +589 -0
  443. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  444. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  445. package/test/unit/spec/locus-info/index.js +1438 -16
  446. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  447. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  448. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  449. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  450. package/test/unit/spec/locus-info/parser.js +116 -35
  451. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  452. package/test/unit/spec/media/index.ts +290 -0
  453. package/test/unit/spec/media/properties.ts +75 -84
  454. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  455. package/test/unit/spec/meeting/index.js +8886 -2815
  456. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  457. package/test/unit/spec/meeting/muteState.js +409 -213
  458. package/test/unit/spec/meeting/request.js +523 -43
  459. package/test/unit/spec/meeting/utils.js +834 -24
  460. package/test/unit/spec/meeting-info/index.js +300 -0
  461. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  462. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  463. package/test/unit/spec/meetings/collection.js +26 -0
  464. package/test/unit/spec/meetings/index.js +1446 -217
  465. package/test/unit/spec/meetings/utils.js +202 -2
  466. package/test/unit/spec/member/index.js +32 -9
  467. package/test/unit/spec/member/util.js +499 -61
  468. package/test/unit/spec/members/index.js +394 -5
  469. package/test/unit/spec/members/request.js +206 -27
  470. package/test/unit/spec/members/utils.js +173 -38
  471. package/test/unit/spec/metrics/index.js +1 -50
  472. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  473. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  474. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  475. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  476. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  477. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  478. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  479. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  480. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  481. package/test/unit/spec/reachability/index.ts +532 -24
  482. package/test/unit/spec/reachability/request.js +68 -0
  483. package/test/unit/spec/reachability/util.ts +40 -0
  484. package/test/unit/spec/reconnection-manager/index.js +163 -24
  485. package/test/unit/spec/recording-controller/index.js +293 -218
  486. package/test/unit/spec/recording-controller/util.js +223 -96
  487. package/test/unit/spec/roap/index.ts +187 -77
  488. package/test/unit/spec/roap/request.ts +255 -0
  489. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  490. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  491. package/test/unit/spec/stats-analyzer/index.js +644 -165
  492. package/test/unit/spec/webinar/collection.ts +13 -0
  493. package/test/unit/spec/webinar/index.ts +60 -0
  494. package/test/utils/constants.js +9 -0
  495. package/test/utils/integrationTestUtils.js +46 -0
  496. package/test/utils/testUtils.js +0 -45
  497. package/test/utils/webex-config.js +4 -0
  498. package/test/utils/webex-test-users.js +7 -3
  499. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  500. package/dist/meeting/effectsState.d.ts +0 -42
  501. package/dist/meeting/effectsState.js +0 -260
  502. package/dist/meeting/effectsState.js.map +0 -1
  503. package/dist/metrics/config.d.ts +0 -169
  504. package/dist/metrics/config.js +0 -289
  505. package/dist/metrics/config.js.map +0 -1
  506. package/dist/peer-connection-manager/index.d.ts +0 -6
  507. package/dist/peer-connection-manager/index.js +0 -671
  508. package/dist/peer-connection-manager/index.js.map +0 -1
  509. package/dist/peer-connection-manager/util.d.ts +0 -6
  510. package/dist/peer-connection-manager/util.js +0 -110
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.d.ts +0 -10
  513. package/dist/roap/collection.js +0 -63
  514. package/dist/roap/collection.js.map +0 -1
  515. package/dist/roap/handler.d.ts +0 -47
  516. package/dist/roap/handler.js +0 -279
  517. package/dist/roap/handler.js.map +0 -1
  518. package/dist/roap/state.d.ts +0 -9
  519. package/dist/roap/state.js +0 -127
  520. package/dist/roap/state.js.map +0 -1
  521. package/dist/roap/util.d.ts +0 -2
  522. package/dist/roap/util.js +0 -76
  523. package/dist/roap/util.js.map +0 -1
  524. package/src/index.js +0 -15
  525. package/src/meeting/effectsState.ts +0 -209
  526. package/src/metrics/config.ts +0 -485
  527. package/src/peer-connection-manager/index.ts +0 -847
  528. package/src/peer-connection-manager/util.ts +0 -119
  529. package/src/roap/collection.ts +0 -62
  530. package/src/roap/handler.ts +0 -294
  531. package/src/roap/state.ts +0 -156
  532. package/src/roap/util.ts +0 -100
  533. package/test/unit/spec/meeting/effectsState.js +0 -281
  534. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  535. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  536. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  537. package/test/unit/spec/roap/util.js +0 -30
  538. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -0,0 +1,161 @@
1
+ export const getSpeaker = (members, csis = []) =>
2
+ Object.values(members).find((member: any) => {
3
+ const memberCSIs = member.participant.status.csis ?? [];
4
+
5
+ return csis.some((csi) => memberCSIs.includes(csi));
6
+ });
7
+
8
+ export const getSpeakerFromProxyOrStore = ({csisKey, meetingMembers, transcriptData}) => {
9
+ let speaker = {
10
+ speakerId: '',
11
+ name: '',
12
+ };
13
+
14
+ let needsCaching = false;
15
+
16
+ if (csisKey && transcriptData.speakerProxy[csisKey]) {
17
+ speaker = transcriptData.speakerProxy[csisKey];
18
+ }
19
+ const meetingMember: any = getSpeaker(meetingMembers, [csisKey]);
20
+
21
+ const speakerInStore = {
22
+ speakerId: meetingMember?.participant.person.id ?? '',
23
+ name: meetingMember?.participant.person.name ?? '',
24
+ };
25
+
26
+ if (
27
+ meetingMember &&
28
+ (speakerInStore.speakerId !== speaker.speakerId || speakerInStore.name !== speaker.name)
29
+ ) {
30
+ needsCaching = true;
31
+ speaker = speakerInStore;
32
+ }
33
+
34
+ return {speaker, needsCaching};
35
+ };
36
+
37
+ export const processNewCaptions = ({data, meeting}) => {
38
+ const {transcriptId} = data;
39
+ const transcriptData = meeting.transcription;
40
+
41
+ if (data.isFinal) {
42
+ const doesInterimTranscriptionExist = transcriptId in transcriptData.interimCaptions;
43
+
44
+ if (doesInterimTranscriptionExist) {
45
+ transcriptData.interimCaptions[transcriptId].forEach((fakeId) => {
46
+ const fakeTranscriptIndex = transcriptData.captions.findIndex(
47
+ (transcript) => transcript.id === fakeId
48
+ );
49
+
50
+ if (fakeTranscriptIndex !== -1) {
51
+ transcriptData.captions.splice(fakeTranscriptIndex, 1);
52
+ }
53
+ });
54
+ delete transcriptData.interimCaptions[transcriptId];
55
+ }
56
+ const csisKey = data.transcript?.csis[0];
57
+
58
+ const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
59
+ meetingMembers: meeting.members.membersCollection.members,
60
+ transcriptData,
61
+ csisKey,
62
+ });
63
+
64
+ if (needsCaching) {
65
+ transcriptData.speakerProxy[csisKey] = speaker;
66
+ }
67
+ const captionData = {
68
+ id: transcriptId,
69
+ isFinal: data.isFinal,
70
+ translations: data.translations,
71
+ text: data.transcript?.text,
72
+ currentSpokenLanguage: data.transcript?.transcriptLanguageCode,
73
+ timestamp: data.timestamp,
74
+ speaker,
75
+ };
76
+ transcriptData.captions.push(captionData);
77
+ }
78
+ const {transcripts = []} = data;
79
+ const transcriptsPerCsis = new Map();
80
+
81
+ for (const transcript of transcripts) {
82
+ const {
83
+ text,
84
+ transcript_language_code: currentSpokenLanguage,
85
+ csis: [csisMember],
86
+ } = transcript;
87
+
88
+ const newCaption = `${transcriptsPerCsis.get(csisMember)?.text ?? ''} ${text}`;
89
+
90
+ // eslint-disable-next-line camelcase
91
+ transcriptsPerCsis.set(csisMember, {text: newCaption, currentSpokenLanguage});
92
+ }
93
+ const fakeTranscriptionIds = [];
94
+
95
+ for (const [key, value] of transcriptsPerCsis) {
96
+ const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
97
+ meetingMembers: meeting.members.membersCollection.members,
98
+ transcriptData,
99
+ csisKey: key,
100
+ });
101
+
102
+ if (needsCaching) {
103
+ transcriptData.speakerProxy[key] = speaker;
104
+ }
105
+ const {speakerId} = speaker;
106
+ const fakeId = `${transcriptId}_${speakerId}`;
107
+ const captionData = {
108
+ id: fakeId,
109
+ isFinal: data.isFinal,
110
+ translations: value.translations,
111
+ text: value.text,
112
+ currentCaptionLanguage: value.currentSpokenLanguage,
113
+ timestamp: value?.timestamp,
114
+ speaker,
115
+ };
116
+
117
+ const fakeTranscriptIndex = transcriptData.captions.findIndex(
118
+ (transcript) => transcript.id === fakeId
119
+ );
120
+
121
+ if (fakeTranscriptIndex !== -1) {
122
+ transcriptData.captions.splice(fakeTranscriptIndex, 1);
123
+ }
124
+
125
+ fakeTranscriptionIds.push(fakeId);
126
+ transcriptData.captions.push(captionData);
127
+ }
128
+ transcriptData.interimCaptions[transcriptId] = fakeTranscriptionIds;
129
+ };
130
+
131
+ export const processHighlightCreated = ({data, meeting}) => {
132
+ const transcriptData = meeting.transcription;
133
+
134
+ if (!transcriptData.highlights) {
135
+ transcriptData.highlights = [];
136
+ }
137
+
138
+ const csisKey = data.csis && data.csis.length > 0 ? data.csis[0] : undefined;
139
+ const {needsCaching, speaker} = getSpeakerFromProxyOrStore({
140
+ meetingMembers: meeting.members.membersCollection.members,
141
+ transcriptData,
142
+ csisKey,
143
+ });
144
+
145
+ if (needsCaching) {
146
+ transcriptData.speakerProxy[csisKey] = speaker;
147
+ }
148
+
149
+ const highlightCreated = {
150
+ id: data.highlightId,
151
+ meta: {
152
+ label: data.highlightLabel,
153
+ source: data.highlightSource,
154
+ },
155
+ text: data.text,
156
+ timestamp: data.timestamp,
157
+ speaker,
158
+ };
159
+
160
+ meeting.transcription.highlights.push(highlightCreated);
161
+ };
@@ -70,10 +70,41 @@ export default class MeetingInfo {
70
70
  * @private
71
71
  * @memberof MeetingInfo
72
72
  */
73
- private requestFetchInfo(options: object) {
73
+ private requestFetchInfo(options: any) {
74
+ const {meetingId, sendCAevents} = options;
75
+ if (meetingId && sendCAevents) {
76
+ this.webex.internal.newMetrics.submitInternalEvent({
77
+ name: 'internal.client.meetinginfo.request',
78
+ });
79
+ this.webex.internal.newMetrics.submitClientEvent({
80
+ name: 'client.meetinginfo.request',
81
+ options: {
82
+ meetingId,
83
+ },
84
+ });
85
+ }
86
+
74
87
  return this.meetingInfoRequest
75
88
  .fetchMeetingInfo(options)
76
89
  .then((info) => {
90
+ if (meetingId && sendCAevents) {
91
+ this.webex.internal.newMetrics.submitInternalEvent({
92
+ name: 'internal.client.meetinginfo.response',
93
+ });
94
+ this.webex.internal.newMetrics.submitClientEvent({
95
+ name: 'client.meetinginfo.response',
96
+ payload: {
97
+ identifiers: {
98
+ meetingLookupUrl: info?.url,
99
+ },
100
+ },
101
+ options: {
102
+ meetingId,
103
+ webexConferenceIdStr: info?.body?.confIdStr || info?.body?.confID,
104
+ globalMeetingId: info?.body?.meetingId,
105
+ },
106
+ });
107
+ }
77
108
  if (info && info.body) {
78
109
  this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
79
110
  }
@@ -84,6 +115,23 @@ export default class MeetingInfo {
84
115
  LoggerProxy.logger.error(
85
116
  `Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
86
117
  );
118
+ if (meetingId && sendCAevents) {
119
+ this.webex.internal.newMetrics.submitInternalEvent({
120
+ name: 'internal.client.meetinginfo.response',
121
+ });
122
+ this.webex.internal.newMetrics.submitClientEvent({
123
+ name: 'client.meetinginfo.response',
124
+ payload: {
125
+ identifiers: {
126
+ meetingLookupUrl: error?.url,
127
+ },
128
+ },
129
+ options: {
130
+ meetingId,
131
+ rawError: error,
132
+ },
133
+ });
134
+ }
87
135
 
88
136
  return Promise.reject(error);
89
137
  });
@@ -105,29 +153,54 @@ export default class MeetingInfo {
105
153
  });
106
154
  }
107
155
 
156
+ // eslint-disable-next-line valid-jsdoc
108
157
  /**
109
158
  * Fetches meeting info from the server
110
159
  * @param {String} destination one of many different types of destinations to look up info for
111
160
  * @param {String} [type] to match up with the destination value
161
+ * @param {String} [password] meeting password
162
+ * @param {Object} [captchaInfo] captcha code and id
163
+ * @param {String} [installedOrgID]
164
+ * @param {String} [locusId]
165
+ * @param {Object} [extraParams]
166
+ * @param {Boolean} [options] meeting Id and whether Call Analyzer events should be sent
112
167
  * @returns {Promise} returns a meeting info object
113
168
  * @public
114
169
  * @memberof MeetingInfo
115
170
  */
116
- public fetchMeetingInfo(destination: string, type: string = null) {
171
+ public fetchMeetingInfo(
172
+ destination: string,
173
+ type: string = null,
174
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
175
+ password: string = null,
176
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
177
+ captchaInfo: {
178
+ code: string;
179
+ id: string;
180
+ } = null,
181
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
182
+ installedOrgID = null,
183
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
184
+ locusId = null,
185
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
186
+ extraParams: object = {},
187
+ options: {meetingId?: string; sendCAevents?: boolean} = {}
188
+ ) {
117
189
  if (type === _PERSONAL_ROOM_ && !destination) {
118
190
  destination = this.webex.internal.device.userId;
119
191
  }
120
192
 
121
193
  return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
122
- (options) =>
194
+ (infoOptions) =>
123
195
  // fetch meeting info
124
- this.requestFetchInfo(options).catch((error) => {
196
+ this.requestFetchInfo({...infoOptions, ...options}).catch((error) => {
125
197
  // if it failed the first time as meeting link
126
- if (options.type === _MEETING_LINK_) {
198
+ if (infoOptions.type === _MEETING_LINK_) {
127
199
  // convert the meeting link to sip URI and retry
128
- return this.requestFetchInfo(
129
- this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
130
- );
200
+ return this.requestFetchInfo({
201
+ ...this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_),
202
+ ...options,
203
+ });
131
204
  }
132
205
 
133
206
  return Promise.reject(error);
@@ -1,4 +1,10 @@
1
- import {HTTP_VERBS, _CONVERSATION_URL_, WBXAPPAPI_SERVICE} from '../constants';
1
+ import lodash from 'lodash';
2
+ import {
3
+ HTTP_VERBS,
4
+ _CONVERSATION_URL_,
5
+ WBXAPPAPI_SERVICE,
6
+ DEFAULT_MEETING_INFO_REQUEST_BODY,
7
+ } from '../constants';
2
8
  import Metrics from '../metrics';
3
9
  import BEHAVIORAL_METRICS from '../metrics/constants';
4
10
 
@@ -11,7 +17,7 @@ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
11
17
  const ADHOC_MEETING_DEFAULT_ERROR =
12
18
  'Failed starting the adhoc meeting, Please contact support team ';
13
19
  const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
14
-
20
+ const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
15
21
  /**
16
22
  * Error to indicate that wbxappapi requires a password
17
23
  */
@@ -63,6 +69,30 @@ export class MeetingInfoV2AdhocMeetingError extends Error {
63
69
  }
64
70
  }
65
71
 
72
+ /**
73
+ * Error preventing join because of a meeting policy
74
+ */
75
+ export class MeetingInfoV2PolicyError extends Error {
76
+ meetingInfo: object;
77
+ sdkMessage: string;
78
+ wbxAppApiCode: number;
79
+ /**
80
+ *
81
+ * @constructor
82
+ * @param {Number} [wbxAppApiErrorCode]
83
+ * @param {Object} [meetingInfo]
84
+ * @param {String} [message]
85
+ */
86
+ constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
87
+ super(`${message}, code=${wbxAppApiErrorCode}`);
88
+ this.name = 'MeetingInfoV2AdhocMeetingError';
89
+ this.sdkMessage = message;
90
+ this.stack = new Error().stack;
91
+ this.wbxAppApiCode = wbxAppApiErrorCode;
92
+ this.meetingInfo = meetingInfo;
93
+ }
94
+ }
95
+
66
96
  /**
67
97
  * Error to indicate that preferred webex site not present to start adhoc meeting
68
98
  */
@@ -124,14 +154,38 @@ export default class MeetingInfoV2 {
124
154
  });
125
155
  }
126
156
 
157
+ /**
158
+ * Raises a MeetingInfoV2PolicyError for policy error codes
159
+ * @param {any} err the error from the request
160
+ * @returns {void}
161
+ */
162
+ handlePolicyError = (err) => {
163
+ if (!err.body) {
164
+ return;
165
+ }
166
+
167
+ if (POLICY_ERROR_CODES.includes(err.body?.code)) {
168
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR, {
169
+ code: err.body?.code,
170
+ });
171
+
172
+ throw new MeetingInfoV2PolicyError(
173
+ err.body?.code,
174
+ err.body?.data?.meetingInfo,
175
+ err.body?.message
176
+ );
177
+ }
178
+ };
179
+
127
180
  /**
128
181
  * Creates adhoc space meetings for a space by fetching the conversation infomation
129
182
  * @param {String} conversationUrl conversationUrl to start adhoc meeting on
183
+ * @param {String} installedOrgID org ID of user's machine
130
184
  * @returns {Promise} returns a meeting info object
131
185
  * @public
132
186
  * @memberof MeetingInfo
133
187
  */
134
- async createAdhocSpaceMeeting(conversationUrl: string) {
188
+ async createAdhocSpaceMeeting(conversationUrl: string, installedOrgID?: string) {
135
189
  if (!this.webex.meetings.preferredWebexSite) {
136
190
  throw Error('No preferred webex site found');
137
191
  }
@@ -159,21 +213,31 @@ export default class MeetingInfoV2 {
159
213
  keyUrl: conversation.encryptionKeyUrl,
160
214
  kroUrl: conversation.kmsResourceObjectUrl,
161
215
  invitees: getInvitees(conversation.participants?.items),
216
+ installedOrgID,
162
217
  };
163
218
 
219
+ if (installedOrgID) {
220
+ body.installedOrgID = installedOrgID;
221
+ }
222
+
164
223
  const uri = this.webex.meetings.preferredWebexSite
165
224
  ? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`
166
225
  : '';
167
226
 
168
- Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
169
-
170
227
  return this.webex.request({
171
228
  method: HTTP_VERBS.POST,
172
229
  uri,
173
230
  body,
174
231
  });
175
232
  })
233
+ .then((requestResult) => {
234
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
235
+
236
+ return requestResult;
237
+ })
176
238
  .catch((err) => {
239
+ this.handlePolicyError(err);
240
+
177
241
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
178
242
  reason: err.message,
179
243
  stack: err.stack,
@@ -190,6 +254,10 @@ export default class MeetingInfoV2 {
190
254
  * @param {Object} captchaInfo
191
255
  * @param {String} captchaInfo.code
192
256
  * @param {String} captchaInfo.id
257
+ * @param {String} installedOrgID org ID of user's machine
258
+ * @param {String} locusId
259
+ * @param {Object} extraParams
260
+ * @param {Object} options
193
261
  * @returns {Promise} returns a meeting info object
194
262
  * @public
195
263
  * @memberof MeetingInfo
@@ -201,8 +269,14 @@ export default class MeetingInfoV2 {
201
269
  captchaInfo: {
202
270
  code: string;
203
271
  id: string;
204
- } = null
272
+ } = null,
273
+ installedOrgID = null,
274
+ locusId = null,
275
+ extraParams: object = {},
276
+ options: {meetingId?: string; sendCAevents?: boolean} = {}
205
277
  ) {
278
+ const {meetingId, sendCAevents} = options;
279
+
206
280
  const destinationType = await MeetingInfoUtil.getDestinationType({
207
281
  destination,
208
282
  type,
@@ -214,12 +288,35 @@ export default class MeetingInfoV2 {
214
288
  this.webex.config.meetings.experimental.enableAdhocMeetings &&
215
289
  this.webex.meetings.preferredWebexSite
216
290
  ) {
217
- return this.createAdhocSpaceMeeting(destinationType.destination);
291
+ return this.createAdhocSpaceMeeting(destinationType.destination, installedOrgID);
218
292
  }
219
293
 
220
- const body = await MeetingInfoUtil.getRequestBody({...destinationType, password, captchaInfo});
294
+ const body = await MeetingInfoUtil.getRequestBody({
295
+ ...destinationType,
296
+ password,
297
+ captchaInfo,
298
+ installedOrgID,
299
+ locusId,
300
+ extraParams,
301
+ });
221
302
 
222
- const options: any = {
303
+ // If the body only contains the default properties, we don't have enough to
304
+ // fetch the meeting info so don't bother trying.
305
+ if (
306
+ !lodash.difference(Object.keys(body), Object.keys(DEFAULT_MEETING_INFO_REQUEST_BODY)).length
307
+ ) {
308
+ const err = new Error('Not enough information to fetch meeting info');
309
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
310
+ reason: err.message,
311
+ destinationType: destinationType?.type,
312
+ webExMeetingId: destinationType?.info?.webExMeetingId,
313
+ sipUri: destinationType?.info?.sipUri,
314
+ });
315
+
316
+ throw err;
317
+ }
318
+
319
+ const requestOptions: any = {
223
320
  method: HTTP_VERBS.POST,
224
321
  body,
225
322
  };
@@ -227,21 +324,74 @@ export default class MeetingInfoV2 {
227
324
  const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);
228
325
 
229
326
  if (directURI) {
230
- options.uri = directURI;
327
+ requestOptions.uri = directURI;
231
328
  } else {
232
- options.service = WBXAPPAPI_SERVICE;
233
- options.resource = 'meetingInfo';
329
+ requestOptions.service = WBXAPPAPI_SERVICE;
330
+ requestOptions.resource = 'meetingInfo';
331
+ }
332
+
333
+ if (meetingId && sendCAevents) {
334
+ this.webex.internal.newMetrics.submitInternalEvent({
335
+ name: 'internal.client.meetinginfo.request',
336
+ });
337
+
338
+ this.webex.internal.newMetrics.submitClientEvent({
339
+ name: 'client.meetinginfo.request',
340
+ options: {
341
+ meetingId,
342
+ },
343
+ });
234
344
  }
235
345
 
236
346
  return this.webex
237
- .request(options)
347
+ .request(requestOptions)
238
348
  .then((response) => {
349
+ if (meetingId && sendCAevents) {
350
+ this.webex.internal.newMetrics.submitInternalEvent({
351
+ name: 'internal.client.meetinginfo.response',
352
+ });
353
+
354
+ this.webex.internal.newMetrics.submitClientEvent({
355
+ name: 'client.meetinginfo.response',
356
+ payload: {
357
+ identifiers: {
358
+ meetingLookupUrl: response?.url,
359
+ },
360
+ },
361
+ options: {
362
+ meetingId,
363
+ webexConferenceIdStr: response?.body?.confIdStr || response?.body?.confID,
364
+ globalMeetingId: response?.body?.meetingId,
365
+ },
366
+ });
367
+ }
239
368
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);
240
369
 
241
370
  return response;
242
371
  })
243
372
  .catch((err) => {
373
+ if (meetingId && sendCAevents) {
374
+ this.webex.internal.newMetrics.submitInternalEvent({
375
+ name: 'internal.client.meetinginfo.response',
376
+ });
377
+
378
+ this.webex.internal.newMetrics.submitClientEvent({
379
+ name: 'client.meetinginfo.response',
380
+ payload: {
381
+ identifiers: {
382
+ meetingLookupUrl: err?.url,
383
+ },
384
+ },
385
+ options: {
386
+ meetingId,
387
+ rawError: err,
388
+ },
389
+ });
390
+ }
391
+
244
392
  if (err?.statusCode === 403) {
393
+ this.handlePolicyError(err);
394
+
245
395
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
246
396
  reason: err.message,
247
397
  stack: err.stack,
@@ -236,7 +236,7 @@ MeetingInfoUtil.generateOptions = async (from) => {
236
236
  }
237
237
  } else {
238
238
  throw new ParameterError(
239
- 'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.'
239
+ 'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.'
240
240
  );
241
241
  }
242
242
 
@@ -19,14 +19,20 @@ import {
19
19
  JOIN,
20
20
  MEET,
21
21
  MEET_M,
22
+ MEET_CISCO,
23
+ MEET_CO,
22
24
  HTTPS_PROTOCOL,
23
25
  UUID_REG,
24
26
  VALID_EMAIL_ADDRESS,
27
+ DEFAULT_MEETING_INFO_REQUEST_BODY,
25
28
  } from '../constants';
26
29
  import ParameterError from '../common/errors/parameter';
27
30
  import LoggerProxy from '../common/logs/logger-proxy';
31
+ import {SpaceIDDeprecatedError} from '../common/errors/webex-errors';
28
32
 
29
33
  const MeetingInfoUtil: any = {};
34
+ const meetingInfoError =
35
+ 'MeetingInfo is fetched with the meeting link, SIP URI, phone number, Hydra people ID, or a conversation URL.';
30
36
 
31
37
  MeetingInfoUtil.getParsedUrl = (link) => {
32
38
  try {
@@ -62,6 +68,8 @@ MeetingInfoUtil.isMeetingLink = (value: string) => {
62
68
  parsedUrl.pathname &&
63
69
  (parsedUrl.pathname.includes(`/${MEET}`) ||
64
70
  parsedUrl.pathname.includes(`/${MEET_M}`) ||
71
+ parsedUrl.pathname.includes(`/${MEET_CISCO}`) ||
72
+ parsedUrl.pathname.includes(`/${MEET_CO}`) ||
65
73
  parsedUrl.pathname.includes(`/${JOIN}`));
66
74
 
67
75
  return hostNameBool && pathNameBool;
@@ -195,32 +203,15 @@ MeetingInfoUtil.getDestinationType = async (from) => {
195
203
  return Promise.resolve(options);
196
204
  }
197
205
  );
198
- } else if (hydraId && hydraId.room) {
199
- options.type = _CONVERSATION_URL_;
200
- try {
201
- await webex.internal.services.waitForCatalog('postauth');
202
-
203
- const serviceUrl = webex.internal.services.getServiceUrlFromClusterId(
204
- {
205
- cluster: hydraId.cluster,
206
- },
207
- webex
208
- );
209
-
210
- options.destination = hydraId.destination
211
- ? `${serviceUrl}/conversations/${hydraId.destination}`
212
- : serviceUrl;
213
- } catch (e) {
214
- LoggerProxy.logger.error(`Meeting-info:util#getDestinationType --> ${e}`);
215
- throw e;
216
- }
217
- } else {
218
- LoggerProxy.logger.warn(
219
- "Meeting-info:util#getDestinationType --> ('MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url."
220
- );
221
- throw new ParameterError(
222
- 'MeetingInfo is fetched with meeting link, sip uri, phone number, hydra room id, hydra people id, or a conversation url.'
206
+ } else if (hydraId.room) {
207
+ LoggerProxy.logger.error(
208
+ `Meeting-info:util#getDestinationType --> Using the space ID as a destination is no longer supported. Please refer to the [migration guide](https://github.com/webex/webex-js-sdk/wiki/Migration-to-Unified-Space-Meetings) to migrate to use the meeting ID or SIP address.`
223
209
  );
210
+ // Error code 30105 added as Space ID deprecated as of beta, Please refer migration guide.
211
+ throw new SpaceIDDeprecatedError();
212
+ } else {
213
+ LoggerProxy.logger.warn(`Meeting-info:util#getDestinationType --> ${meetingInfoError}`);
214
+ throw new ParameterError(`${meetingInfoError}`);
224
215
  }
225
216
 
226
217
  return Promise.resolve(options);
@@ -230,14 +221,15 @@ MeetingInfoUtil.getDestinationType = async (from) => {
230
221
  * Helper function to build up a correct locus url depending on the value passed
231
222
  * @param {Object} options type and value to fetch meeting info
232
223
  * @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]
224
+ * @param {String} options.installedOrgID org ID of user's machine
233
225
  * @param {Object} options.destination ?? value.value
234
226
  * @returns {Object} returns an object with {resource, method}
235
227
  */
236
228
  MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} | any) => {
237
- const {type, destination, password, captchaInfo} = options;
229
+ const {type, destination, password, captchaInfo, installedOrgID, locusId, extraParams} = options;
238
230
  const body: any = {
239
- supportHostKey: true,
240
- supportCountryList: true,
231
+ ...DEFAULT_MEETING_INFO_REQUEST_BODY,
232
+ ...extraParams,
241
233
  };
242
234
 
243
235
  switch (type) {
@@ -281,6 +273,14 @@ MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} |
281
273
  body.captchaVerifyCode = captchaInfo.code;
282
274
  }
283
275
 
276
+ if (installedOrgID) {
277
+ body.installedOrgID = installedOrgID;
278
+ }
279
+
280
+ if (locusId) {
281
+ body.locusId = locusId;
282
+ }
283
+
284
284
  return body;
285
285
  };
286
286