@webex/plugin-meetings 3.8.0-next.57 → 3.8.0-next.59

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.
@@ -100,7 +100,6 @@ import {
100
100
  MEETING_STATE_MACHINE,
101
101
  MEETING_STATE,
102
102
  MEETINGS,
103
- MQA_STATS,
104
103
  NETWORK_STATUS,
105
104
  ONLINE,
106
105
  OFFLINE,
@@ -6822,20 +6821,20 @@ export default class Meeting extends StatelessWebexPlugin {
6822
6821
  * @memberof Meetings
6823
6822
  */
6824
6823
  setupStatsAnalyzerEventHandlers = () => {
6825
- this.statsAnalyzer.on(StatsAnalyzerEventNames.MEDIA_QUALITY, (options) => {
6826
- // TODO: might have to send the same event to the developer
6827
- // Add ip address info if geo hint is present
6828
- // @ts-ignore fix type
6829
- options.data.intervalMetadata.peerReflexiveIP =
6830
- // @ts-ignore
6831
- this.webex.meetings.geoHintInfo?.clientAddress ||
6832
- options.data.intervalMetadata.peerReflexiveIP ||
6833
- MQA_STATS.DEFAULT_IP;
6824
+ this.statsAnalyzer.on(StatsAnalyzerEventNames.MEDIA_QUALITY, (event) => {
6825
+ // Add IP address from geoHintInfo if missing.
6826
+ if (event.data.intervalMetadata.maskedPeerReflexiveIP === '0.0.0.0') {
6827
+ // @ts-ignore fix type
6828
+ const clientAddressFromGeoHint = this.webex.meetings.geoHintInfo?.clientAddress;
6829
+ if (clientAddressFromGeoHint) {
6830
+ event.data.intervalMetadata.maskedPeerReflexiveIP =
6831
+ CallDiagnosticUtils.anonymizeIPAddress(clientAddressFromGeoHint);
6832
+ }
6833
+ }
6834
6834
 
6835
+ // Count members that are in the meeting.
6835
6836
  const {members} = this.getMembers().membersCollection;
6836
-
6837
- // Count members that are in the meeting
6838
- options.data.intervalMetadata.meetingUserCount = Object.values(members).filter(
6837
+ event.data.intervalMetadata.meetingUserCount = Object.values(members).filter(
6839
6838
  (member: Member) => member.isInMeeting
6840
6839
  ).length;
6841
6840
 
@@ -6844,10 +6843,10 @@ export default class Meeting extends StatelessWebexPlugin {
6844
6843
  name: 'client.mediaquality.event',
6845
6844
  options: {
6846
6845
  meetingId: this.id,
6847
- networkType: options.data.networkType,
6846
+ networkType: this.statsAnalyzer.getNetworkType(),
6848
6847
  },
6849
6848
  payload: {
6850
- intervals: [options.data],
6849
+ intervals: [event.data],
6851
6850
  },
6852
6851
  });
6853
6852
  });
@@ -2762,7 +2762,7 @@ describe('plugin-meetings', () => {
2762
2762
  turnDiscoverySkippedReason: undefined,
2763
2763
  });
2764
2764
  meeting.meetingState = 'ACTIVE';
2765
- const error = {iceConnected: false}
2765
+ const error = {iceConnected: false};
2766
2766
  meeting.mediaProperties.waitForMediaConnectionConnected.rejects(error);
2767
2767
 
2768
2768
  const forceRtcMetricsSend = sinon.stub().resolves();
@@ -3435,28 +3435,23 @@ describe('plugin-meetings', () => {
3435
3435
  on: sinon.stub(),
3436
3436
  });
3437
3437
 
3438
- await meeting
3439
- .addMedia({
3440
- mediaSettings: {},
3441
- });
3438
+ await meeting.addMedia({
3439
+ mediaSettings: {},
3440
+ });
3442
3441
 
3443
- assert.calledWith(
3444
- Metrics.sendBehavioralMetric,
3445
- BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS,
3446
- {
3447
- correlation_id: meeting.correlationId,
3448
- locus_id: meeting.locusUrl.split('/').pop(),
3449
- connectionType: 'udp',
3450
- selectedCandidatePairChanges: 2,
3451
- numTransports: 1,
3452
- isMultistream: false,
3453
- retriedWithTurnServer: false,
3454
- isJoinWithMediaRetry: false,
3455
- iceCandidatesCount: 0,
3456
- reachability_public_udp_success: 5,
3457
- isSubnetReachable: false,
3458
- }
3459
- );
3442
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADD_MEDIA_SUCCESS, {
3443
+ correlation_id: meeting.correlationId,
3444
+ locus_id: meeting.locusUrl.split('/').pop(),
3445
+ connectionType: 'udp',
3446
+ selectedCandidatePairChanges: 2,
3447
+ numTransports: 1,
3448
+ isMultistream: false,
3449
+ retriedWithTurnServer: false,
3450
+ isJoinWithMediaRetry: false,
3451
+ iceCandidatesCount: 0,
3452
+ reachability_public_udp_success: 5,
3453
+ isSubnetReachable: false,
3454
+ });
3460
3455
  });
3461
3456
 
3462
3457
  it('should send valid isSubnetReachability if media connection fails', async () => {
@@ -3536,6 +3531,8 @@ describe('plugin-meetings', () => {
3536
3531
  meeting.config.stats.enableStatsAnalyzer = true;
3537
3532
 
3538
3533
  statsAnalyzerStub = new EventsScope();
3534
+ statsAnalyzerStub.getNetworkType = sinon.stub().returns('wifi');
3535
+
3539
3536
  // mock the StatsAnalyzer constructor
3540
3537
  sinon.stub(InternalMediaCoreModule, 'StatsAnalyzer').returns(statsAnalyzerStub);
3541
3538
 
@@ -3830,7 +3827,7 @@ describe('plugin-meetings', () => {
3830
3827
  },
3831
3828
  };
3832
3829
  sinon.stub(meeting, 'getMembers').returns({membersCollection: fakeMembersCollection});
3833
- const fakeData = {intervalMetadata: {}, networkType: 'wifi'};
3830
+ const fakeData = {intervalMetadata: {}};
3834
3831
 
3835
3832
  statsAnalyzerStub.emit(
3836
3833
  {file: 'test', function: 'test'},
@@ -3871,7 +3868,7 @@ describe('plugin-meetings', () => {
3871
3868
  });
3872
3869
 
3873
3870
  it('calls submitMQE correctly', async () => {
3874
- const fakeData = {intervalMetadata: {bla: 'bla'}, networkType: 'wifi'};
3871
+ const fakeData = {intervalMetadata: {bla: 'bla'}};
3875
3872
 
3876
3873
  statsAnalyzerStub.emit(
3877
3874
  {file: 'test', function: 'test'},
@@ -4081,7 +4078,7 @@ describe('plugin-meetings', () => {
4081
4078
  meetingId: meeting.id,
4082
4079
  rawError: {
4083
4080
  iceConnected: false,
4084
- }
4081
+ },
4085
4082
  },
4086
4083
  },
4087
4084
  ]);