@webex/plugin-meetings 2.59.8 → 2.60.0-next.2

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 (528) hide show
  1. package/README.md +46 -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 +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +15 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +92 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4628 -2971
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +200 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +39 -41
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +42 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +477 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +15 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +281 -229
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +140 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +402 -424
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +117 -83
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -25
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +271 -93
  262. package/src/controls-options-manager/enums.ts +12 -0
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +172 -0
  282. package/src/meeting/index.ts +3861 -2504
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +163 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +28 -28
  292. package/src/meetings/collection.ts +33 -0
  293. package/src/meetings/index.ts +477 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +13 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +167 -154
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +124 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +470 -522
  330. package/src/statsAnalyzer/mqaUtil.ts +117 -112
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +84 -0
  362. package/test/unit/spec/meeting/index.js +8269 -3145
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +409 -213
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +26 -0
  371. package/test/unit/spec/meetings/index.js +1201 -210
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +499 -29
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +145 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  396. package/test/unit/spec/stats-analyzer/index.js +188 -174
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -0,0 +1,12 @@
1
+ import type {
2
+ NoiseReductionEffectOptions,
3
+ VirtualBackgroundEffectOptions,
4
+ } from '@webex/media-helpers';
5
+
6
+ type INoiseReductionEffect = Omit<
7
+ NoiseReductionEffectOptions,
8
+ 'authToken' | 'workletProcessorUrl' | 'legacyProcessorUrl'
9
+ >;
10
+ type IVirtualBackgroundEffect = Omit<VirtualBackgroundEffectOptions, 'authToken'>;
11
+
12
+ export type {INoiseReductionEffect, IVirtualBackgroundEffect};
@@ -23,6 +23,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
23
23
  LoggerProxy.logger.error(
24
24
  `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
25
25
  );
26
+ throw new Error(error);
26
27
  });
27
28
  }
28
29
 
@@ -71,6 +72,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
71
72
  LoggerProxy.logger.error(
72
73
  `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
73
74
  );
75
+ throw new Error(error);
74
76
  })
75
77
  )
76
78
  ).then(() => Promise.resolve(responseBody));
@@ -1,15 +1,23 @@
1
1
  /* globals window */
2
2
 
3
3
  import {
4
- _LOCUS_ID_,
5
- _INCOMING_,
6
4
  _CREATED_,
7
- LOCUSEVENT,
5
+ _INCOMING_,
6
+ _JOINED_,
7
+ _LEFT_,
8
+ _LOCUS_ID_,
9
+ _MOVED_,
10
+ BREAKOUTS,
8
11
  CORRELATION_ID,
9
12
  EVENT_TRIGGERS,
13
+ LOCUS,
14
+ LOCUSEVENT,
15
+ ROAP,
10
16
  } from '../constants';
11
17
  import LoggerProxy from '../common/logs/logger-proxy';
12
18
  import Trigger from '../common/events/trigger-proxy';
19
+ import BEHAVIORAL_METRICS from '../metrics/constants';
20
+ import Metrics from '../metrics';
13
21
 
