@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.20

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -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/dist/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();
@@ -42,6 +37,8 @@ describe('plugin-meetings', () => {
42
37
  meeting.unsetPeerConnections = sinon.stub();
43
38
  meeting.reconnectionManager = {cleanUp: sinon.stub()};
44
39
  meeting.stopKeepAlive = sinon.stub();
40
+ meeting.updateLLMConnection = sinon.stub();
41
+ meeting.breakouts = {cleanUp: sinon.stub()};
45
42
  });
46
43
 
47
44
  afterEach(() => {
@@ -63,16 +60,18 @@ describe('plugin-meetings', () => {
63
60
  assert.calledOnce(meeting.unsetPeerConnections);
64
61
  assert.calledOnce(meeting.reconnectionManager.cleanUp);
65
62
  assert.calledOnce(meeting.stopKeepAlive);
63
+ assert.calledOnce(meeting.updateLLMConnection);
64
+ assert.calledOnce(meeting.breakouts.cleanUp);
66
65
  });
67
66
  });
68
67
 
69
68
  describe('logging', () => {
70
69
  const fakeDevice = sinon.fake.returns({
71
- deviceId: 'device-1'
70
+ deviceId: 'device-1',
72
71
  });
73
72
 
74
73
  const mockTrack = {
75
- getSettings: fakeDevice
74
+ getSettings: fakeDevice,
76
75
  };
77
76
 
78
77
  it('#log - should log [info, warn, error, log] to console', () => {
@@ -122,10 +121,7 @@ describe('plugin-meetings', () => {
122
121
  });
123
122
 
124
123
  it('should log device settings', () => {
125
- const mockDevices = [
126
- {deviceId: 'device-1'},
127
- {deviceId: 'device-2'}
128
- ];
124
+ const mockDevices = [{deviceId: 'device-1'}, {deviceId: 'device-2'}];
129
125
 
130
126
  assert(MeetingUtil.handleDeviceLogging, 'is defined');
131
127
  MeetingUtil.handleDeviceLogging(mockDevices);
@@ -144,7 +140,9 @@ describe('plugin-meetings', () => {
144
140
  locusUrl: 'locusUrl',
145
141
  deviceUrl: 'some device url',
146
142
  selfId: 'self id',
147
- meetingRequest: {remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
143
+ meetingRequest: {
144
+ remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
145
+ },
148
146
  };
149
147
 
150
148
  await MeetingUtil.remoteUpdateAudioVideo(true, false, meeting);
@@ -156,7 +154,9 @@ describe('plugin-meetings', () => {
156
154
  assert.equal(parameter.selfId, 'self id');
157
155
  assert.equal(parameter.correlationId, 'correlation id');
158
156
  assert.equal(parameter.deviceUrl, 'some device url');
159
- assert.deepEqual(parameter.localMedias, [{localSdp: '{"audioMuted":true,"videoMuted":false}', mediaId: '12345'}]);
157
+ assert.deepEqual(parameter.localMedias, [
158
+ {localSdp: '{"audioMuted":true,"videoMuted":false}', mediaId: '12345'},
159
+ ]);
160
160
  assert.equal(parameter.preferTranscoding, false);
161
161
  });
162
162
 
@@ -164,7 +164,9 @@ describe('plugin-meetings', () => {
164
164
  const meeting = {
165
165
  isMultistream: false,
166
166
  mediaId: '12345',
167
- meetingRequest: {remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
167
+ meetingRequest: {
168
+ remoteAudioVideoToggle: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
169
+ },
168
170
  };
169
171
 
170
172
  await MeetingUtil.remoteUpdateAudioVideo(true, false, meeting);
@@ -178,7 +180,13 @@ describe('plugin-meetings', () => {
178
180
 
179
181
  describe('joinMeeting', () => {
180
182
  it('#Should call `meetingRequest.joinMeeting', async () => {
181
- const meeting = {meetingJoinUrl: 'meetingJoinUrl', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
183
+ const meeting = {
184
+ meetingJoinUrl: 'meetingJoinUrl',
185
+ locusUrl: 'locusUrl',
186
+ meetingRequest: {
187
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
188
+ },
189
+ };
182
190
 
183
191
  MeetingUtil.parseLocusJoin = sinon.stub();
184
192
  await MeetingUtil.joinMeeting(meeting, {});
@@ -190,12 +198,31 @@ describe('plugin-meetings', () => {
190
198
  assert.equal(parameter.preferTranscoding, true);
191
199
  });
192
200
 
201
+ it('#Should call meetingRequest.joinMeeting with breakoutsSupported=true when passed in as true', async () => {
202
+ const meeting = {
203
+ meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
204
+ };
205
+
206
+ MeetingUtil.parseLocusJoin = sinon.stub();
207
+ await MeetingUtil.joinMeeting(meeting, {
208
+ breakoutsSupported: true
209
+ });
210
+
211
+ assert.calledOnce(meeting.meetingRequest.joinMeeting);
212
+ const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
213
+
214
+ assert.equal(parameter.breakoutsSupported, true);
215
+ });
216
+
217
+
193
218
  it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
194
219
  const meeting = {
195
220
  isMultistream: true,
196
221
  meetingJoinUrl: 'meetingJoinUrl',
197
222
  locusUrl: 'locusUrl',
198
- meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
223
+ meetingRequest: {
224
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
225
+ },
199
226
  };
200
227
 
201
228
  MeetingUtil.parseLocusJoin = sinon.stub();
@@ -209,7 +236,13 @@ describe('plugin-meetings', () => {
209
236
  });
210
237
 
211
238
  it('#Should fallback sipUrl if meetingJoinUrl does not exists', async () => {
212
- const meeting = {sipUri: 'sipUri', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
239
+ const meeting = {
240
+ sipUri: 'sipUri',
241
+ locusUrl: 'locusUrl',
242
+ meetingRequest: {
243
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
244
+ },
245
+ };
213
246
 
214
247
  MeetingUtil.parseLocusJoin = sinon.stub();
215
248
  await MeetingUtil.joinMeeting(meeting, {});
@@ -221,7 +254,13 @@ describe('plugin-meetings', () => {
221
254
  });
222
255
 
223
256
  it('#Should fallback to meetingNumber if meetingJoinUrl/sipUrl does not exists', async () => {
224
- const meeting = {meetingNumber: 'meetingNumber', locusUrl: 'locusUrl', meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}};
257
+ const meeting = {
258
+ meetingNumber: 'meetingNumber',
259
+ locusUrl: 'locusUrl',
260
+ meetingRequest: {
261
+ joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}})),
262
+ },
263
+ };
225
264
 
226
265
  MeetingUtil.parseLocusJoin = sinon.stub();
227
266
  await MeetingUtil.joinMeeting(meeting, {});
@@ -238,15 +277,9 @@ describe('plugin-meetings', () => {
238
277
  it('returns display hints', () => {
239
278
  assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo(), []);
240
279
 
241
- assert.deepEqual(
242
- MeetingUtil.getUserDisplayHintsFromLocusInfo({}),
243
- []
244
- );
280
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({}), []);
245
281
 
246
- assert.deepEqual(
247
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}),
248
- []
249
- );
282
+ assert.deepEqual(MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {}}), []);
250
283
 
251
284
  assert.deepEqual(
252
285
  MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {}}}),
@@ -254,7 +287,9 @@ describe('plugin-meetings', () => {
254
287
  );
255
288
 
256
289
  assert.deepEqual(
257
- MeetingUtil.getUserDisplayHintsFromLocusInfo({parsedLocus: {info: {userDisplayHints: []}}}),
290
+ MeetingUtil.getUserDisplayHintsFromLocusInfo({
291
+ parsedLocus: {info: {userDisplayHints: []}},
292
+ }),
258
293
  []
259
294
  );
260
295
 
@@ -262,11 +297,9 @@ describe('plugin-meetings', () => {
262
297
  MeetingUtil.getUserDisplayHintsFromLocusInfo({
263
298
  parsedLocus: {
264
299
  info: {
265
- userDisplayHints: [
266
- 'HINT_1'
267
- ]
268
- }
269
- }
300
+ userDisplayHints: ['HINT_1'],
301
+ },
302
+ },
270
303
  }),
271
304
  ['HINT_1']
272
305
  );
@@ -303,23 +336,38 @@ describe('plugin-meetings', () => {
303
336
 
304
337
  describe('canUserLowerSomeoneElsesHand', () => {
305
338
  it('works as expected', () => {
306
- assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']), true);
339
+ assert.deepEqual(
340
+ MeetingUtil.canUserLowerSomeoneElsesHand(['LOWER_SOMEONE_ELSES_HAND']),
341
+ true
342
+ );
307
343
  assert.deepEqual(MeetingUtil.canUserLowerSomeoneElsesHand([]), false);
308
344
  });
309
345
  });
310
346
 
311
347
  describe('bothLeaveAndEndMeetingAvailable', () => {
312
348
  it('works as expected', () => {
313
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']), true);
349
+ assert.deepEqual(
350
+ MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING']),
351
+ true
352
+ );
314
353
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_END_MEETING']), true);
315
- assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable(['LEAVE_TRANSFER_HOST_END_MEETING', 'LEAVE_END_MEETING']), true);
354
+ assert.deepEqual(
355
+ MeetingUtil.bothLeaveAndEndMeetingAvailable([
356
+ 'LEAVE_TRANSFER_HOST_END_MEETING',
357
+ 'LEAVE_END_MEETING',
358
+ ]),
359
+ true
360
+ );
316
361
  assert.deepEqual(MeetingUtil.bothLeaveAndEndMeetingAvailable([]), false);
317
362
  });
318
363
  });
319
364
 
320
365
  describe('canUserLock', () => {
321
366
  it('works as expected', () => {
322
- assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']), true);
367
+ assert.deepEqual(
368
+ MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK', 'LOCK_STATUS_UNLOCKED']),
369
+ true
370
+ );
323
371
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_CONTROL_LOCK']), false);
324
372
  assert.deepEqual(MeetingUtil.canUserLock(['LOCK_STATUS_UNLOCKED']), false);
325
373
  assert.deepEqual(MeetingUtil.canUserLock([]), false);
@@ -328,42 +376,16 @@ describe('plugin-meetings', () => {
328
376
 
329
377
  describe('canUserUnlock', () => {
330
378
  it('works as expected', () => {
331
- assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']), true);
379
+ assert.deepEqual(
380
+ MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK', 'LOCK_STATUS_LOCKED']),
381
+ true
382
+ );
332
383
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_CONTROL_UNLOCK']), false);
333
384
  assert.deepEqual(MeetingUtil.canUserUnlock(['LOCK_STATUS_LOCKED']), false);
334
385
  assert.deepEqual(MeetingUtil.canUserUnlock([]), false);
335
386
  });
336
387
  });
337
388
 
338
- describe('canUserRecord', () => {
339
- it('works as expected', () => {
340
- assert.deepEqual(MeetingUtil.canUserRecord(['RECORDING_CONTROL_START']), true);
341
- assert.deepEqual(MeetingUtil.canUserRecord([]), false);
342
- });
343
- });
344
-
345
- describe('canUserPause', () => {
346
- it('works as expected', () => {
347
- assert.deepEqual(MeetingUtil.canUserPause(['RECORDING_CONTROL_PAUSE']), true);
348
- assert.deepEqual(MeetingUtil.canUserPause([]), false);
349
- });
350
- });
351
-
352
- describe('canUserResume', () => {
353
- it('works as expected', () => {
354
- assert.deepEqual(MeetingUtil.canUserResume(['RECORDING_CONTROL_RESUME']), true);
355
- assert.deepEqual(MeetingUtil.canUserResume([]), false);
356
- });
357
- });
358
-
359
-
360
- describe('canUserStop', () => {
361
- it('works as expected', () => {
362
- assert.deepEqual(MeetingUtil.canUserStop(['RECORDING_CONTROL_STOP']), true);
363
- assert.deepEqual(MeetingUtil.canUserStop([]), false);
364
- });
365
- });
366
-
367
389
  [
368
390
  {functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
369
391
  {functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
@@ -383,106 +405,17 @@ describe('plugin-meetings', () => {
383
405
  });
384
406
  });
385
407
 
386
-
387
- describe('recording tests', () => {
388
- let request;
389
- let locusInfo;
390
- const locusUrl = 'locusUrl';
391
-
392
- beforeEach(() => {
393
- locusInfo = {
394
- parsedLocus: {
395
- info: {
396
- userDisplayHints: [
397
- 'RECORDING_CONTROL_START'
398
- ]
399
- }
400
- }
401
- };
402
- request = {
403
- recordMeeting: sinon.stub().returns(Promise.resolve())
404
- };
405
- });
406
-
407
- describe('startRecording', () => {
408
- it('can start recording when the correct display hint is present', () => {
409
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
410
-
411
- const result = MeetingUtil.startRecording(request, locusUrl, locusInfo);
412
-
413
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
414
-
415
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
416
- });
417
-
418
- it('rejects when correct display hint is not present', () => {
419
- const result = MeetingUtil.startRecording(request, locusUrl, {});
420
-
421
- assert.notCalled(request.recordMeeting);
422
-
423
- assert.isRejected(result);
424
- });
425
- });
426
-
427
- describe('pauseRecording', () => {
428
- it('can pause recording when the correct display hint is present', () => {
429
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
430
-
431
- const result = MeetingUtil.pauseRecording(request, locusUrl, locusInfo);
432
-
433
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: true});
434
-
435
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
436
- });
437
-
438
- it('rejects when correct display hint is not present', () => {
439
- const result = MeetingUtil.pauseRecording(request, locusUrl, {});
440
-
441
- assert.notCalled(request.recordMeeting);
442
-
443
- assert.isRejected(result);
408
+ describe('reactions', () => {
409
+ describe('canEnableReactions', () => {
410
+ [[null, DISPLAY_HINTS.ENABLE_REACTIONS, true], [null, DISPLAY_HINTS.DISABLE_REACTIONS, false], [null, undefined, null]].forEach(() => ([originalValue, displayHint, expected]) => {
411
+ assert.deepEqual(MeetingUtil.canEnableReactions(originalValue, [displayHint]), expected);
444
412
  });
445
413
  });
446
-
447
- describe('resumeRecording', () => {
448
- it('can resume recording when the correct display hint is present', () => {
449
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
450
-
451
- const result = MeetingUtil.resumeRecording(request, locusUrl, locusInfo);
452
-
453
- assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
454
-
455
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
456
- });
457
-
458
- it('rejects when correct display hint is not present', () => {
459
- const result = MeetingUtil.resumeRecording(request, locusUrl, {});
460
-
461
- assert.notCalled(request.recordMeeting);
462
-
463
- assert.isRejected(result);
464
- });
465
- });
466
-
467
- describe('stopRecording', () => {
468
- it('can stop recording when the correct display hint is present', () => {
469
- locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
470
-
471
- const result = MeetingUtil.stopRecording(request, locusUrl, locusInfo);
472
-
473
- assert.calledWith(request.recordMeeting, {locusUrl, recording: false, paused: false});
474
-
475
- assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
476
- });
477
-
478
- it('rejects when correct display hint is not present', () => {
479
- const result = MeetingUtil.stopRecording(request, locusUrl, {});
480
-
481
- assert.notCalled(request.recordMeeting);
482
-
483
- assert.isRejected(result);
414
+ describe('canEnableReactions', () => {
415
+ [[null, DISPLAY_HINTS.REACTIONS_ACTIVE, true], [null, DISPLAY_HINTS.REACTIONS_INACTIVE, false], [null, undefined, null]].forEach(([originalValue, displayHint, expected]) => {
416
+ assert.deepEqual(MeetingUtil.canSendReactions(originalValue, [displayHint]), expected);
484
417
  });
485
418
  });
486
419
  });
487
- });
420
+ })
488
421
  });