@webex/plugin-meetings 3.0.0-beta.10 → 3.0.0-beta.104

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 (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +173 -52
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +327 -211
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2396 -2388
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +318 -283
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +263 -282
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +80 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +61 -161
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +119 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +16 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +49 -0
  365. package/src/controls-options-manager/util.ts +229 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +91 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +270 -54
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +123 -3
  380. package/src/meeting/index.ts +2617 -1545
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +251 -132
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +181 -109
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +86 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +92 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +256 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +96 -96
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +104 -0
  421. package/src/reactions/reactions.type.ts +62 -0
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +666 -464
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1504 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +403 -0
  448. package/test/unit/spec/fixture/locus.js +92 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +493 -3
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  461. package/test/unit/spec/meeting/index.js +2649 -837
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +217 -43
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +359 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +46 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -2,11 +2,7 @@
2
2
  import {StatelessWebexPlugin} from '@webex/webex-core';
3
3
 
4
4
  import LoggerProxy from '../common/logs/logger-proxy';
5
- import {
6
- HTTP_VERBS,
7
- API,
8
- RESOURCE
9
- } from '../constants';
5
+ import {HTTP_VERBS, API, RESOURCE} from '../constants';
10
6
 
11
7
  /**
12
8
  * @class MeetingRequest
@@ -15,16 +11,19 @@ export default class MeetingRequest extends StatelessWebexPlugin {
15
11
  /**
16
12
  * get all the active meetings for the user
17
13
  * @returns {Array} return locus array
18
- */
14
+ */
19
15
  getActiveMeetings() {
20
16
  // @ts-ignore
21
17
  return this.request({
22
18
  api: API.LOCUS,
23
- resource: RESOURCE.LOCI
19
+ resource: RESOURCE.LOCI,
24
20
  })
25
21
  .then((res) => this.determineRedirections(res.body))
26
22
  .catch((error) => {
27
- LoggerProxy.logger.error(`Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`);
23
+ LoggerProxy.logger.error(
24
+ `Meetings:request#getActiveMeetings --> failed to get locus details, ${error}`
25
+ );
26
+ throw new Error(error);
28
27
  });
29
28
  }
30
29
 
@@ -40,13 +39,12 @@ export default class MeetingRequest extends StatelessWebexPlugin {
40
39
  /**
41
40
  * get user meeting preference information
42
41
  * @returns {Promise<object>} getMeetingPreferences
43
- */
42
+ */
44
43
  getMeetingPreferences() {
45
44
  // @ts-ignore
46
45
  return this.webex.internal.services.getMeetingPreferences();
47
46
  }
48
47
 
49
-
50
48
  // locus federation, determines and populate locus if the responseBody has remote URLs to fetch locus details
51
49
 
52
50
  /**
@@ -56,22 +54,28 @@ export default class MeetingRequest extends StatelessWebexPlugin {
56
54
  */
57
55
  determineRedirections(responseBody: any) {
58
56
  if (responseBody.remoteLocusClusterUrls && responseBody.remoteLocusClusterUrls.length) {
59
- // @ts-ignore
60
- return Promise.all(responseBody.remoteLocusClusterUrls.map((url) => this.request({
61
- method: HTTP_VERBS.GET,
62
- url,
63
- runWhitelistedDomains: true // allows auth token for whitelisted domain
64
- })
65
- .then((res) => {
66
- responseBody.loci = responseBody.loci.concat(res.body.loci);
67
- responseBody.locusUrls = responseBody.locusUrls.concat(res.body.locusUrls);
57
+ return Promise.all(
58
+ responseBody.remoteLocusClusterUrls.map((url) =>
59
+ // @ts-ignore
60
+ this.request({
61
+ method: HTTP_VERBS.GET,
62
+ url,
63
+ runWhitelistedDomains: true, // allows auth token for whitelisted domain
64
+ })
65
+ .then((res) => {
66
+ responseBody.loci = responseBody.loci.concat(res.body.loci);
67
+ responseBody.locusUrls = responseBody.locusUrls.concat(res.body.locusUrls);
68
68
 
69
- return Promise.resolve(responseBody);
70
- })
71
- .catch((error) => {
72
- LoggerProxy.logger.error(`Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`);
73
- })))
74
- .then(() => Promise.resolve(responseBody));
69
+ return Promise.resolve(responseBody);
70
+ })
71
+ .catch((error) => {
72
+ LoggerProxy.logger.error(
73
+ `Meetings:request#determineRedirections --> failed to get locus details from url: ${url}, reason: ${error}`
74
+ );
75
+ throw new Error(error);
76
+ })
77
+ )
78
+ ).then(() => Promise.resolve(responseBody));
75
79
  }
76
80
 
77
81
  return Promise.resolve(responseBody);
@@ -1,34 +1,39 @@
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,
10
- ROAP
13
+ LOCUS,
14
+ LOCUSEVENT,
15
+ ROAP,
11
16
  } from '../constants';
12
17
  import LoggerProxy from '../common/logs/logger-proxy';
13
18
  import Trigger from '../common/events/trigger-proxy';
14
19
 
15
20
  /**
16
- * Meetings Media Codec Missing Event
17
- * Emitted when H.264 codec is not
18
- * found in the browser.
19
- * @event media:codec:missing
20
- * @instance
21
- * @memberof MeetingsUtil
22
- */
21
+ * Meetings Media Codec Missing Event
22
+ * Emitted when H.264 codec is not
23
+ * found in the browser.
24
+ * @event media:codec:missing
25
+ * @instance
26
+ * @memberof MeetingsUtil
27
+ */
23
28
 
24
29
  /**
25
- * Meetings Media Codec Loaded Event
26
- * Emitted when H.264 codec has been
27
- * loaded in the browser.
28
- * @event media:codec:loaded
29
- * @instance
30
- * @memberof MeetingsUtil
31
- */
30
+ * Meetings Media Codec Loaded Event
31
+ * Emitted when H.264 codec has been
32
+ * loaded in the browser.
33
+ * @event media:codec:loaded
34
+ * @instance
35
+ * @memberof MeetingsUtil
36
+ */
32
37
 
33
38
  const MeetingsUtil: any = {};
34
39
 
@@ -42,31 +47,52 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
42
47
  const meeting = meetingCollection.getByKey(CORRELATION_ID, data.correlationId);
43
48
 
44
49
  if (meeting) {
45
- const {
46
- seq, messageType, tieBreaker, errorType, errorCause
47
- } = data.message;
50
+ const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
48
51
 
49
52
  if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
50
53
  // turn discovery is not part of normal roap protocol and so we are not handling it
51
54
  // through the usual roap state machine
52
55
  meeting.roap.turnDiscovery.handleTurnDiscoveryResponse(data.message);
53
- }
54
- else {
56
+ } else {
55
57
  const roapMessage = {
56
58
  seq,
57
59
  messageType,
58
60
  sdp: data.message.sdps?.length > 0 ? data.message.sdps[0] : undefined,
59
61
  tieBreaker,
60
62
  errorType,
61
- errorCause
63
+ errorCause,
62
64
  };
63
65
 
66
+ const mediaServer = MeetingsUtil.getMediaServer(roapMessage.sdp);
67
+
64
68
  meeting.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
69
+
70
+ if (mediaServer) {
71
+ meeting.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
72
+ }
65
73
  }
66
74
  }
67
75
  }
