@webex/plugin-meetings 3.0.0-beta.12 → 3.0.0-beta.121

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 +357 -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 +995 -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 +196 -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 +95 -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 +67 -14
  113. package/dist/meeting/in-meeting-actions.js.map +1 -1
  114. package/dist/meeting/index.js +2506 -2444
  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 +462 -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 +675 -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 +177 -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 +3 -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 +987 -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 +137 -0
  277. package/dist/types/meeting/index.d.ts +1755 -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 +54 -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 +861 -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 +144 -6
  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 +148 -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 +139 -3
  384. package/src/meeting/index.ts +2733 -1589
  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 +444 -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 +749 -437
  399. package/src/meetings/request.ts +29 -25
  400. package/src/meetings/util.ts +122 -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 +1 -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 +436 -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 +1611 -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 +297 -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 +66 -3
  467. package/test/unit/spec/meeting/index.js +2908 -887
  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 +308 -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 +1052 -329
  478. package/test/unit/spec/meetings/utils.js +163 -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,52 @@ 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 locale=en_UK, deviceCapabilities=["TEST"] when they are passed in as those values', 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
+ locale: 'en_UK',
350
+ deviceCapabilities: ['TEST'],
351
+ });
352
+
353
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
354
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
355
+
356
+ assert.equal(parameter.locale, 'en_UK');
357
+ assert.deepEqual(parameter.deviceCapabilities, ['TEST']);
358
+ });
359
+
195
360
  it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
196
361
  const meeting = {
197
362
  isMultistream: true,
198
363
  meetingJoinUrl: 'meetingJoinUrl',
199
364
  locusUrl: 'locusUrl',
200
- meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
365
+ meetingRequest: {
366
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
367
+ },
201
368
  };
202
369
 
203
370
  MeetingUtil.parseLocusJoin = sinon.stub();
@@ -211,7 +378,13 @@ describe('plugin-meetings', () => {
211
378
  });
212
379
 
213
380
  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: {}}))}};
381
+ const meeting = {
382
+ sipUri: 'sipUri',
383
+ locusUrl: 'locusUrl',
384
+ meetingRequest: {
385
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
386
+ },
387
+ };
215
388
 
216
389
  MeetingUtil.parseLocusJoin = sinon.stub();
217
390
  await MeetingUtil.joinMeeting(meeting, {});
@@ -223,7 +396,13 @@ describe('plugin-meetings', () => {
223
396
  });
224
397
 
225
398
  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: {}}))}};
399
+ const meeting = {
400
+ meetingNumber: 'meetingNumber',
401
+ locusUrl: 'locusUrl',
402
+ meetingRequest: {
403
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
404
+ },
405
+ };
227
406
 
228
407
  MeetingUtil.parseLocusJoin = sinon.stub();
229
408
  await MeetingUtil.joinMeeting(meeting, {});
@@ -240,15 +419,9 @@ describe('plugin-meetings', () => {
240
419
  it('returns display hints', () => {
241
420
  assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo(), []);
242
421
 
243
- assert.deepEqual(
244
- MeetingUtil.getUserDisplayHintsFromLocusInfo({}),
245
- []
246
- );
422
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({}), []);
247
423
 
248
- assert.deepEqual(
249
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}),
250
- []
251
- );
424
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}), []);
252
425
 
253
426
  assert.deepEqual(
254
427
  MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {}}}),
@@ -256,7 +429,9 @@ describe('plugin-meetings', () => {
256
429
  );
257
430
 
258
431
  assert.deepEqual(
259
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {userDisplayHints: []}}}),
432
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({
433
+ parsedLocus: {info: {userDisplayHints: []}},
434
+ }),
260
435
  []
261
436
  );
262
437
 
@@ -264,11 +439,9 @@ describe('plugin-meetings', () => {
264
439
  MeetingUtil.getUserDisplayHintsFromLocusInfo({
265
440
  parsedLocus: {
266
441
  info: {
267
- userDisplayHints: [
268
- 'HINT_1'
269
- ]
270
- }
271
- }
442
+ userDisplayHints: ['HINT_1'],
443
+ },
444
+ },
272
445
  }),
273
446
  ['HINT_1']
274
447
  );
