@webex/plugin-meetings 2.59.1 → 2.59.3-next.1

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 (417) hide show
  1. package/.eslintrc.js +6 -6
  2. package/LICENSE +1 -1
  3. package/README.md +1204 -1204
  4. package/UPGRADING.md +287 -287
  5. package/babel.config.js +3 -3
  6. package/browsers.js +108 -108
  7. package/dist/common/browser-detection.d.ts +9 -9
  8. package/dist/common/browser-detection.js.map +1 -1
  9. package/dist/common/collection.d.ts +48 -48
  10. package/dist/common/collection.js +43 -43
  11. package/dist/common/collection.js.map +1 -1
  12. package/dist/common/config.d.ts +2 -2
  13. package/dist/common/config.js.map +1 -1
  14. package/dist/common/errors/captcha-error.d.ts +15 -15
  15. package/dist/common/errors/captcha-error.js +7 -7
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.d.ts +16 -16
  18. package/dist/common/errors/intent-to-join.js +7 -7
  19. package/dist/common/errors/intent-to-join.js.map +1 -1
  20. package/dist/common/errors/join-meeting.d.ts +17 -17
  21. package/dist/common/errors/join-meeting.js +8 -8
  22. package/dist/common/errors/join-meeting.js.map +1 -1
  23. package/dist/common/errors/media.d.ts +15 -15
  24. package/dist/common/errors/media.js +7 -7
  25. package/dist/common/errors/media.js.map +1 -1
  26. package/dist/common/errors/parameter.d.ts +15 -15
  27. package/dist/common/errors/parameter.js +7 -7
  28. package/dist/common/errors/parameter.js.map +1 -1
  29. package/dist/common/errors/password-error.d.ts +15 -15
  30. package/dist/common/errors/password-error.js +7 -7
  31. package/dist/common/errors/password-error.js.map +1 -1
  32. package/dist/common/errors/permission.d.ts +14 -14
  33. package/dist/common/errors/permission.js +6 -6
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.d.ts +9 -9
  36. package/dist/common/errors/reconnection-in-progress.js +6 -6
  37. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  38. package/dist/common/errors/reconnection.d.ts +15 -15
  39. package/dist/common/errors/reconnection.js +7 -7
  40. package/dist/common/errors/reconnection.js.map +1 -1
  41. package/dist/common/errors/stats.d.ts +15 -15
  42. package/dist/common/errors/stats.js +7 -7
  43. package/dist/common/errors/stats.js.map +1 -1
  44. package/dist/common/errors/webex-errors.d.ts +81 -81
  45. package/dist/common/errors/webex-errors.js +42 -42
  46. package/dist/common/errors/webex-errors.js.map +1 -1
  47. package/dist/common/errors/webex-meetings-error.d.ts +20 -20
  48. package/dist/common/errors/webex-meetings-error.js +12 -12
  49. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  50. package/dist/common/events/events-scope.d.ts +17 -17
  51. package/dist/common/events/events-scope.js +10 -10
  52. package/dist/common/events/events-scope.js.map +1 -1
  53. package/dist/common/events/events.d.ts +12 -12
  54. package/dist/common/events/events.js +4 -4
  55. package/dist/common/events/events.js.map +1 -1
  56. package/dist/common/events/trigger-proxy.d.ts +2 -2
  57. package/dist/common/events/trigger-proxy.js.map +1 -1
  58. package/dist/common/events/util.d.ts +2 -2
  59. package/dist/common/events/util.js.map +1 -1
  60. package/dist/common/logs/logger-config.d.ts +2 -2
  61. package/dist/common/logs/logger-config.js.map +1 -1
  62. package/dist/common/logs/logger-proxy.d.ts +2 -2
  63. package/dist/common/logs/logger-proxy.js.map +1 -1
  64. package/dist/common/logs/request.d.ts +34 -34
  65. package/dist/common/logs/request.js +18 -18
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.d.ts +32 -32
  68. package/dist/common/queue.js +18 -18
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.d.ts +73 -73
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.d.ts +924 -924
  73. package/dist/constants.js +9 -9
  74. package/dist/constants.js.map +1 -1
  75. package/dist/controls-options-manager/constants.d.ts +4 -4
  76. package/dist/controls-options-manager/constants.js.map +1 -1
  77. package/dist/controls-options-manager/enums.d.ts +5 -5
  78. package/dist/controls-options-manager/enums.js.map +1 -1
  79. package/dist/controls-options-manager/index.d.ts +120 -120
  80. package/dist/controls-options-manager/index.js +81 -81
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/util.d.ts +7 -7
  83. package/dist/controls-options-manager/util.js.map +1 -1
  84. package/dist/index.d.ts +4 -4
  85. package/dist/index.js.map +1 -1
  86. package/dist/locus-info/controlsUtils.d.ts +2 -2
  87. package/dist/locus-info/controlsUtils.js +21 -21
  88. package/dist/locus-info/controlsUtils.js.map +1 -1
  89. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -2
  90. package/dist/locus-info/embeddedAppsUtils.js +14 -14
  91. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  92. package/dist/locus-info/fullState.d.ts +2 -2
  93. package/dist/locus-info/fullState.js.map +1 -1
  94. package/dist/locus-info/hostUtils.d.ts +2 -2
  95. package/dist/locus-info/hostUtils.js +19 -19
  96. package/dist/locus-info/hostUtils.js.map +1 -1
  97. package/dist/locus-info/index.d.ts +269 -269
  98. package/dist/locus-info/index.js +180 -180
  99. package/dist/locus-info/index.js.map +1 -1
  100. package/dist/locus-info/infoUtils.d.ts +2 -2
  101. package/dist/locus-info/infoUtils.js.map +1 -1
  102. package/dist/locus-info/mediaSharesUtils.d.ts +2 -2
  103. package/dist/locus-info/mediaSharesUtils.js +50 -50
  104. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  105. package/dist/locus-info/parser.d.ts +212 -212
  106. package/dist/locus-info/parser.js +136 -136
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.d.ts +2 -2
  109. package/dist/locus-info/selfUtils.js +52 -52
  110. package/dist/locus-info/selfUtils.js.map +1 -1
  111. package/dist/media/index.d.ts +32 -32
  112. package/dist/media/index.js +145 -145
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.d.ts +108 -108
  115. package/dist/media/properties.js +49 -49
  116. package/dist/media/properties.js.map +1 -1
  117. package/dist/media/util.d.ts +2 -2
  118. package/dist/media/util.js.map +1 -1
  119. package/dist/mediaQualityMetrics/config.d.ts +233 -233
  120. package/dist/mediaQualityMetrics/config.js.map +1 -1
  121. package/dist/meeting/effectsState.d.ts +42 -42
  122. package/dist/meeting/effectsState.js +24 -24
  123. package/dist/meeting/effectsState.js.map +1 -1
  124. package/dist/meeting/in-meeting-actions.d.ts +79 -79
  125. package/dist/meeting/in-meeting-actions.js +11 -11
  126. package/dist/meeting/in-meeting-actions.js.map +1 -1
  127. package/dist/meeting/index.d.ts +1621 -1621
  128. package/dist/meeting/index.js +1502 -1505
  129. package/dist/meeting/index.js.map +1 -1
  130. package/dist/meeting/muteState.d.ts +116 -116
  131. package/dist/meeting/muteState.js +85 -85
  132. package/dist/meeting/muteState.js.map +1 -1
  133. package/dist/meeting/request.d.ts +255 -255
  134. package/dist/meeting/request.js +141 -141
  135. package/dist/meeting/request.js.map +1 -1
  136. package/dist/meeting/state.d.ts +9 -9
  137. package/dist/meeting/state.js +30 -30
  138. package/dist/meeting/state.js.map +1 -1
  139. package/dist/meeting/util.d.ts +2 -2
  140. package/dist/meeting/util.js.map +1 -1
  141. package/dist/meeting-info/collection.d.ts +20 -20
  142. package/dist/meeting-info/collection.js +11 -11
  143. package/dist/meeting-info/collection.js.map +1 -1
  144. package/dist/meeting-info/index.d.ts +57 -57
  145. package/dist/meeting-info/index.js +50 -50
  146. package/dist/meeting-info/index.js.map +1 -1
  147. package/dist/meeting-info/meeting-info-v2.d.ts +93 -93
  148. package/dist/meeting-info/meeting-info-v2.js +52 -52
  149. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  150. package/dist/meeting-info/request.d.ts +22 -22
  151. package/dist/meeting-info/request.js +14 -14
  152. package/dist/meeting-info/request.js.map +1 -1
  153. package/dist/meeting-info/util.d.ts +2 -2
  154. package/dist/meeting-info/util.js +9 -9
  155. package/dist/meeting-info/util.js.map +1 -1
  156. package/dist/meeting-info/utilv2.d.ts +2 -2
  157. package/dist/meeting-info/utilv2.js +20 -20
  158. package/dist/meeting-info/utilv2.js.map +1 -1
  159. package/dist/meetings/collection.d.ts +23 -23
  160. package/dist/meetings/collection.js +14 -14
  161. package/dist/meetings/collection.js.map +1 -1
  162. package/dist/meetings/index.d.ts +296 -296
  163. package/dist/meetings/index.js +259 -259
  164. package/dist/meetings/index.js.map +1 -1
  165. package/dist/meetings/request.d.ts +27 -27
  166. package/dist/meetings/request.js +15 -15
  167. package/dist/meetings/request.js.map +1 -1
  168. package/dist/meetings/util.d.ts +18 -18
  169. package/dist/meetings/util.js +29 -29
  170. package/dist/meetings/util.js.map +1 -1
  171. package/dist/member/index.d.ts +147 -147
  172. package/dist/member/index.js +214 -214
  173. package/dist/member/index.js.map +1 -1
  174. package/dist/member/member.types.d.ts +11 -11
  175. package/dist/member/member.types.js.map +1 -1
  176. package/dist/member/util.d.ts +2 -2
  177. package/dist/member/util.js +60 -60
  178. package/dist/member/util.js.map +1 -1
  179. package/dist/members/collection.d.ts +24 -24
  180. package/dist/members/collection.js +11 -11
  181. package/dist/members/collection.js.map +1 -1
  182. package/dist/members/index.d.ts +298 -298
  183. package/dist/members/index.js +275 -275
  184. package/dist/members/index.js.map +1 -1
  185. package/dist/members/request.d.ts +50 -50
  186. package/dist/members/request.js +27 -27
  187. package/dist/members/request.js.map +1 -1
  188. package/dist/members/util.d.ts +2 -2
  189. package/dist/members/util.js +21 -21
  190. package/dist/members/util.js.map +1 -1
  191. package/dist/metrics/config.d.ts +169 -169
  192. package/dist/metrics/config.js.map +1 -1
  193. package/dist/metrics/constants.d.ts +57 -57
  194. package/dist/metrics/constants.js.map +1 -1
  195. package/dist/metrics/index.d.ts +152 -152
  196. package/dist/metrics/index.js +90 -90
  197. package/dist/metrics/index.js.map +1 -1
  198. package/dist/networkQualityMonitor/index.d.ts +70 -70
  199. package/dist/networkQualityMonitor/index.js +65 -65
  200. package/dist/networkQualityMonitor/index.js.map +1 -1
  201. package/dist/peer-connection-manager/index.d.ts +6 -6
  202. package/dist/peer-connection-manager/index.js +87 -87
  203. package/dist/peer-connection-manager/index.js.map +1 -1
  204. package/dist/peer-connection-manager/util.d.ts +6 -6
  205. package/dist/peer-connection-manager/util.js +9 -9
  206. package/dist/peer-connection-manager/util.js.map +1 -1
  207. package/dist/personal-meeting-room/index.d.ts +47 -47
  208. package/dist/personal-meeting-room/index.js +67 -67
  209. package/dist/personal-meeting-room/index.js.map +1 -1
  210. package/dist/personal-meeting-room/request.d.ts +14 -14
  211. package/dist/personal-meeting-room/request.js +7 -7
  212. package/dist/personal-meeting-room/request.js.map +1 -1
  213. package/dist/personal-meeting-room/util.d.ts +2 -2
  214. package/dist/personal-meeting-room/util.js.map +1 -1
  215. package/dist/reachability/index.d.ts +139 -139
  216. package/dist/reachability/index.js +110 -110
  217. package/dist/reachability/index.js.map +1 -1
  218. package/dist/reachability/request.d.ts +35 -35
  219. package/dist/reachability/request.js +15 -15
  220. package/dist/reachability/request.js.map +1 -1
  221. package/dist/reactions/reactions.d.ts +4 -4
  222. package/dist/reactions/reactions.js.map +1 -1
  223. package/dist/reactions/reactions.type.d.ts +32 -32
  224. package/dist/reactions/reactions.type.js.map +1 -1
  225. package/dist/reconnection-manager/index.d.ts +112 -112
  226. package/dist/reconnection-manager/index.js +112 -112
  227. package/dist/reconnection-manager/index.js.map +1 -1
  228. package/dist/recording-controller/enums.d.ts +7 -7
  229. package/dist/recording-controller/enums.js.map +1 -1
  230. package/dist/recording-controller/index.d.ts +193 -193
  231. package/dist/recording-controller/index.js +127 -127
  232. package/dist/recording-controller/index.js.map +1 -1
  233. package/dist/recording-controller/util.d.ts +13 -13
  234. package/dist/recording-controller/util.js.map +1 -1
  235. package/dist/roap/collection.d.ts +10 -10
  236. package/dist/roap/collection.js.map +1 -1
  237. package/dist/roap/handler.d.ts +47 -47
  238. package/dist/roap/handler.js +27 -27
  239. package/dist/roap/handler.js.map +1 -1
  240. package/dist/roap/index.d.ts +116 -116
  241. package/dist/roap/index.js +111 -111
  242. package/dist/roap/index.js.map +1 -1
  243. package/dist/roap/request.d.ts +35 -35
  244. package/dist/roap/request.js +17 -17
  245. package/dist/roap/request.js.map +1 -1
  246. package/dist/roap/state.d.ts +9 -9
  247. package/dist/roap/state.js +14 -14
  248. package/dist/roap/state.js.map +1 -1
  249. package/dist/roap/turnDiscovery.d.ts +67 -67
  250. package/dist/roap/turnDiscovery.js +46 -46
  251. package/dist/roap/turnDiscovery.js.map +1 -1
  252. package/dist/roap/util.d.ts +2 -2
  253. package/dist/roap/util.js.map +1 -1
  254. package/dist/statsAnalyzer/global.d.ts +126 -126
  255. package/dist/statsAnalyzer/global.js.map +1 -1
  256. package/dist/statsAnalyzer/index.d.ts +190 -190
  257. package/dist/statsAnalyzer/index.js +128 -128
  258. package/dist/statsAnalyzer/index.js.map +1 -1
  259. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -22
  260. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  261. package/dist/transcription/index.d.ts +64 -64
  262. package/dist/transcription/index.js +42 -42
  263. package/dist/transcription/index.js.map +1 -1
  264. package/internal-README.md +172 -172
  265. package/jest.config.js +3 -3
  266. package/package.json +22 -21
  267. package/process +1 -1
  268. package/src/common/browser-detection.ts +39 -39
  269. package/src/common/collection.ts +94 -94
  270. package/src/common/config.ts +9 -9
  271. package/src/common/errors/captcha-error.ts +25 -25
  272. package/src/common/errors/intent-to-join.ts +27 -27
  273. package/src/common/errors/join-meeting.ts +32 -32
  274. package/src/common/errors/media.ts +25 -25
  275. package/src/common/errors/parameter.ts +33 -33
  276. package/src/common/errors/password-error.ts +25 -25
  277. package/src/common/errors/permission.ts +24 -24
  278. package/src/common/errors/reconnection-in-progress.ts +8 -8
  279. package/src/common/errors/reconnection.ts +25 -25
  280. package/src/common/errors/stats.ts +25 -25
  281. package/src/common/errors/webex-errors.ts +140 -140
  282. package/src/common/errors/webex-meetings-error.ts +35 -35
  283. package/src/common/events/events-scope.ts +30 -30
  284. package/src/common/events/events.ts +25 -25
  285. package/src/common/events/trigger-proxy.ts +25 -25
  286. package/src/common/events/util.ts +39 -39
  287. package/src/common/logs/logger-config.ts +8 -8
  288. package/src/common/logs/logger-proxy.ts +44 -44
  289. package/src/common/logs/request.ts +65 -65
  290. package/src/common/queue.ts +50 -50
  291. package/src/config.ts +96 -96
  292. package/src/constants.ts +1121 -1121
  293. package/src/controls-options-manager/constants.ts +5 -5
  294. package/src/controls-options-manager/enums.ts +6 -6
  295. package/src/controls-options-manager/index.ts +183 -183
  296. package/src/controls-options-manager/util.ts +20 -20
  297. package/src/index.js +15 -15
  298. package/src/locus-info/controlsUtils.ts +112 -112
  299. package/src/locus-info/embeddedAppsUtils.ts +57 -57
  300. package/src/locus-info/fullState.ts +69 -69
  301. package/src/locus-info/hostUtils.ts +60 -60
  302. package/src/locus-info/index.ts +1303 -1303
  303. package/src/locus-info/infoUtils.ts +101 -101
  304. package/src/locus-info/mediaSharesUtils.ts +173 -173
  305. package/src/locus-info/parser.ts +680 -680
  306. package/src/locus-info/selfUtils.ts +428 -428
  307. package/src/media/index.ts +675 -675
  308. package/src/media/properties.ts +313 -313
  309. package/src/media/util.ts +37 -37
  310. package/src/mediaQualityMetrics/config.ts +382 -382
  311. package/src/meeting/effectsState.ts +209 -209
  312. package/src/meeting/in-meeting-actions.ts +153 -153
  313. package/src/meeting/index.ts +6537 -6543
  314. package/src/meeting/muteState.ts +365 -365
  315. package/src/meeting/request.ts +810 -810
  316. package/src/meeting/state.ts +194 -194
  317. package/src/meeting/util.ts +530 -530
  318. package/src/meeting-info/collection.ts +41 -41
  319. package/src/meeting-info/index.ts +137 -137
  320. package/src/meeting-info/meeting-info-v2.ts +273 -273
  321. package/src/meeting-info/request.ts +46 -46
  322. package/src/meeting-info/util.ts +314 -314
  323. package/src/meeting-info/utilv2.ts +324 -324
  324. package/src/meetings/collection.ts +43 -43
  325. package/src/meetings/index.ts +1128 -1128
  326. package/src/meetings/request.ts +81 -81
  327. package/src/meetings/util.ts +181 -181
  328. package/src/member/index.ts +446 -446
  329. package/src/member/member.types.ts +13 -13
  330. package/src/member/util.ts +286 -286
  331. package/src/members/collection.ts +40 -40
  332. package/src/members/index.ts +900 -900
  333. package/src/members/request.ts +175 -175
  334. package/src/members/util.ts +260 -260
  335. package/src/metrics/config.ts +485 -485
  336. package/src/metrics/constants.ts +61 -61
  337. package/src/metrics/index.ts +543 -543
  338. package/src/networkQualityMonitor/index.ts +211 -211
  339. package/src/peer-connection-manager/index.ts +847 -847
  340. package/src/peer-connection-manager/util.ts +119 -119
  341. package/src/personal-meeting-room/index.ts +157 -157
  342. package/src/personal-meeting-room/request.ts +48 -48
  343. package/src/personal-meeting-room/util.ts +49 -49
  344. package/src/reachability/index.ts +478 -478
  345. package/src/reachability/request.ts +81 -81
  346. package/src/reactions/reactions.ts +104 -104
  347. package/src/reactions/reactions.type.ts +36 -36
  348. package/src/reconnection-manager/index.ts +622 -622
  349. package/src/recording-controller/enums.ts +8 -8
  350. package/src/recording-controller/index.ts +315 -315
  351. package/src/recording-controller/util.ts +58 -58
  352. package/src/roap/collection.ts +62 -62
  353. package/src/roap/handler.ts +294 -294
  354. package/src/roap/index.ts +413 -413
  355. package/src/roap/request.ts +229 -229
  356. package/src/roap/state.ts +156 -156
  357. package/src/roap/turnDiscovery.ts +283 -283
  358. package/src/roap/util.ts +100 -100
  359. package/src/statsAnalyzer/global.ts +128 -128
  360. package/src/statsAnalyzer/index.ts +1266 -1266
  361. package/src/statsAnalyzer/mqaUtil.ts +290 -290
  362. package/src/transcription/index.ts +154 -154
  363. package/test/integration/spec/journey.js +941 -941
  364. package/test/integration/spec/space-meeting.js +457 -457
  365. package/test/integration/spec/transcription.js +55 -55
  366. package/test/unit/spec/common/browser-detection.js +119 -119
  367. package/test/unit/spec/common/queue.js +69 -69
  368. package/test/unit/spec/controls-options-manager/index.js +123 -123
  369. package/test/unit/spec/controls-options-manager/util.js +65 -65
  370. package/test/unit/spec/fixture/locus.js +406 -406
  371. package/test/unit/spec/locus-info/controlsUtils.js +82 -82
  372. package/test/unit/spec/locus-info/embeddedAppsUtils.js +104 -104
  373. package/test/unit/spec/locus-info/index.js +1272 -1272
  374. package/test/unit/spec/locus-info/infoUtils.js +138 -138
  375. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +975 -975
  376. package/test/unit/spec/locus-info/lib/SeqCmp.json +522 -522
  377. package/test/unit/spec/locus-info/lib/selfConstant.js +286 -286
  378. package/test/unit/spec/locus-info/parser.js +298 -298
  379. package/test/unit/spec/locus-info/selfUtils.js +185 -185
  380. package/test/unit/spec/media/properties.ts +305 -305
  381. package/test/unit/spec/meeting/effectsState.js +281 -281
  382. package/test/unit/spec/meeting/in-meeting-actions.ts +90 -90
  383. package/test/unit/spec/meeting/index.js +5227 -5227
  384. package/test/unit/spec/meeting/muteState.js +430 -430
  385. package/test/unit/spec/meeting/request.js +317 -317
  386. package/test/unit/spec/meeting/utils.js +319 -319
  387. package/test/unit/spec/meeting-info/meetinginfov2.js +376 -376
  388. package/test/unit/spec/meeting-info/request.js +64 -64
  389. package/test/unit/spec/meeting-info/util.js +37 -37
  390. package/test/unit/spec/meeting-info/utilv2.js +330 -330
  391. package/test/unit/spec/meetings/collection.js +52 -52
  392. package/test/unit/spec/meetings/index.js +1375 -1375
  393. package/test/unit/spec/meetings/utils.js +66 -66
  394. package/test/unit/spec/member/index.js +47 -47
  395. package/test/unit/spec/member/util.js +80 -80
  396. package/test/unit/spec/members/index.js +364 -364
  397. package/test/unit/spec/members/request.js +200 -200
  398. package/test/unit/spec/members/utils.js +42 -42
  399. package/test/unit/spec/metrics/index.js +111 -111
  400. package/test/unit/spec/networkQualityMonitor/index.js +99 -99
  401. package/test/unit/spec/peerconnection-manager/index.js +218 -218
  402. package/test/unit/spec/peerconnection-manager/utils.js +49 -49
  403. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -388
  404. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +29 -29
  405. package/test/unit/spec/reachability/index.ts +50 -50
  406. package/test/unit/spec/reconnection-manager/index.js +206 -206
  407. package/test/unit/spec/recording-controller/index.js +230 -230
  408. package/test/unit/spec/recording-controller/util.js +101 -101
  409. package/test/unit/spec/roap/index.ts +128 -128
  410. package/test/unit/spec/roap/turnDiscovery.ts +372 -372
  411. package/test/unit/spec/roap/util.js +30 -30
  412. package/test/unit/spec/stats-analyzer/index.js +287 -287
  413. package/test/utils/cmr.js +104 -104
  414. package/test/utils/testUtils.js +287 -287
  415. package/test/utils/webex-config.js +77 -77
  416. package/test/utils/webex-test-users.js +82 -82
  417. package/tsconfig.json +5 -5