68
76
  };
69
77
 
78
+ MeetingsUtil.getMediaServer = (sdp) => {
79
+ let mediaServer;
80
+
81
+ // Attempt to collect the media server from the roap message.
82
+ try {
83
+ mediaServer = sdp
84
+ .split('\r\n')
85
+ .find((line) => line.startsWith('o='))
86
+ .split(' ')
87
+ .shift()
88
+ .replace('o=', '');
89
+ } catch {
90
+ mediaServer = undefined;
91
+ }
92
+
93
+ return mediaServer;
94
+ };
95
+
70
96
  MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
71
97
  let devices = [];
72
98
 
@@ -88,11 +114,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
88
114
  MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
89
115
  let result = '';
90
116
 
91
- if (userPreferences && userPreferences.sites) {
117
+ if (userPreferences?.sites?.length) {
92
118
  const defaultSite = userPreferences.sites.find((site) => site.default);
93
119
 
94
120
  if (defaultSite) {
95
121
  result = defaultSite.siteUrl;
122
+ } else {
123
+ result = userPreferences.sites[0].siteUrl;
96
124
  }
97
125
  }
98
126
 
@@ -116,9 +144,10 @@ MeetingsUtil.hasH264Codec = async () => {
116
144
  hasCodec = true;
117
145
  }
118
146
  pc.close();
119
- }
120
- catch (error) {
121
- LoggerProxy.logger.warn('Meetings:util#hasH264Codec --> Error creating peerConnection for H.264 test.');
147
+ } catch (error) {
148
+ LoggerProxy.logger.warn(
149
+ 'Meetings:util#hasH264Codec --> Error creating peerConnection for H.264 test.'
150
+ );
122
151
  }
