@webex/plugin-meetings 3.10.0-next.6 → 3.10.0-wxc-disconnect.1

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 (65) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/common/errors/webex-errors.js +1 -21
  4. package/dist/common/errors/webex-errors.js.map +1 -1
  5. package/dist/constants.js +0 -7
  6. package/dist/constants.js.map +1 -1
  7. package/dist/controls-options-manager/index.js +5 -22
  8. package/dist/controls-options-manager/index.js.map +1 -1
  9. package/dist/index.js +0 -7
  10. package/dist/index.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/controlsUtils.js +2 -11
  14. package/dist/locus-info/controlsUtils.js.map +1 -1
  15. package/dist/locus-info/index.js +3 -17
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/media/index.js +0 -5
  18. package/dist/media/index.js.map +1 -1
  19. package/dist/meeting/in-meeting-actions.js +0 -6
  20. package/dist/meeting/in-meeting-actions.js.map +1 -1
  21. package/dist/meeting/index.js +33 -103
  22. package/dist/meeting/index.js.map +1 -1
  23. package/dist/meeting/request.js +14 -152
  24. package/dist/meeting/request.js.map +1 -1
  25. package/dist/meeting/util.js +0 -9
  26. package/dist/meeting/util.js.map +1 -1
  27. package/dist/member/index.js +0 -9
  28. package/dist/member/index.js.map +1 -1
  29. package/dist/member/util.js +0 -10
  30. package/dist/member/util.js.map +1 -1
  31. package/dist/types/common/errors/webex-errors.d.ts +0 -12
  32. package/dist/types/constants.d.ts +0 -5
  33. package/dist/types/controls-options-manager/index.d.ts +1 -9
  34. package/dist/types/index.d.ts +1 -2
  35. package/dist/types/locus-info/index.d.ts +1 -2
  36. package/dist/types/meeting/in-meeting-actions.d.ts +0 -6
  37. package/dist/types/meeting/index.d.ts +0 -30
  38. package/dist/types/meeting/request.d.ts +0 -33
  39. package/dist/types/meeting/util.d.ts +0 -3
  40. package/dist/types/member/index.d.ts +0 -1
  41. package/dist/types/member/util.d.ts +0 -5
  42. package/dist/webinar/index.js +1 -1
  43. package/package.json +22 -22
  44. package/src/common/errors/webex-errors.ts +0 -19
  45. package/src/constants.ts +1 -9
  46. package/src/controls-options-manager/index.ts +5 -26
  47. package/src/index.ts +0 -2
  48. package/src/locus-info/controlsUtils.ts +0 -18
  49. package/src/locus-info/index.ts +4 -14
  50. package/src/media/index.ts +0 -6
  51. package/src/meeting/in-meeting-actions.ts +0 -12
  52. package/src/meeting/index.ts +21 -99
  53. package/src/meeting/request.ts +0 -118
  54. package/src/meeting/util.ts +0 -9
  55. package/src/member/index.ts +0 -10
  56. package/src/member/util.ts +0 -14
  57. package/test/unit/spec/controls-options-manager/index.js +0 -47
  58. package/test/unit/spec/fixture/locus.js +0 -1
  59. package/test/unit/spec/locus-info/index.js +0 -39
  60. package/test/unit/spec/media/index.ts +9 -140
  61. package/test/unit/spec/meeting/in-meeting-actions.ts +0 -6
  62. package/test/unit/spec/meeting/index.js +70 -171
  63. package/test/unit/spec/meeting/utils.js +0 -3
  64. package/test/unit/spec/meetings/index.js +2 -0
  65. package/test/unit/spec/member/util.js +0 -24
