@webex/plugin-meetings 3.7.0 → 3.8.0
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/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/annotation/index.js +17 -0
- package/dist/annotation/index.js.map +1 -1
- 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-forbidden-error.js +52 -0
- package/dist/common/errors/join-forbidden-error.js.map +1 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- 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/common/errors/media.d.ts +15 -0
- package/dist/common/errors/multistream-not-supported-error.js +53 -0
- package/dist/common/errors/multistream-not-supported-error.js.map +1 -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.js +149 -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 +33 -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 +93 -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 +36 -0
- package/dist/common/queue.d.ts +34 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1088 -0
- package/dist/constants.js +68 -6
- 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 +15 -0
- package/dist/controls-options-manager/index.d.ts +136 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/util.d.ts +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +16 -11
- package/dist/index.js.map +1 -1
- 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/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 +322 -0
- package/dist/locus-info/index.js +14 -3
- 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 +272 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/locus-info/selfUtils.js +35 -17
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +1 -0
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/index.d.ts +34 -0
- package/dist/media/properties.d.ts +93 -0
- package/dist/media/properties.js +30 -16
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/mediaQualityMetrics/config.js +502 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +167 -0
- package/dist/meeting/brbState.js.map +1 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/meeting/in-meeting-actions.js +13 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1825 -0
- package/dist/meeting/index.js +1331 -1051
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +11 -6
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.d.ts +178 -0
- package/dist/meeting/muteState.js +1 -6
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +295 -0
- package/dist/meeting/request.js +51 -29
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +119 -0
- package/dist/meeting/util.js +103 -67
- package/dist/meeting/util.js.map +1 -1
- 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 +69 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/meeting-info/meeting-info-v2.js +115 -45
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- 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/meeting-info/utilv2.js +6 -2
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +40 -0
- package/dist/meetings/index.d.ts +390 -0
- package/dist/meetings/index.js +107 -55
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/meetings.types.js +2 -0
- package/dist/meetings/meetings.types.js.map +1 -1
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/meetings/util.js +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +160 -0
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +17 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.d.ts +2 -0
- package/dist/member/util.js +39 -28
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +29 -0
- package/dist/members/index.d.ts +353 -0
- package/dist/members/request.d.ts +114 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +215 -0
- package/dist/members/util.js +4 -2
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +276 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +70 -0
- package/dist/metrics/constants.js +6 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +45 -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/remoteMedia.js +30 -15
- package/dist/multistream/remoteMedia.js.map +1 -1
- 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/multistream/sendSlotManager.js +24 -0
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +13 -19
- package/dist/networkQualityMonitor/index.js.map +1 -1
- 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.js +109 -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/clusterReachability.js +12 -15
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.d.ts +105 -0
- package/dist/reachability/index.js +461 -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.d.ts +39 -0
- package/dist/reachability/request.js +21 -8
- package/dist/reachability/request.js.map +1 -1
- 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 +52 -0
- package/dist/reconnection-manager/index.d.ts +136 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/enums.js +8 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +207 -0
- package/dist/recording-controller/index.js +18 -9
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +14 -0
- package/dist/recording-controller/util.js +13 -9
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.js +62 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.js +275 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +86 -0
- package/dist/roap/index.js +15 -15
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +39 -0
- package/dist/roap/request.js +45 -79
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.js +126 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +155 -0
- package/dist/roap/turnDiscovery.js +3 -6
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.js +75 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/statsAnalyzer/global.d.ts +36 -0
- package/dist/statsAnalyzer/global.js +126 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +217 -0
- package/dist/statsAnalyzer/index.js +1013 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/statsAnalyzer/mqaUtil.js +179 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/annotation/index.d.ts +5 -0
- package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
- package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
- package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/constants.d.ts +53 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/locus-info/index.d.ts +2 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/brbState.d.ts +54 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
- package/dist/types/meeting/index.d.ts +64 -14
- package/dist/types/meeting/locusMediaRequest.d.ts +6 -3
- package/dist/types/meeting/request.d.ts +14 -3
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -3
- package/dist/types/meeting-info/meeting-info-v2.d.ts +30 -5
- package/dist/types/meetings/index.d.ts +20 -2
- package/dist/types/meetings/meetings.types.d.ts +8 -0
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/types.d.ts +7 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/constants.d.ts +6 -1
- package/dist/types/multistream/sendSlotManager.d.ts +8 -1
- package/dist/types/reachability/clusterReachability.d.ts +1 -10
- package/dist/types/reachability/index.d.ts +83 -36
- 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/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 +390 -7
- package/dist/webinar/index.js.map +1 -1
- package/package.json +23 -22
- package/src/annotation/index.ts +16 -0
- package/src/common/errors/join-forbidden-error.ts +26 -0
- package/src/common/errors/join-webinar-error.ts +24 -0
- package/src/common/errors/multistream-not-supported-error.ts +30 -0
- package/src/config.ts +1 -0
- package/src/constants.ts +61 -3
- package/src/index.ts +5 -3
- package/src/locus-info/index.ts +20 -3
- package/src/locus-info/selfUtils.ts +24 -6
- package/src/media/MediaConnectionAwaiter.ts +2 -0
- package/src/media/properties.ts +34 -13
- package/src/meeting/brbState.ts +169 -0
- package/src/meeting/in-meeting-actions.ts +25 -0
- package/src/meeting/index.ts +443 -87
- package/src/meeting/locusMediaRequest.ts +11 -8
- package/src/meeting/muteState.ts +1 -6
- package/src/meeting/request.ts +30 -12
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +32 -13
- package/src/meeting-info/meeting-info-v2.ts +83 -12
- package/src/meeting-info/utilv2.ts +17 -3
- package/src/meetings/index.ts +79 -20
- package/src/meetings/meetings.types.ts +10 -0
- package/src/meetings/util.ts +2 -1
- package/src/member/index.ts +9 -0
- package/src/member/types.ts +8 -0
- package/src/member/util.ts +34 -24
- package/src/members/util.ts +1 -0
- package/src/metrics/constants.ts +6 -1
- package/src/multistream/remoteMedia.ts +28 -15
- package/src/multistream/sendSlotManager.ts +31 -0
- package/src/reachability/clusterReachability.ts +5 -15
- package/src/reachability/index.ts +311 -75
- package/src/reachability/reachability.types.ts +85 -0
- package/src/reachability/request.ts +55 -31
- 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 +14 -13
- package/src/roap/request.ts +30 -44
- package/src/roap/turnDiscovery.ts +2 -4
- package/src/webinar/index.ts +235 -9
- package/test/unit/spec/annotation/index.ts +46 -1
- package/test/unit/spec/locus-info/index.js +292 -60
- package/test/unit/spec/locus-info/selfConstant.js +7 -0
- package/test/unit/spec/locus-info/selfUtils.js +101 -1
- package/test/unit/spec/media/properties.ts +15 -0
- package/test/unit/spec/meeting/brbState.ts +114 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +15 -1
- package/test/unit/spec/meeting/index.js +851 -107
- package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
- package/test/unit/spec/meeting/muteState.js +0 -24
- package/test/unit/spec/meeting/request.js +3 -26
- package/test/unit/spec/meeting/utils.js +73 -28
- package/test/unit/spec/meeting-info/meetinginfov2.js +46 -4
- package/test/unit/spec/meeting-info/utilv2.js +26 -0
- package/test/unit/spec/meetings/index.js +159 -18
- package/test/unit/spec/meetings/utils.js +10 -0
- package/test/unit/spec/member/util.js +52 -11
- package/test/unit/spec/members/utils.js +95 -0
- 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 +383 -9
- package/test/unit/spec/reachability/request.js +48 -12
- 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 +48 -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 +504 -0
- package/dist/common/errors/webinar-registration-error.js.map +0 -1
- package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -2,8 +2,9 @@
|
|
2
2
|
import {defer} from 'lodash';
|
3
3
|
import {Defer} from '@webex/common';
|
4
4
|
import {WebexPlugin} from '@webex/webex-core';
|
5
|
-
import {MEDIA, HTTP_VERBS, ROAP
|
5
|
+
import {MEDIA, HTTP_VERBS, ROAP} from '../constants';
|
6
6
|
import LoggerProxy from '../common/logs/logger-proxy';
|
7
|
+
import {ClientMediaPreferences} from '../reachability/reachability.types';
|
7
8
|
|
8
9
|
export type MediaRequestType = 'RoapMessage' | 'LocalMute';
|
9
10
|
export type RequestResult = any;
|
@@ -14,9 +15,8 @@ export type RoapRequest = {
|
|
14
15
|
mediaId: string;
|
15
16
|
roapMessage: any;
|
16
17
|
reachability: any;
|
18
|
+
clientMediaPreferences: ClientMediaPreferences;
|
17
19
|
sequence?: any;
|
18
|
-
joinCookie: any; // any, because this is opaque to the client, we pass whatever object we got from one backend component (Orpheus) to the other (Locus)
|
19
|
-
ipVersion?: IP_VERSION;
|
20
20
|
};
|
21
21
|
|
22
22
|
export type LocalMuteRequest = {
|
@@ -202,10 +202,6 @@ export class LocusMediaRequest extends WebexPlugin {
|
|
202
202
|
const body: any = {
|
203
203
|
device: this.config.device,
|
204
204
|
correlationId: this.config.correlationId,
|
205
|
-
clientMediaPreferences: {
|
206
|
-
preferTranscoding: this.config.preferTranscoding,
|
207
|
-
ipver: request.type === 'RoapMessage' ? request.ipVersion : undefined,
|
208
|
-
},
|
209
205
|
};
|
210
206
|
|
211
207
|
const localMedias: any = {
|
@@ -223,7 +219,7 @@ export class LocusMediaRequest extends WebexPlugin {
|
|
223
219
|
case 'RoapMessage':
|
224
220
|
localMedias.roapMessage = request.roapMessage;
|
225
221
|
localMedias.reachability = request.reachability;
|
226
|
-
body.clientMediaPreferences
|
222
|
+
body.clientMediaPreferences = request.clientMediaPreferences;
|
227
223
|
|
228
224
|
// @ts-ignore
|
229
225
|
this.webex.internal.newMetrics.submitClientEvent({
|
@@ -346,4 +342,11 @@ export class LocusMediaRequest extends WebexPlugin {
|
|
346
342
|
public isConfluenceCreated() {
|
347
343
|
return this.confluenceState === 'created';
|
348
344
|
}
|
345
|
+
|
346
|
+
/**
|
347
|
+
* This method needs to be called when we downgrade from multistream to transcoded connection.
|
348
|
+
*/
|
349
|
+
public downgradeFromMultistreamToTranscoded() {
|
350
|
+
this.config.preferTranscoding = true;
|
351
|
+
}
|
349
352
|
}
|
package/src/meeting/muteState.ts
CHANGED
@@ -379,12 +379,7 @@ export class MuteState {
|
|
379
379
|
}
|
380
380
|
if (muted !== undefined) {
|
381
381
|
this.state.server.remoteMute = muted;
|
382
|
-
|
383
|
-
// We never want to unmute the local stream from a server remote mute update.
|
384
|
-
// Moderated unmute is handled by a different function.
|
385
|
-
if (muted) {
|
386
|
-
this.muteLocalStream(meeting, muted, 'remotelyMuted');
|
387
|
-
}
|
382
|
+
this.muteLocalStream(meeting, muted, 'remotelyMuted');
|
388
383
|
}
|
389
384
|
}
|
390
385
|
|
package/src/meeting/request.ts
CHANGED
@@ -26,11 +26,11 @@ import {
|
|
26
26
|
SEND_DTMF_ENDPOINT,
|
27
27
|
_SLIDES_,
|
28
28
|
ANNOTATION,
|
29
|
-
IP_VERSION,
|
30
29
|
} from '../constants';
|
31
|
-
import {SendReactionOptions, ToggleReactionsOptions} from './request.type';
|
30
|
+
import {SendReactionOptions, BrbOptions, ToggleReactionsOptions} from './request.type';
|
32
31
|
import MeetingUtil from './util';
|
33
32
|
import {AnnotationInfo} from '../annotation/annotation.types';
|
33
|
+
import {ClientMediaPreferences} from '../reachability/reachability.types';
|
34
34
|
|
35
35
|
/**
|
36
36
|
* @class MeetingRequest
|
@@ -128,8 +128,8 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
128
128
|
locale?: string;
|
129
129
|
deviceCapabilities?: Array<string>;
|
130
130
|
liveAnnotationSupported: boolean;
|
131
|
-
ipVersion?: IP_VERSION;
|
132
131
|
alias?: string;
|
132
|
+
clientMediaPreferences: ClientMediaPreferences;
|
133
133
|
}) {
|
134
134
|
const {
|
135
135
|
asResourceOccupant,
|
@@ -147,12 +147,11 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
147
147
|
moveToResource,
|
148
148
|
roapMessage,
|
149
149
|
reachability,
|
150
|
-
preferTranscoding,
|
151
150
|
breakoutsSupported,
|
152
151
|
locale,
|
153
152
|
deviceCapabilities = [],
|
154
153
|
liveAnnotationSupported,
|
155
|
-
|
154
|
+
clientMediaPreferences,
|
156
155
|
alias,
|
157
156
|
} = options;
|
158
157
|
|
@@ -160,8 +159,6 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
160
159
|
|
161
160
|
let url = '';
|
162
161
|
|
163
|
-
const joinCookie = await this.getJoinCookie();
|
164
|
-
|
165
162
|
const body: any = {
|
166
163
|
asResourceOccupant,
|
167
164
|
device: {
|
@@ -176,11 +173,7 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
176
173
|
allowMultiDevice: true,
|
177
174
|
ensureConversation: ensureConversation || false,
|
178
175
|
supportsNativeLobby: 1,
|
179
|
-
clientMediaPreferences
|
180
|
-
preferTranscoding: preferTranscoding ?? true,
|
181
|
-
joinCookie,
|
182
|
-
ipver: ipVersion,
|
183
|
-
},
|
176
|
+
clientMediaPreferences,
|
184
177
|
};
|
185
178
|
|
186
179
|
if (alias) {
|
@@ -916,4 +909,29 @@ export default class MeetingRequest extends StatelessWebexPlugin {
|
|
916
909
|
uri: locusUrl,
|
917
910
|
});
|
918
911
|
}
|
912
|
+
|
913
|
+
/**
|
914
|
+
* Sends a request to set be right back status.
|
915
|
+
*
|
916
|
+
* @param {Object} options - The options for brb request.
|
917
|
+
* @param {boolean} options.enabled - Whether brb status is enabled.
|
918
|
+
* @param {string} options.locusUrl - The URL of the locus.
|
919
|
+
* @param {string} options.deviceUrl - The URL of the device.
|
920
|
+
* @param {string} options.selfId - The ID of the participant.
|
921
|
+
* @returns {Promise}
|
922
|
+
*/
|
923
|
+
setBrb({enabled, locusUrl, deviceUrl, selfId}: BrbOptions) {
|
924
|
+
const uri = `${locusUrl}/${PARTICIPANT}/${selfId}/${CONTROLS}`;
|
925
|
+
|
926
|
+
return this.locusDeltaRequest({
|
927
|
+
method: HTTP_VERBS.PATCH,
|
928
|
+
uri,
|
929
|
+
body: {
|
930
|
+
brb: {
|
931
|
+
enabled,
|
932
|
+
deviceUrl,
|
933
|
+
},
|
934
|
+
},
|
935
|
+
});
|
936
|
+
}
|
919
937
|
}
|
package/src/meeting/util.ts
CHANGED
@@ -115,7 +115,7 @@ const MeetingUtil = {
|
|
115
115
|
return IP_VERSION.unknown;
|
116
116
|
},
|
117
117
|
|
118
|
-
joinMeeting: (meeting, options) => {
|
118
|
+
joinMeeting: async (meeting, options) => {
|
119
119
|
if (!meeting) {
|
120
120
|
return Promise.reject(new ParameterError('You need a meeting object.'));
|
121
121
|
}
|
@@ -127,6 +127,31 @@ const MeetingUtil = {
|
|
127
127
|
options: {meetingId: meeting.id},
|
128
128
|
});
|
129
129
|
|
130
|
+
let reachability;
|
131
|
+
let clientMediaPreferences = {
|
132
|
+
// bare minimum fallback value that should allow us to join
|
133
|
+
ipver: IP_VERSION.unknown,
|
134
|
+
joinCookie: undefined,
|
135
|
+
preferTranscoding: !meeting.isMultistream,
|
136
|
+
};
|
137
|
+
|
138
|
+
try {
|
139
|
+
clientMediaPreferences = await webex.meetings.reachability.getClientMediaPreferences(
|
140
|
+
meeting.isMultistream,
|
141
|
+
MeetingUtil.getIpVersion(webex)
|
142
|
+
);
|
143
|
+
if (options.roapMessage) {
|
144
|
+
// we only need to attach reachability if we are sending a roap message
|
145
|
+
// sending reachability on its own will cause Locus to reject our join request
|
146
|
+
reachability = await webex.meetings.reachability.getReachabilityReportToAttachToRoap();
|
147
|
+
}
|
148
|
+
} catch (e) {
|
149
|
+
LoggerProxy.logger.error(
|
150
|
+
'Meeting:util#joinMeeting --> Error getting reachability or clientMediaPreferences:',
|
151
|
+
e
|
152
|
+
);
|
153
|
+
}
|
154
|
+
|
130
155
|
// eslint-disable-next-line no-warning-comments
|
131
156
|
// TODO: check if the meeting is in JOINING state
|
132
157
|
// if Joining state termintate the request as user might click multiple times
|
@@ -138,20 +163,19 @@ const MeetingUtil = {
|
|
138
163
|
locusUrl: meeting.locusUrl,
|
139
164
|
locusClusterUrl: meeting.meetingInfo?.locusClusterUrl,
|
140
165
|
correlationId: meeting.correlationId,
|
141
|
-
reachability
|
166
|
+
reachability,
|
142
167
|
roapMessage: options.roapMessage,
|
143
168
|
permissionToken: meeting.permissionToken,
|
144
169
|
resourceId: options.resourceId || null,
|
145
170
|
moderator: options.moderator,
|
146
171
|
pin: options.pin,
|
147
172
|
moveToResource: options.moveToResource,
|
148
|
-
preferTranscoding: !meeting.isMultistream,
|
149
173
|
asResourceOccupant: options.asResourceOccupant,
|
150
174
|
breakoutsSupported: options.breakoutsSupported,
|
151
175
|
locale: options.locale,
|
152
176
|
deviceCapabilities: options.deviceCapabilities,
|
153
177
|
liveAnnotationSupported: options.liveAnnotationSupported,
|
154
|
-
|
178
|
+
clientMediaPreferences,
|
155
179
|
})
|
156
180
|
.then((res) => {
|
157
181
|
const parsed = MeetingUtil.parseLocusJoin(res);
|
@@ -177,6 +201,7 @@ const MeetingUtil = {
|
|
177
201
|
|
178
202
|
cleanUp: (meeting) => {
|
179
203
|
meeting.getWebexObject().internal.device.meetingEnded();
|
204
|
+
meeting.stopPeriodicLogUpload();
|
180
205
|
|
181
206
|
meeting.breakouts.cleanUp();
|
182
207
|
meeting.simultaneousInterpretation.cleanUp();
|
@@ -420,6 +445,9 @@ const MeetingUtil = {
|
|
420
445
|
displayHints.includes(DISPLAY_HINTS.LEAVE_END_MEETING),
|
421
446
|
|
422
447
|
canManageBreakout: (displayHints) => displayHints.includes(DISPLAY_HINTS.BREAKOUT_MANAGEMENT),
|
448
|
+
|
449
|
+
canStartBreakout: (displayHints) => !displayHints.includes(DISPLAY_HINTS.DISABLE_BREAKOUT_START),
|
450
|
+
|
423
451
|
canBroadcastMessageToBreakout: (displayHints, policies = {}) =>
|
424
452
|
displayHints.includes(DISPLAY_HINTS.BROADCAST_MESSAGE_TO_BREAKOUT) &&
|
425
453
|
!!policies[SELF_POLICY.SUPPORT_BROADCAST_MESSAGE],
|
@@ -475,15 +503,6 @@ const MeetingUtil = {
|
|
475
503
|
}
|
476
504
|
},
|
477
505
|
|
478
|
-
handleDeviceLogging: (devices = []) => {
|
479
|
-
const LOG_HEADER = 'MeetingUtil#handleDeviceLogging -->';
|
480
|
-
|
481
|
-
devices.forEach((device) => {
|
482
|
-
LoggerProxy.logger.log(LOG_HEADER, `deviceId = ${device.deviceId}`);
|
483
|
-
LoggerProxy.logger.log(LOG_HEADER, 'settings', JSON.stringify(device));
|
484
|
-
});
|
485
|
-
},
|
486
|
-
|
487
506
|
endMeetingForAll: (meeting) => {
|
488
507
|
if (meeting.meetingState === FULL_STATE.INACTIVE) {
|
489
508
|
return Promise.reject(new MeetingNotActiveError());
|
@@ -17,8 +17,23 @@ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
|
|
17
17
|
const ADHOC_MEETING_DEFAULT_ERROR =
|
18
18
|
'Failed starting the adhoc meeting, Please contact support team ';
|
19
19
|
const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
|
20
|
+
const CAPTCHA_ERROR_REQUIRES_REGISTRATION_ID_CODES = [423007];
|
21
|
+
|
20
22
|
const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
|
21
|
-
const
|
23
|
+
const JOIN_FORBIDDEN_CODES = [403003];
|
24
|
+
/**
|
25
|
+
* 403021 - Meeting registration is required
|
26
|
+
* 403022 - Meeting registration is still pending
|
27
|
+
* 403024 - Meeting registration have been rejected
|
28
|
+
* 403137 - Registration ID verified failure
|
29
|
+
* 423007 - Registration ID input too many time,please input captcha code
|
30
|
+
* 403026 - Need to join meeting via webcast
|
31
|
+
* 403037 - Meeting join required registration ID
|
32
|
+
* 403137 - Registration ID verified failure
|
33
|
+
*
|
34
|
+
*/
|
35
|
+
const JOIN_WEBINAR_ERROR_CODES = [403021, 403022, 403024, 403137, 423007, 403026, 403037, 403137];
|
36
|
+
|
22
37
|
/**
|
23
38
|
* Error to indicate that wbxappapi requires a password
|
24
39
|
*/
|
@@ -100,6 +115,7 @@ export class MeetingInfoV2PolicyError extends Error {
|
|
100
115
|
export class MeetingInfoV2CaptchaError extends Error {
|
101
116
|
captchaInfo: any;
|
102
117
|
isPasswordRequired: any;
|
118
|
+
isRegistrationIdRequired: any;
|
103
119
|
sdkMessage: any;
|
104
120
|
wbxAppApiCode: any;
|
105
121
|
body: any;
|
@@ -121,14 +137,41 @@ export class MeetingInfoV2CaptchaError extends Error {
|
|
121
137
|
this.stack = new Error().stack;
|
122
138
|
this.wbxAppApiCode = wbxAppApiErrorCode;
|
123
139
|
this.isPasswordRequired = CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES.includes(wbxAppApiErrorCode);
|
140
|
+
this.isRegistrationIdRequired =
|
141
|
+
CAPTCHA_ERROR_REQUIRES_REGISTRATION_ID_CODES.includes(wbxAppApiErrorCode);
|
124
142
|
this.captchaInfo = captchaInfo;
|
125
143
|
}
|
126
144
|
}
|
127
145
|
|
128
146
|
/**
|
129
|
-
* Error preventing join because of a webinar
|
147
|
+
* Error preventing join because of a webinar have some error
|
148
|
+
*/
|
149
|
+
export class MeetingInfoV2JoinWebinarError extends Error {
|
150
|
+
meetingInfo: any;
|
151
|
+
sdkMessage: any;
|
152
|
+
wbxAppApiCode: any;
|
153
|
+
body: any;
|
154
|
+
/**
|
155
|
+
*
|
156
|
+
* @constructor
|
157
|
+
* @param {Number} [wbxAppApiErrorCode]
|
158
|
+
* @param {Object} [meetingInfo]
|
159
|
+
* @param {String} [message]
|
160
|
+
*/
|
161
|
+
constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
|
162
|
+
super(`${message}, code=${wbxAppApiErrorCode}`);
|
163
|
+
this.name = 'MeetingInfoV2JoinWebinarError';
|
164
|
+
this.sdkMessage = message;
|
165
|
+
this.stack = new Error().stack;
|
166
|
+
this.wbxAppApiCode = wbxAppApiErrorCode;
|
167
|
+
this.meetingInfo = meetingInfo;
|
168
|
+
}
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Error preventing join because of a forbidden error
|
130
173
|
*/
|
131
|
-
export class
|
174
|
+
export class MeetingInfoV2JoinForbiddenError extends Error {
|
132
175
|
meetingInfo: any;
|
133
176
|
sdkMessage: any;
|
134
177
|
wbxAppApiCode: any;
|
@@ -142,7 +185,7 @@ export class MeetingInfoV2WebinarRegistrationError extends Error {
|
|
142
185
|
*/
|
143
186
|
constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
|
144
187
|
super(`${message}, code=${wbxAppApiErrorCode}`);
|
145
|
-
this.name = '
|
188
|
+
this.name = 'MeetingInfoV2JoinForbiddenError';
|
146
189
|
this.sdkMessage = message;
|
147
190
|
this.stack = new Error().stack;
|
148
191
|
this.wbxAppApiCode = wbxAppApiErrorCode;
|
@@ -204,21 +247,44 @@ export default class MeetingInfoV2 {
|
|
204
247
|
};
|
205
248
|
|
206
249
|
/**
|
207
|
-
* Raises a
|
250
|
+
* Raises a handleJoinWebinarError for join webinar error codes
|
251
|
+
* @param {any} err the error from the request
|
252
|
+
* @returns {void}
|
253
|
+
*/
|
254
|
+
handleJoinWebinarError = (err) => {
|
255
|
+
if (!err.body) {
|
256
|
+
return;
|
257
|
+
}
|
258
|
+
|
259
|
+
if (JOIN_WEBINAR_ERROR_CODES.includes(err.body?.code)) {
|
260
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_WEBINAR_ERROR, {
|
261
|
+
code: err.body?.code,
|
262
|
+
});
|
263
|
+
|
264
|
+
throw new MeetingInfoV2JoinWebinarError(
|
265
|
+
err.body?.code,
|
266
|
+
err.body?.data?.meetingInfo,
|
267
|
+
err.body?.message
|
268
|
+
);
|
269
|
+
}
|
270
|
+
};
|
271
|
+
|
272
|
+
/**
|
273
|
+
* Raises a handleForbiddenError for join meeting forbidden error
|
208
274
|
* @param {any} err the error from the request
|
209
275
|
* @returns {void}
|
210
276
|
*/
|
211
|
-
|
277
|
+
handleForbiddenError = (err) => {
|
212
278
|
if (!err.body) {
|
213
279
|
return;
|
214
280
|
}
|
215
281
|
|
216
|
-
if (
|
217
|
-
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.
|
282
|
+
if (JOIN_FORBIDDEN_CODES.includes(err.body?.code)) {
|
283
|
+
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.JOIN_FORBIDDEN_ERROR, {
|
218
284
|
code: err.body?.code,
|
219
285
|
});
|
220
286
|
|
221
|
-
throw new
|
287
|
+
throw new MeetingInfoV2JoinForbiddenError(
|
222
288
|
err.body?.code,
|
223
289
|
err.body?.data?.meetingInfo,
|
224
290
|
err.body?.message
|
@@ -286,7 +352,8 @@ export default class MeetingInfoV2 {
|
|
286
352
|
})
|
287
353
|
.catch((err) => {
|
288
354
|
this.handlePolicyError(err);
|
289
|
-
this.
|
355
|
+
this.handleJoinWebinarError(err);
|
356
|
+
this.handleForbiddenError(err);
|
290
357
|
|
291
358
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
|
292
359
|
reason: err.message,
|
@@ -308,6 +375,7 @@ export default class MeetingInfoV2 {
|
|
308
375
|
* @param {String} locusId
|
309
376
|
* @param {Object} extraParams
|
310
377
|
* @param {Object} options
|
378
|
+
* @param {String} registrationId
|
311
379
|
* @returns {Promise} returns a meeting info object
|
312
380
|
* @public
|
313
381
|
* @memberof MeetingInfo
|
@@ -323,7 +391,8 @@ export default class MeetingInfoV2 {
|
|
323
391
|
installedOrgID = null,
|
324
392
|
locusId = null,
|
325
393
|
extraParams: object = {},
|
326
|
-
options: {meetingId?: string; sendCAevents?: boolean} = {}
|
394
|
+
options: {meetingId?: string; sendCAevents?: boolean} = {},
|
395
|
+
registrationId: string = null
|
327
396
|
) {
|
328
397
|
const {meetingId, sendCAevents} = options;
|
329
398
|
|
@@ -348,6 +417,7 @@ export default class MeetingInfoV2 {
|
|
348
417
|
installedOrgID,
|
349
418
|
locusId,
|
350
419
|
extraParams,
|
420
|
+
registrationId,
|
351
421
|
});
|
352
422
|
|
353
423
|
// If the body only contains the default properties, we don't have enough to
|
@@ -441,7 +511,8 @@ export default class MeetingInfoV2 {
|
|
441
511
|
|
442
512
|
if (err?.statusCode === 403) {
|
443
513
|
this.handlePolicyError(err);
|
444
|
-
this.
|
514
|
+
this.handleJoinWebinarError(err);
|
515
|
+
this.handleForbiddenError(err);
|
445
516
|
|
446
517
|
Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
|
447
518
|
reason: err.message,
|
@@ -19,6 +19,7 @@ import {
|
|
19
19
|
UUID_REG,
|
20
20
|
VALID_EMAIL_ADDRESS,
|
21
21
|
DEFAULT_MEETING_INFO_REQUEST_BODY,
|
22
|
+
JOIN_LINK_MTID,
|
22
23
|
} from '../constants';
|
23
24
|
import ParameterError from '../common/errors/parameter';
|
24
25
|
import LoggerProxy from '../common/logs/logger-proxy';
|
@@ -70,7 +71,8 @@ export default class MeetingInfoUtil {
|
|
70
71
|
parsedUrl.pathname.includes(`/${MEET_M}`) ||
|
71
72
|
parsedUrl.pathname.includes(`/${MEET_CISCO}`) ||
|
72
73
|
parsedUrl.pathname.includes(`/${MEET_CO}`) ||
|
73
|
-
parsedUrl.pathname.includes(`/${JOIN}`)
|
74
|
+
parsedUrl.pathname.includes(`/${JOIN}`) ||
|
75
|
+
(parsedUrl.search && parsedUrl.search.includes(JOIN_LINK_MTID)));
|
74
76
|
}
|
75
77
|
|
76
78
|
return hostNameBool && pathNameBool;
|
@@ -226,8 +228,16 @@ export default class MeetingInfoUtil {
|
|
226
228
|
* @returns {Object} returns an object with {resource, method}
|
227
229
|
*/
|
228
230
|
static getRequestBody(options: {type: DESTINATION_TYPE; destination: object} | any) {
|
229
|
-
const {
|
230
|
-
|
231
|
+
const {
|
232
|
+
type,
|
233
|
+
destination,
|
234
|
+
password,
|
235
|
+
captchaInfo,
|
236
|
+
installedOrgID,
|
237
|
+
locusId,
|
238
|
+
extraParams,
|
239
|
+
registrationId,
|
240
|
+
} = options;
|
231
241
|
const body: any = {
|
232
242
|
...DEFAULT_MEETING_INFO_REQUEST_BODY,
|
233
243
|
...extraParams,
|
@@ -269,6 +279,10 @@ export default class MeetingInfoUtil {
|
|
269
279
|
body.password = password;
|
270
280
|
}
|
271
281
|
|
282
|
+
if (registrationId) {
|
283
|
+
body.registrationId = registrationId;
|
284
|
+
}
|
285
|
+
|
272
286
|
if (captchaInfo) {
|
273
287
|
body.captchaID = captchaInfo.id;
|
274
288
|
body.captchaVerifyCode = captchaInfo.code;
|
package/src/meetings/index.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/* eslint no-shadow: ["error", { "allow": ["eventType"] }] */
|
2
|
-
import {cloneDeep} from 'lodash';
|
2
|
+
import {cloneDeep, clone} from 'lodash';
|
3
3
|
import '@webex/internal-plugin-mercury';
|
4
4
|
import '@webex/internal-plugin-conversation';
|
5
5
|
import '@webex/internal-plugin-metrics';
|
@@ -42,6 +42,7 @@ import {
|
|
42
42
|
_ON_HOLD_LOBBY_,
|
43
43
|
_WAIT_,
|
44
44
|
DESTINATION_TYPE,
|
45
|
+
INITIAL_REGISTRATION_STATUS,
|
45
46
|
} from '../constants';
|
46
47
|
import BEHAVIORAL_METRICS from '../metrics/constants';
|
47
48
|
import MeetingInfo from '../meeting-info';
|
@@ -53,12 +54,18 @@ import Request from './request';
|
|
53
54
|
import PasswordError from '../common/errors/password-error';
|
54
55
|
import CaptchaError from '../common/errors/captcha-error';
|
55
56
|
import MeetingCollection from './collection';
|
56
|
-
import {
|
57
|
+
import {
|
58
|
+
MEETING_KEY,
|
59
|
+
INoiseReductionEffect,
|
60
|
+
IVirtualBackgroundEffect,
|
61
|
+
MeetingRegistrationStatus,
|
62
|
+
} from './meetings.types';
|
57
63
|
import MeetingsUtil from './util';
|
58
64
|
import PermissionError from '../common/errors/permission';
|
59
|
-
import
|
65
|
+
import JoinWebinarError from '../common/errors/join-webinar-error';
|
60
66
|
import {SpaceIDDeprecatedError} from '../common/errors/webex-errors';
|
61
67
|
import NoMeetingInfoError from '../common/errors/no-meeting-info';
|
68
|
+
import JoinForbiddenError from '../common/errors/join-forbidden-error';
|
62
69
|
|
63
70
|
let mediaLogger;
|
64
71
|
|
@@ -155,6 +162,9 @@ export type BasicMeetingInformation = {
|
|
155
162
|
};
|
156
163
|
meetingInfo: any;
|
157
164
|
sessionCorrelationId: string;
|
165
|
+
roles: string[];
|
166
|
+
getCurUserType: () => string | null;
|
167
|
+
callStateForMetrics: CallStateForMetrics;
|
158
168
|
};
|
159
169
|
|
160
170
|
/**
|
@@ -176,6 +186,7 @@ export default class Meetings extends WebexPlugin {
|
|
176
186
|
mediaHelpers: any;
|
177
187
|
breakoutLocusForHandleLater: any;
|
178
188
|
namespace = MEETINGS;
|
189
|
+
registrationStatus: MeetingRegistrationStatus;
|
179
190
|
|
180
191
|
/**
|
181
192
|
* Initializes the Meetings Plugin
|
@@ -689,6 +700,20 @@ export default class Meetings extends WebexPlugin {
|
|
689
700
|
});
|
690
701
|
}
|
691
702
|
|
703
|
+
/**
|
704
|
+
* API to change log upload interval. Setting the factor to 0 will disable periodic log uploads.
|
705
|
+
*
|
706
|
+
* @param {number} factor new factor value
|
707
|
+
* @returns {void}
|
708
|
+
*/
|
709
|
+
private _setLogUploadIntervalMultiplicationFactor(factor: number) {
|
710
|
+
if (typeof factor !== 'number') {
|
711
|
+
return;
|
712
|
+
}
|
713
|
+
// @ts-ignore
|
714
|
+
this.config.logUploadIntervalMultiplicationFactor = factor;
|
715
|
+
}
|
716
|
+
|
692
717
|
/**
|
693
718
|
* API to toggle unified meetings
|
694
719
|
* @param {Boolean} changeState
|
@@ -782,6 +807,18 @@ export default class Meetings extends WebexPlugin {
|
|
782
807
|
}
|
783
808
|
}
|
784
809
|
|
810
|
+
/**
|
811
|
+
* Executes a registration step and updates the registration status.
|
812
|
+
* @param {Function} step - The registration step to execute.
|
813
|
+
* @param {string} stepName - The name of the registration step.
|
814
|
+
* @returns {Promise} A promise that resolves when the step is completed.
|
815
|
+
*/
|
816
|
+
executeRegistrationStep(step: () => Promise<any>, stepName: string) {
|
817
|
+
return step().then(() => {
|
818
|
+
this.registrationStatus[stepName] = true;
|
819
|
+
});
|
820
|
+
}
|
821
|
+
|
785
822
|
/**
|
786
823
|
* Explicitly sets up the meetings plugin by registering
|
787
824
|
* the device, connecting to mercury, and listening for locus events.
|
@@ -792,6 +829,8 @@ export default class Meetings extends WebexPlugin {
|
|
792
829
|
* @memberof Meetings
|
793
830
|
*/
|
794
831
|
public register(deviceRegistrationOptions?: DeviceRegistrationOptions): Promise<any> {
|
832
|
+
this.registrationStatus = clone(INITIAL_REGISTRATION_STATUS);
|
833
|
+
|
795
834
|
// @ts-ignore
|
796
835
|
if (!this.webex.canAuthorize) {
|
797
836
|
LoggerProxy.logger.error(
|
@@ -810,24 +849,39 @@ export default class Meetings extends WebexPlugin {
|
|
810
849
|
}
|
811
850
|
|
812
851
|
return Promise.all([
|
813
|
-
this.fetchUserPreferredWebexSite(),
|
814
|
-
this.getGeoHint(),
|
815
|
-
this.
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
852
|
+
this.executeRegistrationStep(() => this.fetchUserPreferredWebexSite(), 'fetchWebexSite'),
|
853
|
+
this.executeRegistrationStep(() => this.getGeoHint(), 'getGeoHint'),
|
854
|
+
this.executeRegistrationStep(
|
855
|
+
() =>
|
856
|
+
this.startReachability('registration').catch((error) => {
|
857
|
+
LoggerProxy.logger.error(`Meetings:index#register --> GDM error, ${error.message}`);
|
858
|
+
}),
|
859
|
+
'startReachability'
|
860
|
+
),
|
861
|
+
this.executeRegistrationStep(
|
862
|
+
() =>
|
863
|
+
// @ts-ignore
|
864
|
+
this.webex.internal.device
|
865
|
+
.register(deviceRegistrationOptions)
|
824
866
|
// @ts-ignore
|
825
|
-
|
826
|
-
|
867
|
+
.then(() => {
|
868
|
+
LoggerProxy.logger.info(
|
869
|
+
// @ts-ignore
|
870
|
+
`Meetings:index#register --> INFO, Device registered ${this.webex.internal.device.url}`
|
871
|
+
);
|
872
|
+
}),
|
873
|
+
'deviceRegister'
|
874
|
+
).then(() =>
|
875
|
+
this.executeRegistrationStep(
|
876
|
+
// @ts-ignore
|
877
|
+
() => this.webex.internal.mercury.connect(),
|
878
|
+
'mercuryConnect'
|
827
879
|
)
|
828
|
-
|
829
|
-
|
830
|
-
|
880
|
+
),
|
881
|
+
this.executeRegistrationStep(
|
882
|
+
() => Promise.resolve(MeetingsUtil.checkH264Support.call(this)),
|
883
|
+
'checkH264Support'
|
884
|
+
),
|
831
885
|
])
|
832
886
|
.then(() => {
|
833
887
|
this.listenForEvents();
|
@@ -891,6 +945,7 @@ export default class Meetings extends WebexPlugin {
|
|
891
945
|
EVENT_TRIGGERS.MEETINGS_UNREGISTERED
|
892
946
|
);
|
893
947
|
this.registered = false;
|
948
|
+
this.registrationStatus = clone(INITIAL_REGISTRATION_STATUS);
|
894
949
|
})
|
895
950
|
);
|
896
951
|
}
|
@@ -1143,6 +1198,9 @@ export default class Meetings extends WebexPlugin {
|
|
1143
1198
|
sessionId: meeting.locusInfo?.fullState?.sessionId,
|
1144
1199
|
},
|
1145
1200
|
},
|
1201
|
+
roles: meeting.roles,
|
1202
|
+
callStateForMetrics: meeting.callStateForMetrics,
|
1203
|
+
getCurUserType: meeting.getCurUserType,
|
1146
1204
|
});
|
1147
1205
|
this.meetingCollection.delete(meeting.id);
|
1148
1206
|
Trigger.trigger(
|
@@ -1406,7 +1464,8 @@ export default class Meetings extends WebexPlugin {
|
|
1406
1464
|
!(err instanceof CaptchaError) &&
|
1407
1465
|
!(err instanceof PasswordError) &&
|
1408
1466
|
!(err instanceof PermissionError) &&
|
1409
|
-
!(err instanceof
|
1467
|
+
!(err instanceof JoinWebinarError) &&
|
1468
|
+
!(err instanceof JoinForbiddenError)
|
1410
1469
|
) {
|
1411
1470
|
LoggerProxy.logger.info(
|
1412
1471
|
`Meetings:index#createMeeting --> Info Unable to fetch meeting info for ${destination}.`
|
@@ -21,3 +21,13 @@ export const MEETING_KEY = {
|
|
21
21
|
} as const;
|
22
22
|
|
23
23
|
export type MEETING_KEY = Enum<typeof MEETING_KEY>;
|
24
|
+
|
25
|
+
// finer grained status for registration steps
|
26
|
+
export type MeetingRegistrationStatus = {
|
27
|
+
fetchWebexSite: boolean;
|
28
|
+
getGeoHint: boolean;
|
29
|
+
startReachability: boolean;
|
30
|
+
deviceRegister: boolean;
|
31
|
+
mercuryConnect: boolean;
|
32
|
+
checkH264Support: boolean;
|
33
|
+
};
|