@webex/plugin-meetings 3.6.0 → 3.7.0-ipv6-multi-turn-urls.2

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 (332) hide show
  1. package/README.md +2 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/join-webinar-error.js +50 -0
  5. package/dist/common/errors/join-webinar-error.js.map +1 -0
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +54 -4
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +1 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/index.js +10 -3
  13. package/dist/controls-options-manager/index.js.map +1 -1
  14. package/dist/controls-options-manager/types.js.map +1 -1
  15. package/dist/controls-options-manager/util.js +12 -0
  16. package/dist/controls-options-manager/util.js.map +1 -1
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/interpretation/index.js +1 -1
  20. package/dist/interpretation/siLanguage.js +1 -1
  21. package/dist/locus-info/controlsUtils.js +28 -4
  22. package/dist/locus-info/controlsUtils.js.map +1 -1
  23. package/dist/locus-info/fullState.js +2 -1
  24. package/dist/locus-info/fullState.js.map +1 -1
  25. package/dist/locus-info/index.js +61 -3
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/locus-info/parser.js +5 -1
  28. package/dist/locus-info/parser.js.map +1 -1
  29. package/dist/media/index.js +29 -1
  30. package/dist/media/index.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +29 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +807 -540
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +2 -6
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +5 -2
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +21 -29
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/util.js +98 -61
  42. package/dist/meeting/util.js.map +1 -1
  43. package/dist/meeting-info/meeting-info-v2.js +80 -17
  44. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  45. package/dist/meetings/index.js +29 -2
  46. package/dist/meetings/index.js.map +1 -1
  47. package/dist/members/index.js +3 -2
  48. package/dist/members/index.js.map +1 -1
  49. package/dist/members/util.js +13 -7
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +4 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/remoteMedia.js +34 -15
  54. package/dist/multistream/remoteMedia.js.map +1 -1
  55. package/dist/reachability/clusterReachability.js +12 -15
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.js +433 -136
  58. package/dist/reachability/index.js.map +1 -1
  59. package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
  60. package/dist/reachability/reachability.types.js.map +1 -0
  61. package/dist/reachability/request.js +23 -9
  62. package/dist/reachability/request.js.map +1 -1
  63. package/dist/recording-controller/enums.js +8 -4
  64. package/dist/recording-controller/enums.js.map +1 -1
  65. package/dist/recording-controller/index.js +18 -9
  66. package/dist/recording-controller/index.js.map +1 -1
  67. package/dist/recording-controller/util.js +13 -9
  68. package/dist/recording-controller/util.js.map +1 -1
  69. package/dist/roap/index.js +5 -7
  70. package/dist/roap/index.js.map +1 -1
  71. package/dist/roap/request.js +45 -79
  72. package/dist/roap/request.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +3 -6
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/{common/errors/parameter.d.ts → types/common/errors/join-webinar-error.d.ts} +4 -5
  76. package/dist/types/config.d.ts +3 -0
  77. package/dist/types/constants.d.ts +43 -0
  78. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  79. package/dist/types/controls-options-manager/index.d.ts +2 -1
  80. package/dist/types/controls-options-manager/types.d.ts +2 -0
  81. package/dist/types/index.d.ts +2 -1
  82. package/dist/types/locus-info/index.d.ts +9 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  84. package/dist/types/meeting/index.d.ts +34 -3
  85. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  86. package/dist/types/meeting/muteState.d.ts +2 -1
  87. package/dist/types/meeting/request.d.ts +2 -2
  88. package/dist/types/meeting/util.d.ts +2 -2
  89. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  90. package/dist/types/meetings/index.d.ts +13 -1
  91. package/dist/types/members/index.d.ts +2 -1
  92. package/dist/types/members/util.d.ts +5 -1
  93. package/dist/types/metrics/constants.d.ts +3 -0
  94. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  95. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  96. package/dist/types/reachability/index.d.ts +74 -35
  97. package/dist/types/reachability/reachability.types.d.ts +64 -0
  98. package/dist/types/reachability/request.d.ts +5 -1
  99. package/dist/types/recording-controller/enums.d.ts +5 -2
  100. package/dist/types/recording-controller/index.d.ts +1 -0
  101. package/dist/types/recording-controller/util.d.ts +2 -1
  102. package/dist/types/roap/request.d.ts +1 -13
  103. package/dist/webinar/index.js +382 -19
  104. package/dist/webinar/index.js.map +1 -1
  105. package/package.json +22 -22
  106. package/src/common/errors/join-webinar-error.ts +24 -0
  107. package/src/config.ts +3 -0
  108. package/src/constants.ts +52 -0
  109. package/src/controls-options-manager/enums.ts +1 -0
  110. package/src/controls-options-manager/index.ts +19 -2
  111. package/src/controls-options-manager/types.ts +2 -0
  112. package/src/controls-options-manager/util.ts +12 -0
  113. package/src/index.ts +2 -0
  114. package/src/locus-info/controlsUtils.ts +46 -2
  115. package/src/locus-info/fullState.ts +1 -0
  116. package/src/locus-info/index.ts +60 -0
  117. package/src/locus-info/parser.ts +8 -1
  118. package/src/media/index.ts +15 -0
  119. package/src/meeting/in-meeting-actions.ts +58 -0
  120. package/src/meeting/index.ts +268 -32
  121. package/src/meeting/locusMediaRequest.ts +4 -8
  122. package/src/meeting/muteState.ts +6 -2
  123. package/src/meeting/request.ts +4 -11
  124. package/src/meeting/util.ts +31 -6
  125. package/src/meeting-info/meeting-info-v2.ts +63 -0
  126. package/src/meetings/index.ts +74 -40
  127. package/src/members/index.ts +4 -2
  128. package/src/members/util.ts +4 -1
  129. package/src/metrics/constants.ts +3 -0
  130. package/src/multistream/remoteMedia.ts +33 -15
  131. package/src/reachability/clusterReachability.ts +5 -15
  132. package/src/reachability/index.ts +285 -77
  133. package/src/reachability/reachability.types.ts +85 -0
  134. package/src/reachability/request.ts +55 -30
  135. package/src/recording-controller/enums.ts +5 -2
  136. package/src/recording-controller/index.ts +17 -4
  137. package/src/recording-controller/util.ts +20 -5
  138. package/src/roap/index.ts +4 -5
  139. package/src/roap/request.ts +32 -44
  140. package/src/roap/turnDiscovery.ts +2 -4
  141. package/src/webinar/index.ts +223 -17
  142. package/test/unit/spec/controls-options-manager/index.js +56 -32
  143. package/test/unit/spec/controls-options-manager/util.js +44 -0
  144. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  145. package/test/unit/spec/locus-info/index.js +88 -2
  146. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  147. package/test/unit/spec/meeting/index.js +407 -82
  148. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  149. package/test/unit/spec/meeting/muteState.js +8 -4
  150. package/test/unit/spec/meeting/request.js +3 -26
  151. package/test/unit/spec/meeting/utils.js +71 -14
  152. package/test/unit/spec/meeting-info/meetinginfov2.js +42 -0
  153. package/test/unit/spec/meetings/index.js +41 -6
  154. package/test/unit/spec/members/index.js +25 -2
  155. package/test/unit/spec/members/request.js +37 -3
  156. package/test/unit/spec/members/utils.js +110 -1
  157. package/test/unit/spec/multistream/remoteMedia.ts +27 -9
  158. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  159. package/test/unit/spec/reachability/index.ts +265 -1
  160. package/test/unit/spec/reachability/request.js +56 -15
  161. package/test/unit/spec/recording-controller/index.js +61 -5
  162. package/test/unit/spec/recording-controller/util.js +39 -3
  163. package/test/unit/spec/roap/index.ts +1 -1
  164. package/test/unit/spec/roap/request.ts +51 -109
  165. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  166. package/test/unit/spec/webinar/index.ts +443 -14
  167. package/dist/annotation/annotation.types.d.ts +0 -42
  168. package/dist/annotation/constants.d.ts +0 -31
  169. package/dist/annotation/index.d.ts +0 -117
  170. package/dist/breakouts/breakout.d.ts +0 -8
  171. package/dist/breakouts/collection.d.ts +0 -5
  172. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  173. package/dist/breakouts/events.d.ts +0 -8
  174. package/dist/breakouts/index.d.ts +0 -5
  175. package/dist/breakouts/request.d.ts +0 -22
  176. package/dist/breakouts/utils.d.ts +0 -15
  177. package/dist/common/browser-detection.d.ts +0 -9
  178. package/dist/common/collection.d.ts +0 -48
  179. package/dist/common/config.d.ts +0 -2
  180. package/dist/common/errors/captcha-error.d.ts +0 -15
  181. package/dist/common/errors/intent-to-join.d.ts +0 -16
  182. package/dist/common/errors/join-meeting.d.ts +0 -17
  183. package/dist/common/errors/media.d.ts +0 -15
  184. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  185. package/dist/common/errors/password-error.d.ts +0 -15
  186. package/dist/common/errors/permission.d.ts +0 -14
  187. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  188. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  189. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  190. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  191. package/dist/common/errors/reconnection-in-progress.js +0 -33
  192. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  193. package/dist/common/errors/reconnection.d.ts +0 -15
  194. package/dist/common/errors/stats.d.ts +0 -15
  195. package/dist/common/errors/webex-errors.d.ts +0 -93
  196. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  197. package/dist/common/events/events-scope.d.ts +0 -17
  198. package/dist/common/events/events.d.ts +0 -12
  199. package/dist/common/events/trigger-proxy.d.ts +0 -2
  200. package/dist/common/events/util.d.ts +0 -2
  201. package/dist/common/logs/logger-config.d.ts +0 -2
  202. package/dist/common/logs/logger-proxy.d.ts +0 -2
  203. package/dist/common/logs/request.d.ts +0 -36
  204. package/dist/common/queue.d.ts +0 -34
  205. package/dist/config.d.ts +0 -72
  206. package/dist/constants.d.ts +0 -1088
  207. package/dist/controls-options-manager/constants.d.ts +0 -4
  208. package/dist/controls-options-manager/enums.d.ts +0 -15
  209. package/dist/controls-options-manager/index.d.ts +0 -136
  210. package/dist/controls-options-manager/types.d.ts +0 -43
  211. package/dist/controls-options-manager/util.d.ts +0 -1
  212. package/dist/index.d.ts +0 -7
  213. package/dist/interceptors/index.d.ts +0 -2
  214. package/dist/interceptors/locusRetry.d.ts +0 -27
  215. package/dist/interpretation/collection.d.ts +0 -5
  216. package/dist/interpretation/index.d.ts +0 -5
  217. package/dist/interpretation/siLanguage.d.ts +0 -5
  218. package/dist/locus-info/controlsUtils.d.ts +0 -2
  219. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  220. package/dist/locus-info/fullState.d.ts +0 -2
  221. package/dist/locus-info/hostUtils.d.ts +0 -2
  222. package/dist/locus-info/index.d.ts +0 -322
  223. package/dist/locus-info/infoUtils.d.ts +0 -2
  224. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  225. package/dist/locus-info/parser.d.ts +0 -272
  226. package/dist/locus-info/selfUtils.d.ts +0 -2
  227. package/dist/media/index.d.ts +0 -34
  228. package/dist/media/properties.d.ts +0 -93
  229. package/dist/media/util.d.ts +0 -2
  230. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  231. package/dist/mediaQualityMetrics/config.js +0 -502
  232. package/dist/mediaQualityMetrics/config.js.map +0 -1
  233. package/dist/meeting/effectsState.js +0 -260
  234. package/dist/meeting/effectsState.js.map +0 -1
  235. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  236. package/dist/meeting/index.d.ts +0 -1825
  237. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  238. package/dist/meeting/muteState.d.ts +0 -178
  239. package/dist/meeting/request.d.ts +0 -295
  240. package/dist/meeting/request.type.d.ts +0 -11
  241. package/dist/meeting/state.d.ts +0 -9
  242. package/dist/meeting/util.d.ts +0 -119
  243. package/dist/meeting/voicea-meeting.d.ts +0 -16
  244. package/dist/meeting-info/collection.d.ts +0 -20
  245. package/dist/meeting-info/index.d.ts +0 -69
  246. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  247. package/dist/meeting-info/request.d.ts +0 -22
  248. package/dist/meeting-info/util.d.ts +0 -2
  249. package/dist/meeting-info/utilv2.d.ts +0 -2
  250. package/dist/meetings/collection.d.ts +0 -40
  251. package/dist/meetings/index.d.ts +0 -390
  252. package/dist/meetings/meetings.types.d.ts +0 -4
  253. package/dist/meetings/request.d.ts +0 -27
  254. package/dist/meetings/util.d.ts +0 -18
  255. package/dist/member/index.d.ts +0 -160
  256. package/dist/member/member.types.js +0 -17
  257. package/dist/member/member.types.js.map +0 -1
  258. package/dist/member/types.d.ts +0 -32
  259. package/dist/member/util.d.ts +0 -2
  260. package/dist/members/collection.d.ts +0 -29
  261. package/dist/members/index.d.ts +0 -353
  262. package/dist/members/request.d.ts +0 -114
  263. package/dist/members/types.d.ts +0 -25
  264. package/dist/members/util.d.ts +0 -215
  265. package/dist/metrics/config.js +0 -276
  266. package/dist/metrics/config.js.map +0 -1
  267. package/dist/metrics/constants.d.ts +0 -70
  268. package/dist/metrics/index.d.ts +0 -45
  269. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  270. package/dist/multistream/receiveSlot.d.ts +0 -68
  271. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  272. package/dist/multistream/remoteMedia.d.ts +0 -72
  273. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  274. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  275. package/dist/multistream/sendSlotManager.d.ts +0 -69
  276. package/dist/networkQualityMonitor/index.d.ts +0 -70
  277. package/dist/networkQualityMonitor/index.js +0 -221
  278. package/dist/networkQualityMonitor/index.js.map +0 -1
  279. package/dist/peer-connection-manager/index.js +0 -671
  280. package/dist/peer-connection-manager/index.js.map +0 -1
  281. package/dist/peer-connection-manager/util.js +0 -109
  282. package/dist/peer-connection-manager/util.js.map +0 -1
  283. package/dist/personal-meeting-room/index.d.ts +0 -47
  284. package/dist/personal-meeting-room/request.d.ts +0 -14
  285. package/dist/personal-meeting-room/util.d.ts +0 -2
  286. package/dist/reachability/clusterReachability.d.ts +0 -109
  287. package/dist/reachability/index.d.ts +0 -105
  288. package/dist/reachability/request.d.ts +0 -39
  289. package/dist/reachability/util.d.ts +0 -8
  290. package/dist/reactions/constants.d.ts +0 -3
  291. package/dist/reactions/reactions.d.ts +0 -4
  292. package/dist/reactions/reactions.type.d.ts +0 -52
  293. package/dist/reconnection-manager/index.d.ts +0 -136
  294. package/dist/recording-controller/enums.d.ts +0 -7
  295. package/dist/recording-controller/index.d.ts +0 -207
  296. package/dist/recording-controller/util.d.ts +0 -14
  297. package/dist/roap/collection.js +0 -62
  298. package/dist/roap/collection.js.map +0 -1
  299. package/dist/roap/handler.js +0 -275
  300. package/dist/roap/handler.js.map +0 -1
  301. package/dist/roap/index.d.ts +0 -86
  302. package/dist/roap/request.d.ts +0 -39
  303. package/dist/roap/state.js +0 -126
  304. package/dist/roap/state.js.map +0 -1
  305. package/dist/roap/turnDiscovery.d.ts +0 -155
  306. package/dist/roap/util.js +0 -75
  307. package/dist/roap/util.js.map +0 -1
  308. package/dist/rtcMetrics/constants.d.ts +0 -4
  309. package/dist/rtcMetrics/constants.js.map +0 -1
  310. package/dist/rtcMetrics/index.d.ts +0 -61
  311. package/dist/rtcMetrics/index.js +0 -197
  312. package/dist/rtcMetrics/index.js.map +0 -1
  313. package/dist/statsAnalyzer/global.d.ts +0 -36
  314. package/dist/statsAnalyzer/global.js +0 -126
  315. package/dist/statsAnalyzer/global.js.map +0 -1
  316. package/dist/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/statsAnalyzer/index.js +0 -1013
  318. package/dist/statsAnalyzer/index.js.map +0 -1
  319. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  320. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  321. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  322. package/dist/transcription/index.d.ts +0 -64
  323. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  324. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  325. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  326. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  327. package/dist/types/rtcMetrics/index.d.ts +0 -71
  328. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  329. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  331. package/dist/webinar/collection.d.ts +0 -16
  332. package/dist/webinar/index.d.ts +0 -5