123
152
 
124
153
  return hasCodec;
@@ -143,8 +172,8 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
143
172
  const {firstChecked, disableNotifications} = options || {};
144
173
  const delay = 5e3; // ms
145
174
  const maxDuration = 3e5; // ms
146
- const shouldTrigger = (firstChecked === undefined);
147
- const shouldStopChecking = firstChecked && (Date.now() - firstChecked) >= maxDuration;
175
+ const shouldTrigger = firstChecked === undefined;
176
+ const shouldStopChecking = firstChecked && Date.now() - firstChecked >= maxDuration;
148
177
 
149
178
  // Disable notifications and start H.264 download only
150
179
  if (disableNotifications) {
@@ -159,7 +188,7 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
159
188
  this,
160
189
  {
161
190
  file: 'meetings/util',
162
- function: 'checkH264Support'
191
+ function: 'checkH264Support',
163
192
  },
164
193
  EVENT_TRIGGERS.MEDIA_CODEC_LOADED
165
194
  );
@@ -170,7 +199,9 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
170
199
 
171
200
  // Stop checking if past the timelimit
172
201
  if (shouldStopChecking) {
173
- LoggerProxy.logger.error('Meetings:util#checkH264Support --> Timed out waiting for H264 codec to load.');
202
+ LoggerProxy.logger.error(
203
+ 'Meetings:util#checkH264Support --> Timed out waiting for H264 codec to load.'
204
+ );
174
205
 
175
206
  return;
176
207
  }
@@ -181,7 +212,7 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
181
212
  this,
182
213
  {
183
214
  file: 'meetings/util',
184
- function: 'checkH264Support'
215
+ function: 'checkH264Support',
185
216
  },
186
217
  EVENT_TRIGGERS.MEDIA_CODEC_MISSING
187
218
  );
@@ -196,4 +227,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
196
227
  }, delay);
197
228
  };
198
229
 
