@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.130

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 (519) hide show
  1. package/README.md +45 -1
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +48 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +355 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +193 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +43 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +994 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +5 -26
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +5 -26
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +6 -27
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +5 -26
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +5 -26
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +4 -25
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +5 -26
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +5 -26
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +6 -41
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +1 -24
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +35 -61
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +4 -14
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +6 -6
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +201 -53
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +294 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +72 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.js +100 -29
  87. package/dist/locus-info/controlsUtils.js.map +1 -1
  88. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  89. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  90. package/dist/locus-info/fullState.js +0 -15
  91. package/dist/locus-info/fullState.js.map +1 -1
  92. package/dist/locus-info/hostUtils.js +4 -12
  93. package/dist/locus-info/hostUtils.js.map +1 -1
  94. package/dist/locus-info/index.js +392 -212
  95. package/dist/locus-info/index.js.map +1 -1
  96. package/dist/locus-info/infoUtils.js +0 -38
  97. package/dist/locus-info/infoUtils.js.map +1 -1
  98. package/dist/locus-info/mediaSharesUtils.js +54 -38
  99. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  100. package/dist/locus-info/parser.js +88 -123
  101. package/dist/locus-info/parser.js.map +1 -1
  102. package/dist/locus-info/selfUtils.js +99 -91
  103. package/dist/locus-info/selfUtils.js.map +1 -1
  104. package/dist/media/index.js +55 -165
  105. package/dist/media/index.js.map +1 -1
  106. package/dist/media/properties.js +71 -117
  107. package/dist/media/properties.js.map +1 -1
  108. package/dist/media/util.js +2 -9
  109. package/dist/media/util.js.map +1 -1
  110. package/dist/mediaQualityMetrics/config.js +505 -495
  111. package/dist/mediaQualityMetrics/config.js.map +1 -1
  112. package/dist/meeting/in-meeting-actions.js +77 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2597 -2464
  115. package/dist/meeting/index.js.map +1 -1
  116. package/dist/meeting/locusMediaRequest.js +291 -0
  117. package/dist/meeting/locusMediaRequest.js.map +1 -0
  118. package/dist/meeting/muteState.js +292 -138
  119. package/dist/meeting/muteState.js.map +1 -1
  120. package/dist/meeting/request.js +315 -336
  121. package/dist/meeting/request.js.map +1 -1
  122. package/dist/meeting/request.type.js +7 -0
  123. package/dist/meeting/request.type.js.map +1 -0
  124. package/dist/meeting/state.js +21 -31
  125. package/dist/meeting/state.js.map +1 -1
  126. package/dist/meeting/util.js +463 -583
  127. package/dist/meeting/util.js.map +1 -1
  128. package/dist/meeting-info/collection.js +3 -25
  129. package/dist/meeting-info/collection.js.map +1 -1
  130. package/dist/meeting-info/index.js +10 -33
  131. package/dist/meeting-info/index.js.map +1 -1
  132. package/dist/meeting-info/meeting-info-v2.js +305 -286
  133. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  134. package/dist/meeting-info/request.js +1 -16
  135. package/dist/meeting-info/request.js.map +1 -1
  136. package/dist/meeting-info/util.js +98 -183
  137. package/dist/meeting-info/util.js.map +1 -1
  138. package/dist/meeting-info/utilv2.js +156 -232
  139. package/dist/meeting-info/utilv2.js.map +1 -1
  140. package/dist/meetings/collection.js +24 -20
  141. package/dist/meetings/collection.js.map +1 -1
  142. package/dist/meetings/index.js +692 -593
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +23 -42
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +186 -155
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +89 -88
  149. package/dist/member/index.js.map +1 -1
  150. package/dist/member/types.js +15 -0
  151. package/dist/member/types.js.map +1 -0
  152. package/dist/member/util.js +101 -69
  153. package/dist/member/util.js.map +1 -1
  154. package/dist/members/collection.js +12 -12
  155. package/dist/members/collection.js.map +1 -1
  156. package/dist/members/index.js +166 -205
  157. package/dist/members/index.js.map +1 -1
  158. package/dist/members/request.js +120 -85
  159. package/dist/members/request.js.map +1 -1
  160. package/dist/members/types.js +15 -0
  161. package/dist/members/types.js.map +1 -0
  162. package/dist/members/util.js +314 -260
  163. package/dist/members/util.js.map +1 -1
  164. package/dist/metrics/config.js +50 -16
  165. package/dist/metrics/config.js.map +1 -1
  166. package/dist/metrics/constants.js +4 -7
  167. package/dist/metrics/constants.js.map +1 -1
  168. package/dist/metrics/index.js +93 -162
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +167 -50
  171. package/dist/multistream/mediaRequestManager.js.map +1 -1
  172. package/dist/multistream/receiveSlot.js +58 -65
  173. package/dist/multistream/receiveSlot.js.map +1 -1
  174. package/dist/multistream/receiveSlotManager.js +74 -93
  175. package/dist/multistream/receiveSlotManager.js.map +1 -1
  176. package/dist/multistream/remoteMedia.js +55 -74
  177. package/dist/multistream/remoteMedia.js.map +1 -1
  178. package/dist/multistream/remoteMediaGroup.js +6 -40
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +466 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +32 -59
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +10 -45
  185. package/dist/personal-meeting-room/index.js.map +1 -1
  186. package/dist/personal-meeting-room/request.js +2 -33
  187. package/dist/personal-meeting-room/request.js.map +1 -1
  188. package/dist/personal-meeting-room/util.js +0 -13
  189. package/dist/personal-meeting-room/util.js.map +1 -1
  190. package/dist/reachability/index.js +190 -199
  191. package/dist/reachability/index.js.map +1 -1
  192. package/dist/reachability/request.js +14 -23
  193. package/dist/reachability/request.js.map +1 -1
  194. package/dist/reactions/constants.js +13 -0
  195. package/dist/reactions/constants.js.map +1 -0
  196. package/dist/reactions/reactions.js +2 -4
  197. package/dist/reactions/reactions.js.map +1 -1
  198. package/dist/reactions/reactions.type.js +19 -23
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +326 -465
  201. package/dist/reconnection-manager/index.js.map +1 -1
  202. package/dist/recording-controller/enums.js +17 -0
  203. package/dist/recording-controller/enums.js.map +1 -0
  204. package/dist/recording-controller/index.js +343 -0
  205. package/dist/recording-controller/index.js.map +1 -0
  206. package/dist/recording-controller/util.js +63 -0
  207. package/dist/recording-controller/util.js.map +1 -0
  208. package/dist/roap/index.js +31 -75
  209. package/dist/roap/index.js.map +1 -1
  210. package/dist/roap/request.js +129 -136
  211. package/dist/roap/request.js.map +1 -1
  212. package/dist/roap/turnDiscovery.js +143 -103
  213. package/dist/roap/turnDiscovery.js.map +1 -1
  214. package/dist/statsAnalyzer/global.js +1 -95
  215. package/dist/statsAnalyzer/global.js.map +1 -1
  216. package/dist/statsAnalyzer/index.js +369 -461
  217. package/dist/statsAnalyzer/index.js.map +1 -1
  218. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  219. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  220. package/dist/transcription/index.js +13 -45
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +35 -0
  223. package/dist/types/annotation/constants.d.ts +31 -0
  224. package/dist/types/annotation/index.d.ts +124 -0
  225. package/dist/types/breakouts/breakout.d.ts +8 -0
  226. package/dist/types/breakouts/collection.d.ts +5 -0
  227. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  228. package/dist/types/breakouts/events.d.ts +2 -0
  229. package/dist/types/breakouts/index.d.ts +5 -0
  230. package/dist/types/breakouts/request.d.ts +22 -0
  231. package/dist/types/breakouts/utils.d.ts +15 -0
  232. package/dist/types/common/browser-detection.d.ts +9 -0
  233. package/dist/types/common/collection.d.ts +48 -0
  234. package/dist/types/common/config.d.ts +2 -0
  235. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  236. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  237. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  238. package/dist/types/common/errors/media.d.ts +15 -0
  239. package/dist/types/common/errors/parameter.d.ts +15 -0
  240. package/dist/types/common/errors/password-error.d.ts +15 -0
  241. package/dist/types/common/errors/permission.d.ts +14 -0
  242. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  243. package/dist/types/common/errors/reconnection.d.ts +15 -0
  244. package/dist/types/common/errors/stats.d.ts +15 -0
  245. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  246. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  247. package/dist/types/common/events/events-scope.d.ts +17 -0
  248. package/dist/types/common/events/events.d.ts +12 -0
  249. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  250. package/dist/types/common/events/util.d.ts +2 -0
  251. package/dist/types/common/logs/logger-config.d.ts +2 -0
  252. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  253. package/dist/types/common/logs/request.d.ts +34 -0
  254. package/dist/types/common/queue.d.ts +32 -0
  255. package/dist/types/config.d.ts +78 -0
  256. package/dist/types/constants.d.ts +991 -0
  257. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  258. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  259. package/dist/types/controls-options-manager/index.d.ts +136 -0
  260. package/dist/types/controls-options-manager/types.d.ts +43 -0
  261. package/dist/types/controls-options-manager/util.d.ts +1 -0
  262. package/dist/types/index.d.ts +7 -0
  263. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  264. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  265. package/dist/types/locus-info/fullState.d.ts +2 -0
  266. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  267. package/dist/types/locus-info/index.d.ts +315 -0
  268. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  269. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  270. package/dist/types/locus-info/parser.d.ts +212 -0
  271. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  272. package/dist/types/media/index.d.ts +34 -0
  273. package/dist/types/media/properties.d.ts +108 -0
  274. package/dist/types/media/util.d.ts +2 -0
  275. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  276. package/dist/types/meeting/in-meeting-actions.d.ts +147 -0
  277. package/dist/types/meeting/index.d.ts +1762 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +186 -0
  280. package/dist/types/meeting/request.d.ts +269 -0
  281. package/dist/types/meeting/request.type.d.ts +11 -0
  282. package/dist/types/meeting/state.d.ts +9 -0
  283. package/dist/types/meeting/util.d.ts +76 -0
  284. package/dist/types/meeting-info/collection.d.ts +20 -0
  285. package/dist/types/meeting-info/index.d.ts +57 -0
  286. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  287. package/dist/types/meeting-info/request.d.ts +22 -0
  288. package/dist/types/meeting-info/util.d.ts +2 -0
  289. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  290. package/dist/types/meetings/collection.d.ts +31 -0
  291. package/dist/types/meetings/index.d.ts +345 -0
  292. package/dist/types/meetings/request.d.ts +27 -0
  293. package/dist/types/meetings/util.d.ts +18 -0
  294. package/dist/types/member/index.d.ts +157 -0
  295. package/dist/types/member/types.d.ts +21 -0
  296. package/dist/types/member/util.d.ts +2 -0
  297. package/dist/types/members/collection.d.ts +29 -0
  298. package/dist/types/members/index.d.ts +353 -0
  299. package/dist/types/members/request.d.ts +114 -0
  300. package/dist/types/members/types.d.ts +24 -0
  301. package/dist/types/members/util.d.ts +210 -0
  302. package/dist/types/metrics/config.d.ts +195 -0
  303. package/dist/types/metrics/constants.d.ts +55 -0
  304. package/dist/types/metrics/index.d.ts +169 -0
  305. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  306. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  307. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  308. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  309. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  310. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  311. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  312. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  313. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  314. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  315. package/dist/types/reachability/index.d.ts +152 -0
  316. package/dist/types/reachability/request.d.ts +37 -0
  317. package/dist/types/reactions/constants.d.ts +3 -0
  318. package/dist/types/reactions/reactions.d.ts +4 -0
  319. package/dist/types/reactions/reactions.type.d.ts +52 -0
  320. package/dist/types/reconnection-manager/index.d.ts +126 -0
  321. package/dist/types/recording-controller/enums.d.ts +7 -0
  322. package/dist/types/recording-controller/index.d.ts +193 -0
  323. package/dist/types/recording-controller/util.d.ts +13 -0
  324. package/dist/types/roap/index.d.ts +77 -0
  325. package/dist/types/roap/request.d.ts +36 -0
  326. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  327. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  328. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  329. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  330. package/dist/types/transcription/index.d.ts +64 -0
  331. package/internal-README.md +7 -6
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +42 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +339 -0
  336. package/src/breakouts/README.md +220 -0
  337. package/src/breakouts/breakout.ts +163 -0
  338. package/src/breakouts/collection.ts +19 -0
  339. package/src/breakouts/edit-lock-error.ts +25 -0
  340. package/src/breakouts/events.ts +37 -0
  341. package/src/breakouts/index.ts +860 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/browser-detection.ts +9 -6
  345. package/src/common/collection.ts +3 -1
  346. package/src/common/errors/captcha-error.ts +6 -6
  347. package/src/common/errors/intent-to-join.ts +6 -6
  348. package/src/common/errors/join-meeting.ts +12 -8
  349. package/src/common/errors/media.ts +6 -6
  350. package/src/common/errors/parameter.ts +9 -6
  351. package/src/common/errors/password-error.ts +6 -6
  352. package/src/common/errors/permission.ts +5 -5
  353. package/src/common/errors/reconnection.ts +6 -6
  354. package/src/common/errors/stats.ts +6 -6
  355. package/src/common/errors/webex-errors.ts +7 -5
  356. package/src/common/errors/webex-meetings-error.ts +1 -1
  357. package/src/common/events/events-scope.ts +5 -1
  358. package/src/common/events/events.ts +5 -1
  359. package/src/common/events/trigger-proxy.ts +8 -3
  360. package/src/common/events/util.ts +1 -2
  361. package/src/common/logs/logger-proxy.ts +21 -10
  362. package/src/common/logs/request.ts +11 -8
  363. package/src/config.ts +16 -12
  364. package/src/constants.ts +151 -7
  365. package/src/controls-options-manager/constants.ts +5 -0
  366. package/src/controls-options-manager/enums.ts +18 -0
  367. package/src/controls-options-manager/index.ts +278 -0
  368. package/src/controls-options-manager/types.ts +59 -0
  369. package/src/controls-options-manager/util.ts +281 -0
  370. package/src/index.ts +33 -0
  371. package/src/locus-info/controlsUtils.ts +142 -24
  372. package/src/locus-info/fullState.ts +15 -11
  373. package/src/locus-info/hostUtils.ts +4 -3
  374. package/src/locus-info/index.ts +335 -55
  375. package/src/locus-info/infoUtils.ts +12 -4
  376. package/src/locus-info/mediaSharesUtils.ts +52 -4
  377. package/src/locus-info/parser.ts +46 -68
  378. package/src/locus-info/selfUtils.ts +187 -56
  379. package/src/media/index.ts +139 -196
  380. package/src/media/properties.ts +43 -36
  381. package/src/media/util.ts +1 -1
  382. package/src/mediaQualityMetrics/config.ts +380 -378
  383. package/src/meeting/in-meeting-actions.ts +159 -3
  384. package/src/meeting/index.ts +2789 -1584
  385. package/src/meeting/locusMediaRequest.ts +309 -0
  386. package/src/meeting/muteState.ts +290 -72
  387. package/src/meeting/request.ts +247 -178
  388. package/src/meeting/request.type.ts +13 -0
  389. package/src/meeting/state.ts +45 -30
  390. package/src/meeting/util.ts +445 -395
  391. package/src/meeting-info/collection.ts +2 -1
  392. package/src/meeting-info/index.ts +32 -30
  393. package/src/meeting-info/meeting-info-v2.ts +235 -116
  394. package/src/meeting-info/request.ts +9 -3
  395. package/src/meeting-info/util.ts +54 -46
  396. package/src/meeting-info/utilv2.ts +71 -55
  397. package/src/meetings/collection.ts +21 -1
  398. package/src/meetings/index.ts +772 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +132 -33
  401. package/src/member/index.ts +95 -49
  402. package/src/member/types.ts +24 -0
  403. package/src/member/util.ts +106 -13
  404. package/src/members/collection.ts +8 -1
  405. package/src/members/index.ts +288 -130
  406. package/src/members/request.ts +144 -31
  407. package/src/members/types.ts +28 -0
  408. package/src/members/util.ts +316 -235
  409. package/src/metrics/config.ts +302 -90
  410. package/src/metrics/constants.ts +2 -6
  411. package/src/metrics/index.ts +124 -95
  412. package/src/multistream/mediaRequestManager.ts +203 -45
  413. package/src/multistream/receiveSlot.ts +69 -26
  414. package/src/multistream/receiveSlotManager.ts +62 -38
  415. package/src/multistream/remoteMedia.ts +30 -4
  416. package/src/multistream/remoteMediaGroup.ts +4 -3
  417. package/src/multistream/remoteMediaManager.ts +230 -66
  418. package/src/networkQualityMonitor/index.ts +24 -27
  419. package/src/personal-meeting-room/index.ts +12 -16
  420. package/src/personal-meeting-room/request.ts +10 -3
  421. package/src/personal-meeting-room/util.ts +3 -3
  422. package/src/reachability/index.ts +131 -79
  423. package/src/reachability/request.ts +43 -34
  424. package/src/reactions/constants.ts +4 -0
  425. package/src/reactions/reactions.ts +8 -8
  426. package/src/reactions/reactions.type.ts +31 -5
  427. package/src/reconnection-manager/index.ts +193 -111
  428. package/src/recording-controller/enums.ts +8 -0
  429. package/src/recording-controller/index.ts +315 -0
  430. package/src/recording-controller/util.ts +58 -0
  431. package/src/roap/index.ts +53 -53
  432. package/src/roap/request.ts +77 -64
  433. package/src/roap/turnDiscovery.ts +101 -48
  434. package/src/statsAnalyzer/global.ts +8 -104
  435. package/src/statsAnalyzer/index.ts +624 -376
  436. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  437. package/src/transcription/index.ts +34 -32
  438. package/test/integration/spec/converged-space-meetings.js +177 -0
  439. package/test/integration/spec/journey.js +670 -466
  440. package/test/integration/spec/space-meeting.js +320 -204
  441. package/test/integration/spec/transcription.js +7 -8
  442. package/test/unit/spec/annotation/index.ts +433 -0
  443. package/test/unit/spec/breakouts/breakout.ts +203 -0
  444. package/test/unit/spec/breakouts/collection.ts +15 -0
  445. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  446. package/test/unit/spec/breakouts/events.ts +77 -0
  447. package/test/unit/spec/breakouts/index.ts +1609 -0
  448. package/test/unit/spec/breakouts/request.ts +104 -0
  449. package/test/unit/spec/breakouts/utils.js +72 -0
  450. package/test/unit/spec/common/browser-detection.js +9 -28
  451. package/test/unit/spec/controls-options-manager/index.js +287 -0
  452. package/test/unit/spec/controls-options-manager/util.js +504 -0
  453. package/test/unit/spec/fixture/locus.js +93 -90
  454. package/test/unit/spec/locus-info/controlsUtils.js +305 -32
  455. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  456. package/test/unit/spec/locus-info/index.js +598 -5
  457. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  458. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  459. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  460. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  461. package/test/unit/spec/locus-info/parser.js +3 -9
  462. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  463. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  464. package/test/unit/spec/media/index.ts +104 -8
  465. package/test/unit/spec/media/properties.ts +9 -9
  466. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -3
  467. package/test/unit/spec/meeting/index.js +3094 -921
  468. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  469. package/test/unit/spec/meeting/muteState.js +421 -94
  470. package/test/unit/spec/meeting/request.js +421 -79
  471. package/test/unit/spec/meeting/utils.js +326 -189
  472. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  473. package/test/unit/spec/meeting-info/request.js +7 -9
  474. package/test/unit/spec/meeting-info/util.js +11 -12
  475. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  476. package/test/unit/spec/meetings/collection.js +15 -1
  477. package/test/unit/spec/meetings/index.js +1126 -328
  478. package/test/unit/spec/meetings/utils.js +220 -14
  479. package/test/unit/spec/member/index.js +24 -1
  480. package/test/unit/spec/member/util.js +383 -32
  481. package/test/unit/spec/members/index.js +424 -55
  482. package/test/unit/spec/members/request.js +228 -40
  483. package/test/unit/spec/members/utils.js +191 -4
  484. package/test/unit/spec/metrics/index.js +113 -20
  485. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  486. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  487. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  488. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  489. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  490. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  491. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  492. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  493. package/test/unit/spec/reachability/index.ts +176 -27
  494. package/test/unit/spec/reachability/request.js +66 -0
  495. package/test/unit/spec/reconnection-manager/index.js +62 -31
  496. package/test/unit/spec/recording-controller/index.js +231 -0
  497. package/test/unit/spec/recording-controller/util.js +102 -0
  498. package/test/unit/spec/roap/index.ts +19 -49
  499. package/test/unit/spec/roap/request.ts +187 -0
  500. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  501. package/test/unit/spec/stats-analyzer/index.js +116 -60
  502. package/test/utils/cmr.js +44 -42
  503. package/test/utils/constants.js +9 -0
  504. package/test/utils/integrationTestUtils.js +64 -0
  505. package/test/utils/testUtils.js +63 -99
  506. package/test/utils/webex-config.js +22 -18
  507. package/test/utils/webex-test-users.js +57 -50
  508. package/tsconfig.json +6 -0
  509. package/dist/media/internal-media-core-wrapper.js +0 -22
  510. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  511. package/dist/meeting/effectsState.js +0 -334
  512. package/dist/meeting/effectsState.js.map +0 -1
  513. package/dist/multistream/multistreamMedia.js +0 -116
  514. package/dist/multistream/multistreamMedia.js.map +0 -1
  515. package/src/index.js +0 -15
  516. package/src/media/internal-media-core-wrapper.ts +0 -9
  517. package/src/meeting/effectsState.ts +0 -211
  518. package/src/multistream/multistreamMedia.ts +0 -92
  519. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -2,10 +2,9 @@ import sinon from 'sinon';
