@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.111

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 +944 -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 +193 -53
  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 +27 -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 +286 -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 +94 -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 +383 -212
  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 +67 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2477 -2417
  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 +296 -289
  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 +278 -281
  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 +89 -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 +101 -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 +50 -16
  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 +93 -162
  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 +2 -4
  194. package/dist/reactions/reactions.js.map +1 -1
  195. package/dist/reactions/reactions.type.js +19 -23
  196. package/dist/reactions/reactions.type.js.map +1 -1
  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 +984 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +43 -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 +137 -0
  274. package/dist/types/meeting/index.d.ts +1753 -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 +115 -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 +157 -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 +195 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +169 -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 +220 -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 +835 -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 +141 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +18 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +59 -0
  365. package/src/controls-options-manager/util.ts +274 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +145 -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 +326 -55
  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 +139 -3
  380. package/src/meeting/index.ts +2674 -1543
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +231 -135
  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 +201 -113
  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 +95 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +106 -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 +302 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +124 -95
  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 +8 -8
  421. package/src/reactions/reactions.type.ts +31 -5
  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 +670 -466
  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 +1542 -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 +504 -0
  448. package/test/unit/spec/fixture/locus.js +93 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +289 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +585 -5
  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 +66 -3
  461. package/test/unit/spec/meeting/index.js +2934 -946
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +194 -44
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +333 -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 +383 -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 +104 -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,12 @@ 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;
37
+ supportLiveAnnotation: boolean;
39
38
  type: any;
40
39
  namespace = MEETINGS;
41
40
 