230
+ /**
231
+ * get device from locus data
232
+ * @param {Object} newLocus new locus data
233
+ * @param {String} deviceUrl current device url
234
+ * @returns {Object}
235
+ */
236
+ MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
237
+ if (newLocus?.self?.devices?.length > 0) {
238
+ return newLocus.self.devices.find((device) => device.url === deviceUrl);
239
+ }
240
+
241
+ return null;
242
+ };
243
+
244
+ /**
245
+ * get self device joined status from locus data
246
+ * @param {Object} meeting current meeting data
247
+ * @param {Object} newLocus new locus data
248
+ * @param {String} deviceUrl current device url
249
+ * @returns {Object}
250
+ */
251
+ MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
252
+ const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
253
+ if (thisDevice) {
254
+ if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
255
+ return (
256
+ thisDevice.state === _JOINED_ ||
257
+ (thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
258
+ );
259
+ }
260
+ }
261
+
262
+ return false;
263
+ };
264
+
265
+ /**
266
+ * check the new locus is breakout session's one or not
267
+ * @param {Object} newLocus new locus data
268
+ * @returns {boolean}
269
+ * @private
270
+ */
271
+ MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
272
+ return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
273
+ };
274
+
275
+ /**
276
+ * check the locus is valid breakout locus or not
277
+ * @param {Object} locus
278
+ * @returns {boolean}
279
+ * @private
280
+ */
281
+ MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
282
+ const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
283
+ const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
284
+ const selfJoined = locus.self?.state === _JOINED_;
285
+
286
+ return isLocusAsBreakout && !inActiveStatus && selfJoined;
287
+ };
199
288
  export default MeetingsUtil;
@@ -1,12 +1,8 @@
1
1
  /*!
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
- import {
5
- MEETINGS,
6
- _IN_LOBBY_,
7
- _NOT_IN_MEETING_,
8
- _IN_MEETING_
9
- } from '../constants';
4
+ import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
5
+ import {IExternalRoles, ParticipantWithRoles} from './types';
10
6
 
11
7
  import MemberUtil from './util';
12
8
 
@@ -33,9 +29,11 @@ export default class Member {
33
29
  isSelf: any;
34
30
  isUser: any;
35
31
  isVideoMuted: any;
32
+ roles: IExternalRoles;
36
33
  name: any;
37
34
  participant: any;
38
35
  status: any;
36
+ supportsBreakouts: boolean;
39
37
  type: any;
40
38
  namespace = MEETINGS;
41
39
 
@@ -51,20 +49,22 @@ export default class Member {
51
49
  */
