@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391

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 (393) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +671 -81
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +45 -1
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +242 -33
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +110 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4075 -2827
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +224 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +177 -152
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +672 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting-info/index.js +73 -7
  83. package/dist/meeting-info/index.js.map +1 -1
  84. package/dist/meeting-info/meeting-info-v2.js +192 -51
  85. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  86. package/dist/meeting-info/util.js +1 -1
  87. package/dist/meeting-info/util.js.map +1 -1
  88. package/dist/meeting-info/utilv2.js +36 -36
  89. package/dist/meeting-info/utilv2.js.map +1 -1
  90. package/dist/meetings/collection.js +39 -0
  91. package/dist/meetings/collection.js.map +1 -1
  92. package/dist/meetings/index.js +484 -119
  93. package/dist/meetings/index.js.map +1 -1
  94. package/dist/meetings/meetings.types.js +7 -0
  95. package/dist/meetings/meetings.types.js.map +1 -0
  96. package/dist/meetings/request.js +2 -0
  97. package/dist/meetings/request.js.map +1 -1
  98. package/dist/meetings/util.js +73 -7
  99. package/dist/meetings/util.js.map +1 -1
  100. package/dist/member/index.js +58 -0
  101. package/dist/member/index.js.map +1 -1
  102. package/dist/member/types.js +25 -0
  103. package/dist/member/types.js.map +1 -0
  104. package/dist/member/util.js +132 -25
  105. package/dist/member/util.js.map +1 -1
  106. package/dist/members/collection.js +10 -0
  107. package/dist/members/collection.js.map +1 -1
  108. package/dist/members/index.js +102 -6
  109. package/dist/members/index.js.map +1 -1
  110. package/dist/members/request.js +106 -38
  111. package/dist/members/request.js.map +1 -1
  112. package/dist/members/types.js +15 -0
  113. package/dist/members/types.js.map +1 -0
  114. package/dist/members/util.js +326 -232
  115. package/dist/members/util.js.map +1 -1
  116. package/dist/metrics/constants.js +18 -1
  117. package/dist/metrics/constants.js.map +1 -1
  118. package/dist/metrics/index.js +1 -446
  119. package/dist/metrics/index.js.map +1 -1
  120. package/dist/multistream/mediaRequestManager.js +223 -32
  121. package/dist/multistream/mediaRequestManager.js.map +1 -1
  122. package/dist/multistream/receiveSlot.js +10 -0
  123. package/dist/multistream/receiveSlot.js.map +1 -1
  124. package/dist/multistream/receiveSlotManager.js +39 -36
  125. package/dist/multistream/receiveSlotManager.js.map +1 -1
  126. package/dist/multistream/remoteMedia.js +3 -1
  127. package/dist/multistream/remoteMedia.js.map +1 -1
  128. package/dist/multistream/remoteMediaGroup.js +76 -5
  129. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  130. package/dist/multistream/remoteMediaManager.js +366 -104
  131. package/dist/multistream/remoteMediaManager.js.map +1 -1
  132. package/dist/multistream/sendSlotManager.js +255 -0
  133. package/dist/multistream/sendSlotManager.js.map +1 -0
  134. package/dist/reachability/clusterReachability.js +356 -0
  135. package/dist/reachability/clusterReachability.js.map +1 -0
  136. package/dist/reachability/index.js +263 -390
  137. package/dist/reachability/index.js.map +1 -1
  138. package/dist/reachability/request.js +6 -4
  139. package/dist/reachability/request.js.map +1 -1
  140. package/dist/reachability/util.js +29 -0
  141. package/dist/reachability/util.js.map +1 -0
  142. package/dist/reconnection-manager/index.js +266 -202
  143. package/dist/reconnection-manager/index.js.map +1 -1
  144. package/dist/recording-controller/index.js +21 -2
  145. package/dist/recording-controller/index.js.map +1 -1
  146. package/dist/recording-controller/util.js +9 -8
  147. package/dist/recording-controller/util.js.map +1 -1
  148. package/dist/roap/index.js +51 -28
  149. package/dist/roap/index.js.map +1 -1
  150. package/dist/roap/request.js +48 -64
  151. package/dist/roap/request.js.map +1 -1
  152. package/dist/roap/turnDiscovery.js +220 -70
  153. package/dist/roap/turnDiscovery.js.map +1 -1
  154. package/dist/rtcMetrics/constants.js +12 -0
  155. package/dist/rtcMetrics/constants.js.map +1 -0
  156. package/dist/rtcMetrics/index.js +179 -0
  157. package/dist/rtcMetrics/index.js.map +1 -0
  158. package/dist/statsAnalyzer/index.js +357 -295
  159. package/dist/statsAnalyzer/index.js.map +1 -1
  160. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  161. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  162. package/dist/types/annotation/annotation.types.d.ts +42 -0
  163. package/dist/types/annotation/constants.d.ts +31 -0
  164. package/dist/types/annotation/index.d.ts +117 -0
  165. package/dist/types/breakouts/events.d.ts +8 -0
  166. package/dist/types/breakouts/utils.d.ts +14 -0
  167. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  168. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  169. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  170. package/dist/types/common/logs/request.d.ts +2 -0
  171. package/dist/types/common/queue.d.ts +9 -7
  172. package/dist/types/config.d.ts +2 -7
  173. package/dist/types/constants.d.ts +203 -31
  174. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  175. package/dist/types/controls-options-manager/index.d.ts +17 -1
  176. package/dist/types/controls-options-manager/types.d.ts +43 -0
  177. package/dist/types/controls-options-manager/util.d.ts +1 -7
  178. package/dist/types/index.d.ts +6 -5
  179. package/dist/types/interceptors/index.d.ts +2 -0
  180. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  181. package/dist/types/interpretation/collection.d.ts +5 -0
  182. package/dist/types/interpretation/index.d.ts +5 -0
  183. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  184. package/dist/types/locus-info/index.d.ts +57 -4
  185. package/dist/types/locus-info/parser.d.ts +66 -6
  186. package/dist/types/media/index.d.ts +2 -0
  187. package/dist/types/media/properties.d.ts +34 -49
  188. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  189. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  190. package/dist/types/meeting/index.d.ts +567 -496
  191. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  192. package/dist/types/meeting/muteState.d.ts +93 -25
  193. package/dist/types/meeting/request.d.ts +64 -43
  194. package/dist/types/meeting/util.d.ts +117 -1
  195. package/dist/types/meeting-info/index.d.ts +13 -1
  196. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  197. package/dist/types/meetings/collection.d.ts +17 -0
  198. package/dist/types/meetings/index.d.ts +113 -21
  199. package/dist/types/meetings/meetings.types.d.ts +4 -0
  200. package/dist/types/member/index.d.ts +14 -0
  201. package/dist/types/member/types.d.ts +32 -0
  202. package/dist/types/members/collection.d.ts +5 -0
  203. package/dist/types/members/index.d.ts +35 -2
  204. package/dist/types/members/request.d.ts +73 -9
  205. package/dist/types/members/types.d.ts +25 -0
  206. package/dist/types/members/util.d.ts +214 -1
  207. package/dist/types/metrics/constants.d.ts +17 -0
  208. package/dist/types/metrics/index.d.ts +4 -111
  209. package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
  210. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  211. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  212. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  213. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  214. package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
  215. package/dist/types/multistream/sendSlotManager.d.ts +70 -0
  216. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  217. package/dist/types/reachability/index.d.ts +60 -95
  218. package/dist/types/reachability/request.d.ts +3 -1
  219. package/dist/types/reachability/util.d.ts +8 -0
  220. package/dist/types/reconnection-manager/index.d.ts +19 -0
  221. package/dist/types/recording-controller/index.d.ts +15 -1
  222. package/dist/types/recording-controller/util.d.ts +5 -4
  223. package/dist/types/roap/index.d.ts +2 -1
  224. package/dist/types/roap/request.d.ts +9 -8
  225. package/dist/types/roap/turnDiscovery.d.ts +39 -5
  226. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  227. package/dist/types/rtcMetrics/index.d.ts +61 -0
  228. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  229. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  230. package/dist/types/webinar/collection.d.ts +16 -0
  231. package/dist/types/webinar/index.d.ts +5 -0
  232. package/dist/webinar/collection.js +44 -0
  233. package/dist/webinar/collection.js.map +1 -0
  234. package/dist/webinar/index.js +69 -0
  235. package/dist/webinar/index.js.map +1 -0
  236. package/package.json +22 -19
  237. package/src/annotation/annotation.types.ts +50 -0
  238. package/src/annotation/constants.ts +36 -0
  239. package/src/annotation/index.ts +328 -0
  240. package/src/breakouts/README.md +35 -11
  241. package/src/breakouts/breakout.ts +67 -9
  242. package/src/breakouts/events.ts +56 -0
  243. package/src/breakouts/index.ts +558 -59
  244. package/src/breakouts/utils.ts +42 -0
  245. package/src/common/errors/no-meeting-info.ts +24 -0
  246. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  247. package/src/common/errors/webex-errors.ts +44 -2
  248. package/src/common/logs/logger-proxy.ts +1 -1
  249. package/src/common/logs/request.ts +5 -1
  250. package/src/common/queue.ts +22 -8
  251. package/src/config.ts +4 -9
  252. package/src/constants.ts +229 -21
  253. package/src/controls-options-manager/enums.ts +12 -0
  254. package/src/controls-options-manager/index.ts +116 -21
  255. package/src/controls-options-manager/types.ts +59 -0
  256. package/src/controls-options-manager/util.ts +294 -14
  257. package/src/index.ts +44 -0
  258. package/src/interceptors/index.ts +3 -0
  259. package/src/interceptors/locusRetry.ts +67 -0
  260. package/src/interpretation/README.md +60 -0
  261. package/src/interpretation/collection.ts +19 -0
  262. package/src/interpretation/index.ts +349 -0
  263. package/src/interpretation/siLanguage.ts +18 -0
  264. package/src/locus-info/controlsUtils.ts +108 -0
  265. package/src/locus-info/index.ts +417 -59
  266. package/src/locus-info/infoUtils.ts +10 -2
  267. package/src/locus-info/mediaSharesUtils.ts +80 -0
  268. package/src/locus-info/parser.ts +258 -47
  269. package/src/locus-info/selfUtils.ts +81 -5
  270. package/src/media/index.ts +100 -108
  271. package/src/media/properties.ts +88 -117
  272. package/src/mediaQualityMetrics/config.ts +103 -238
  273. package/src/meeting/in-meeting-actions.ts +171 -3
  274. package/src/meeting/index.ts +3411 -2435
  275. package/src/meeting/locusMediaRequest.ts +313 -0
  276. package/src/meeting/muteState.ts +223 -136
  277. package/src/meeting/request.ts +155 -120
  278. package/src/meeting/util.ts +685 -395
  279. package/src/meeting-info/index.ts +81 -8
  280. package/src/meeting-info/meeting-info-v2.ts +170 -14
  281. package/src/meeting-info/util.ts +1 -1
  282. package/src/meeting-info/utilv2.ts +23 -23
  283. package/src/meetings/collection.ts +33 -0
  284. package/src/meetings/index.ts +507 -127
  285. package/src/meetings/meetings.types.ts +12 -0
  286. package/src/meetings/request.ts +2 -0
  287. package/src/meetings/util.ts +81 -12
  288. package/src/member/index.ts +58 -0
  289. package/src/member/types.ts +38 -0
  290. package/src/member/util.ts +141 -25
  291. package/src/members/collection.ts +8 -0
  292. package/src/members/index.ts +134 -8
  293. package/src/members/request.ts +97 -17
  294. package/src/members/types.ts +29 -0
  295. package/src/members/util.ts +333 -240
  296. package/src/metrics/constants.ts +17 -0
  297. package/src/metrics/index.ts +1 -469
  298. package/src/multistream/mediaRequestManager.ts +271 -56
  299. package/src/multistream/receiveSlot.ts +11 -4
  300. package/src/multistream/receiveSlotManager.ts +34 -24
  301. package/src/multistream/remoteMedia.ts +5 -3
  302. package/src/multistream/remoteMediaGroup.ts +78 -0
  303. package/src/multistream/remoteMediaManager.ts +248 -44
  304. package/src/multistream/sendSlotManager.ts +199 -0
  305. package/src/reachability/clusterReachability.ts +320 -0
  306. package/src/reachability/index.ts +229 -346
  307. package/src/reachability/request.ts +8 -4
  308. package/src/reachability/util.ts +24 -0
  309. package/src/reconnection-manager/index.ts +128 -97
  310. package/src/recording-controller/index.ts +20 -3
  311. package/src/recording-controller/util.ts +26 -9
  312. package/src/roap/index.ts +52 -23
  313. package/src/roap/request.ts +48 -67
  314. package/src/roap/turnDiscovery.ts +147 -49
  315. package/src/rtcMetrics/constants.ts +3 -0
  316. package/src/rtcMetrics/index.ts +166 -0
  317. package/src/statsAnalyzer/index.ts +457 -416
  318. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  319. package/src/webinar/collection.ts +31 -0
  320. package/src/webinar/index.ts +62 -0
  321. package/test/integration/spec/converged-space-meetings.js +60 -3
  322. package/test/integration/spec/journey.js +320 -261
  323. package/test/integration/spec/space-meeting.js +76 -3
  324. package/test/unit/spec/annotation/index.ts +418 -0
  325. package/test/unit/spec/breakouts/breakout.ts +118 -28
  326. package/test/unit/spec/breakouts/events.ts +89 -0
  327. package/test/unit/spec/breakouts/index.ts +1349 -114
  328. package/test/unit/spec/breakouts/utils.js +52 -1
  329. package/test/unit/spec/common/queue.js +31 -2
  330. package/test/unit/spec/controls-options-manager/index.js +163 -0
  331. package/test/unit/spec/controls-options-manager/util.js +576 -60
  332. package/test/unit/spec/fixture/locus.js +1 -0
  333. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  334. package/test/unit/spec/interpretation/collection.ts +15 -0
  335. package/test/unit/spec/interpretation/index.ts +625 -0
  336. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  337. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  338. package/test/unit/spec/locus-info/index.js +1363 -37
  339. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  340. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  341. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  342. package/test/unit/spec/locus-info/parser.js +116 -35
  343. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  344. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  345. package/test/unit/spec/media/index.ts +173 -81
  346. package/test/unit/spec/media/properties.ts +2 -2
  347. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  348. package/test/unit/spec/meeting/index.js +6821 -2172
  349. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  350. package/test/unit/spec/meeting/muteState.js +402 -212
  351. package/test/unit/spec/meeting/request.js +473 -54
  352. package/test/unit/spec/meeting/utils.js +773 -67
  353. package/test/unit/spec/meeting-info/index.js +300 -0
  354. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  355. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  356. package/test/unit/spec/meetings/collection.js +26 -0
  357. package/test/unit/spec/meetings/index.js +1415 -213
  358. package/test/unit/spec/meetings/utils.js +229 -2
  359. package/test/unit/spec/member/index.js +61 -6
  360. package/test/unit/spec/member/util.js +510 -34
  361. package/test/unit/spec/members/index.js +432 -1
  362. package/test/unit/spec/members/request.js +206 -27
  363. package/test/unit/spec/members/utils.js +210 -0
  364. package/test/unit/spec/metrics/index.js +1 -50
  365. package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
  366. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  367. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  368. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  369. package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
  370. package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
  371. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  372. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  373. package/test/unit/spec/reachability/index.ts +551 -14
  374. package/test/unit/spec/reachability/request.js +3 -1
  375. package/test/unit/spec/reachability/util.ts +40 -0
  376. package/test/unit/spec/reconnection-manager/index.js +171 -11
  377. package/test/unit/spec/recording-controller/index.js +294 -218
  378. package/test/unit/spec/recording-controller/util.js +223 -96
  379. package/test/unit/spec/roap/index.ts +180 -83
  380. package/test/unit/spec/roap/request.ts +100 -62
  381. package/test/unit/spec/roap/turnDiscovery.ts +388 -96
  382. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  383. package/test/unit/spec/stats-analyzer/index.js +1252 -12
  384. package/test/unit/spec/webinar/collection.ts +13 -0
  385. package/test/unit/spec/webinar/index.ts +60 -0
  386. package/test/utils/integrationTestUtils.js +46 -0
  387. package/test/utils/testUtils.js +0 -57
  388. package/test/utils/webex-test-users.js +12 -4
  389. package/dist/metrics/config.js +0 -289
  390. package/dist/metrics/config.js.map +0 -1
  391. package/dist/types/metrics/config.d.ts +0 -169
  392. package/src/index.js +0 -18
  393. package/src/metrics/config.ts +0 -485
