@webex/plugin-meetings 2.59.5 → 2.59.6-next.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 (156) hide show
  1. package/dist/common/browser-detection.js +2 -2
  2. package/dist/common/browser-detection.js.map +1 -1
  3. package/dist/common/collection.js +2 -2
  4. package/dist/common/collection.js.map +1 -1
  5. package/dist/config.js +2 -2
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.js +0 -2
  8. package/dist/constants.js.map +1 -1
  9. package/dist/controls-options-manager/index.js +2 -2
  10. package/dist/controls-options-manager/index.js.map +1 -1
  11. package/dist/locus-info/controlsUtils.js +6 -6
  12. package/dist/locus-info/controlsUtils.js.map +1 -1
  13. package/dist/locus-info/index.js +18 -18
  14. package/dist/locus-info/index.js.map +1 -1
  15. package/dist/locus-info/parser.js +2 -2
  16. package/dist/locus-info/parser.js.map +1 -1
  17. package/dist/meeting/index.js +28 -51
  18. package/dist/meeting/index.js.map +1 -1
  19. package/dist/meeting/request.js +2 -2
  20. package/dist/meeting/request.js.map +1 -1
  21. package/dist/meeting/util.js +4 -4
  22. package/dist/meeting/util.js.map +1 -1
  23. package/dist/meeting-info/collection.js +2 -2
  24. package/dist/meeting-info/collection.js.map +1 -1
  25. package/dist/meeting-info/meeting-info-v2.js +7 -1
  26. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  27. package/dist/meetings/collection.js +2 -2
  28. package/dist/meetings/collection.js.map +1 -1
  29. package/dist/members/index.js +2 -2
  30. package/dist/members/index.js.map +1 -1
  31. package/dist/metrics/constants.js +0 -2
  32. package/dist/metrics/constants.js.map +1 -1
  33. package/dist/metrics/index.js +2 -2
  34. package/dist/metrics/index.js.map +1 -1
  35. package/dist/reachability/index.js +9 -2
  36. package/dist/reachability/index.js.map +1 -1
  37. package/dist/roap/index.js +12 -13
  38. package/dist/roap/index.js.map +1 -1
  39. package/dist/roap/turnDiscovery.js +44 -130
  40. package/dist/roap/turnDiscovery.js.map +1 -1
  41. package/dist/statsAnalyzer/global.js +12 -4
  42. package/dist/statsAnalyzer/global.js.map +1 -1
  43. package/dist/statsAnalyzer/index.js +14 -56
  44. package/dist/statsAnalyzer/index.js.map +1 -1
  45. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  46. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  47. package/package.json +22 -21
  48. package/src/config.ts +2 -2
  49. package/src/constants.ts +0 -2
  50. package/src/meeting/index.ts +0 -35
  51. package/src/meeting-info/meeting-info-v2.ts +1 -1
  52. package/src/metrics/constants.ts +0 -2
  53. package/src/roap/index.ts +10 -14
  54. package/src/roap/turnDiscovery.ts +20 -48
  55. package/src/statsAnalyzer/global.ts +10 -2
  56. package/src/statsAnalyzer/index.ts +17 -80
  57. package/test/unit/spec/meeting/index.js +6 -77
  58. package/test/unit/spec/meeting-info/meetinginfov2.js +1 -1
  59. package/test/unit/spec/roap/index.ts +80 -84
  60. package/test/unit/spec/roap/turnDiscovery.ts +0 -21
  61. package/test/unit/spec/stats-analyzer/index.js +0 -151
  62. package/dist/common/browser-detection.d.ts +0 -9
  63. package/dist/common/collection.d.ts +0 -48
  64. package/dist/common/config.d.ts +0 -2
  65. package/dist/common/errors/captcha-error.d.ts +0 -15
  66. package/dist/common/errors/intent-to-join.d.ts +0 -16
  67. package/dist/common/errors/join-meeting.d.ts +0 -17
  68. package/dist/common/errors/media.d.ts +0 -15
  69. package/dist/common/errors/parameter.d.ts +0 -15
  70. package/dist/common/errors/password-error.d.ts +0 -15
  71. package/dist/common/errors/permission.d.ts +0 -14
  72. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  73. package/dist/common/errors/reconnection.d.ts +0 -15
  74. package/dist/common/errors/stats.d.ts +0 -15
  75. package/dist/common/errors/webex-errors.d.ts +0 -81
  76. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  77. package/dist/common/events/events-scope.d.ts +0 -17
  78. package/dist/common/events/events.d.ts +0 -12
  79. package/dist/common/events/trigger-proxy.d.ts +0 -2
  80. package/dist/common/events/util.d.ts +0 -2
  81. package/dist/common/logs/logger-config.d.ts +0 -2
  82. package/dist/common/logs/logger-proxy.d.ts +0 -2
  83. package/dist/common/logs/request.d.ts +0 -34
  84. package/dist/common/queue.d.ts +0 -32
  85. package/dist/config.d.ts +0 -73
  86. package/dist/constants.d.ts +0 -926
  87. package/dist/controls-options-manager/constants.d.ts +0 -4
  88. package/dist/controls-options-manager/enums.d.ts +0 -5
  89. package/dist/controls-options-manager/index.d.ts +0 -120
  90. package/dist/controls-options-manager/util.d.ts +0 -7
  91. package/dist/index.d.ts +0 -4
  92. package/dist/locus-info/controlsUtils.d.ts +0 -2
  93. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  94. package/dist/locus-info/fullState.d.ts +0 -2
  95. package/dist/locus-info/hostUtils.d.ts +0 -2
  96. package/dist/locus-info/index.d.ts +0 -269
  97. package/dist/locus-info/infoUtils.d.ts +0 -2
  98. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  99. package/dist/locus-info/parser.d.ts +0 -212
  100. package/dist/locus-info/selfUtils.d.ts +0 -2
  101. package/dist/media/index.d.ts +0 -32
  102. package/dist/media/properties.d.ts +0 -108
  103. package/dist/media/util.d.ts +0 -2
  104. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  105. package/dist/meeting/effectsState.d.ts +0 -42
  106. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  107. package/dist/meeting/index.d.ts +0 -1621
  108. package/dist/meeting/muteState.d.ts +0 -116
  109. package/dist/meeting/request.d.ts +0 -255
  110. package/dist/meeting/state.d.ts +0 -9
  111. package/dist/meeting/util.d.ts +0 -2
  112. package/dist/meeting-info/collection.d.ts +0 -20
  113. package/dist/meeting-info/index.d.ts +0 -57
  114. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  115. package/dist/meeting-info/request.d.ts +0 -22
  116. package/dist/meeting-info/util.d.ts +0 -2
  117. package/dist/meeting-info/utilv2.d.ts +0 -2
  118. package/dist/meetings/collection.d.ts +0 -23
  119. package/dist/meetings/index.d.ts +0 -296
  120. package/dist/meetings/request.d.ts +0 -27
  121. package/dist/meetings/util.d.ts +0 -18
  122. package/dist/member/index.d.ts +0 -147
  123. package/dist/member/member.types.d.ts +0 -11
  124. package/dist/member/util.d.ts +0 -2
  125. package/dist/members/collection.d.ts +0 -24
  126. package/dist/members/index.d.ts +0 -298
  127. package/dist/members/request.d.ts +0 -50
  128. package/dist/members/util.d.ts +0 -2
  129. package/dist/metrics/config.d.ts +0 -169
  130. package/dist/metrics/constants.d.ts +0 -59
  131. package/dist/metrics/index.d.ts +0 -152
  132. package/dist/networkQualityMonitor/index.d.ts +0 -70
  133. package/dist/peer-connection-manager/index.d.ts +0 -6
  134. package/dist/peer-connection-manager/util.d.ts +0 -6
  135. package/dist/personal-meeting-room/index.d.ts +0 -47
  136. package/dist/personal-meeting-room/request.d.ts +0 -14
  137. package/dist/personal-meeting-room/util.d.ts +0 -2
  138. package/dist/reachability/index.d.ts +0 -139
  139. package/dist/reachability/request.d.ts +0 -35
  140. package/dist/reactions/reactions.d.ts +0 -4
  141. package/dist/reactions/reactions.type.d.ts +0 -32
  142. package/dist/reconnection-manager/index.d.ts +0 -112
  143. package/dist/recording-controller/enums.d.ts +0 -7
  144. package/dist/recording-controller/index.d.ts +0 -193
  145. package/dist/recording-controller/util.d.ts +0 -13
  146. package/dist/roap/collection.d.ts +0 -10
  147. package/dist/roap/handler.d.ts +0 -47
  148. package/dist/roap/index.d.ts +0 -116
  149. package/dist/roap/request.d.ts +0 -35
  150. package/dist/roap/state.d.ts +0 -9
  151. package/dist/roap/turnDiscovery.d.ts +0 -81
  152. package/dist/roap/util.d.ts +0 -2
  153. package/dist/statsAnalyzer/global.d.ts +0 -118
  154. package/dist/statsAnalyzer/index.d.ts +0 -193
  155. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  156. package/dist/transcription/index.d.ts +0 -64
