@webex/plugin-meetings 3.0.0-beta.17 → 3.0.0-beta.18
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 +116 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/index.js +226 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/config.js +4 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +38 -5
- package/dist/constants.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +2 -1
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +48 -0
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/parser.js +1 -0
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +19 -11
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +3 -3
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +4 -4
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/index.js +651 -460
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +25 -44
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +4 -57
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +2 -0
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meetings/index.js +28 -18
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +14 -12
- package/dist/meetings/request.js.map +1 -1
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +14 -1
- package/dist/member/util.js.map +1 -1
- package/dist/members/index.js +8 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +3 -1
- package/dist/members/request.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +46 -6
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/multistreamMedia.js +4 -0
- package/dist/multistream/multistreamMedia.js.map +1 -1
- package/dist/multistream/receiveSlot.js +3 -3
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +8 -6
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +168 -63
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/index.js +63 -51
- package/dist/reachability/index.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.js +25 -12
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +343 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +63 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/request.js +88 -68
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +72 -47
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/statsAnalyzer/index.js +3 -3
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +18 -6
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/package.json +24 -19
- package/src/breakouts/README.md +190 -0
- package/src/breakouts/breakout.ts +110 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/index.ts +225 -0
- package/src/config.ts +4 -1
- package/src/constants.ts +35 -1
- package/src/locus-info/controlsUtils.ts +2 -0
- package/src/locus-info/index.ts +59 -1
- package/src/locus-info/parser.ts +1 -0
- package/src/locus-info/selfUtils.ts +8 -0
- package/src/media/index.ts +1 -2
- package/src/media/properties.ts +6 -9
- package/src/meeting/index.ts +352 -111
- package/src/meeting/request.ts +9 -31
- package/src/meeting/request.type.ts +2 -0
- package/src/meeting/util.ts +3 -60
- package/src/meeting-info/meeting-info-v2.ts +2 -0
- package/src/meetings/index.ts +10 -5
- package/src/meetings/request.ts +1 -1
- package/src/member/index.ts +9 -0
- package/src/member/util.ts +14 -1
- package/src/members/index.ts +1 -0
- package/src/members/request.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +79 -15
- package/src/multistream/multistreamMedia.ts +4 -0
- package/src/multistream/receiveSlot.ts +17 -12
- package/src/multistream/receiveSlotManager.ts +22 -21
- package/src/multistream/remoteMedia.ts +1 -1
- package/src/multistream/remoteMediaGroup.ts +2 -2
- package/src/multistream/remoteMediaManager.ts +150 -37
- package/src/reachability/index.ts +16 -13
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.type.ts +25 -0
- package/src/reconnection-manager/index.ts +18 -9
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +315 -0
- package/src/recording-controller/util.ts +58 -0
- package/src/roap/request.ts +78 -73
- package/src/roap/turnDiscovery.ts +8 -6
- package/src/statsAnalyzer/index.ts +4 -4
- package/src/statsAnalyzer/mqaUtil.ts +6 -0
- package/test/unit/spec/breakouts/breakout.ts +119 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/index.ts +293 -0
- package/test/unit/spec/locus-info/controlsUtils.js +20 -0
- package/test/unit/spec/locus-info/index.js +103 -0
- package/test/unit/spec/locus-info/selfConstant.js +25 -0
- package/test/unit/spec/locus-info/selfUtils.js +84 -0
- package/test/unit/spec/media/index.ts +1 -1
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/effectsState.js +5 -1
- package/test/unit/spec/meeting/index.js +235 -50
- package/test/unit/spec/meeting/request.js +17 -0
- package/test/unit/spec/meeting/utils.js +20 -129
- package/test/unit/spec/meetings/index.js +1 -0
- package/test/unit/spec/member/util.js +26 -1
- package/test/unit/spec/multistream/mediaRequestManager.ts +312 -50
- package/test/unit/spec/multistream/receiveSlot.ts +6 -6
- package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
- package/test/unit/spec/multistream/remoteMedia.ts +2 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +354 -65
- package/test/unit/spec/reachability/index.ts +58 -24
- package/test/unit/spec/reconnection-manager/index.js +42 -13
- package/test/unit/spec/recording-controller/index.js +231 -0
- package/test/unit/spec/recording-controller/util.js +102 -0
- package/test/unit/spec/roap/index.ts +2 -1
- package/test/unit/spec/roap/request.ts +114 -0
- package/test/unit/spec/roap/turnDiscovery.ts +45 -29
- package/test/unit/spec/stats-analyzer/index.js +2 -2
- package/test/utils/webex-test-users.js +1 -0
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -18
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/src/media/internal-media-core-wrapper.ts +0 -9
|
@@ -38,6 +38,7 @@ describe('plugin-meetings', () => {
|
|
|
38
38
|
meeting.reconnectionManager = {cleanUp: sinon.stub()};
|
|
39
39
|
meeting.stopKeepAlive = sinon.stub();
|
|
40
40
|
meeting.updateLLMConnection = sinon.stub();
|
|
41
|
+
meeting.breakouts = {cleanUp: sinon.stub()};
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
afterEach(() => {
|
|
@@ -60,6 +61,7 @@ describe('plugin-meetings', () => {
|
|
|
60
61
|
assert.calledOnce(meeting.reconnectionManager.cleanUp);
|
|
61
62
|
assert.calledOnce(meeting.stopKeepAlive);
|
|
62
63
|
assert.calledOnce(meeting.updateLLMConnection);
|
|
64
|
+
assert.calledOnce(meeting.breakouts.cleanUp);
|
|
63
65
|
});
|
|
64
66
|
});
|
|
65
67
|
|
|
@@ -196,6 +198,23 @@ describe('plugin-meetings', () => {
|
|
|
196
198
|
assert.equal(parameter.preferTranscoding, true);
|
|
197
199
|
});
|
|
198
200
|
|
|
201
|
+
it('#Should call meetingRequest.joinMeeting with breakoutsSupported=true when passed in as true', async () => {
|
|
202
|
+
const meeting = {
|
|
203
|
+
meetingRequest: {joinMeeting: sinon.stub().returns(Promise.resolve({body: {}, headers: {}}))}
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
MeetingUtil.parseLocusJoin = sinon.stub();
|
|
207
|
+
await MeetingUtil.joinMeeting(meeting, {
|
|
208
|
+
breakoutsSupported: true
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
assert.calledOnce(meeting.meetingRequest.joinMeeting);
|
|
212
|
+
const parameter = meeting.meetingRequest.joinMeeting.getCall(0).args[0];
|
|
213
|
+
|
|
214
|
+
assert.equal(parameter.breakoutsSupported, true);
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
|
|
199
218
|
it('#Should call meetingRequest.joinMeeting with preferTranscoding=false when multistream is enabled', async () => {
|
|
200
219
|
const meeting = {
|
|
201
220
|
isMultistream: true,
|
|
@@ -367,34 +386,6 @@ describe('plugin-meetings', () => {
|
|
|
367
386
|
});
|
|
368
387
|
});
|
|
369
388
|
|
|
370
|
-
describe('canUserRecord', () => {
|
|
371
|
-
it('works as expected', () => {
|
|
372
|
-
assert.deepEqual(MeetingUtil.canUserRecord(['RECORDING_CONTROL_START']), true);
|
|
373
|
-
assert.deepEqual(MeetingUtil.canUserRecord([]), false);
|
|
374
|
-
});
|
|
375
|
-
});
|
|
376
|
-
|
|
377
|
-
describe('canUserPause', () => {
|
|
378
|
-
it('works as expected', () => {
|
|
379
|
-
assert.deepEqual(MeetingUtil.canUserPause(['RECORDING_CONTROL_PAUSE']), true);
|
|
380
|
-
assert.deepEqual(MeetingUtil.canUserPause([]), false);
|
|
381
|
-
});
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
describe('canUserResume', () => {
|
|
385
|
-
it('works as expected', () => {
|
|
386
|
-
assert.deepEqual(MeetingUtil.canUserResume(['RECORDING_CONTROL_RESUME']), true);
|
|
387
|
-
assert.deepEqual(MeetingUtil.canUserResume([]), false);
|
|
388
|
-
});
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
describe('canUserStop', () => {
|
|
392
|
-
it('works as expected', () => {
|
|
393
|
-
assert.deepEqual(MeetingUtil.canUserStop(['RECORDING_CONTROL_STOP']), true);
|
|
394
|
-
assert.deepEqual(MeetingUtil.canUserStop([]), false);
|
|
395
|
-
});
|
|
396
|
-
});
|
|
397
|
-
|
|
398
389
|
[
|
|
399
390
|
{functionName: 'canEnableClosedCaption', displayHint: 'CAPTION_START'},
|
|
400
391
|
{functionName: 'canStartTranscribing', displayHint: 'TRANSCRIPTION_CONTROL_START'},
|
|
@@ -414,7 +405,6 @@ describe('plugin-meetings', () => {
|
|
|
414
405
|
});
|
|
415
406
|
});
|
|
416
407
|
|
|
417
|
-
|
|
418
408
|
describe('reactions', () => {
|
|
419
409
|
describe('canEnableReactions', () => {
|
|
420
410
|
[[null, DISPLAY_HINTS.ENABLE_REACTIONS, true], [null, DISPLAY_HINTS.DISABLE_REACTIONS, false], [null, undefined, null]].forEach(() => ([originalValue, displayHint, expected]) => {
|
|
@@ -427,104 +417,5 @@ describe('plugin-meetings', () => {
|
|
|
427
417
|
});
|
|
428
418
|
});
|
|
429
419
|
});
|
|
430
|
-
|
|
431
|
-
describe('recording tests', () => {
|
|
432
|
-
let request;
|
|
433
|
-
let locusInfo;
|
|
434
|
-
const locusUrl = 'locusUrl';
|
|
435
|
-
|
|
436
|
-
beforeEach(() => {
|
|
437
|
-
locusInfo = {
|
|
438
|
-
parsedLocus: {
|
|
439
|
-
info: {
|
|
440
|
-
userDisplayHints: ['RECORDING_CONTROL_START'],
|
|
441
|
-
},
|
|
442
|
-
},
|
|
443
|
-
};
|
|
444
|
-
request = {
|
|
445
|
-
recordMeeting: sinon.stub().returns(Promise.resolve()),
|
|
446
|
-
};
|
|
447
|
-
});
|
|
448
|
-
|
|
449
|
-
describe('startRecording', () => {
|
|
450
|
-
it('can start recording when the correct display hint is present', () => {
|
|
451
|
-
locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_START');
|
|
452
|
-
|
|
453
|
-
const result = MeetingUtil.startRecording(request, locusUrl, locusInfo);
|
|
454
|
-
|
|
455
|
-
assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
|
|
456
|
-
|
|
457
|
-
assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
|
|
458
|
-
});
|
|
459
|
-
|
|
460
|
-
it('rejects when correct display hint is not present', () => {
|
|
461
|
-
const result = MeetingUtil.startRecording(request, locusUrl, {});
|
|
462
|
-
|
|
463
|
-
assert.notCalled(request.recordMeeting);
|
|
464
|
-
|
|
465
|
-
assert.isRejected(result);
|
|
466
|
-
});
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
describe('pauseRecording', () => {
|
|
470
|
-
it('can pause recording when the correct display hint is present', () => {
|
|
471
|
-
locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_PAUSE');
|
|
472
|
-
|
|
473
|
-
const result = MeetingUtil.pauseRecording(request, locusUrl, locusInfo);
|
|
474
|
-
|
|
475
|
-
assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: true});
|
|
476
|
-
|
|
477
|
-
assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
|
|
478
|
-
});
|
|
479
|
-
|
|
480
|
-
it('rejects when correct display hint is not present', () => {
|
|
481
|
-
const result = MeetingUtil.pauseRecording(request, locusUrl, {});
|
|
482
|
-
|
|
483
|
-
assert.notCalled(request.recordMeeting);
|
|
484
|
-
|
|
485
|
-
assert.isRejected(result);
|
|
486
|
-
});
|
|
487
|
-
});
|
|
488
|
-
|
|
489
|
-
describe('resumeRecording', () => {
|
|
490
|
-
it('can resume recording when the correct display hint is present', () => {
|
|
491
|
-
locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_RESUME');
|
|
492
|
-
|
|
493
|
-
const result = MeetingUtil.resumeRecording(request, locusUrl, locusInfo);
|
|
494
|
-
|
|
495
|
-
assert.calledWith(request.recordMeeting, {locusUrl, recording: true, paused: false});
|
|
496
|
-
|
|
497
|
-
assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
it('rejects when correct display hint is not present', () => {
|
|
501
|
-
const result = MeetingUtil.resumeRecording(request, locusUrl, {});
|
|
502
|
-
|
|
503
|
-
assert.notCalled(request.recordMeeting);
|
|
504
|
-
|
|
505
|
-
assert.isRejected(result);
|
|
506
|
-
});
|
|
507
|
-
});
|
|
508
|
-
|
|
509
|
-
describe('stopRecording', () => {
|
|
510
|
-
it('can stop recording when the correct display hint is present', () => {
|
|
511
|
-
locusInfo.parsedLocus.info.userDisplayHints.push('RECORDING_CONTROL_STOP');
|
|
512
|
-
|
|
513
|
-
const result = MeetingUtil.stopRecording(request, locusUrl, locusInfo);
|
|
514
|
-
|
|
515
|
-
assert.calledWith(request.recordMeeting, {locusUrl, recording: false, paused: false});
|
|
516
|
-
|
|
517
|
-
assert.deepEqual(result, request.recordMeeting.firstCall.returnValue);
|
|
518
|
-
});
|
|
519
|
-
|
|
520
|
-
it('rejects when correct display hint is not present', () => {
|
|
521
|
-
const result = MeetingUtil.stopRecording(request, locusUrl, {});
|
|
522
|
-
|
|
523
|
-
assert.notCalled(request.recordMeeting);
|
|
524
|
-
|
|
525
|
-
assert.isRejected(result);
|
|
526
|
-
});
|
|
527
|
-
});
|
|
528
|
-
});
|
|
529
|
-
});
|
|
420
|
+
})
|
|
530
421
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import {assert} from '@webex/test-helper-chai';
|
|
2
|
-
|
|
3
2
|
import MemberUtil from '@webex/plugin-meetings/src/member/util';
|
|
4
3
|
|
|
5
4
|
describe('isHandRaised', () => {
|
|
@@ -47,3 +46,29 @@ describe('isHandRaised', () => {
|
|
|
47
46
|
assert.isFalse(MemberUtil.isHandRaised(participant));
|
|
48
47
|
});
|
|
49
48
|
});
|
|
49
|
+
|
|
50
|
+
describe('plugin-meetings', () => {
|
|
51
|
+
describe('MemberUtil.isBreakoutsSupported', () => {
|
|
52
|
+
it('throws error when there is no participant', () => {
|
|
53
|
+
assert.throws(() => {
|
|
54
|
+
MemberUtil.isBreakoutsSupported();
|
|
55
|
+
}, 'Breakout support could not be processed, participant is undefined.');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('returns true when hand breakouts are supported', () => {
|
|
59
|
+
const participant = {
|
|
60
|
+
doesNotSupportBreakouts: false
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
assert.isTrue(MemberUtil.isBreakoutsSupported(participant));
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('returns false when hand breakouts are not supported', () => {
|
|
67
|
+
const participant = {
|
|
68
|
+
doesNotSupportBreakouts: true
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
assert.isFalse(MemberUtil.isBreakoutsSupported(participant));
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|