@webex/plugin-meetings 3.8.1 → 3.9.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.
- package/README.md +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +32 -3
- 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/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +26 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +11 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +84 -91
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +4 -1
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/media/index.js +2 -2
- package/dist/media/index.js.map +1 -1
- package/dist/meeting/brbState.js +17 -14
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +11 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +484 -287
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +19 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
- package/dist/meeting/type.js.map +1 -0
- package/dist/meeting/util.js +68 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +35 -33
- package/dist/meetings/index.js.map +1 -1
- package/dist/members/index.js +14 -11
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +3 -3
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +25 -8
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +1 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +34 -5
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +42 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +32 -2
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/index.js +8 -13
- package/dist/reachability/index.js.map +1 -1
- package/dist/types/constants.d.ts +28 -0
- package/dist/types/controls-options-manager/enums.d.ts +2 -1
- package/dist/types/controls-options-manager/types.d.ts +4 -1
- package/dist/types/locus-info/index.d.ts +2 -9
- package/dist/types/meeting/brbState.d.ts +0 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
- package/dist/types/meeting/index.d.ts +47 -19
- package/dist/types/meeting/request.d.ts +9 -1
- package/dist/types/meeting/request.type.d.ts +74 -0
- package/dist/types/meeting/type.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +3 -0
- package/dist/types/members/index.d.ts +12 -8
- package/dist/types/members/request.d.ts +1 -1
- package/dist/types/members/util.d.ts +13 -6
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/multistream/remoteMedia.d.ts +20 -1
- package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
- package/dist/types/multistream/sendSlotManager.d.ts +16 -0
- package/dist/types/reachability/index.d.ts +2 -2
- package/dist/webinar/index.js +1 -1
- package/package.json +24 -25
- package/src/constants.ts +32 -2
- package/src/controls-options-manager/enums.ts +1 -0
- package/src/controls-options-manager/types.ts +6 -1
- package/src/controls-options-manager/util.ts +31 -0
- package/src/locus-info/controlsUtils.ts +15 -0
- package/src/locus-info/index.ts +103 -92
- package/src/locus-info/parser.ts +5 -1
- package/src/media/index.ts +2 -2
- package/src/meeting/brbState.ts +13 -9
- package/src/meeting/in-meeting-actions.ts +21 -0
- package/src/meeting/index.ts +278 -73
- package/src/meeting/request.ts +16 -0
- package/src/meeting/request.type.ts +64 -0
- package/src/meeting/type.ts +9 -0
- package/src/meeting/util.ts +73 -2
- package/src/meetings/index.ts +3 -2
- package/src/members/index.ts +22 -12
- package/src/members/request.ts +2 -2
- package/src/members/util.ts +34 -6
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +7 -7
- package/src/multistream/remoteMedia.ts +34 -4
- package/src/multistream/remoteMediaGroup.ts +37 -2
- package/src/multistream/sendSlotManager.ts +34 -2
- package/src/reachability/index.ts +8 -16
- package/test/unit/spec/controls-options-manager/util.js +58 -0
- package/test/unit/spec/locus-info/controlsUtils.js +52 -0
- package/test/unit/spec/locus-info/index.js +247 -89
- package/test/unit/spec/locus-info/parser.js +3 -2
- package/test/unit/spec/media/index.ts +107 -0
- package/test/unit/spec/meeting/brbState.ts +23 -4
- package/test/unit/spec/meeting/in-meeting-actions.ts +10 -0
- package/test/unit/spec/meeting/index.js +976 -91
- package/test/unit/spec/meeting/request.js +71 -0
- package/test/unit/spec/meeting/utils.js +122 -1
- package/test/unit/spec/meetings/index.js +2 -0
- package/test/unit/spec/members/index.js +98 -11
- package/test/unit/spec/members/request.js +57 -2
- package/test/unit/spec/members/utils.js +139 -17
- package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
- package/test/unit/spec/multistream/remoteMedia.ts +66 -2
- package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
- package/test/unit/spec/reachability/index.ts +160 -9
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
- package/dist/common/errors/reclaim-host-role-error.js +0 -158
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -35
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -81
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -34
- package/dist/common/queue.d.ts +0 -32
- package/dist/config.d.ts +0 -73
- package/dist/constants.d.ts +0 -952
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -5
- package/dist/controls-options-manager/index.d.ts +0 -120
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -7
- package/dist/index.d.ts +0 -4
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -269
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -212
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -32
- package/dist/media/properties.d.ts +0 -108
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -233
- package/dist/mediaQualityMetrics/config.js +0 -513
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -79
- package/dist/meeting/index.d.ts +0 -1622
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -116
- package/dist/meeting/request.d.ts +0 -257
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -2
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -57
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -23
- package/dist/meetings/index.d.ts +0 -296
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -148
- package/dist/member/member.types.d.ts +0 -11
- package/dist/member/member.types.js +0 -18
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -24
- package/dist/members/index.d.ts +0 -308
- package/dist/members/request.d.ts +0 -58
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -2
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -59
- package/dist/metrics/index.d.ts +0 -152
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -226
- package/dist/networkQualityMonitor/index.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -139
- package/dist/reachability/request.d.ts +0 -35
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -32
- package/dist/reconnection-manager/index.d.ts +0 -112
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -193
- package/dist/recording-controller/util.d.ts +0 -13
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -116
- package/dist/roap/request.d.ts +0 -35
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -81
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -118
- package/dist/statsAnalyzer/global.js +0 -127
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -193
- package/dist/statsAnalyzer/index.js +0 -1019
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
- package/dist/statsAnalyzer/mqaUtil.js +0 -181
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
package/src/constants.ts
CHANGED
@@ -217,6 +217,7 @@ export const DIALER_REGEX = {
|
|
217
217
|
PHONE_NUMBER:
|
218
218
|
/^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/,
|
219
219
|
E164_FORMAT: /^\+[1-9]\d{1,14}$/,
|
220
|
+
INTERNAL_NUMBER: /^\d{1,14}$/,
|
220
221
|
};
|
221
222
|
|
222
223
|
// eslint-disable-next-line max-len
|
@@ -262,7 +263,6 @@ export const RECORDING_STATE = {
|
|
262
263
|
PAUSED: 'paused',
|
263
264
|
RESUMED: 'resumed',
|
264
265
|
};
|
265
|
-
|
266
266
|
export const SHARE_STATUS = {
|
267
267
|
NO_SHARE: 'no_share',
|
268
268
|
REMOTE_SHARE_ACTIVE: 'remote_share_active',
|
@@ -372,6 +372,7 @@ export const EVENT_TRIGGERS = {
|
|
372
372
|
MEETING_CONTROLS_ANNOTATION_UPDATED: 'meeting:controls:annotation:updated',
|
373
373
|
MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED:
|
374
374
|
'meeting:controls:remote-desktop-control:updated',
|
375
|
+
MEETING_CONTROLS_POLLING_QA_UPDATED: 'meeting:controls:polling-qa:updated',
|
375
376
|
// Locus URL changed
|
376
377
|
MEETING_LOCUS_URL_UPDATE: 'meeting:locus:locusUrl:update',
|
377
378
|
MEETING_STREAM_PUBLISH_STATE_CHANGED: 'meeting:streamPublishStateChanged',
|
@@ -379,6 +380,7 @@ export const EVENT_TRIGGERS = {
|
|
379
380
|
MEETING_TRANSCRIPTION_CONNECTED: 'meeting:transcription:connected',
|
380
381
|
MEETING_STARTED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:started',
|
381
382
|
MEETING_STOPPED_RECEIVING_TRANSCRIPTION: 'meeting:receiveTranscription:stopped',
|
383
|
+
MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED: 'meeting:transcription:spokenLanguageUpdate',
|
382
384
|
MEETING_MANUAL_CAPTION_UPDATED: 'meeting:manualCaptionControl:updated',
|
383
385
|
MEETING_CAPTION_RECEIVED: 'meeting:caption-received',
|
384
386
|
MEETING_PARTICIPANT_REASON_CHANGED: 'meeting:participant-reason-changed',
|
@@ -699,6 +701,8 @@ export const LOCUSINFO = {
|
|
699
701
|
CONTROLS_MEETING_LAYOUT_UPDATED: 'CONTROLS_MEETING_LAYOUT_UPDATED',
|
700
702
|
CONTROLS_RECORDING_UPDATED: 'CONTROLS_RECORDING_UPDATED',
|
701
703
|
CONTROLS_MEETING_TRANSCRIBE_UPDATED: 'CONTROLS_MEETING_TRANSCRIBE_UPDATED',
|
704
|
+
CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED:
|
705
|
+
'CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED',
|
702
706
|
CONTROLS_MEETING_MANUAL_CAPTION_UPDATED: 'CONTROLS_MEETING_MANUAL_CAPTION_UPDATED',
|
703
707
|
CONTROLS_MEETING_BREAKOUT_UPDATED: 'CONTROLS_MEETING_BREAKOUT_UPDATED',
|
704
708
|
CONTROLS_MEETING_CONTAINER_UPDATED: 'CONTROLS_MEETING_CONTAINER_UPDATED',
|
@@ -717,6 +721,7 @@ export const LOCUSINFO = {
|
|
717
721
|
CONTROLS_STAGE_VIEW_UPDATED: 'CONTROLS_STAGE_VIEW_UPDATED',
|
718
722
|
CONTROLS_ANNOTATION_CHANGED: 'CONTROLS_ANNOTATION_CHANGED',
|
719
723
|
CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED: 'CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED',
|
724
|
+
CONTROLS_POLLING_QA_CHANGED: 'CONTROLS_POLLING_QA_CHANGED',
|
720
725
|
SELF_UNADMITTED_GUEST: 'SELF_UNADMITTED_GUEST',
|
721
726
|
SELF_ADMITTED_GUEST: 'SELF_ADMITTED_GUEST',
|
722
727
|
SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED: 'SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED',
|
@@ -943,6 +948,9 @@ export const DISPLAY_HINTS = {
|
|
943
948
|
PREMISE_RECORDING_CONTROL_PAUSE: 'PREMISE_RECORDING_CONTROL_PAUSE',
|
944
949
|
PREMISE_RECORDING_CONTROL_STOP: 'PREMISE_RECORDING_CONTROL_STOP',
|
945
950
|
PREMISE_RECORDING_CONTROL_RESUME: 'PREMISE_RECORDING_CONTROL_RESUME',
|
951
|
+
LOCAL_RECORDING_STATUS_STARTED: 'LOCAL_RECORDING_STATUS_STARTED',
|
952
|
+
LOCAL_RECORDING_STATUS_STOPPED: 'LOCAL_RECORDING_STATUS_STOPPED',
|
953
|
+
LOCAL_RECORDING_STATUS_PAUSED: 'LOCAL_RECORDING_STATUS_PAUSED',
|
946
954
|
LOCK_CONTROL_UNLOCK: 'LOCK_CONTROL_UNLOCK',
|
947
955
|
LOCK_CONTROL_LOCK: 'LOCK_CONTROL_LOCK',
|
948
956
|
LOCK_STATUS_LOCKED: 'LOCK_STATUS_LOCKED',
|
@@ -982,7 +990,6 @@ export const DISPLAY_HINTS = {
|
|
982
990
|
CAN_RENAME_SELF_AND_OBSERVED: 'CAN_RENAME_SELF_AND_OBSERVED',
|
983
991
|
CAN_RENAME_OTHERS: 'CAN_RENAME_OTHERS',
|
984
992
|
MOVE_TO_LOBBY: 'MOVE_TO_LOBBY',
|
985
|
-
|
986
993
|
// breakout session
|
987
994
|
BREAKOUT_MANAGEMENT: 'BREAKOUT_MANAGEMENT',
|
988
995
|
BROADCAST_MESSAGE_TO_BREAKOUT: 'BROADCAST_MESSAGE_TO_BREAKOUT',
|
@@ -1046,6 +1053,10 @@ export const DISPLAY_HINTS = {
|
|
1046
1053
|
// Remote Desktop Control
|
1047
1054
|
ENABLE_RDC_MEETING_OPTION: 'ENABLE_RDC_MEETING_OPTION',
|
1048
1055
|
DISABLE_RDC_MEETING_OPTION: 'DISABLE_RDC_MEETING_OPTION',
|
1056
|
+
|
1057
|
+
// Polling QA
|
1058
|
+
ENABLE_ATTENDEE_START_POLLING_QA: 'ENABLE_ATTENDEE_START_POLLING_QA',
|
1059
|
+
DISABLE_ATTENDEE_START_POLLING_QA: 'DISABLE_ATTENDEE_START_POLLING_QA',
|
1049
1060
|
};
|
1050
1061
|
|
1051
1062
|
export const INTERSTITIAL_DISPLAY_HINTS = [DISPLAY_HINTS.VOIP_IS_ENABLED];
|
@@ -1179,6 +1190,7 @@ export const QUALITY_LEVELS = {
|
|
1179
1190
|
HIGH: 'HIGH',
|
1180
1191
|
'360p': '360p',
|
1181
1192
|
'480p': '480p',
|
1193
|
+
'540p': '540p',
|
1182
1194
|
'720p': '720p',
|
1183
1195
|
'1080p': '1080p',
|
1184
1196
|
};
|
@@ -1208,6 +1220,18 @@ export const AVAILABLE_RESOLUTIONS = {
|
|
1208
1220
|
},
|
1209
1221
|
},
|
1210
1222
|
},
|
1223
|
+
'540p': {
|
1224
|
+
video: {
|
1225
|
+
width: {
|
1226
|
+
max: 960,
|
1227
|
+
ideal: 960,
|
1228
|
+
},
|
1229
|
+
height: {
|
1230
|
+
max: 540,
|
1231
|
+
ideal: 540,
|
1232
|
+
},
|
1233
|
+
},
|
1234
|
+
},
|
1211
1235
|
'720p': {
|
1212
1236
|
video: {
|
1213
1237
|
width: {
|
@@ -1348,3 +1372,9 @@ export const INITIAL_REGISTRATION_STATUS = {
|
|
1348
1372
|
mercuryConnect: false,
|
1349
1373
|
checkH264Support: false,
|
1350
1374
|
};
|
1375
|
+
|
1376
|
+
export const STAGE_MANAGER_TYPE = {
|
1377
|
+
LOGO: 0b001,
|
1378
|
+
BACKGROUND: 0b010,
|
1379
|
+
NAME_LABEL: 0b100,
|
1380
|
+
};
|
@@ -48,6 +48,10 @@ export interface RemoteDesktopControlProperties {
|
|
48
48
|
enabled?: boolean;
|
49
49
|
}
|
50
50
|
|
51
|
+
export interface PollingQAProperties {
|
52
|
+
enabled?: boolean;
|
53
|
+
}
|
54
|
+
|
51
55
|
export type Properties =
|
52
56
|
| AudioProperties
|
53
57
|
| RaiseHandProperties
|
@@ -56,7 +60,8 @@ export type Properties =
|
|
56
60
|
| VideoProperties
|
57
61
|
| ViewTheParticipantListProperties
|
58
62
|
| AnnotationProperties
|
59
|
-
| RemoteDesktopControlProperties
|
63
|
+
| RemoteDesktopControlProperties
|
64
|
+
| PollingQAProperties;
|
60
65
|
|
61
66
|
export interface ControlConfig<Props = Properties> {
|
62
67
|
/**
|
@@ -9,6 +9,7 @@ import {
|
|
9
9
|
VideoProperties,
|
10
10
|
type RemoteDesktopControlProperties,
|
11
11
|
type AnnotationProperties,
|
12
|
+
type PollingQAProperties,
|
12
13
|
} from './types';
|
13
14
|
|
14
15
|
/**
|
@@ -304,6 +305,29 @@ class Utils {
|
|
304
305
|
return Utils.hasHints({requiredHints, displayHints});
|
305
306
|
}
|
306
307
|
|
308
|
+
/**
|
309
|
+
* Validate if a pollingQA-scoped control is allowed to be sent to the service.
|
310
|
+
*
|
311
|
+
* @param {ControlConfig<PollingQAProperties>} control - Polling QA config to validate
|
312
|
+
* @param {Array<string>} displayHints - All available hints
|
313
|
+
* @returns {boolean} - True if all of the actions are allowed.
|
314
|
+
*/
|
315
|
+
public static canUpdatePollingQA(
|
316
|
+
control: ControlConfig<PollingQAProperties>,
|
317
|
+
displayHints: Array<string>
|
318
|
+
): boolean {
|
319
|
+
const requiredHints = [];
|
320
|
+
|
321
|
+
if (control.properties.enabled === true) {
|
322
|
+
requiredHints.push(DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA);
|
323
|
+
}
|
324
|
+
if (control.properties.enabled === false) {
|
325
|
+
requiredHints.push(DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA);
|
326
|
+
}
|
327
|
+
|
328
|
+
return Utils.hasHints({requiredHints, displayHints});
|
329
|
+
}
|
330
|
+
|
307
331
|
/**
|
308
332
|
* Validate that a control can be sent to the service based on the provided
|
309
333
|
* display hints.
|
@@ -363,6 +387,13 @@ class Utils {
|
|
363
387
|
);
|
364
388
|
break;
|
365
389
|
|
390
|
+
case Control.pollingQA:
|
391
|
+
determinant = Utils.canUpdatePollingQA(
|
392
|
+
control as ControlConfig<PollingQAProperties>,
|
393
|
+
displayHints
|
394
|
+
);
|
395
|
+
break;
|
396
|
+
|
366
397
|
default:
|
367
398
|
determinant = false;
|
368
399
|
}
|
@@ -40,6 +40,7 @@ ControlsUtils.parse = (controls: any) => {
|
|
40
40
|
parsedControls.transcribe = {
|
41
41
|
transcribing: controls.transcribe.transcribing,
|
42
42
|
caption: controls.transcribe.caption,
|
43
|
+
spokenLanguage: controls.transcribe.spokenLanguage,
|
43
44
|
};
|
44
45
|
}
|
45
46
|
|
@@ -123,6 +124,12 @@ ControlsUtils.parse = (controls: any) => {
|
|
123
124
|
};
|
124
125
|
}
|
125
126
|
|
127
|
+
if (controls?.pollingQAControl) {
|
128
|
+
parsedControls.pollingQAControl = {
|
129
|
+
enabled: controls.pollingQAControl.enabled,
|
130
|
+
};
|
131
|
+
}
|
132
|
+
|
126
133
|
return parsedControls;
|
127
134
|
};
|
128
135
|
|
@@ -186,6 +193,11 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
186
193
|
!isEqual(previous?.transcribe?.transcribing, current?.transcribe?.transcribing) && // upon first join, previous?.record?.recording = undefined; thus, never going to be equal and will always return true
|
187
194
|
(previous?.transcribe?.transcribing || current?.transcribe?.transcribing), // therefore, condition added to prevent false firings of #meeting:recording:stopped upon first joining a meeting
|
188
195
|
|
196
|
+
hasTranscribeSpokenLanguageChanged:
|
197
|
+
current?.transcribe &&
|
198
|
+
!isEqual(previous?.transcribe?.spokenLanguage, current?.transcribe?.spokenLanguage) &&
|
199
|
+
!!(previous?.transcribe?.spokenLanguage || current?.transcribe?.spokenLanguage),
|
200
|
+
|
189
201
|
hasManualCaptionChanged:
|
190
202
|
current?.manualCaptionControl &&
|
191
203
|
!isEqual(previous?.manualCaptionControl?.enabled, current?.manualCaptionControl?.enabled) &&
|
@@ -229,6 +241,9 @@ ControlsUtils.getControls = (oldControls: any, newControls: any) => {
|
|
229
241
|
|
230
242
|
hasRemoteDesktopControlChanged:
|
231
243
|
current?.rdcControl?.enabled !== previous?.rdcControl?.enabled,
|
244
|
+
|
245
|
+
hasPollingQAControlChanged:
|
246
|
+
current?.pollingQAControl?.enabled !== previous?.pollingQAControl?.enabled,
|
232
247
|
},
|
233
248
|
};
|
234
249
|
};
|
package/src/locus-info/index.ts
CHANGED
@@ -48,7 +48,6 @@ export default class LocusInfo extends EventsScope {
|
|
48
48
|
aclUrl: any;
|
49
49
|
baseSequence: any;
|
50
50
|
created: any;
|
51
|
-
deltaParticipants: any;
|
52
51
|
identities: any;
|
53
52
|
membership: any;
|
54
53
|
participants: any;
|
@@ -94,18 +93,26 @@ export default class LocusInfo extends EventsScope {
|
|
94
93
|
* Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.
|
95
94
|
*
|
96
95
|
* @param {Meeting} meeting
|
96
|
+
* @param {boolean} isLocusUrlChanged
|
97
|
+
* @param {Locus} locus
|
97
98
|
* @returns {undefined}
|
98
99
|
*/
|
99
|
-
private doLocusSync(meeting: any) {
|
100
|
-
let isDelta;
|
100
|
+
private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {
|
101
101
|
let url;
|
102
|
-
|
103
|
-
|
102
|
+
let isDelta = false;
|
103
|
+
let meetingDestroyed = false;
|
104
|
+
|
105
|
+
if (isLocusUrlChanged) {
|
106
|
+
// for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,
|
107
|
+
// so use the main session locus url to get the full locus(full participants list in the response).
|
108
|
+
// for the locus url changed case from main session to breakout, we don't need to care about it here,
|
109
|
+
// because it is a USE_INCOMING case, it will not be executed here.
|
110
|
+
url = locus.url;
|
111
|
+
} else if (this.locusParser.workingCopy?.syncUrl) {
|
104
112
|
url = this.locusParser.workingCopy.syncUrl;
|
105
113
|
isDelta = true;
|
106
114
|
} else {
|
107
115
|
url = meeting.locusUrl;
|
108
|
-
isDelta = false;
|
109
116
|
}
|
110
117
|
|
111
118
|
LoggerProxy.logger.info(
|
@@ -134,35 +141,77 @@ export default class LocusInfo extends EventsScope {
|
|
134
141
|
|
135
142
|
isDelta = false;
|
136
143
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
+
// Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case
|
145
|
+
if (e.statusCode !== 403) {
|
146
|
+
return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {
|
147
|
+
LoggerProxy.logger.info(
|
148
|
+
'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
|
149
|
+
);
|
150
|
+
this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
|
151
|
+
meetingDestroyed = true;
|
152
|
+
throw err;
|
153
|
+
});
|
154
|
+
}
|
155
|
+
LoggerProxy.logger.info(
|
156
|
+
'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'
|
157
|
+
);
|
158
|
+
} else {
|
159
|
+
LoggerProxy.logger.info(
|
160
|
+
'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
|
161
|
+
);
|
144
162
|
}
|
145
|
-
LoggerProxy.logger.info(
|
146
|
-
'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'
|
147
|
-
);
|
148
163
|
this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);
|
164
|
+
meetingDestroyed = true;
|
149
165
|
throw e;
|
150
166
|
})
|
151
167
|
.then((res) => {
|
152
|
-
if (
|
153
|
-
if (
|
154
|
-
meeting.locusInfo.handleLocusDelta(res.body, meeting);
|
155
|
-
} else {
|
168
|
+
if (isEmpty(res.body)) {
|
169
|
+
if (isDelta) {
|
156
170
|
LoggerProxy.logger.info(
|
157
171
|
'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'
|
158
172
|
);
|
173
|
+
} else {
|
174
|
+
LoggerProxy.logger.info(
|
175
|
+
'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'
|
176
|
+
);
|
159
177
|
}
|
160
|
-
|
161
|
-
|
178
|
+
|
179
|
+
return;
|
180
|
+
}
|
181
|
+
|
182
|
+
if (isDelta) {
|
183
|
+
if (res.body.baseSequence) {
|
184
|
+
meeting.locusInfo.handleLocusDelta(res.body, meeting);
|
185
|
+
|
186
|
+
return;
|
187
|
+
}
|
188
|
+
// in some cases Locus might return us full DTO even when we asked for a delta
|
189
|
+
LoggerProxy.logger.info(
|
190
|
+
'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'
|
191
|
+
);
|
192
|
+
}
|
193
|
+
meeting.locusInfo.onFullLocus(res.body);
|
194
|
+
})
|
195
|
+
.catch((e) => {
|
196
|
+
LoggerProxy.logger.info(
|
197
|
+
`Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`
|
198
|
+
);
|
199
|
+
|
200
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {
|
201
|
+
correlationId: meeting.correlationId,
|
202
|
+
url,
|
203
|
+
reason: e.message,
|
204
|
+
errorName: e.name,
|
205
|
+
stack: e.stack,
|
206
|
+
code: e.code,
|
207
|
+
});
|
208
|
+
})
|
209
|
+
.finally(() => {
|
210
|
+
if (!meetingDestroyed) {
|
211
|
+
// Notify parser to resume processing delta events.
|
212
|
+
// Any deltas in the queue that have now been superseded by this sync will simply be ignored
|
213
|
+
this.locusParser.resume();
|
162
214
|
}
|
163
|
-
// Notify parser to resume processing delta events.
|
164
|
-
// Any deltas in the queue that have now been superseded by this sync will simply be ignored
|
165
|
-
this.locusParser.resume();
|
166
215
|
});
|
167
216
|
}
|
168
217
|
|
@@ -175,6 +224,7 @@ export default class LocusInfo extends EventsScope {
|
|
175
224
|
*/
|
176
225
|
applyLocusDeltaData(action: string, locus: any, meeting: any) {
|
177
226
|
const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;
|
227
|
+
const isLocusUrlChanged = action === LOCUS_URL_CHANGED;
|
178
228
|
|
179
229
|
switch (action) {
|
180
230
|
case USE_INCOMING:
|
@@ -186,7 +236,7 @@ export default class LocusInfo extends EventsScope {
|
|
186
236
|
break;
|
187
237
|
case DESYNC:
|
188
238
|
case LOCUS_URL_CHANGED:
|
189
|
-
this.doLocusSync(meeting);
|
239
|
+
this.doLocusSync(meeting, isLocusUrlChanged, locus);
|
190
240
|
break;
|
191
241
|
default:
|
192
242
|
LoggerProxy.logger.info(
|
@@ -241,17 +291,6 @@ export default class LocusInfo extends EventsScope {
|
|
241
291
|
* @property {Object} person - Contains person data.
|
242
292
|
*/
|
243
293
|
|
244
|
-
/**
|
245
|
-
* Stored participant changes between the last event and the current event.
|
246
|
-
* All previously stored events are overwritten between events.
|
247
|
-
*
|
248
|
-
* @instance
|
249
|
-
* @type {Array<DeltaParticipant>}
|
250
|
-
* @private
|
251
|
-
* @member LocusInfo
|
252
|
-
*/
|
253
|
-
this.deltaParticipants = [];
|
254
|
-
|
255
294
|
this.updateLocusCache(locus);
|
256
295
|
// above section only updates the locusInfo object
|
257
296
|
// The below section makes sure it updates the locusInfo as well as updates the meeting object
|
@@ -357,7 +396,6 @@ export default class LocusInfo extends EventsScope {
|
|
357
396
|
return;
|
358
397
|
}
|
359
398
|
|
360
|
-
this.updateParticipantDeltas(locus.participants);
|
361
399
|
this.scheduledMeeting = locus.meeting || null;
|
362
400
|
this.participants = locus.participants;
|
363
401
|
const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);
|
@@ -446,12 +484,12 @@ export default class LocusInfo extends EventsScope {
|
|
446
484
|
this.updateCreated(locus.created);
|
447
485
|
this.updateFullState(locus.fullState);
|
448
486
|
this.updateHostInfo(locus.host);
|
487
|
+
this.updateLocusUrl(locus.url);
|
449
488
|
this.updateMeetingInfo(locus.info, locus.self);
|
450
489
|
this.updateMediaShares(locus.mediaShares);
|
451
490
|
this.updateParticipantsUrl(locus.participantsUrl);
|
452
491
|
this.updateReplace(locus.replace);
|
453
492
|
this.updateSelf(locus.self);
|
454
|
-
this.updateLocusUrl(locus.url);
|
455
493
|
this.updateAclUrl(locus.aclUrl);
|
456
494
|
this.updateBasequence(locus.baseSequence);
|
457
495
|
this.updateSequence(locus.sequence);
|
@@ -712,55 +750,6 @@ export default class LocusInfo extends EventsScope {
|
|
712
750
|
}
|
713
751
|
}
|
714
752
|
|
715
|
-
/**
|
716
|
-
* Update the deltaParticipants property of this object based on a list of
|
717
|
-
* provided participants.
|
718
|
-
*
|
719
|
-
* @param {Array} [participants] - The participants to update against.
|
720
|
-
* @returns {void}
|
721
|
-
*/
|
722
|
-
updateParticipantDeltas(participants: Array<any> = []) {
|
723
|
-
// Used to find a participant within a participants collection.
|
724
|
-
const findParticipant = (participant, collection) =>
|
725
|
-
collection.find((item) => item.person.id === participant.person.id);
|
726
|
-
|
727
|
-
// Generates an object that indicates which state properties have changed.
|
728
|
-
const generateDelta = (prevState: any = {}, newState: any = {}) => {
|
729
|
-
// Setup deltas.
|
730
|
-
const deltas = {
|
731
|
-
audioStatus: prevState.audioStatus !== newState.audioStatus,
|
732
|
-
videoSlidesStatus: prevState.videoSlidesStatus !== newState.videoSlidesStatus,
|
733
|
-
videoStatus: prevState.videoStatus !== newState.videoStatus,
|
734
|
-
};
|
735
|
-
|
736
|
-
// Clean the object
|
737
|
-
Object.keys(deltas).forEach((key) => {
|
738
|
-
if (deltas[key] !== true) {
|
739
|
-
delete deltas[key];
|
740
|
-
}
|
741
|
-
});
|
742
|
-
|
743
|
-
return deltas;
|
744
|
-
};
|
745
|
-
|
746
|
-
this.deltaParticipants = participants.reduce((collection, participant) => {
|
747
|
-
const existingParticipant = findParticipant(participant, this.participants || []) || {};
|
748
|
-
|
749
|
-
const delta = generateDelta(existingParticipant.status, participant.status);
|
750
|
-
|
751
|
-
const changed = Object.keys(delta).length > 0;
|
752
|
-
|
753
|
-
if (changed) {
|
754
|
-
collection.push({
|
755
|
-
person: participant.person,
|
756
|
-
delta,
|
757
|
-
});
|
758
|
-
}
|
759
|
-
|
760
|
-
return collection;
|
761
|
-
}, []);
|
762
|
-
}
|
763
|
-
|
764
753
|
/**
|
765
754
|
* update meeting's members
|
766
755
|
* @param {Object} participants new participants object
|
@@ -818,6 +807,7 @@ export default class LocusInfo extends EventsScope {
|
|
818
807
|
hasRecordingPausedChanged,
|
819
808
|
hasMeetingContainerChanged,
|
820
809
|
hasTranscribeChanged,
|
810
|
+
hasTranscribeSpokenLanguageChanged,
|
821
811
|
hasManualCaptionChanged,
|
822
812
|
hasEntryExitToneChanged,
|
823
813
|
hasBreakoutChanged,
|
@@ -837,6 +827,7 @@ export default class LocusInfo extends EventsScope {
|
|
837
827
|
hasStageViewChanged,
|
838
828
|
hasAnnotationControlChanged,
|
839
829
|
hasRemoteDesktopControlChanged,
|
830
|
+
hasPollingQAControlChanged,
|
840
831
|
},
|
841
832
|
current,
|
842
833
|
} = ControlsUtils.getControls(this.controls, controls);
|
@@ -956,6 +947,21 @@ export default class LocusInfo extends EventsScope {
|
|
956
947
|
);
|
957
948
|
}
|
958
949
|
|
950
|
+
if (hasTranscribeSpokenLanguageChanged) {
|
951
|
+
const {spokenLanguage} = current.transcribe;
|
952
|
+
|
953
|
+
this.emitScoped(
|
954
|
+
{
|
955
|
+
file: 'locus-info',
|
956
|
+
function: 'updateControls',
|
957
|
+
},
|
958
|
+
LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,
|
959
|
+
{
|
960
|
+
spokenLanguage,
|
961
|
+
}
|
962
|
+
);
|
963
|
+
}
|
964
|
+
|
959
965
|
if (hasManualCaptionChanged) {
|
960
966
|
const {enabled} = current.manualCaptionControl;
|
961
967
|
|
@@ -1088,6 +1094,14 @@ export default class LocusInfo extends EventsScope {
|
|
1088
1094
|
);
|
1089
1095
|
}
|
1090
1096
|
|
1097
|
+
if (hasPollingQAControlChanged) {
|
1098
|
+
this.emitScoped(
|
1099
|
+
{file: 'locus-info', function: 'updateControls'},
|
1100
|
+
LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,
|
1101
|
+
{state: current.pollingQAControl}
|
1102
|
+
);
|
1103
|
+
}
|
1104
|
+
|
1091
1105
|
this.controls = controls;
|
1092
1106
|
}
|
1093
1107
|
}
|
@@ -1248,10 +1262,7 @@ export default class LocusInfo extends EventsScope {
|
|
1248
1262
|
*/
|
1249
1263
|
updateMeetingInfo(info: object, self?: object) {
|
1250
1264
|
const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];
|
1251
|
-
if (
|
1252
|
-
(info && !isEqual(this.info, info)) ||
|
1253
|
-
(roles.length && !isEqual(this.roles, roles) && info)
|
1254
|
-
) {
|
1265
|
+
if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {
|
1255
1266
|
const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);
|
1256
1267
|
const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);
|
1257
1268
|
|
package/src/locus-info/parser.ts
CHANGED
@@ -728,13 +728,17 @@ export default class Parser {
|
|
728
728
|
break;
|
729
729
|
|
730
730
|
case USE_INCOMING:
|
731
|
-
case LOCUS_URL_CHANGED:
|
732
731
|
// update working copy for future comparisons.
|
733
732
|
// Note: The working copy of parser gets updated in .onFullLocus()
|
734
733
|
// and here when USE_INCOMING or LOCUS_URL_CHANGED locus.
|
735
734
|
this.workingCopy = newLoci;
|
736
735
|
break;
|
737
736
|
|
737
|
+
case LOCUS_URL_CHANGED:
|
738
|
+
// clear the working copy completely, do a full locus sync
|
739
|
+
this.workingCopy = null;
|
740
|
+
break;
|
741
|
+
|
738
742
|
case WAIT:
|
739
743
|
// we've taken newLoci from the front of the queue, so put it back there as we have to wait
|
740
744
|
// for the one that should be in front of it, before we can process it
|
package/src/media/index.ts
CHANGED
@@ -239,8 +239,8 @@ Media.createMediaConnection = (
|
|
239
239
|
screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
|
240
240
|
} as unknown,
|
241
241
|
direction: {
|
242
|
-
audio: Media.getDirection(
|
243
|
-
video: Media.getDirection(
|
242
|
+
audio: Media.getDirection(false, mediaDirection.receiveAudio, mediaDirection.sendAudio),
|
243
|
+
video: Media.getDirection(false, mediaDirection.receiveVideo, mediaDirection.sendVideo),
|
244
244
|
screenShareVideo: Media.getDirection(
|
245
245
|
false,
|
246
246
|
mediaDirection.receiveShare,
|
package/src/meeting/brbState.ts
CHANGED
@@ -58,7 +58,13 @@ export class BrbState {
|
|
58
58
|
public enable(enabled: boolean, sendSlotManager: SendSlotManager) {
|
59
59
|
this.state.client.enabled = enabled;
|
60
60
|
|
61
|
-
|
61
|
+
// Don't set the source state override if enabling brb fails
|
62
|
+
return this.applyClientStateToServer(sendSlotManager).then(() => {
|
63
|
+
sendSlotManager.setSourceStateOverride(
|
64
|
+
MediaType.VideoMain,
|
65
|
+
this.state.client.enabled ? 'away' : null
|
66
|
+
);
|
67
|
+
});
|
62
68
|
}
|
63
69
|
|
64
70
|
/**
|
@@ -92,7 +98,7 @@ export class BrbState {
|
|
92
98
|
|
93
99
|
this.state.syncToServerInProgress = true;
|
94
100
|
|
95
|
-
return this.sendLocalBrbStateToServer(
|
101
|
+
return this.sendLocalBrbStateToServer()
|
96
102
|
.then(() => {
|
97
103
|
this.state.syncToServerInProgress = false;
|
98
104
|
|
@@ -109,19 +115,20 @@ export class BrbState {
|
|
109
115
|
// need to check if a new sync is required, because this.state.client may have changed while we were doing the current sync
|
110
116
|
this.applyClientStateToServer(sendSlotManager);
|
111
117
|
})
|
112
|
-
.catch((
|
118
|
+
.catch((error) => {
|
113
119
|
this.state.syncToServerInProgress = false;
|
114
|
-
LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer:
|
120
|
+
LoggerProxy.logger.warn(`Meeting:brbState#applyClientStateToServer: Error: ${error}`);
|
121
|
+
|
122
|
+
return Promise.reject(error);
|
115
123
|
});
|
116
124
|
}
|
117
125
|
|
118
126
|
/**
|
119
127
|
* Send the local brb state to the server
|
120
128
|
*
|
121
|
-
* @param {SendSlotManager} sendSlotManager
|
122
129
|
* @returns {Promise}
|
123
130
|
*/
|
124
|
-
private async sendLocalBrbStateToServer(
|
131
|
+
private async sendLocalBrbStateToServer() {
|
125
132
|
const {enabled} = this.state.client;
|
126
133
|
|
127
134
|
if (!this.meeting.isMultistream) {
|
@@ -151,9 +158,6 @@ export class BrbState {
|
|
151
158
|
deviceUrl: this.meeting.deviceUrl,
|
152
159
|
selfId: this.meeting.selfId,
|
153
160
|
})
|
154
|
-
.then(() => {
|
155
|
-
sendSlotManager.setSourceStateOverride(MediaType.VideoMain, enabled ? 'away' : null);
|
156
|
-
})
|
157
161
|
.catch((error) => {
|
158
162
|
LoggerProxy.logger.error('Meeting:brbState#sendLocalBrbStateToServer: Error ', error);
|
159
163
|
|