52
50
  constructor(
53
51
  participant: object,
54
- options: {
55
- selfId: string;
56
- hostId: string;
57
- contentSharingId: string;
58
- type: string;
59
- } | any = {}
52
+ options:
53
+ | {
54
+ selfId: string;
55
+ hostId: string;
56
+ contentSharingId: string;
57
+ type: string;
58
+ }
59
+ | any = {}
60
60
  ) {
61
- /**
61
+ /**
62
62
  * The server participant object
63
63
  * @instance
64
64
  * @type {Object}
65
65
  * @private
66
66
  * @memberof Member
67
- */
67
+ */
68
68
  this.participant = null;
69
69
  /**
70
70
  * The member id
@@ -72,7 +72,7 @@ export default class Member {
72
72
  * @type {String}
73
73
  * @public
74
74
  * @memberof Member
75
- */
75
+ */
76
76
  this.id = null;
77
77
  /**
78
78
  * The member name
@@ -80,34 +80,41 @@ export default class Member {
80
80
  * @type {String}
81
81
  * @public
82
82
  * @memberof Member
83
- */
83
+ */
84
84
  this.name = null;
85
85
  /**
86
86
  * @instance
87
87
  * @type {Boolean}
88
88
  * @public
89
89
  * @memberof Member
90
- */
90
+ */
91
91
  this.isAudioMuted = null;
92
92
  /**
93
93
  * @instance
94
94
  * @type {Boolean}
95
95
  * @public
96
96
  * @memberof Member
97
- */
97
+ */
98
98
  this.isVideoMuted = null;
99
99
  /**
100
100
  * @instance
101
101
  * @type {Boolean}
102
102
  * @public
103
103
  * @memberof Member
104
- */
104
+ */
105
105
  this.isHandRaised = null;
106
106
  /**
107
- * @instance
108
- * @type {Boolean}
109
- * @public
110
- * @memberof Member
107
+ * @instance
108
+ * @type {Boolean}
109
+ * @public
110
+ * @memberof Member
111
+ */
112
+ this.supportsBreakouts = null;
113
+ /**
114
+ * @instance
115
+ * @type {Boolean}
116
+ * @public
117
+ * @memberof Member
111
118
  */
112
119
  this.isSelf = null;
113
120
  /**
@@ -115,114 +122,122 @@ export default class Member {
115
122
  * @type {Boolean}
116
123
  * @public
117
124
  * @memberof Member
118
- */
125
+ */
119
126
  this.isHost = null;
120
127
  /**
121
128
  * @instance
122
129
  * @type {Boolean}
123
130
  * @public
124
131
  * @memberof Member
125
- */
132
+ */
126
133
  this.isGuest = null;
127
134
  /**
128
135
  * @instance
129
136
  * @type {Boolean}
130
137
  * @public
131
138
  * @memberof Member
132
- */
139
+ */
133
140
  this.isInLobby = null;
134
141
  /**
135
142
  * @instance
136
143
  * @type {Boolean}
137
144
  * @public
138
145
  * @memberof Member
139
- */
146
+ */
140
147
  this.isInMeeting = null;
141
148
  /**
142
149
  * @instance
143
150
  * @type {Boolean}
144
151
  * @public
145
152
  * @memberof Member
146
- */
153
+ */
147
154
  this.isNotAdmitted = null;
148
155
  /**
149
156
  * @instance
150
157
  * @type {Boolean}
151
158
  * @public
152
159
  * @memberof Member
153
- */
160
+ */
154
161
  this.isContentSharing = null;
155
162
  /**
156
163
  * @instance
157
164
  * @type {Boolean}
158
165
  * @public
159
166
  * @memberof Member
160
- */
167
+ */
161
168
  this.status = null;
162
169
  /**
163
170
  * @instance
164
171
  * @type {Boolean}
165
172
  * @public
166
173
  * @memberof Member
167
- */
174
+ */
168
175
  this.isDevice = null;
169
176
  /**
170
177
  * @instance
171
178
  * @type {Boolean}
172
179
  * @public
173
180
  * @memberof Member
174
- */
181
+ */
175
182
  this.isUser = null;
176
183
  /**
177
- * Is this member associated to another user by way of pairing (typical of devices)
184
+ * Is this member associated to another user by way of pairing (typical of devices)
178
185
  * @instance
179
186
  * @type {String}
180
187
  * @public
181
188
  * @memberof Member
182
- */
189
+ */
183
190
  this.associatedUser = null;
184
191
  /**
185
192
  * @instance
186
193
  * @type {Boolean}
187
194
  * @public
188
195
  * @memberof Member
189
- */
196
+ */
190
197
  this.isRecording = null;
191
198
  /**
192
199
  * @instance
193
200
  * @type {Boolean}
194
201
  * @public
195
202
  * @memberof Member
196
- */
203
+ */
197
204
  this.isMutable = null;
198
205
  /**
199
206
  * @instance
200
207
  * @type {Boolean}
201
208
  * @public
202
209
  * @memberof Member
203
- */
210
+ */
204
211
  this.isRemovable = null;
205
212
  /**
206
213
  * @instance
207
214
  * @type {String}
208
215
  * @private
209
216
  * @memberof Member
210
- */
217
+ */
211
218
  this.type = null;
212
219
  /**
213
220
  * @instance
214
221
  * @type {Boolean}
215
222
  * @public
216
223
  * @memberof Member
217
- */
224
+ */
218
225
  this.isModerator = null;
219
226
  /**
220
227
  * @instance
221
228
  * @type {Boolean}
222
229
  * @public
223
230
  * @memberof Member
224
- */
231
+ */
225
232
  this.isModeratorAssignmentProhibited = null;
233
+
234
+ /**
235
+ * @instance
236
+ * @type {IExternalRoles}
237
+ * @public
238
+ * @memberof Member
239
+ */
240
+ this.roles = null;
226
241
  // TODO: more participant types
227
242
  // such as native client, web client, is a device, what type of phone, etc
228
243
  this.processParticipant(participant);
@@ -245,12 +260,15 @@ export default class Member {
245
260
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
246
261
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
247
262
  this.isHandRaised = MemberUtil.isHandRaised(participant);
263
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
248
264
  this.isGuest = MemberUtil.isGuest(participant);
249
265
  this.isUser = MemberUtil.isUser(participant);
250
266
  this.isDevice = MemberUtil.isDevice(participant);
251
267
  this.isModerator = MemberUtil.isModerator(participant);
252
- this.isModeratorAssignmentProhibited = MemberUtil.isModeratorAssignmentProhibited(participant);
268
+ this.isModeratorAssignmentProhibited =
269
+ MemberUtil.isModeratorAssignmentProhibited(participant);
253
270
  this.processStatus(participant);
271
+ this.processRoles(participant as ParticipantWithRoles);
254
272
  // must be done last
255
273
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
256
274
  }
@@ -282,9 +300,20 @@ export default class Member {
282
300
  */
283
301
  private processMember() {
284
302
  // must occur after self, guest, meeting, and type properties are calculated
285
- this.isRemovable = MemberUtil.isRemovable(this.isSelf, this.isGuest, this.isInMeeting, this.type);
303
+ this.isRemovable = MemberUtil.isRemovable(
304
+ this.isSelf,
305
+ this.isGuest,
306
+ this.isInMeeting,
307
+ this.type
308
+ );
286
309
  // must occur after self, device, meeting, mute status, and type properties are calculated
287
- this.isMutable = MemberUtil.isMutable(this.isSelf, this.isDevice, this.isInMeeting, this.isAudioMuted, this.type);
310
+ this.isMutable = MemberUtil.isMutable(
311
+ this.isSelf,
312
+ this.isDevice,
313
+ this.isInMeeting,
314
+ this.isAudioMuted,
315
+ this.type
316
+ );
288
317
  }
289
318
 
290
319
  /**
@@ -359,8 +388,7 @@ export default class Member {
359
388
  public processIsContentSharing(participant: object, sharingId: string) {
360
389
  if (MemberUtil.isUser(participant)) {
361
390
  this.isContentSharing = MemberUtil.isSame(participant, sharingId);
362
- }
363
- else if (MemberUtil.isDevice(participant)) {
391
+ } else if (MemberUtil.isDevice(participant)) {
364
392
  this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);
365
393
  }
366
394
  }
@@ -388,8 +416,7 @@ export default class Member {
388
416
  private processIsSelf(participant: object, selfId: string) {
389
417
  if (MemberUtil.isUser(participant)) {
390
418
  this.isSelf = MemberUtil.isSame(participant, selfId);
391
- }
392
- else if (MemberUtil.isDevice(participant)) {
419
+ } else if (MemberUtil.isDevice(participant)) {
393
420
  this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);
394
421
  this.associatedUser = selfId;
395
422
  }
@@ -406,12 +433,22 @@ export default class Member {
406
433
  private processIsHost(participant: object, hostId: string) {
407
434
  if (MemberUtil.isUser(participant)) {
408
435
  this.isHost = MemberUtil.isSame(participant, hostId);
409
- }
410
- else if (MemberUtil.isDevice(participant)) {
436
+ } else if (MemberUtil.isDevice(participant)) {
411
437
  this.isHost = MemberUtil.isAssociatedSame(participant, hostId);
412
438
  }
413
439
  }
414
440
 
441
+ /**
442
+ * process the roles that have been applied to this member
443
+ * @param {Object} participant
444
+ * @returns {undefined}
445
+ * @private
446
+ * @memberof Member
447
+ */
448
+ private processRoles(participant: ParticipantWithRoles) {
449
+ this.roles = MemberUtil.extractControlRoles(participant);
450
+ }
451
+
415
452
  /**
416
453
  * set the type for the member, could be MEETING or CALL
417
454
  * @param {String} type
@@ -0,0 +1,24 @@
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
+ };