@webex/plugin-meetings 3.6.0 → 3.7.0-next.10

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 (329) 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/webinar-registration-error.js +50 -0
  5. package/dist/common/errors/webinar-registration-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 +40 -2
  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/meeting/in-meeting-actions.js +29 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +786 -528
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +2 -6
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/muteState.js +5 -2
  36. package/dist/meeting/muteState.js.map +1 -1
  37. package/dist/meeting/request.js +21 -29
  38. package/dist/meeting/request.js.map +1 -1
  39. package/dist/meeting/util.js +98 -61
  40. package/dist/meeting/util.js.map +1 -1
  41. package/dist/meeting-info/meeting-info-v2.js +68 -17
  42. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  43. package/dist/meetings/index.js +29 -2
  44. package/dist/meetings/index.js.map +1 -1
  45. package/dist/members/index.js +3 -2
  46. package/dist/members/index.js.map +1 -1
  47. package/dist/members/util.js +13 -7
  48. package/dist/members/util.js.map +1 -1
  49. package/dist/metrics/constants.js +4 -1
  50. package/dist/metrics/constants.js.map +1 -1
  51. package/dist/multistream/remoteMedia.js +4 -0
  52. package/dist/multistream/remoteMedia.js.map +1 -1
  53. package/dist/reachability/clusterReachability.js +12 -15
  54. package/dist/reachability/clusterReachability.js.map +1 -1
  55. package/dist/reachability/index.js +433 -136
  56. package/dist/reachability/index.js.map +1 -1
  57. package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
  58. package/dist/reachability/reachability.types.js.map +1 -0
  59. package/dist/reachability/request.js +23 -9
  60. package/dist/reachability/request.js.map +1 -1
  61. package/dist/recording-controller/enums.js +8 -4
  62. package/dist/recording-controller/enums.js.map +1 -1
  63. package/dist/recording-controller/index.js +18 -9
  64. package/dist/recording-controller/index.js.map +1 -1
  65. package/dist/recording-controller/util.js +13 -9
  66. package/dist/recording-controller/util.js.map +1 -1
  67. package/dist/roap/index.js +5 -7
  68. package/dist/roap/index.js.map +1 -1
  69. package/dist/roap/request.js +45 -79
  70. package/dist/roap/request.js.map +1 -1
  71. package/dist/roap/turnDiscovery.js +3 -6
  72. package/dist/roap/turnDiscovery.js.map +1 -1
  73. package/dist/{common/errors/parameter.d.ts → types/common/errors/webinar-registration-error.d.ts} +4 -5
  74. package/dist/types/config.d.ts +3 -0
  75. package/dist/types/constants.d.ts +33 -0
  76. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  77. package/dist/types/controls-options-manager/index.d.ts +2 -1
  78. package/dist/types/controls-options-manager/types.d.ts +2 -0
  79. package/dist/types/index.d.ts +2 -1
  80. package/dist/types/locus-info/index.d.ts +9 -0
  81. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  82. package/dist/types/meeting/index.d.ts +34 -3
  83. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  84. package/dist/types/meeting/muteState.d.ts +2 -1
  85. package/dist/types/meeting/request.d.ts +2 -2
  86. package/dist/types/meeting/util.d.ts +2 -2
  87. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  88. package/dist/types/meetings/index.d.ts +13 -1
  89. package/dist/types/members/index.d.ts +2 -1
  90. package/dist/types/members/util.d.ts +5 -1
  91. package/dist/types/metrics/constants.d.ts +3 -0
  92. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  93. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  94. package/dist/types/reachability/index.d.ts +74 -35
  95. package/dist/types/reachability/reachability.types.d.ts +64 -0
  96. package/dist/types/reachability/request.d.ts +5 -1
  97. package/dist/types/recording-controller/enums.d.ts +5 -2
  98. package/dist/types/recording-controller/index.d.ts +1 -0
  99. package/dist/types/recording-controller/util.d.ts +2 -1
  100. package/dist/types/roap/request.d.ts +1 -13
  101. package/dist/webinar/index.js +64 -19
  102. package/dist/webinar/index.js.map +1 -1
  103. package/package.json +22 -22
  104. package/src/common/errors/webinar-registration-error.ts +27 -0
  105. package/src/config.ts +3 -0
  106. package/src/constants.ts +41 -0
  107. package/src/controls-options-manager/enums.ts +1 -0
  108. package/src/controls-options-manager/index.ts +19 -2
  109. package/src/controls-options-manager/types.ts +2 -0
  110. package/src/controls-options-manager/util.ts +12 -0
  111. package/src/index.ts +2 -0
  112. package/src/locus-info/controlsUtils.ts +46 -2
  113. package/src/locus-info/fullState.ts +1 -0
  114. package/src/locus-info/index.ts +60 -0
  115. package/src/locus-info/parser.ts +8 -1
  116. package/src/meeting/in-meeting-actions.ts +58 -0
  117. package/src/meeting/index.ts +247 -22
  118. package/src/meeting/locusMediaRequest.ts +4 -8
  119. package/src/meeting/muteState.ts +6 -2
  120. package/src/meeting/request.ts +4 -11
  121. package/src/meeting/util.ts +31 -6
  122. package/src/meeting-info/meeting-info-v2.ts +51 -0
  123. package/src/meetings/index.ts +74 -40
  124. package/src/members/index.ts +4 -2
  125. package/src/members/util.ts +4 -1
  126. package/src/metrics/constants.ts +3 -0
  127. package/src/multistream/remoteMedia.ts +5 -0
  128. package/src/reachability/clusterReachability.ts +5 -15
  129. package/src/reachability/index.ts +285 -77
  130. package/src/reachability/reachability.types.ts +85 -0
  131. package/src/reachability/request.ts +55 -30
  132. package/src/recording-controller/enums.ts +5 -2
  133. package/src/recording-controller/index.ts +17 -4
  134. package/src/recording-controller/util.ts +20 -5
  135. package/src/roap/index.ts +4 -5
  136. package/src/roap/request.ts +32 -44
  137. package/src/roap/turnDiscovery.ts +2 -4
  138. package/src/webinar/index.ts +62 -16
  139. package/test/unit/spec/controls-options-manager/index.js +56 -32
  140. package/test/unit/spec/controls-options-manager/util.js +44 -0
  141. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  142. package/test/unit/spec/locus-info/index.js +88 -2
  143. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  144. package/test/unit/spec/meeting/index.js +346 -82
  145. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  146. package/test/unit/spec/meeting/muteState.js +8 -4
  147. package/test/unit/spec/meeting/request.js +3 -26
  148. package/test/unit/spec/meeting/utils.js +71 -14
  149. package/test/unit/spec/meeting-info/meetinginfov2.js +37 -0
  150. package/test/unit/spec/meetings/index.js +41 -6
  151. package/test/unit/spec/members/index.js +25 -2
  152. package/test/unit/spec/members/request.js +37 -3
  153. package/test/unit/spec/members/utils.js +110 -1
  154. package/test/unit/spec/multistream/remoteMedia.ts +16 -2
  155. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  156. package/test/unit/spec/reachability/index.ts +265 -1
  157. package/test/unit/spec/reachability/request.js +56 -15
  158. package/test/unit/spec/recording-controller/index.js +61 -5
  159. package/test/unit/spec/recording-controller/util.js +39 -3
  160. package/test/unit/spec/roap/index.ts +1 -1
  161. package/test/unit/spec/roap/request.ts +51 -109
  162. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  163. package/test/unit/spec/webinar/index.ts +128 -15
  164. package/dist/annotation/annotation.types.d.ts +0 -42
  165. package/dist/annotation/constants.d.ts +0 -31
  166. package/dist/annotation/index.d.ts +0 -117
  167. package/dist/breakouts/breakout.d.ts +0 -8
  168. package/dist/breakouts/collection.d.ts +0 -5
  169. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  170. package/dist/breakouts/events.d.ts +0 -8
  171. package/dist/breakouts/index.d.ts +0 -5
  172. package/dist/breakouts/request.d.ts +0 -22
  173. package/dist/breakouts/utils.d.ts +0 -15
  174. package/dist/common/browser-detection.d.ts +0 -9
  175. package/dist/common/collection.d.ts +0 -48
  176. package/dist/common/config.d.ts +0 -2
  177. package/dist/common/errors/captcha-error.d.ts +0 -15
  178. package/dist/common/errors/intent-to-join.d.ts +0 -16
  179. package/dist/common/errors/join-meeting.d.ts +0 -17
  180. package/dist/common/errors/media.d.ts +0 -15
  181. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  182. package/dist/common/errors/password-error.d.ts +0 -15
  183. package/dist/common/errors/permission.d.ts +0 -14
  184. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  185. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  186. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  187. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  188. package/dist/common/errors/reconnection-in-progress.js +0 -33
  189. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  190. package/dist/common/errors/reconnection.d.ts +0 -15
  191. package/dist/common/errors/stats.d.ts +0 -15
  192. package/dist/common/errors/webex-errors.d.ts +0 -93
  193. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  194. package/dist/common/events/events-scope.d.ts +0 -17
  195. package/dist/common/events/events.d.ts +0 -12
  196. package/dist/common/events/trigger-proxy.d.ts +0 -2
  197. package/dist/common/events/util.d.ts +0 -2
  198. package/dist/common/logs/logger-config.d.ts +0 -2
  199. package/dist/common/logs/logger-proxy.d.ts +0 -2
  200. package/dist/common/logs/request.d.ts +0 -36
  201. package/dist/common/queue.d.ts +0 -34
  202. package/dist/config.d.ts +0 -72
  203. package/dist/constants.d.ts +0 -1088
  204. package/dist/controls-options-manager/constants.d.ts +0 -4
  205. package/dist/controls-options-manager/enums.d.ts +0 -15
  206. package/dist/controls-options-manager/index.d.ts +0 -136
  207. package/dist/controls-options-manager/types.d.ts +0 -43
  208. package/dist/controls-options-manager/util.d.ts +0 -1
  209. package/dist/index.d.ts +0 -7
  210. package/dist/interceptors/index.d.ts +0 -2
  211. package/dist/interceptors/locusRetry.d.ts +0 -27
  212. package/dist/interpretation/collection.d.ts +0 -5
  213. package/dist/interpretation/index.d.ts +0 -5
  214. package/dist/interpretation/siLanguage.d.ts +0 -5
  215. package/dist/locus-info/controlsUtils.d.ts +0 -2
  216. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  217. package/dist/locus-info/fullState.d.ts +0 -2
  218. package/dist/locus-info/hostUtils.d.ts +0 -2
  219. package/dist/locus-info/index.d.ts +0 -322
  220. package/dist/locus-info/infoUtils.d.ts +0 -2
  221. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  222. package/dist/locus-info/parser.d.ts +0 -272
  223. package/dist/locus-info/selfUtils.d.ts +0 -2
  224. package/dist/media/index.d.ts +0 -34
  225. package/dist/media/properties.d.ts +0 -93
  226. package/dist/media/util.d.ts +0 -2
  227. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  228. package/dist/mediaQualityMetrics/config.js +0 -502
  229. package/dist/mediaQualityMetrics/config.js.map +0 -1
  230. package/dist/meeting/effectsState.js +0 -260
  231. package/dist/meeting/effectsState.js.map +0 -1
  232. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  233. package/dist/meeting/index.d.ts +0 -1825
  234. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  235. package/dist/meeting/muteState.d.ts +0 -178
  236. package/dist/meeting/request.d.ts +0 -295
  237. package/dist/meeting/request.type.d.ts +0 -11
  238. package/dist/meeting/state.d.ts +0 -9
  239. package/dist/meeting/util.d.ts +0 -119
  240. package/dist/meeting/voicea-meeting.d.ts +0 -16
  241. package/dist/meeting-info/collection.d.ts +0 -20
  242. package/dist/meeting-info/index.d.ts +0 -69
  243. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  244. package/dist/meeting-info/request.d.ts +0 -22
  245. package/dist/meeting-info/util.d.ts +0 -2
  246. package/dist/meeting-info/utilv2.d.ts +0 -2
  247. package/dist/meetings/collection.d.ts +0 -40
  248. package/dist/meetings/index.d.ts +0 -390
  249. package/dist/meetings/meetings.types.d.ts +0 -4
  250. package/dist/meetings/request.d.ts +0 -27
  251. package/dist/meetings/util.d.ts +0 -18
  252. package/dist/member/index.d.ts +0 -160
  253. package/dist/member/member.types.js +0 -17
  254. package/dist/member/member.types.js.map +0 -1
  255. package/dist/member/types.d.ts +0 -32
  256. package/dist/member/util.d.ts +0 -2
  257. package/dist/members/collection.d.ts +0 -29
  258. package/dist/members/index.d.ts +0 -353
  259. package/dist/members/request.d.ts +0 -114
  260. package/dist/members/types.d.ts +0 -25
  261. package/dist/members/util.d.ts +0 -215
  262. package/dist/metrics/config.js +0 -276
  263. package/dist/metrics/config.js.map +0 -1
  264. package/dist/metrics/constants.d.ts +0 -70
  265. package/dist/metrics/index.d.ts +0 -45
  266. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  267. package/dist/multistream/receiveSlot.d.ts +0 -68
  268. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  269. package/dist/multistream/remoteMedia.d.ts +0 -72
  270. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  271. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  272. package/dist/multistream/sendSlotManager.d.ts +0 -69
  273. package/dist/networkQualityMonitor/index.d.ts +0 -70
  274. package/dist/networkQualityMonitor/index.js +0 -221
  275. package/dist/networkQualityMonitor/index.js.map +0 -1
  276. package/dist/peer-connection-manager/index.js +0 -671
  277. package/dist/peer-connection-manager/index.js.map +0 -1
  278. package/dist/peer-connection-manager/util.js +0 -109
  279. package/dist/peer-connection-manager/util.js.map +0 -1
  280. package/dist/personal-meeting-room/index.d.ts +0 -47
  281. package/dist/personal-meeting-room/request.d.ts +0 -14
  282. package/dist/personal-meeting-room/util.d.ts +0 -2
  283. package/dist/reachability/clusterReachability.d.ts +0 -109
  284. package/dist/reachability/index.d.ts +0 -105
  285. package/dist/reachability/request.d.ts +0 -39
  286. package/dist/reachability/util.d.ts +0 -8
  287. package/dist/reactions/constants.d.ts +0 -3
  288. package/dist/reactions/reactions.d.ts +0 -4
  289. package/dist/reactions/reactions.type.d.ts +0 -52
  290. package/dist/reconnection-manager/index.d.ts +0 -136
  291. package/dist/recording-controller/enums.d.ts +0 -7
  292. package/dist/recording-controller/index.d.ts +0 -207
  293. package/dist/recording-controller/util.d.ts +0 -14
  294. package/dist/roap/collection.js +0 -62
  295. package/dist/roap/collection.js.map +0 -1
  296. package/dist/roap/handler.js +0 -275
  297. package/dist/roap/handler.js.map +0 -1
  298. package/dist/roap/index.d.ts +0 -86
  299. package/dist/roap/request.d.ts +0 -39
  300. package/dist/roap/state.js +0 -126
  301. package/dist/roap/state.js.map +0 -1
  302. package/dist/roap/turnDiscovery.d.ts +0 -155
  303. package/dist/roap/util.js +0 -75
  304. package/dist/roap/util.js.map +0 -1
  305. package/dist/rtcMetrics/constants.d.ts +0 -4
  306. package/dist/rtcMetrics/constants.js.map +0 -1
  307. package/dist/rtcMetrics/index.d.ts +0 -61
  308. package/dist/rtcMetrics/index.js +0 -197
  309. package/dist/rtcMetrics/index.js.map +0 -1
  310. package/dist/statsAnalyzer/global.d.ts +0 -36
  311. package/dist/statsAnalyzer/global.js +0 -126
  312. package/dist/statsAnalyzer/global.js.map +0 -1
  313. package/dist/statsAnalyzer/index.d.ts +0 -217
  314. package/dist/statsAnalyzer/index.js +0 -1013
  315. package/dist/statsAnalyzer/index.js.map +0 -1
  316. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  317. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  318. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  319. package/dist/transcription/index.d.ts +0 -64
  320. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  321. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  322. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  323. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  324. package/dist/types/rtcMetrics/index.d.ts +0 -71
  325. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  326. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  327. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  328. package/dist/webinar/collection.d.ts +0 -16
  329. package/dist/webinar/index.d.ts +0 -5
@@ -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