2
2
  import {assert} from '@webex/test-helper-chai';
3
3
  import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
4
4
  import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
5
- import LoggerConfig
6
- from '@webex/plugin-meetings/src/common/logs/logger-config';
5
+ import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
7
6
  import Metrics from '@webex/plugin-meetings/src/metrics/index';
8
-
7
+ import {DISPLAY_HINTS} from '@webex/plugin-meetings/src/constants';
9
8
 
10
9
  describe('plugin-meetings', () => {
11
10
  describe('Meeting utils function', () => {
@@ -18,23 +17,19 @@ describe('plugin-meetings', () => {
18
17
  info: sandbox.stub(),
19
18
  log: sandbox.stub(),
20
19
  error: sandbox.stub(),
21
- warn: sandbox.stub()
20
+ warn: sandbox.stub(),
22
21
  };
23
22
 
24
23
  LoggerConfig.set({
25
24
  verboseEvents: true,
26
- enable: true
25
+ enable: true,
27
26
  });
28
27
  LoggerProxy.set(logger);
29
28
 
30
- meeting.closeLocalStream = sinon.stub()
31
- .returns(Promise.resolve());
32
- meeting.closeLocalShare = sinon.stub()
33
- .returns(Promise.resolve());
34
- meeting.closeRemoteTracks = sinon.stub()
35
- .returns(Promise.resolve());
36
- meeting.closePeerConnections = sinon.stub()
37
- .returns(Promise.resolve());
29
+ meeting.closeLocalStream = sinon.stub().returns(Promise.resolve());
30
+ meeting.closeLocalShare = sinon.stub().returns(Promise.resolve());
31
+ meeting.closeRemoteTracks = sinon.stub().returns(Promise.resolve());
32
+ meeting.closePeerConnections = sinon.stub().returns(Promise.resolve());
38
33
 
39
34
  meeting.unsetLocalVideoTrack = sinon.stub();
40
35
  meeting.unsetLocalShareTrack = sinon.stub();
@@ -43,6 +38,8 @@ describe('plugin-meetings', () => {
43
38
  meeting.reconnectionManager = {cleanUp: sinon.stub()};
44
39
  meeting.stopKeepAlive = sinon.stub();
45
40
  meeting.updateLLMConnection = sinon.stub();
41
+ meeting.breakouts = {cleanUp: sinon.stub()};
42
+ meeting.annotaion = {cleanUp: sinon.stub()};
46
43
  });
47
44
 
48
45
  afterEach(() => {
@@ -65,16 +62,19 @@ describe('plugin-meetings', () => {
65
62
  assert.calledOnce(meeting.reconnectionManager.cleanUp);
66
63
  assert.calledOnce(meeting.stopKeepAlive);
67
64
  assert.calledOnce(meeting.updateLLMConnection);
65
+ assert.calledOnce(meeting.breakouts.cleanUp);
68
66
  });
69
67
  });
70
68
 
71
69
  describe('logging', () => {
72
70
  const fakeDevice = sinon.fake.returns({
73
- deviceId: 'device-1'
71
+ deviceId: 'device-1',
74
72
  });
75
73
 
76
74
  const mockTrack = {
77
- getSettings: fakeDevice
75
+ underlyingTrack: {
76
+ getSettings: fakeDevice,
77
+ },
78
78
  };
79
79
 
80
80
  it('#log - should log [info, warn, error, log] to console', () => {
@@ -124,10 +124,7 @@ describe('plugin-meetings', () => {
124
124
  });
125
125
 
126
126
  it('should log device settings', () => {
127
- const mockDevices = [
128
- {deviceId: 'device-1'},
129
- {deviceId: 'device-2'}
130
- ];
127
+ const mockDevices = [{deviceId: 'device-1'}, {deviceId: 'device-2'}];
131
128
 
132
129
  assert(MeetingUtil.handleDeviceLogging, 'is defined');
133
130
  MeetingUtil.handleDeviceLogging(mockDevices);
@@ -136,51 +133,181 @@ describe('plugin-meetings', () => {
136
133
  });
137
134
  });
138
135
 
139
- describe('remoteUpdateAudioVideo', () => {
140
- it('#Should call meetingRequest.remoteAudioVideoToggle with correct parameters (multistream)', async () => {
136
+ describe('addSequence', () => {
137
+ it('should add the sequence object to a request body', () => {
138
+ const body = {};
139
+
140
+ MeetingUtil.addSequence({
141
+ locusInfo: {
142
+ sequence: 'sequence'
143
+ }
144
+ }, body);
145
+
146
+ assert.deepEqual(body, {
147
+ sequence: 'sequence'
148
+ });
149
+ });
150
+
151
+ it('should work with an undefined meeting', () => {
152
+ const body = {};
153
+
154
+ MeetingUtil.addSequence(
155
+ undefined,
156
+ body
157
+ );
158
+
159
+ assert.deepEqual(body, {});
160
+ });
161
+
162
+ it('should work with an undefined locusInfo', () => {
163
+ const body = {};
164
+
165
+ MeetingUtil.addSequence({}, body);
166
+
167
+ assert.deepEqual(body, {});
168
+ });
169
+
170
+ it('should work with an undefined sequence', () => {
171
+ const body = {};
172
+
173
+ MeetingUtil.addSequence({locusInfo: {}}, body);
174
+
175
+ assert.deepEqual(body, {});
176
+ });
177
+ });
178
+
179
+ describe('updateLocusWithDelta', () => {
180
+ it('should call onDeltaLocus with the new delta locus', () => {
141
181
  const meeting = {
142
- correlationId: 'correlation id',
143
- isMultistream: true,
144
- mediaId: '12345',
145
- meetingJoinUrl: 'meetingJoinUrl',
146
- locusUrl: 'locusUrl',
147
- deviceUrl: 'some device url',
148
- selfId: 'self id',
149
- meetingRequest: {remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
182
+ locusInfo: {
183
+ onDeltaLocus: sinon.stub(),
184
+ }
185
+ }
186
+
187
+ const originalResponse = {
188
+ body: {
189
+ locus: 'locus'
190
+ }
150
191
  };
151
192
 
152
- await MeetingUtil.remoteUpdateAudioVideo(true, false, meeting);
193
+ const response = MeetingUtil.updateLocusWithDelta(meeting, originalResponse);
153
194
 
154
- assert.calledOnce(meeting.meetingRequest.remoteAudioVideoToggle);
155
- const parameter = meeting.meetingRequest.remoteAudioVideoToggle.getCall(0).args[0];
195
+ assert.deepEqual(response, originalResponse);
196
+ assert.calledOnceWithExactly(meeting.locusInfo.onDeltaLocus, 'locus');
197
+ });
156
198
 
157
- assert.equal(parameter.locusUrl, 'locusUrl');
158
- assert.equal(parameter.selfId, 'self id');
159
- assert.equal(parameter.correlationId, 'correlation id');
160
- assert.equal(parameter.deviceUrl, 'some device url');
161
- assert.deepEqual(parameter.localMedias, [{localSdp: '{"audioMuted":true,"videoMuted":false}', mediaId: '12345'}]);
162
- assert.equal(parameter.preferTranscoding, false);
199
+ it('should handle locus being missing from the response', () => {
200
+ const meeting = {
201
+ locusInfo: {
202
+ onDeltaLocus: sinon.stub(),
203
+ },
204
+ };
205
+
206
+ const originalResponse = {
207
+ body: {},
208
+ };
209
+
210
+ const response = MeetingUtil.updateLocusWithDelta(meeting, originalResponse);
211
+
212
+ assert.deepEqual(response, originalResponse);
213
+ assert.notCalled(meeting.locusInfo.onDeltaLocus);
163
214
  });
164
215
 
165
- it('#Should call meetingRequest.remoteAudioVideoToggle with preferTranscoding:true for non multistream connections', async () => {
216
+ it('should work with an undefined meeting', () => {
217
+ const originalResponse = {
218
+ body: {
219
+ locus: 'locus',
220
+ },
221
+ };
222
+
223
+ const response = MeetingUtil.updateLocusWithDelta(undefined, originalResponse);
224
+ assert.deepEqual(response, originalResponse);
225
+ });
226
+ });
227
+
228
+ describe('generateLocusDeltaRequest', () => {
229
+
230
+ afterEach(() => {
231
+ WeakRef.prototype.deref.restore();
232
+ });
233
+
234
+ it('generates the correct wrapper function', async () => {
235
+ const updateLocusWithDeltaSpy = sinon.spy(MeetingUtil, 'updateLocusWithDelta');
236
+ const addSequenceSpy = sinon.spy(MeetingUtil, 'addSequence');
237
+
166
238
  const meeting = {
167
- isMultistream: false,
168
- mediaId: '12345',
169
- meetingRequest: {remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
239
+ request: sinon.stub().returns(Promise.resolve('result')),
240
+ }
241
+
242
+ const locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
243
+
244
+ const options = {
245
+ some: 'option',
246
+ body: {}
170
247
  };
171
248
 
172
- await MeetingUtil.remoteUpdateAudioVideo(true, false, meeting);
249
+ let result = await locusDeltaRequest(options);
173
250
 
174
- assert.calledOnce(meeting.meetingRequest.remoteAudioVideoToggle);
175
- const parameter = meeting.meetingRequest.remoteAudioVideoToggle.getCall(0).args[0];
251
+ assert.equal(result, 'result');
252
+ assert.calledOnceWithExactly(updateLocusWithDeltaSpy, meeting, 'result');
253
+ assert.calledOnceWithExactly(addSequenceSpy, meeting, options.body);
176
254
 
177
- assert.equal(parameter.preferTranscoding, true);
255
+ updateLocusWithDeltaSpy.resetHistory();
256
+ addSequenceSpy.resetHistory();
257
+
258
+ // body missing from options
259
+ result = await locusDeltaRequest({});
260
+ assert.equal(result, 'result');
261
+ assert.calledOnceWithExactly(updateLocusWithDeltaSpy, meeting, 'result');
262
+ assert.calledOnceWithExactly(addSequenceSpy, meeting, options.body);
263
+
264
+ // meeting disappears so the WeakRef returns undefined
265
+ sinon.stub(WeakRef.prototype, 'deref').returns(undefined);
266
+
267
+ result = await locusDeltaRequest(options);
268
+ assert.equal(result, undefined);
269
+
270
+ });
271
+
272
+ });
273
+
274
+ describe('remoteUpdateAudioVideo', () => {
275
+ it('#Should call meetingRequest.locusMediaRequest with correct parameters', async () => {
276
+ const meeting = {
277
+ mediaId: '12345',
278
+ selfUrl: 'self url',
279
+ locusInfo: {
280
+ sequence: {},
281
+ },
282
+ locusMediaRequest: {
283
+ send: sinon.stub().resolves({body: {}, headers: {}}),
284
+ },
285
+ };
286
+
287
+ await MeetingUtil.remoteUpdateAudioVideo(meeting, true, false);
288
+
289
+ assert.calledOnceWithExactly(meeting.locusMediaRequest.send, {
290
+ mediaId: '12345',
291
+ muteOptions: {
292
+ audioMuted: true,
293
+ videoMuted: false,
294
+ },
295
+ selfUrl: 'self url',
296
+ sequence: {},
297
+ type: 'LocalMute',
298
+ });
178
299
  });
179
300
  });
180
301
 
181
302
  describe('joinMeeting', () => {
182
303
  it('#Should call `meetingRequest.joinMeeting', async () => {
183
- const meeting = {meetingJoinUrl: 'meetingJoinUrl', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
304
+ const meeting = {
305
+ meetingJoinUrl: 'meetingJoinUrl',
306
+ locusUrl: 'locusUrl',
307
+ meetingRequest: {
308
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
309
+ },
310
+ };
184
311
 
185
312
  MeetingUtil.parseLocusJoin = sinon.stub();
186
313
  await MeetingUtil.joinMeeting(meeting, {});
@@ -192,12 +319,70 @@ describe('plugin-meetings', () => {
192
319
  assert.equal(parameter.preferTranscoding, true);
193
320
  });
194
321
 
322
+ it('#Should call meetingRequest.joinMeeting with breakoutsSupported=true when passed in as true', async () => {
323
+ const meeting = {
324
+ meetingRequest: {
325
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
326
+ },
327
+ };
328
+
329
+ MeetingUtil.parseLocusJoin = sinon.stub();
330
+ await MeetingUtil.joinMeeting(meeting, {
331
+ breakoutsSupported: true,
332
+ });
333
+
334
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
335
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
336
+
337
+ assert.equal(parameter.breakoutsSupported, true);
338
+ });
339
+
340
+ it('#Should call meetingRequest.joinMeeting with liveAnnotationSupported=true when passed in as true', async () => {
341
+ const meeting = {
342
+ meetingRequest: {
343
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
344
+ },
345
+ };
346
+
347
+ MeetingUtil.parseLocusJoin = sinon.stub();
348
+ await MeetingUtil.joinMeeting(meeting, {
349
+ liveAnnotationSupported: true,
350
+ });
351
+
352
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
353
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
354
+
355
+ assert.equal(parameter.liveAnnotationSupported, true);
356
+ });
357
+
358
+ it('#Should call meetingRequest.joinMeeting with locale=en_UK, deviceCapabilities=["TEST"] when they are passed in as those values', async () => {
359
+ const meeting = {
360
+ meetingRequest: {
361
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
362
+ },
363
+ };
364
+
365
+ MeetingUtil.parseLocusJoin = sinon.stub();
366
+ await MeetingUtil.joinMeeting(meeting, {
367
+ locale: 'en_UK',
368
+ deviceCapabilities: ['TEST'],
369
+ });
370
+
371
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
372
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
373
+
374
+ assert.equal(parameter.locale, 'en_UK');
375
+ assert.deepEqual(parameter.deviceCapabilities, ['TEST']);
376
+ });
377
+
195
378
  it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
196
379
  const meeting = {
197
380
  isMultistream: true,
198
381
  meetingJoinUrl: 'meetingJoinUrl',
199
382
  locusUrl: 'locusUrl',
200
- meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
383
+ meetingRequest: {
384
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
385
+ },
201
386
  };
202
387
 
203
388
  MeetingUtil.parseLocusJoin = sinon.stub();
@@ -211,7 +396,13 @@ describe('plugin-meetings', () => {
211
396
  });
212
397
 
213
398
  it('#Should fallback sipUrl if meetingJoinUrl does not exists', async () => {
214
- const meeting = {sipUri: 'sipUri', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
399
+ const meeting = {
400
+ sipUri: 'sipUri',
401
+ locusUrl: 'locusUrl',
402
+ meetingRequest: {
403
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
404
+ },
405
+ };
215
406
 
216
407
  MeetingUtil.parseLocusJoin = sinon.stub();
217
408
  await MeetingUtil.joinMeeting(meeting, {});
@@ -223,7 +414,13 @@ describe('plugin-meetings', () => {
223
414
  });
224
415
 
225
416
  it('#Should fallback to meetingNumber if meetingJoinUrl/sipUrl does not exists', async () => {
226
- const meeting = {meetingNumber: 'meetingNumber', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
417
+ const meeting = {
418
+ meetingNumber: 'meetingNumber',
419
+ locusUrl: 'locusUrl',
420
+ meetingRequest: {
421
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
422
+ },
423
+ };
227
424
 
228
425
  MeetingUtil.parseLocusJoin = sinon.stub();
229
426
  await MeetingUtil.joinMeeting(meeting, {});
@@ -240,15 +437,9 @@ describe('plugin-meetings', () => {
240
437
  it('returns display hints', () => {
241
438
  assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo(), []);
242
439
 
243
- assert.deepEqual(
244
- MeetingUtil.getUserDisplayHintsFromLocusInfo({}),
245
- []
246
- );
440
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({}), []);
247
441
 
248
- assert.deepEqual(
249
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}),
250
- []
251
- );
442
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}), []);
252
443
 
253
444
  assert.deepEqual(
254
445
  MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {}}}),
@@ -256,7 +447,9 @@ describe('plugin-meetings', () => {
256
447
  );
257
448
 
258
449
  assert.deepEqual(
259
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {userDisplayHints: []}}}),
450
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({
451
+ parsedLocus: {info: {userDisplayHints: []}},
452
+ }),
260
453
  []
261
454
  );
262
455
 
@@ -264,11 +457,9 @@ describe('plugin-meetings', () => {
264
457
  MeetingUtil.getUserDisplayHintsFromLocusInfo({
265
458
  parsedLocus: {
266
459
  info: {
267
- userDisplayHints: [
268
- 'HINT_1'
269
- ]
270
- }
271
- }
460
+ userDisplayHints: ['HINT_1'],
461
+ },
462
+ },
272
463
  }),
273
464
  ['HINT_1']
274
465
  );
@@ -305,23 +496,55 @@ describe('plugin-meetings', () => {
305
496
 
306
497
  describe('canUserLowerSomeoneElsesHand', () => {
307
498
  it('works as expected', () => {
308
- assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']), true);
499
+ assert.deepEqual(
500
+ MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']),
501
+ true
502
+ );
309
503
  assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand([]), false);
310
504
  });
311
505
  });
312
506
 
507
+ describe('canUserRenameSelfAndObserved', () => {
508
+ it('works as expected', () => {
509
+ assert.deepEqual(
510
+ MeetingUtil.canUserRenameSelfAndObserved(['CAN_RENAME_SELF_AND_OBSERVED']),
511
+ true
512
+ );
513
+ assert.deepEqual(MeetingUtil.canUserRenameSelfAndObserved([]), false);
514
+ });
515
+ });
516
+
517
+ describe('canUserRenameOthers', () => {
518
+ it('works as expected', () => {
519
+ assert.deepEqual(MeetingUtil.canUserRenameOthers(['CAN_RENAME_OTHERS']), true);
520
+ assert.deepEqual(MeetingUtil.canUserRenameOthers([]), false);
521
+ });
522
+ });
523
+
313
524
  describe('bothLeaveAndEndMeetingAvailable', () => {
314
525
  it('works as expected', () => {
315
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']), true);
526
+ assert.deepEqual(
527
+ MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']),
528
+ true
529
+ );
316
530
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
317
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING', 'LEAVE_END_MEETING']), true);
531
+ assert.deepEqual(
532
+ MeetingUtil.bothLeaveAndEndMeetingAvailable([
533
+ 'LEAVE_TRANSFER_HOST_END_MEETING',
534
+ 'LEAVE_END_MEETING',
535
+ ]),
536
+ true
537
+ );
318
538
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
319
539
  });
320
540
  });
321
541
 
322
542
  describe('canUserLock', () => {
323
543
  it('works as expected', () => {
324
- assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']), true);
544
+ assert.deepEqual(
545
+ MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']),
546
+ true
547
+ );
325
548
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK']), false);
326
549
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_STATUS_UNLOCKED']), false);
327
550
  assert.deepEqual(MeetingUtil.canUserLock([]), false);
@@ -330,43 +553,18 @@ describe('plugin-meetings', () => {
330
553
 
331
554
  describe('canUserUnlock', () => {
332
555
  it('works as expected', () => {
333
- assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']), true);
556
+ assert.deepEqual(
557
+ MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']),
558
+ true
559
+ );
334
560
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK']), false);
335
561
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_STATUS_LOCKED']), false);
336
562
  assert.deepEqual(MeetingUtil.canUserUnlock([]), false);
337
563
  });
338
564
  });
339
565
 
340
- describe('canUserRecord', () => {
341
- it('works as expected', () => {
342
- assert.deepEqual(MeetingUtil.canUserRecord(['RECORDING_CONTROL_START']), true);
343
- assert.deepEqual(MeetingUtil.canUserRecord([]), false);
344
- });
345
- });
346
-
347
- describe('canUserPause', () => {
348
- it('works as expected', () => {
349
- assert.deepEqual(MeetingUtil.canUserPause(['RECORDING_CONTROL_PAUSE']), true);
350
- assert.deepEqual(MeetingUtil.canUserPause([]), false);
351
- });
352
- });
353
-
354
- describe('canUserResume', () => {
355
- it('works as expected', () => {
356
- assert.deepEqual(MeetingUtil.canUserResume(['RECORDING_CONTROL_RESUME']), true);
357
- assert.deepEqual(MeetingUtil.canUserResume([]), false);
358
- });
359
- });
360
-
361
-
362
- describe('canUserStop', () => {
363
- it('works as expected', () => {
364
- assert.deepEqual(MeetingUtil.canUserStop(['RECORDING_CONTROL_STOP']), true);
365
- assert.deepEqual(MeetingUtil.canUserStop([]), false);
366
- });
367
- });
368
-
369
566
  [
567
+ {functionName: 'isSaveTranscriptsEnabled', displayHint: 'SAVE_TRANSCRIPTS_ENABLED'},
370
568
  {functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
371
569
  {functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
372
570
  {functionName: 'canStopTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_STOP'},
@@ -385,105 +583,44 @@ describe('plugin-meetings', () => {
385
583
  });
386
584
  });
387
585
 
388
-
389
- describe('recording tests', () => {
390
- let request;
391
- let locusInfo;
392
- const locusUrl = 'locusUrl';
393
-
394
- beforeEach(() => {
395
- locusInfo = {
396
- parsedLocus: {
397
- info: {
398
- userDisplayHints: [
399
- 'RECORDING_CONTROL_START'
400
- ]
401
- }
402
- }
403
- };
404
- request = {
405
- recordMeeting: sinon.stub().returns(Promise.resolve())
406
- };
586
+ describe('canManageBreakout', () => {
587
+ it('works as expected', () => {
588
+ assert.deepEqual(MeetingUtil.canManageBreakout(['BREAKOUT_MANAGEMENT']), true);
589
+ assert.deepEqual(MeetingUtil.canManageBreakout([]), false);
407
590
  });
591
+ });
408
592
 
409
- describe('startRecording', () => {
410
- it('can start recording when the correct display hint is present', () => {
411
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
412
-
413
- const result = MeetingUtil.startRecording(request, locusUrl, locusInfo);
414
-
415
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
416
-
417
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
418
- });
419
-
420
- it('rejects when correct display hint is not present', () => {
421
- const result = MeetingUtil.startRecording(request, locusUrl, {});
422
-
423
- assert.notCalled(request.recordMeeting);
424
-
425
- assert.isRejected(result);
426
- });
593
+ describe('isSuppressBreakoutSupport', () => {
594
+ it('works as expected', () => {
595
+ assert.deepEqual(
596
+ MeetingUtil.isSuppressBreakoutSupport(['UCF_SUPPRESS_BREAKOUTS_SUPPORT']),
597
+ true
598
+ );
599
+ assert.deepEqual(MeetingUtil.isSuppressBreakoutSupport([]), false);
427
600
  });
601
+ });
428
602
 
429
- describe('pauseRecording', () => {
430
- it('can pause recording when the correct display hint is present', () => {
431
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
432
-
433
- const result = MeetingUtil.pauseRecording(request, locusUrl, locusInfo);
434
-
435
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: true});
436
-
437
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
438
- });
439
-
440
- it('rejects when correct display hint is not present', () => {
441
- const result = MeetingUtil.pauseRecording(request, locusUrl, {});
442
-
443
- assert.notCalled(request.recordMeeting);
444
-
445
- assert.isRejected(result);
446
- });
603
+ describe('canAdmitLobbyToBreakout', () => {
604
+ it('works as expected', () => {
605
+ assert.deepEqual(MeetingUtil.canAdmitLobbyToBreakout(['DISABLE_LOBBY_TO_BREAKOUT']), false);
606
+ assert.deepEqual(MeetingUtil.canAdmitLobbyToBreakout([]), true);
447
607
  });
608
+ });
448
609
 
449
- describe('resumeRecording', () => {
450
- it('can resume recording when the correct display hint is present', () => {
451
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
452
-
453
- const result = MeetingUtil.resumeRecording(request, locusUrl, locusInfo);
454
-
455
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
456
-
457
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
458
- });
459
-
460
- it('rejects when correct display hint is not present', () => {
461
- const result = MeetingUtil.resumeRecording(request, locusUrl, {});
462
-
463
- assert.notCalled(request.recordMeeting);
464
-
465
- assert.isRejected(result);
466
- });
610
+ describe('canUserAskForHelp', () => {
611
+ it('works as expected', () => {
612
+ assert.deepEqual(MeetingUtil.canUserAskForHelp(['DISABLE_ASK_FOR_HELP']), false);
613
+ assert.deepEqual(MeetingUtil.canUserAskForHelp([]), true);
467
614
  });
615
+ });
468
616
 
469
- describe('stopRecording', () => {
470
- it('can stop recording when the correct display hint is present', () => {
471
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
472
-
473
- const result = MeetingUtil.stopRecording(request, locusUrl, locusInfo);
474
-
475
- assert.calledWith(request.recordMeeting, {locusUrl, recording: false, paused: false});
476
-
477
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
478
- });
479
-
480
- it('rejects when correct display hint is not present', () => {
481
- const result = MeetingUtil.stopRecording(request, locusUrl, {});
482
-
483
- assert.notCalled(request.recordMeeting);
484
-
485
- assert.isRejected(result);
486
- });
617
+ describe('isBreakoutPreassignmentsEnabled', () => {
618
+ it('works as expected', () => {
619
+ assert.deepEqual(
620
+ MeetingUtil.isBreakoutPreassignmentsEnabled(['DISABLE_BREAKOUT_PREASSIGNMENTS']),
621
+ false
622
+ );
623
+ assert.deepEqual(MeetingUtil.isBreakoutPreassignmentsEnabled([]), true);
487
624
  });
488
625
  });
489
626
  });