@@ -1,319 +1,319 @@
1
- import sinon from 'sinon';
2
- import {assert} from '@webex/test-helper-chai';
3
- import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
4
- import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
5
- import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
6
- import Metrics from '@webex/plugin-meetings/src/metrics/index';
7
-
8
- describe('plugin-meetings', () => {
9
- describe('Meeting utils function', () => {
10
- const sandbox = sinon.createSandbox();
11
- const meeting = {};
12
-
13
- beforeEach(() => {
14
- Metrics.postEvent = sinon.stub();
15
- const logger = {
16
- info: sandbox.stub(),
17
- log: sandbox.stub(),
18
- error: sandbox.stub(),
19
- warn: sandbox.stub(),
20
- };
21
-
22
- LoggerConfig.set({
23
- verboseEvents: true,
24
- enable: true,
25
- });
26
- LoggerProxy.set(logger);
27
-
28
- meeting.closeLocalStream = sinon.stub().returns(Promise.resolve());
29
- meeting.closeLocalShare = sinon.stub().returns(Promise.resolve());
30
- meeting.closeRemoteTracks = sinon.stub().returns(Promise.resolve());
31
- meeting.closePeerConnections = sinon.stub().returns(Promise.resolve());
32
-
33
- meeting.unsetLocalVideoTrack = sinon.stub();
34
- meeting.unsetLocalShareTrack = sinon.stub();
35
- meeting.unsetRemoteTracks = sinon.stub();
36
- meeting.unsetPeerConnections = sinon.stub();
37
- meeting.reconnectionManager = {cleanUp: sinon.stub()};
38
- meeting.roap = {stop: sinon.stub()};
39
- meeting.stopKeepAlive = sinon.stub();
40
- });
41
-
42
- afterEach(() => {
43
- sandbox.restore();
44
- });
45
-
46
- describe('#cleanup', () => {
47
- it('do clean up on meeting object', async () => {
48
- await MeetingUtil.cleanUp(meeting);
49
- assert.calledOnce(meeting.closeLocalStream);
50
- assert.calledOnce(meeting.closeLocalStream);
51
- assert.calledOnce(meeting.closeLocalShare);
52
- assert.calledOnce(meeting.closeRemoteTracks);
53
- assert.calledOnce(meeting.closePeerConnections);
54
-
55
- assert.calledOnce(meeting.unsetLocalVideoTrack);
56
- assert.calledOnce(meeting.unsetLocalShareTrack);
57
- assert.calledOnce(meeting.unsetRemoteTracks);
58
- assert.calledOnce(meeting.unsetPeerConnections);
59
- assert.calledOnce(meeting.reconnectionManager.cleanUp);
60
- assert.calledOnce(meeting.roap.stop);
61
- assert.calledOnce(meeting.stopKeepAlive);
62
- });
63
- });
64
-
65
- describe('logging', () => {
66
- const fakeDevice = sinon.fake.returns({
67
- deviceId: 'device-1',
68
- });
69
-
70
- const mockTrack = {
71
- getSettings: fakeDevice,
72
- };
73
-
74
- it('#log - should log [info, warn, error, log] to console', () => {
75
- LoggerProxy.logger.log('test log');
76
- assert.calledOnce(LoggerProxy.logger.log);
77
-
78
- LoggerProxy.logger.info('test info');
79
- assert.calledOnce(LoggerProxy.logger.info);
80
-
81
- LoggerProxy.logger.error('test error');
82
- assert.calledOnce(LoggerProxy.logger.error);
83
-
84
- LoggerProxy.logger.warn('test warn');
85
- assert.calledOnce(LoggerProxy.logger.warn);
86
- });
87
-
88
- describe('#handleAudioLogging', () => {
89
- it('should not log if called without track', () => {
90
- MeetingUtil.handleAudioLogging();
91
- assert(!LoggerProxy.logger.log.called, 'log not called');
92
- });
93
-
94
- it('should log audioTrack settings', () => {
95
- assert(MeetingUtil.handleAudioLogging, 'method is defined');
96
- MeetingUtil.handleAudioLogging(mockTrack);
97
- assert(LoggerProxy.logger.log.called, 'log called');
98
- });
99
- });
100
-
101
- describe('#handleVideoLogging', () => {
102
- it('should not log if called without track', () => {
103
- MeetingUtil.handleVideoLogging(null);
104
- assert(!LoggerProxy.logger.log.called, 'log not called');
105
- });
106
-
107
- it('should log videoTrack settings', () => {
108
- assert(MeetingUtil.handleVideoLogging, 'method is defined');
109
- MeetingUtil.handleVideoLogging(mockTrack);
110
- assert(LoggerProxy.logger.log.called, 'log called');
111
- });
112
- });
113
-
114
- describe('#handleDeviceLogging', () => {
115
- it('should not log if called without devices', () => {
116
- MeetingUtil.handleDeviceLogging();
117
- assert(!LoggerProxy.logger.log.called, 'log not called');
118
- });
119
-
120
- it('should log device settings', () => {
121
- const mockDevices = [{deviceId: 'device-1'}, {deviceId: 'device-2'}];
122
-
123
- assert(MeetingUtil.handleDeviceLogging, 'is defined');
124
- MeetingUtil.handleDeviceLogging(mockDevices);
125
- assert(LoggerProxy.logger.log.called, 'log called');
126
- });
127
- });
128
- });
129
-
130
- describe('joinMeeting', () => {
131
- it('#Should call `meetingRequest.joinMeeting', async () => {
132
- const meeting = {
133
- meetingJoinUrl: 'meetingJoinUrl',
134
- locusUrl: 'locusUrl',
135
- meetingRequest: {
136
- joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
137
- },
138
- };
139
-
140
- MeetingUtil.parseLocusJoin = sinon.stub();
141
- await MeetingUtil.joinMeeting(meeting, {});
142
-
143
- assert.calledOnce(meeting.meetingRequest.joinMeeting);
144
- const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
145
-
146
- assert.equal(parameter.inviteeAddress, 'meetingJoinUrl');
147
- });
148
-
149
- it('#Should fallback sipUrl if meetingJoinUrl does not exists', async () => {
150
- const meeting = {
151
- sipUri: 'sipUri',
152
- locusUrl: 'locusUrl',
153
- meetingRequest: {
154
- joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
155
- },
156
- };
157
-
158
- MeetingUtil.parseLocusJoin = sinon.stub();
159
- await MeetingUtil.joinMeeting(meeting, {});
160
-
161
- assert.calledOnce(meeting.meetingRequest.joinMeeting);
162
- const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
163
-
164
- assert.equal(parameter.inviteeAddress, 'sipUri');
165
- });
166
-
167
- it('#Should fallback to meetingNumber if meetingJoinUrl/sipUrl does not exists', async () => {
168
- const meeting = {
169
- meetingNumber: 'meetingNumber',
170
- locusUrl: 'locusUrl',
171
- meetingRequest: {
172
- joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
173
- },
174
- };
175
-
176
- MeetingUtil.parseLocusJoin = sinon.stub();
177
- await MeetingUtil.joinMeeting(meeting, {});
178
-
179
- assert.calledOnce(meeting.meetingRequest.joinMeeting);
180
- const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
181
-
182
- assert.isUndefined(parameter.inviteeAddress);
183
- assert.equal(parameter.meetingNumber, 'meetingNumber');
184
- });
185
- });
186
-
187
- describe('getUserDisplayHintsFromLocusInfo', () => {
188
- it('returns display hints', () => {
189
- assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo(), []);
190
-
191
- assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({}), []);
192
-
193
- assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}), []);
194
-
195
- assert.deepEqual(
196
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {}}}),
197
- []
198
- );
199
-
200
- assert.deepEqual(
201
- MeetingUtil.getUserDisplayHintsFromLocusInfo({
202
- parsedLocus: {info: {userDisplayHints: []}},
203
- }),
204
- []
205
- );
206
-
207
- assert.deepEqual(
208
- MeetingUtil.getUserDisplayHintsFromLocusInfo({
209
- parsedLocus: {
210
- info: {
211
- userDisplayHints: ['HINT_1'],
212
- },
213
- },
214
- }),
215
- ['HINT_1']
216
- );
217
- });
218
- });
219
-
220
- describe('canInviteNewParticipants', () => {
221
- it('works as expected', () => {
222
- assert.deepEqual(MeetingUtil.canInviteNewParticipants(['ADD_GUEST']), true);
223
- assert.deepEqual(MeetingUtil.canInviteNewParticipants([]), false);
224
- });
225
- });
226
-
227
- describe('canAdmitParticipant', () => {
228
- it('works as expected', () => {
229
- assert.deepEqual(MeetingUtil.canAdmitParticipant(['ROSTER_WAITING_TO_JOIN']), true);
230
- assert.deepEqual(MeetingUtil.canAdmitParticipant([]), false);
231
- });
232
- });
233
-
234
- describe('canUserRaiseHand', () => {
235
- it('works as expected', () => {
236
- assert.deepEqual(MeetingUtil.canUserRaiseHand(['RAISE_HAND']), true);
237
- assert.deepEqual(MeetingUtil.canUserRaiseHand([]), false);
238
- });
239
- });
240
-
241
- describe('canUserLowerAllHands', () => {
242
- it('works as expected', () => {
243
- assert.deepEqual(MeetingUtil.canUserLowerAllHands(['LOWER_ALL_HANDS']), true);
244
- assert.deepEqual(MeetingUtil.canUserLowerAllHands([]), false);
245
- });
246
- });
247
-
248
- describe('canUserLowerSomeoneElsesHand', () => {
249
- it('works as expected', () => {
250
- assert.deepEqual(
251
- MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']),
252
- true
253
- );
254
- assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand([]), false);
255
- });
256
- });
257
-
258
- describe('bothLeaveAndEndMeetingAvailable', () => {
259
- it('works as expected', () => {
260
- assert.deepEqual(
261
- MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']),
262
- true
263
- );
264
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
265
- assert.deepEqual(
266
- MeetingUtil.bothLeaveAndEndMeetingAvailable([
267
- 'LEAVE_TRANSFER_HOST_END_MEETING',
268
- 'LEAVE_END_MEETING',
269
- ]),
270
- true
271
- );
272
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
273
- });
274
- });
275
-
276
- describe('canUserLock', () => {
277
- it('works as expected', () => {
278
- assert.deepEqual(
279
- MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']),
280
- true
281
- );
282
- assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK']), false);
283
- assert.deepEqual(MeetingUtil.canUserLock(['LOCK_STATUS_UNLOCKED']), false);
284
- assert.deepEqual(MeetingUtil.canUserLock([]), false);
285
- });
286
- });
287
-
288
- describe('canUserUnlock', () => {
289
- it('works as expected', () => {
290
- assert.deepEqual(
291
- MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']),
292
- true
293
- );
294
- assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK']), false);
295
- assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_STATUS_LOCKED']), false);
296
- assert.deepEqual(MeetingUtil.canUserUnlock([]), false);
297
- });
298
- });
299
-
300
- [
301
- {functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
302
- {functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
303
- {functionName: 'canStopTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_STOP'},
304
- {functionName: 'isClosedCaptionActive', displayHint: 'CAPTION_STATUS_ACTIVE'},
305
- {functionName: 'isWebexAssistantActive', displayHint: 'WEBEX_ASSISTANT_STATUS_ACTIVE'},
306
- {functionName: 'canViewCaptionPanel', displayHint: 'ENABLE_CAPTION_PANEL'},
307
- {functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
308
- {functionName: 'canSelectSpokenLanguages', displayHint: 'DISPLAY_NON_ENGLISH_ASR'},
309
- {functionName: 'waitingForOthersToJoin', displayHint: 'WAITING_FOR_OTHERS'},
310
- ].forEach(({functionName, displayHint}) => {
311
- describe(functionName, () => {
312
- it('works as expected', () => {
313
- assert.deepEqual(MeetingUtil[functionName]([displayHint]), true);
314
- assert.deepEqual(MeetingUtil[functionName]([]), false);
315
- });
316
- });
317
- });
318
- });
319
- });
1
+ import sinon from 'sinon';
2
+ import {assert} from '@webex/test-helper-chai';
3
+ import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
4
+ import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
5
+ import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
6
+ import Metrics from '@webex/plugin-meetings/src/metrics/index';
7
+
8
+ describe('plugin-meetings', () => {
9
+ describe('Meeting utils function', () => {
10
+ const sandbox = sinon.createSandbox();
11
+ const meeting = {};
12
+
13
+ beforeEach(() => {
14
+ Metrics.postEvent = sinon.stub();
15
+ const logger = {
16
+ info: sandbox.stub(),
17
+ log: sandbox.stub(),
18
+ error: sandbox.stub(),
19
+ warn: sandbox.stub(),
20
+ };
21
+
22
+ LoggerConfig.set({
23
+ verboseEvents: true,
24
+ enable: true,
25
+ });
26
+ LoggerProxy.set(logger);
27
+
28
+ meeting.closeLocalStream = sinon.stub().returns(Promise.resolve());
29
+ meeting.closeLocalShare = sinon.stub().returns(Promise.resolve());
30
+ meeting.closeRemoteTracks = sinon.stub().returns(Promise.resolve());
31
+ meeting.closePeerConnections = sinon.stub().returns(Promise.resolve());
32
+
33
+ meeting.unsetLocalVideoTrack = sinon.stub();
34
+ meeting.unsetLocalShareTrack = sinon.stub();
35
+ meeting.unsetRemoteTracks = sinon.stub();
36
+ meeting.unsetPeerConnections = sinon.stub();
37
+ meeting.reconnectionManager = {cleanUp: sinon.stub()};
38
+ meeting.roap = {stop: sinon.stub()};
39
+ meeting.stopKeepAlive = sinon.stub();
40
+ });
41
+
42
+ afterEach(() => {
43
+ sandbox.restore();
44
+ });
45
+
46
+ describe('#cleanup', () => {
47
+ it('do clean up on meeting object', async () => {
48
+ await MeetingUtil.cleanUp(meeting);
49
+ assert.calledOnce(meeting.closeLocalStream);
50
+ assert.calledOnce(meeting.closeLocalStream);
51
+ assert.calledOnce(meeting.closeLocalShare);
52
+ assert.calledOnce(meeting.closeRemoteTracks);
53
+ assert.calledOnce(meeting.closePeerConnections);
54
+
55
+ assert.calledOnce(meeting.unsetLocalVideoTrack);
56
+ assert.calledOnce(meeting.unsetLocalShareTrack);
57
+ assert.calledOnce(meeting.unsetRemoteTracks);
58
+ assert.calledOnce(meeting.unsetPeerConnections);
59
+ assert.calledOnce(meeting.reconnectionManager.cleanUp);
60
+ assert.calledOnce(meeting.roap.stop);
61
+ assert.calledOnce(meeting.stopKeepAlive);
62
+ });
63
+ });
64
+
65
+ describe('logging', () => {
66
+ const fakeDevice = sinon.fake.returns({
67
+ deviceId: 'device-1',
68
+ });
69
+
70
+ const mockTrack = {
71
+ getSettings: fakeDevice,
72
+ };
73
+
74
+ it('#log - should log [info, warn, error, log] to console', () => {
75
+ LoggerProxy.logger.log('test log');
76
+ assert.calledOnce(LoggerProxy.logger.log);
77
+
78
+ LoggerProxy.logger.info('test info');
79
+ assert.calledOnce(LoggerProxy.logger.info);
80
+
81
+ LoggerProxy.logger.error('test error');
82
+ assert.calledOnce(LoggerProxy.logger.error);
83
+
84
+ LoggerProxy.logger.warn('test warn');
85
+ assert.calledOnce(LoggerProxy.logger.warn);
86
+ });
87
+
88
+ describe('#handleAudioLogging', () => {
89
+ it('should not log if called without track', () => {
90
+ MeetingUtil.handleAudioLogging();
91
+ assert(!LoggerProxy.logger.log.called, 'log not called');
92
+ });
93
+
94
+ it('should log audioTrack settings', () => {
95
+ assert(MeetingUtil.handleAudioLogging, 'method is defined');
96
+ MeetingUtil.handleAudioLogging(mockTrack);
97
+ assert(LoggerProxy.logger.log.called, 'log called');
98
+ });
99
+ });
100
+
101
+ describe('#handleVideoLogging', () => {
102
+ it('should not log if called without track', () => {
103
+ MeetingUtil.handleVideoLogging(null);
104
+ assert(!LoggerProxy.logger.log.called, 'log not called');
105
+ });
106
+
107
+ it('should log videoTrack settings', () => {
108
+ assert(MeetingUtil.handleVideoLogging, 'method is defined');
109
+ MeetingUtil.handleVideoLogging(mockTrack);
110
+ assert(LoggerProxy.logger.log.called, 'log called');
111
+ });
112
+ });
113
+
114
+ describe('#handleDeviceLogging', () => {
115
+ it('should not log if called without devices', () => {
116
+ MeetingUtil.handleDeviceLogging();
117
+ assert(!LoggerProxy.logger.log.called, 'log not called');
118
+ });
119
+
120
+ it('should log device settings', () => {
121
+ const mockDevices = [{deviceId: 'device-1'}, {deviceId: 'device-2'}];
122
+
123
+ assert(MeetingUtil.handleDeviceLogging, 'is defined');
124
+ MeetingUtil.handleDeviceLogging(mockDevices);
125
+ assert(LoggerProxy.logger.log.called, 'log called');
126
+ });
127
+ });
128
+ });
129
+
130
+ describe('joinMeeting', () => {
131
+ it('#Should call `meetingRequest.joinMeeting', async () => {
132
+ const meeting = {
133
+ meetingJoinUrl: 'meetingJoinUrl',
134
+ locusUrl: 'locusUrl',
135
+ meetingRequest: {
136
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
137
+ },
138
+ };
139
+
140
+ MeetingUtil.parseLocusJoin = sinon.stub();
141
+ await MeetingUtil.joinMeeting(meeting, {});
142
+
143
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
144
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
145
+
146
+ assert.equal(parameter.inviteeAddress, 'meetingJoinUrl');
147
+ });
148
+
149
+ it('#Should fallback sipUrl if meetingJoinUrl does not exists', async () => {
150
+ const meeting = {
151
+ sipUri: 'sipUri',
152
+ locusUrl: 'locusUrl',
153
+ meetingRequest: {
154
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
155
+ },
156
+ };
157
+
158
+ MeetingUtil.parseLocusJoin = sinon.stub();
159
+ await MeetingUtil.joinMeeting(meeting, {});
160
+
161
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
162
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
163
+
164
+ assert.equal(parameter.inviteeAddress, 'sipUri');
165
+ });
166
+
167
+ it('#Should fallback to meetingNumber if meetingJoinUrl/sipUrl does not exists', async () => {
168
+ const meeting = {
169
+ meetingNumber: 'meetingNumber',
170
+ locusUrl: 'locusUrl',
171
+ meetingRequest: {
172
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
173
+ },
174
+ };
175
+
176
+ MeetingUtil.parseLocusJoin = sinon.stub();
177
+ await MeetingUtil.joinMeeting(meeting, {});
178
+
179
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
180
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
181
+
182
+ assert.isUndefined(parameter.inviteeAddress);
183
+ assert.equal(parameter.meetingNumber, 'meetingNumber');
184
+ });
185
+ });
186
+
187
+ describe('getUserDisplayHintsFromLocusInfo', () => {
188
+ it('returns display hints', () => {
189
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo(), []);
190
+
191
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({}), []);
192
+
193
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}), []);
194
+
195
+ assert.deepEqual(
196
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {}}}),
197
+ []
198
+ );
199
+
200
+ assert.deepEqual(
201
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({
202
+ parsedLocus: {info: {userDisplayHints: []}},
203
+ }),
204
+ []
205
+ );
206
+
207
+ assert.deepEqual(
208
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({
209
+ parsedLocus: {
210
+ info: {
211
+ userDisplayHints: ['HINT_1'],
212
+ },
213
+ },
214
+ }),
215
+ ['HINT_1']
216
+ );
217
+ });
218
+ });
219
+
220
+ describe('canInviteNewParticipants', () => {
221
+ it('works as expected', () => {
222
+ assert.deepEqual(MeetingUtil.canInviteNewParticipants(['ADD_GUEST']), true);
223
+ assert.deepEqual(MeetingUtil.canInviteNewParticipants([]), false);
224
+ });
225
+ });
226
+
227
+ describe('canAdmitParticipant', () => {
228
+ it('works as expected', () => {
229
+ assert.deepEqual(MeetingUtil.canAdmitParticipant(['ROSTER_WAITING_TO_JOIN']), true);
230
+ assert.deepEqual(MeetingUtil.canAdmitParticipant([]), false);
231
+ });
232
+ });
233
+
234
+ describe('canUserRaiseHand', () => {
235
+ it('works as expected', () => {
236
+ assert.deepEqual(MeetingUtil.canUserRaiseHand(['RAISE_HAND']), true);
237
+ assert.deepEqual(MeetingUtil.canUserRaiseHand([]), false);
238
+ });
239
+ });
240
+
241
+ describe('canUserLowerAllHands', () => {
242
+ it('works as expected', () => {
243
+ assert.deepEqual(MeetingUtil.canUserLowerAllHands(['LOWER_ALL_HANDS']), true);
244
+ assert.deepEqual(MeetingUtil.canUserLowerAllHands([]), false);
245
+ });
246
+ });
247
+
248
+ describe('canUserLowerSomeoneElsesHand', () => {
249
+ it('works as expected', () => {
250
+ assert.deepEqual(
251
+ MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']),
252
+ true
253
+ );
254
+ assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand([]), false);
255
+ });
256
+ });
257
+
258
+ describe('bothLeaveAndEndMeetingAvailable', () => {
259
+ it('works as expected', () => {
260
+ assert.deepEqual(
261
+ MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']),
262
+ true
263
+ );
264
+ assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
265
+ assert.deepEqual(
266
+ MeetingUtil.bothLeaveAndEndMeetingAvailable([
267
+ 'LEAVE_TRANSFER_HOST_END_MEETING',
268
+ 'LEAVE_END_MEETING',
269
+ ]),
270
+ true
271
+ );
272
+ assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
273
+ });
274
+ });
275
+
276
+ describe('canUserLock', () => {
277
+ it('works as expected', () => {
278
+ assert.deepEqual(
279
+ MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']),
280
+ true
281
+ );
282
+ assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK']), false);
283
+ assert.deepEqual(MeetingUtil.canUserLock(['LOCK_STATUS_UNLOCKED']), false);
284
+ assert.deepEqual(MeetingUtil.canUserLock([]), false);
285
+ });
286
+ });
287
+
288
+ describe('canUserUnlock', () => {
289
+ it('works as expected', () => {
290
+ assert.deepEqual(
291
+ MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']),
292
+ true
293
+ );
294
+ assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK']), false);
295
+ assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_STATUS_LOCKED']), false);
296
+ assert.deepEqual(MeetingUtil.canUserUnlock([]), false);
297
+ });
298
+ });
299
+
300
+ [
301
+ {functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
302
+ {functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
303
+ {functionName: 'canStopTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_STOP'},
304
+ {functionName: 'isClosedCaptionActive', displayHint: 'CAPTION_STATUS_ACTIVE'},
305
+ {functionName: 'isWebexAssistantActive', displayHint: 'WEBEX_ASSISTANT_STATUS_ACTIVE'},
306
+ {functionName: 'canViewCaptionPanel', displayHint: 'ENABLE_CAPTION_PANEL'},
307
+ {functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
308
+ {functionName: 'canSelectSpokenLanguages', displayHint: 'DISPLAY_NON_ENGLISH_ASR'},
309
+ {functionName: 'waitingForOthersToJoin', displayHint: 'WAITING_FOR_OTHERS'},
310
+ ].forEach(({functionName, displayHint}) => {
311
+ describe(functionName, () => {
312
+ it('works as expected', () => {
313
+ assert.deepEqual(MeetingUtil[functionName]([displayHint]), true);
314
+ assert.deepEqual(MeetingUtil[functionName]([]), false);
315
+ });
316
+ });
317
+ });
318
+ });
319
+ });