@webex/plugin-meetings 3.1.0 → 3.2.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/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/reconnection-not-started.js +46 -0
- package/dist/common/errors/reconnection-not-started.js.map +1 -0
- package/dist/constants.js +16 -5
- package/dist/constants.js.map +1 -1
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +7 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +10 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/media/properties.js +102 -57
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +6 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +564 -475
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +27 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/util.js +9 -16
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +37 -49
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meeting-info/util.js +304 -267
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +334 -298
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +12 -28
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/index.js +88 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +138 -109
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/request.js +3 -27
- package/dist/roap/request.js.map +1 -1
- package/dist/statsAnalyzer/index.js +8 -2
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +17 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/reconnection-not-started.d.ts +13 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +93 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +36 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +73 -0
- package/dist/types/constants.d.ts +1098 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +272 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +61 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +117 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +247 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +173 -0
- package/dist/types/meeting/index.d.ts +1832 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
- package/dist/types/meeting/muteState.d.ts +178 -0
- package/dist/types/meeting/request.d.ts +295 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +122 -0
- package/dist/types/meeting/voicea-meeting.d.ts +17 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +69 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +49 -0
- package/dist/types/meeting-info/utilv2.d.ts +65 -0
- package/dist/types/meetings/collection.d.ts +40 -0
- package/dist/types/meetings/index.d.ts +383 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +160 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +215 -0
- package/dist/types/metrics/constants.d.ts +70 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/types/multistream/sendSlotManager.d.ts +69 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/clusterReachability.d.ts +110 -0
- package/dist/types/reachability/index.d.ts +120 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reachability/util.d.ts +15 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +86 -0
- package/dist/types/roap/request.d.ts +39 -0
- package/dist/types/roap/turnDiscovery.d.ts +155 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -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/types/transcription/index.d.ts +64 -0
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/common/errors/reconnection-not-started.ts +25 -0
- package/src/constants.ts +14 -5
- package/src/index.ts +30 -0
- package/src/locus-info/controlsUtils.ts +11 -0
- package/src/locus-info/index.ts +16 -0
- package/src/media/properties.ts +67 -15
- package/src/mediaQualityMetrics/config.ts +13 -7
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +144 -107
- package/src/meeting/locusMediaRequest.ts +31 -0
- package/src/meeting/util.ts +9 -16
- package/src/meeting/voicea-meeting.ts +44 -46
- package/src/meeting-info/util.ts +241 -233
- package/src/meeting-info/utilv2.ts +250 -244
- package/src/meetings/index.ts +15 -27
- package/src/reachability/index.ts +60 -0
- package/src/reconnection-manager/index.ts +128 -105
- package/src/roap/request.ts +1 -24
- package/src/statsAnalyzer/index.ts +10 -3
- package/src/statsAnalyzer/mqaUtil.ts +23 -0
- package/test/unit/spec/locus-info/controlsUtils.js +20 -0
- package/test/unit/spec/locus-info/index.js +21 -0
- package/test/unit/spec/media/properties.ts +145 -140
- package/test/unit/spec/meeting/in-meeting-actions.ts +6 -0
- package/test/unit/spec/meeting/index.js +271 -105
- package/test/unit/spec/meeting/locusMediaRequest.ts +49 -0
- package/test/unit/spec/meeting/utils.js +3 -10
- package/test/unit/spec/meeting/voicea-meeting.ts +5 -14
- package/test/unit/spec/meetings/index.js +59 -17
- package/test/unit/spec/reachability/index.ts +266 -0
- package/test/unit/spec/reconnection-manager/index.js +127 -39
- package/test/unit/spec/roap/request.ts +0 -37
- package/test/unit/spec/stats-analyzer/index.js +100 -8
- package/src/common/errors/reconnection-in-progress.ts +0 -8
|
@@ -106,6 +106,12 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
106
106
|
},
|
|
107
107
|
});
|
|
108
108
|
|
|
109
|
+
mockWebex.internal = {
|
|
110
|
+
newMetrics: {
|
|
111
|
+
submitClientEvent: sinon.stub()
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
|
|
109
115
|
locusMediaRequest = new LocusMediaRequest({
|
|
110
116
|
device: {
|
|
111
117
|
url: 'deviceUrl',
|
|
@@ -113,6 +119,7 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
113
119
|
regionCode: 'regionCode',
|
|
114
120
|
},
|
|
115
121
|
correlationId: 'correlationId',
|
|
122
|
+
meetingId: 'meetingId',
|
|
116
123
|
preferTranscoding: true,
|
|
117
124
|
}, {
|
|
118
125
|
parent: mockWebex,
|
|
@@ -134,6 +141,27 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
134
141
|
await sendRoapMessage('OFFER');
|
|
135
142
|
|
|
136
143
|
webexRequestStub.resetHistory();
|
|
144
|
+
mockWebex.internal.newMetrics.submitClientEvent.resetHistory();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const checkMetrics = (expectedMetrics: boolean = true) => {
|
|
148
|
+
if (expectedMetrics) {
|
|
149
|
+
assert.calledWith(mockWebex.internal.newMetrics.submitClientEvent, {
|
|
150
|
+
name: 'client.locus.media.request',
|
|
151
|
+
options: {
|
|
152
|
+
meetingId: 'meetingId',
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
assert.calledWith(mockWebex.internal.newMetrics.submitClientEvent, {
|
|
157
|
+
name: 'client.locus.media.response',
|
|
158
|
+
options: {
|
|
159
|
+
meetingId: 'meetingId',
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
} else {
|
|
163
|
+
assert.notCalled(mockWebex.internal.newMetrics.submitClientEvent);
|
|
164
|
+
}
|
|
137
165
|
}
|
|
138
166
|
|
|
139
167
|
it('sends a roap message', async () => {
|
|
@@ -146,6 +174,21 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
146
174
|
uri: 'fakeMeetingSelfUrl/media',
|
|
147
175
|
body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: true}),
|
|
148
176
|
});
|
|
177
|
+
|
|
178
|
+
checkMetrics();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it('sends correct metric event when roap message fails', async () => {
|
|
182
|
+
webexRequestStub.rejects({code: 300, message: 'fake error'});
|
|
183
|
+
await assert.isRejected(sendRoapMessage('OFFER'));
|
|
184
|
+
|
|
185
|
+
assert.calledWith(mockWebex.internal.newMetrics.submitClientEvent, {
|
|
186
|
+
name: 'client.locus.media.response',
|
|
187
|
+
options: {
|
|
188
|
+
meetingId: 'meetingId',
|
|
189
|
+
rawError: {code: 300, message: 'fake error'},
|
|
190
|
+
},
|
|
191
|
+
});
|
|
149
192
|
});
|
|
150
193
|
|
|
151
194
|
it('sends a local mute request', async () => {
|
|
@@ -160,6 +203,8 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
160
203
|
uri: 'fakeMeetingSelfUrl/media',
|
|
161
204
|
body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: false}),
|
|
162
205
|
});
|
|
206
|
+
|
|
207
|
+
checkMetrics(false);
|
|
163
208
|
});
|
|
164
209
|
|
|
165
210
|
it('sends a local mute request with sequence', async () => {
|
|
@@ -207,6 +252,7 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
207
252
|
body: createExpectedLocalMuteBody({audioMuted: false, videoMuted: true}),
|
|
208
253
|
});
|
|
209
254
|
|
|
255
|
+
checkMetrics(false);
|
|
210
256
|
});
|
|
211
257
|
|
|
212
258
|
it('sends a local mute request with the last audio/video mute values', async () => {
|
|
@@ -225,6 +271,7 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
225
271
|
body: createExpectedLocalMuteBody({audioMuted: true, videoMuted: false}),
|
|
226
272
|
});
|
|
227
273
|
|
|
274
|
+
checkMetrics(false);
|
|
228
275
|
});
|
|
229
276
|
|
|
230
277
|
it('sends only roap when roap and local mute are requested', async () => {
|
|
@@ -242,6 +289,8 @@ describe('LocusMediaRequest.send()', () => {
|
|
|
242
289
|
uri: 'fakeMeetingSelfUrl/media',
|
|
243
290
|
body: createExpectedRoapBody('OFFER', {audioMuted: true, videoMuted: false}),
|
|
244
291
|
});
|
|
292
|
+
|
|
293
|
+
checkMetrics();
|
|
245
294
|
});
|
|
246
295
|
|
|
247
296
|
describe('queueing', () => {
|
|
@@ -370,16 +370,6 @@ describe('plugin-meetings', () => {
|
|
|
370
370
|
sequence: {},
|
|
371
371
|
type: 'LocalMute',
|
|
372
372
|
});
|
|
373
|
-
|
|
374
|
-
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
375
|
-
name: 'client.locus.media.request',
|
|
376
|
-
options: {meetingId: meeting.id},
|
|
377
|
-
});
|
|
378
|
-
|
|
379
|
-
assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
|
|
380
|
-
name: 'client.locus.media.response',
|
|
381
|
-
options: {meetingId: meeting.id},
|
|
382
|
-
});
|
|
383
373
|
});
|
|
384
374
|
});
|
|
385
375
|
|
|
@@ -765,6 +755,9 @@ describe('plugin-meetings', () => {
|
|
|
765
755
|
{functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
|
|
766
756
|
{functionName: 'canStopTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_STOP'},
|
|
767
757
|
{functionName: 'isClosedCaptionActive', displayHint: 'CAPTION_STATUS_ACTIVE'},
|
|
758
|
+
{functionName: 'canStartManualCaption', displayHint: 'MANUAL_CAPTION_START'},
|
|
759
|
+
{functionName: 'canStopManualCaption', displayHint: 'MANUAL_CAPTION_STOP'},
|
|
760
|
+
{functionName: 'isManualCaptionActive', displayHint: 'MANUAL_CAPTION_STATUS_ACTIVE'},
|
|
768
761
|
{functionName: 'isWebexAssistantActive', displayHint: 'WEBEX_ASSISTANT_STATUS_ACTIVE'},
|
|
769
762
|
{functionName: 'canViewCaptionPanel', displayHint: 'ENABLE_CAPTION_PANEL'},
|
|
770
763
|
{functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
|
|
@@ -101,14 +101,7 @@ describe('plugin-meetings', () => {
|
|
|
101
101
|
],
|
|
102
102
|
transcript_language_code: "en"
|
|
103
103
|
}
|
|
104
|
-
]
|
|
105
|
-
transcript: {
|
|
106
|
-
text: "Don't bother me talking I'm just going to get the transcript data that is interim and I needed if I keep talking, I get the interim data",
|
|
107
|
-
csis: [
|
|
108
|
-
1234867712
|
|
109
|
-
],
|
|
110
|
-
transcript_language_code: "en"
|
|
111
|
-
}
|
|
104
|
+
]
|
|
112
105
|
};
|
|
113
106
|
});
|
|
114
107
|
|
|
@@ -160,7 +153,6 @@ describe('plugin-meetings', () => {
|
|
|
160
153
|
it('should process new final captions correctly', () => {
|
|
161
154
|
let transcriptData = fakeMeeting.transcription;
|
|
162
155
|
let transcriptId = fakeVoiceaPayload.transcriptId;
|
|
163
|
-
delete fakeVoiceaPayload.transcripts;
|
|
164
156
|
|
|
165
157
|
// Assuming that processNewCaptions is a pure function that doesn't mutate the input but returns a new state
|
|
166
158
|
processNewCaptions({
|
|
@@ -169,7 +161,7 @@ describe('plugin-meetings', () => {
|
|
|
169
161
|
});
|
|
170
162
|
|
|
171
163
|
// Check if speaker details are cached if needed
|
|
172
|
-
const csisKey = fakeVoiceaPayload.
|
|
164
|
+
const csisKey = fakeVoiceaPayload.transcripts[0].csis[0];
|
|
173
165
|
const speaker = transcriptData.speakerProxy[csisKey];
|
|
174
166
|
expect(speaker).to.exist;
|
|
175
167
|
|
|
@@ -178,6 +170,7 @@ describe('plugin-meetings', () => {
|
|
|
178
170
|
|
|
179
171
|
//check if the interim caption is removed
|
|
180
172
|
const oldInterimCaption = transcriptData.captions.find(caption => caption.id === `${transcriptId}_${speaker.speakerId}`);
|
|
173
|
+
console.log(oldInterimCaption);
|
|
181
174
|
expect(oldInterimCaption).to.not.exist;
|
|
182
175
|
|
|
183
176
|
// Check the final caption data
|
|
@@ -186,8 +179,8 @@ describe('plugin-meetings', () => {
|
|
|
186
179
|
expect(newCaption).to.include({
|
|
187
180
|
id: transcriptId,
|
|
188
181
|
isFinal: fakeVoiceaPayload.isFinal,
|
|
189
|
-
text: fakeVoiceaPayload.
|
|
190
|
-
currentSpokenLanguage: fakeVoiceaPayload.
|
|
182
|
+
text: fakeVoiceaPayload.transcripts[0].text,
|
|
183
|
+
currentSpokenLanguage: fakeVoiceaPayload.transcripts[0].transcript_language_code,
|
|
191
184
|
});
|
|
192
185
|
|
|
193
186
|
// Check the speaker data in the new caption
|
|
@@ -197,7 +190,6 @@ describe('plugin-meetings', () => {
|
|
|
197
190
|
it('should process new interim captions correctly', () => {
|
|
198
191
|
let transcriptData = fakeMeeting.transcription;
|
|
199
192
|
let transcriptId = fakeVoiceaPayload.transcriptId;
|
|
200
|
-
delete fakeVoiceaPayload.transcript;
|
|
201
193
|
|
|
202
194
|
transcriptData.captions.splice(transcriptData.length - 1, 1);
|
|
203
195
|
fakeVoiceaPayload.isFinal = false;
|
|
@@ -232,7 +224,6 @@ describe('plugin-meetings', () => {
|
|
|
232
224
|
it('should process interim captions with an existing one correctly', () => {
|
|
233
225
|
let transcriptData = fakeMeeting.transcription;
|
|
234
226
|
let transcriptId = fakeVoiceaPayload.transcriptId;
|
|
235
|
-
delete fakeVoiceaPayload.transcript;
|
|
236
227
|
fakeVoiceaPayload.isFinal = false;
|
|
237
228
|
|
|
238
229
|
processNewCaptions({
|
|
@@ -18,6 +18,7 @@ import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy
|
|
|
18
18
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
|
19
19
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
|
20
20
|
import Meeting, {CallStateForMetrics} from '@webex/plugin-meetings/src/meeting';
|
|
21
|
+
import {Services} from '@webex/webex-core';
|
|
21
22
|
import MeetingUtil from '@webex/plugin-meetings/src/meeting/util';
|
|
22
23
|
import Meetings from '@webex/plugin-meetings/src/meetings';
|
|
23
24
|
import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
|
|
@@ -75,6 +76,8 @@ describe('plugin-meetings', () => {
|
|
|
75
76
|
let test1;
|
|
76
77
|
let test2;
|
|
77
78
|
let locusInfo;
|
|
79
|
+
let services;
|
|
80
|
+
let catalog;
|
|
78
81
|
|
|
79
82
|
describe('meetings index', () => {
|
|
80
83
|
beforeEach(() => {
|
|
@@ -93,9 +96,13 @@ describe('plugin-meetings', () => {
|
|
|
93
96
|
device: Device,
|
|
94
97
|
mercury: Mercury,
|
|
95
98
|
meetings: Meetings,
|
|
99
|
+
services: Services,
|
|
96
100
|
},
|
|
97
101
|
});
|
|
98
102
|
|
|
103
|
+
services = webex.internal.services;
|
|
104
|
+
catalog = services._getCatalog();
|
|
105
|
+
|
|
99
106
|
Object.assign(webex, {
|
|
100
107
|
logging: logger,
|
|
101
108
|
});
|
|
@@ -161,6 +168,7 @@ describe('plugin-meetings', () => {
|
|
|
161
168
|
],
|
|
162
169
|
})
|
|
163
170
|
),
|
|
171
|
+
_getCatalog: sinon.stub().returns(catalog),
|
|
164
172
|
fetchClientRegionInfo: sinon.stub().returns(Promise.resolve()),
|
|
165
173
|
},
|
|
166
174
|
metrics: {
|
|
@@ -513,13 +521,8 @@ describe('plugin-meetings', () => {
|
|
|
513
521
|
});
|
|
514
522
|
describe('#getAllMeetings', () => {
|
|
515
523
|
it('calls MeetingCollection to get all meetings with supplied options', () => {
|
|
516
|
-
webex.meetings.getAllMeetings(
|
|
517
|
-
test: test1,
|
|
518
|
-
});
|
|
524
|
+
webex.meetings.getAllMeetings();
|
|
519
525
|
assert.calledOnce(webex.meetings.meetingCollection.getAll);
|
|
520
|
-
assert.calledWith(webex.meetings.meetingCollection.getAll, {
|
|
521
|
-
test: test1,
|
|
522
|
-
});
|
|
523
526
|
});
|
|
524
527
|
});
|
|
525
528
|
});
|
|
@@ -1011,6 +1014,7 @@ describe('plugin-meetings', () => {
|
|
|
1011
1014
|
callBackInfo: {
|
|
1012
1015
|
callbackAddress: uri1,
|
|
1013
1016
|
},
|
|
1017
|
+
devices: [],
|
|
1014
1018
|
},
|
|
1015
1019
|
info: {
|
|
1016
1020
|
webExMeetingId,
|
|
@@ -1038,6 +1042,7 @@ describe('plugin-meetings', () => {
|
|
|
1038
1042
|
callBackInfo: {
|
|
1039
1043
|
callbackAddress: uri1,
|
|
1040
1044
|
},
|
|
1045
|
+
devices: [],
|
|
1041
1046
|
},
|
|
1042
1047
|
info: {
|
|
1043
1048
|
webExMeetingId,
|
|
@@ -1052,6 +1057,7 @@ describe('plugin-meetings', () => {
|
|
|
1052
1057
|
callBackInfo: {
|
|
1053
1058
|
callbackAddress: uri1,
|
|
1054
1059
|
},
|
|
1060
|
+
devices: [],
|
|
1055
1061
|
},
|
|
1056
1062
|
info: {
|
|
1057
1063
|
webExMeetingId,
|
|
@@ -1074,6 +1080,7 @@ describe('plugin-meetings', () => {
|
|
|
1074
1080
|
callBackInfo: {
|
|
1075
1081
|
callbackAddress: uri1,
|
|
1076
1082
|
},
|
|
1083
|
+
devices: [],
|
|
1077
1084
|
},
|
|
1078
1085
|
info: {
|
|
1079
1086
|
webExMeetingId,
|
|
@@ -1091,6 +1098,7 @@ describe('plugin-meetings', () => {
|
|
|
1091
1098
|
callBackInfo: {
|
|
1092
1099
|
callbackAddress: uri1,
|
|
1093
1100
|
},
|
|
1101
|
+
devices: [],
|
|
1094
1102
|
},
|
|
1095
1103
|
info: {
|
|
1096
1104
|
webExMeetingId,
|
|
@@ -1121,6 +1129,7 @@ describe('plugin-meetings', () => {
|
|
|
1121
1129
|
callBackInfo: {
|
|
1122
1130
|
callbackAddress: uri1,
|
|
1123
1131
|
},
|
|
1132
|
+
devices: [],
|
|
1124
1133
|
},
|
|
1125
1134
|
info: {
|
|
1126
1135
|
webExMeetingId,
|
|
@@ -1143,6 +1152,7 @@ describe('plugin-meetings', () => {
|
|
|
1143
1152
|
callBackInfo: {
|
|
1144
1153
|
callbackAddress: uri1,
|
|
1145
1154
|
},
|
|
1155
|
+
devices: [],
|
|
1146
1156
|
},
|
|
1147
1157
|
info: {
|
|
1148
1158
|
webExMeetingId,
|
|
@@ -1157,6 +1167,7 @@ describe('plugin-meetings', () => {
|
|
|
1157
1167
|
callbackInfo: {
|
|
1158
1168
|
callbackAddress: uri1,
|
|
1159
1169
|
},
|
|
1170
|
+
devices: [],
|
|
1160
1171
|
},
|
|
1161
1172
|
info: {
|
|
1162
1173
|
isUnifiedSpaceMeeting,
|
|
@@ -1914,34 +1925,34 @@ describe('plugin-meetings', () => {
|
|
|
1914
1925
|
let loggerProxySpy;
|
|
1915
1926
|
|
|
1916
1927
|
it('should call request.getMeetingPreferences to get the preferred webex site ', async () => {
|
|
1928
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1917
1929
|
assert.isDefined(webex.meetings.preferredWebexSite);
|
|
1918
1930
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1919
1931
|
|
|
1920
1932
|
assert.equal(webex.meetings.preferredWebexSite, 'go.webex.com');
|
|
1933
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1934
|
+
'go.webex.com',
|
|
1935
|
+
]);
|
|
1921
1936
|
});
|
|
1922
1937
|
|
|
1923
1938
|
const setup = ({user} = {}) => {
|
|
1924
1939
|
loggerProxySpy = sinon.spy(LoggerProxy.logger, 'error');
|
|
1940
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), []);
|
|
1925
1941
|
|
|
1926
1942
|
Object.assign(webex.internal, {
|
|
1927
|
-
services: {
|
|
1928
|
-
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1929
|
-
},
|
|
1930
1943
|
user: {
|
|
1931
1944
|
get: sinon.stub().returns(Promise.resolve(user)),
|
|
1932
1945
|
},
|
|
1933
1946
|
});
|
|
1947
|
+
|
|
1948
|
+
Object.assign(webex.internal.services, {
|
|
1949
|
+
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1950
|
+
});
|
|
1934
1951
|
};
|
|
1935
1952
|
|
|
1936
1953
|
it('should not fail if UserPreferred info is not fetched ', async () => {
|
|
1937
1954
|
setup();
|
|
1938
1955
|
|
|
1939
|
-
Object.assign(webex.internal, {
|
|
1940
|
-
services: {
|
|
1941
|
-
getMeetingPreferences: sinon.stub().returns(Promise.resolve({})),
|
|
1942
|
-
},
|
|
1943
|
-
});
|
|
1944
|
-
|
|
1945
1956
|
await webex.meetings.fetchUserPreferredWebexSite().then(() => {
|
|
1946
1957
|
assert.equal(webex.meetings.preferredWebexSite, '');
|
|
1947
1958
|
});
|
|
@@ -1949,6 +1960,7 @@ describe('plugin-meetings', () => {
|
|
|
1949
1960
|
loggerProxySpy,
|
|
1950
1961
|
'Failed to fetch preferred site from user - no site will be set'
|
|
1951
1962
|
);
|
|
1963
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
1952
1964
|
});
|
|
1953
1965
|
|
|
1954
1966
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -1965,6 +1977,10 @@ describe('plugin-meetings', () => {
|
|
|
1965
1977
|
await webex.meetings.fetchUserPreferredWebexSite();
|
|
1966
1978
|
|
|
1967
1979
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
1980
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
1981
|
+
'',
|
|
1982
|
+
'site.webex.com',
|
|
1983
|
+
]);
|
|
1968
1984
|
assert.notCalled(loggerProxySpy);
|
|
1969
1985
|
});
|
|
1970
1986
|
|
|
@@ -1986,6 +2002,7 @@ describe('plugin-meetings', () => {
|
|
|
1986
2002
|
loggerProxySpy,
|
|
1987
2003
|
'Failed to fetch preferred site from user - no site will be set'
|
|
1988
2004
|
);
|
|
2005
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
1989
2006
|
});
|
|
1990
2007
|
}
|
|
1991
2008
|
);
|
|
@@ -2002,6 +2019,7 @@ describe('plugin-meetings', () => {
|
|
|
2002
2019
|
loggerProxySpy,
|
|
2003
2020
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2004
2021
|
);
|
|
2022
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2005
2023
|
});
|
|
2006
2024
|
|
|
2007
2025
|
it('should fall back to fetching the site from the user', async () => {
|
|
@@ -2019,6 +2037,10 @@ describe('plugin-meetings', () => {
|
|
|
2019
2037
|
|
|
2020
2038
|
assert.equal(webex.meetings.preferredWebexSite, 'site.webex.com');
|
|
2021
2039
|
assert.notCalled(loggerProxySpy);
|
|
2040
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), [
|
|
2041
|
+
'',
|
|
2042
|
+
'site.webex.com',
|
|
2043
|
+
]);
|
|
2022
2044
|
});
|
|
2023
2045
|
|
|
2024
2046
|
forEach(
|
|
@@ -2039,6 +2061,7 @@ describe('plugin-meetings', () => {
|
|
|
2039
2061
|
loggerProxySpy,
|
|
2040
2062
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2041
2063
|
);
|
|
2064
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2042
2065
|
});
|
|
2043
2066
|
}
|
|
2044
2067
|
);
|
|
@@ -2055,6 +2078,7 @@ describe('plugin-meetings', () => {
|
|
|
2055
2078
|
loggerProxySpy,
|
|
2056
2079
|
'Failed to fetch preferred site from user - no site will be set'
|
|
2057
2080
|
);
|
|
2081
|
+
assert.deepEqual(webex.internal.services._getCatalog().getAllowedDomains(), ['']);
|
|
2058
2082
|
});
|
|
2059
2083
|
});
|
|
2060
2084
|
});
|
|
@@ -2299,6 +2323,7 @@ describe('plugin-meetings', () => {
|
|
|
2299
2323
|
sessionType: 'BREAKOUT',
|
|
2300
2324
|
};
|
|
2301
2325
|
newLocus.self.state = 'JOINED';
|
|
2326
|
+
newLocus.self.devices = [];
|
|
2302
2327
|
newLocus.fullState = {
|
|
2303
2328
|
active: true,
|
|
2304
2329
|
};
|
|
@@ -2315,7 +2340,7 @@ describe('plugin-meetings', () => {
|
|
|
2315
2340
|
sessionType: 'MAIN',
|
|
2316
2341
|
};
|
|
2317
2342
|
newLocus.self.state = 'JOINED';
|
|
2318
|
-
|
|
2343
|
+
newLocus.self.devices = [];
|
|
2319
2344
|
LoggerProxy.logger.log = sinon.stub();
|
|
2320
2345
|
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2321
2346
|
assert.equal(result, true);
|
|
@@ -2330,11 +2355,28 @@ describe('plugin-meetings', () => {
|
|
|
2330
2355
|
};
|
|
2331
2356
|
newLocus.self.state = 'LEFT';
|
|
2332
2357
|
newLocus.self.reason = 'MOVED';
|
|
2333
|
-
|
|
2358
|
+
newLocus.self.devices = [];
|
|
2334
2359
|
LoggerProxy.logger.log = sinon.stub();
|
|
2335
2360
|
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2336
2361
|
assert.equal(result, false);
|
|
2337
2362
|
});
|
|
2363
|
+
it('moved to lobby, return true', () => {
|
|
2364
|
+
newLocus.controls.breakout = {
|
|
2365
|
+
sessionType: 'MAIN',
|
|
2366
|
+
};
|
|
2367
|
+
newLocus.self.state = 'JOINED';
|
|
2368
|
+
newLocus.self.devices = [
|
|
2369
|
+
{
|
|
2370
|
+
intent: {
|
|
2371
|
+
reason: 'ON_HOLD_LOBBY',
|
|
2372
|
+
type: 'WAIT',
|
|
2373
|
+
},
|
|
2374
|
+
},
|
|
2375
|
+
];
|
|
2376
|
+
LoggerProxy.logger.log = sinon.stub();
|
|
2377
|
+
const result = webex.meetings.isNeedHandleLocusDTO(meeting, newLocus);
|
|
2378
|
+
assert.equal(result, true);
|
|
2379
|
+
});
|
|
2338
2380
|
});
|
|
2339
2381
|
|
|
2340
2382
|
describe('#getCorrespondingMeetingByLocus', () => {
|