@@ -305,23 +478,55 @@ describe('plugin-meetings', () => {
305
478
 
306
479
  describe('canUserLowerSomeoneElsesHand', () => {
307
480
  it('works as expected', () => {
308
- assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']), true);
481
+ assert.deepEqual(
482
+ MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']),
483
+ true
484
+ );
309
485
  assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand([]), false);
310
486
  });
311
487
  });
312
488
 
489
+ describe('canUserRenameSelfAndObserved', () => {
490
+ it('works as expected', () => {
491
+ assert.deepEqual(
492
+ MeetingUtil.canUserRenameSelfAndObserved(['CAN_RENAME_SELF_AND_OBSERVED']),
493
+ true
494
+ );
495
+ assert.deepEqual(MeetingUtil.canUserRenameSelfAndObserved([]), false);
496
+ });
497
+ });
498
+
499
+ describe('canUserRenameOthers', () => {
500
+ it('works as expected', () => {
501
+ assert.deepEqual(MeetingUtil.canUserRenameOthers(['CAN_RENAME_OTHERS']), true);
502
+ assert.deepEqual(MeetingUtil.canUserRenameOthers([]), false);
503
+ });
504
+ });
505
+
313
506
  describe('bothLeaveAndEndMeetingAvailable', () => {
314
507
  it('works as expected', () => {
315
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']), true);
508
+ assert.deepEqual(
509
+ MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']),
510
+ true
511
+ );
316
512
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
317
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING', 'LEAVE_END_MEETING']), true);
513
+ assert.deepEqual(
514
+ MeetingUtil.bothLeaveAndEndMeetingAvailable([
515
+ 'LEAVE_TRANSFER_HOST_END_MEETING',
516
+ 'LEAVE_END_MEETING',
517
+ ]),
518
+ true
519
+ );
318
520
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
319
521
  });
320
522
  });
321
523
 
322
524
  describe('canUserLock', () => {
323
525
  it('works as expected', () => {
324
- assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']), true);
526
+ assert.deepEqual(
527
+ MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']),
528
+ true
529
+ );
325
530
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK']), false);
326
531
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_STATUS_UNLOCKED']), false);
327
532
  assert.deepEqual(MeetingUtil.canUserLock([]), false);
@@ -330,43 +535,18 @@ describe('plugin-meetings', () => {
330
535
 
331
536
  describe('canUserUnlock', () => {
332
537
  it('works as expected', () => {
333
- assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']), true);
538
+ assert.deepEqual(
539
+ MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']),
540
+ true
541
+ );
334
542
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK']), false);
335
543
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_STATUS_LOCKED']), false);
336
544
  assert.deepEqual(MeetingUtil.canUserUnlock([]), false);
337
545
  });
338
546
  });
339
547
 
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
548
  [
549
+ {functionName: 'isSaveTranscriptsEnabled', displayHint: 'SAVE_TRANSCRIPTS_ENABLED'},
370
550
  {functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
371
551
  {functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
372
552
  {functionName: 'canStopTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_STOP'},
@@ -385,105 +565,44 @@ describe('plugin-meetings', () => {
385
565
  });
386
566
  });
387
567
 
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
- };
568
+ describe('canManageBreakout', () => {
569
+ it('works as expected', () => {
570
+ assert.deepEqual(MeetingUtil.canManageBreakout(['BREAKOUT_MANAGEMENT']), true);
571
+ assert.deepEqual(MeetingUtil.canManageBreakout([]), false);
407
572
  });
573
+ });
408
574
 
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
- });
575
+ describe('isSuppressBreakoutSupport', () => {
576
+ it('works as expected', () => {
577
+ assert.deepEqual(
578
+ MeetingUtil.isSuppressBreakoutSupport(['UCF_SUPPRESS_BREAKOUTS_SUPPORT']),
579
+ true
580
+ );
581
+ assert.deepEqual(MeetingUtil.isSuppressBreakoutSupport([]), false);
427
582
  });
583
+ });
428
584
 
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
- });
585
+ describe('canAdmitLobbyToBreakout', () => {
586
+ it('works as expected', () => {
587
+ assert.deepEqual(MeetingUtil.canAdmitLobbyToBreakout(['DISABLE_LOBBY_TO_BREAKOUT']), false);
588
+ assert.deepEqual(MeetingUtil.canAdmitLobbyToBreakout([]), true);
447
589
  });
590
+ });
448
591
 
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
- });
592
+ describe('canUserAskForHelp', () => {
593
+ it('works as expected', () => {
594
+ assert.deepEqual(MeetingUtil.canUserAskForHelp(['DISABLE_ASK_FOR_HELP']), false);
595
+ assert.deepEqual(MeetingUtil.canUserAskForHelp([]), true);
467
596
  });
597
+ });
468
598
 
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
- });
599
+ describe('isBreakoutPreassignmentsEnabled', () => {
600
+ it('works as expected', () => {
601
+ assert.deepEqual(
602
+ MeetingUtil.isBreakoutPreassignmentsEnabled(['DISABLE_BREAKOUT_PREASSIGNMENTS']),
603
+ false
604
+ );
605
+ assert.deepEqual(MeetingUtil.isBreakoutPreassignmentsEnabled([]), true);
487
606
  });
488
607
  });
489
608
  });