@webex/plugin-meetings 3.8.0-next.5 → 3.8.0-next.7

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.
@@ -93,13 +93,14 @@ import CaptchaError from '../../../../src/common/errors/captcha-error';
93
93
  import PermissionError from '../../../../src/common/errors/permission';
94
94
  import JoinWebinarError from '../../../../src/common/errors/join-webinar-error';
95
95
  import IntentToJoinError from '../../../../src/common/errors/intent-to-join';
96
- import MultistreamNotSupportedError from '../../../../src/common/errors/multistream-not-supported-error';;
96
+ import MultistreamNotSupportedError from '../../../../src/common/errors/multistream-not-supported-error';
97
97
  import testUtils from '../../../utils/testUtils';
98
98
  import {
99
99
  MeetingInfoV2CaptchaError,
100
100
  MeetingInfoV2PasswordError,
101
101
  MeetingInfoV2PolicyError,
102
- MeetingInfoV2JoinWebinarError, MeetingInfoV2JoinForbiddenError,
102
+ MeetingInfoV2JoinWebinarError,
103
+ MeetingInfoV2JoinForbiddenError,
103
104
  } from '../../../../src/meeting-info/meeting-info-v2';
104
105
  import {
105
106
  DTLS_HANDSHAKE_FAILED_CLIENT_CODE,
@@ -115,7 +116,8 @@ import MeetingCollection from '@webex/plugin-meetings/src/meetings/collection';
115
116
 
116
117
  import {EVENT_TRIGGERS as VOICEAEVENTS} from '@webex/internal-plugin-voicea';
117
118
  import { createBrbState } from '@webex/plugin-meetings/src/meeting/brbState';
118
- import JoinForbiddenError from '../../../../src/common/errors/join-forbidden-error';
119
+ import JoinForbiddenError from '../../../../src/common/errors/join-forbidden-error';
120
+ import { EventEmitter } from 'stream';
119
121
 
120
122
  describe('plugin-meetings', () => {
121
123
  const logger = {
@@ -208,6 +210,7 @@ describe('plugin-meetings', () => {
208
210
  let membersSpy;
209
211
  let meetingRequestSpy;
210
212
  let correlationId;
213
+ let uploadEvent;
211
214
 
212
215
  beforeEach(() => {
213
216
  webex = new MockWebex({
@@ -277,6 +280,8 @@ describe('plugin-meetings', () => {
277
280
  test4 = `test4-${uuid.v4()}`;
278
281
  testDestination = `testDestination-${uuid.v4()}`;
279
282
  correlationId = uuid.v4();
283
+ uploadEvent = new EventEmitter();
284
+ uploadEvent.addListener('progress', () => {})
280
285
 
281
286
  meeting = new Meeting(
282
287
  {
@@ -667,7 +672,7 @@ describe('plugin-meetings', () => {
667
672
  beforeEach(() => {
668
673
  meeting.join = sinon.stub().callsFake((joinOptions) => {
669
674
  meeting.isMultistream = joinOptions.enableMultistream;
670
- return Promise.resolve(fakeJoinResult)
675
+ return Promise.resolve(fakeJoinResult);
671
676
  });
672
677
  addMediaInternalStub = sinon
673
678
  .stub(meeting, 'addMediaInternal')
@@ -1070,7 +1075,11 @@ describe('plugin-meetings', () => {
1070
1075
  mediaOptions,
1071
1076
  });
1072
1077
 
1073
- assert.deepEqual(result, {join: fakeJoinResult, media: undefined, multistreamEnabled: false});
1078
+ assert.deepEqual(result, {
1079
+ join: fakeJoinResult,
1080
+ media: undefined,
1081
+ multistreamEnabled: false,
1082
+ });
1074
1083
 
1075
1084
  assert.calledOnce(meeting.join);
1076
1085
 
@@ -1174,7 +1183,10 @@ describe('plugin-meetings', () => {
1174
1183
  type: addMediaError.name,
1175
1184
  }
1176
1185
  );
1177
- assert.calledOnceWithExactly(meeting.leave, {resourceId: undefined, reason: 'joinWithMedia failure'})
1186
+ assert.calledOnceWithExactly(meeting.leave, {
1187
+ resourceId: undefined,
1188
+ reason: 'joinWithMedia failure',
1189
+ });
1178
1190
  });
1179
1191
  });
1180
1192
 
@@ -3550,18 +3562,18 @@ describe('plugin-meetings', () => {
3550
3562
  it('counts the number of members that are in the meeting for MEDIA_QUALITY event', async () => {
3551
3563
  let fakeMembersCollection = {
3552
3564
  members: {
3553
- member1: { isInMeeting: true },
3554
- member2: { isInMeeting: true },
3555
- member3: { isInMeeting: false },
3565
+ member1: {isInMeeting: true},
3566
+ member2: {isInMeeting: true},
3567
+ member3: {isInMeeting: false},
3556
3568
  },
3557
3569
  };
3558
- sinon.stub(meeting, 'getMembers').returns({ membersCollection: fakeMembersCollection });
3559
- const fakeData = { intervalMetadata: {}, networkType: 'wifi' };
3570
+ sinon.stub(meeting, 'getMembers').returns({membersCollection: fakeMembersCollection});
3571
+ const fakeData = {intervalMetadata: {}, networkType: 'wifi'};
3560
3572
 
3561
3573
  statsAnalyzerStub.emit(
3562
- { file: 'test', function: 'test' },
3574
+ {file: 'test', function: 'test'},
3563
3575
  StatsAnalyzerEventNames.MEDIA_QUALITY,
3564
- { data: fakeData }
3576
+ {data: fakeData}
3565
3577
  );
3566
3578
 
3567
3579
  assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
@@ -3570,15 +3582,17 @@ describe('plugin-meetings', () => {
3570
3582
  meetingId: meeting.id,
3571
3583
  },
3572
3584
  payload: {
3573
- intervals: [sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 2))],
3585
+ intervals: [
3586
+ sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 2)),
3587
+ ],
3574
3588
  },
3575
3589
  });
3576
3590
  fakeMembersCollection.members.member2.isInMeeting = false;
3577
3591
 
3578
3592
  statsAnalyzerStub.emit(
3579
- { file: 'test', function: 'test' },
3593
+ {file: 'test', function: 'test'},
3580
3594
  StatsAnalyzerEventNames.MEDIA_QUALITY,
3581
- { data: fakeData }
3595
+ {data: fakeData}
3582
3596
  );
3583
3597
 
3584
3598
  assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
@@ -3587,7 +3601,9 @@ describe('plugin-meetings', () => {
3587
3601
  meetingId: meeting.id,
3588
3602
  },
3589
3603
  payload: {
3590
- intervals: [sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 1))],
3604
+ intervals: [
3605
+ sinon.match.has('intervalMetadata', sinon.match.has('meetingUserCount', 1)),
3606
+ ],
3591
3607
  },
3592
3608
  });
3593
3609
  });
@@ -3842,7 +3858,6 @@ describe('plugin-meetings', () => {
3842
3858
  });
3843
3859
 
3844
3860
  describe('when in a multistream meeting', () => {
3845
-
3846
3861
  beforeEach(() => {
3847
3862
  meeting.isMultistream = true;
3848
3863
  });
@@ -3853,7 +3868,7 @@ describe('plugin-meetings', () => {
3853
3868
  await brbResult;
3854
3869
  assert.exists(brbResult.then);
3855
3870
  assert.calledOnce(meeting.brbState.enable);
3856
- })
3871
+ });
3857
3872
 
3858
3873
  it('should disable #beRightBack and return a promise', async () => {
3859
3874
  const brbResult = meeting.beRightBack(false);
@@ -3861,7 +3876,7 @@ describe('plugin-meetings', () => {
3861
3876
  await brbResult;
3862
3877
  assert.exists(brbResult.then);
3863
3878
  assert.calledOnce(meeting.brbState.enable);
3864
- })
3879
+ });
3865
3880
 
3866
3881
  it('should throw an error and reject the promise if setBrb fails', async () => {
3867
3882
  const error = new Error('setBrb failed');
@@ -3874,7 +3889,7 @@ describe('plugin-meetings', () => {
3874
3889
  assert.equal(err.message, 'setBrb failed');
3875
3890
  assert.isRejected((Promise.reject()));
3876
3891
  }
3877
- })
3892
+ });
3878
3893
  });
3879
3894
  });
3880
3895
 
@@ -4006,7 +4021,7 @@ describe('plugin-meetings', () => {
4006
4021
  initiateOffer: sinon.stub().resolves({}),
4007
4022
  update: sinon.stub().resolves({}),
4008
4023
  on: sinon.stub(),
4009
- roapMessageReceived: sinon.stub()
4024
+ roapMessageReceived: sinon.stub(),
4010
4025
  };
4011
4026
 
4012
4027
  fakeMultistreamRoapMediaConnection = {
@@ -4035,7 +4050,7 @@ describe('plugin-meetings', () => {
4035
4050
 
4036
4051
  locusMediaRequestStub = sinon
4037
4052
  .stub(WebexPlugin.prototype, 'request')
4038
- .resolves({body: {locus: {fullState: {}}}});
4053
+ .resolves({body: {locus: {fullState: {}}}, upload: sinon.match.instanceOf(EventEmitter), download: sinon.match.instanceOf(EventEmitter)});
4039
4054
 
4040
4055
  // setup some things and mocks so that the call to join() works
4041
4056
  // (we need to call join() because it creates the LocusMediaRequest instance
@@ -4144,6 +4159,8 @@ describe('plugin-meetings', () => {
4144
4159
  id: 'fake clientMediaPreferences',
4145
4160
  },
4146
4161
  },
4162
+ upload: sinon.match.instanceOf(EventEmitter),
4163
+ download: sinon.match.instanceOf(EventEmitter),
4147
4164
  });
4148
4165
  };
4149
4166
 
@@ -4171,6 +4188,8 @@ describe('plugin-meetings', () => {
4171
4188
  },
4172
4189
  ],
4173
4190
  },
4191
+ upload: sinon.match.instanceOf(EventEmitter),
4192
+ download: sinon.match.instanceOf(EventEmitter),
4174
4193
  });
4175
4194
  };
