@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.
Files changed (146) hide show
  1. package/dist/aiEnableRequest/index.js +184 -0
  2. package/dist/aiEnableRequest/index.js.map +1 -0
  3. package/dist/aiEnableRequest/utils.js +36 -0
  4. package/dist/aiEnableRequest/utils.js.map +1 -0
  5. package/dist/annotation/index.js +3 -3
  6. package/dist/annotation/index.js.map +1 -1
  7. package/dist/breakouts/breakout.js +1 -1
  8. package/dist/breakouts/index.js +1 -1
  9. package/dist/config.js +5 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.js +26 -6
  12. package/dist/constants.js.map +1 -1
  13. package/dist/hashTree/constants.js +3 -1
  14. package/dist/hashTree/constants.js.map +1 -1
  15. package/dist/hashTree/hashTree.js +18 -0
  16. package/dist/hashTree/hashTree.js.map +1 -1
  17. package/dist/hashTree/hashTreeParser.js +709 -380
  18. package/dist/hashTree/hashTreeParser.js.map +1 -1
  19. package/dist/hashTree/types.js +4 -2
  20. package/dist/hashTree/types.js.map +1 -1
  21. package/dist/hashTree/utils.js +10 -0
  22. package/dist/hashTree/utils.js.map +1 -1
  23. package/dist/index.js +11 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/interceptors/constant.js +12 -0
  26. package/dist/interceptors/constant.js.map +1 -0
  27. package/dist/interceptors/dataChannelAuthToken.js +233 -0
  28. package/dist/interceptors/dataChannelAuthToken.js.map +1 -0
  29. package/dist/interceptors/index.js +7 -0
  30. package/dist/interceptors/index.js.map +1 -1
  31. package/dist/interpretation/index.js +2 -2
  32. package/dist/interpretation/index.js.map +1 -1
  33. package/dist/interpretation/siLanguage.js +1 -1
  34. package/dist/locus-info/controlsUtils.js +5 -3
  35. package/dist/locus-info/controlsUtils.js.map +1 -1
  36. package/dist/locus-info/index.js +125 -68
  37. package/dist/locus-info/index.js.map +1 -1
  38. package/dist/locus-info/selfUtils.js +1 -0
  39. package/dist/locus-info/selfUtils.js.map +1 -1
  40. package/dist/locus-info/types.js.map +1 -1
  41. package/dist/media/MediaConnectionAwaiter.js +57 -1
  42. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  43. package/dist/media/properties.js +4 -2
  44. package/dist/media/properties.js.map +1 -1
  45. package/dist/meeting/in-meeting-actions.js +7 -1
  46. package/dist/meeting/in-meeting-actions.js.map +1 -1
  47. package/dist/meeting/index.js +209 -90
  48. package/dist/meeting/index.js.map +1 -1
  49. package/dist/meeting/request.js +50 -0
  50. package/dist/meeting/request.js.map +1 -1
  51. package/dist/meeting/request.type.js.map +1 -1
  52. package/dist/meeting/util.js +128 -2
  53. package/dist/meeting/util.js.map +1 -1
  54. package/dist/meetings/index.js +78 -36
  55. package/dist/meetings/index.js.map +1 -1
  56. package/dist/member/index.js +10 -0
  57. package/dist/member/index.js.map +1 -1
  58. package/dist/member/util.js +10 -0
  59. package/dist/member/util.js.map +1 -1
  60. package/dist/metrics/constants.js +2 -1
  61. package/dist/metrics/constants.js.map +1 -1
  62. package/dist/multistream/mediaRequestManager.js +1 -1
  63. package/dist/multistream/mediaRequestManager.js.map +1 -1
  64. package/dist/multistream/remoteMediaManager.js +11 -0
  65. package/dist/multistream/remoteMediaManager.js.map +1 -1
  66. package/dist/reactions/reactions.type.js.map +1 -1
  67. package/dist/types/aiEnableRequest/index.d.ts +5 -0
  68. package/dist/types/aiEnableRequest/utils.d.ts +2 -0
  69. package/dist/types/config.d.ts +3 -0
  70. package/dist/types/constants.d.ts +21 -1
  71. package/dist/types/hashTree/constants.d.ts +1 -0
  72. package/dist/types/hashTree/hashTree.d.ts +7 -0
  73. package/dist/types/hashTree/hashTreeParser.d.ts +99 -14
  74. package/dist/types/hashTree/types.d.ts +3 -0
  75. package/dist/types/hashTree/utils.d.ts +6 -0
  76. package/dist/types/index.d.ts +1 -0
  77. package/dist/types/interceptors/constant.d.ts +5 -0
  78. package/dist/types/interceptors/dataChannelAuthToken.d.ts +35 -0
  79. package/dist/types/interceptors/index.d.ts +2 -1
  80. package/dist/types/locus-info/index.d.ts +9 -2
  81. package/dist/types/locus-info/types.d.ts +1 -0
  82. package/dist/types/media/MediaConnectionAwaiter.d.ts +10 -1
  83. package/dist/types/media/properties.d.ts +2 -1
  84. package/dist/types/meeting/in-meeting-actions.d.ts +6 -0
  85. package/dist/types/meeting/index.d.ts +24 -2
  86. package/dist/types/meeting/request.d.ts +16 -1
  87. package/dist/types/meeting/request.type.d.ts +5 -0
  88. package/dist/types/meeting/util.d.ts +31 -0
  89. package/dist/types/meetings/index.d.ts +4 -2
  90. package/dist/types/member/index.d.ts +1 -0
  91. package/dist/types/member/util.d.ts +5 -0
  92. package/dist/types/metrics/constants.d.ts +1 -0
  93. package/dist/types/reactions/reactions.type.d.ts +1 -0
  94. package/dist/webinar/index.js +1 -1
  95. package/package.json +22 -22
  96. package/src/aiEnableRequest/README.md +84 -0
  97. package/src/aiEnableRequest/index.ts +170 -0
  98. package/src/aiEnableRequest/utils.ts +25 -0
  99. package/src/annotation/index.ts +7 -4
  100. package/src/config.ts +3 -0
  101. package/src/constants.ts +26 -1
  102. package/src/hashTree/constants.ts +1 -0
  103. package/src/hashTree/hashTree.ts +17 -0
  104. package/src/hashTree/hashTreeParser.ts +627 -249
  105. package/src/hashTree/types.ts +4 -0
  106. package/src/hashTree/utils.ts +9 -0
  107. package/src/index.ts +8 -1
  108. package/src/interceptors/constant.ts +6 -0
  109. package/src/interceptors/dataChannelAuthToken.ts +142 -0
  110. package/src/interceptors/index.ts +2 -1
  111. package/src/interpretation/index.ts +2 -2
  112. package/src/locus-info/controlsUtils.ts +11 -0
  113. package/src/locus-info/index.ts +146 -58
  114. package/src/locus-info/selfUtils.ts +1 -0
  115. package/src/locus-info/types.ts +1 -0
  116. package/src/media/MediaConnectionAwaiter.ts +41 -1
  117. package/src/media/properties.ts +3 -1
  118. package/src/meeting/in-meeting-actions.ts +12 -0
  119. package/src/meeting/index.ts +127 -17
  120. package/src/meeting/request.ts +42 -0
  121. package/src/meeting/request.type.ts +6 -0
  122. package/src/meeting/util.ts +156 -1
  123. package/src/meetings/index.ts +94 -9
  124. package/src/member/index.ts +10 -0
  125. package/src/member/util.ts +12 -0
  126. package/src/metrics/constants.ts +1 -0
  127. package/src/multistream/mediaRequestManager.ts +1 -1
  128. package/src/multistream/remoteMediaManager.ts +13 -0
  129. package/src/reactions/reactions.type.ts +1 -0
  130. package/test/unit/spec/aiEnableRequest/index.ts +981 -0
  131. package/test/unit/spec/aiEnableRequest/utils.ts +130 -0
  132. package/test/unit/spec/hashTree/hashTree.ts +66 -0
  133. package/test/unit/spec/hashTree/hashTreeParser.ts +1869 -189
  134. package/test/unit/spec/interceptors/dataChannelAuthToken.ts +141 -0
  135. package/test/unit/spec/locus-info/controlsUtils.js +29 -0
  136. package/test/unit/spec/locus-info/index.js +201 -45
  137. package/test/unit/spec/media/MediaConnectionAwaiter.ts +41 -1
  138. package/test/unit/spec/media/properties.ts +12 -3
  139. package/test/unit/spec/meeting/in-meeting-actions.ts +8 -2
  140. package/test/unit/spec/meeting/index.js +441 -75
  141. package/test/unit/spec/meeting/request.js +64 -0
  142. package/test/unit/spec/meeting/utils.js +433 -22
  143. package/test/unit/spec/meetings/index.js +550 -10
  144. package/test/unit/spec/member/index.js +28 -4
  145. package/test/unit/spec/member/util.js +65 -27
  146. 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
- it('throws an error when there is no participant', () => {
422
- assert.throws(() => {
423
- MemberUtil.isSupportsSingleUserAutoEndMeeting();
424
- }, 'Single user auto end meeting support could not be processed, participant is undefined.');
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
- it('returns true when single user auto end meeting is supported', () => {
428
- const participant = {
429
- supportsSingleUserAutoEndMeeting: {},
430
- };
431
- assert.isTrue(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
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
- it('returns false when single user auto end meeting is not supported', () => {
435
- const participant = {
436
- doesNotSupportSingleUserAutoEndMeeting: {},
437
- };
473
+ it('returns false when single user auto end meeting is not supported', () => {
474
+ const participant = {
475
+ doesNotSupportSingleUserAutoEndMeeting: {},
476
+ };
438
477
 
439
- assert.isFalse(MemberUtil.isSupportsSingleUserAutoEndMeeting(participant));
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);