@@ -1329,71 +1329,6 @@ describe('plugin-meetings', () => {
1329
1329
  data: {intervalData: fakeData, networkType: 'wifi'},
1330
1330
  });
1331
1331
  });
1332
- it('NO_FRAMES_SENT triggers "meeting:noFramesSent" event and sends metrics', async () => {
1333
- meeting.mediaProperties.mediaDirection = {sendVideo: true};
1334
- statsAnalyzerStub.emit(
1335
- {file: 'test', function: 'test'},
1336
- StatsAnalyzerModule.EVENTS.NO_FRAMES_SENT,
1337
- {mediaType: 'video'}
1338
- );
1339
-
1340
- assert.calledWith(
1341
- TriggerProxy.trigger,
1342
- sinon.match.instanceOf(Meeting),
1343
- {
1344
- file: 'meeting/index',
1345
- function: 'compareLastStatsResult',
1346
- },
1347
- EVENT_TRIGGERS.MEETING_NO_FRAMES_SENT,
1348
- {
1349
- mediaType: 'video',
1350
- }
1351
- );
1352
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.NO_FRAMES_SENT);
1353
- });
1354
- it('NO_FRAMES_SENT triggers "meeting:noFramesSent" event and sends metrics for share', async () => {
1355
- meeting.mediaProperties.mediaDirection = {sendShare: true};
1356
- statsAnalyzerStub.emit(
1357
- {file: 'test', function: 'test'},
1358
- StatsAnalyzerModule.EVENTS.NO_FRAMES_SENT,
1359
- {mediaType: 'share'}
1360
- );
1361
-
1362
- assert.calledWith(
1363
- TriggerProxy.trigger,
1364
- sinon.match.instanceOf(Meeting),
1365
- {
1366
- file: 'meeting/index',
1367
- function: 'compareLastStatsResult',
1368
- },
1369
- EVENT_TRIGGERS.MEETING_NO_FRAMES_SENT,
1370
- {
1371
- mediaType: 'share',
1372
- }
1373
- );
1374
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.NO_FRAMES_SENT);
1375
- });
1376
- it('NO_VIDEO_ENCODED triggers "meeting:noVideoEncoded" event and sends metrics', async () => {
1377
- statsAnalyzerStub.emit(
1378
- {file: 'test', function: 'test'},
1379
- StatsAnalyzerModule.EVENTS.NO_VIDEO_ENCODED,
1380
- {mediaType: 'video'}
1381
- );
1382
-
1383
- assert.calledWith(
1384
- TriggerProxy.trigger,
1385
- sinon.match.instanceOf(Meeting),
1386
- {
1387
- file: 'meeting/index',
1388
- function: 'compareLastStatsResult',
1389
- },
1390
- EVENT_TRIGGERS.MEETING_NO_VIDEO_ENCODED,
1391
- {
1392
- mediaType: 'video',
1393
- }
1394
- );
1395
- assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.NO_VIDEO_ENCODED);
1396
- });
1397
1332
  });
