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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.d.ts +42 -0
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.d.ts +31 -0
  6. package/dist/annotation/constants.js +41 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.d.ts +117 -0
  9. package/dist/annotation/index.js +357 -0
  10. package/dist/annotation/index.js.map +1 -0
  11. package/dist/breakouts/breakout.d.ts +8 -0
  12. package/dist/breakouts/breakout.js +215 -0
  13. package/dist/breakouts/breakout.js.map +1 -0
  14. package/dist/breakouts/collection.d.ts +5 -0
  15. package/dist/breakouts/collection.js +22 -0
  16. package/dist/breakouts/collection.js.map +1 -0
  17. package/dist/breakouts/edit-lock-error.d.ts +15 -0
  18. package/dist/breakouts/edit-lock-error.js +51 -0
  19. package/dist/breakouts/edit-lock-error.js.map +1 -0
  20. package/dist/breakouts/events.d.ts +8 -0
  21. package/dist/breakouts/events.js +44 -0
  22. package/dist/breakouts/events.js.map +1 -0
  23. package/dist/breakouts/index.d.ts +5 -0
  24. package/dist/breakouts/index.js +1047 -0
  25. package/dist/breakouts/index.js.map +1 -0
  26. package/dist/breakouts/request.d.ts +22 -0
  27. package/dist/breakouts/request.js +77 -0
  28. package/dist/breakouts/request.js.map +1 -0
  29. package/dist/breakouts/utils.d.ts +15 -0
  30. package/dist/breakouts/utils.js +64 -0
  31. package/dist/breakouts/utils.js.map +1 -0
  32. package/dist/common/browser-detection.js +2 -3
  33. package/dist/common/browser-detection.js.map +1 -1
  34. package/dist/common/collection.js +3 -4
  35. package/dist/common/collection.js.map +1 -1
  36. package/dist/common/config.js +1 -2
  37. package/dist/common/config.js.map +1 -1
  38. package/dist/common/errors/captcha-error.js +1 -2
  39. package/dist/common/errors/captcha-error.js.map +1 -1
  40. package/dist/common/errors/intent-to-join.js +1 -2
  41. package/dist/common/errors/intent-to-join.js.map +1 -1
  42. package/dist/common/errors/join-meeting.js +1 -2
  43. package/dist/common/errors/join-meeting.js.map +1 -1
  44. package/dist/common/errors/media.js +1 -2
  45. package/dist/common/errors/media.js.map +1 -1
  46. package/dist/common/errors/no-meeting-info.d.ts +14 -0
  47. package/dist/common/errors/no-meeting-info.js +50 -0
  48. package/dist/common/errors/no-meeting-info.js.map +1 -0
  49. package/dist/common/errors/parameter.js +3 -4
  50. package/dist/common/errors/parameter.js.map +1 -1
  51. package/dist/common/errors/password-error.js +1 -2
  52. package/dist/common/errors/password-error.js.map +1 -1
  53. package/dist/common/errors/permission.js +1 -2
  54. package/dist/common/errors/permission.js.map +1 -1
  55. package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
  56. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  57. package/dist/common/errors/reconnection-in-progress.js +1 -2
  58. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  59. package/dist/common/errors/reconnection.js +1 -2
  60. package/dist/common/errors/reconnection.js.map +1 -1
  61. package/dist/common/errors/stats.js +1 -2
  62. package/dist/common/errors/stats.js.map +1 -1
  63. package/dist/common/errors/webex-errors.d.ts +20 -8
  64. package/dist/common/errors/webex-errors.js +48 -28
  65. package/dist/common/errors/webex-errors.js.map +1 -1
  66. package/dist/common/errors/webex-meetings-error.js +1 -2
  67. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  68. package/dist/common/events/events-scope.js +1 -2
  69. package/dist/common/events/events-scope.js.map +1 -1
  70. package/dist/common/events/events.js +1 -2
  71. package/dist/common/events/events.js.map +1 -1
  72. package/dist/common/events/trigger-proxy.js +1 -2
  73. package/dist/common/events/trigger-proxy.js.map +1 -1
  74. package/dist/common/events/util.js +1 -2
  75. package/dist/common/events/util.js.map +1 -1
  76. package/dist/common/logs/logger-config.js +1 -2
  77. package/dist/common/logs/logger-config.js.map +1 -1
  78. package/dist/common/logs/logger-proxy.js +2 -3
  79. package/dist/common/logs/logger-proxy.js.map +1 -1
  80. package/dist/common/logs/request.d.ts +3 -1
  81. package/dist/common/logs/request.js +8 -5
  82. package/dist/common/logs/request.js.map +1 -1
  83. package/dist/common/queue.d.ts +9 -7
  84. package/dist/common/queue.js +22 -9
  85. package/dist/common/queue.js.map +1 -1
  86. package/dist/config.d.ts +6 -7
  87. package/dist/config.js +8 -10
  88. package/dist/config.js.map +1 -1
  89. package/dist/constants.d.ts +234 -100
  90. package/dist/constants.js +433 -444
  91. package/dist/constants.js.map +1 -1
  92. package/dist/controls-options-manager/constants.js +3 -6
  93. package/dist/controls-options-manager/constants.js.map +1 -1
  94. package/dist/controls-options-manager/enums.d.ts +11 -1
  95. package/dist/controls-options-manager/enums.js +15 -6
  96. package/dist/controls-options-manager/enums.js.map +1 -1
  97. package/dist/controls-options-manager/index.d.ts +17 -1
  98. package/dist/controls-options-manager/index.js +127 -38
  99. package/dist/controls-options-manager/index.js.map +1 -1
  100. package/dist/controls-options-manager/types.d.ts +43 -0
  101. package/dist/controls-options-manager/types.js +7 -0
  102. package/dist/controls-options-manager/types.js.map +1 -0
  103. package/dist/controls-options-manager/util.d.ts +1 -7
  104. package/dist/controls-options-manager/util.js +309 -19
  105. package/dist/controls-options-manager/util.js.map +1 -1
  106. package/dist/index.d.ts +6 -3
  107. package/dist/index.js +121 -5
  108. package/dist/index.js.map +1 -1
  109. package/dist/interceptors/index.d.ts +2 -0
  110. package/dist/interceptors/index.js +15 -0
  111. package/dist/interceptors/index.js.map +1 -0
  112. package/dist/interceptors/locusRetry.d.ts +27 -0
  113. package/dist/interceptors/locusRetry.js +94 -0
  114. package/dist/interceptors/locusRetry.js.map +1 -0
  115. package/dist/interpretation/collection.d.ts +5 -0
  116. package/dist/interpretation/collection.js +22 -0
  117. package/dist/interpretation/collection.js.map +1 -0
  118. package/dist/interpretation/index.d.ts +5 -0
  119. package/dist/interpretation/index.js +365 -0
  120. package/dist/interpretation/index.js.map +1 -0
  121. package/dist/interpretation/siLanguage.d.ts +5 -0
  122. package/dist/interpretation/siLanguage.js +24 -0
  123. package/dist/interpretation/siLanguage.js.map +1 -0
  124. package/dist/locus-info/controlsUtils.js +100 -11
  125. package/dist/locus-info/controlsUtils.js.map +1 -1
  126. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  127. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  128. package/dist/locus-info/fullState.js +1 -2
  129. package/dist/locus-info/fullState.js.map +1 -1
  130. package/dist/locus-info/hostUtils.js +1 -2
  131. package/dist/locus-info/hostUtils.js.map +1 -1
  132. package/dist/locus-info/index.d.ts +57 -4
  133. package/dist/locus-info/index.js +425 -84
  134. package/dist/locus-info/index.js.map +1 -1
  135. package/dist/locus-info/infoUtils.js +13 -5
  136. package/dist/locus-info/infoUtils.js.map +1 -1
  137. package/dist/locus-info/mediaSharesUtils.js +58 -3
  138. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  139. package/dist/locus-info/parser.d.ts +66 -6
  140. package/dist/locus-info/parser.js +253 -80
  141. package/dist/locus-info/parser.js.map +1 -1
  142. package/dist/locus-info/selfUtils.js +97 -13
  143. package/dist/locus-info/selfUtils.js.map +1 -1
  144. package/dist/media/index.d.ts +2 -0
  145. package/dist/media/index.js +107 -319
  146. package/dist/media/index.js.map +1 -1
  147. package/dist/media/properties.d.ts +38 -53
  148. package/dist/media/properties.js +96 -153
  149. package/dist/media/properties.js.map +1 -1
  150. package/dist/media/util.js +1 -22
  151. package/dist/media/util.js.map +1 -1
  152. package/dist/mediaQualityMetrics/config.d.ts +234 -230
  153. package/dist/mediaQualityMetrics/config.js +302 -498
  154. package/dist/mediaQualityMetrics/config.js.map +1 -1
  155. package/dist/meeting/in-meeting-actions.d.ts +88 -0
  156. package/dist/meeting/in-meeting-actions.js +94 -3
  157. package/dist/meeting/in-meeting-actions.js.map +1 -1
  158. package/dist/meeting/index.d.ts +705 -520
  159. package/dist/meeting/index.js +5047 -3089
  160. package/dist/meeting/index.js.map +1 -1
  161. package/dist/meeting/locusMediaRequest.d.ts +74 -0
  162. package/dist/meeting/locusMediaRequest.js +291 -0
  163. package/dist/meeting/locusMediaRequest.js.map +1 -0
  164. package/dist/meeting/muteState.d.ts +93 -25
  165. package/dist/meeting/muteState.js +224 -133
  166. package/dist/meeting/muteState.js.map +1 -1
  167. package/dist/meeting/request.d.ts +82 -47
  168. package/dist/meeting/request.js +304 -199
  169. package/dist/meeting/request.js.map +1 -1
  170. package/dist/meeting/request.type.d.ts +11 -0
  171. package/dist/meeting/request.type.js +7 -0
  172. package/dist/meeting/request.type.js.map +1 -0
  173. package/dist/meeting/state.js +1 -2
  174. package/dist/meeting/state.js.map +1 -1
  175. package/dist/meeting/util.d.ts +118 -1
  176. package/dist/meeting/util.js +676 -435
  177. package/dist/meeting/util.js.map +1 -1
  178. package/dist/meeting/voicea-meeting.d.ts +20 -0
  179. package/dist/meeting/voicea-meeting.js +201 -0
  180. package/dist/meeting/voicea-meeting.js.map +1 -0
  181. package/dist/meeting-info/collection.js +3 -4
  182. package/dist/meeting-info/collection.js.map +1 -1
  183. package/dist/meeting-info/index.d.ts +13 -1
  184. package/dist/meeting-info/index.js +74 -7
  185. package/dist/meeting-info/index.js.map +1 -1
  186. package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/meeting-info/meeting-info-v2.js +200 -63
  188. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  189. package/dist/meeting-info/request.js +1 -2
  190. package/dist/meeting-info/request.js.map +1 -1
  191. package/dist/meeting-info/util.js +2 -3
  192. package/dist/meeting-info/util.js.map +1 -1
  193. package/dist/meeting-info/utilv2.js +39 -41
  194. package/dist/meeting-info/utilv2.js.map +1 -1
  195. package/dist/meetings/collection.d.ts +17 -0
  196. package/dist/meetings/collection.js +42 -4
  197. package/dist/meetings/collection.js.map +1 -1
  198. package/dist/meetings/index.d.ts +114 -20
  199. package/dist/meetings/index.js +540 -126
  200. package/dist/meetings/index.js.map +1 -1
  201. package/dist/meetings/meetings.types.d.ts +4 -0
  202. package/dist/meetings/meetings.types.js +7 -0
  203. package/dist/meetings/meetings.types.js.map +1 -0
  204. package/dist/meetings/request.js +4 -3
  205. package/dist/meetings/request.js.map +1 -1
  206. package/dist/meetings/util.js +107 -6
  207. package/dist/meetings/util.js.map +1 -1
  208. package/dist/member/index.d.ts +13 -1
  209. package/dist/member/index.js +45 -2
  210. package/dist/member/index.js.map +1 -1
  211. package/dist/member/member.types.js +3 -4
  212. package/dist/member/member.types.js.map +1 -1
  213. package/dist/member/types.d.ts +32 -0
  214. package/dist/member/types.js +23 -0
  215. package/dist/member/types.js.map +1 -0
  216. package/dist/member/util.js +120 -29
  217. package/dist/member/util.js.map +1 -1
  218. package/dist/members/collection.d.ts +5 -0
  219. package/dist/members/collection.js +11 -2
  220. package/dist/members/collection.js.map +1 -1
  221. package/dist/members/index.d.ts +56 -11
  222. package/dist/members/index.js +174 -47
  223. package/dist/members/index.js.map +1 -1
  224. package/dist/members/request.d.ts +67 -11
  225. package/dist/members/request.js +102 -54
  226. package/dist/members/request.js.map +1 -1
  227. package/dist/members/types.js +3 -4
  228. package/dist/members/types.js.map +1 -1
  229. package/dist/members/util.d.ts +214 -1
  230. package/dist/members/util.js +327 -284
  231. package/dist/members/util.js.map +1 -1
  232. package/dist/metrics/constants.d.ts +15 -6
  233. package/dist/metrics/constants.js +17 -9
  234. package/dist/metrics/constants.js.map +1 -1
  235. package/dist/metrics/index.d.ts +4 -111
  236. package/dist/metrics/index.js +4 -452
  237. package/dist/metrics/index.js.map +1 -1
  238. package/dist/multistream/mediaRequestManager.d.ts +118 -0
  239. package/dist/multistream/mediaRequestManager.js +344 -0
  240. package/dist/multistream/mediaRequestManager.js.map +1 -0
  241. package/dist/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/multistream/receiveSlot.js +200 -0
  243. package/dist/multistream/receiveSlot.js.map +1 -0
  244. package/dist/multistream/receiveSlotManager.d.ts +56 -0
  245. package/dist/multistream/receiveSlotManager.js +174 -0
  246. package/dist/multistream/receiveSlotManager.js.map +1 -0
  247. package/dist/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/multistream/remoteMedia.js +268 -0
  249. package/dist/multistream/remoteMedia.js.map +1 -0
  250. package/dist/multistream/remoteMediaGroup.d.ts +47 -0
  251. package/dist/multistream/remoteMediaGroup.js +267 -0
  252. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  253. package/dist/multistream/remoteMediaManager.d.ts +285 -0
  254. package/dist/multistream/remoteMediaManager.js +1211 -0
  255. package/dist/multistream/remoteMediaManager.js.map +1 -0
  256. package/dist/multistream/sendSlotManager.d.ts +61 -0
  257. package/dist/multistream/sendSlotManager.js +236 -0
  258. package/dist/multistream/sendSlotManager.js.map +1 -0
  259. package/dist/networkQualityMonitor/index.js +5 -4
  260. package/dist/networkQualityMonitor/index.js.map +1 -1
  261. package/dist/personal-meeting-room/index.js +2 -3
  262. package/dist/personal-meeting-room/index.js.map +1 -1
  263. package/dist/personal-meeting-room/request.js +2 -3
  264. package/dist/personal-meeting-room/request.js.map +1 -1
  265. package/dist/personal-meeting-room/util.js +1 -2
  266. package/dist/personal-meeting-room/util.js.map +1 -1
  267. package/dist/reachability/clusterReachability.d.ts +109 -0
  268. package/dist/reachability/clusterReachability.js +357 -0
  269. package/dist/reachability/clusterReachability.js.map +1 -0
  270. package/dist/reachability/index.d.ts +61 -95
  271. package/dist/reachability/index.js +304 -392
  272. package/dist/reachability/index.js.map +1 -1
  273. package/dist/reachability/request.d.ts +7 -3
  274. package/dist/reachability/request.js +18 -10
  275. package/dist/reachability/request.js.map +1 -1
  276. package/dist/reachability/util.d.ts +8 -0
  277. package/dist/reachability/util.js +29 -0
  278. package/dist/reachability/util.js.map +1 -0
  279. package/dist/reactions/constants.d.ts +3 -0
  280. package/dist/reactions/constants.js +12 -0
  281. package/dist/reactions/constants.js.map +1 -0
  282. package/dist/reactions/reactions.d.ts +2 -2
  283. package/dist/reactions/reactions.js +4 -6
  284. package/dist/reactions/reactions.js.map +1 -1
  285. package/dist/reactions/reactions.type.d.ts +23 -3
  286. package/dist/reactions/reactions.type.js +21 -23
  287. package/dist/reactions/reactions.type.js.map +1 -1
  288. package/dist/reconnection-manager/index.d.ts +32 -8
  289. package/dist/reconnection-manager/index.js +285 -232
  290. package/dist/reconnection-manager/index.js.map +1 -1
  291. package/dist/recording-controller/enums.js +4 -5
  292. package/dist/recording-controller/enums.js.map +1 -1
  293. package/dist/recording-controller/index.d.ts +15 -1
  294. package/dist/recording-controller/index.js +57 -46
  295. package/dist/recording-controller/index.js.map +1 -1
  296. package/dist/recording-controller/util.d.ts +5 -4
  297. package/dist/recording-controller/util.js +10 -10
  298. package/dist/recording-controller/util.js.map +1 -1
  299. package/dist/roap/index.d.ts +9 -47
  300. package/dist/roap/index.js +100 -238
  301. package/dist/roap/index.js.map +1 -1
  302. package/dist/roap/request.d.ts +18 -12
  303. package/dist/roap/request.js +126 -180
  304. package/dist/roap/request.js.map +1 -1
  305. package/dist/roap/turnDiscovery.d.ts +27 -16
  306. package/dist/roap/turnDiscovery.js +115 -105
  307. package/dist/roap/turnDiscovery.js.map +1 -1
  308. package/dist/rtcMetrics/constants.d.ts +4 -0
  309. package/dist/rtcMetrics/constants.js +11 -0
  310. package/dist/rtcMetrics/constants.js.map +1 -0
  311. package/dist/rtcMetrics/index.d.ts +54 -0
  312. package/dist/rtcMetrics/index.js +140 -0
  313. package/dist/rtcMetrics/index.js.map +1 -0
  314. package/dist/statsAnalyzer/global.d.ts +1 -83
  315. package/dist/statsAnalyzer/global.js +2 -85
  316. package/dist/statsAnalyzer/global.js.map +1 -1
  317. package/dist/statsAnalyzer/index.d.ts +50 -30
  318. package/dist/statsAnalyzer/index.js +436 -511
  319. package/dist/statsAnalyzer/index.js.map +1 -1
  320. package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
  321. package/dist/statsAnalyzer/mqaUtil.js +130 -90
  322. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  323. package/dist/transcription/index.js +1 -2
  324. package/dist/transcription/index.js.map +1 -1
  325. package/dist/webinar/collection.d.ts +16 -0
  326. package/dist/webinar/collection.js +43 -0
  327. package/dist/webinar/collection.js.map +1 -0
  328. package/dist/webinar/index.d.ts +5 -0
  329. package/dist/webinar/index.js +68 -0
  330. package/dist/webinar/index.js.map +1 -0
  331. package/package.json +39 -26
  332. package/src/annotation/annotation.types.ts +50 -0
  333. package/src/annotation/constants.ts +36 -0
  334. package/src/annotation/index.ts +328 -0
  335. package/src/breakouts/README.md +220 -0
  336. package/src/breakouts/breakout.ts +188 -0
  337. package/src/breakouts/collection.ts +19 -0
  338. package/src/breakouts/edit-lock-error.ts +25 -0
  339. package/src/breakouts/events.ts +56 -0
  340. package/src/breakouts/index.ts +925 -0
  341. package/src/breakouts/request.ts +55 -0
  342. package/src/breakouts/utils.ts +57 -0
  343. package/src/common/errors/no-meeting-info.ts +24 -0
  344. package/src/common/errors/webex-errors.ts +36 -12
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/common/logs/request.ts +5 -1
  347. package/src/common/queue.ts +22 -8
  348. package/src/config.ts +6 -7
  349. package/src/constants.ts +265 -100
  350. package/src/controls-options-manager/enums.ts +12 -0
  351. package/src/controls-options-manager/index.ts +116 -21
  352. package/src/controls-options-manager/types.ts +59 -0
  353. package/src/controls-options-manager/util.ts +294 -14
  354. package/src/index.ts +44 -0
  355. package/src/interceptors/index.ts +3 -0
  356. package/src/interceptors/locusRetry.ts +67 -0
  357. package/src/interpretation/README.md +60 -0
  358. package/src/interpretation/collection.ts +19 -0
  359. package/src/interpretation/index.ts +332 -0
  360. package/src/interpretation/siLanguage.ts +18 -0
  361. package/src/locus-info/controlsUtils.ts +110 -0
  362. package/src/locus-info/index.ts +450 -61
  363. package/src/locus-info/infoUtils.ts +14 -2
  364. package/src/locus-info/mediaSharesUtils.ts +64 -0
  365. package/src/locus-info/parser.ts +258 -47
  366. package/src/locus-info/selfUtils.ts +85 -2
  367. package/src/media/index.ts +153 -370
  368. package/src/media/properties.ts +106 -136
  369. package/src/media/util.ts +0 -21
  370. package/src/mediaQualityMetrics/config.ts +244 -377
  371. package/src/meeting/in-meeting-actions.ts +176 -0
  372. package/src/meeting/index.ts +4306 -2581
  373. package/src/meeting/locusMediaRequest.ts +313 -0
  374. package/src/meeting/muteState.ts +224 -138
  375. package/src/meeting/request.ts +214 -127
  376. package/src/meeting/request.type.ts +13 -0
  377. package/src/meeting/util.ts +687 -423
  378. package/src/meeting/voicea-meeting.ts +161 -0
  379. package/src/meeting-info/index.ts +81 -8
  380. package/src/meeting-info/meeting-info-v2.ts +163 -13
  381. package/src/meeting-info/util.ts +1 -1
  382. package/src/meeting-info/utilv2.ts +28 -28
  383. package/src/meetings/collection.ts +33 -0
  384. package/src/meetings/index.ts +529 -127
  385. package/src/meetings/meetings.types.ts +12 -0
  386. package/src/meetings/request.ts +2 -0
  387. package/src/meetings/util.ts +116 -5
  388. package/src/member/index.ts +43 -1
  389. package/src/member/types.ts +38 -0
  390. package/src/member/util.ts +125 -28
  391. package/src/members/collection.ts +8 -0
  392. package/src/members/index.ts +187 -52
  393. package/src/members/request.ts +87 -27
  394. package/src/members/util.ts +332 -291
  395. package/src/metrics/constants.ts +15 -6
  396. package/src/metrics/index.ts +1 -471
  397. package/src/multistream/mediaRequestManager.ts +440 -0
  398. package/src/multistream/receiveSlot.ts +184 -0
  399. package/src/multistream/receiveSlotManager.ts +166 -0
  400. package/src/multistream/remoteMedia.ts +254 -0
  401. package/src/multistream/remoteMediaGroup.ts +284 -0
  402. package/src/multistream/remoteMediaManager.ts +1145 -0
  403. package/src/multistream/sendSlotManager.ts +170 -0
  404. package/src/networkQualityMonitor/index.ts +6 -6
  405. package/src/reachability/clusterReachability.ts +320 -0
  406. package/src/reachability/index.ts +246 -347
  407. package/src/reachability/request.ts +17 -8
  408. package/src/reachability/util.ts +24 -0
  409. package/src/reactions/constants.ts +4 -0
  410. package/src/reactions/reactions.ts +4 -4
  411. package/src/reactions/reactions.type.ts +30 -4
  412. package/src/reconnection-manager/index.ts +168 -156
  413. package/src/recording-controller/index.ts +20 -3
  414. package/src/recording-controller/util.ts +26 -9
  415. package/src/roap/index.ts +96 -241
  416. package/src/roap/request.ts +74 -148
  417. package/src/roap/turnDiscovery.ts +62 -56
  418. package/src/rtcMetrics/constants.ts +3 -0
  419. package/src/rtcMetrics/index.ts +124 -0
  420. package/src/statsAnalyzer/global.ts +1 -84
  421. package/src/statsAnalyzer/index.ts +479 -645
  422. package/src/statsAnalyzer/mqaUtil.ts +128 -126
  423. package/src/webinar/collection.ts +31 -0
  424. package/src/webinar/index.ts +62 -0
  425. package/test/integration/spec/converged-space-meetings.js +233 -0
  426. package/test/integration/spec/journey.js +320 -264
  427. package/test/integration/spec/space-meeting.js +77 -4
  428. package/test/unit/spec/annotation/index.ts +418 -0
  429. package/test/unit/spec/breakouts/breakout.ts +237 -0
  430. package/test/unit/spec/breakouts/collection.ts +15 -0
  431. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  432. package/test/unit/spec/breakouts/events.ts +89 -0
  433. package/test/unit/spec/breakouts/index.ts +1790 -0
  434. package/test/unit/spec/breakouts/request.ts +104 -0
  435. package/test/unit/spec/breakouts/utils.js +72 -0
  436. package/test/unit/spec/common/queue.js +31 -2
  437. package/test/unit/spec/controls-options-manager/index.js +163 -0
  438. package/test/unit/spec/controls-options-manager/util.js +576 -60
  439. package/test/unit/spec/fixture/locus.js +1 -0
  440. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  441. package/test/unit/spec/interpretation/collection.ts +15 -0
  442. package/test/unit/spec/interpretation/index.ts +589 -0
  443. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  444. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  445. package/test/unit/spec/locus-info/index.js +1438 -16
  446. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  447. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  448. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  449. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  450. package/test/unit/spec/locus-info/parser.js +116 -35
  451. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  452. package/test/unit/spec/media/index.ts +290 -0
  453. package/test/unit/spec/media/properties.ts +75 -84
  454. package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
  455. package/test/unit/spec/meeting/index.js +8886 -2815
  456. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  457. package/test/unit/spec/meeting/muteState.js +409 -213
  458. package/test/unit/spec/meeting/request.js +523 -43
  459. package/test/unit/spec/meeting/utils.js +834 -24
  460. package/test/unit/spec/meeting-info/index.js +300 -0
  461. package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
  462. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  463. package/test/unit/spec/meetings/collection.js +26 -0
  464. package/test/unit/spec/meetings/index.js +1446 -217
  465. package/test/unit/spec/meetings/utils.js +202 -2
  466. package/test/unit/spec/member/index.js +32 -9
  467. package/test/unit/spec/member/util.js +499 -61
  468. package/test/unit/spec/members/index.js +394 -5
  469. package/test/unit/spec/members/request.js +206 -27
  470. package/test/unit/spec/members/utils.js +173 -38
  471. package/test/unit/spec/metrics/index.js +1 -50
  472. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  473. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  474. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  475. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  476. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  477. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  478. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  479. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  480. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  481. package/test/unit/spec/reachability/index.ts +532 -24
  482. package/test/unit/spec/reachability/request.js +68 -0
  483. package/test/unit/spec/reachability/util.ts +40 -0
  484. package/test/unit/spec/reconnection-manager/index.js +163 -24
  485. package/test/unit/spec/recording-controller/index.js +293 -218
  486. package/test/unit/spec/recording-controller/util.js +223 -96
  487. package/test/unit/spec/roap/index.ts +187 -77
  488. package/test/unit/spec/roap/request.ts +255 -0
  489. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  490. package/test/unit/spec/rtcMetrics/index.ts +93 -0
  491. package/test/unit/spec/stats-analyzer/index.js +644 -165
  492. package/test/unit/spec/webinar/collection.ts +13 -0
  493. package/test/unit/spec/webinar/index.ts +60 -0
  494. package/test/utils/constants.js +9 -0
  495. package/test/utils/integrationTestUtils.js +46 -0
  496. package/test/utils/testUtils.js +0 -45
  497. package/test/utils/webex-config.js +4 -0
  498. package/test/utils/webex-test-users.js +7 -3
  499. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  500. package/dist/meeting/effectsState.d.ts +0 -42
  501. package/dist/meeting/effectsState.js +0 -260
  502. package/dist/meeting/effectsState.js.map +0 -1
  503. package/dist/metrics/config.d.ts +0 -169
  504. package/dist/metrics/config.js +0 -289
  505. package/dist/metrics/config.js.map +0 -1
  506. package/dist/peer-connection-manager/index.d.ts +0 -6
  507. package/dist/peer-connection-manager/index.js +0 -671
  508. package/dist/peer-connection-manager/index.js.map +0 -1
  509. package/dist/peer-connection-manager/util.d.ts +0 -6
  510. package/dist/peer-connection-manager/util.js +0 -110
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.d.ts +0 -10
  513. package/dist/roap/collection.js +0 -63
  514. package/dist/roap/collection.js.map +0 -1
  515. package/dist/roap/handler.d.ts +0 -47
  516. package/dist/roap/handler.js +0 -279
  517. package/dist/roap/handler.js.map +0 -1
  518. package/dist/roap/state.d.ts +0 -9
  519. package/dist/roap/state.js +0 -127
  520. package/dist/roap/state.js.map +0 -1
  521. package/dist/roap/util.d.ts +0 -2
  522. package/dist/roap/util.js +0 -76
  523. package/dist/roap/util.js.map +0 -1
  524. package/src/index.js +0 -15
  525. package/src/meeting/effectsState.ts +0 -209
  526. package/src/metrics/config.ts +0 -485
  527. package/src/peer-connection-manager/index.ts +0 -847
  528. package/src/peer-connection-manager/util.ts +0 -119
  529. package/src/roap/collection.ts +0 -62
  530. package/src/roap/handler.ts +0 -294
  531. package/src/roap/state.ts +0 -156
  532. package/src/roap/util.ts +0 -100
  533. package/test/unit/spec/meeting/effectsState.js +0 -281
  534. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  535. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  536. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  537. package/test/unit/spec/roap/util.js +0 -30
  538. /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
