@webex/plugin-meetings 3.11.0-next.4 → 3.11.0-next.41
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/aiEnableRequest/index.js +184 -0
- package/dist/aiEnableRequest/index.js.map +1 -0
- package/dist/aiEnableRequest/utils.js +36 -0
- package/dist/aiEnableRequest/utils.js.map +1 -0
- package/dist/annotation/index.js +3 -3
- package/dist/annotation/index.js.map +1 -1
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +26 -6
- package/dist/constants.js.map +1 -1
- package/dist/hashTree/constants.js +3 -1
- package/dist/hashTree/constants.js.map +1 -1
- package/dist/hashTree/hashTree.js +18 -0
- package/dist/hashTree/hashTree.js.map +1 -1
- package/dist/hashTree/hashTreeParser.js +709 -380
- package/dist/hashTree/hashTreeParser.js.map +1 -1
- package/dist/hashTree/types.js +4 -2
- package/dist/hashTree/types.js.map +1 -1
- package/dist/hashTree/utils.js +10 -0
- package/dist/hashTree/utils.js.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/constant.js +12 -0
- package/dist/interceptors/constant.js.map +1 -0
- package/dist/interceptors/dataChannelAuthToken.js +233 -0
- package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
- package/dist/interceptors/index.js +7 -0
- package/dist/interceptors/index.js.map +1 -1
- package/dist/interpretation/index.js +2 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +5 -3
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +125 -68
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +1 -0
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/locus-info/types.js.map +1 -1
- package/dist/media/MediaConnectionAwaiter.js +57 -1
- package/dist/media/MediaConnectionAwaiter.js.map +1 -1
- package/dist/media/properties.js +4 -2
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +7 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +209 -90
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.js +50 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +128 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +78 -36
- package/dist/meetings/index.js.map +1 -1
- package/dist/member/index.js +10 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +10 -0
- package/dist/member/util.js.map +1 -1
- package/dist/metrics/constants.js +2 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +11 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/types/aiEnableRequest/index.d.ts +5 -0
- package/dist/types/aiEnableRequest/utils.d.ts +2 -0
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +21 -1
- package/dist/types/hashTree/constants.d.ts +1 -0
- package/dist/types/hashTree/hashTree.d.ts +7 -0
- package/dist/types/hashTree/hashTreeParser.d.ts +99 -14
- package/dist/types/hashTree/types.d.ts +3 -0
- package/dist/types/hashTree/utils.d.ts +6 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interceptors/constant.d.ts +5 -0
- package/dist/types/interceptors/dataChannelAuthToken.d.ts +35 -0
- package/dist/types/interceptors/index.d.ts +2 -1
- package/dist/types/locus-info/index.d.ts +9 -2
- package/dist/types/locus-info/types.d.ts +1 -0
- package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
- package/dist/types/media/properties.d.ts +2 -1
- package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
- package/dist/types/meeting/index.d.ts +24 -2
- package/dist/types/meeting/request.d.ts +16 -1
- package/dist/types/meeting/request.type.d.ts +5 -0
- package/dist/types/meeting/util.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +4 -2
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/member/util.d.ts +5 -0
- package/dist/types/metrics/constants.d.ts +1 -0
- package/dist/types/reactions/reactions.type.d.ts +1 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/aiEnableRequest/README.md +84 -0
- package/src/aiEnableRequest/index.ts +170 -0
- package/src/aiEnableRequest/utils.ts +25 -0
- package/src/annotation/index.ts +7 -4
- package/src/config.ts +3 -0
- package/src/constants.ts +26 -1
- package/src/hashTree/constants.ts +1 -0
- package/src/hashTree/hashTree.ts +17 -0
- package/src/hashTree/hashTreeParser.ts +627 -249
- package/src/hashTree/types.ts +4 -0
- package/src/hashTree/utils.ts +9 -0
- package/src/index.ts +8 -1
- package/src/interceptors/constant.ts +6 -0
- package/src/interceptors/dataChannelAuthToken.ts +142 -0
- package/src/interceptors/index.ts +2 -1
- package/src/interpretation/index.ts +2 -2
- package/src/locus-info/controlsUtils.ts +11 -0
- package/src/locus-info/index.ts +146 -58
- package/src/locus-info/selfUtils.ts +1 -0
- package/src/locus-info/types.ts +1 -0
- package/src/media/MediaConnectionAwaiter.ts +41 -1
- package/src/media/properties.ts +3 -1
- package/src/meeting/in-meeting-actions.ts +12 -0
- package/src/meeting/index.ts +127 -17
- package/src/meeting/request.ts +42 -0
- package/src/meeting/request.type.ts +6 -0
- package/src/meeting/util.ts +156 -1
- package/src/meetings/index.ts +94 -9
- package/src/member/index.ts +10 -0
- package/src/member/util.ts +12 -0
- package/src/metrics/constants.ts +1 -0
- package/src/multistream/mediaRequestManager.ts +1 -1
- package/src/multistream/remoteMediaManager.ts +13 -0
- package/src/reactions/reactions.type.ts +1 -0
- package/test/unit/spec/aiEnableRequest/index.ts +981 -0
- package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
- package/test/unit/spec/hashTree/hashTree.ts +66 -0
- package/test/unit/spec/hashTree/hashTreeParser.ts +1869 -189
- package/test/unit/spec/interceptors/dataChannelAuthToken.ts +141 -0
- package/test/unit/spec/locus-info/controlsUtils.js +29 -0
- package/test/unit/spec/locus-info/index.js +201 -45
- package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
- package/test/unit/spec/media/properties.ts +12 -3
- package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
- package/test/unit/spec/meeting/index.js +441 -75
- package/test/unit/spec/meeting/request.js +64 -0
- package/test/unit/spec/meeting/utils.js +433 -22
- package/test/unit/spec/meetings/index.js +550 -10
- package/test/unit/spec/member/index.js +28 -4
- package/test/unit/spec/member/util.js +65 -27
- package/test/unit/spec/multistream/remoteMediaManager.ts +30 -0
|
@@ -82,6 +82,46 @@ describe('plugin-meetings', () => {
|
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
|
|
85
|
+
describe('MemberUtil.canApproveAIEnablement', () => {
|
|
86
|
+
it('returns false when there is no participant', () => {
|
|
87
|
+
assert.isFalse(MemberUtil.canApproveAIEnablement());
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('returns false when there is null participant', () => {
|
|
91
|
+
assert.isFalse(MemberUtil.canApproveAIEnablement(null));
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('returns true when attendeeRequestAiAssistantNotAllowed is false', () => {
|
|
95
|
+
const participant = {
|
|
96
|
+
attendeeRequestAiAssistantNotAllowed: false,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
assert.isTrue(MemberUtil.canApproveAIEnablement(participant));
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('returns false when attendeeRequestAiAssistantNotAllowed is true', () => {
|
|
103
|
+
const participant = {
|
|
104
|
+
attendeeRequestAiAssistantNotAllowed: true,
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
assert.isFalse(MemberUtil.canApproveAIEnablement(participant));
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('returns true when attendeeRequestAiAssistantNotAllowed is undefined', () => {
|
|
111
|
+
const participant = {
|
|
112
|
+
attendeeRequestAiAssistantNotAllowed: undefined,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
assert.isTrue(MemberUtil.canApproveAIEnablement(participant));
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('returns true when attendeeRequestAiAssistantNotAllowed is not present', () => {
|
|
119
|
+
const participant = {};
|
|
120
|
+
|
|
121
|
+
assert.isTrue(MemberUtil.canApproveAIEnablement(participant));
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
85
125
|
describe('MemberUtil.extractControlRoles', () => {
|
|
86
126
|
it('happy path extract control roles', () => {
|
|
87
127
|
const participant = {
|
|
@@ -377,7 +417,6 @@ describe('plugin-meetings', () => {
|
|
|
377
417
|
assert.isFalse(MemberUtil.isBrb(participant));
|
|
378
418
|
});
|
|
379
419
|
|
|
380
|
-
|
|
381
420
|
it('returns false when brb is not present', () => {
|
|
382
421
|
const participant = {
|
|
383
422
|
controls: {},
|
|
@@ -417,29 +456,28 @@ describe('plugin-meetings', () => {
|
|
|
417
456
|
});
|
|
418
457
|
});
|
|
419
458
|
|
|
420
|
-
describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
459
|
+
describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
|
|
460
|
+
it('throws an error when there is no participant', () => {
|
|
461
|
+
assert.throws(() => {
|
|
462
|
+
MemberUtil.isSupportsSingleUserAutoEndMeeting();
|
|
463
|
+
}, 'Single user auto end meeting support could not be processed, participant is undefined.');
|
|
464
|
+
});
|
|
426
465
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
466
|
+
it('returns true when single user auto end meeting is supported', () => {
|
|
467
|
+
const participant = {
|
|
468
|
+
supportsSingleUserAutoEndMeeting: {},
|
|
469
|
+
};
|
|
470
|
+
assert.isTrue(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
|
|
471
|
+
});
|
|
433
472
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
473
|
+
it('returns false when single user auto end meeting is not supported', () => {
|
|
474
|
+
const participant = {
|
|
475
|
+
doesNotSupportSingleUserAutoEndMeeting: {},
|
|
476
|
+
};
|
|
438
477
|
|
|
439
|
-
|
|
478
|
+
assert.isFalse(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
|
|
479
|
+
});
|
|
440
480
|
});
|
|
441
|
-
});
|
|
442
|
-
|
|
443
481
|
|
|
444
482
|
describe('MemberUtil.isLiveAnnotationSupported', () => {
|
|
445
483
|
it('throws an error when there is no participant', () => {
|
|
@@ -585,7 +623,7 @@ describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
|
|
|
585
623
|
describe('MemberUtil.isPresenterAssignmentProhibited', () => {
|
|
586
624
|
it('returns true when isPresenterAssignmentProhibited is true', () => {
|
|
587
625
|
const participant = {
|
|
588
|
-
presenterAssignmentNotAllowed: true
|
|
626
|
+
presenterAssignmentNotAllowed: true,
|
|
589
627
|
};
|
|
590
628
|
|
|
591
629
|
assert.isTrue(MemberUtil.isPresenterAssignmentProhibited(participant));
|
|
@@ -610,16 +648,16 @@ describe('MemberUtil.isSupportsSingleUserAutoEndMeeting', () => {
|
|
|
610
648
|
describe('extractMediaStatus', () => {
|
|
611
649
|
it('throws an error when there is no participant', () => {
|
|
612
650
|
assert.throws(() => {
|
|
613
|
-
MemberUtil.extractMediaStatus()
|
|
651
|
+
MemberUtil.extractMediaStatus();
|
|
614
652
|
}, 'Media status could not be extracted, participant is undefined.');
|
|
615
653
|
});
|
|
616
654
|
|
|
617
655
|
it('returns undefined media status when participant audio/video status is not present', () => {
|
|
618
656
|
const participant = {
|
|
619
|
-
status: {}
|
|
657
|
+
status: {},
|
|
620
658
|
};
|
|
621
659
|
|
|
622
|
-
const mediaStatus = MemberUtil.extractMediaStatus(participant)
|
|
660
|
+
const mediaStatus = MemberUtil.extractMediaStatus(participant);
|
|
623
661
|
|
|
624
662
|
assert.deepEqual(mediaStatus, {audio: undefined, video: undefined});
|
|
625
663
|
});
|
|
@@ -628,11 +666,11 @@ describe('extractMediaStatus', () => {
|
|
|
628
666
|
const participant = {
|
|
629
667
|
status: {
|
|
630
668
|
audioStatus: 'RECVONLY',
|
|
631
|
-
videoStatus: 'SENDRECV'
|
|
632
|
-
}
|
|
669
|
+
videoStatus: 'SENDRECV',
|
|
670
|
+
},
|
|
633
671
|
};
|
|
634
672
|
|
|
635
|
-
const mediaStatus = MemberUtil.extractMediaStatus(participant)
|
|
673
|
+
const mediaStatus = MemberUtil.extractMediaStatus(participant);
|
|
636
674
|
|
|
637
675
|
assert.deepEqual(mediaStatus, {audio: 'RECVONLY', video: 'SENDRECV'});
|
|
638
676
|
});
|
|
@@ -965,6 +965,36 @@ describe('RemoteMediaManager', () => {
|
|
|
965
965
|
);
|
|
966
966
|
});
|
|
967
967
|
|
|
968
|
+
it('allocates 25 video slots for AllEqual25 layout', async () => {
|
|
969
|
+
const config = cloneDeep(DefaultTestConfiguration);
|
|
970
|
+
config.video.layouts['AllEqual25'] = {
|
|
971
|
+
activeSpeakerVideoPaneGroups: [
|
|
972
|
+
{id: 'main', numPanes: 25, size: 'best', priority: 255},
|
|
973
|
+
],
|
|
974
|
+
};
|
|
975
|
+
config.video.initialLayoutId = 'AllEqual25';
|
|
976
|
+
|
|
977
|
+
let slotCount = 0;
|
|
978
|
+
fakeReceiveSlotManager.allocateSlot.callsFake((mediaType: MediaType) => {
|
|
979
|
+
if (mediaType === MediaType.VideoMain) {
|
|
980
|
+
slotCount += 1;
|
|
981
|
+
return Promise.resolve(new FakeSlot(mediaType, `fake video ${slotCount}`));
|
|
982
|
+
}
|
|
983
|
+
return Promise.resolve(fakeAudioSlot);
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
remoteMediaManager = new RemoteMediaManager(
|
|
987
|
+
fakeReceiveSlotManager,
|
|
988
|
+
fakeMediaRequestManagers,
|
|
989
|
+
config
|
|
990
|
+
);
|
|
991
|
+
|
|
992
|
+
await remoteMediaManager.start();
|
|
993
|
+
|
|
994
|
+
assert.strictEqual(remoteMediaManager.getLayoutId(), 'AllEqual25');
|
|
995
|
+
assert.strictEqual(remoteMediaManager.slots.video.activeSpeaker.length, 25);
|
|
996
|
+
});
|
|
997
|
+
|
|
968
998
|
it('releases slots when switching to layout that requires less active speaker slots', async () => {
|
|
969
999
|
// start with "AllEqual" layout that needs just 9 video slots
|
|
970
1000
|
const config = cloneDeep(DefaultTestConfiguration);
|