14
22
  /**
15
23
  * Meetings Media Codec Missing Event
@@ -41,11 +49,54 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
41
49
  const meeting = meetingCollection.getByKey(CORRELATION_ID, data.correlationId);
42
50
 
43
51
  if (meeting) {
44
- meeting.roap.roapEvent(data);
52
+ const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
53
+
54
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
55
+ correlation_id: data.correlationId,
56
+ seq,
57
+ message_type: messageType,
58
+ error_type: errorType,
59
+ error_cause: errorCause,
60
+ });
61
+
62
+ if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
63
+ // turn discovery is not part of normal roap protocol and so we are not handling it
64
+ // through the usual roap state machine
65
+ meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message);
66
+ } else {
67
+ const roapMessage = {
68
+ seq,
69
+ messageType,
70
+ sdp: data.message.sdps?.length > 0 ? data.message.sdps[0] : undefined,
71
+ tieBreaker,
72
+ errorType,
73
+ errorCause,
74
+ };
75
+
76
+ meeting.roapMessageReceived(roapMessage);
77
+ }
45
78
  }
46
79
  }
47
80
  };
48
81
 
82
+ MeetingsUtil.getMediaServer = (sdp) => {
83
+ let mediaServer;
84
+
85
+ // Attempt to collect the media server from the roap message.
86
+ try {
87
+ mediaServer = sdp
88
+ .split('\r\n')
89
+ .find((line) => line.startsWith('o='))
90
+ .split(' ')
91
+ .shift()
92
+ .replace('o=', '');
93
+ } catch {
94
+ mediaServer = undefined;
95
+ }
96
+
97
+ return mediaServer;
98
+ };
99
+
49
100
  MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
50
101
  let devices = [];
51
102
 
@@ -67,11 +118,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
67
118
  MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
68
119
  let result = '';
69
120
 
70
- if (userPreferences && userPreferences.sites) {
121
+ if (userPreferences?.sites?.length) {
71
122
  const defaultSite = userPreferences.sites.find((site) => site.default);
72
123
 
73
124
  if (defaultSite) {
74
125
  result = defaultSite.siteUrl;
126
+ } else {
127
+ result = userPreferences.sites[0].siteUrl;
75
128
  }
76
129
  }
77
130
 
@@ -178,4 +231,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
178
231
  }, delay);
179
232
  };
180
233
 
234
+ /**
235
+ * get device from locus data
236
+ * @param {Object} newLocus new locus data
237
+ * @param {String} deviceUrl current device url
238
+ * @returns {Object}
239
+ */
240
+ MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
241
+ if (newLocus?.self?.devices?.length > 0) {
242
+ return newLocus.self.devices.find((device) => device.url === deviceUrl);
243
+ }
244
+
245
+ return null;
246
+ };
247
+
248
+ /**
249
+ * get self device joined status from locus data
250
+ * @param {Object} meeting current meeting data
251
+ * @param {Object} newLocus new locus data
252
+ * @param {String} deviceUrl current device url
253
+ * @returns {Object}
254
+ */
255
+ MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
256
+ const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
257
+ if (thisDevice) {
258
+ if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
259
+ return (
260
+ thisDevice.state === _JOINED_ ||
261
+ (thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
262
+ );
263
+ }
264
+ }
265
+
266
+ return false;
267
+ };
268
+
269
+ /**
270
+ * check the new locus is breakout session's one or not
271
+ * @param {Object} newLocus new locus data
272
+ * @returns {boolean}
273
+ * @private
274
+ */
275
+ MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
276
+ return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
277
+ };
278
+
279
+ /**
280
+ * check the locus is valid breakout locus or not
281
+ * @param {Object} locus
282
+ * @returns {boolean}
283
+ * @private
284
+ */
285
+ MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
286
+ const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
287
+ const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
288
+ const selfJoined = locus.self?.state === _JOINED_;
289
+
290
+ return isLocusAsBreakout && !inActiveStatus && selfJoined;
291
+ };
181
292
  export default MeetingsUtil;
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
  import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
5
- import {IMediaStatus} from './member.types';
5
+ import {IExternalRoles, IMediaStatus, ParticipantWithRoles} from './types';
6
6
 
7
7
  import MemberUtil from './util';
8
8
 
@@ -11,6 +11,7 @@ import MemberUtil from './util';
11
11
  */
