@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
@@ -1,53 +1,357 @@
1
1
  import {assert} from '@webex/test-helper-chai';
2
2
  import MemberUtil from '@webex/plugin-meetings/src/member/util';
3
+ import {ServerRoles} from '../../../../src/member/types';
4
+ import {_SEND_RECEIVE_, _RECEIVE_ONLY_} from '../../../../src/constants';
3
5
 
4
- describe('isHandRaised', () => {
5
- it('throws error when there is no participant', () => {
6
- assert.throws(() => {
7
- MemberUtil.isHandRaised();
8
- }, 'Raise hand could not be processed, participant is undefined.');
9
- });
6
+ describe('plugin-meetings', () => {
7
+ describe('isHandRaised', () => {
8
+ it('throws error when there is no participant', () => {
9
+ assert.throws(() => {
10
+ MemberUtil.isHandRaised();
11
+ }, 'Raise hand could not be processed, participant is undefined.');
12
+ });
13
+
14
+ it('returns false when controls is not there', () => {
15
+ const participant = {};
16
+
17
+ assert.isFalse(MemberUtil.isHandRaised(participant));
18
+ });
19
+
20
+ it('returns false when hand is not there in controls', () => {
21
+ const participant = {
22
+ controls: {},
23
+ };
24
+
25
+ assert.isFalse(MemberUtil.isHandRaised(participant));
26
+ });
27
+
28
+ it('returns true when hand raised is true', () => {
29
+ const participant = {
30
+ controls: {
31
+ hand: {
32
+ raised: true,
33
+ },
34
+ },
35
+ };
36
+
37
+ assert.isTrue(MemberUtil.isHandRaised(participant));
38
+ });
10
39
 
11
- it('returns false when controls is not there', () => {
12
- const participant = {};
40
+ it('returns false when hand raised is false', () => {
41
+ const participant = {
42
+ controls: {
43
+ hand: {
44
+ raised: false,
45
+ },
46
+ },
47
+ };
13
48
 
14
- assert.isFalse(MemberUtil.isHandRaised(participant));
49
+ assert.isFalse(MemberUtil.isHandRaised(participant));
50
+ });
15
51
  });
16
52
 
17
- it('returns false when hand is not there in controls', () => {
18
- const participant = {
19
- controls: {},
20
- };
53
+ describe('MemberUtil.canReclaimHost', () => {
54
+ it('throws error when there is no participant', () => {
55
+ assert.throws(() => {
56
+ MemberUtil.canReclaimHost();
57
+ }, 'canReclaimHostRole could not be processed, participant is undefined.');
58
+ });
21
59
 
22
- assert.isFalse(MemberUtil.isHandRaised(participant));
60
+ it('returns true when canReclaimHostRole is true', () => {
61
+ const participant = {
62
+ canReclaimHostRole: true,
63
+ };
64
+
65
+ assert.isTrue(MemberUtil.canReclaimHost(participant));
66
+ });
67
+
68
+ it('returns false when canReclaimHostRole is false', () => {
69
+ const participant = {
70
+ canReclaimHostRole: false,
71
+ };
72
+
73
+ assert.isFalse(MemberUtil.canReclaimHost(participant));
74
+ });
75
+
76
+ it('returns false when canReclaimHostRole is falsy', () => {
77
+ const participant = {
78
+ canReclaimHostRole: undefined,
79
+ };
80
+
81
+ assert.isFalse(MemberUtil.canReclaimHost(participant));
82
+ });
23
83
  });
24
84
 
25
- it('returns true when hand raised is true', () => {
26
- const participant = {
27
- controls: {
28
- hand: {
29
- raised: true,
85
+ describe('MemberUtil.extractControlRoles', () => {
86
+ it('happy path extract control roles', () => {
87
+ const participant = {
88
+ controls: {
89
+ role: {
90
+ roles: [
91
+ {type: 'PRESENTER', hasRole: true},
92
+ {type: 'COHOST', hasRole: true},
93
+ {type: 'MODERATOR', hasRole: true},
94
+ ],
95
+ },
30
96
  },
31
- },
32
- };
97
+ };
33
98
 
34
- assert.isTrue(MemberUtil.isHandRaised(participant));
99
+ assert.deepEqual(MemberUtil.extractControlRoles(participant), {
100
+ cohost: true,
101
+ moderator: true,
102
+ presenter: true,
103
+ });
104
+ });
35
105
  });
36
106
 
37
- it('returns false when hand raised is false', () => {
38
- const participant = {
39
- controls: {
40
- hand: {
41
- raised: false,
107
+ describe('MemberUtil.getControlsRoles', () => {
108
+ it('getControlsRoles', () => {
109
+ const participant = {
110
+ controls: {
111
+ role: {
112
+ roles: [{type: 'PRESENTER', hasRole: true}],
113
+ },
42
114
  },
43
- },
44
- };
115
+ };
45
116
 
46
- assert.isFalse(MemberUtil.isHandRaised(participant));
117
+ assert.deepEqual(MemberUtil.getControlsRoles(participant), [
118
+ {type: 'PRESENTER', hasRole: true},
119
+ ]);
120
+ });
121
+ });
122
+
123
+ describe('MemberUtil.hasRole', () => {
124
+ describe('PRESENTER', () => {
125
+ it('getControlsRoles PRESENTER true', () => {
126
+ const participant = {
127
+ controls: {
128
+ role: {
129
+ roles: [{type: 'PRESENTER', hasRole: true}],
130
+ },
131
+ },
132
+ };
133
+
134
+ assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Presenter));
135
+ });
136
+
137
+ it('getControlsRoles PRESENTER false', () => {
138
+ const participant = {
139
+ controls: {
140
+ role: {
141
+ roles: [{type: 'PRESENTER', hasRole: false}],
142
+ },
143
+ },
144
+ };
145
+
146
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
147
+ });
148
+
149
+ it('getControlsRoles PRESENTER undefined', () => {
150
+ const participant = {
151
+ controls: {
152
+ role: {
153
+ roles: [{}],
154
+ },
155
+ },
156
+ };
157
+
158
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Presenter));
159
+ });
160
+ });
161
+
162
+ describe('MODERATOR', () => {
163
+ it('getControlsRoles MODERATOR true', () => {
164
+ const participant = {
165
+ controls: {
166
+ role: {
167
+ roles: [{type: 'MODERATOR', hasRole: true}],
168
+ },
169
+ },
170
+ };
171
+
172
+ assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Moderator));
173
+ });
174
+
175
+ it('getControlsRoles MODERATOR false', () => {
176
+ const participant = {
177
+ controls: {
178
+ role: {
179
+ roles: [{type: 'MODERATOR', hasRole: false}],
180
+ },
181
+ },
182
+ };
183
+
184
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
185
+ });
186
+
187
+ it('getControlsRoles MODERATOR undefined', () => {
188
+ const participant = {
189
+ controls: {
190
+ role: {
191
+ roles: [{}],
192
+ },
193
+ },
194
+ };
195
+
196
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Moderator));
197
+ });
198
+ });
199
+
200
+ describe('COHOST', () => {
201
+ it('getControlsRoles COHOST true', () => {
202
+ const participant = {
203
+ controls: {
204
+ role: {
205
+ roles: [{type: 'COHOST', hasRole: true}],
206
+ },
207
+ },
208
+ };
209
+
210
+ assert.isTrue(MemberUtil.hasRole(participant, ServerRoles.Cohost));
211
+ });
212
+
213
+ it('getControlsRoles COHOST false', () => {
214
+ const participant = {
215
+ controls: {
216
+ role: {
217
+ roles: [{type: 'COHOST', hasRole: false}],
218
+ },
219
+ },
220
+ };
221
+
222
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
223
+ });
224
+
225
+ it('getControlsRoles COHOST undefined', () => {
226
+ const participant = {
227
+ controls: {
228
+ role: {
229
+ roles: [{}],
230
+ },
231
+ },
232
+ };
233
+
234
+ assert.isFalse(MemberUtil.hasRole(participant, ServerRoles.Cohost));
235
+ });
236
+ });
237
+ });
238
+
239
+ describe('MemberUtil.is<Role>', () => {
240
+ describe('PRESENTER', () => {
241
+ it('getControlsRoles PRESENTER true', () => {
242
+ const participant = {
243
+ controls: {
244
+ role: {
245
+ roles: [{type: 'PRESENTER', hasRole: true}],
246
+ },
247
+ },
248
+ };
249
+
250
+ assert.isTrue(MemberUtil.hasPresenter(participant, ServerRoles.Presenter));
251
+ });
252
+
253
+ it('getControlsRoles PRESENTER false', () => {
254
+ const participant = {
255
+ controls: {
256
+ role: {
257
+ roles: [{type: 'PRESENTER', hasRole: false}],
258
+ },
259
+ },
260
+ };
261
+
262
+ assert.isFalse(MemberUtil.hasPresenter(participant));
263
+ });
264
+
265
+ it('getControlsRoles PRESENTER undefined', () => {
266
+ const participant = {
267
+ controls: {
268
+ role: {
269
+ roles: [{}],
270
+ },
271
+ },
272
+ };
273
+
274
+ assert.isFalse(MemberUtil.hasPresenter(participant));
275
+ });
276
+ });
277
+
278
+ describe('MODERATOR', () => {
279
+ it('getControlsRoles MODERATOR true', () => {
280
+ const participant = {
281
+ controls: {
282
+ role: {
283
+ roles: [{type: 'MODERATOR', hasRole: true}],
284
+ },
285
+ },
286
+ };
287
+
288
+ assert.isTrue(MemberUtil.hasModerator(participant));
289
+ });
290
+
291
+ it('getControlsRoles MODERATOR false', () => {
292
+ const participant = {
293
+ controls: {
294
+ role: {
295
+ roles: [{type: 'MODERATOR', hasRole: false}],
296
+ },
297
+ },
298
+ };
299
+
300
+ assert.isFalse(MemberUtil.hasModerator(participant));
301
+ });
302
+
303
+ it('getControlsRoles MODERATOR undefined', () => {
304
+ const participant = {
305
+ controls: {
306
+ role: {
307
+ roles: [{}],
308
+ },
309
+ },
310
+ };
311
+
312
+ assert.isFalse(MemberUtil.hasModerator(participant));
313
+ });
314
+ });
315
+
316
+ describe('COHOST', () => {
317
+ it('getControlsRoles COHOST true', () => {
318
+ const participant = {
319
+ controls: {
320
+ role: {
321
+ roles: [{type: 'COHOST', hasRole: true}],
322
+ },
323
+ },
324
+ };
325
+
326
+ assert.isTrue(MemberUtil.hasCohost(participant));
327
+ });
328
+
329
+ it('getControlsRoles COHOST false', () => {
330
+ const participant = {
331
+ controls: {
332
+ role: {
333
+ roles: [{type: 'COHOST', hasRole: false}],
334
+ },
335
+ },
336
+ };
337
+
338
+ assert.isFalse(MemberUtil.hasCohost(participant));
339
+ });
340
+
341
+ it('getControlsRoles COHOST undefined', () => {
342
+ const participant = {
343
+ controls: {
344
+ role: {
345
+ roles: [{}],
346
+ },
347
+ },
348
+ };
349
+
350
+ assert.isFalse(MemberUtil.hasCohost(participant));
351
+ });
352
+ });
47
353
  });
48
- });
49
354
 
50
- describe('plugin-meetings', () => {
51
355
  describe('MemberUtil.isBreakoutsSupported', () => {
52
356
  it('throws error when there is no participant', () => {
53
357
  assert.throws(() => {
@@ -57,7 +361,7 @@ describe('plugin-meetings', () => {
57
361
 
58
362
  it('returns true when hand breakouts are supported', () => {
59
363
  const participant = {
60
- doesNotSupportBreakouts: false
364
+ doesNotSupportBreakouts: false,
61
365
  };
62
366
 
63
367
  assert.isTrue(MemberUtil.isBreakoutsSupported(participant));
@@ -65,10 +369,182 @@ describe('plugin-meetings', () => {
65
369
 
66
370
  it('returns false when hand breakouts are not supported', () => {
67
371
  const participant = {
68
- doesNotSupportBreakouts: true
372
+ doesNotSupportBreakouts: true,
69
373
  };
70
374
 
71
375
  assert.isFalse(MemberUtil.isBreakoutsSupported(participant));
72
376
  });
73
377
  });
378
+
379
+ describe('MemberUtil.isLiveAnnotationSupported', () => {
380
+ it('throws error when there is no participant', () => {
381
+ assert.throws(() => {
382
+ MemberUtil.isLiveAnnotationSupported();
383
+ }, 'LiveAnnotation support could not be processed, participant is undefined.');
384
+ });
385
+
386
+ it('returns true when hand live annotation are supported', () => {
387
+ const participant = {
388
+ annotatorAssignmentNotAllowed: false,
389
+ };
390
+
391
+ assert.isTrue(MemberUtil.isLiveAnnotationSupported(participant));
392
+ });
393
+
394
+ it('returns false when hand live annotation are not supported', () => {
395
+ const participant = {
396
+ annotatorAssignmentNotAllowed: true,
397
+ };
398
+
399
+ assert.isFalse(MemberUtil.isLiveAnnotationSupported(participant));
400
+ });
401
+ });
402
+
403
+ describe('MemberUtil.isInterpretationSupported', () => {
404
+ it('throws error when there is no participant', () => {
405
+ assert.throws(() => {
406
+ MemberUtil.isInterpretationSupported();
407
+ }, 'Interpretation support could not be processed, participant is undefined.');
408
+ });
409
+
410
+ it('returns true when hand SiInterpreter are supported', () => {
411
+ const participant = {
412
+ doesNotSupportSiInterpreter: false,
413
+ };
414
+
415
+ assert.isTrue(MemberUtil.isInterpretationSupported(participant));
416
+ });
417
+
418
+ it('returns false when hand SiInterpreter are not supported', () => {
419
+ const participant = {
420
+ doesNotSupportSiInterpreter: true,
421
+ };
422
+
423
+ assert.isFalse(MemberUtil.isInterpretationSupported(participant));
424
+ });
425
+ });
426
+
427
+ const getMuteStatus = (muted) => {
428
+ if (muted === undefined) {
429
+ return undefined;
430
+ }
431
+ return muted ? _RECEIVE_ONLY_ : _SEND_RECEIVE_;
432
+ };
433
+
434
+ describe('MemberUtil.isAudioMuted', () => {
435
+ it('throws error when there is no participant', () => {
436
+ assert.throws(() => {
437
+ MemberUtil.isAudioMuted();
438
+ }, 'Audio could not be processed, participant is undefined.');
439
+ });
440
+
441
+ // NOTE: participant.controls.audio.muted represents remote video mute
442
+ // participant.status.audioStatus represents local video mute
443
+
444
+ const testResult = (remoteMuted, localMuted, expected) => {
445
+ const participant = {
446
+ controls: {audio: {muted: remoteMuted}},
447
+ status: {audioStatus: getMuteStatus(localMuted)},
448
+ };
449
+
450
+ assert.equal(MemberUtil.isAudioMuted(participant), expected);
451
+ };
452
+
453
+ it('returns true when remote is muted and local is not', () => {
454
+ testResult(true, false, true);
455
+ });
456
+
457
+ it('returns true when remote is not muted and local is muted', () => {
458
+ testResult(false, true, true);
459
+ });
460
+
461
+ it('returns false when both are not muted', () => {
462
+ testResult(false, false, false);
463
+ });
464
+
465
+ it('returns undefined when both are undefined', () => {
466
+ testResult(undefined, undefined, undefined);
467
+ });
468
+
469
+ it('returns defined status when the other is undefined', () => {
470
+ testResult(undefined, true, true);
471
+ testResult(undefined, false, false);
472
+ testResult(true, undefined, true);
473
+ testResult(false, undefined, false);
474
+ });
475
+ });
476
+
477
+ describe('MemberUtil.isVideoMuted', () => {
478
+ it('throws error when there is no participant', () => {
479
+ assert.throws(() => {
480
+ MemberUtil.isVideoMuted();
481
+ }, 'Video could not be processed, participant is undefined.');
482
+ });
483
+
484
+ // NOTE: participant.controls.video.muted represents remote video mute
485
+ // participant.status.videoStatus represents local video mute
486
+
487
+ const testResult = (remoteMuted, localMuted, expected) => {
488
+ const participant = {
489
+ controls: {video: {muted: remoteMuted}},
490
+ status: {videoStatus: getMuteStatus(localMuted)},
491
+ };
492
+
493
+ assert.equal(MemberUtil.isVideoMuted(participant), expected);
494
+ };
495
+
496
+ it('returns true when remote is muted and local is not', () => {
497
+ testResult(true, false, true);
498
+ });
499
+
500
+ it('returns true when remote is not muted and local is muted', () => {
501
+ testResult(false, true, true);
502
+ });
503
+
504
+ it('returns false when both are not muted', () => {
505
+ testResult(false, false, false);
506
+ });
507
+
508
+ it('returns undefined when both are undefined', () => {
509
+ testResult(undefined, undefined, undefined);
510
+ });
511
+
512
+ it('returns defined status when the other is undefined', () => {
513
+ testResult(undefined, true, true);
514
+ testResult(undefined, false, false);
515
+ testResult(true, undefined, true);
516
+ testResult(false, undefined, false);
517
+ });
518
+ });
519
+ });
520
+
521
+ describe('extractMediaStatus', () => {
522
+ it('throws error when there is no participant', () => {
523
+ assert.throws(() => {
524
+ MemberUtil.extractMediaStatus()
525
+ }, 'Media status could not be extracted, participant is undefined.');
526
+ });
527
+
528
+ it('returns undefined media status when participant audio/video status is not present', () => {
529
+ const participant = {
530
+ status: {}
531
+ };
532
+
533
+ const mediaStatus = MemberUtil.extractMediaStatus(participant)
534
+
535
+ assert.deepEqual(mediaStatus, {audio: undefined, video: undefined});
536
+ });
537
+
538
+ it('returns correct media status when participant audio/video status is present', () => {
539
+ const participant = {
540
+ status: {
541
+ audioStatus: 'RECVONLY',
542
+ videoStatus: 'SENDRECV'
543
+ }
544
+ };
545
+
546
+ const mediaStatus = MemberUtil.extractMediaStatus(participant)
547
+
548
+ assert.deepEqual(mediaStatus, {audio: 'RECVONLY', video: 'SENDRECV'});
549
+ });
74
550
  });