@webex/plugin-meetings 3.0.0-beta.162 → 3.0.0-beta.164

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 (64) hide show
  1. package/dist/breakouts/breakout.js +7 -3
  2. package/dist/breakouts/breakout.js.map +1 -1
  3. package/dist/breakouts/events.js +31 -29
  4. package/dist/breakouts/events.js.map +1 -1
  5. package/dist/breakouts/index.js +4 -2
  6. package/dist/breakouts/index.js.map +1 -1
  7. package/dist/constants.js +2 -4
  8. package/dist/constants.js.map +1 -1
  9. package/dist/interpretation/index.js +1 -1
  10. package/dist/interpretation/siLanguage.js +1 -1
  11. package/dist/locus-info/index.js +33 -17
  12. package/dist/locus-info/index.js.map +1 -1
  13. package/dist/meeting/index.js +699 -682
  14. package/dist/meeting/index.js.map +1 -1
  15. package/dist/meeting/util.js +47 -25
  16. package/dist/meeting/util.js.map +1 -1
  17. package/dist/meeting-info/index.js +48 -7
  18. package/dist/meeting-info/index.js.map +1 -1
  19. package/dist/meeting-info/meeting-info-v2.js +24 -10
  20. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  21. package/dist/meetings/index.js +12 -9
  22. package/dist/meetings/index.js.map +1 -1
  23. package/dist/metrics/index.js +1 -487
  24. package/dist/metrics/index.js.map +1 -1
  25. package/dist/reconnection-manager/index.js +27 -17
  26. package/dist/reconnection-manager/index.js.map +1 -1
  27. package/dist/roap/request.js +20 -14
  28. package/dist/roap/request.js.map +1 -1
  29. package/dist/types/breakouts/events.d.ts +7 -1
  30. package/dist/types/constants.d.ts +0 -1
  31. package/dist/types/meeting/index.d.ts +31 -133
  32. package/dist/types/meeting-info/index.d.ts +6 -1
  33. package/dist/types/meetings/index.d.ts +1 -0
  34. package/dist/types/metrics/index.d.ts +4 -128
  35. package/package.json +19 -19
  36. package/src/breakouts/breakout.ts +10 -2
  37. package/src/breakouts/events.ts +51 -32
  38. package/src/breakouts/index.ts +9 -5
  39. package/src/constants.ts +0 -2
  40. package/src/locus-info/index.ts +35 -17
  41. package/src/meeting/index.ts +474 -536
  42. package/src/meeting/util.ts +42 -19
  43. package/src/meeting-info/index.ts +54 -8
  44. package/src/meeting-info/meeting-info-v2.ts +24 -9
  45. package/src/meetings/index.ts +11 -6
  46. package/src/metrics/index.ts +1 -506
  47. package/src/reconnection-manager/index.ts +27 -17
  48. package/src/roap/request.ts +21 -9
  49. package/test/unit/spec/breakouts/breakout.ts +4 -2
  50. package/test/unit/spec/breakouts/events.ts +24 -18
  51. package/test/unit/spec/locus-info/index.js +112 -0
  52. package/test/unit/spec/meeting/index.js +178 -145
  53. package/test/unit/spec/meeting/utils.js +93 -7
  54. package/test/unit/spec/meeting-info/index.js +181 -0
  55. package/test/unit/spec/meeting-info/meetinginfov2.js +68 -68
  56. package/test/unit/spec/meetings/index.js +35 -55
  57. package/test/unit/spec/metrics/index.js +1 -148
  58. package/test/unit/spec/reconnection-manager/index.js +51 -2
  59. package/test/unit/spec/roap/index.ts +8 -2
  60. package/test/unit/spec/roap/request.ts +43 -5
  61. package/dist/metrics/config.js +0 -335
  62. package/dist/metrics/config.js.map +0 -1
  63. package/dist/types/metrics/config.d.ts +0 -195
  64. package/src/metrics/config.ts +0 -534
@@ -60,9 +60,7 @@ import ControlsOptionsUtil from '@webex/plugin-meetings/src/controls-options-man
60
60
  import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
61
61
  import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
62
62
  import TriggerProxy from '@webex/plugin-meetings/src/common/events/trigger-proxy';
63
- import BrowserDetection from '@webex/plugin-meetings/src/common/browser-detection';
64
63
  import Metrics from '@webex/plugin-meetings/src/metrics';