@@ -51,20 +50,22 @@ export default class Member {
51
50
  */
52
51
  constructor(
53
52
  participant: object,
54
- options: {
55
- selfId: string;
56
- hostId: string;
57
- contentSharingId: string;
58
- type: string;
59
- } | any = {}
53
+ options:
54
+ | {
55
+ selfId: string;
56
+ hostId: string;
57
+ contentSharingId: string;
58
+ type: string;
59
+ }
60
+ | any = {}
60
61
  ) {
61
- /**
62
+ /**
62
63
  * The server participant object
63
64
  * @instance
64
65
  * @type {Object}
65
66
  * @private
66
67
  * @memberof Member
67
- */
68
+ */
68
69
  this.participant = null;
69
70
  /**
70
71
  * The member id
@@ -72,7 +73,7 @@ export default class Member {
72
73
  * @type {String}
73
74
  * @public
74
75
  * @memberof Member
75
- */
76
+ */
76
77
  this.id = null;
77
78
  /**
78
79
  * The member name
@@ -80,34 +81,48 @@ export default class Member {
80
81
  * @type {String}
81
82
  * @public
82
83
  * @memberof Member
83
- */
84
+ */
84
85
  this.name = null;
85
86
  /**
86
87
  * @instance
87
88
  * @type {Boolean}
88
89
  * @public
89
90
  * @memberof Member
90
- */
91
+ */
91
92
  this.isAudioMuted = null;
92
93
  /**
93
94
  * @instance
94
95
  * @type {Boolean}
95
96
  * @public
96
97
  * @memberof Member
97
- */
98
+ */
98
99
  this.isVideoMuted = null;
99
100
  /**
100
101
  * @instance
101
102
  * @type {Boolean}
102
103
  * @public
103
104
  * @memberof Member
104
- */
105
+ */
105
106
  this.isHandRaised = null;
106
107
  /**
107
- * @instance
108
- * @type {Boolean}
109
- * @public
110
- * @memberof Member
108
+ * @instance
109
+ * @type {Boolean}
110
+ * @public
111
+ * @memberof Member
112
+ */
113
+ this.supportsBreakouts = null;
114
+ /**
115
+ * @instance
116
+ * @type {Boolean}
117
+ * @public
118
+ * @memberof Member
119
+ */
120
+ this.supportLiveAnnotation = null;
121
+ /**
122
+ * @instance
123
+ * @type {Boolean}
124
+ * @public
125
+ * @memberof Member
111
126
  */
112
127
  this.isSelf = null;
113
128
  /**
@@ -115,114 +130,122 @@ export default class Member {
115
130
  * @type {Boolean}
116
131
  * @public
117
132
  * @memberof Member
118
- */
133
+ */
119
134
  this.isHost = null;
120
135
  /**
121
136
  * @instance
122
137
  * @type {Boolean}
123
138
  * @public
124
139
  * @memberof Member
125
- */
140
+ */
126
141
  this.isGuest = null;
127
142
  /**
128
143
  * @instance
129
144
  * @type {Boolean}
130
145
  * @public
131
146
  * @memberof Member
132
- */
147
+ */
133
148
  this.isInLobby = null;
134
149
  /**
135
150
  * @instance
136
151
  * @type {Boolean}
137
152
  * @public
138
153
  * @memberof Member
139
- */
154
+ */
140
155
  this.isInMeeting = null;
141
156
  /**
142
157
  * @instance
143
158
  * @type {Boolean}
144
159
  * @public
145
160
  * @memberof Member
146
- */
161
+ */
147
162
  this.isNotAdmitted = null;
148
163
  /**
149
164
  * @instance
150
165
  * @type {Boolean}
151
166
  * @public
152
167
  * @memberof Member
153
- */
168
+ */
154
169
  this.isContentSharing = null;
155
170
  /**
156
171
  * @instance
157
172
  * @type {Boolean}
158
173
  * @public
159
174
  * @memberof Member
160
- */
175
+ */
161
176
  this.status = null;
162
177
  /**
163
178
  * @instance
164
179
  * @type {Boolean}
165
180
  * @public
166
181
  * @memberof Member
167
- */
182
+ */
168
183
  this.isDevice = null;
169
184
  /**
170
185
  * @instance
171
186
  * @type {Boolean}
172
187
  * @public
173
188
  * @memberof Member
174
- */
189
+ */
175
190
  this.isUser = null;
176
191
  /**
177
- * Is this member associated to another user by way of pairing (typical of devices)
192
+ * Is this member associated to another user by way of pairing (typical of devices)
178
193
  * @instance
179
194
  * @type {String}
180
195
  * @public
181
196
  * @memberof Member
182
- */
197
+ */
183
198
  this.associatedUser = null;
184
199
  /**
185
200
  * @instance
186
201
  * @type {Boolean}
187
202
  * @public
188
203
  * @memberof Member
189
- */
204
+ */
190
205
  this.isRecording = null;
191
206
  /**
192
207
  * @instance
193
208
  * @type {Boolean}
194
209
  * @public
195
210
  * @memberof Member
196
- */
211
+ */
197
212
  this.isMutable = null;
198
213
  /**
199
214
  * @instance
200
215
  * @type {Boolean}
201
216
  * @public
202
217
  * @memberof Member
203
- */
218
+ */
204
219
  this.isRemovable = null;
205
220
  /**
206
221
  * @instance
207
222
  * @type {String}
208
223
  * @private
209
224
  * @memberof Member
210
- */
225
+ */
211
226
  this.type = null;
212
227
  /**
213
228
  * @instance
214
229
  * @type {Boolean}
215
230
  * @public
216
231
  * @memberof Member
217
- */
232
+ */
218
233
  this.isModerator = null;
219
234
  /**
220
235
  * @instance
221
236
  * @type {Boolean}
222
237
  * @public
223
238
  * @memberof Member
224
- */
239
+ */
225
240
  this.isModeratorAssignmentProhibited = null;
241
+
242
+ /**
243
+ * @instance
244
+ * @type {IExternalRoles}
245
+ * @public
246
+ * @memberof Member
247
+ */
248
+ this.roles = null;
226
249
  // TODO: more participant types
227
250
  // such as native client, web client, is a device, what type of phone, etc
228
251
  this.processParticipant(participant);
@@ -245,12 +268,16 @@ export default class Member {
245
268
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
246
269
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
247
270
  this.isHandRaised = MemberUtil.isHandRaised(participant);
271
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
272
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
248
273
  this.isGuest = MemberUtil.isGuest(participant);
249
274
  this.isUser = MemberUtil.isUser(participant);
250
275
  this.isDevice = MemberUtil.isDevice(participant);
251
276
  this.isModerator = MemberUtil.isModerator(participant);
252
- this.isModeratorAssignmentProhibited = MemberUtil.isModeratorAssignmentProhibited(participant);
277
+ this.isModeratorAssignmentProhibited =
278
+ MemberUtil.isModeratorAssignmentProhibited(participant);
253
279
  this.processStatus(participant);
280
+ this.processRoles(participant as ParticipantWithRoles);
254
281
  // must be done last
255
282
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
256
283
  }
@@ -282,9 +309,20 @@ export default class Member {
282
309
  */
283
310
  private processMember() {
284
311
  // must occur after self, guest, meeting, and type properties are calculated
285
- this.isRemovable = MemberUtil.isRemovable(this.isSelf, this.isGuest, this.isInMeeting, this.type);
312
+ this.isRemovable = MemberUtil.isRemovable(
313
+ this.isSelf,
314
+ this.isGuest,
315
+ this.isInMeeting,
316
+ this.type
317
+ );
286
318
  // 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);
319
+ this.isMutable = MemberUtil.isMutable(
320
+ this.isSelf,
321
+ this.isDevice,
322
+ this.isInMeeting,
323
+ this.isAudioMuted,
324
+ this.type
325
+ );
288
326
  }
289
327
 
290
328
  /**
@@ -359,8 +397,7 @@ export default class Member {
359
397
  public processIsContentSharing(participant: object, sharingId: string) {
360
398
  if (MemberUtil.isUser(participant)) {
361
399
  this.isContentSharing = MemberUtil.isSame(participant, sharingId);
362
- }
363
- else if (MemberUtil.isDevice(participant)) {
400
+ } else if (MemberUtil.isDevice(participant)) {
364
401
  this.isContentSharing = MemberUtil.isAssociatedSame(participant, sharingId);
365
402
  }
366
403
  }
@@ -388,8 +425,7 @@ export default class Member {
388
425
  private processIsSelf(participant: object, selfId: string) {
389
426
  if (MemberUtil.isUser(participant)) {
390
427
  this.isSelf = MemberUtil.isSame(participant, selfId);
391
- }
392
- else if (MemberUtil.isDevice(participant)) {
428
+ } else if (MemberUtil.isDevice(participant)) {
393
429
  this.isSelf = MemberUtil.isAssociatedSame(participant, selfId);
394
430
  this.associatedUser = selfId;
395
431
  }
@@ -406,12 +442,22 @@ export default class Member {
406
442
  private processIsHost(participant: object, hostId: string) {
407
443
  if (MemberUtil.isUser(participant)) {
408
444
  this.isHost = MemberUtil.isSame(participant, hostId);
409
- }
410
- else if (MemberUtil.isDevice(participant)) {
445
+ } else if (MemberUtil.isDevice(participant)) {
411
446
  this.isHost = MemberUtil.isAssociatedSame(participant, hostId);
412
447
  }
413
448
  }
414
449
 
450
+ /**
451
+ * process the roles that have been applied to this member
452
+ * @param {Object} participant
453
+ * @returns {undefined}
454
+ * @private
455
+ * @memberof Member
456
+ */
457
+ private processRoles(participant: ParticipantWithRoles) {
458
+ this.roles = MemberUtil.extractControlRoles(participant);
459
+ }
460
+
415
461
  /**
416
462
  * set the type for the member, could be MEETING or CALL
417
463
  * @param {String} type