@@ -22,7 +22,7 @@ describe('plugin-meetings', () => {
22
22
 
23
23
  describe('Mute On Entry', () => {
24
24
  let manager;
25
-
25
+
26
26
  beforeEach(() => {
27
27
  request = {
28
28
  request: sinon.stub().returns(Promise.resolve()),
@@ -37,85 +37,85 @@ describe('plugin-meetings', () => {
37
37
  });
38
38
 
39
39
  describe('setMuteOnEntry', () => {
40
- it('rejects when correct display hint is not present enabled=false', () => {
40
+ it('rejects when correct display hint is not present enabled=false', () => {
41
41
  const result = manager.setMuteOnEntry(false);
42
-
42
+
43
43
  assert.notCalled(request.request);
44
-
44
+
45
45
  assert.isRejected(result);
46
46
  });
47
47
 
48
- it('rejects when correct display hint is not present enabled=true', () => {
48
+ it('rejects when correct display hint is not present enabled=true', () => {
49
49
  const result = manager.setMuteOnEntry(true);
50
-
50
+
51
51
  assert.notCalled(request.request);
52
-
52
+
53
53
  assert.isRejected(result);
54
54
  });
55
-
55
+
56
56
  it('can set mute on entry when the display hint is available enabled=true', () => {
57
57
  manager.setDisplayHints(['ENABLE_MUTE_ON_ENTRY']);
58
-
58
+
59
59
  const result = manager.setMuteOnEntry(true);
60
-
60
+
61
61
  assert.calledWith(request.request, { uri: 'test/id/controls',
62
62
  body: { muteOnEntry: { enabled: true } },
63
63
  method: HTTP_VERBS.PATCH});
64
-
64
+
65
65
  assert.deepEqual(result, request.request.firstCall.returnValue);
66
66
  });
67
67
 
68
68
  it('can set mute on entry when the display hint is available enabled=false', () => {
69
69
  manager.setDisplayHints(['DISABLE_MUTE_ON_ENTRY']);
70
-
70
+
71
71
  const result = manager.setMuteOnEntry(false);
72
-
72
+
73
73
  assert.calledWith(request.request, { uri: 'test/id/controls',
74
74
  body: { muteOnEntry: { enabled: false } },
75
75
  method: HTTP_VERBS.PATCH});
76
-
76
+
77
77
  assert.deepEqual(result, request.request.firstCall.returnValue);
78
78
  });
79
79
  });
80
80
 
81
81
  describe('setDisallowUnmute', () => {
82
- it('rejects when correct display hint is not present enabled=false', () => {
82
+ it('rejects when correct display hint is not present enabled=false', () => {
83
83
  const result = manager.setDisallowUnmute(false);
84
-
84
+
85
85
  assert.notCalled(request.request);
86
-
86
+
87
87
  assert.isRejected(result);
88
88
  });
89
89
 
90
- it('rejects when correct display hint is not present enabled=true', () => {
90
+ it('rejects when correct display hint is not present enabled=true', () => {
91
91
  const result = manager.setDisallowUnmute(true);
92
-
92
+
93
93
  assert.notCalled(request.request);
94
-
94
+
95
95
  assert.isRejected(result);
96
96
  });
97
-
98
- it('can set mute on entry when the display hint is available enabled=true', () => {
97
+
98
+ it('can set disallow unmute when ENABLE_HARD_MUTE display hint is available', () => {
99
99
  manager.setDisplayHints(['ENABLE_HARD_MUTE']);
100
-
100
+
101
101
  const result = manager.setDisallowUnmute(true);
102
-
102
+
103
103
  assert.calledWith(request.request, { uri: 'test/id/controls',
104
104
  body: { disallowUnmute: { enabled: true } },
105
105
  method: HTTP_VERBS.PATCH});
106
-
106
+
107
107
  assert.deepEqual(result, request.request.firstCall.returnValue);
108
108
  });
109
109
 
110
- it('can set mute on entry when the display hint is available enabled=false', () => {
110
+ it('can set allow unmute when DISABLE_HARD_MUTE display hint is available', () => {
111
111
  manager.setDisplayHints(['DISABLE_HARD_MUTE']);
112
-
112
+
113
113
  const result = manager.setDisallowUnmute(false);
114
-
114
+
115
115
  assert.calledWith(request.request, { uri: 'test/id/controls',
116
116
  body: { disallowUnmute: { enabled: false } },
117
117
  method: HTTP_VERBS.PATCH});
118
-
118
+
119
119
  assert.deepEqual(result, request.request.firstCall.returnValue);
120
120
  });
121
121
  });
@@ -218,7 +218,7 @@ describe('plugin-meetings', () => {
218
218
  })
219
219
  });
220
220
 
221
- it('rejects when correct display hint is not present mutedEnabled=false', () => {
221
+ it('rejects when correct display hint is not present mutedEnabled=false', () => {
222
222
  const result = manager.setMuteAll(false, false, false);
223
223
 
224
224
  assert.notCalled(request.request);
@@ -226,7 +226,7 @@ describe('plugin-meetings', () => {
226
226
  assert.isRejected(result);
227
227
  });
228
228
 
229
- it('rejects when correct display hint is not present mutedEnabled=true', () => {
229
+ it('rejects when correct display hint is not present mutedEnabled=true', () => {
230
230
  const result = manager.setMuteAll(true, false, false);
231
231
 
232
232
  assert.notCalled(request.request);
@@ -281,7 +281,31 @@ describe('plugin-meetings', () => {
281
281
 
282
282
  assert.deepEqual(result, request.request.firstCall.returnValue);
283
283
  });
284
+
285
+ it('can set mute all panelists when the display hint is available mutedEnabled=true', () => {
286
+ manager.setDisplayHints(['MUTE_ALL', 'DISABLE_HARD_MUTE', 'DISABLE_MUTE_ON_ENTRY']);
287
+
288
+ const result = manager.setMuteAll(true, true, true, ['panelist']);
289
+
290
+ assert.calledWith(request.request, { uri: 'test/id/controls',
291
+ body: { audio: { muted: true, disallowUnmute: true, muteOnEntry: true, roles: ['panelist'] } },
292
+ method: HTTP_VERBS.PATCH});
293
+
294
+ assert.deepEqual(result, request.request.firstCall.returnValue);
295
+ });
296
+
297
+ it('can set mute all attendees when the display hint is available mutedEnabled=true', () => {
298
+ manager.setDisplayHints(['MUTE_ALL', 'DISABLE_HARD_MUTE', 'DISABLE_MUTE_ON_ENTRY']);
299
+
300
+ const result = manager.setMuteAll(true, true, true, ['attendee']);
301
+
302
+ assert.calledWith(request.request, { uri: 'test/id/controls',
303
+ body: { audio: { muted: true, disallowUnmute: true, muteOnEntry: true, roles: ['attendee'] } },
304
+ method: HTTP_VERBS.PATCH});
305
+
306
+ assert.deepEqual(result, request.request.firstCall.returnValue);
307
+ });
284
308
  });
285
309
  });
286
310
  });
287
- });
311
+ });
@@ -348,6 +348,50 @@ describe('plugin-meetings', () => {
348
348
  });
349
349
  });
350
350
 
351
+ it('should call hasHints() with proper hints when `panelistEnabled` is true, attendeeCount is false', () => {
352
+ ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: true, attendeeCount: false}}, []);
353
+
354
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
355
+ requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
356
+ DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
357
+ DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
358
+ displayHints: [],
359
+ });
360
+ });
361
+
362
+ it('should call hasHints() with proper hints when `panelistEnabled` is true, attendeeCount is true', () => {
363
+ ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: true, attendeeCount: true}}, []);
364
+
365
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
366
+ requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
367
+ DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
368
+ DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
369
+ displayHints: [],
370
+ });
371
+ });
372
+
373
+ it('should call hasHints() with proper hints when `panelistEnabled` is false, attendeeCount is false', () => {
374
+ ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: false, attendeeCount: false}}, []);
375
+
376
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
377
+ requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
378
+ DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
379
+ DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
380
+ displayHints: [],
381
+ });
382
+ });
383
+
384
+ it('should call hasHints() with proper hints when `panelistEnabled` is false, attendeeCount is true', () => {
385
+ ControlsOptionsUtil.canUpdateViewTheParticipantsList({properties: {enabled: true, panelistEnabled: false, attendeeCount: true}}, []);
386
+
387
+ assert.calledWith(ControlsOptionsUtil.hasHints, {
388
+ requiredHints: [DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST,
389
+ DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST,
390
+ DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
391
+ displayHints: [],
392
+ });
393
+ });
394
+
351
395
  it('should return the resolution of hasHints()', () => {
352
396
  const expected = 'example-return-value';
353
397
  ControlsOptionsUtil.hasHints.returns(expected);
@@ -82,11 +82,13 @@ describe('plugin-meetings', () => {
82
82
  });
83
83
 
84
84
  it('should parse the viewTheParticipantList control', () => {
85
- const newControls = {viewTheParticipantList: {enabled: true}};
85
+ const newControls = {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}};
86
86
 
87
87
  const parsedControls = ControlsUtils.parse(newControls);
88
88
 
89
89
  assert.equal(parsedControls.viewTheParticipantList.enabled, newControls.viewTheParticipantList.enabled);
90
+ assert.equal(parsedControls.viewTheParticipantList.panelistEnabled, newControls.viewTheParticipantList.panelistEnabled);
91
+ assert.equal(parsedControls.viewTheParticipantList.attendeeCount, newControls.viewTheParticipantList.attendeeCount);
90
92
  });
91
93
 
92
94
  it('should parse the raiseHand control', () => {
@@ -105,6 +107,42 @@ describe('plugin-meetings', () => {
105
107
  assert.equal(parsedControls.video.enabled, newControls.video.enabled);
106
108
  });
107
109
 
110
+ it('should parse the webcast control', () => {
111
+ const newControls = {webcastControl: {streaming: true}};
112
+
113
+ const parsedControls = ControlsUtils.parse(newControls);
114
+
115
+ assert.equal(parsedControls.webcastControl.streaming, newControls.webcastControl.streaming);
116
+ });
117
+
118
+ it('should parse the meeting full control', () => {
119
+ const newControls = {meetingFull: {meetingFull: true, meetingPanelistFull: false}};
120
+
121
+ const parsedControls = ControlsUtils.parse(newControls);
122
+
123
+ assert.equal(parsedControls.meetingFull.meetingFull, newControls.meetingFull.meetingFull);
124
+ assert.equal(parsedControls.meetingFull.meetingPanelistFull, newControls.meetingFull.meetingPanelistFull);
125
+ });
126
+
127
+ it('should parse the practiceSession control', () => {
128
+ const newControls = {practiceSession: {enabled: true}};
129
+
130
+ const parsedControls = ControlsUtils.parse(newControls);
131
+
132
+ assert.equal(parsedControls.practiceSession.enabled, newControls.practiceSession.enabled);
133
+ });
134
+
135
+ it('should parse the videoLayout control', () => {
136
+ const newControls = {videoLayout: {overrideDefault: true, lockAttendeeViewOnStageOnly:false, stageParameters: {}}};
137
+
138
+ const parsedControls = ControlsUtils.parse(newControls);
139
+
140
+ assert.equal(parsedControls.videoLayout.overrideDefault, newControls.videoLayout.overrideDefault);
141
+ assert.equal(parsedControls.videoLayout.lockAttendeeViewOnStageOnly, newControls.videoLayout.lockAttendeeViewOnStageOnly);
142
+ assert.equal(parsedControls.videoLayout.stageParameters, newControls.videoLayout.stageParameters);
143
+
144
+ });
145
+
108
146
  describe('videoEnabled', () => {
109
147
  it('returns expected', () => {
110
148
  const result = ControlsUtils.parse({video: {enabled: true}});
@@ -170,11 +208,21 @@ describe('plugin-meetings', () => {
170
208
  });
171
209
 
172
210
  it('returns hasViewTheParticipantListChanged = true when changed', () => {
173
- const newControls = {viewTheParticipantList: {enabled: true}};
211
+ const oldControls = {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}};
174
212
 
175
- const {updates} = ControlsUtils.getControls(defaultControls, newControls);
213
+ let result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: false, panelistEnabled: true, attendeeCount: false}});
214
+
215
+ assert.equal(result.updates.hasViewTheParticipantListChanged, true);
216
+
217
+ result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: false, attendeeCount: false}});
176
218
 
177
- assert.equal(updates.hasViewTheParticipantListChanged, true);
219
+ assert.equal(result.updates.hasViewTheParticipantListChanged, true);
220
+ result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: true}});
221
+
222
+ assert.equal(result.updates.hasViewTheParticipantListChanged, true);
223
+ result = ControlsUtils.getControls(oldControls, {viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false}});
224
+
225
+ assert.equal(result.updates.hasViewTheParticipantListChanged, false);
178
226
  });