65
- import {trigger, eventType} from '@webex/plugin-meetings/src/metrics/config';
66
64
  import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
67
65
  import {MediaRequestManager} from '@webex/plugin-meetings/src/multistream/mediaRequestManager';
68
66
  import * as ReceiveSlotManagerModule from '@webex/plugin-meetings/src/multistream/receiveSlotManager';
@@ -94,8 +92,6 @@ import {
94
92
  } from '../../../../src/meeting-info/meeting-info-v2';
95
93
  import {ANNOTATION_POLICY} from "../../../../src/annotation/constants";
96
94
 
97
- const {getBrowserName, getOSVersion} = BrowserDetection();
98
-
99
95
  // Non-stubbed function
100
96
  const {getDisplayMedia} = Media;
101
97
 
@@ -220,6 +216,7 @@ describe('plugin-meetings', () => {
220
216
  });
221
217
 
222
218
  webex.internal.support.submitLogs = sinon.stub().returns(Promise.resolve());
219
+ webex.internal.services = {get: sinon.stub().returns('locus-url')};
223
220
  webex.credentials.getOrgId = sinon.stub().returns('fake-org-id');
224
221
  webex.internal.metrics.submitClientMetrics = sinon.stub().returns(Promise.resolve());
225
222
  webex.meetings.uploadLogs = sinon.stub().returns(Promise.resolve());