@@ -0,0 +1,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
 
@@ -30,10 +30,14 @@ export default class Member {
30
30
  isSelf: any;
31
31
  isUser: any;
32
32
  isVideoMuted: any;
33
+ roles: IExternalRoles;
33
34
  mediaStatus: IMediaStatus;
34
35
  name: any;
35
36
  participant: any;
36
37
  status: any;
38
+ supportsBreakouts: boolean;
39
+ supportsInterpretation: boolean;
40
+ supportLiveAnnotation: boolean;
37
41
  type: any;
38
42
  namespace = MEETINGS;
39
43
 
@@ -110,6 +114,20 @@ export default class Member {
110
114
  * @memberof Member
111
115
  */
112
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;
113
131
  /**
114
132
  * @instance
115
133
  * @type {Boolean}
@@ -230,6 +248,15 @@ export default class Member {
230
248
  * @memberof Member
231
249
  */
232
250
  this.isModeratorAssignmentProhibited = null;
251
+
252
+ /**
253
+ * @instance
254
+ * @type {IExternalRoles}
255
+ * @public
256
+ * @memberof Member
257
+ */
258
+ this.roles = null;
259
+
233
260
  /**
234
261
  * @instance
235
262
  * @type {IMediaStatus}
@@ -264,6 +291,9 @@ export default class Member {
264
291
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
265
292
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
266
293
  this.isHandRaised = MemberUtil.isHandRaised(participant);
294
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
295
+ this.supportsInterpretation = MemberUtil.isInterpretationSupported(participant);
296
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
267
297
  this.isGuest = MemberUtil.isGuest(participant);
268
298
  this.isUser = MemberUtil.isUser(participant);
269
299
  this.isDevice = MemberUtil.isDevice(participant);
@@ -271,6 +301,7 @@ export default class Member {
271
301
  this.isModeratorAssignmentProhibited =
272
302
  MemberUtil.isModeratorAssignmentProhibited(participant);
273
303
  this.processStatus(participant);
304
+ this.processRoles(participant as ParticipantWithRoles);
274
305
  // must be done last
275
306
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
276
307
  }
@@ -442,6 +473,17 @@ export default class Member {
442
473
  }
443
474
  }
444
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
+
445
487
  /**
446
488
  * set the type for the member, could be MEETING or CALL
447
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,9 +21,10 @@ 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
 
@@ -34,6 +42,58 @@ MemberUtil.canReclaimHost = (participant) => {
34
42
  return participant.canReclaimHostRole || false;
35
43
  };
36
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
+
37
97
  /**
38
98
  * @param {Object} participant the locus participant
39
99
  * @returns {Boolean}
@@ -108,30 +168,20 @@ MemberUtil.isAudioMuted = (participant: any) => {
108
168
  if (!participant) {
109
169
  throw new ParameterError('Audio could not be processed, participant is undefined.');
110
170
  }
111
- const mutedStatus = MemberUtil.isMuted(participant.status, AUDIO_STATUS);
112
-
113
- if (participant.controls && participant.controls.audio) {
114
- if (participant.controls.audio.muted) {
115
- return true;
116
- }
117
- if (mutedStatus) {
118
- return true;
119
- }
120
- }
121
171
 
122
- return false;
172
+ return MemberUtil.isMuted(participant, AUDIO_STATUS, AUDIO);
123
173
  };
124
174
 
125
175
  /**
126
176
  * @param {Object} participant the locus participant
127
177
  * @returns {Boolean}
128
178
  */
129
- MemberUtil.isVideoMuted = (participant: any) => {
179
+ MemberUtil.isVideoMuted = (participant: any): boolean => {
130
180
  if (!participant) {
131
181
  throw new ParameterError('Video could not be processed, participant is undefined.');
132
182
  }
133
183
 
134
- return MemberUtil.isMuted(participant.status, VIDEO_STATUS);
184
+ return MemberUtil.isMuted(participant, VIDEO_STATUS, VIDEO);
135
185
  };
136
186
 
137
187
  /**
@@ -147,22 +197,69 @@ MemberUtil.isHandRaised = (participant: any) => {
147
197
  };
148
198
 
149
199
  /**
150
- * utility method for audio/video muted status
151
- * @param {String} status
152
- * @param {String} accessor
200
+ * @param {Object} participant the locus participant
153
201
  * @returns {Boolean}
154
202
  */
155
- MemberUtil.isMuted = (status: string, accessor: string) => {
156
- if (status) {
157
- if (status[accessor] === _RECEIVE_ONLY_) {
158
- return true;
159
- }
160
- if (status[accessor] === _SEND_RECEIVE_) {
161
- return false;
162
- }
203
+ MemberUtil.isBreakoutsSupported = (participant) => {
204
+ if (!participant) {
205
+ throw new ParameterError('Breakout support could not be processed, participant is undefined.');
163
206
  }
164
207
 
165
- 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;
166
263
  };
167
264
 
168
265
  /**
@@ -280,8 +377,8 @@ MemberUtil.extractMediaStatus = (participant: any): IMediaStatus => {
280
377
  }
281
378
 
282
379
  return {
283
- audio: participant.status.audioStatus,
284
- video: participant.status.videoStatus,
380
+ audio: participant.status?.audioStatus,
381
+ video: participant.status?.videoStatus,
285
382
  };
286
383
  };
287
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
  }