179
227
 
180
228
  it('returns hasRaiseHandChanged = true when changed', () => {
@@ -193,6 +241,34 @@ describe('plugin-meetings', () => {
193
241
  assert.equal(updates.hasVideoChanged, true);
194
242
  });
195
243
 
244
+ it('returns hasWebcastChanged = true when changed', () => {
245
+ const newControls = {webcastControl: {streaming: true}};
246
+
247
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
248
+
249
+ assert.equal(updates.hasWebcastChanged, true);
250
+ });
251
+
252
+ it('returns hasMeetingFullChanged = true when changed', () => {
253
+ const newControls = {meetingFull: {meetingFull: true, meetingPanelistFull: false}};
254
+
255
+ let result = ControlsUtils.getControls(defaultControls, newControls);
256
+
257
+ assert.equal(result.updates.hasMeetingFullChanged, true);
258
+
259
+ result = ControlsUtils.getControls(newControls, {meetingFull: {meetingFull: true, meetingPanelistFull: true}});
260
+
261
+ assert.equal(result.updates.hasMeetingFullChanged, true);
262
+ });
263
+
264
+ it('returns hasPracticeSessionEnabledChanged = true when changed', () => {
265
+ const newControls = {practiceSession: {enabled: true}};
266
+
267
+ const {updates} = ControlsUtils.getControls(defaultControls, newControls);
268
+
269
+ assert.equal(updates.hasPracticeSessionEnabledChanged, true);
270
+ });
271
+
196
272
  it('returns hasEntryExitToneChanged = true when mode changed', () => {
197
273
  const newControls = {
198
274
  entryExitTone: {
@@ -81,7 +81,7 @@ describe('plugin-meetings', () => {
81
81
  newControls = {
82
82
  disallowUnmute: {enabled: true},
83
83
  lock: {},
84
- meetingFull: {},
84
+ meetingFull: {meetingFull: false, meetingPanelistFull: true},
85
85
  muteOnEntry: {enabled: true},
86
86
  raiseHand: {enabled: true},
87
87
  reactions: {enabled: true, showDisplayNameWithReactions: true},
@@ -95,12 +95,15 @@ describe('plugin-meetings', () => {
95
95
  },
96
96
  shareControl: {control: 'example-value'},
97
97
  transcribe: {},
98
- viewTheParticipantList: {enabled: true},
98
+ viewTheParticipantList: {enabled: true, panelistEnabled: true, attendeeCount: false},
99
99
  meetingContainer: {
100
100
  meetingContainerUrl: 'http://new-url.com',
101
101
  },
102
102
  entryExitTone: {enabled: true, mode: 'foo'},
103
103
  video: {enabled: true},
104
+ videoLayout: {overrideDefault: true, lockAttendeeViewOnStageOnly:false, stageParameters: {}},
105
+ webcastControl: {streaming: false},
106
+ practiceSession: {enabled: true},
104
107
  };
105
108
  });
106
109
 
@@ -205,6 +208,58 @@ describe('plugin-meetings', () => {
205
208
  );
206
209
  });
207
210
 
211
+ it('should trigger the CONTROLS_STAGE_VIEW_UPDATED event when necessary', () => {
212
+ locusInfo.controls = {};
213
+ locusInfo.emitScoped = sinon.stub();
214
+ locusInfo.updateControls(newControls);
215
+
216
+ assert.calledWith(
217
+ locusInfo.emitScoped,
218
+ {file: 'locus-info', function: 'updateControls'},
219
+ LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,
220
+ {state: newControls.videoLayout}
221
+ );
222
+ });
223
+
224
+ it('should trigger the CONTROLS_WEBCAST_CHANGED event when necessary', () => {
225
+ locusInfo.controls = {};
226
+ locusInfo.emitScoped = sinon.stub();
227
+ locusInfo.updateControls(newControls);
228
+
229
+ assert.calledWith(
230
+ locusInfo.emitScoped,
231
+ {file: 'locus-info', function: 'updateControls'},
232
+ LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,
233
+ {state: newControls.webcastControl}
234
+ );
235
+ });
236
+
237
+ it('should trigger the CONTROLS_MEETING_FULL_CHANGED event when necessary', () => {
238
+ locusInfo.controls = {};
239
+ locusInfo.emitScoped = sinon.stub();
240
+ locusInfo.updateControls(newControls);
241
+
242
+ assert.calledWith(
243
+ locusInfo.emitScoped,
244
+ {file: 'locus-info', function: 'updateControls'},
245
+ LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,
246
+ {state: newControls.meetingFull}
247
+ );
248
+ });
249
+
250
+ it('should trigger the CONTROLS_PRACTICE_SESSION_STATUS_UPDATED event when necessary', () => {
251
+ locusInfo.controls = {};
252
+ locusInfo.emitScoped = sinon.stub();
253
+ locusInfo.updateControls(newControls);
254
+
255
+ assert.calledWith(
256
+ locusInfo.emitScoped,
257
+ {file: 'locus-info', function: 'updateControls'},
258
+ LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,
259
+ {state: newControls.practiceSession}
260
+ );
261
+ });
262
+
208
263
  it('should not trigger the CONTROLS_RECORDING_UPDATED event', () => {
209
264
  locusInfo.controls = {};
210
265
  locusInfo.emitScoped = sinon.stub();
@@ -1729,6 +1784,7 @@ describe('plugin-meetings', () => {
1729
1784
  locusInfo.updateMemberShip = sinon.stub();
1730
1785
  locusInfo.updateIdentifiers = sinon.stub();
1731
1786
  locusInfo.updateEmbeddedApps = sinon.stub();
1787
+ locusInfo.updateResources = sinon.stub();
1732
1788
  locusInfo.compareAndUpdate = sinon.stub();
1733
1789
 
1734
1790
  locusInfo.updateLocusInfo(newLocus);
@@ -1750,6 +1806,7 @@ describe('plugin-meetings', () => {
1750
1806
  assert.notCalled(locusInfo.updateMemberShip);
1751
1807
  assert.notCalled(locusInfo.updateIdentifiers);
1752
1808
  assert.notCalled(locusInfo.updateEmbeddedApps);
1809
+ assert.notCalled(locusInfo.updateResources);
1753
1810
  assert.notCalled(locusInfo.compareAndUpdate);
1754
1811
  });
1755
1812
 
@@ -1807,6 +1864,35 @@ describe('plugin-meetings', () => {
1807
1864
  assert.calledWith(locusInfo.applyLocusDeltaData, action, parsedLoci, fakeMeeting);
1808
1865
  });
1809
1866
 
1867
+ it('catches errors thrown by onDeltaAction and is able to process next Locus delta', () => {
1868
+ const fakeLocusDelta = {
1869
+ sequence: {
1870
+ rangeStart: 0,
1871
+ rangeEnd: 0,
1872
+ },
1873
+ };
1874
+ locusInfo.locusParser.workingCopy = {
1875
+ sequence: {
1876
+ rangeStart: 0,
1877
+ rangeEnd: 0,
1878
+ },
1879
+ };
1880
+ const testMeeting = {locusInfo: {onDeltaLocus: sinon.stub()}};
1881
+
1882
+ locusParser.onDeltaAction = sandbox
1883
+ .stub()
1884
+ .onCall(0)
1885
+ .callsFake(() => {
1886
+ throw new Error('fake error');
1887
+ });
1888
+
1889
+ // simulate first locus delta coming - it will trigger an error thrown by onDeltaAction
1890
+ locusInfo.handleLocusDelta(fakeLocusDelta, testMeeting);
1891
+
1892
+ // simulate a second locus delta coming - it should be processed without errors
1893
+ locusInfo.handleLocusDelta(fakeLocusDelta, testMeeting);
1894
+ });
1895
+
1810
1896
  it('applyLocusDeltaData handles USE_INCOMING action correctly', () => {
1811
1897
  const {USE_INCOMING} = LocusDeltaParser.loci;
1812
1898
  const meeting = {
@@ -33,6 +33,7 @@ describe('plugin-meetings', () => {
33
33
  canStartManualCaption: null,
34
34
  canStopManualCaption: null,
35
35
  isManualCaptionActive: null,
36
+ isPremiseRecordingEnabled: null,
36
37
  isSaveTranscriptsEnabled: null,
37
38
  isWebexAssistantActive: null,
38
39
  canViewCaptionPanel: null,
@@ -60,6 +61,10 @@ describe('plugin-meetings', () => {
60
61
  canUpdateShareControl: null,
61
62
  canEnableViewTheParticipantsList: null,
62
63
  canDisableViewTheParticipantsList: null,
64
+ canEnableViewTheParticipantsListPanelist: null,
65
+ canDisableViewTheParticipantsListPanelist: null,
66
+ canEnableShowAttendeeCount: null,
67
+ canDisableShowAttendeeCount: null,
63
68
  canEnableRaiseHand: null,
64
69
  canDisableRaiseHand: null,
65
70
  canEnableVideo: null,
@@ -79,6 +84,16 @@ describe('plugin-meetings', () => {
79
84
  canShareWhiteBoard: null,
80
85
  enforceVirtualBackground: null,
81
86
  canPollingAndQA: null,
87
+ canStartWebcast: null,
88
+ canStopWebcast: null,
89
+ canShowStageView: null,
90
+ canEnableStageView: null,
91
+ canDisableStageView: null,
92
+ isPracticeSessionOn : null,
93
+ isPracticeSessionOff : null,
94
+ canStartPracticeSession: null,
95
+ canStopPracticeSession: null,
96
+
82
97
  ...expected,
83
98
  };
84
99
 
@@ -117,6 +132,7 @@ describe('plugin-meetings', () => {
117
132
  'canStartManualCaption',
118
133
  'canStopManualCaption',
119
134
  'isManualCaptionActive',
135
+ 'isPremiseRecordingEnabled',
120
136
  'isSaveTranscriptsEnabled',
121
137
  'isWebexAssistantActive',
122
138
  'canViewCaptionPanel',
@@ -144,6 +160,10 @@ describe('plugin-meetings', () => {
144
160
  'canUpdateShareControl',
145
161
  'canEnableViewTheParticipantsList',
146
162
  'canDisableViewTheParticipantsList',
163
+ 'canEnableViewTheParticipantsListPanelist',
164
+ 'canDisableViewTheParticipantsListPanelist',
165
+ 'canEnableShowAttendeeCount',
166
+ 'canDisableShowAttendeeCount',
147
167
  'canEnableRaiseHand',
148
168
  'canDisableRaiseHand',
149
169
  'canEnableVideo',
@@ -163,7 +183,17 @@ describe('plugin-meetings', () => {
163
183
  'canShareWhiteBoard',
164
184
  'enforceVirtualBackground',
165
185
  'canPollingAndQA',
166
- ].forEach((key) => {
186
+ 'canStartWebcast',
187
+ 'canStopWebcast',
188
+ 'canShowStageView',
189
+ 'canEnableStageView',
190
+ 'canDisableStageView',
191
+ 'isPracticeSessionOn',
192
+ 'isPracticeSessionOff',
193
+ 'canStartPracticeSession',
194
+ 'canStopPracticeSession',
195
+
196
+ ].forEach((key) => {
167
197
  it(`get and set for ${key} work as expected`, () => {
168
198
  const inMeetingActions = new InMeetingActions();
169
199