@webex/plugin-meetings 3.8.1-next.8 → 3.8.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 +13 -26
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-error.d.ts +60 -0
- package/dist/common/errors/reclaim-host-role-error.js +158 -0
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +35 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +81 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +34 -0
- package/dist/common/queue.d.ts +32 -0
- package/dist/config.d.ts +73 -0
- package/dist/constants.d.ts +952 -0
- package/dist/constants.js +1 -8
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +5 -0
- package/dist/controls-options-manager/enums.js +0 -1
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +120 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -0
- package/dist/controls-options-manager/util.js +0 -26
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/controlsUtils.js +3 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +269 -0
- package/dist/locus-info/index.js +0 -30
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +212 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/index.d.ts +32 -0
- package/dist/media/properties.d.ts +108 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +233 -0
- package/dist/mediaQualityMetrics/config.js +513 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +2 -3
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +79 -0
- package/dist/meeting/in-meeting-actions.js +1 -5
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1622 -0
- package/dist/meeting/index.js +66 -88
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/muteState.d.ts +116 -0
- package/dist/meeting/request.d.ts +257 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +2 -0
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +57 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meetings/collection.d.ts +23 -0
- package/dist/meetings/index.d.ts +296 -0
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +148 -0
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/member.types.js +18 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +24 -0
- package/dist/members/index.d.ts +308 -0
- package/dist/members/request.d.ts +58 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +2 -0
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +59 -0
- package/dist/metrics/constants.js +0 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +152 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +226 -0
- package/dist/networkQualityMonitor/index.js.map +1 -0
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/index.d.ts +139 -0
- package/dist/reachability/index.js +10 -5
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +35 -0
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +32 -0
- package/dist/reconnection-manager/index.d.ts +112 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +193 -0
- package/dist/recording-controller/util.d.ts +13 -0
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +116 -0
- package/dist/roap/request.d.ts +35 -0
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +81 -0
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/rtcMetrics/index.js +197 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +118 -0
- package/dist/statsAnalyzer/global.js +127 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +193 -0
- package/dist/statsAnalyzer/index.js +1019 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
- package/dist/statsAnalyzer/mqaUtil.js +181 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/constants.d.ts +0 -6
- package/dist/types/controls-options-manager/enums.d.ts +1 -2
- package/dist/types/controls-options-manager/types.d.ts +1 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -4
- package/dist/types/metrics/constants.d.ts +0 -1
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/reachability/index.d.ts +2 -2
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +71 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/constants.ts +0 -9
- package/src/controls-options-manager/enums.ts +0 -1
- package/src/controls-options-manager/types.ts +1 -6
- package/src/controls-options-manager/util.ts +0 -31
- package/src/locus-info/controlsUtils.ts +0 -15
- package/src/locus-info/index.ts +0 -41
- package/src/meeting/brbState.ts +2 -4
- package/src/meeting/in-meeting-actions.ts +0 -8
- package/src/meeting/index.ts +29 -62
- package/src/metrics/constants.ts +0 -1
- package/src/reachability/index.ts +13 -5
- package/test/unit/spec/controls-options-manager/util.js +0 -58
- package/test/unit/spec/locus-info/controlsUtils.js +0 -52
- package/test/unit/spec/locus-info/index.js +0 -42
- package/test/unit/spec/meeting/brbState.ts +2 -21
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -4
- package/test/unit/spec/meeting/index.js +27 -130
- package/test/unit/spec/reachability/index.ts +6 -2
package/src/meeting/index.ts
CHANGED
@@ -263,9 +263,8 @@ type FetchMeetingInfoParams = {
|
|
263
263
|
};
|
264
264
|
|
265
265
|
type MediaReachabilityMetrics = ReachabilityMetrics & {
|
266
|
-
|
267
|
-
|
268
|
-
selected_subnet: string | null;
|
266
|
+
isSubnetReachable: boolean;
|
267
|
+
selectedCluster: string | null;
|
269
268
|
};
|
270
269
|
|
271
270
|
/**
|
@@ -1345,7 +1344,7 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
1345
1344
|
captions: [],
|
1346
1345
|
isListening: false,
|
1347
1346
|
commandText: '',
|
1348
|
-
languageOptions: {
|
1347
|
+
languageOptions: {},
|
1349
1348
|
showCaptionBox: false,
|
1350
1349
|
transcribingRequestStatus: 'INACTIVE',
|
1351
1350
|
isCaptioning: false,
|
@@ -2754,27 +2753,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
2754
2753
|
}
|
2755
2754
|
);
|
2756
2755
|
|
2757
|
-
this.locusInfo.on(
|
2758
|
-
LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,
|
2759
|
-
({spokenLanguage}) => {
|
2760
|
-
if (spokenLanguage) {
|
2761
|
-
this.transcription.languageOptions.currentSpokenLanguage = spokenLanguage;
|
2762
|
-
// @ts-ignore
|
2763
|
-
this.webex.internal.voicea.onSpokenLanguageUpdate(spokenLanguage);
|
2764
|
-
|
2765
|
-
Trigger.trigger(
|
2766
|
-
this,
|
2767
|
-
{
|
2768
|
-
file: 'meeting/index',
|
2769
|
-
function: 'setupLocusControlsListener',
|
2770
|
-
},
|
2771
|
-
EVENT_TRIGGERS.MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,
|
2772
|
-
{spokenLanguage}
|
2773
|
-
);
|
2774
|
-
}
|
2775
|
-
}
|
2776
|
-
);
|
2777
|
-
|
2778
2756
|
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, ({enable}) => {
|
2779
2757
|
Trigger.trigger(
|
2780
2758
|
this,
|
@@ -2943,15 +2921,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
2943
2921
|
{state}
|
2944
2922
|
);
|
2945
2923
|
});
|
2946
|
-
|
2947
|
-
this.locusInfo.on(LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED, ({state}) => {
|
2948
|
-
Trigger.trigger(
|
2949
|
-
this,
|
2950
|
-
{file: 'meeting/index', function: 'setupLocusControlsListener'},
|
2951
|
-
EVENT_TRIGGERS.MEETING_CONTROLS_POLLING_QA_UPDATED,
|
2952
|
-
{state}
|
2953
|
-
);
|
2954
|
-
});
|
2955
2924
|
}
|
2956
2925
|
|
2957
2926
|
/**
|
@@ -3917,16 +3886,13 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
3917
3886
|
return Promise.reject(error);
|
3918
3887
|
}
|
3919
3888
|
|
3920
|
-
return this.brbState
|
3921
|
-
|
3922
|
-
|
3923
|
-
|
3924
|
-
|
3925
|
-
|
3926
|
-
|
3927
|
-
}
|
3928
|
-
})
|
3929
|
-
.catch((error) => Promise.reject(error));
|
3889
|
+
return this.brbState.enable(enabled, this.sendSlotManager).then(() => {
|
3890
|
+
if (this.audio && enabled) {
|
3891
|
+
// locus mutes the participant with brb enabled request,
|
3892
|
+
// so we need to explicitly update remote mute for correct logic flow
|
3893
|
+
this.audio.handleServerRemoteMuteUpdate(this, enabled);
|
3894
|
+
}
|
3895
|
+
});
|
3930
3896
|
}
|
3931
3897
|
|
3932
3898
|
/**
|
@@ -4393,14 +4359,6 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
4393
4359
|
requiredHints: [DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
|
4394
4360
|
displayHints: this.userDisplayHints,
|
4395
4361
|
}),
|
4396
|
-
canEnablePollingQA: ControlsOptionsUtil.hasHints({
|
4397
|
-
requiredHints: [DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
|
4398
|
-
displayHints: this.userDisplayHints,
|
4399
|
-
}),
|
4400
|
-
canDisablePollingQA: ControlsOptionsUtil.hasHints({
|
4401
|
-
requiredHints: [DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
|
4402
|
-
displayHints: this.userDisplayHints,
|
4403
|
-
}),
|
4404
4362
|
}) || changed;
|
4405
4363
|
}
|
4406
4364
|
if (changed) {
|
@@ -4916,6 +4874,11 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
4916
4874
|
|
4917
4875
|
// Only send restore event when it was disconnected before and for connected later
|
4918
4876
|
if (!this.hasWebsocketConnected) {
|
4877
|
+
// @ts-ignore
|
4878
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
4879
|
+
name: 'client.mercury.connection.restored',
|
4880
|
+
options: {meetingId: this.id},
|
4881
|
+
});
|
4919
4882
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MERCURY_CONNECTION_RESTORED, {
|
4920
4883
|
correlation_id: this.correlationId,
|
4921
4884
|
});
|
@@ -4926,6 +4889,11 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
4926
4889
|
// @ts-ignore
|
4927
4890
|
this.webex.internal.mercury.on(OFFLINE, () => {
|
4928
4891
|
LoggerProxy.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
|
4892
|
+
// @ts-ignore
|
4893
|
+
this.webex.internal.newMetrics.submitClientEvent({
|
4894
|
+
name: 'client.mercury.connection.lost',
|
4895
|
+
options: {meetingId: this.id},
|
4896
|
+
});
|
4929
4897
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MERCURY_CONNECTION_FAILURE, {
|
4930
4898
|
correlation_id: this.correlationId,
|
4931
4899
|
});
|
@@ -9722,22 +9690,21 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
9722
9690
|
return total;
|
9723
9691
|
}, 0);
|
9724
9692
|
|
9725
|
-
const selectedSubnetFirstOctet = this.mediaServerIp?.split('.')[0];
|
9726
|
-
|
9727
9693
|
let isSubnetReachable = null;
|
9728
|
-
if (totalSuccessCases > 0
|
9729
|
-
|
9730
|
-
|
9731
|
-
this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
|
9694
|
+
if (totalSuccessCases > 0) {
|
9695
|
+
// @ts-ignore
|
9696
|
+
isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
|
9732
9697
|
}
|
9733
9698
|
|
9734
|
-
|
9699
|
+
let selectedCluster = null;
|
9700
|
+
if (this.mediaConnections && this.mediaConnections.length > 0) {
|
9701
|
+
selectedCluster = this.mediaConnections[0].mediaAgentCluster;
|
9702
|
+
}
|
9735
9703
|
|
9736
9704
|
return {
|
9737
9705
|
...reachabilityMetrics,
|
9738
|
-
|
9739
|
-
|
9740
|
-
selected_subnet: selectedSubnetFirstOctet ? `${selectedSubnetFirstOctet}.X.X.X` : null,
|
9706
|
+
isSubnetReachable,
|
9707
|
+
selectedCluster,
|
9741
9708
|
};
|
9742
9709
|
}
|
9743
9710
|
}
|
package/src/metrics/constants.ts
CHANGED
@@ -72,7 +72,6 @@ const BEHAVIORAL_METRICS = {
|
|
72
72
|
MEETING_INFO_POLICY_ERROR: 'js_sdk_meeting_info_policy_error',
|
73
73
|
LOCUS_DELTA_SYNC_FAILED: 'js_sdk_locus_delta_sync_failed',
|
74
74
|
LOCUS_DELTA_OUT_OF_ORDER: 'js_sdk_locus_delta_ooo',
|
75
|
-
LOCUS_SYNC_HANDLING_FAILED: 'js_sdk_locus_sync_handling_failed',
|
76
75
|
PERMISSION_TOKEN_REFRESH: 'js_sdk_permission_token_refresh',
|
77
76
|
PERMISSION_TOKEN_REFRESH_ERROR: 'js_sdk_permission_token_refresh_error',
|
78
77
|
TURN_DISCOVERY_LATENCY: 'js_sdk_turn_discovery_latency',
|
@@ -140,14 +140,22 @@ export default class Reachability extends EventsScope {
|
|
140
140
|
|
141
141
|
/**
|
142
142
|
* Checks if the given subnet is reachable
|
143
|
-
* @param {string}
|
143
|
+
* @param {string} mediaServerIp - media server ip
|
144
144
|
* @returns {boolean | null} true if reachable, false if not reachable, null if mediaServerIp is not provided
|
145
145
|
* @public
|
146
146
|
* @memberof Reachability
|
147
147
|
*/
|
148
|
-
public isSubnetReachable(
|
148
|
+
public isSubnetReachable(mediaServerIp?: string): boolean | null {
|
149
|
+
if (!mediaServerIp) {
|
150
|
+
LoggerProxy.logger.error(`Reachability:index#isSubnetReachable --> mediaServerIp is null`);
|
151
|
+
|
152
|
+
return null;
|
153
|
+
}
|
154
|
+
|
155
|
+
const subnetFirstOctet = mediaServerIp.split('.')[0];
|
156
|
+
|
149
157
|
LoggerProxy.logger.info(
|
150
|
-
`Reachability:index#isSubnetReachable --> Looking for subnet: ${
|
158
|
+
`Reachability:index#isSubnetReachable --> Looking for subnet: ${subnetFirstOctet}.X.X.X`
|
151
159
|
);
|
152
160
|
|
153
161
|
const matchingReachedClusters = Object.values(this.clusterReachability).reduce(
|
@@ -159,7 +167,7 @@ export default class Reachability extends EventsScope {
|
|
159
167
|
const subnet = reachedSubnetsArray[i];
|
160
168
|
const reachedSubnetFirstOctet = subnet.split('.')[0];
|
161
169
|
|
162
|
-
if (
|
170
|
+
if (subnetFirstOctet === reachedSubnetFirstOctet) {
|
163
171
|
acc.add(cluster.name);
|
164
172
|
}
|
165
173
|
|
@@ -178,7 +186,7 @@ export default class Reachability extends EventsScope {
|
|
178
186
|
);
|
179
187
|
|
180
188
|
LoggerProxy.logger.info(
|
181
|
-
`Reachability:index#isSubnetReachable --> Found ${matchingReachedClusters.size} clusters that use the subnet ${
|
189
|
+
`Reachability:index#isSubnetReachable --> Found ${matchingReachedClusters.size} clusters that use the subnet ${subnetFirstOctet}.X.X.X`
|
182
190
|
);
|
183
191
|
|
184
192
|
return matchingReachedClusters.size > 0;
|
@@ -473,40 +473,6 @@ describe('plugin-meetings', () => {
|
|
473
473
|
assert.equal(results, expected);
|
474
474
|
});
|
475
475
|
});
|
476
|
-
|
477
|
-
describe('canUpdatePollingQA()', () => {
|
478
|
-
beforeEach(() => {
|
479
|
-
sinon.stub(ControlsOptionsUtil, 'hasHints').returns(true);
|
480
|
-
});
|
481
|
-
|
482
|
-
it('should call hasHints() with proper hints when `enabled` is true', () => {
|
483
|
-
ControlsOptionsUtil.canUpdatePollingQA({properties: {enabled: true}}, []);
|
484
|
-
|
485
|
-
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
486
|
-
requiredHints: [DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
|
487
|
-
displayHints: [],
|
488
|
-
});
|
489
|
-
});
|
490
|
-
|
491
|
-
it('should call hasHints() with proper hints when `enabled` is false', () => {
|
492
|
-
ControlsOptionsUtil.canUpdatePollingQA({properties: {enabled: false}}, []);
|
493
|
-
|
494
|
-
assert.calledWith(ControlsOptionsUtil.hasHints, {
|
495
|
-
requiredHints: [DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
|
496
|
-
displayHints: [],
|
497
|
-
});
|
498
|
-
});
|
499
|
-
|
500
|
-
it('should return the resolution of hasHints()', () => {
|
501
|
-
const expected = 'example-return-value';
|
502
|
-
ControlsOptionsUtil.hasHints.returns(expected);
|
503
|
-
|
504
|
-
const results = ControlsOptionsUtil.canUpdatePollingQA({properties: {}}, []);
|
505
|
-
|
506
|
-
assert.calledOnce(ControlsOptionsUtil.hasHints);
|
507
|
-
assert.equal(results, expected);
|
508
|
-
});
|
509
|
-
});
|
510
476
|
|
511
477
|
describe('canUpdate()', () => {
|
512
478
|
const displayHints = [];
|
@@ -520,7 +486,6 @@ describe('plugin-meetings', () => {
|
|
520
486
|
ControlsOptionsUtil.canUpdateViewTheParticipantsList = sinon.stub().returns(true);
|
521
487
|
ControlsOptionsUtil.canUpdateAnnotation = sinon.stub().returns(true);
|
522
488
|
ControlsOptionsUtil.canUpdateRemoteDesktopControl = sinon.stub().returns(true);
|
523
|
-
ControlsOptionsUtil.canUpdatePollingQA = sinon.stub().returns(true);
|
524
489
|
});
|
525
490
|
|
526
491
|
it('should only call canUpdateAudio() if the scope is audio', () => {
|
@@ -656,28 +621,6 @@ describe('plugin-meetings', () => {
|
|
656
621
|
control,
|
657
622
|
displayHints
|
658
623
|
);
|
659
|
-
assert.callCount(ControlsOptionsUtil.canUpdatePollingQA, 0);
|
660
|
-
assert.isTrue(results);
|
661
|
-
});
|
662
|
-
|
663
|
-
it('should only call canUpdatePollingQA() if the scope is pollingQA', () => {
|
664
|
-
const control = {scope: 'pollingQA'};
|
665
|
-
|
666
|
-
const results = ControlsOptionsUtil.canUpdate(control, displayHints);
|
667
|
-
|
668
|
-
assert.callCount(ControlsOptionsUtil.canUpdateAudio, 0);
|
669
|
-
assert.callCount(ControlsOptionsUtil.canUpdateRaiseHand, 0);
|
670
|
-
assert.callCount(ControlsOptionsUtil.canUpdateReactions, 0);
|
671
|
-
assert.callCount(ControlsOptionsUtil.canUpdateShareControl, 0);
|
672
|
-
assert.callCount(ControlsOptionsUtil.canUpdateVideo, 0);
|
673
|
-
assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
|
674
|
-
assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
|
675
|
-
assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
|
676
|
-
assert.calledWith(
|
677
|
-
ControlsOptionsUtil.canUpdatePollingQA,
|
678
|
-
control,
|
679
|
-
displayHints
|
680
|
-
);
|
681
624
|
assert.isTrue(results);
|
682
625
|
});
|
683
626
|
|
@@ -694,7 +637,6 @@ describe('plugin-meetings', () => {
|
|
694
637
|
assert.callCount(ControlsOptionsUtil.canUpdateViewTheParticipantsList, 0);
|
695
638
|
assert.callCount(ControlsOptionsUtil.canUpdateAnnotation, 0);
|
696
639
|
assert.callCount(ControlsOptionsUtil.canUpdateRemoteDesktopControl, 0);
|
697
|
-
assert.callCount(ControlsOptionsUtil.canUpdatePollingQA, 0);
|
698
640
|
assert.isFalse(results);
|
699
641
|
});
|
700
642
|
});
|
@@ -164,14 +164,6 @@ describe('plugin-meetings', () => {
|
|
164
164
|
|
165
165
|
assert.equal(parsedControls.rdcControl.enabled, newControls.rdcControl.enabled);
|
166
166
|
});
|
167
|
-
|
168
|
-
it('should parse the pollingQAControl control', () => {
|
169
|
-
const newControls = {pollingQAControl: {enabled: true}};
|
170
|
-
|
171
|
-
const parsedControls = ControlsUtils.parse(newControls);
|
172
|
-
|
173
|
-
assert.equal(parsedControls.pollingQAControl.enabled, newControls.pollingQAControl.enabled);
|
174
|
-
});
|
175
167
|
|
176
168
|
describe('videoEnabled', () => {
|
177
169
|
it('returns expected', () => {
|
@@ -419,50 +411,6 @@ describe('plugin-meetings', () => {
|
|
419
411
|
assert.equal(updates.hasRemoteDesktopControlChanged, true);
|
420
412
|
});
|
421
413
|
|
422
|
-
it('returns hasPollingQAControlChanged = true when changed', () => {
|
423
|
-
const newControls = {pollingQAControl: {enabled: true}};
|
424
|
-
|
425
|
-
const {updates} = ControlsUtils.getControls(defaultControls, newControls);
|
426
|
-
|
427
|
-
assert.equal(updates.hasPollingQAControlChanged, true);
|
428
|
-
});
|
429
|
-
|
430
|
-
it('returns false when previous spoken language is undefined and current is a invalid value', () => {
|
431
|
-
const previous = { transcribe: undefined };
|
432
|
-
const current = { transcribe: { spokenLanguage: null } };
|
433
|
-
|
434
|
-
const {updates} = ControlsUtils.getControls(previous, current);
|
435
|
-
|
436
|
-
assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
|
437
|
-
});
|
438
|
-
|
439
|
-
it('detects spoken language change when previous is undefined and current is a valid value', () => {
|
440
|
-
const previous = { transcribe: undefined };
|
441
|
-
const current = { transcribe: { spokenLanguage: 'en-US' } };
|
442
|
-
|
443
|
-
const {updates} = ControlsUtils.getControls(previous, current);
|
444
|
-
|
445
|
-
assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
|
446
|
-
});
|
447
|
-
|
448
|
-
it('returns false when spoken language changes to a same value', () => {
|
449
|
-
const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
|
450
|
-
const current = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
|
451
|
-
|
452
|
-
const {updates} = ControlsUtils.getControls(previous, current);
|
453
|
-
|
454
|
-
assert.equal(updates.hasTranscribeSpokenLanguageChanged, false);
|
455
|
-
});
|
456
|
-
|
457
|
-
it('returns true when spoken language changes to a different value', () => {
|
458
|
-
const previous = { transcribe: {caption: true, spokenLanguage: 'en-US' } };
|
459
|
-
const current = { transcribe: {caption: true, spokenLanguage: 'fr-FR' } };
|
460
|
-
|
461
|
-
const {updates} = ControlsUtils.getControls(previous, current);
|
462
|
-
|
463
|
-
assert.equal(updates.hasTranscribeSpokenLanguageChanged, true);
|
464
|
-
});
|
465
|
-
|
466
414
|
describe('videoEnabled', () => {
|
467
415
|
const testVideoEnabled = (oldControls, newControls, updatedProperty) => {
|
468
416
|
const result = ControlsUtils.getControls(oldControls, newControls);
|
@@ -305,20 +305,6 @@ describe('plugin-meetings', () => {
|
|
305
305
|
{state: newControls.rdcControl}
|
306
306
|
);
|
307
307
|
});
|
308
|
-
|
309
|
-
it('should trigger the CONTROLS_POLLING_QA_CHANGED event when necessary', () => {
|
310
|
-
locusInfo.controls = {};
|
311
|
-
locusInfo.emitScoped = sinon.stub();
|
312
|
-
newControls.pollingQAControl = { enabled: true };
|
313
|
-
locusInfo.updateControls(newControls);
|
314
|
-
|
315
|
-
assert.calledWith(
|
316
|
-
locusInfo.emitScoped,
|
317
|
-
{file: 'locus-info', function: 'updateControls'},
|
318
|
-
LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,
|
319
|
-
{state: newControls.pollingQAControl}
|
320
|
-
);
|
321
|
-
});
|
322
308
|
|
323
309
|
it('should keep the recording state to `IDLE`', () => {
|
324
310
|
locusInfo.controls = {
|
@@ -571,34 +557,6 @@ describe('plugin-meetings', () => {
|
|
571
557
|
);
|
572
558
|
});
|
573
559
|
|
574
|
-
it('should update the transcribe spoken language', () => {
|
575
|
-
locusInfo.emitScoped = sinon.stub();
|
576
|
-
locusInfo.controls = {
|
577
|
-
transcribe: {
|
578
|
-
transcribing: false,
|
579
|
-
caption: true,
|
580
|
-
spokenLanguage: 'en-US',
|
581
|
-
},
|
582
|
-
};
|
583
|
-
newControls.transcribe.transcribing = false;
|
584
|
-
newControls.transcribe.caption = true;
|
585
|
-
newControls.transcribe.spokenLanguage = 'fr';
|
586
|
-
|
587
|
-
locusInfo.updateControls(newControls);
|
588
|
-
|
589
|
-
assert.calledWith(
|
590
|
-
locusInfo.emitScoped,
|
591
|
-
{
|
592
|
-
file: 'locus-info',
|
593
|
-
function: 'updateControls',
|
594
|
-
},
|
595
|
-
LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,
|
596
|
-
{
|
597
|
-
spokenLanguage: 'fr',
|
598
|
-
}
|
599
|
-
);
|
600
|
-
});
|
601
|
-
|
602
560
|
it('should update the manual caption state', () => {
|
603
561
|
locusInfo.emitScoped = sinon.stub();
|
604
562
|
locusInfo.controls = {
|
@@ -1,14 +1,12 @@
|
|
1
1
|
import sinon from 'sinon';
|
2
|
-
import {assert
|
2
|
+
import {assert} from '@webex/test-helper-chai';
|
3
3
|
|
4
4
|
import testUtils from '../../../utils/testUtils';
|
5
5
|
import {BrbState, createBrbState} from '@webex/plugin-meetings/src/meeting/brbState';
|
6
|
-
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
7
6
|
|
8
7
|
describe('plugin-meetings', () => {
|
9
8
|
let meeting: any;
|
10
9
|
let brbState: BrbState;
|
11
|
-
let setBrbStub: sinon.SinonStub;
|
12
10
|
|
13
11
|
beforeEach(async () => {
|
14
12
|
meeting = {
|
@@ -23,20 +21,14 @@ describe('plugin-meetings', () => {
|
|
23
21
|
setSourceStateOverride: sinon.stub(),
|
24
22
|
},
|
25
23
|
meetingRequest: {
|
26
|
-
setBrb: ()
|
24
|
+
setBrb: sinon.stub().resolves(),
|
27
25
|
},
|
28
26
|
};
|
29
27
|
|
30
|
-
setBrbStub = sinon.stub(meeting.meetingRequest, 'setBrb').resolves();
|
31
|
-
|
32
28
|
brbState = new BrbState(meeting, false);
|
33
29
|
await testUtils.flushPromises();
|
34
30
|
});
|
35
31
|
|
36
|
-
afterEach(() => {
|
37
|
-
sinon.restore();
|
38
|
-
});
|
39
|
-
|
40
32
|
describe('brbState library', () => {
|
41
33
|
it('takes into account current status when instantiated', async () => {
|
42
34
|
// create a new BrbState instance
|
@@ -137,16 +129,5 @@ describe('plugin-meetings', () => {
|
|
137
129
|
sendLocalBrbStateToServerStub.restore();
|
138
130
|
handleServerBrbUpdateSpy.restore();
|
139
131
|
});
|
140
|
-
|
141
|
-
it('should reject when sendLocalBrbStateToServer fails', async () => {
|
142
|
-
const error = new Error('send failed');
|
143
|
-
setBrbStub.rejects(error);
|
144
|
-
|
145
|
-
await expect(
|
146
|
-
brbState.enable(true, meeting.sendSlotManager)
|
147
|
-
).to.be.rejectedWith(error);
|
148
|
-
|
149
|
-
assert.isFalse(brbState.state.syncToServerInProgress);
|
150
|
-
});
|
151
132
|
});
|
152
133
|
});
|
@@ -102,8 +102,6 @@ describe('plugin-meetings', () => {
|
|
102
102
|
canEnableRemoteDesktopControl: null,
|
103
103
|
canDisableRemoteDesktopControl: null,
|
104
104
|
canMoveToLobby: null,
|
105
|
-
canEnablePollingQA: null,
|
106
|
-
canDisablePollingQA: null,
|
107
105
|
|
108
106
|
...expected,
|
109
107
|
};
|
@@ -212,8 +210,6 @@ describe('plugin-meetings', () => {
|
|
212
210
|
'canEnableRemoteDesktopControl',
|
213
211
|
'canDisableRemoteDesktopControl',
|
214
212
|
'canMoveToLobby',
|
215
|
-
'canEnablePollingQA',
|
216
|
-
'canDisablePollingQA',
|
217
213
|
].forEach((key) => {
|
218
214
|
it(`get and set for ${key} work as expected`, () => {
|
219
215
|
const inMeetingActions = new InMeetingActions();
|