12
12
  export default class Member {
13
13
  associatedUser: any;
14
+ canReclaimHost: boolean;
14
15
  id: any;
15
16
  isAudioMuted: any;
16
17
  isContentSharing: any;
@@ -29,10 +30,14 @@ export default class Member {
29
30
  isSelf: any;
30
31
  isUser: any;
31
32
  isVideoMuted: any;
33
+ roles: IExternalRoles;
32
34
  mediaStatus: IMediaStatus;
33
35
  name: any;
34
36
  participant: any;
35
37
  status: any;
38
+ supportsBreakouts: boolean;
39
+ supportsInterpretation: boolean;
40
+ supportLiveAnnotation: boolean;
36
41
  type: any;
37
42
  namespace = MEETINGS;
38
43
 
@@ -57,6 +62,13 @@ export default class Member {
57
62
  }
58
63
  | any = {}
59
64
  ) {
65
+ /**
66
+ * @instance
67
+ * @type {Boolean}
68
+ * @public
69
+ * @memberof Member
70
+ */
71
+ this.canReclaimHost = false;
60
72
  /**
61
73
  * The server participant object
62
74
  * @instance
@@ -102,6 +114,20 @@ export default class Member {
102
114
  * @memberof Member
103
115
  */
104
116
  this.isHandRaised = null;
117
+ /**
118
+ * @instance
119
+ * @type {Boolean}
120
+ * @public
121
+ * @memberof Member
122
+ */
123
+ this.supportsBreakouts = null;
124
+ /**
125
+ * @instance
126
+ * @type {Boolean}
127
+ * @public
128
+ * @memberof Member
129
+ */
130
+ this.supportLiveAnnotation = null;
105
131
  /**
106
132
  * @instance
107
133
  * @type {Boolean}
@@ -222,6 +248,15 @@ export default class Member {
222
248
  * @memberof Member
223
249
  */
224
250
  this.isModeratorAssignmentProhibited = null;
251
+
252
+ /**
253
+ * @instance
254
+ * @type {IExternalRoles}
255
+ * @public
256
+ * @memberof Member
257
+ */
258
+ this.roles = null;
259
+
225
260
  /**
226
261
  * @instance
227
262
  * @type {IMediaStatus}
@@ -250,11 +285,15 @@ export default class Member {
250
285
  private processParticipant(participant: object) {
251
286
  this.participant = participant;
252
287
  if (participant) {
288
+ this.canReclaimHost = MemberUtil.canReclaimHost(participant);
253
289
  this.id = MemberUtil.extractId(participant);
254
290
  this.name = MemberUtil.extractName(participant);
255
291
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
256
292
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
257
293
  this.isHandRaised = MemberUtil.isHandRaised(participant);
294
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
295
+ this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
296
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
258
297
  this.isGuest = MemberUtil.isGuest(participant);
259
298
  this.isUser = MemberUtil.isUser(participant);
260
299
  this.isDevice = MemberUtil.isDevice(participant);
@@ -262,6 +301,7 @@ export default class Member {
262
301
  this.isModeratorAssignmentProhibited =
263
302
  MemberUtil.isModeratorAssignmentProhibited(participant);
264
303
  this.processStatus(participant);
304
+ this.processRoles(participant as ParticipantWithRoles);
265
305
  // must be done last
266
306
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
267
307
  }
@@ -433,6 +473,17 @@ export default class Member {
433
473
  }
434
474
  }
435
475
 
476
+ /**
477
+ * process the roles that have been applied to this member
478
+ * @param {Object} participant
479
+ * @returns {undefined}
480
+ * @private
481
+ * @memberof Member
482
+ */
483
+ private processRoles(participant: ParticipantWithRoles) {
484
+ this.roles = MemberUtil.extractControlRoles(participant);
485
+ }
486
+
436
487
  /**
437
488
  * set the type for the member, could be MEETING or CALL
438
489
  * @param {String} type
@@ -0,0 +1,38 @@
1
+ export interface IExternalRoles {
2
+ cohost: boolean;
3
+ moderator: boolean;
4
+ presenter: boolean;
5
+ }
6
+
7
+ export enum ServerRoles {
8
+ Cohost = 'COHOST',
9
+ Moderator = 'MODERATOR',
10
+ Presenter = 'PRESENTER',
11
+ }
12
+
13
+ export type ServerRoleShape = {
14
+ type: ServerRoles;
15
+ hasRole: boolean;
16
+ };
17
+
18
+ export type ParticipantWithRoles = {
19
+ controls: {
20
+ role: {
21
+ roles: Array<ServerRoleShape>;
22
+ };
23
+ };
24
+ };
25
+
26
+ // values are inherited from locus so don't update these
27
+ export enum MediaStatus {
28
+ RECVONLY = 'RECVONLY', // participant only receiving and not sending
29
+ SENDONLY = 'SENDONLY', // participant only sending and not receiving
30
+ SENDRECV = 'SENDRECV', // participant both sending and receiving
31
+ INACTIVE = 'INACTIVE', // participant is not connected to media source
32
+ UNKNOWN = 'UNKNOWN', // participant has not added media in the meeting
33
+ }
34
+
35
+ export interface IMediaStatus {
36
+ audio: MediaStatus;
37
+ video: MediaStatus;
38
+ }
@@ -1,3 +1,10 @@
1
+ import {
2
+ IExternalRoles,
3
+ ParticipantWithRoles,
4
+ ServerRoles,
5
+ ServerRoleShape,
6
+ IMediaStatus,
7
+ } from './types';
1
8
  import {
2
9
  _USER_,
3
10
  _RESOURCE_ROOM_,
@@ -14,12 +21,79 @@ import {
14
21
  _SEND_RECEIVE_,
15
22
  _RECEIVE_ONLY_,
16
23
  _CALL_,
24
+ VIDEO,
25
+ AUDIO,
17
26
  } from '../constants';
18
27
  import ParameterError from '../common/errors/parameter';
19
- import {IMediaStatus} from './member.types';
20
28
 
21
29
  const MemberUtil: any = {};
22
30
 
31
+ /**
32
+ * @param {Object} participant the locus participant
33
+ * @returns {Boolean}
34
+ */
35
+ MemberUtil.canReclaimHost = (participant) => {
36
+ if (!participant) {
37
+ throw new ParameterError(
38
+ 'canReclaimHostRole could not be processed, participant is undefined.'
39
+ );
40
+ }
41
+
42
+ return participant.canReclaimHostRole || false;
43
+ };
44
+
45
+ /**
46
+ * @param {Object} participant the locus participant
47
+ * @returns {[ServerRoleShape]}
48
+ */
49
+ MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
50
+ participant?.controls?.role?.roles;
51
+
52
+ /**
53
+ * @param {Object} participant the locus participant
54
+ * @param {ServerRoles} controlRole the search role
55
+ * @returns {Boolean}
56
+ */
57
+ MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
58
+ MemberUtil.getControlsRoles(participant)?.some(
59
+ (role) => role.type === controlRole && role.hasRole
60
+ );
61
+
62
+ /**
63
+ * @param {Object} participant the locus participant
64
+ * @returns {Boolean}
65
+ */
66
+ MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
67
+ MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
68
+
69
+ /**
70
+ * @param {Object} participant the locus participant
71
+ * @returns {Boolean}
72
+ */
73
+ MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
74
+ MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
75
+
76
+ /**
77
+ * @param {Object} participant the locus participant
78
+ * @returns {Boolean}
79
+ */
80
+ MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
81
+ MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
82
+
83
+ /**
84
+ * @param {Object} participant the locus participant
85
+ * @returns {IExternalRoles}
86
+ */
87
+ MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
88
+ const roles = {
89
+ cohost: MemberUtil.hasCohost(participant),
90
+ moderator: MemberUtil.hasModerator(participant),
91
+ presenter: MemberUtil.hasPresenter(participant),
92
+ };
93
+
94
+ return roles;
95
+ };
96
+
23
97
  /**
24
98
  * @param {Object} participant the locus participant
25
99
  * @returns {Boolean}
@@ -94,30 +168,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
94
168
  if (!participant) {
95
169
  throw new ParameterError('Audio could not be processed, participant is undefined.');
96
170
  }
97
- const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
98
171
 
99
- if (participant.controls && participant.controls.audio) {
100
- if (participant.controls.audio.muted) {
101
- return true;
102
- }
103
- if (mutedStatus) {
104
- return true;
105
- }
106
- }
107
-
108
- return false;
172
+ return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
109
173
  };
110
174
 
111
175
  /**
112
176
  * @param {Object} participant the locus participant
113
177
  * @returns {Boolean}
114
178
  */
115
- MemberUtil.isVideoMuted = (participant: any) => {
179
+ MemberUtil.isVideoMuted = (participant: any): boolean => {
116
180
  if (!participant) {
117
181
  throw new ParameterError('Video could not be processed, participant is undefined.');
118
182
  }
119
183
 
120
- return MemberUtil.isMuted(participant.status, VIDEO_STATUS);
184
+ return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
121
185
  };
122
186
 
123
187
  /**
@@ -133,22 +197,69 @@ MemberUtil.isHandRaised = (participant: any) => {
133
197
  };
134
198
 
135
199
  /**
136
- * utility method for audio/video muted status
137
- * @param {String} status
138
- * @param {String} accessor
200
+ * @param {Object} participant the locus participant
139
201
  * @returns {Boolean}
140
202
  */
141
- MemberUtil.isMuted = (status: string, accessor: string) => {
142
- if (status) {
143
- if (status[accessor] === _RECEIVE_ONLY_) {
144
- return true;
145
- }
146
- if (status[accessor] === _SEND_RECEIVE_) {
147
- return false;
148
- }
203
+ MemberUtil.isBreakoutsSupported = (participant) => {
204
+ if (!participant) {
205
+ throw new ParameterError('Breakout support could not be processed, participant is undefined.');
149
206
  }
150
207
 
151
- return null;
208
+ return !participant.doesNotSupportBreakouts;
209
+ };
210
+
211
+ /**
212
+ * @param {Object} participant the locus participant
213
+ * @returns {Boolean}
214
+ */
215
+ MemberUtil.isInterpretationSupported = (participant) => {
216
+ if (!participant) {
217
+ throw new ParameterError(
218
+ 'Interpretation support could not be processed, participant is undefined.'
219
+ );
220
+ }
221
+
222
+ return !participant.doesNotSupportSiInterpreter;
223
+ };
224
+
225
+ /**
226
+ * @param {Object} participant the locus participant
227
+ * @returns {Boolean}
228
+ */
229
+ MemberUtil.isLiveAnnotationSupported = (participant) => {
230
+ if (!participant) {
231
+ throw new ParameterError(
232
+ 'LiveAnnotation support could not be processed, participant is undefined.'
233
+ );
234
+ }
235
+
236
+ return !participant.annotatorAssignmentNotAllowed;
237
+ };
238
+
239
+ /**
240
+ * utility method for audio/video muted status
241
+ * @param {any} participant
242
+ * @param {String} statusAccessor
243
+ * @param {String} controlsAccessor
244
+ * @returns {Boolean | undefined}
245
+ */
246
+ MemberUtil.isMuted = (participant: any, statusAccessor: string, controlsAccessor: string) => {
247
+ // check remote mute
248
+ const remoteMute = participant?.controls?.[controlsAccessor]?.muted;
249
+ if (remoteMute === true) {
250
+ return true;
251
+ }
252
+
253
+ // check local mute
254
+ const localStatus = participant?.status?.[statusAccessor];
255
+ if (localStatus === _RECEIVE_ONLY_) {
256
+ return true;
257
+ }
258
+ if (localStatus === _SEND_RECEIVE_) {
259
+ return false;
260
+ }
261
+
262
+ return remoteMute;
152
263
  };
153
264
 
154
265
  /**
@@ -266,8 +377,8 @@ MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
266
377
  }
267
378
 
268
379
  return {
269
- audio: participant.status.audioStatus,
270
- video: participant.status.videoStatus,
380
+ audio: participant.status?.audioStatus,
381
+ video: participant.status?.videoStatus,
271
382
  };
272
383
  };
273
384
 
@@ -37,4 +37,12 @@ export default class MembersCollection {
37
37
  getAll() {
38
38
  return this.members;
39
39
  }
40
+
41
+ /**
42
+ * @returns {void}
43
+ * reset members
44
+ */
45
+ reset() {
46
+ this.members = {};
47
+ }
40
48
  }