@webex/plugin-meetings 3.6.0-next.9 → 3.7.0-ipv6-multi-turn-urls.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
- package/dist/common/errors/join-webinar-error.js.map +1 -0
- package/dist/config.js +3 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +50 -7
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +1 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +10 -3
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +12 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +28 -4
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/index.js +61 -3
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/index.js +29 -1
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +29 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +692 -472
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +2 -6
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/request.js +21 -29
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +95 -59
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +29 -17
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +8 -3
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +3 -2
- package/dist/members/index.js.map +1 -1
- package/dist/members/util.js +13 -7
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +3 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMedia.js +30 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/reachability/clusterReachability.js +12 -15
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +433 -136
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +7 -0
- package/dist/reachability/reachability.types.js.map +1 -0
- package/dist/reachability/request.js +23 -9
- package/dist/reachability/request.js.map +1 -1
- package/dist/recording-controller/enums.js +8 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.js +18 -9
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +13 -9
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +5 -7
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +45 -79
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +3 -6
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
- package/dist/types/config.d.ts +2 -0
- package/dist/types/constants.d.ts +38 -1
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/index.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +2 -0
- package/dist/types/index.d.ts +2 -2
- package/dist/types/locus-info/index.d.ts +9 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
- package/dist/types/meeting/index.d.ts +34 -3
- package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
- package/dist/types/meeting/request.d.ts +2 -2
- package/dist/types/meeting/util.d.ts +2 -2
- package/dist/types/meeting-info/meeting-info-v2.d.ts +4 -4
- package/dist/types/meetings/index.d.ts +4 -1
- package/dist/types/members/index.d.ts +2 -1
- package/dist/types/members/util.d.ts +5 -1
- package/dist/types/metrics/constants.d.ts +3 -1
- package/dist/types/reachability/clusterReachability.d.ts +1 -10
- package/dist/types/reachability/index.d.ts +74 -35
- package/dist/types/reachability/reachability.types.d.ts +64 -0
- package/dist/types/reachability/request.d.ts +5 -1
- package/dist/types/recording-controller/enums.d.ts +5 -2
- package/dist/types/recording-controller/index.d.ts +1 -0
- package/dist/types/recording-controller/util.d.ts +2 -1
- package/dist/types/roap/request.d.ts +1 -13
- package/dist/webinar/index.js +382 -19
- package/dist/webinar/index.js.map +1 -1
- package/package.json +22 -22
- package/src/common/errors/join-webinar-error.ts +24 -0
- package/src/config.ts +2 -0
- package/src/constants.ts +49 -3
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/index.ts +19 -2
- package/src/controls-options-manager/types.ts +2 -0
- package/src/controls-options-manager/util.ts +12 -0
- package/src/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +46 -2
- package/src/locus-info/fullState.ts +1 -0
- package/src/locus-info/index.ts +60 -0
- package/src/media/index.ts +15 -0
- package/src/meeting/in-meeting-actions.ts +58 -0
- package/src/meeting/index.ts +232 -25
- package/src/meeting/locusMediaRequest.ts +4 -8
- package/src/meeting/request.ts +4 -11
- package/src/meeting/util.ts +25 -4
- package/src/meeting-info/meeting-info-v2.ts +23 -11
- package/src/meetings/index.ts +54 -41
- package/src/members/index.ts +4 -2
- package/src/members/util.ts +4 -1
- package/src/metrics/constants.ts +3 -1
- package/src/multistream/remoteMedia.ts +28 -15
- package/src/reachability/clusterReachability.ts +5 -15
- package/src/reachability/index.ts +285 -77
- package/src/reachability/reachability.types.ts +85 -0
- package/src/reachability/request.ts +55 -30
- package/src/recording-controller/enums.ts +5 -2
- package/src/recording-controller/index.ts +17 -4
- package/src/recording-controller/util.ts +20 -5
- package/src/roap/index.ts +4 -5
- package/src/roap/request.ts +30 -44
- package/src/roap/turnDiscovery.ts +2 -4
- package/src/webinar/index.ts +223 -17
- package/test/unit/spec/controls-options-manager/index.js +56 -32
- package/test/unit/spec/controls-options-manager/util.js +44 -0
- package/test/unit/spec/locus-info/controlsUtils.js +80 -4
- package/test/unit/spec/locus-info/index.js +59 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
- package/test/unit/spec/meeting/index.js +369 -103
- package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
- package/test/unit/spec/meeting/request.js +3 -26
- package/test/unit/spec/meeting/utils.js +55 -13
- package/test/unit/spec/meeting-info/meetinginfov2.js +9 -4
- package/test/unit/spec/meetings/index.js +25 -6
- package/test/unit/spec/members/index.js +25 -2
- package/test/unit/spec/members/request.js +37 -3
- package/test/unit/spec/members/utils.js +110 -1
- package/test/unit/spec/multistream/remoteMedia.ts +11 -7
- package/test/unit/spec/reachability/clusterReachability.ts +7 -0
- package/test/unit/spec/reachability/index.ts +265 -1
- package/test/unit/spec/reachability/request.js +56 -15
- package/test/unit/spec/recording-controller/index.js +61 -5
- package/test/unit/spec/recording-controller/util.js +39 -3
- package/test/unit/spec/roap/index.ts +1 -1
- package/test/unit/spec/roap/request.ts +51 -109
- package/test/unit/spec/roap/turnDiscovery.ts +202 -147
- package/test/unit/spec/webinar/index.ts +443 -14
- package/dist/common/errors/webinar-registration-error.js.map +0 -1
- package/src/common/errors/webinar-registration-error.ts +0 -27
package/src/constants.ts
CHANGED
|
@@ -198,6 +198,8 @@ export const RETRY_TIMEOUT = 3000;
|
|
|
198
198
|
|
|
199
199
|
export const ICE_AND_DTLS_CONNECTION_TIMEOUT = 20000;
|
|
200
200
|
export const ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT = 35000;
|
|
201
|
+
export const WEBINAR_ERROR_WEBCAST = [403026];
|
|
202
|
+
export const WEBINAR_ERROR_REGISTRATIONID = [403037, 403137];
|
|
201
203
|
|
|
202
204
|
// ******************** REGEX **********************
|
|
203
205
|
// Please alphabetize
|
|
@@ -356,6 +358,11 @@ export const EVENT_TRIGGERS = {
|
|
|
356
358
|
'meeting:controls:view-the-participants-list:updated',
|
|
357
359
|
MEETING_CONTROLS_RAISE_HAND_UPDATED: 'meeting:controls:raise-hand:updated',
|
|
358
360
|
MEETING_CONTROLS_VIDEO_UPDATED: 'meeting:controls:video:updated',
|
|
361
|
+
MEETING_CONTROLS_STAGE_VIEW_UPDATED: 'meeting:controls:stage-view:updated',
|
|
362
|
+
MEETING_CONTROLS_WEBCAST_UPDATED: 'meeting:controls:webcast:updated',
|
|
363
|
+
MEETING_CONTROLS_MEETING_FULL_UPDATED: 'meeting:controls:meeting-full:updated',
|
|
364
|
+
MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED:
|
|
365
|
+
'meeting:controls:practice-session-status:updated',
|
|
359
366
|
// Locus URL changed
|
|
360
367
|
MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
|
|
361
368
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
|
|
@@ -378,6 +385,13 @@ export const EVENT_TYPES = {
|
|
|
378
385
|
ERROR: 'error',
|
|
379
386
|
};
|
|
380
387
|
|
|
388
|
+
export const HEADERS = {
|
|
389
|
+
CONTENT_TYPE: 'Content-Type',
|
|
390
|
+
CONTENT_TYPE_VALUE: {
|
|
391
|
+
APPLICATION_JSON: 'application/json',
|
|
392
|
+
},
|
|
393
|
+
};
|
|
394
|
+
|
|
381
395
|
// Handles the reason when meeting gets destroyed
|
|
382
396
|
// host removed you from the meeting
|
|
383
397
|
// You are the host and you left the meeting
|
|
@@ -524,9 +538,9 @@ export const ERROR_DICTIONARY = {
|
|
|
524
538
|
'Reconnection was not started, because there is one already in progress or reconnections are disabled in config.',
|
|
525
539
|
CODE: 15,
|
|
526
540
|
},
|
|
527
|
-
|
|
528
|
-
NAME: '
|
|
529
|
-
MESSAGE: 'An error occurred while the webinar
|
|
541
|
+
JoinWebinarError: {
|
|
542
|
+
NAME: 'JoinWebinarError',
|
|
543
|
+
MESSAGE: 'An error occurred while the join webinar.',
|
|
530
544
|
CODE: 16,
|
|
531
545
|
},
|
|
532
546
|
};
|
|
@@ -676,7 +690,11 @@ export const LOCUSINFO = {
|
|
|
676
690
|
CONTROLS_REACTIONS_CHANGED: 'CONTROLS_REACTIONS_CHANGED',
|
|
677
691
|
CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED: 'CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED',
|
|
678
692
|
CONTROLS_RAISE_HAND_CHANGED: 'CONTROLS_RAISE_HAND_CHANGED',
|
|
693
|
+
CONTROLS_WEBCAST_CHANGED: 'CONTROLS_WEBCAST_CHANGED',
|
|
694
|
+
CONTROLS_MEETING_FULL_CHANGED: 'CONTROLS_MEETING_FULL_CHANGED',
|
|
695
|
+
CONTROLS_PRACTICE_SESSION_STATUS_UPDATED: 'CONTROLS_PRACTICE_SESSION_STATUS_UPDATED',
|
|
679
696
|
CONTROLS_VIDEO_CHANGED: 'CONTROLS_VIDEO_CHANGED',
|
|
697
|
+
CONTROLS_STAGE_VIEW_UPDATED: 'CONTROLS_STAGE_VIEW_UPDATED',
|
|
680
698
|
SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
|
|
681
699
|
SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
|
|
682
700
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
|
|
@@ -702,6 +720,7 @@ export const LOCUSINFO = {
|
|
|
702
720
|
SELF_MEETING_INTERPRETATION_CHANGED: 'SELF_MEETING_INTERPRETATION_CHANGED',
|
|
703
721
|
MEDIA_INACTIVITY: 'MEDIA_INACTIVITY',
|
|
704
722
|
LINKS_SERVICES: 'LINKS_SERVICES',
|
|
723
|
+
LINKS_RESOURCES: 'LINKS_RESOURCES',
|
|
705
724
|
},
|
|
706
725
|
};
|
|
707
726
|
|
|
@@ -894,6 +913,10 @@ export const DISPLAY_HINTS = {
|
|
|
894
913
|
RECORDING_CONTROL_PAUSE: 'RECORDING_CONTROL_PAUSE',
|
|
895
914
|
RECORDING_CONTROL_STOP: 'RECORDING_CONTROL_STOP',
|
|
896
915
|
RECORDING_CONTROL_RESUME: 'RECORDING_CONTROL_RESUME',
|
|
916
|
+
PREMISE_RECORDING_CONTROL_START: 'PREMISE_RECORDING_CONTROL_START',
|
|
917
|
+
PREMISE_RECORDING_CONTROL_PAUSE: 'PREMISE_RECORDING_CONTROL_PAUSE',
|
|
918
|
+
PREMISE_RECORDING_CONTROL_STOP: 'PREMISE_RECORDING_CONTROL_STOP',
|
|
919
|
+
PREMISE_RECORDING_CONTROL_RESUME: 'PREMISE_RECORDING_CONTROL_RESUME',
|
|
897
920
|
LOCK_CONTROL_UNLOCK: 'LOCK_CONTROL_UNLOCK',
|
|
898
921
|
LOCK_CONTROL_LOCK: 'LOCK_CONTROL_LOCK',
|
|
899
922
|
LOCK_STATUS_LOCKED: 'LOCK_STATUS_LOCKED',
|
|
@@ -944,6 +967,11 @@ export const DISPLAY_HINTS = {
|
|
|
944
967
|
// participants list
|
|
945
968
|
DISABLE_VIEW_THE_PARTICIPANT_LIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST',
|
|
946
969
|
ENABLE_VIEW_THE_PARTICIPANT_LIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST',
|
|
970
|
+
// for webinar participants list
|
|
971
|
+
DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: 'DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST',
|
|
972
|
+
ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST: 'ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST',
|
|
973
|
+
DISABLE_SHOW_ATTENDEE_COUNT: 'DISABLE_SHOW_ATTENDEE_COUNT',
|
|
974
|
+
ENABLE_SHOW_ATTENDEE_COUNT: 'ENABLE_SHOW_ATTENDEE_COUNT',
|
|
947
975
|
|
|
948
976
|
// raise hand
|
|
949
977
|
DISABLE_RAISE_HAND: 'DISABLE_RAISE_HAND',
|
|
@@ -963,6 +991,22 @@ export const DISPLAY_HINTS = {
|
|
|
963
991
|
|
|
964
992
|
// Voip (audio/video)
|
|
965
993
|
VOIP_IS_ENABLED: 'VOIP_IS_ENABLED',
|
|
994
|
+
|
|
995
|
+
// Webcast
|
|
996
|
+
WEBCAST_CONTROL_START: 'WEBCAST_CONTROL_START',
|
|
997
|
+
WEBCAST_CONTROL_STOP: 'WEBCAST_CONTROL_STOP',
|
|
998
|
+
|
|
999
|
+
// Stage View
|
|
1000
|
+
STAGE_VIEW_ACTIVE: 'STAGE_VIEW_ACTIVE',
|
|
1001
|
+
STAGE_VIEW_INACTIVE: 'STAGE_VIEW_INACTIVE',
|
|
1002
|
+
ENABLE_STAGE_VIEW: 'ENABLE_STAGE_VIEW',
|
|
1003
|
+
DISABLE_STAGE_VIEW: 'DISABLE_STAGE_VIEW',
|
|
1004
|
+
|
|
1005
|
+
// Practice Session
|
|
1006
|
+
PRACTICE_SESSION_ON: 'PRACTICE_SESSION_ON',
|
|
1007
|
+
PRACTICE_SESSION_OFF: 'PRACTICE_SESSION_OFF',
|
|
1008
|
+
SHOW_PRACTICE_SESSION_START: 'SHOW_PRACTICE_SESSION_START',
|
|
1009
|
+
SHOW_PRACTICE_SESSION_STOP: 'SHOW_PRACTICE_SESSION_STOP',
|
|
966
1010
|
};
|
|
967
1011
|
|
|
968
1012
|
export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
|
|
@@ -1275,6 +1319,8 @@ export const MEETING_INFO_FAILURE_REASON = {
|
|
|
1275
1319
|
WRONG_CAPTCHA: 'WRONG_CAPTCHA', // wbxappapi requires a captcha code or a wrong captcha code was provided
|
|
1276
1320
|
POLICY: 'POLICY', // meeting info request violates some meeting policy
|
|
1277
1321
|
WEBINAR_REGISTRATION: 'WEBINAR_REGISTRATION', // webinar need registration
|
|
1322
|
+
NEED_JOIN_WITH_WEBCAST: 'NEED_JOIN_WITH_WEBCAST', // webinar need using webcast join
|
|
1323
|
+
WEBINAR_NEED_REGISTRATIONID: 'WEBINAR_NEED_REGISTRATIONID', // webinar need registrationID
|
|
1278
1324
|
OTHER: 'OTHER', // any other error (network, etc)
|
|
1279
1325
|
};
|
|
1280
1326
|
|
|
@@ -177,7 +177,12 @@ export default class ControlsOptionsManager {
|
|
|
177
177
|
* @memberof ControlsOptionsManager
|
|
178
178
|
* @returns {Promise}
|
|
179
179
|
*/
|
|
180
|
-
private setControls(setting: {
|
|
180
|
+
private setControls(setting: {
|
|
181
|
+
[Setting.muted]?: boolean;
|
|
182
|
+
[Setting.disallowUnmute]?: boolean;
|
|
183
|
+
[Setting.muteOnEntry]?: boolean;
|
|
184
|
+
[Setting.roles]?: Array<string>;
|
|
185
|
+
}): Promise<any> {
|
|
181
186
|
LoggerProxy.logger.log(
|
|
182
187
|
`ControlsOptionsManager:index#setControls --> ${JSON.stringify(setting)}`
|
|
183
188
|
);
|
|
@@ -190,6 +195,7 @@ export default class ControlsOptionsManager {
|
|
|
190
195
|
Object.entries(setting).forEach(([key, value]) => {
|
|
191
196
|
if (
|
|
192
197
|
!shouldSkipCheckToMergeBody &&
|
|
198
|
+
value !== undefined &&
|
|
193
199
|
!Util?.[`${value ? CAN_SET : CAN_UNSET}${key}`](this.displayHints)
|
|
194
200
|
) {
|
|
195
201
|
error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
|
|
@@ -219,6 +225,14 @@ export default class ControlsOptionsManager {
|
|
|
219
225
|
}
|
|
220
226
|
break;
|
|
221
227
|
|
|
228
|
+
case Setting.roles:
|
|
229
|
+
if (Array.isArray(value)) {
|
|
230
|
+
body.audio = body.audio
|
|
231
|
+
? {...body.audio, [camelCase(key)]: value}
|
|
232
|
+
: {[camelCase(key)]: value};
|
|
233
|
+
}
|
|
234
|
+
break;
|
|
235
|
+
|
|
222
236
|
default:
|
|
223
237
|
error = new PermissionError(`${key} [${value}] not allowed, due to moderator property.`);
|
|
224
238
|
}
|
|
@@ -261,18 +275,21 @@ export default class ControlsOptionsManager {
|
|
|
261
275
|
* @param {boolean} mutedEnabled
|
|
262
276
|
* @param {boolean} disallowUnmuteEnabled
|
|
263
277
|
* @param {boolean} muteOnEntryEnabled
|
|
278
|
+
* @param {array} roles which should be muted
|
|
264
279
|
* @memberof ControlsOptionsManager
|
|
265
280
|
* @returns {Promise}
|
|
266
281
|
*/
|
|
267
282
|
public setMuteAll(
|
|
268
283
|
mutedEnabled: boolean,
|
|
269
284
|
disallowUnmuteEnabled: boolean,
|
|
270
|
-
muteOnEntryEnabled: boolean
|
|
285
|
+
muteOnEntryEnabled: boolean,
|
|
286
|
+
roles: Array<string>
|
|
271
287
|
): Promise<any> {
|
|
272
288
|
return this.setControls({
|
|
273
289
|
[Setting.muted]: mutedEnabled,
|
|
274
290
|
[Setting.disallowUnmute]: disallowUnmuteEnabled,
|
|
275
291
|
[Setting.muteOnEntry]: muteOnEntryEnabled,
|
|
292
|
+
[Setting.roles]: roles,
|
|
276
293
|
});
|
|
277
294
|
}
|
|
278
295
|
}
|
|
@@ -217,6 +217,18 @@ class Utils {
|
|
|
217
217
|
if (control.properties.enabled === false) {
|
|
218
218
|
requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST);
|
|
219
219
|
}
|
|
220
|
+
if (control.properties.panelistEnabled === true) {
|
|
221
|
+
requiredHints.push(DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST);
|
|
222
|
+
}
|
|
223
|
+
if (control.properties.panelistEnabled === false) {
|
|
224
|
+
requiredHints.push(DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST);
|
|
225
|
+
}
|
|
226
|
+
if (control.properties.attendeeCount === true) {
|
|
227
|
+
requiredHints.push(DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT);
|
|
228
|
+
}
|
|
229
|
+
if (control.properties.attendeeCount === false) {
|
|
230
|
+
requiredHints.push(DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT);
|
|
231
|
+
}
|
|
220
232
|
|
|
221
233
|
return Utils.hasHints({requiredHints, displayHints});
|
|
222
234
|
}
|
package/src/index.ts
CHANGED
|
@@ -8,7 +8,7 @@ import CaptchaError from './common/errors/captcha-error';
|
|
|
8
8
|
import IntentToJoinError from './common/errors/intent-to-join';
|
|
9
9
|
import PasswordError from './common/errors/password-error';
|
|
10
10
|
import PermissionError from './common/errors/permission';
|
|
11
|
-
import
|
|
11
|
+
import JoinWebinarError from './common/errors/join-webinar-error';
|
|
12
12
|
import {
|
|
13
13
|
ReclaimHostEmptyWrongKeyError,
|
|
14
14
|
ReclaimHostIsHostAlreadyError,
|
|
@@ -69,7 +69,7 @@ export {
|
|
|
69
69
|
ReclaimHostEmptyWrongKeyError,
|
|
70
70
|
Meeting,
|
|
71
71
|
MeetingInfoUtil,
|
|
72
|
-
|
|
72
|
+
JoinWebinarError,
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
export {RemoteMedia} from './multistream/remoteMedia';
|
|
@@ -79,7 +79,11 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
if (controls?.viewTheParticipantList) {
|
|
82
|
-
parsedControls.viewTheParticipantList = {
|
|
82
|
+
parsedControls.viewTheParticipantList = {
|
|
83
|
+
enabled: controls.viewTheParticipantList?.enabled ?? false,
|
|
84
|
+
panelistEnabled: controls.viewTheParticipantList?.panelistEnabled ?? false,
|
|
85
|
+
attendeeCount: controls.viewTheParticipantList?.attendeeCount ?? 0,
|
|
86
|
+
};
|
|
83
87
|
}
|
|
84
88
|
|
|
85
89
|
if (controls?.raiseHand) {
|
|
@@ -90,6 +94,23 @@ ControlsUtils.parse = (controls: any) => {
|
|
|
90
94
|
parsedControls.video = {enabled: controls.video.enabled};
|
|
91
95
|
}
|
|
92
96
|
|
|
97
|
+
if (controls?.webcastControl) {
|
|
98
|
+
parsedControls.webcastControl = {streaming: controls.webcastControl.streaming};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (controls?.meetingFull) {
|
|
102
|
+
parsedControls.meetingFull = {
|
|
103
|
+
meetingFull: controls.meetingFull?.meetingFull ?? false,
|
|
104
|
+
meetingPanelistFull: controls.meetingFull?.meetingPanelistFull ?? false,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (controls?.practiceSession) {
|
|
109
|
+
parsedControls.practiceSession = {
|
|
110
|
+
enabled: controls.practiceSession.enabled,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
93
114
|
return parsedControls;
|
|
94
115
|
};
|
|
95
116
|
|
|
@@ -121,7 +142,11 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
121
142
|
previous?.reactions?.showDisplayNameWithReactions,
|
|
122
143
|
|
|
123
144
|
hasViewTheParticipantListChanged:
|
|
124
|
-
current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled
|
|
145
|
+
current?.viewTheParticipantList?.enabled !== previous?.viewTheParticipantList?.enabled ||
|
|
146
|
+
current?.viewTheParticipantList?.panelistEnabled !==
|
|
147
|
+
previous?.viewTheParticipantList?.panelistEnabled ||
|
|
148
|
+
current?.viewTheParticipantList?.attendeeCount !==
|
|
149
|
+
previous?.viewTheParticipantList?.attendeeCount,
|
|
125
150
|
|
|
126
151
|
hasRaiseHandChanged: current?.raiseHand?.enabled !== previous?.raiseHand?.enabled,
|
|
127
152
|
|
|
@@ -167,6 +192,25 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
|
167
192
|
hasVideoEnabledChanged:
|
|
168
193
|
newControls.video?.enabled !== undefined &&
|
|
169
194
|
!isEqual(previous?.videoEnabled, current?.videoEnabled),
|
|
195
|
+
|
|
196
|
+
hasWebcastChanged: !isEqual(
|
|
197
|
+
previous?.webcastControl?.streaming,
|
|
198
|
+
current?.webcastControl?.streaming
|
|
199
|
+
),
|
|
200
|
+
|
|
201
|
+
hasMeetingFullChanged:
|
|
202
|
+
!isEqual(previous?.meetingFull?.meetingFull, current?.meetingFull?.meetingFull) ||
|
|
203
|
+
!isEqual(
|
|
204
|
+
previous?.meetingFull?.meetingPanelistFull,
|
|
205
|
+
current?.meetingFull?.meetingPanelistFull
|
|
206
|
+
),
|
|
207
|
+
|
|
208
|
+
hasPracticeSessionEnabledChanged: !isEqual(
|
|
209
|
+
previous?.practiceSession?.enabled,
|
|
210
|
+
current?.practiceSession?.enabled
|
|
211
|
+
),
|
|
212
|
+
|
|
213
|
+
hasStageViewChanged: !isEqual(previous?.videoLayout, current?.videoLayout),
|
|
170
214
|
},
|
|
171
215
|
};
|
|
172
216
|
};
|
|
@@ -6,6 +6,7 @@ FullState.parse = (fullState) => ({
|
|
|
6
6
|
type: fullState.type || FULL_STATE.UNKNOWN,
|
|
7
7
|
meetingState: fullState.state,
|
|
8
8
|
locked: fullState.locked,
|
|
9
|
+
attendeeCount: typeof fullState.attendeeCount === 'number' ? fullState.attendeeCount : 0,
|
|
9
10
|
});
|
|
10
11
|
|
|
11
12
|
FullState.getFullState = (oldFullState, newFullState) => {
|
package/src/locus-info/index.ts
CHANGED
|
@@ -64,6 +64,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
64
64
|
replace: any;
|
|
65
65
|
url: any;
|
|
66
66
|
services: any;
|
|
67
|
+
resources: any;
|
|
67
68
|
mainSessionLocusCache: any;
|
|
68
69
|
/**
|
|
69
70
|
* Constructor
|
|
@@ -263,6 +264,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
263
264
|
this.updateHostInfo(locus.host);
|
|
264
265
|
this.updateMediaShares(locus.mediaShares);
|
|
265
266
|
this.updateServices(locus.links?.services);
|
|
267
|
+
this.updateResources(locus.links?.resources);
|
|
266
268
|
}
|
|
267
269
|
|
|
268
270
|
/**
|
|
@@ -452,6 +454,7 @@ export default class LocusInfo extends EventsScope {
|
|
|
452
454
|
this.updateIdentifiers(locus.identities);
|
|
453
455
|
this.updateEmbeddedApps(locus.embeddedApps);
|
|
454
456
|
this.updateServices(locus.links?.services);
|
|
457
|
+
this.updateResources(locus.links?.resources);
|
|
455
458
|
this.compareAndUpdate();
|
|
456
459
|
// update which required to compare different objects from locus
|
|
457
460
|
}
|
|
@@ -805,6 +808,10 @@ export default class LocusInfo extends EventsScope {
|
|
|
805
808
|
hasRaiseHandChanged,
|
|
806
809
|
hasVideoChanged,
|
|
807
810
|
hasInterpretationChanged,
|
|
811
|
+
hasWebcastChanged,
|
|
812
|
+
hasMeetingFullChanged,
|
|
813
|
+
hasPracticeSessionEnabledChanged,
|
|
814
|
+
hasStageViewChanged,
|
|
808
815
|
},
|
|
809
816
|
current,
|
|
810
817
|
} = ControlsUtils.getControls(this.controls, controls);
|
|
@@ -1008,6 +1015,38 @@ export default class LocusInfo extends EventsScope {
|
|
|
1008
1015
|
);
|
|
1009
1016
|
}
|
|
1010
1017
|
|
|
1018
|
+
if (hasWebcastChanged) {
|
|
1019
|
+
this.emitScoped(
|
|
1020
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
1021
|
+
LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,
|
|
1022
|
+
{state: current.webcastControl}
|
|
1023
|
+
);
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
if (hasMeetingFullChanged) {
|
|
1027
|
+
this.emitScoped(
|
|
1028
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
1029
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,
|
|
1030
|
+
{state: current.meetingFull}
|
|
1031
|
+
);
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
if (hasPracticeSessionEnabledChanged) {
|
|
1035
|
+
this.emitScoped(
|
|
1036
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
1037
|
+
LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,
|
|
1038
|
+
{state: current.practiceSession}
|
|
1039
|
+
);
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
if (hasStageViewChanged) {
|
|
1043
|
+
this.emitScoped(
|
|
1044
|
+
{file: 'locus-info', function: 'updateControls'},
|
|
1045
|
+
LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,
|
|
1046
|
+
{state: current.videoLayout}
|
|
1047
|
+
);
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1011
1050
|
this.controls = controls;
|
|
1012
1051
|
}
|
|
1013
1052
|
}
|
|
@@ -1064,6 +1103,27 @@ export default class LocusInfo extends EventsScope {
|
|
|
1064
1103
|
}
|
|
1065
1104
|
}
|
|
1066
1105
|
|
|
1106
|
+
/**
|
|
1107
|
+
* @param {Object} resources
|
|
1108
|
+
* @returns {undefined}
|
|
1109
|
+
* @memberof LocusInfo
|
|
1110
|
+
*/
|
|
1111
|
+
updateResources(resources: Record<'webcastInstance', {url: string}>) {
|
|
1112
|
+
if (resources && !isEqual(this.resources, resources)) {
|
|
1113
|
+
this.resources = resources;
|
|
1114
|
+
this.emitScoped(
|
|
1115
|
+
{
|
|
1116
|
+
file: 'locus-info',
|
|
1117
|
+
function: 'updateResources',
|
|
1118
|
+
},
|
|
1119
|
+
LOCUSINFO.EVENTS.LINKS_RESOURCES,
|
|
1120
|
+
{
|
|
1121
|
+
resources,
|
|
1122
|
+
}
|
|
1123
|
+
);
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1067
1127
|
/**
|
|
1068
1128
|
* @param {Object} fullState
|
|
1069
1129
|
* @returns {undefined}
|
package/src/media/index.ts
CHANGED
|
@@ -183,6 +183,21 @@ Media.createMediaConnection = (
|
|
|
183
183
|
});
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
+
const devTurnServers = (window as any).webexTurnServers;
|
|
187
|
+
|
|
188
|
+
if (devTurnServers) {
|
|
189
|
+
console.log('adding webexTurnServers:', devTurnServers);
|
|
190
|
+
|
|
191
|
+
for (const devTurnServer of devTurnServers) {
|
|
192
|
+
iceServers.push({
|
|
193
|
+
urls: devTurnServer.url || turnServerInfo.url.replace('.public', '.ds.public'),
|
|
194
|
+
username: devTurnServer.username || turnServerInfo?.username || '',
|
|
195
|
+
credential: devTurnServer.password || turnServerInfo?.password || '',
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
console.log('iceServers:', iceServers);
|
|
200
|
+
|
|
186
201
|
if (isMultistream) {
|
|
187
202
|
const config: MultistreamConnectionConfig = {
|
|
188
203
|
iceServers,
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import {MEETINGS} from '../constants';
|
|
6
|
+
import ControlsOptionsUtil from '../controls-options-manager/util';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* IInMeetingActions
|
|
@@ -25,6 +26,7 @@ interface IInMeetingActions {
|
|
|
25
26
|
canStartRecording?: boolean;
|
|
26
27
|
canPauseRecording?: boolean;
|
|
27
28
|
canResumeRecording?: boolean;
|
|
29
|
+
isPremiseRecordingEnabled?: boolean;
|
|
28
30
|
canStopRecording?: boolean;
|
|
29
31
|
canRaiseHand?: boolean;
|
|
30
32
|
canLowerAllHands?: boolean;
|
|
@@ -64,6 +66,10 @@ interface IInMeetingActions {
|
|
|
64
66
|
canUpdateShareControl?: boolean;
|
|
65
67
|
canEnableViewTheParticipantsList?: boolean;
|
|
66
68
|
canDisableViewTheParticipantsList?: boolean;
|
|
69
|
+
canEnableViewTheParticipantsListPanelist?: boolean;
|
|
70
|
+
canDisableViewTheParticipantsListPanelist?: boolean;
|
|
71
|
+
canEnableShowAttendeeCount?: boolean;
|
|
72
|
+
canDisableShowAttendeeCount?: boolean;
|
|
67
73
|
canEnableRaiseHand?: boolean;
|
|
68
74
|
canDisableRaiseHand?: boolean;
|
|
69
75
|
canEnableVideo?: boolean;
|
|
@@ -83,6 +89,15 @@ interface IInMeetingActions {
|
|
|
83
89
|
canShareWhiteBoard?: boolean;
|
|
84
90
|
enforceVirtualBackground?: boolean;
|
|
85
91
|
canPollingAndQA?: boolean;
|
|
92
|
+
canStartWebcast?: boolean;
|
|
93
|
+
canStopWebcast?: boolean;
|
|
94
|
+
canShowStageView?: boolean;
|
|
95
|
+
canEnableStageView?: boolean;
|
|
96
|
+
canDisableStageView?: boolean;
|
|
97
|
+
isPracticeSessionOn?: boolean;
|
|
98
|
+
isPracticeSessionOff?: boolean;
|
|
99
|
+
canStartPracticeSession?: boolean;
|
|
100
|
+
canStopPracticeSession?: boolean;
|
|
86
101
|
}
|
|
87
102
|
|
|
88
103
|
/**
|
|
@@ -107,6 +122,8 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
107
122
|
|
|
108
123
|
canResumeRecording = null;
|
|
109
124
|
|
|
125
|
+
isPremiseRecordingEnabled = null;
|
|
126
|
+
|
|
110
127
|
canStopRecording = null;
|
|
111
128
|
|
|
112
129
|
canSetMuteOnEntry = null;
|
|
@@ -201,6 +218,14 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
201
218
|
|
|
202
219
|
canDisableViewTheParticipantsList = null;
|
|
203
220
|
|
|
221
|
+
canEnableViewTheParticipantsListPanelist = null;
|
|
222
|
+
|
|
223
|
+
canDisableViewTheParticipantsListPanelist = null;
|
|
224
|
+
|
|
225
|
+
canEnableShowAttendeeCount = null;
|
|
226
|
+
|
|
227
|
+
canDisableShowAttendeeCount = null;
|
|
228
|
+
|
|
204
229
|
canEnableRaiseHand = null;
|
|
205
230
|
|
|
206
231
|
canDisableRaiseHand = null;
|
|
@@ -238,6 +263,25 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
238
263
|
canShareWhiteBoard = null;
|
|
239
264
|
|
|
240
265
|
canPollingAndQA = null;
|
|
266
|
+
|
|
267
|
+
canStartWebcast = null;
|
|
268
|
+
|
|
269
|
+
canStopWebcast = null;
|
|
270
|
+
|
|
271
|
+
canShowStageView = null;
|
|
272
|
+
|
|
273
|
+
canEnableStageView = null;
|
|
274
|
+
|
|
275
|
+
canDisableStageView = null;
|
|
276
|
+
|
|
277
|
+
isPracticeSessionOn = null;
|
|
278
|
+
|
|
279
|
+
isPracticeSessionOff = null;
|
|
280
|
+
|
|
281
|
+
canStartPracticeSession = null;
|
|
282
|
+
|
|
283
|
+
canStopPracticeSession = null;
|
|
284
|
+
|
|
241
285
|
/**
|
|
242
286
|
* Returns all meeting action options
|
|
243
287
|
* @returns {Object}
|
|
@@ -260,6 +304,7 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
260
304
|
canPauseRecording: this.canPauseRecording,
|
|
261
305
|
canResumeRecording: this.canResumeRecording,
|
|
262
306
|
canStopRecording: this.canStopRecording,
|
|
307
|
+
isPremiseRecordingEnabled: this.isPremiseRecordingEnabled,
|
|
263
308
|
canRaiseHand: this.canRaiseHand,
|
|
264
309
|
canLowerAllHands: this.canLowerAllHands,
|
|
265
310
|
canLowerSomeoneElsesHand: this.canLowerSomeoneElsesHand,
|
|
@@ -298,6 +343,10 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
298
343
|
canUpdateShareControl: this.canUpdateShareControl,
|
|
299
344
|
canEnableViewTheParticipantsList: this.canEnableViewTheParticipantsList,
|
|
300
345
|
canDisableViewTheParticipantsList: this.canDisableViewTheParticipantsList,
|
|
346
|
+
canEnableViewTheParticipantsListPanelist: this.canEnableViewTheParticipantsListPanelist,
|
|
347
|
+
canDisableViewTheParticipantsListPanelist: this.canDisableViewTheParticipantsListPanelist,
|
|
348
|
+
canEnableShowAttendeeCount: this.canEnableShowAttendeeCount,
|
|
349
|
+
canDisableShowAttendeeCount: this.canDisableShowAttendeeCount,
|
|
301
350
|
canEnableRaiseHand: this.canEnableRaiseHand,
|
|
302
351
|
canDisableRaiseHand: this.canDisableRaiseHand,
|
|
303
352
|
canEnableVideo: this.canEnableVideo,
|
|
@@ -317,6 +366,15 @@ export default class InMeetingActions implements IInMeetingActions {
|
|
|
317
366
|
supportHDV: this.supportHDV,
|
|
318
367
|
canShareWhiteBoard: this.canShareWhiteBoard,
|
|
319
368
|
canPollingAndQA: this.canPollingAndQA,
|
|
369
|
+
canStartWebcast: this.canStartWebcast,
|
|
370
|
+
canStopWebcast: this.canStopWebcast,
|
|
371
|
+
canShowStageView: this.canShowStageView,
|
|
372
|
+
canEnableStageView: this.canEnableStageView,
|
|
373
|
+
canDisableStageView: this.canDisableStageView,
|
|
374
|
+
isPracticeSessionOn: this.isPracticeSessionOn,
|
|
375
|
+
isPracticeSessionOff: this.isPracticeSessionOff,
|
|
376
|
+
canStartPracticeSession: this.canStartPracticeSession,
|
|
377
|
+
canStopPracticeSession: this.canStopPracticeSession,
|
|
320
378
|
});
|
|
321
379
|
|
|
322
380
|
/**
|