1398
1333
  });
1399
1334
  describe('#acknowledge', () => {
@@ -3670,17 +3605,14 @@ describe('plugin-meetings', () => {
3670
3605
  describe('#setUpLocusServicesListener', () => {
3671
3606
  it('listens to the locus services update event', (done) => {
3672
3607
  const newLocusServices = {
3673
- services: {
3674
- record: {
3675
- url: 'url',
3608
+ services: {
3609
+ record: {
3610
+ url: 'url',
3611
+ }
3676
3612
  },
3677
- },
3678
3613
  };
3679
3614
 
3680
- meeting.recordingController = {
3681
- setServiceUrl: sinon.stub().returns(undefined),
3682
- setSessionId: sinon.stub().returns(undefined),
3683
- };
3615
+ meeting.recordingController = {setServiceUrl: sinon.stub().returns(undefined), setSessionId: sinon.stub().returns(undefined)};
3684
3616
 
3685
3617
  meeting.locusInfo.emit(
3686
3618
  {function: 'test', file: 'test'},
@@ -3688,10 +3620,7 @@ describe('plugin-meetings', () => {
3688
3620
  newLocusServices
3689
3621
  );
3690
3622
 
3691
- assert.calledWith(
3692
- meeting.recordingController.setServiceUrl,
3693
- newLocusServices.services.record.url
3694
- );
3623
+ assert.calledWith(meeting.recordingController.setServiceUrl, newLocusServices.services.record.url);
3695
3624
  assert.calledOnce(meeting.recordingController.setSessionId);
3696
3625
  done();
3697
3626
  });
@@ -354,7 +354,7 @@ describe('plugin-meetings', () => {
354
354
 
355
355
  assert.calledWith(
356
356
  webex.request,
357
- conversationUrl,
357
+ {uri:conversationUrl, qs: {includeParticipants: true}, disableTransform: true}
358
358
  )
359
359
 
360
360
  assert.calledWith(webex.request, {
@@ -41,92 +41,88 @@ describe('Roap', () => {
41
41
  describe('sendRoapMediaRequest', () => {
42
42
  let sendRoapStub;
43
43
  let roapHandlerSubmitStub;
44
- let meeting;
44
+
45
+ const meeting = {
46
+ id: 'some meeting id',
47
+ correlationId: 'correlation id',
48
+ selfUrl: 'self url',
49
+ mediaId: 'media id',
50
+ audio:{
51
+ isLocallyMuted: () => true,
52
+ },
53
+ video:{
54
+ isLocallyMuted: () => false,
55
+ },
56
+ setRoapSeq: sinon.stub(),
57
+ config: {experimental: {enableTurnDiscovery: false}},
58
+ };
45
59
 
46
60
  beforeEach(() => {
47
- meeting = {
48
- id: 'some meeting id',
49
- correlationId: 'correlation id',
50
- selfUrl: 'self url',
51
- mediaId: 'media id',
52
- audio: {
53
- isLocallyMuted: () => true,
54
- },
55
- video: {
56
- isLocallyMuted: () => false,
57
- },
58
- setRoapSeq: sinon.stub(),
59
- config: {experimental: {enableTurnDiscovery: false}},
60
- webex: {meetings: {reachability: {isAnyClusterReachable: () => true}}},
61
- };
62
-
63
- beforeEach(() => {
64
- sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
65
- roapHandlerSubmitStub = sinon.stub(RoapHandler.prototype, 'submit');
66
- meeting.setRoapSeq.resetHistory();
67
- });
68
-
69
- afterEach(() => {
70
- sinon.restore();
71
- });
72
-
73
- [
74
- {reconnect: true, turnDiscoverySkipped: false, expectEmptyMediaId: false},
75
- {reconnect: true, turnDiscoverySkipped: true, expectEmptyMediaId: true},
76
- {reconnect: false, turnDiscoverySkipped: false, expectEmptyMediaId: false},
77
- {reconnect: false, turnDiscoverySkipped: true, expectEmptyMediaId: false},
78
- ].forEach(({reconnect, turnDiscoverySkipped, expectEmptyMediaId}) =>
79
- it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
80
- reconnect ? '' : 'not '
81
- }reconnecting and TURN discovery is ${
82
- turnDiscoverySkipped ? 'skipped' : 'not skipped'
83
- }`, async () => {
84
- const roap = new Roap({}, {parent: 'fake'});
85
-
86
- sinon.stub(roap.turnDiscovery, 'isSkipped').resolves(turnDiscoverySkipped);
87
-
88
- await roap.sendRoapMediaRequest({
89
- meeting,
90
- sdp: 'sdp',
91
- reconnect,
92
- roapSeq: 1,
93
- });
94
-
95
- const expectedRoapMessage = {
96
- messageType: 'OFFER',
97
- sdps: ['sdp'],
98
- version: '2',
99
- seq: 2,
100
- tieBreaker: 4294967294,
101
- };
102
-
103
- assert.calledOnce(sendRoapStub);
104
- assert.calledWith(sendRoapStub, {
105
- roapMessage: expectedRoapMessage,
106
- correlationId: meeting.correlationId,
107
- locusSelfUrl: meeting.selfUrl,
108
- mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
109
- audioMuted: meeting.audio?.isLocallyMuted(),
110
- videoMuted: meeting.video?.isLocallyMuted(),
111
- meetingId: meeting.id,
112
- });
113
-
114
- assert.calledTwice(roapHandlerSubmitStub);
115
- assert.calledWith(roapHandlerSubmitStub, {
116
- type: ROAP.SEND_ROAP_MSG,
117
- msg: expectedRoapMessage,
118
- correlationId: meeting.correlationId,
119
- });
120
- assert.calledWith(roapHandlerSubmitStub, {
121
- type: ROAP.SEND_ROAP_MSG_SUCCESS,
122
- seq: 2,
123
- correlationId: meeting.correlationId,
124
- });
125
-
126
- assert.calledOnce(meeting.setRoapSeq);
127
- assert.calledWith(meeting.setRoapSeq, 2);
128
- })
129
- );
61
+ sendRoapStub = sinon.stub(RoapRequest.prototype, 'sendRoap').resolves({});
62
+ roapHandlerSubmitStub = sinon.stub(RoapHandler.prototype, 'submit');
63
+ meeting.setRoapSeq.resetHistory();
130
64
  });
65
+
66
+ afterEach(() => {
67
+ sinon.restore();
68
+ });
69
+
70
+ [
71
+ {reconnect: true, enableTurnDiscovery: true, expectEmptyMediaId: false},
72
+ {reconnect: true, enableTurnDiscovery: false, expectEmptyMediaId: true},
73
+ {reconnect: false, enableTurnDiscovery: true, expectEmptyMediaId: false},
74
+ {reconnect: false, enableTurnDiscovery: false, expectEmptyMediaId: false},
75
+ ].forEach(({reconnect, enableTurnDiscovery, expectEmptyMediaId}) =>
76
+ it(`sends roap OFFER with ${expectEmptyMediaId ? 'empty ' : ''}mediaId when ${
77
+ reconnect ? '' : 'not '
78
+ }reconnecting and TURN discovery is ${
79
+ enableTurnDiscovery ? 'enabled' : 'disabled'
80
+ }`, async () => {
81
+ meeting.config.experimental.enableTurnDiscovery = enableTurnDiscovery;
82
+
83
+ const roap = new Roap({}, {parent: 'fake'});
84
+
85
+ await roap.sendRoapMediaRequest({
86
+ meeting,
87
+ sdp: 'sdp',
88
+ reconnect,
89
+ roapSeq: 1,
90
+ });
91
+
92
+ const expectedRoapMessage = {
93
+ messageType: 'OFFER',
94
+ sdps: ['sdp'],
95
+ version: '2',
96
+ seq: 2,
97
+ tieBreaker: 4294967294,
98
+ };
99
+
100
+ assert.calledOnce(sendRoapStub);
101
+ assert.calledWith(sendRoapStub, {
102
+ roapMessage: expectedRoapMessage,
103
+ correlationId: meeting.correlationId,
104
+ locusSelfUrl: meeting.selfUrl,
105
+ mediaId: expectEmptyMediaId ? '' : meeting.mediaId,
106
+ audioMuted: meeting.audio?.isLocallyMuted(),
107
+ videoMuted: meeting.video?.isLocallyMuted(),
108
+ meetingId: meeting.id,
109
+ });
110
+
111
+ assert.calledTwice(roapHandlerSubmitStub);
112
+ assert.calledWith(roapHandlerSubmitStub, {
113
+ type: ROAP.SEND_ROAP_MSG,
114
+ msg: expectedRoapMessage,
115
+ correlationId: meeting.correlationId,
116
+ });
117
+ assert.calledWith(roapHandlerSubmitStub, {
118
+ type: ROAP.SEND_ROAP_MSG_SUCCESS,
119
+ seq: 2,
120
+ correlationId: meeting.correlationId,
121
+ });
122
+
123
+ assert.calledOnce(meeting.setRoapSeq);
124
+ assert.calledWith(meeting.setRoapSeq, 2);
125
+ })
126
+ );
131
127
  });
132
128
  });
@@ -352,27 +352,6 @@ describe('TurnDiscovery', () => {
352
352
  });
353
353
  });
354
354
 
355
- describe('isSkipped', () => {
356
- [
357
- {enabledInConfig: true, isAnyClusterReachable: true, expectedIsSkipped: true},
358
- {enabledInConfig: true, isAnyClusterReachable: false, expectedIsSkipped: false},
359
- {enabledInConfig: false, isAnyClusterReachable: true, expectedIsSkipped: true},
360
- {enabledInConfig: false, isAnyClusterReachable: false, expectedIsSkipped: true},
361
- ].forEach(({enabledInConfig, isAnyClusterReachable, expectedIsSkipped}) => {
362
- it(`returns ${expectedIsSkipped} when TURN discovery is ${enabledInConfig ? '' : 'not '} enabled in config and isAnyClusterReachable() returns ${isAnyClusterReachable ? 'true' : 'false'}`, async () => {
363
- testMeeting.config.experimental.enableTurnDiscovery = enabledInConfig;
364
-
365
- sinon.stub(testMeeting.webex.meetings.reachability, 'isAnyClusterReachable').resolves(isAnyClusterReachable);
366
-
367
- const td = new TurnDiscovery(mockRoapRequest);
368
-
369
- const isSkipped = await td.isSkipped(testMeeting);
370
-
371
- assert.equal(isSkipped, expectedIsSkipped);
372
- })
373
- })
374
- })
375
-
376
355
  describe('handleTurnDiscoveryResponse', () => {
377
356
  it("doesn't do anything if turn discovery was not started", () => {
378
357
  const td = new TurnDiscovery(mockRoapRequest);
@@ -82,22 +82,6 @@ describe('plugin-meetings', () => {
82
82
  let pc;
83
83
  let networkQualityMonitor;
84
84
  let statsAnalyzer;
85
- const statusResultOutboundRTP = {
86
- type: 'outbound-rtp',
87
- frameHeight: 720,
88
- frameWidth: 1280,
89
- packetsLost: 11,
90
- framesSent: 105,
91
- hugeFramesSent: 1,
92
- framesEncoded: 102,
93
- rttThreshold: 501,
94
- jitterThreshold: 501,
95
- jitterBufferDelay: 288.131459,
96
- jitterBufferEmittedCount: 4013,
97
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
98
- bytesSent: 1233,
99
- totalPacketsSent: 100,
100
- };
101
85
 
102
86
  let receivedEventsData = {
103
87
  local: {},
@@ -193,12 +177,6 @@ describe('plugin-meetings', () => {
193
177
  statsAnalyzer.on(EVENTS.REMOTE_MEDIA_STOPPED, (data) => {
194
178
  receivedEventsData.remote.stopped = data;
195
179
  });
196
- statsAnalyzer.on(EVENTS.NO_FRAMES_SENT, (data) => {
197
- receivedEventsData.noFramesSent = data;
198
- });
199
- statsAnalyzer.on(EVENTS.NO_VIDEO_ENCODED, (data) => {
200
- receivedEventsData.noVideoEncoded = data;
201
- });
202
180
  });
203
181
 
204
182
  afterEach(() => {
@@ -304,135 +282,6 @@ describe('plugin-meetings', () => {
304
282
 
305
283
  checkReceivedEvent({expected: {remote: {stopped: {type: 'video'}}}});
306
284
  });
307
-
308
- const checkStats = (type) => {
309
- const statsResult = {
310
- height: 720,
311
- width: 1280,
312
- jitterBufferDelay: 288.131459,
313
- jitterBufferEmittedCount: 4013,
314
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
315
- avgJitterDelay: 0.07179951632195365,
316
- };
317
- if (type === 'inbound-rtp') {
318
- statsResult.framesDecoded = 4013;
319
- statsResult.framesDropped = 0;
320
- statsResult.framesReceived = 4016;
321
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.video.recv, statsResult);
322
- } else if (type === 'outbound-rtp') {
323
- statsResult.framesSent = 105;
324
- statsResult.hugeFramesSent = 1;
325
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.video.send, statsResult);
326
- }
327
- };
328
-
329
- it('processes track results and populate statsResults.resolutions object when type is inbound-rtp with video', async () => {
330
- await startStatsAnalyzer({expected: {receiveVideo: true}});
331
- const statusResultInboundRTP = {
332
- type: 'inbound-rtp',
333
- frameHeight: 720,
334
- frameWidth: 1280,
335
- packetsLost: 11,
336
- rttThreshold: 501,
337
- jitterThreshold: 501,
338
- framesDecoded: 4013,
339
- framesDropped: 0,
340
- framesReceived: 4016,
341
- jitterBufferDelay: 288.131459,
342
- jitterBufferEmittedCount: 4013,
343
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
344
- };
345
- await statsAnalyzer.parseGetStatsResult(statusResultInboundRTP, 'video');
346
- checkStats('inbound-rtp');
347
- });
348
- it('processes track results and populate statsResults.resolutions object when type is outbound-rtp with video', async () => {
349
- await startStatsAnalyzer({expected: {receiveVideo: true}});
350
-
351
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
352
- checkStats('outbound-rtp');
353
- });
354
-
355
- it('doesnot processes track results with audio', async () => {
356
- await startStatsAnalyzer({expected: {receiveAudio: true}});
357
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'audio');
358
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.audio, undefined);
359
- });
360
-
361
- it('emits NO_FRAMES_ENCODED when frames are not being encoded', async () => {
362
- const expected = {mediaType: 'video'};
363
- await startStatsAnalyzer({expected: {sendVideo: true}});
364
-
365
- statsAnalyzer.lastStatsResults.video.send = {framesEncoded: 102, totalPacketsSent: 106};
366
-
367
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
368
-
369
- statsAnalyzer.compareLastStatsResult();
370
- assert.deepEqual(receivedEventsData.noVideoEncoded, expected);
371
- });
372
-
373
- it('emits NO_FRAMES_SENT when frames are not being sent but frames are being encoded', async () => {
374
- await startStatsAnalyzer({expected: {sendVideo: true}});
375
-
376
- const expected = {mediaType: 'video'};
377
-
378
- statsAnalyzer.lastStatsResults.video.send = {
379
- framesEncoded: 10,
380
- framesSent: 105,
381
- totalPacketsSent: 106,
382
- };
383
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
384
-
385
- statsAnalyzer.compareLastStatsResult();
386
- assert.deepEqual(receivedEventsData.noFramesSent, expected);
387
- });
388
-
389
- it('doesnot emits NO_FRAMES_SENT when last emitted event is LOCAL_MEDIA_STOPPED', async () => {
390
- statsAnalyzer.lastEmittedStartStopEvent.video.local = EVENTS.LOCAL_MEDIA_STOPPED;
391
-
392
- await startStatsAnalyzer({expected: {sendVideo: true}});
393
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
394
-
395
- statsAnalyzer.compareLastStatsResult();
396
- assert.deepEqual(receivedEventsData.noFramesSent, undefined);
397
- });
398
-
399
- it('emits NO_FRAMES_ENCODED when frames are not being encoded for share', async () => {
400
- const expected = {mediaType: 'share'};
401
- await startStatsAnalyzer({expected: {sendShare: true}});
402
-
403
- statsAnalyzer.lastStatsResults.share.send = {framesEncoded: 102, totalPacketsSent: 106};
404
-
405
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
406
-
407
- statsAnalyzer.compareLastStatsResult();
408
- assert.deepEqual(receivedEventsData.noVideoEncoded, expected);
409
- });
410
-
411
- it('emits NO_FRAMES_SENT when frames are not being sent but frames are being encoded for share', async () => {
412
- const expected = {mediaType: 'share'};
413
- await startStatsAnalyzer({expected: {sendShare: true}});
414
-
415
- statsAnalyzer.lastStatsResults.share.send = {
416
- framesEncoded: 10,
417
- framesSent: 105,
418
- totalPacketsSent: 106,
419
- };
420
-
421
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
422
-
423
- statsAnalyzer.compareLastStatsResult();
424
- assert.deepEqual(receivedEventsData.noFramesSent, expected);
425
- });
426
-
427
- it('doesnot emits NO_FRAMES_SENT when last emitted event is LOCAL_MEDIA_STOPPED for share', async () => {
428
- statsAnalyzer.lastEmittedStartStopEvent.video.local = EVENTS.LOCAL_MEDIA_STOPPED;
429
-
430
- await startStatsAnalyzer({expected: {sendShare: true}});
431
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
432
-
433
- statsAnalyzer.compareLastStatsResult();
434
- assert.deepEqual(receivedEventsData.noFramesSent, undefined);
435
- });
436
285
  });
437
286
  });
438
287
  });
@@ -1,9 +0,0 @@
1
- /// <reference types="lodash" />
2
- declare const _default: ((agent?: any) => {
3
- getOSName: () => any;
4
- getOSVersion: () => any;
5
- getBrowserName: () => any;
6
- getBrowserVersion: () => any;
7
- isBrowser: (name: any) => boolean;
8
- }) & import("lodash").MemoizedFunction;
9
- export default _default;
@@ -1,48 +0,0 @@
1
- /**
2
- * @class Collection
3
- */
4
- export default class Collection {
5
- namespace: string;
6
- propertyName: string;
7
- /**
8
- * @param {String} property
9
- * @memberof Collection
10
- */
11
- constructor(property: string);
12
- /**
13
- * @param {String} id ID of the thing stuffed into the collection at id location
14
- * @returns {Any} returns whatever is being stuffed into the collection
15
- * @public
16
- * @memberof Collection
17
- */
18
- get(id: string): any;
19
- /**
20
- * @param {String} id the id of the meeting info instance to add to the collection
21
- * @param {Any} value the thing to set in the collection
22
- * @returns {Any} returns the thing just put in the collection
23
- * @public
24
- * @memberof Collection
25
- */
26
- set(id: string, value: any): any;
27
- /**
28
- * remove the thing at the id
29
- * @param {String} id ID of the thing you wish to delete from the collection
30
- * @returns {undefined}
31
- * @public
32
- * @memberof Collection
33
- */
34
- delete(id: string): void;
35
- /**
36
- * @returns {Object} returns an object map of things stuffed into the collection
37
- * @public
38
- * @memberof Collection
39
- */
40
- getAll(): any;
41
- /**
42
- * @param {Object} set the replacement object
43
- * @returns {Object} returns an object map of things stuffed into the collection
44
- * @public
45
- * @memberof Collection
46
- */
47
- setAll(set: object): any;
48
- }
@@ -1,2 +0,0 @@
1
- declare const StaticConfig: any;
2
- export default StaticConfig;
@@ -1,15 +0,0 @@
1
- /**
2
- * Extended Error object to signify captcha related errors
3
- */
4
- export default class CaptchaError extends Error {
5
- code: any;
6
- error: any;
7
- sdkMessage: any;
8
- /**
9
- *
10
- * @constructor
11
- * @param {String} [message]
12
- * @param {Object} [error]
13
- */
14
- constructor(message?: string, error?: any);
15
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * Extended Error object to signify the intent to join for unclaimed PMR scenarios
3
- */
4
- export default class IntentToJoinError extends Error {
5
- code: any;
6
- error: any;
7
- joinIntentRequired: any;
8
- sdkMessage: any;
9
- /**
10
- *
11
- * @constructor
12
- * @param {String} [message]
13
- * @param {Object} [error]
14
- */
15
- constructor(message?: string, error?: any);
16
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * Extended Error object to signify a join meeting error
3
- */
4
- export default class JoinMeetingError extends Error {
5
- code: any;
6
- error: any;
7
- joinOptions: any;
8
- sdkMessage: any;
9
- /**
10
- *
11
- * @constructor
12
- * @param {Object} [options]
13
- * @param {String} [message]
14
- * @param {Object} [error]
15
- */
16
- constructor(options?: object, message?: string, error?: any);
17
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Extended Error object for media errors
3
- */
4
- export default class MediaError extends Error {
5
- code: any;
6
- error: any;
7
- sdkMessage: any;
8
- /**
9
- *
10
- * @constructor
11
- * @param {String} [message]
12
- * @param {Object} [error]
13
- */
14
- constructor(message?: string, error?: any);
15
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Extended Error object for general parameter errors
3
- */
4
- export default class ParameterError extends Error {
5
- sdkMessage: string;
6
- error: null;
7
- code: number;
8
- /**
9
- *
10
- * @constructor
11
- * @param {String} [message]
12
- * @param {Object} [error]
13
- */
14
- constructor(message?: string, error?: any);
15
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Extended Error object to signify password related errors
3
- */
4
- export default class PasswordError extends Error {
5
- code: any;
6
- error: any;
7
- sdkMessage: any;
8
- /**
9
- *
10
- * @constructor
11
- * @param {String} [message]
12
- * @param {Object} [error]
13
- */
14
- constructor(message?: string, error?: any);
15
- }
@@ -1,14 +0,0 @@
1
- /**
2
- * Extended Error object for general parameter errors
3
- */
4
- export default class PermissionError extends Error {
5
- code: any;
6
- error: any;
7
- sdkMessage: any;
8
- /**
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message?: string, error?: any);
14
- }
@@ -1,9 +0,0 @@
1
- /**
2
- *
3
- *
4
- * @export
5
- * @class ReconnectInProgress
6
- * @extends {Error}
7
- */
8
- export default class ReconnectInProgress extends Error {
9
- }