@@ -141,12 +141,12 @@ describe('createMediaConnection', () => {
141
141
  const roapMediaConnectionConstructorStub = sinon
142
142
  .stub(InternalMediaCoreModule, 'RoapMediaConnection')
143
143
  .returns(fakeRoapMediaConnection);
144
-
144
+
145
145
  StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
146
-
146
+
147
147
  const ENABLE_EXTMAP = false;
148
148
  const ENABLE_RTX = true;
149
-
149
+
150
150
  Media.createMediaConnection(false, 'sendonly-debug-id', 'meetingId', {
151
151
  mediaProperties: {
152
152
  mediaDirection: {
@@ -168,7 +168,7 @@ describe('createMediaConnection', () => {
168
168
  turnServerInfo: undefined,
169
169
  iceCandidatesTimeout: undefined,
170
170
  });
171
-
171
+
172
172
  assert.calledWith(
173
173
  roapMediaConnectionConstructorStub,
174
174
  sinon.match.any,
@@ -194,12 +194,12 @@ describe('createMediaConnection', () => {
194
194
  const roapMediaConnectionConstructorStub = sinon
195
195
  .stub(InternalMediaCoreModule, 'RoapMediaConnection')
196
196
  .returns(fakeRoapMediaConnection);
197
-
197
+
198
198
  StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
199
-
199
+
200
200
  const ENABLE_EXTMAP = true;
201
201
  const ENABLE_RTX = false;
202
-
202
+
203
203
  Media.createMediaConnection(false, 'recvonly-debug-id', 'meetingId', {
204
204
  mediaProperties: {
205
205
  mediaDirection: {
@@ -221,7 +221,7 @@ describe('createMediaConnection', () => {
221
221
  turnServerInfo: undefined,
222
222
  iceCandidatesTimeout: undefined,
223
223
  });
224
-
224
+
225
225
  assert.calledWith(
226
226
  roapMediaConnectionConstructorStub,
227
227
  sinon.match.any,
@@ -242,6 +242,7 @@ describe('createMediaConnection', () => {
242
242
  'recvonly-debug-id'
243
243
  );
244
244
  });
245
+
245
246
 
246
247
  it('creates a MultistreamRoapMediaConnection when multistream is enabled', () => {
247
248
  const multistreamRoapMediaConnectionConstructorStub = sinon
@@ -510,138 +511,6 @@ describe('createMediaConnection', () => {
510
511
  );
511
512
  });
512
513
 
513
- const testEnableInboundAudioLevelMonitoring = (
514
- testName: string,
515
- browserStubs: {isChrome?: boolean; isEdge?: boolean; isFirefox?: boolean},
516
- isMultistream: boolean,
517
- expectedConfig: object,
518
- additionalOptions = {}
519
- ) => {
520
- it(testName, () => {
521
- const connectionConstructorStub = isMultistream
522
- ? sinon.stub(InternalMediaCoreModule, 'MultistreamRoapMediaConnection')
523
- : sinon.stub(InternalMediaCoreModule, 'RoapMediaConnection');
524
-
525
- connectionConstructorStub.returns(fakeRoapMediaConnection);
526
-
527
- // Set up browser stubs
528
- sinon.stub(BrowserInfo, 'isChrome').returns(browserStubs.isChrome || false);
529
- sinon.stub(BrowserInfo, 'isEdge').returns(browserStubs.isEdge || false);
530
- sinon.stub(BrowserInfo, 'isFirefox').returns(browserStubs.isFirefox || false);
531
-
532
- const baseOptions = {
533
- mediaProperties: {
534
- mediaDirection: {
535
- sendAudio: true,
536
- sendVideo: true,
537
- sendShare: false,
538
- receiveAudio: true,
539
- receiveVideo: true,
540
- receiveShare: true,
541
- },
542
- ...(isMultistream
543
- ? {}
544
- : {
545
- audioStream: fakeAudioStream,
546
- videoStream: fakeVideoStream,
547
- shareVideoTrack: null,
548
- shareAudioTrack: null,
549
- }),
550
- },
551
- ...(isMultistream
552
- ? {}
553
- : {
554
- remoteQualityLevel: 'HIGH',
555
- enableRtx: true,
556
- enableExtmap: true,
557
- }),
558
- ...additionalOptions,
559
- };
560
-
561
- if (!isMultistream) {
562
- StaticConfig.set({bandwidth: {audio: 123, video: 456, startBitrate: 999}});
563
- }
564
-
565
- Media.createMediaConnection(isMultistream, 'debug string', 'meeting id', baseOptions);
566
-
567
- if (isMultistream) {
568
- assert.calledOnceWithExactly(
569
- connectionConstructorStub,
570
- expectedConfig,
571
- 'meeting id',
572
- sinon.match.func,
573
- sinon.match.func,
574
- sinon.match.func
575
- );
576
- } else {
577
- assert.calledOnceWithExactly(
578
- connectionConstructorStub,
579
- expectedConfig,
580
- sinon.match.object,
581
- 'debug string'
582
- );
583
- }
584
- });
585
- };
586
-
587
- testEnableInboundAudioLevelMonitoring(
588
- 'enables enableInboundAudioLevelMonitoring for multistream when browser is Chrome',
589
- {isChrome: true},
590
- true,
591
- {
592
- iceServers: [],
593
- disableAudioTwcc: true,
594
- enableInboundAudioLevelMonitoring: true,
595
- }
596
- );
597
-
598
- testEnableInboundAudioLevelMonitoring(
599
- 'enables enableInboundAudioLevelMonitoring for multistream when browser is Edge',
600
- {isEdge: true},
601
- true,
602
- {
603
- iceServers: [],
604
- disableAudioTwcc: true,
605
- enableInboundAudioLevelMonitoring: true,
606
- }
607
- );
608
-
609
- testEnableInboundAudioLevelMonitoring(
610
- 'does not enable enableInboundAudioLevelMonitoring for multistream when browser is Firefox',
611
- {isFirefox: true},
612
- true,
613
- {
614
- iceServers: [],
615
- disableAudioTwcc: true,
616
- doFullIce: true,
617
- stopIceGatheringAfterFirstRelayCandidate: undefined,
618
- }
619
- );
620
-
621
- testEnableInboundAudioLevelMonitoring(
622
- 'does not enable enableInboundAudioLevelMonitoring for non-multistream connections even when browser is Chrome',
623
- {isChrome: true},
624
- false,
625
- {
626
- iceServers: [],
627
- iceCandidatesTimeout: undefined,
628
- skipInactiveTransceivers: false,
629
- requireH264: true,
630
- sdpMunging: {
631
- convertPort9to0: false,
632
- addContentSlides: true,
633
- bandwidthLimits: {
634
- audio: 123,
635
- video: 456,
636
- },
637
- startBitrate: 999,
638
- periodicKeyframes: 20,
639
- disableExtmap: false,
640
- disableRtx: false,
641
- },
642
- }
643
- );
644
-
645
514
  [
646
515
  {testCase: 'turnServerInfo is undefined', turnServerInfo: undefined},
647
516
  {
@@ -35,8 +35,6 @@ describe('plugin-meetings', () => {
35
35
  isLocalRecordingStarted: null,
36
36
  isLocalRecordingStopped: null,
37
37
  isLocalRecordingPaused: null,
38
- isLocalStreamingStarted:null,
39
- isLocalStreamingStopped:null,
40
38
  isManualCaptionActive: null,
41
39
  isPremiseRecordingEnabled: null,
42
40
  isSaveTranscriptsEnabled: null,
@@ -88,7 +86,6 @@ describe('plugin-meetings', () => {
88
86
  canDoVideo: null,
89
87
  canAnnotate: null,
90
88
  canUseVoip: null,
91
- showAutoEndMeetingWarning: null,
92
89
  supportHQV: null,
93
90
  supportHDV: null,
94
91
  canShareWhiteBoard: null,
@@ -139,8 +136,6 @@ describe('plugin-meetings', () => {
139
136
  'isLocalRecordingStarted',
140
137
  'isLocalRecordingStopped',
141
138
  'isLocalRecordingPaused',
142
- 'isLocalStreamingStarted',
143
- 'isLocalStreamingStopped',
144
139
  'canSetMuteOnEntry',
145
140
  'canUnsetMuteOnEntry',
146
141
  'canSetDisallowUnmute',
@@ -202,7 +197,6 @@ describe('plugin-meetings', () => {
202
197
  'canRealtimeCloseCaption',
203
198
  'canRealtimeCloseCaptionManual',
204
199
  'canChat',
205
- 'showAutoEndMeetingWarning',
206
200
  'canDoVideo',
207
201
  'canAnnotate',
208
202
  'canUseVoip',
@@ -97,7 +97,6 @@ import PermissionError from '../../../../src/common/errors/permission';
97
97
  import JoinWebinarError from '../../../../src/common/errors/join-webinar-error';
98
98
  import IntentToJoinError from '../../../../src/common/errors/intent-to-join';
99
99
  import MultistreamNotSupportedError from '../../../../src/common/errors/multistream-not-supported-error';
100
- import {SdpResponseTimeoutError} from '@webex/plugin-meetings/src/common/errors/webex-errors';
101
100
  import testUtils from '../../../utils/testUtils';
102
101
  import {
103
102
  MeetingInfoV2CaptchaError,
@@ -2000,15 +1999,18 @@ describe('plugin-meetings', () => {
2000
1999
 
2001
2000
  // Assert that client.locus.join.response error event is not sent from this function, it is now emitted from MeetingUtil.joinMeeting
2002
2001
  assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
2003
- assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
2004
- name: 'client.call.initiated',
2005
- payload: {
2006
- trigger: 'user-interaction',
2007
- isRoapCallEnabled: true,
2008
- pstnAudioType: undefined,
2009
- },
2010
- options: {meetingId: meeting.id},
2011
- });
2002
+ assert.calledWithMatch(
2003
+ webex.internal.newMetrics.submitClientEvent,
2004
+ {
2005
+ name: 'client.call.initiated',
2006
+ payload: {
2007
+ trigger: 'user-interaction',
2008
+ isRoapCallEnabled: true,
2009
+ pstnAudioType: undefined
2010
+ },
2011
+ options: {meetingId: meeting.id},
2012
+ }
2013
+ );
2012
2014
  });
2013
2015
  });
2014
2016
  it('should fail if password is required', async () => {
@@ -2677,11 +2679,7 @@ describe('plugin-meetings', () => {
2677
2679
  // simulate timeout waiting for the SDP answer that never comes
2678
2680
  await clock.tickAsync(ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
2679
2681
 
2680
- await assert.isRejected(
2681
- result,
2682
- SdpResponseTimeoutError,
2683
- 'Timed out waiting for REMOTE SDP ANSWER'
2684
- );
2682
+ await assert.isRejected(result);
2685
2683
 
2686
2684
  assert.calledOnceWithExactly(getErrorPayloadForClientErrorCodeStub, {
2687
2685
  clientErrorCode: 2007,
@@ -4089,7 +4087,7 @@ describe('plugin-meetings', () => {
4089
4087
  member2: {isInMeeting: false, isInLobby: true},
4090
4088
  member3: {isInMeeting: false, isInLobby: false},
4091
4089
  member4: {isInMeeting: true, isInLobby: false},
4092
- },
4090
+ }
4093
4091
  };
4094
4092
  sinon.stub(meeting, 'getMembers').returns({membersCollection: fakeMembersCollection});
4095
4093
  const fakeData = {intervalMetadata: {}};
@@ -6741,7 +6739,7 @@ describe('plugin-meetings', () => {
6741
6739
  // Verify pstnCorrelationId was set
6742
6740
  assert.exists(meeting.pstnCorrelationId);
6743
6741
  assert.notEqual(meeting.pstnCorrelationId, meeting.correlationId);
6744
- const firstPstnCorrelationId = meeting.pstnCorrelationId;
6742
+ const firstPstnCorrelationId = meeting.pstnCorrelationId
6745
6743
 
6746
6744
  meeting.meetingRequest.dialIn.resetHistory();
6747
6745
 
@@ -6816,19 +6814,15 @@ describe('plugin-meetings', () => {
6816
6814
  assert.equal(e, error);
6817
6815
 
6818
6816
  // Verify behavioral metric was sent with dial_in_correlation_id
6819
- assert.calledWith(
6820
- Metrics.sendBehavioralMetric,
6821
- BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE,
6822
- {
6823
- correlation_id: meeting.correlationId,
6824
- dial_in_url: meeting.dialInUrl,
6825
- dial_in_correlation_id: sinon.match.string,
6826
- locus_id: meeting.locusUrl.split('/').pop(),
6827
- client_url: meeting.deviceUrl,
6828
- reason: error.error.message,
6829
- stack: error.stack,
6830
- }
6831
- );
6817
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_DIAL_IN_FAILURE, {
6818
+ correlation_id: meeting.correlationId,
6819
+ dial_in_url: meeting.dialInUrl,
6820
+ dial_in_correlation_id: sinon.match.string,
6821
+ locus_id: meeting.locusUrl.split('/').pop(),
6822
+ client_url: meeting.deviceUrl,
6823
+ reason: error.error.message,
6824
+ stack: error.stack,
6825
+ });
6832
6826
 
6833
6827
  // Verify pstnCorrelationId was cleared after error
6834
6828
  assert.equal(meeting.pstnCorrelationId, undefined);
@@ -6847,19 +6841,15 @@ describe('plugin-meetings', () => {
6847
6841
  assert.equal(e, error);
6848
6842
 
6849
6843
  // Verify behavioral metric was sent with dial_out_correlation_id
6850
- assert.calledWith(
6851
- Metrics.sendBehavioralMetric,
6852
- BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE,
6853
- {
6854
- correlation_id: meeting.correlationId,
6855
- dial_out_url: meeting.dialOutUrl,
6856
- dial_out_correlation_id: sinon.match.string,
6857
- locus_id: meeting.locusUrl.split('/').pop(),
6858
- client_url: meeting.deviceUrl,
6859
- reason: error.error.message,
6860
- stack: error.stack,
6861
- }
6862
- );
6844
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_DIAL_OUT_FAILURE, {
6845
+ correlation_id: meeting.correlationId,
6846
+ dial_out_url: meeting.dialOutUrl,
6847
+ dial_out_correlation_id: sinon.match.string,
6848
+ locus_id: meeting.locusUrl.split('/').pop(),
6849
+ client_url: meeting.deviceUrl,
6850
+ reason: error.error.message,
6851
+ stack: error.stack,
6852
+ });
6863
6853
 
6864
6854
  // Verify pstnCorrelationId was cleared after error
6865
6855
  assert.equal(meeting.pstnCorrelationId, undefined);
@@ -6904,7 +6894,7 @@ describe('plugin-meetings', () => {
6904
6894
 
6905
6895
  // Verify that pstnCorrelationId is still cleared even when no phone connection is active
6906
6896
  assert.equal(meeting.pstnCorrelationId, undefined);
6907
- // And verify no disconnect was attempted
6897
+ // And verify no disconnect was attempted
6908
6898
  assert.notCalled(MeetingUtil.disconnectPhoneAudio);
6909
6899
  });
6910
6900
  });
@@ -10481,24 +10471,6 @@ describe('plugin-meetings', () => {
10481
10471
  );
10482
10472
  });
10483
10473
 
10484
- it('listens to CONTROLS_AUTO_END_MEETING_WARNING_CHANGED', async () => {
10485
- const state = {example: 'value'};
10486
-
10487
- await meeting.locusInfo.emitScoped(
10488
- {function: 'test', file: 'test'},
10489
- LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,
10490
- {state}
10491
- );
10492
-
10493
- assert.calledWith(
10494
- TriggerProxy.trigger,
10495
- meeting,
10496
- {file: 'meeting/index', function: 'setupLocusControlsListener'},
10497
- EVENT_TRIGGERS.MEETING_CONTROLS_AUTO_END_MEETING_WARNING_UPDATED,
10498
- {state}
10499
- );
10500
- });
10501
-
10502
10474
  it('listens to CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED', async () => {
10503
10475
  const state = {example: 'value'};
10504
10476
 
@@ -10578,7 +10550,6 @@ describe('plugin-meetings', () => {
10578
10550
  describe('#setUpLocusUrlListener', () => {
10579
10551
  it('listens to the locus url update event', (done) => {
10580
10552
  const newLocusUrl = 'newLocusUrl/12345';
10581
- const payload = {url: newLocusUrl};
10582
10553
 
10583
10554
  meeting.members = {locusUrlUpdate: sinon.stub().returns(Promise.resolve(test1))};
10584
10555
  meeting.recordingController = {setLocusUrl: sinon.stub().returns(undefined)};
@@ -10592,14 +10563,14 @@ describe('plugin-meetings', () => {
10592
10563
  meeting.locusInfo.emit(
10593
10564
  {function: 'test', file: 'test'},
10594
10565
  'LOCUS_INFO_UPDATE_URL',
10595
- payload
10566
+ newLocusUrl
10596
10567
  );
10597
10568
  assert.calledWith(meeting.members.locusUrlUpdate, newLocusUrl);
10598
10569
  assert.calledOnceWithExactly(meeting.breakouts.locusUrlUpdate, newLocusUrl);
10599
10570
  assert.calledOnceWithExactly(meeting.annotation.locusUrlUpdate, newLocusUrl);
10600
10571
  assert.calledWith(meeting.members.locusUrlUpdate, newLocusUrl);
10601
10572
  assert.calledWith(meeting.recordingController.setLocusUrl, newLocusUrl);
10602
- assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl, false);
10573
+ assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl);
10603
10574
  assert.calledWith(meeting.simultaneousInterpretation.locusUrlUpdate, newLocusUrl);
10604
10575
  assert.calledWith(meeting.webinar.locusUrlUpdate, newLocusUrl);
10605
10576
  assert.equal(meeting.locusUrl, newLocusUrl);
@@ -10617,22 +10588,6 @@ describe('plugin-meetings', () => {
10617
10588
  {locusUrl: 'newLocusUrl/12345'}
10618
10589
  );
10619
10590
 
10620
- done();
10621
- });
10622
- it('update mainLocusUrl for controlsOptionManager if payload.isMainLocus as true', (done) => {
10623
- const newLocusUrl = 'newLocusUrl/12345';
10624
- const payload = {url: newLocusUrl, isMainLocus: true};
10625
-
10626
- meeting.controlsOptionsManager = {setLocusUrl: sinon.stub().returns(undefined)};
10627
-
10628
- meeting.locusInfo.emit(
10629
- {function: 'test', file: 'test'},
10630
- 'LOCUS_INFO_UPDATE_URL',
10631
- payload
10632
- );
10633
-
10634
- assert.calledWith(meeting.controlsOptionsManager.setLocusUrl, newLocusUrl, true);
10635
-
10636
10591
  done();
10637
10592
  });
10638
10593
  });
@@ -10853,9 +10808,7 @@ describe('plugin-meetings', () => {
10853
10808
  meeting.meetingRequest.changeMeetingFloor = sinon.stub().returns(Promise.resolve());
10854
10809
  (meeting.deviceUrl = 'deviceUrl.com'), (meeting.localShareInstanceId = '1234-5678');
10855
10810
  webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
10856
- webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
10857
- .stub()
10858
- .returns(1000);
10811
+ webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1000);
10859
10812
  });
10860
10813
  it('should call changeMeetingFloor()', async () => {
10861
10814
  meeting.screenShareFloorState = 'GRANTED';
@@ -11473,7 +11426,6 @@ describe('plugin-meetings', () => {
11473
11426
  let canShareWhiteBoardSpy;
11474
11427
  let canMoveToLobbySpy;
11475
11428
  let isSpokenLanguageAutoDetectionEnabledSpy;
11476
- let showAutoEndMeetingWarningSpy;
11477
11429
  // Due to import tree issues, hasHints must be stubed within the scope of the `it`.
11478
11430
 
11479
11431
  beforeEach(() => {
@@ -11505,17 +11457,13 @@ describe('plugin-meetings', () => {
11505
11457
  canUserRenameOthersSpy = sinon.spy(MeetingUtil, 'canUserRenameOthers');
11506
11458
  canShareWhiteBoardSpy = sinon.spy(MeetingUtil, 'canShareWhiteBoard');
11507
11459
  canMoveToLobbySpy = sinon.spy(MeetingUtil, 'canMoveToLobby');
11508
- showAutoEndMeetingWarningSpy = sinon.spy(MeetingUtil, 'showAutoEndMeetingWarning');
11509
- isSpokenLanguageAutoDetectionEnabledSpy = sinon.spy(
11510
- MeetingUtil,
11511
- 'isSpokenLanguageAutoDetectionEnabled'
11512
- );
11460
+ isSpokenLanguageAutoDetectionEnabledSpy = sinon.spy(MeetingUtil, 'isSpokenLanguageAutoDetectionEnabled');
11461
+
11513
11462
  });
11514
11463
 
11515
11464
  afterEach(() => {
11516
11465
  inMeetingActionsSetSpy.restore();
11517
11466
  waitingForOthersToJoinSpy.restore();
11518
- showAutoEndMeetingWarningSpy.restore();
11519
11467
  });
11520
11468
 
11521
11469
  forEach(
@@ -12063,7 +12011,6 @@ describe('plugin-meetings', () => {
12063
12011
  assert.calledWith(canUserRenameOthersSpy, userDisplayHints);
12064
12012
  assert.calledWith(canShareWhiteBoardSpy, userDisplayHints, selfUserPolicies);
12065
12013
  assert.calledWith(canMoveToLobbySpy, userDisplayHints);
12066
- assert.calledWith(showAutoEndMeetingWarningSpy, userDisplayHints);
12067
12014
  assert.calledWith(isSpokenLanguageAutoDetectionEnabledSpy, userDisplayHints);
12068
12015
 
12069
12016
  assert.calledWith(ControlsOptionsUtil.hasHints, {
@@ -12516,9 +12463,7 @@ describe('plugin-meetings', () => {
12516
12463
  meeting.meetingRequest.changeMeetingFloor = sinon.stub().returns(Promise.resolve());
12517
12464
  meeting.deviceUrl = 'deviceUrl.com';
12518
12465
  webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
12519
- webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
12520
- .stub()
12521
- .returns(1000);
12466
+ webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1000);
12522
12467
  webex.internal.newMetrics.submitClientEvent = sinon.stub();
12523
12468
  });
12524
12469
  it('should stop the whiteboard share', async () => {
@@ -12622,9 +12567,7 @@ describe('plugin-meetings', () => {
12622
12567
  meeting.deviceUrl = 'my-web-url';
12623
12568
  meeting.locusInfo.info = {isWebinar: false};
12624
12569
  webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp = sinon.stub();
12625
- webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon
12626
- .stub()
12627
- .returns(1500);
12570
+ webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration = sinon.stub().returns(1500);
12628
12571
  webex.internal.newMetrics.submitClientEvent = sinon.stub();
12629
12572
  });
12630
12573
 
@@ -12873,8 +12816,8 @@ describe('plugin-meetings', () => {
12873
12816
 
12874
12817
  shareStatus =
12875
12818
  meeting.webinar.selfIsAttendee || meeting.guest
12876
- ? SHARE_STATUS.REMOTE_SHARE_ACTIVE
12877
- : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
12819
+ ? SHARE_STATUS.REMOTE_SHARE_ACTIVE
12820
+ : SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
12878
12821
  }
12879
12822
 
12880
12823
  if (eventTrigger.member) {
@@ -13820,32 +13763,32 @@ describe('plugin-meetings', () => {
13820
13763
  });
13821
13764
  });
13822
13765
 
13823
- describe('handleShareVideoStreamMuteStateChange', () => {
13824
- it('should emit MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE event with correct fields', () => {
13825
- meeting.isMultistream = true;
13826
- meeting.statsAnalyzer = {shareVideoEncoderImplementation: 'OpenH264'};
13827
- meeting.mediaProperties.shareVideoStream = {
13828
- getSettings: sinon.stub().returns({displaySurface: 'monitor', frameRate: 30}),
13829
- };
13766
+ describe('handleShareVideoStreamMuteStateChange', () => {
13767
+ it('should emit MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE event with correct fields', () => {
13768
+ meeting.isMultistream = true;
13769
+ meeting.statsAnalyzer = {shareVideoEncoderImplementation: 'OpenH264'};
13770
+ meeting.mediaProperties.shareVideoStream = {
13771
+ getSettings: sinon.stub().returns({displaySurface: 'monitor', frameRate: 30}),
13772
+ };
13830
13773
 
13831
- meeting.handleShareVideoStreamMuteStateChange(true);
13774
+ meeting.handleShareVideoStreamMuteStateChange(true);
13832
13775
 
13833
- assert.calledOnceWithExactly(
13834
- Metrics.sendBehavioralMetric,
13835
- BEHAVIORAL_METRICS.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE,
13836
- {
13837
- correlationId: meeting.correlationId,
13838
- muted: true,
13839
- encoderImplementation: 'OpenH264',
13840
- displaySurface: 'monitor',
13841
- isMultistream: true,
13842
- frameRate: 30,
13843
- }
13844
- );
13845
- });
13776
+ assert.calledOnceWithExactly(
13777
+ Metrics.sendBehavioralMetric,
13778
+ BEHAVIORAL_METRICS.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE,
13779
+ {
13780
+ correlationId: meeting.correlationId,
13781
+ muted: true,
13782
+ encoderImplementation: 'OpenH264',
13783
+ displaySurface: 'monitor',
13784
+ isMultistream: true,
13785
+ frameRate: 30,
13786
+ }
13787
+ );
13846
13788
  });
13847
13789
  });
13848
13790
  });
13791
+ });
13849
13792
 
13850
13793
  describe('#startKeepAlive', () => {
13851
13794
  let clock;
@@ -15044,9 +14987,11 @@ describe('plugin-meetings', () => {
15044
14987
  assert.exists(unsetStagePromise.then);
15045
14988
  await unsetStagePromise;
15046
14989
 
15047
- assert.calledOnceWithExactly(meeting.meetingRequest.synchronizeStage, locusUrl, {
15048
- overrideDefault: false,
15049
- });
14990
+ assert.calledOnceWithExactly(
14991
+ meeting.meetingRequest.synchronizeStage,
14992
+ locusUrl,
14993
+ {overrideDefault: false}
14994
+ );
15050
14995
  });
15051
14996
  });
15052
14997
 
@@ -15071,54 +15016,8 @@ describe('plugin-meetings', () => {
15071
15016
  meeting.meetingInfo.siteFullUrl,
15072
15017
  meeting.locusId,
15073
15018
  meetingUuid,
15074
- displayName
15075
- );
15076
- });
15077
- });
15078
-
15079
- describe('#sipCallOut', () => {
15080
- beforeEach(() => {
15081
- meeting.meetingRequest.sipCallOut = sinon.stub().returns(Promise.resolve({body: {}}));
15082
- });
15083
-
15084
- it('sends the expected request', async () => {
15085
- const address = 'sip:user@example.com';
15086
- const displayName = 'John Doe';
15087
- const meetingId = 'a643beaa47f04eedac08f1310ca12366';
15088
-
15089
- meeting.meetingInfo = {
15090
- meetingId,
15091
- };
15092
-
15093
- const sipCallOutPromise = meeting.sipCallOut(address, displayName);
15094
-
15095
- assert.exists(sipCallOutPromise.then);
15096
- await sipCallOutPromise;
15097
-
15098
- assert.calledOnceWithExactly(
15099
- meeting.meetingRequest.sipCallOut,
15100
- meetingId,
15101
- meetingId,
15102
- address,
15103
- displayName
15019
+ displayName,
15104
15020
  );
15105
15021
  });
15106
15022
  });
15107
-
15108
- describe('#cancelSipCallOut', () => {
15109
- beforeEach(() => {
15110
- meeting.meetingRequest.cancelSipCallOut = sinon.stub().returns(Promise.resolve({body: {}}));
15111
- });
15112
-
15113
- it('sends the expected request', async () => {
15114
- const participantId = '12345-abcde';
15115
-
15116
- const cancelSipCallOutPromise = meeting.cancelSipCallOut(participantId);
15117
-
15118
- assert.exists(cancelSipCallOutPromise.then);
15119
- await cancelSipCallOutPromise;
15120
-
15121
- assert.calledOnceWithExactly(meeting.meetingRequest.cancelSipCallOut, participantId);
15122
- });
15123
- });
15124
15023
  });
@@ -975,8 +975,6 @@ describe('plugin-meetings', () => {
975
975
  {functionName: 'isLocalRecordingStarted',displayHint:'LOCAL_RECORDING_STATUS_STARTED'},
976
976
  {functionName: 'isLocalRecordingStopped', displayHint: 'LOCAL_RECORDING_STATUS_STOPPED'},
977
977
  {functionName: 'isLocalRecordingPaused', displayHint: 'LOCAL_RECORDING_STATUS_PAUSED'},
978
- {functionName: 'isLocalStreamingStarted',displayHint:'STREAMING_STATUS_STARTED'},
979
- {functionName: 'isLocalStreamingStopped', displayHint: 'STREAMING_STATUS_STOPPED'},
980
978
 
981
979
  {functionName: 'isManualCaptionActive', displayHint: 'MANUAL_CAPTION_STATUS_ACTIVE'},
982
980
 
@@ -987,7 +985,6 @@ describe('plugin-meetings', () => {
987
985
  {functionName: 'isRealTimeTranslationEnabled', displayHint: 'DISPLAY_REAL_TIME_TRANSLATION'},
988
986
  {functionName: 'canSelectSpokenLanguages', displayHint: 'DISPLAY_NON_ENGLISH_ASR'},
989
987
  {functionName: 'waitingForOthersToJoin', displayHint: 'WAITING_FOR_OTHERS'},
990
- {functionName: 'showAutoEndMeetingWarning', displayHint: 'SHOW_AUTO_END_MEETING_WARNING'},
991
988
  ].forEach(({functionName, displayHint}) => {
992
989
  describe(functionName, () => {
993
990
  it('works as expected', () => {
@@ -690,9 +690,11 @@ describe('plugin-meetings', () => {
690
690
  assert.deepEqual(result.options, {
691
691
  mode: 'BLUR',
692
692
  blurStrength: 'STRONG',
693
+ generator: 'worker',
693
694
  quality: 'LOW',
694
695
  authToken: 'fake_token',
695
696
  mirror: false,
697
+ canvasResolutionScaling: 1,
696
698
  });
697
699
  assert.exists(result.enable);
698
700
  assert.exists(result.disable);