@@ -228,8 +225,7 @@ describe('plugin-meetings', () => {
228
225
  meetingRequestSpy = sinon.spy(MeetingRequestImport, 'default');
229
226
 
230
227
  TriggerProxy.trigger = sinon.stub().returns(true);
231
- Metrics.postEvent = sinon.stub();
232
- Metrics.initialSetup(null, webex);
228
+ Metrics.initialSetup(webex);
233
229
  MediaUtil.createMediaStream = sinon.stub().callsFake((tracks) => {
234
230
  return {
235
231
  getTracks: () => tracks,
@@ -641,9 +637,10 @@ describe('plugin-meetings', () => {
641
637
  it('should join the meeting and return promise', async () => {
642
638
  const join = meeting.join();
643
639
 
644
- assert.calledWithMatch(Metrics.postEvent, {
645
- event: eventType.CALL_INITIATED,
646
- data: {trigger: trigger.USER_INTERACTION, isRoapCallEnabled: true},
640
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
641
+ name: 'client.call.initiated',
642
+ payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
643
+ options: {meetingId: meeting.id},
647
644
  });
648
645
 
649
646
  assert.exists(join.then);
@@ -691,9 +688,10 @@ describe('plugin-meetings', () => {
691
688
 
692
689
  const join = meeting.join();
693
690
 
694
- assert.calledWithMatch(Metrics.postEvent, {
695
- event: eventType.CALL_INITIATED,
696
- data: {trigger: trigger.USER_INTERACTION, isRoapCallEnabled: true},
691
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
692
+ name: 'client.call.initiated',
693
+ payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
694
+ options: {meetingId: meeting.id},
697
695
  });
698
696
 
699
697
  assert.exists(join.then);
@@ -703,24 +701,27 @@ describe('plugin-meetings', () => {
703
701
  assert.calledOnce(meeting.setLocus);
704
702
  assert.equal(result, joinMeetingResult);
705
703
 
706
- assert.calledThrice(Metrics.postEvent)
704
+ assert.calledThrice(webex.internal.newMetrics.submitClientEvent);
707
705
 
708
- assert.deepEqual(Metrics.postEvent.getCall(0).args[0].event, 'client.call.initiated');
709
- assert.deepEqual(Metrics.postEvent.getCall(0).args[0].data, {
710
- isRoapCallEnabled: true,
711
- trigger: 'user-interaction',
706
+ assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(0).args[0], {
707
+ name: 'client.call.initiated',
708
+ payload: {
709
+ trigger: 'user-interaction',
710
+ isRoapCallEnabled: true,
711
+ },
712
+ options: {meetingId: meeting.id},
712
713
  });
713
- assert.deepEqual(
714
- Metrics.postEvent.getCall(1).args[0].event,
715
- 'client.meetinginfo.request'
716
- );
717
- assert.deepEqual(Metrics.postEvent.getCall(1).args[0].data, undefined);
718
- assert.deepEqual(
719
- Metrics.postEvent.getCall(2).args[0].event,
720
- 'client.meetinginfo.response'
721
- );
722
- assert.deepEqual(Metrics.postEvent.getCall(2).args[0].data, {
723
- meetingLookupUrl: 'url',
714
+
715
+ assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0], {
716
+ name: 'client.meetinginfo.request',
717
+ options: {meetingId: meeting.id},
718
+ });
719
+ assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(2).args[0], {
720
+ name: 'client.meetinginfo.response',
721
+ payload: {
722
+ identifiers: {meetingLookupUrl: 'url'},
723
+ },
724
+ options: {meetingId: meeting.id},
724
725
  });
725
726
  });
726
727
 
@@ -729,9 +730,10 @@ describe('plugin-meetings', () => {
729
730
 
730
731
  const join = meeting.join();
731
732
 
732
- assert.calledWithMatch(Metrics.postEvent, {
733
- event: eventType.CALL_INITIATED,
734
- data: {trigger: trigger.USER_INTERACTION, isRoapCallEnabled: true},
733
+ assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
734
+ name: 'client.call.initiated',
735
+ payload: {trigger: 'user-interaction', isRoapCallEnabled: true},
736
+ options: {meetingId: meeting.id},
735
737
  });
736
738
 
737
739
  assert.exists(join.then);
@@ -741,9 +743,9 @@ describe('plugin-meetings', () => {
741
743
  assert.calledOnce(meeting.setLocus);
742
744
  assert.equal(result, joinMeetingResult);
743
745
 
744
- assert.calledOnce(Metrics.postEvent)
746
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent)
745
747
 
746
- assert.equal(Metrics.postEvent.getCall(0).args[0].event, 'client.call.initiated');
748
+ assert.equal(webex.internal.newMetrics.submitClientEvent.getCall(0).args[0].name, 'client.call.initiated');
747
749
  });
748
750
  });
749
751
  describe('failure', () => {
@@ -790,7 +792,13 @@ describe('plugin-meetings', () => {
790
792
 
791
793
  it('should post error event if failed', async () => {
792
794
  await meeting.join().catch(() => {
793
- assert.calledWithMatch(Metrics.postEvent, {event: eventType.LOCUS_JOIN_RESPONSE});
795
+ assert.deepEqual(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0].name, 'client.locus.join.response');
796
+ assert.match(webex.internal.newMetrics.submitClientEvent.getCall(1).args[0].options.rawError, {
797
+ code: 2,
798
+ error: null,
799
+ joinOptions: {},
800
+ sdkMessage: 'There was an issue joining the meeting, meeting could be in a bad state.'
801
+ });
794
802
  });
795
803
  });
796
804
  it('should fail if password is required', async () => {
@@ -1190,6 +1198,7 @@ describe('plugin-meetings', () => {
1190
1198
  });
1191
1199
 
1192
1200
  it('should reject if waitForMediaConnectionConnected() rejects', async () => {
1201
+ webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode = sinon.stub().returns({});
1193
1202
  meeting.meetingState = 'ACTIVE';
1194
1203
  meeting.mediaProperties.waitForMediaConnectionConnected.rejects(new Error('fake error'));
1195
1204
 
@@ -1203,6 +1212,20 @@ describe('plugin-meetings', () => {
1203
1212
  errorThrown = true;
1204
1213
  });
1205
1214
 
1215
+ assert.calledTwice(webex.internal.newMetrics.submitClientEvent);
1216
+
1217
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1218
+ name: 'client.ice.end',
1219
+ payload: {
1220
+ canProceed: false,
1221
+ icePhase: 'JOIN_MEETING_FINAL',
1222
+ errors: [{}],
1223
+ },
1224
+ options: {
1225
+ meetingId: meeting.id,
1226
+ },
1227
+ });
1228
+
1206
1229
  assert.isTrue(errorThrown);
1207
1230
  });
1208
1231
 
@@ -1219,6 +1242,14 @@ describe('plugin-meetings', () => {
1219
1242
  connectionType: 'udp',
1220
1243
  isMultistream: false
1221
1244
  });
1245
+
1246
+ assert.called(webex.internal.newMetrics.submitClientEvent);
1247
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1248
+ name: 'client.media-engine.ready',
1249
+ options: {
1250
+ meetingId: meeting.id,
1251
+ },
1252
+ });
1222
1253
  });
1223
1254
 
1224
1255
  describe('handles StatsAnalyzer events', () => {
@@ -1263,9 +1294,12 @@ describe('plugin-meetings', () => {
1263
1294
  type: 'audio',
1264
1295
  }
1265
1296
  );
1266
- assert.calledWithMatch(Metrics.postEvent, {
1267
- event: eventType.SENDING_MEDIA_START,
1268
- data: {mediaType: 'audio'},
1297
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1298
+ name: 'client.media.tx.start',
1299
+ payload: {mediaType: 'audio'},
1300
+ options: {
1301
+ meetingId: meeting.id,
1302
+ },
1269
1303
  });
1270
1304
  });
1271
1305
 
@@ -1276,9 +1310,12 @@ describe('plugin-meetings', () => {
1276
1310
  {type: 'video'}
1277
1311
  );
1278
1312
 
1279
- assert.calledWithMatch(Metrics.postEvent, {
1280
- event: eventType.SENDING_MEDIA_STOP,
1281
- data: {mediaType: 'video'},
1313
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1314
+ name: 'client.media.tx.stop',
1315
+ payload: {mediaType:'video'},
1316
+ options: {
1317
+ meetingId: meeting.id,
1318
+ },
1282
1319
  });
1283
1320
  });
1284
1321
 
@@ -1301,9 +1338,12 @@ describe('plugin-meetings', () => {
1301
1338
  type: 'video',
1302
1339
  }
1303
1340
  );
1304
- assert.calledWithMatch(Metrics.postEvent, {
1305
- event: eventType.RECEIVING_MEDIA_START,
1306
- data: {mediaType: 'video'},
1341
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1342
+ name: 'client.media.rx.start',
1343
+ payload: {mediaType: 'video'},
1344
+ options: {
1345
+ meetingId: meeting.id,
1346
+ },
1307
1347
  });
1308
1348
  });
1309
1349
 
@@ -1314,13 +1354,16 @@ describe('plugin-meetings', () => {
1314
1354
  {type: 'audio'}
1315
1355
  );
1316
1356
 
1317
- assert.calledWithMatch(Metrics.postEvent, {
1318
- event: eventType.RECEIVING_MEDIA_STOP,
1319
- data: {mediaType: 'audio'},
1357
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
1358
+ name: 'client.media.rx.stop',
1359
+ payload: {mediaType: 'audio'},
1360
+ options: {
1361
+ meetingId: meeting.id,
1362
+ },
1320
1363
  });
1321
1364
  });
1322
1365
 
1323
- it('MEDIA_QUALITY triggers the right metrics', async () => {
1366
+ it('calls submitMQE correctly', async () => {
1324
1367
  const fakeData = {intervalMetadata: {bla: 'bla'}};
1325
1368
 
1326
1369
  statsAnalyzerStub.emit(
@@ -1329,9 +1372,15 @@ describe('plugin-meetings', () => {
1329
1372
  {data: fakeData, networkType: 'wifi'}
1330
1373
  );
1331
1374
 
1332
- assert.calledWithMatch(Metrics.postEvent, {
1333
- event: eventType.MEDIA_QUALITY,
1334
- data: {intervalData: fakeData, networkType: 'wifi'},
1375
+ assert.calledWithMatch(webex.internal.newMetrics.submitMQE, {
1376
+ name: 'client.mediaquality.event',
1377
+ options: {
1378
+ meetingId: meeting.id,
1379
+ networkType: 'wifi',
1380
+ },
1381
+ payload: {
1382
+ intervals: [fakeData]
1383
+ }
1335
1384
  });
1336
1385
  });
1337
1386
  });
@@ -1438,8 +1487,6 @@ describe('plugin-meetings', () => {
1438
1487
 
1439
1488
  StaticConfig.set({bandwidth: {audio: 1234, video: 5678, startBitrate: 9876}});
1440
1489
 
1441
- Metrics.postEvent = sinon.stub();
1442
-
1443
1490
  // setup things that are expected to be the same across all the tests and are actually irrelevant for these tests
1444
1491
  expectedDebugId = `MC-${meeting.id.substring(0, 4)}`;
1445
1492
  expectedMediaConnectionConfig = {
@@ -2113,6 +2160,15 @@ describe('plugin-meetings', () => {
2113
2160
  assert.calledOnce(meeting.unsetRemoteTracks);
2114
2161
  assert.calledOnce(meeting.unsetPeerConnections);
2115
2162
  });
2163
+
2164
+ it('should reset call diagnostic latencies correctly', async () => {
2165
+ const leave = meeting.leave();
2166
+
2167
+ assert.exists(leave.then);
2168
+ await leave;
2169
+ assert.calledWith(webex.internal.newMetrics.submitInternalEvent, {name: 'internal.reset.join.latencies'});
2170
+ });
2171
+
2116
2172
  describe('after audio/video is defined', () => {
2117
2173
  let handleClientRequest;
2118
2174
 
@@ -3263,9 +3319,14 @@ describe('plugin-meetings', () => {
3263
3319
  assert.exists(meeting.postMetrics);
3264
3320
  });
3265
3321
 
3266
- it('should trigger `postMetrics`', async () => {
3267
- await meeting.postMetrics(eventType.LEAVE);
3268
- assert.calledWithMatch(Metrics.postEvent, {event: eventType.LEAVE});
3322
+ it('should trigger `submitClientEvent`', async () => {
3323
+ await meeting.postMetrics('client.call.leave');
3324
+ console.log({s: webex.internal.newMetrics.submitClientEvent.getCall(0).args[0]})
3325
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
3326
+ name: 'client.call.leave',
3327
+ options: {meetingId: meeting.id},
3328
+ });
3329
+
3269
3330
  });
3270
3331
  });
3271
3332
 
@@ -3352,11 +3413,11 @@ describe('plugin-meetings', () => {
3352
3413
  }
3353
3414
  });
3354
3415
 
3355
- it('should postEvent on moveTo ', async () => {
3416
+ it('should submitClientEvent on moveTo ', async () => {
3356
3417
  await meeting.moveTo('resourceId');
3357
- assert.calledWithMatch(Metrics.postEvent, {
3358
- event: eventType.MEDIA_CAPABILITIES,
3359
- data: {
3418
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
3419
+ name: 'client.media.capabilities',
3420
+ payload: {
3360
3421
  mediaCapabilities: {
3361
3422
  rx: {
3362
3423
  audio: false,
@@ -3374,8 +3435,12 @@ describe('plugin-meetings', () => {
3374
3435
  },
3375
3436
  },
3376
3437
  },
3438
+ options: {meetingId: meeting.id},
3439
+ });
3440
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
3441
+ name: 'client.call.move-media',
3442
+ options: {meetingId: meeting.id}
3377
3443
  });
3378
- assert.calledWithMatch(Metrics.postEvent, {event: eventType.MOVE_MEDIA});
3379
3444
  });
3380
3445
 
3381
3446
  it('should call `MeetingUtil.joinMeetingOptions` with resourceId', async () => {
@@ -3485,10 +3550,13 @@ describe('plugin-meetings', () => {
3485
3550
  }
3486
3551
  });
3487
3552
 
3488
- it('should postEvent on moveFrom ', async () => {
3553
+ it('should submitClientEvent on moveFrom ', async () => {
3489
3554
  await meeting.moveFrom('resourceId');
3490
3555
 
3491
- assert.calledWithMatch(Metrics.postEvent, {event: eventType.MOVE_MEDIA});
3556
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
3557
+ name: 'client.call.move-media',
3558
+ options: {meetingId: meeting.id},
3559
+ });
3492
3560
  });
3493
3561
 
3494
3562
  it('should call `MeetingUtil.joinMeetingOptions` with resourceId', async () => {
@@ -3999,6 +4067,29 @@ describe('plugin-meetings', () => {
3999
4067
  });
4000
4068
  });
4001
4069
 
4070
+ describe('submitClientEvent on connectionFailed', () => {
4071
+ it('sends client.ice.end when connectionFailed on CONNECTION_STATE_CHANGED event', () => {
4072
+ webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode = sinon.stub().returns({})
4073
+ meeting.setupMediaConnectionListeners();
4074
+ eventListeners[Event.CONNECTION_STATE_CHANGED]({
4075
+ state: 'Failed',
4076
+ });
4077
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4078
+
4079
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4080
+ name: 'client.ice.end',
4081
+ payload: {
4082
+ canProceed: false,
4083
+ icePhase: 'IN_MEETING',
4084
+ errors: [{}],
4085
+ },
4086
+ options: {
4087
+ meetingId: meeting.id,
4088
+ },
4089
+ });
4090
+ });
4091
+ });
4092
+
4002
4093
  describe('should send correct metrics for ROAP_FAILURE event', () => {
4003
4094
  const fakeErrorMessage = 'test error';
4004
4095
  const fakeRootCauseName = 'root cause name';
@@ -4008,12 +4099,14 @@ describe('plugin-meetings', () => {
4008
4099
  meeting.setupMediaConnectionListeners();
4009
4100
  });
4010
4101
 
4011
- const checkMetricSent = (event) => {
4012
- assert.calledOnce(Metrics.postEvent);
4013
- assert.calledWithMatch(Metrics.postEvent, {
4014
- event,
4015
- meetingId: meeting.id,
4016
- data: {canProceed: false},
4102
+ const checkMetricSent = (event, error) => {
4103
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4104
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4105
+ name: event,
4106
+ payload: {
4107
+ canProceed: false,
4108
+ },
4109
+ options: {showToUser: true, rawError: error, meetingId: meeting.id},
4017
4110
  });
4018
4111
  };
4019
4112
 
@@ -4047,7 +4140,7 @@ describe('plugin-meetings', () => {
4047
4140
 
4048
4141
  eventListeners[Event.ROAP_FAILURE](fakeError);
4049
4142
 
4050
- checkMetricSent(eventType.LOCAL_SDP_GENERATED);
4143
+ checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
4051
4144
  checkBehavioralMetricSent(
4052
4145
  BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
4053
4146
  Errors.ErrorCode.SdpOfferCreationError,
@@ -4064,7 +4157,7 @@ describe('plugin-meetings', () => {
4064
4157
 
4065
4158
  eventListeners[Event.ROAP_FAILURE](fakeError);
4066
4159
 
4067
- checkMetricSent(eventType.REMOTE_SDP_RECEIVED);
4160
+ checkMetricSent('client.media-engine.remote-sdp-received', fakeError);
4068
4161
  checkBehavioralMetricSent(
4069
4162
  BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
4070
4163
  Errors.ErrorCode.SdpOfferHandlingError,
@@ -4081,7 +4174,7 @@ describe('plugin-meetings', () => {
4081
4174
 
4082
4175
  eventListeners[Event.ROAP_FAILURE](fakeError);
4083
4176
 
4084
- checkMetricSent(eventType.REMOTE_SDP_RECEIVED);
4177
+ checkMetricSent('client.media-engine.remote-sdp-received', fakeError);
4085
4178
  checkBehavioralMetricSent(
4086
4179
  BEHAVIORAL_METRICS.PEERCONNECTION_FAILURE,
4087
4180
  Errors.ErrorCode.SdpAnswerHandlingError,
@@ -4096,7 +4189,7 @@ describe('plugin-meetings', () => {
4096
4189
 
4097
4190
  eventListeners[Event.ROAP_FAILURE](fakeError);
4098
4191
 
4099
- checkMetricSent(eventType.LOCAL_SDP_GENERATED);
4192
+ checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
4100
4193
  // expectedMetadataType is the error name in this case
4101
4194
  checkBehavioralMetricSent(
4102
4195
  BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE,
@@ -4114,7 +4207,7 @@ describe('plugin-meetings', () => {
4114
4207
 
4115
4208
  eventListeners[Event.ROAP_FAILURE](fakeError);
4116
4209
 
4117
- checkMetricSent(eventType.LOCAL_SDP_GENERATED);
4210
+ checkMetricSent('client.media-engine.local-sdp-generated', fakeError);
4118
4211
  // expectedMetadataType is the error name in this case
4119
4212
  checkBehavioralMetricSent(
4120
4213
  BEHAVIORAL_METRICS.INVALID_ICE_CANDIDATE,
@@ -4147,10 +4240,10 @@ describe('plugin-meetings', () => {
4147
4240
  roapMessage: {messageType: 'OK', seq: 1},
4148
4241
  });
4149
4242
 
4150
- assert.calledOnce(Metrics.postEvent);
4151
- assert.calledWithMatch(Metrics.postEvent, {
4152
- event: eventType.REMOTE_SDP_RECEIVED,
4153
- meetingId: meeting.id,
4243
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4244
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4245
+ name: 'client.media-engine.remote-sdp-received',
4246
+ options: {meetingId: meeting.id},
4154
4247
  });
4155
4248
 
4156
4249
  assert.calledOnce(sendRoapOKStub);
@@ -4171,10 +4264,10 @@ describe('plugin-meetings', () => {
4171
4264
  },
4172
4265
  });
4173
4266
 
4174
- assert.calledOnce(Metrics.postEvent);
4175
- assert.calledWithMatch(Metrics.postEvent, {
4176
- event: eventType.LOCAL_SDP_GENERATED,
4177
- meetingId: meeting.id,
4267
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4268
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4269
+ name: 'client.media-engine.local-sdp-generated',
4270
+ options: {meetingId: meeting.id},
4178
4271
  });
4179
4272
 
4180
4273
  assert.calledOnce(sendRoapMediaRequestStub);
@@ -4197,10 +4290,10 @@ describe('plugin-meetings', () => {
4197
4290
  },
4198
4291
  });
4199
4292
 
4200
- assert.calledOnce(Metrics.postEvent);
4201
- assert.calledWithMatch(Metrics.postEvent, {
4202
- event: eventType.REMOTE_SDP_RECEIVED,
4203
- meetingId: meeting.id,
4293
+ assert.calledOnce(webex.internal.newMetrics.submitClientEvent);
4294
+ assert.calledWithMatch(webex.internal.newMetrics.submitClientEvent, {
4295
+ name: 'client.media-engine.remote-sdp-received',
4296
+ options: {meetingId: meeting.id},
4204
4297
  });
4205
4298
 
4206
4299
  assert.calledOnce(sendRoapAnswerStub);
@@ -6796,66 +6889,6 @@ describe('plugin-meetings', () => {
6796
6889
  await testEmit(false);
6797
6890
  });
6798
6891
  });
6799
-
6800
- describe('getAnalyzerMetricsPrePayload', () => {
6801
- it('should have #getAnalyzerMetricsPrePayload', () => {
6802
- assert.exists(meeting.getAnalyzerMetricsPrePayload);
6803
- });
6804
-
6805
- beforeEach(() => {
6806
- meeting.meetingRequest.getAnalyzerMetricsPrePayload = sinon
6807
- .stub()
6808
- .returns(Promise.resolve());
6809
- meeting.webex.internal = {services: {get: sinon.stub().returns('Locus URL')}};
6810
- meeting.correlationId = 'correlation-id';
6811
- });
6812
-
6813
- it('it should include meetingLookupUrl if provided', () => {
6814
- const res = meeting.getAnalyzerMetricsPrePayload({
6815
- meetingLookupUrl: 'https://service-url.com',
6816
- event: 'client.meetinginfo.response',
6817
- });
6818
-
6819
- assert.deepEqual(res.event, {
6820
- canProceed: true,
6821
- eventData: {
6822
- webClientDomain: '',
6823
- },
6824
- identifiers: {
6825
- correlationId: 'correlation-id',
6826
- deviceId: uuid3,
6827
- locusUrl: 'Locus URL',
6828
- meetingLookupUrl: 'https://service-url.com',
6829
- orgId: undefined,
6830
- userId: uuid1,
6831
- },
6832
- name: 'client.meetinginfo.response',
6833
- });
6834
-
6835
- assert.deepEqual(res.origin, {
6836
- channel: undefined,
6837
- loginType: undefined,
6838
- userType: undefined,
6839
- clientInfo: {
6840
- browser: '',
6841
- browserVersion: '',
6842
- clientType: undefined,
6843
- clientVersion: 'webex-js-sdk/undefined',
6844
- localNetworkPrefix: null,
6845
- os: 'other',
6846
- osVersion: getOSVersion() || 'unknown',
6847
- subClientType: undefined,
6848
- },
6849
- name: 'endpoint',
6850
- networkType: 'unknown',
6851
- userAgent: 'webex-js-sdk/test-undefined client=undefined; (os=linux/5)',
6852
- });
6853
-
6854
- assert.deepEqual(res.senderCountryCode, undefined);
6855
- assert.deepEqual(res.version, 1);
6856
-
6857
- });
6858
- });
6859
6892
  });
6860
6893
  });
6861
6894
  });