@@ -0,0 +1,328 @@
1
+ import uuid from 'uuid';
2
+ // eslint-disable-next-line import/no-extraneous-dependencies
3
+ import {WebexPlugin, config} from '@webex/webex-core';
4
+ import TriggerProxy from '../common/events/trigger-proxy';
5
+
6
+ import {
7
+ EVENT_TRIGGERS,
8
+ ANNOTATION_RELAY_TYPES,
9
+ ANNOTATION,
10
+ ANNOTATION_REQUEST_TYPE,
11
+ ANNOTATION_ACTION_TYPE,
12
+ ANNOTATION_RESOURCE_TYPE,
13
+ } from './constants';
14
+
15
+ import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
16
+ import {HTTP_VERBS} from '../constants';
17
+
18
+ /**
19
+ * @description Annotation to handle LLM and Mercury message and locus API
20
+ * @class
21
+ */
22
+ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
23
+ namespace = ANNOTATION;
24
+
25
+ private seqNum: number;
26
+
27
+ hasSubscribedToEvents: boolean;
28
+
29
+ approvalUrl: string;
30
+ locusUrl: string;
31
+ deviceUrl: string;
32
+
33
+ /**
34
+ * Initializes annotation module
35
+ */
36
+ constructor(...args) {
37
+ super(...args);
38
+ this.seqNum = 1;
39
+ }
40
+
41
+ /**
42
+ * Process Stroke Data
43
+ * @param {object} data
44
+ * @returns {void}
45
+ */
46
+ private processStrokeMessage(data) {
47
+ const {request} = data;
48
+ this.decryptContent(request.value.encryptionKeyUrl, request.value.content).then(
49
+ (decryptedContent) => {
50
+ request.value.content = decryptedContent;
51
+ TriggerProxy.trigger(
52
+ this,
53
+ {
54
+ file: 'annotation',
55
+ function: 'processStrokeMessage',
56
+ },
57
+ EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,
58
+ {
59
+ payload: data,
60
+ }
61
+ );
62
+ }
63
+ );
64
+ }
65
+
66
+ /** bind all events from mercury
67
+ * @param {Object} e
68
+ * @returns {undefined}
69
+ */
70
+ private eventCommandProcessor(e) {
71
+ if (
72
+ e?.data?.eventType === 'locus.approval_request' &&
73
+ e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
74
+ e?.data?.approval?.actionType
75
+ ) {
76
+ TriggerProxy.trigger(
77
+ this,
78
+ {
79
+ file: 'annotation',
80
+ function: 'approval_request',
81
+ },
82
+ EVENT_TRIGGERS.ANNOTATION_COMMAND,
83
+ {
84
+ type: e.data.approval.actionType,
85
+ payload: e.data.approval,
86
+ }
87
+ );
88
+ }
89
+ }
90
+
91
+ /** bind all events from llm
92
+ * @param {Object} e
93
+ * @returns {undefined}
94
+ */
95
+ private eventDataProcessor(e) {
96
+ switch (e?.data?.relayType) {
97
+ case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:
98
+ this.processStrokeMessage(e.data);
99
+ break;
100
+ default:
101
+ break;
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Listen to websocket messages
107
+ * @returns {undefined}
108
+ */
109
+ private listenToEvents() {
110
+ if (!this.hasSubscribedToEvents) {
111
+ // @ts-ignore
112
+ this.webex.internal.mercury.on(
113
+ 'event:locus.approval_request',
114
+ this.eventCommandProcessor,
115
+ this
116
+ );
117
+ // @ts-ignore
118
+ this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
119
+ this.hasSubscribedToEvents = true;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * set locusUrl
125
+ * @param {string} locusUrl
126
+ * @returns {void}
127
+ */
128
+ public locusUrlUpdate(locusUrl: string) {
129
+ this.locusUrl = locusUrl;
130
+ this.listenToEvents();
131
+ }
132
+
133
+ /**
134
+ * set approved url
135
+ * @param {string} approvalUrl
136
+ * @returns {void}
137
+ */
138
+ public approvalUrlUpdate(approvalUrl: string) {
139
+ this.approvalUrl = approvalUrl;
140
+ }
141
+
142
+ /**
143
+ * accept request
144
+ * @param {object} approval
145
+ * @returns {Promise}
146
+ */
147
+ public acceptRequest(approval) {
148
+ // @ts-ignore
149
+ return this.request({
150
+ method: HTTP_VERBS.PUT,
151
+ url: approval.url,
152
+ body: {
153
+ resourceType: ANNOTATION_RESOURCE_TYPE,
154
+ actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,
155
+ },
156
+ });
157
+ }
158
+
159
+ /**
160
+ * presenter declined request annotation
161
+ * @param {approval} approval
162
+ * @returns {Promise}
163
+ */
164
+ public declineRequest(approval) {
165
+ // @ts-ignore
166
+ return this.request({
167
+ method: HTTP_VERBS.PUT,
168
+ url: approval.url,
169
+ body: {
170
+ resourceType: ANNOTATION_RESOURCE_TYPE,
171
+ actionType: ANNOTATION_ACTION_TYPE.DECLINED,
172
+ },
173
+ });
174
+ }
175
+
176
+ /**
177
+ * request approved annotation
178
+ * @param {RequestData} requestData
179
+ * @returns {Promise}
180
+ */
181
+ public approveAnnotation(requestData: RequestData) {
182
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);
183
+ }
184
+
185
+ /**
186
+ * cancel approved annotation
187
+ * @param {object} requestData
188
+ * @param {object} approval
189
+ * @returns {Promise}
190
+ */
191
+ public cancelApproveAnnotation(requestData: RequestData, approval) {
192
+ const body: CommandRequestBody = {
193
+ actionType: ANNOTATION_ACTION_TYPE.CANCELED,
194
+ resourceType: 'AnnotationOnShare',
195
+ shareInstanceId: requestData.shareInstanceId,
196
+ };
197
+
198
+ // @ts-ignore
199
+ return this.request({
200
+ method: HTTP_VERBS.PUT,
201
+ url: `${approval.url}`,
202
+ body,
203
+ });
204
+ }
205
+
206
+ /**
207
+ * close annotation
208
+ * @param {object} requestData
209
+ * @returns {Promise}
210
+ */
211
+ public closeAnnotation(requestData: RequestData) {
212
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);
213
+ }
214
+
215
+ /**
216
+ * send annotation command
217
+ * @param {ANNOTATION_ACTION_TYPE} actionType
218
+ * @param {RequestData} requestData
219
+ * @returns {Promise}
220
+ */
221
+ private sendAnnotationAction = async (
222
+ actionType: ANNOTATION_ACTION_TYPE,
223
+ requestData: RequestData
224
+ ): Promise<void> => {
225
+ const body: CommandRequestBody = {
226
+ actionType,
227
+ resourceType: 'AnnotationOnShare',
228
+ shareInstanceId: requestData.shareInstanceId,
229
+ };
230
+ if (requestData?.toUserId) {
231
+ body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];
232
+ }
233
+
234
+ // @ts-ignore
235
+ return this.request({
236
+ method: HTTP_VERBS.POST,
237
+ url: `${this.approvalUrl}`,
238
+ body,
239
+ });
240
+ };
241
+
242
+ /**
243
+ * decrypt data
244
+ * @param {string} encryptionKeyUrl
245
+ * @param {string} content encrypted content
246
+ * @returns {string} decrypted content
247
+ */
248
+ private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
249
+ // @ts-ignore
250
+ return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {
251
+ return res;
252
+ });
253
+ };
254
+
255
+ /**
256
+ * encrypt data
257
+ * @param {string} encryptionKeyUrl
258
+ * @param {string} content original content
259
+ * @returns {string} encrypted content
260
+ */
261
+ private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
262
+ // @ts-ignore
263
+ return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {
264
+ return res;
265
+ });
266
+ };
267
+
268
+ /**
269
+ * Sends stroke data to presenter
270
+ * @param {StrokeData} strokeData
271
+ * @returns {void}
272
+ */
273
+ public sendStrokeData = (strokeData: StrokeData): void => {
274
+ // @ts-ignore
275
+ if (!this.webex.internal.llm.isConnected()) return;
276
+ this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(
277
+ (encryptedContent) => {
278
+ this.publishEncrypted(encryptedContent, strokeData);
279
+ }
280
+ );
281
+ };
282
+
283
+ /**
284
+ * private encrypted the strokes data
285
+ * @param {string} encryptedContent
286
+ * @param {StrokeData} strokeData
287
+ * @returns {void}
288
+ */
289
+ private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
290
+ const data = {
291
+ id: `${this.seqNum}`,
292
+ type: 'publishRequest',
293
+ recipients: {
294
+ // @ts-ignore
295
+ route: this.webex.internal.llm.getBinding(),
296
+ },
297
+ headers: {
298
+ to: strokeData.toUserId,
299
+ },
300
+ data: {
301
+ eventType: 'relay.event',
302
+ relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
303
+ request: {
304
+ value: {
305
+ type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
306
+ content: encryptedContent,
307
+ deviceId: strokeData.deviceId,
308
+ seq: this.seqNum,
309
+ requesterId: strokeData.requesterId,
310
+ version: strokeData.version,
311
+ shareInstanceId: strokeData.shareInstanceId,
312
+ encryptionKeyUrl: strokeData.encryptionKeyUrl,
313
+ },
314
+ },
315
+ },
316
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
317
+ timestamp: new Date().getTime(),
318
+ sequenceNumber: this.seqNum,
319
+ filterMessage: false,
320
+ };
321
+
322
+ // @ts-ignore
323
+ this.webex.internal.llm.socket.send(data);
324
+ this.seqNum += 1;
325
+ }
326
+ }
327
+
328
+ export default AnnotationChannel;
@@ -41,6 +41,12 @@ The following are methods available to attendees of a meeting:
41
41
  ```javascript
42
42
  // Join a breakout
43
43
  // This can be used when the participant is in the main session or in a different breakout session
44
+ // when call join function, should send message to metrics
45
+ /* Breakout Sessions created during meetings allow participants to move into smaller breakout sessions and then
46
+ return to the main meeting at a later time. These moves can be initiated by the user or by the meeting
47
+ host/co-host. The goal of this metric is to track these moves in production by instrumenting them for
48
+ analysis from the end user's experience perspective.
49
+ */
44
50
  breakout.join();
45
51
 
46
52
  // Leave a breakout
@@ -107,10 +113,6 @@ note: None of these are currently implemented
107
113
  // Move a participant to breakout
108
114
  breakout.move(participant)
109
115
 
110
- // Assign a particpant to a breakout
111
- // Not sure whether there is any difference from move
112
- breakout.assign(participant)
113
-
114
116
  // Remove someone from a breakout session
115
117
  // This returns them to the main session
116
118
  breakout.remove(participant)
@@ -119,7 +121,7 @@ breakout.remove(participant)
119
121
  // This can only be done when breakouts are inactive
120
122
  breakout.delete()
121
123
 
122
- /*
124
+ /*
123
125
  Create breakout sessions, Type is array
124
126
  Format: [{'name':'session1', "anyoneCanJoin" : true}]
125
127
  */
@@ -128,18 +130,40 @@ breakouts.create(sessions)
128
130
  // Delete all breakout sessions
129
131
  breakouts.clearSessions()
130
132
 
131
- // Rename an existing breakout session
132
- breakout.rename(newSessionName)
133
+ // update breakout session with params
134
+ // if unlockEdit is true, will release lock editing after update finish
135
+ breakout.update(params, unlockEdit)
136
+
137
+ // Start breakout sessions with necessary params
138
+ breakouts.start(params)
139
+
140
+ // Assign a particpant/participants to breakouts/a breakout
141
+ // sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com',anyone: true]},...]
142
+ breakouts.assign(sessions)
133
143
 
134
- // Start breakout sessions
135
- breakouts.start()
144
+ // Dynammic assign a particpant/participants to breakouts/main (not used by now)
145
+ // Admit lobby waiting participants to a breakout directly
146
+ // sessions should be like: [{id:'xx',participants:['111'],targetState:'JOINED'},...]
147
+ breakouts.dynamicAssign(sessions)
136
148
 
137
- // End breakout sessions
138
- breakouts.end()
149
+ // End breakout sessions with necessary params
150
+ breakouts.end(params)
151
+
152
+ // get breakout sessions with/without param editlock
153
+ breakouts.getBreakout(editlock?)
139
154
 
140
155
  // Enable breakout sessions
141
156
  breakouts.enable()
142
157
 
158
+ // Enable and lock breakout
159
+ breakouts.enableAndLockBreakout()
160
+
161
+ // Lock breakout
162
+ breakouts.lockBreakout()
163
+
164
+ // Unlock breakout
165
+ breakouts.unLockEditBreakout()
166
+
143
167
  // Disable breakout sessions
144
168
  breakouts.disable()
145
169
 
@@ -4,11 +4,11 @@
4
4
 
5
5
  import {WebexPlugin} from '@webex/webex-core';
6
6
 
7
- import {HTTP_VERBS, MEETINGS} from '../constants';
8
- import LocusInfo from '../locus-info';
7
+ import uuid from 'uuid';
8
+ import {_ID_, HTTP_VERBS, MEETINGS} from '../constants';
9
9
  import Members from '../members';
10
10
  import BreakoutRequest from './request';
11
-
11
+ import breakoutEvent from './events';
12
12
  /**
13
13
  * @class
14
14
  */
@@ -30,10 +30,12 @@ const Breakout = WebexPlugin.extend({
30
30
  sessionType: 'string',
31
31
  groupId: 'string',
32
32
  url: 'string', // where to send requests to
33
+ requestedLastModifiedTime: 'string',
33
34
  },
34
35
 
35
36
  derived: {
36
37
  isMain: {
38
+ cache: false, // fix issue: sometimes the derived will not change even if the deps changed
37
39
  deps: ['sessionType'],
38
40
  /**
39
41
  * If the breakout has no name, assume it is the main session
@@ -44,26 +46,47 @@ const Breakout = WebexPlugin.extend({
44
46
  },
45
47
  },
46
48
  },
47
-
49
+ /**
50
+ * initializer for the Breakout class
51
+ * @returns {void}
52
+ */
48
53
  initialize() {
49
- this.members = new Members({}, {parent: this.webex});
50
54
  // @ts-ignore
51
55
  this.breakoutRequest = new BreakoutRequest({webex: this.webex});
56
+ this.breakoutRosterLocus = null;
52
57
  },
53
58
 
54
59
  /**
55
60
  * Joins the breakout session
56
61
  * @returns {Promise}
57
62
  */
58
- join() {
59
- return this.request({
63
+ async join() {
64
+ const breakoutMoveId = uuid.v4();
65
+ const deviceUrl = this.webex.internal.device.url;
66
+ const {meetingId} = this.collection.parent;
67
+ const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
68
+ breakoutEvent.onBreakoutMoveRequest(
69
+ {currentSession: this, meeting, breakoutMoveId},
70
+ // @ts-ignore
71
+ this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)
72
+ );
73
+ const result = await this.request({
60
74
  method: HTTP_VERBS.POST,
61
75
  uri: `${this.url}/move`,
62
76
  body: {
77
+ breakoutMoveId,
78
+ deviceUrl,
63
79
  groupId: this.groupId,
64
80
  sessionId: this.sessionId,
65
81
  },
66
82
  });
83
+ breakoutEvent.onBreakoutMoveResponse(
84
+ {currentSession: this, meeting, breakoutMoveId},
85
+ // @ts-ignore
86
+ this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics)
87
+ );
88
+
89
+ return result;
67
90
  },
68
91
 
69
92
  /**
@@ -101,12 +124,47 @@ const Breakout = WebexPlugin.extend({
101
124
  },
102
125
 
103
126
  /**
104
- * Parses the participants from the locus object
105
- * @param locus Locus object
127
+ * inits the members object
106
128
  * @returns {void}
107
129
  */
130
+ initMembers() {
131
+ const {meetingId} = this.collection.parent;
132
+ const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
133
+ this.members = new Members(
134
+ {
135
+ meeting,
136
+ },
137
+ {parent: this.webex}
138
+ );
139
+ },
108
140
 
141
+ /**
142
+ * check sequence and determine whether to update the new roster or not
143
+ * @param {Object} locus Locus object
144
+ * @returns {Boolean}
145
+ */
146
+ isNeedHandleRoster(locus: any) {
147
+ if (!this.breakoutRosterLocus?.sequence?.entries?.length || !locus?.sequence?.entries?.length) {
148
+ return true;
149
+ }
150
+ const prevSequence = this.breakoutRosterLocus.sequence.entries[0];
151
+ const currentSequence = locus.sequence.entries[0];
152
+
153
+ return currentSequence > prevSequence;
154
+ },
155
+ /**
156
+ * Parses the participants from the locus object
157
+ * @param {Object} locus Locus object
158
+ * @returns {void}
159
+ */
109
160
  parseRoster(locus) {
161
+ if (!this.members) {
162
+ this.initMembers();
163
+ }
164
+ if (!this.isNeedHandleRoster(locus)) {
165
+ return;
166
+ }
167
+ this.breakoutRosterLocus = locus;
110
168
  this.members.locusParticipantsUpdate(locus);
111
169
  },
112
170
 
@@ -0,0 +1,56 @@
1
+ // eslint-disable-next-line import/prefer-default-export
2
+ import {ClientEvent} from '@webex/internal-plugin-metrics';
3
+
4
+ const breakoutEvent: {
5
+ onBreakoutMoveRequest: (eventInfo: any, submitClientEvent: any) => void;
6
+ onBreakoutMoveResponse: (eventInfo: any, submitClientEvent: any) => void;
7
+ onBreakoutJoinResponse: (eventInfo: any, submitClientEvent: any) => void;
8
+ postMoveCallAnalyzer: (
9
+ event: ClientEvent['name'],
10
+ eventInfo: any,
11
+ submitClientEvent: any
12
+ ) => void;
13
+ } = {
14
+ onBreakoutMoveRequest: (eventInfo, submitClientEvent) => {
15
+ breakoutEvent.postMoveCallAnalyzer(
16
+ 'client.breakout-session.move.request',
17
+ eventInfo,
18
+ submitClientEvent
19
+ );
20
+ },
21
+ onBreakoutMoveResponse: (eventInfo, submitClientEvent) => {
22
+ breakoutEvent.postMoveCallAnalyzer(
23
+ 'client.breakout-session.move.response',
24
+ eventInfo,
25
+ submitClientEvent
26
+ );
27
+ },
28
+ onBreakoutJoinResponse: (eventInfo, submitClientEvent) => {
29
+ breakoutEvent.postMoveCallAnalyzer(
30
+ 'client.breakout-session.join.response',
31
+ eventInfo,
32
+ submitClientEvent
33
+ );
34
+ },
35
+ postMoveCallAnalyzer: (event: ClientEvent['name'], eventInfo: any, submitClientEvent) => {
36
+ if (!eventInfo?.breakoutMoveId || !eventInfo?.meeting) {
37
+ return;
38
+ }
39
+ if (!eventInfo.meeting.meetingInfo?.enableConvergedArchitecture) {
40
+ return;
41
+ }
42
+ submitClientEvent({
43
+ name: event,
44
+ payload: {
45
+ identifiers: {
46
+ breakoutMoveId: eventInfo.breakoutMoveId,
47
+ breakoutSessionId: eventInfo?.currentSession?.sessionId,
48
+ breakoutGroupId: eventInfo?.currentSession?.groupId,
49
+ },
50
+ },
51
+ options: {meetingId: eventInfo.meeting.id},
52
+ });
53
+ },
54
+ };
55
+
56
+ export default breakoutEvent;