4176
4195
 
@@ -4195,6 +4214,8 @@ describe('plugin-meetings', () => {
4195
4214
  respOnlySdp: true,
4196
4215
  usingResource: null,
4197
4216
  },
4217
+ upload: sinon.match.instanceOf(EventEmitter),
4218
+ download: sinon.match.instanceOf(EventEmitter),
4198
4219
  });
4199
4220
  };
4200
4221
 
@@ -6337,7 +6358,10 @@ describe('plugin-meetings', () => {
6337
6358
  .throws(new MeetingInfoV2JoinForbiddenError(403003, FAKE_MEETING_INFO)),
6338
6359
  };
6339
6360
 
6340
- await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), JoinForbiddenError);
6361
+ await assert.isRejected(
6362
+ meeting.fetchMeetingInfo({sendCAevents: true}),
6363
+ JoinForbiddenError
6364
+ );
6341
6365
 
6342
6366
  assert.calledWith(
6343
6367
  meeting.attrs.meetingInfoProvider.fetchMeetingInfo,
@@ -6353,10 +6377,7 @@ describe('plugin-meetings', () => {
6353
6377
 
6354
6378
  assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
6355
6379
  assert.equal(meeting.meetingInfoFailureCode, 403003);
6356
- assert.equal(
6357
- meeting.meetingInfoFailureReason,
6358
- MEETING_INFO_FAILURE_REASON.NOT_REACH_JBH
6359
- );
6380
+ assert.equal(meeting.meetingInfoFailureReason, MEETING_INFO_FAILURE_REASON.NOT_REACH_JBH);
6360
6381
  assert.equal(meeting.requiredCaptcha, null);
6361
6382
  });
6362
6383
 
@@ -6733,15 +6754,10 @@ describe('plugin-meetings', () => {
6733
6754
  meeting.attrs.meetingInfoProvider = {
6734
6755
  fetchMeetingInfo: sinon
6735
6756
  .stub()
6736
- .throws(
6737
- new MeetingInfoV2JoinWebinarError(403021, FAKE_MEETING_INFO, 'a message')
6738
- ),
6757
+ .throws(new MeetingInfoV2JoinWebinarError(403021, FAKE_MEETING_INFO, 'a message')),
6739
6758
  };
6740
6759
 
6741
- await assert.isRejected(
6742
- meeting.fetchMeetingInfo({sendCAevents: true}),
6743
- JoinWebinarError
6744
- );
6760
+ await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), JoinWebinarError);
6745
6761
 
6746
6762
  assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
6747
6763
  assert.equal(
@@ -6756,15 +6772,10 @@ describe('plugin-meetings', () => {
6756
6772
  meeting.attrs.meetingInfoProvider = {
6757
6773
  fetchMeetingInfo: sinon
6758
6774
  .stub()
6759
- .throws(
6760
- new MeetingInfoV2JoinWebinarError(403026, FAKE_MEETING_INFO, 'a message')
6761
- ),
6775
+ .throws(new MeetingInfoV2JoinWebinarError(403026, FAKE_MEETING_INFO, 'a message')),
6762
6776
  };
6763
6777
 
6764
- await assert.isRejected(
6765
- meeting.fetchMeetingInfo({sendCAevents: true}),
6766
- JoinWebinarError
6767
- );
6778
+ await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), JoinWebinarError);
6768
6779
 
6769
6780
  assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
6770
6781
  assert.equal(
@@ -6779,15 +6790,10 @@ describe('plugin-meetings', () => {
6779
6790
  meeting.attrs.meetingInfoProvider = {
6780
6791
  fetchMeetingInfo: sinon
6781
6792
  .stub()
6782
- .throws(
6783
- new MeetingInfoV2JoinWebinarError(403037, FAKE_MEETING_INFO, 'a message')
6784
- ),
6793
+ .throws(new MeetingInfoV2JoinWebinarError(403037, FAKE_MEETING_INFO, 'a message')),
6785
6794
  };
6786
6795
 
6787
- await assert.isRejected(
6788
- meeting.fetchMeetingInfo({sendCAevents: true}),
6789
- JoinWebinarError
6790
- );
6796
+ await assert.isRejected(meeting.fetchMeetingInfo({sendCAevents: true}), JoinWebinarError);
6791
6797
 
6792
6798
  assert.deepEqual(meeting.meetingInfo, FAKE_MEETING_INFO);
6793
6799
  assert.equal(
@@ -9223,22 +9229,22 @@ describe('plugin-meetings', () => {
9223
9229
  const assertBrb = (enabled) => {
9224
9230
  meeting.brbState = createBrbState(meeting, false);
9225
9231
  meeting.locusInfo.emit(
9226
- { function: 'test', file: 'test' },
9232
+ {function: 'test', file: 'test'},
9227
9233
  LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,
9228
- { brb: { enabled } },
9229
- )
9234
+ {brb: {enabled}}
9235
+ );
9230
9236
  assert.calledWithExactly(
9231
9237
  TriggerProxy.trigger,
9232
9238
  meeting,
9233
9239
  {file: 'meeting/index', function: 'setUpLocusInfoSelfListener'},
9234
9240
  EVENT_TRIGGERS.MEETING_SELF_BRB_UPDATE,
9235
- { payload: { brb: { enabled } } },
9241
+ {payload: {brb: {enabled}}}
9236
9242
  );
9237
- }
9243
+ };
9238
9244
 
9239
9245
  assertBrb(true);
9240
9246
  assertBrb(false);
9241
- })
9247
+ });
9242
9248
 
9243
9249
  it('listens to the interpretation changed event', () => {
9244
9250
  meeting.simultaneousInterpretation.updateSelfInterpretation = sinon.stub();
@@ -9922,6 +9928,22 @@ describe('plugin-meetings', () => {
9922
9928
  });
9923
9929
  });
9924
9930
 
9931
+ describe('#emailInput', () => {
9932
+ it('should set the email input', () => {
9933
+ assert.notOk(meeting.emailInput);
9934
+ meeting.emailInput = 'current';
9935
+ assert.equal(meeting.emailInput, 'current');
9936
+ });
9937
+ });
9938
+
9939
+ describe('#userNameInput', () => {
9940
+ it('should set the user name input', () => {
9941
+ assert.notOk(meeting.userNameInput);
9942
+ meeting.userNameInput = 'current';
9943
+ assert.equal(meeting.userNameInput, 'current');
9944
+ });
9945
+ });
9946
+
9925
9947
  describe('#setPermissionTokenPayload', () => {
9926
9948
  let now;
9927
9949
  let clock;
@@ -11326,18 +11348,21 @@ describe('plugin-meetings', () => {
11326
11348
  );
11327
11349
  });
11328
11350
 
11329
-
11330
11351
  it('connect ps data channel if ps started in webinar', async () => {
11331
11352
  meeting.joinedWith = {state: 'JOINED'};
11332
- meeting.locusInfo = {url: 'a url', info: {datachannelUrl: 'a datachannel url', practiceSessionDatachannelUrl: 'a ps datachannel url'}};
11353
+ meeting.locusInfo = {
11354
+ url: 'a url',
11355
+ info: {
11356
+ datachannelUrl: 'a datachannel url',
11357
+ practiceSessionDatachannelUrl: 'a ps datachannel url',
11358
+ },
11359
+ };
11333
11360
  meeting.webinar.isJoinPracticeSessionDataChannel = sinon.stub().returns(true);
11334
11361
  await meeting.updateLLMConnection();
11335
11362
 
11336
11363
  assert.notCalled(webex.internal.llm.disconnectLLM);
11337
11364
  assert.calledWith(webex.internal.llm.registerAndConnect, 'a url', 'a ps datachannel url');
11338
-
11339
11365
  });
11340
-
11341
11366
  });
11342
11367
 
11343
11368
  describe('#setLocus', () => {
@@ -11755,24 +11780,29 @@ describe('plugin-meetings', () => {
11755
11780
 
11756
11781
  activeSharingId.whiteboard = beneficiaryId;
11757
11782
 
11758
- eventTrigger.share.push(meeting.webinar.selfIsAttendee ? {
11759
- eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,
11760
- functionName: 'remoteShare',
11761
- eventPayload: {
11762
- memberId: null,
11763
- url,
11764
- shareInstanceId,
11765
- annotationInfo: undefined,
11766
- resourceType: undefined,
11767
- },
11768
- } : {
11769
- eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,
11770
- functionName: 'startWhiteboardShare',
11771
- eventPayload: {resourceUrl, memberId: beneficiaryId},
11772
- });
11773
-
11774
- shareStatus = meeting.webinar.selfIsAttendee ? SHARE_STATUS.REMOTE_SHARE_ACTIVE : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
11783
+ eventTrigger.share.push(
11784
+ meeting.webinar.selfIsAttendee
11785
+ ? {
11786
+ eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,
11787
+ functionName: 'remoteShare',
11788
+ eventPayload: {
11789
+ memberId: null,
11790
+ url,
11791
+ shareInstanceId,
11792
+ annotationInfo: undefined,
11793
+ resourceType: undefined,
11794
+ },
11795
+ }
11796
+ : {
11797
+ eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,
11798
+ functionName: 'startWhiteboardShare',
11799
+ eventPayload: {resourceUrl, memberId: beneficiaryId},
11800
+ }
11801
+ );
11775
11802
 
11803
+ shareStatus = meeting.webinar.selfIsAttendee
11804
+ ? SHARE_STATUS.REMOTE_SHARE_ACTIVE
11805
+ : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
11776
11806
  }
11777
11807
 
11778
11808
  if (eventTrigger.member) {
@@ -11804,24 +11834,29 @@ describe('plugin-meetings', () => {
11804
11834
  newPayload.current.content.disposition = FLOOR_ACTION.ACCEPTED;
11805
11835
  newPayload.current.content.beneficiaryId = otherBeneficiaryId;
11806
11836
 
11807
- eventTrigger.share.push(meeting.webinar.selfIsAttendee ? {
11808
- eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,
11809
- functionName: 'remoteShare',
11810
- eventPayload: {
11811
- memberId: null,
11812
- url,
11813
- shareInstanceId,
11814
- annotationInfo: undefined,
11815
- resourceType: undefined,
11816
- },
11817
- } : {
11818
- eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,
11819
- functionName: 'startWhiteboardShare',
11820
- eventPayload: {resourceUrl, memberId: beneficiaryId},
11821
- });
11822
-
11823
- shareStatus = meeting.webinar.selfIsAttendee ? SHARE_STATUS.REMOTE_SHARE_ACTIVE : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
11837
+ eventTrigger.share.push(
11838
+ meeting.webinar.selfIsAttendee
11839
+ ? {
11840
+ eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE,
11841
+ functionName: 'remoteShare',
11842
+ eventPayload: {
11843
+ memberId: null,
11844
+ url,
11845
+ shareInstanceId,
11846
+ annotationInfo: undefined,
11847
+ resourceType: undefined,
11848
+ },
11849
+ }
11850
+ : {
11851
+ eventName: EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD,
11852
+ functionName: 'startWhiteboardShare',
11853
+ eventPayload: {resourceUrl, memberId: beneficiaryId},
11854
+ }
11855
+ );
11824
11856
 
11857
+ shareStatus = meeting.webinar.selfIsAttendee
11858
+ ? SHARE_STATUS.REMOTE_SHARE_ACTIVE
11859
+ : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
11825
11860
  } else {
11826
11861
  eventTrigger.share.push({
11827
11862
  eventName: EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD,
@@ -11951,24 +11986,24 @@ describe('plugin-meetings', () => {
11951
11986
  describe('Whiteboard Share - Webinar Attendee', () => {
11952
11987
  it('Scenario #1: Whiteboard sharing as a webinar attendee', () => {
11953
11988
  // Set the webinar attendee flag
11954
- meeting.webinar = { selfIsAttendee: true };
11989
+ meeting.webinar = {selfIsAttendee: true};
11955
11990
  meeting.locusInfo.info.isWebinar = true;
11956
11991
 
11957
11992
  // Step 1: Start sharing whiteboard A
11958
11993
  const data1 = generateData(
11959
- blankPayload, // Initial payload
11960
- true, // isGranting: Granting share
11961
- false, // isContent: Whiteboard (not content)
11962
- USER_IDS.REMOTE_A, // Beneficiary ID: Remote user A
11994
+ blankPayload, // Initial payload
11995
+ true, // isGranting: Granting share
11996
+ false, // isContent: Whiteboard (not content)
11997
+ USER_IDS.REMOTE_A, // Beneficiary ID: Remote user A
11963
11998
  RESOURCE_URLS.WHITEBOARD_A // Resource URL: Whiteboard A
11964
11999
  );
11965
12000
 
11966
12001
  // Step 2: Stop sharing whiteboard A
11967
12002
  const data2 = generateData(
11968
- data1.payload, // Updated payload from Step 1
11969
- false, // isGranting: Stopping share
11970
- false, // isContent: Whiteboard
11971
- USER_IDS.REMOTE_A // Beneficiary ID: Remote user A
12003
+ data1.payload, // Updated payload from Step 1
12004
+ false, // isGranting: Stopping share
12005
+ false, // isContent: Whiteboard
12006
+ USER_IDS.REMOTE_A // Beneficiary ID: Remote user A
11972
12007
  );
11973
12008
 
11974
12009
  // Validate the payload changes and status updates
@@ -11979,7 +12014,6 @@ describe('plugin-meetings', () => {
11979
12014
  });
11980
12015
  });
11981
12016
 
11982
-
11983
12017
  describe('Whiteboard A --> Whiteboard B', () => {
11984
12018
  it('Scenario #1: you share both whiteboards', () => {
11985
12019
  const data1 = generateData(
@@ -13290,7 +13324,7 @@ describe('plugin-meetings', () => {
13290
13324
  await meeting.roapMessageReceived(fakeMessage);
13291
13325
 
13292
13326
  assert.fail('Expected MultistreamNotSupportedError to be thrown');
13293
- } catch(e) {
13327
+ } catch (e) {
13294
13328
  assert.isTrue(e instanceof MultistreamNotSupportedError);
13295
13329
  }
13296
13330