@webex/plugin-meetings 2.59.7 → 2.59.8-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 (152) 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/meetings/collection.js +2 -2
  26. package/dist/meetings/collection.js.map +1 -1
  27. package/dist/members/index.js +2 -2
  28. package/dist/members/index.js.map +1 -1
  29. package/dist/metrics/constants.js +0 -2
  30. package/dist/metrics/constants.js.map +1 -1
  31. package/dist/metrics/index.js +2 -2
  32. package/dist/metrics/index.js.map +1 -1
  33. package/dist/reachability/index.js +9 -2
  34. package/dist/reachability/index.js.map +1 -1
  35. package/dist/roap/index.js +12 -13
  36. package/dist/roap/index.js.map +1 -1
  37. package/dist/roap/turnDiscovery.js +44 -130
  38. package/dist/roap/turnDiscovery.js.map +1 -1
  39. package/dist/statsAnalyzer/global.js +12 -4
  40. package/dist/statsAnalyzer/global.js.map +1 -1
  41. package/dist/statsAnalyzer/index.js +14 -56
  42. package/dist/statsAnalyzer/index.js.map +1 -1
  43. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  44. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  45. package/package.json +22 -21
  46. package/src/config.ts +2 -2
  47. package/src/constants.ts +0 -2
  48. package/src/meeting/index.ts +0 -35
  49. package/src/metrics/constants.ts +0 -2
  50. package/src/roap/index.ts +10 -14
  51. package/src/roap/turnDiscovery.ts +20 -48
  52. package/src/statsAnalyzer/global.ts +10 -2
  53. package/src/statsAnalyzer/index.ts +17 -80
  54. package/test/unit/spec/meeting/index.js +6 -77
  55. package/test/unit/spec/roap/index.ts +80 -84
  56. package/test/unit/spec/roap/turnDiscovery.ts +0 -21
  57. package/test/unit/spec/stats-analyzer/index.js +0 -151
  58. package/dist/common/browser-detection.d.ts +0 -9
  59. package/dist/common/collection.d.ts +0 -48
  60. package/dist/common/config.d.ts +0 -2
  61. package/dist/common/errors/captcha-error.d.ts +0 -15
  62. package/dist/common/errors/intent-to-join.d.ts +0 -16
  63. package/dist/common/errors/join-meeting.d.ts +0 -17
  64. package/dist/common/errors/media.d.ts +0 -15
  65. package/dist/common/errors/parameter.d.ts +0 -15
  66. package/dist/common/errors/password-error.d.ts +0 -15
  67. package/dist/common/errors/permission.d.ts +0 -14
  68. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  69. package/dist/common/errors/reconnection.d.ts +0 -15
  70. package/dist/common/errors/stats.d.ts +0 -15
  71. package/dist/common/errors/webex-errors.d.ts +0 -81
  72. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  73. package/dist/common/events/events-scope.d.ts +0 -17
  74. package/dist/common/events/events.d.ts +0 -12
  75. package/dist/common/events/trigger-proxy.d.ts +0 -2
  76. package/dist/common/events/util.d.ts +0 -2
  77. package/dist/common/logs/logger-config.d.ts +0 -2
  78. package/dist/common/logs/logger-proxy.d.ts +0 -2
  79. package/dist/common/logs/request.d.ts +0 -34
  80. package/dist/common/queue.d.ts +0 -32
  81. package/dist/config.d.ts +0 -73
  82. package/dist/constants.d.ts +0 -926
  83. package/dist/controls-options-manager/constants.d.ts +0 -4
  84. package/dist/controls-options-manager/enums.d.ts +0 -5
  85. package/dist/controls-options-manager/index.d.ts +0 -120
  86. package/dist/controls-options-manager/util.d.ts +0 -7
  87. package/dist/index.d.ts +0 -4
  88. package/dist/locus-info/controlsUtils.d.ts +0 -2
  89. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  90. package/dist/locus-info/fullState.d.ts +0 -2
  91. package/dist/locus-info/hostUtils.d.ts +0 -2
  92. package/dist/locus-info/index.d.ts +0 -269
  93. package/dist/locus-info/infoUtils.d.ts +0 -2
  94. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  95. package/dist/locus-info/parser.d.ts +0 -212
  96. package/dist/locus-info/selfUtils.d.ts +0 -2
  97. package/dist/media/index.d.ts +0 -32
  98. package/dist/media/properties.d.ts +0 -108
  99. package/dist/media/util.d.ts +0 -2
  100. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  101. package/dist/meeting/effectsState.d.ts +0 -42
  102. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  103. package/dist/meeting/index.d.ts +0 -1622
  104. package/dist/meeting/muteState.d.ts +0 -116
  105. package/dist/meeting/request.d.ts +0 -255
  106. package/dist/meeting/state.d.ts +0 -9
  107. package/dist/meeting/util.d.ts +0 -2
  108. package/dist/meeting-info/collection.d.ts +0 -20
  109. package/dist/meeting-info/index.d.ts +0 -57
  110. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  111. package/dist/meeting-info/request.d.ts +0 -22
  112. package/dist/meeting-info/util.d.ts +0 -2
  113. package/dist/meeting-info/utilv2.d.ts +0 -2
  114. package/dist/meetings/collection.d.ts +0 -23
  115. package/dist/meetings/index.d.ts +0 -296
  116. package/dist/meetings/request.d.ts +0 -27
  117. package/dist/meetings/util.d.ts +0 -18
  118. package/dist/member/index.d.ts +0 -147
  119. package/dist/member/member.types.d.ts +0 -11
  120. package/dist/member/util.d.ts +0 -2
  121. package/dist/members/collection.d.ts +0 -24
  122. package/dist/members/index.d.ts +0 -298
  123. package/dist/members/request.d.ts +0 -50
  124. package/dist/members/util.d.ts +0 -2
  125. package/dist/metrics/config.d.ts +0 -169
  126. package/dist/metrics/constants.d.ts +0 -59
  127. package/dist/metrics/index.d.ts +0 -152
  128. package/dist/networkQualityMonitor/index.d.ts +0 -70
  129. package/dist/peer-connection-manager/index.d.ts +0 -6
  130. package/dist/peer-connection-manager/util.d.ts +0 -6
  131. package/dist/personal-meeting-room/index.d.ts +0 -47
  132. package/dist/personal-meeting-room/request.d.ts +0 -14
  133. package/dist/personal-meeting-room/util.d.ts +0 -2
  134. package/dist/reachability/index.d.ts +0 -139
  135. package/dist/reachability/request.d.ts +0 -35
  136. package/dist/reactions/reactions.d.ts +0 -4
  137. package/dist/reactions/reactions.type.d.ts +0 -32
  138. package/dist/reconnection-manager/index.d.ts +0 -112
  139. package/dist/recording-controller/enums.d.ts +0 -7
  140. package/dist/recording-controller/index.d.ts +0 -193
  141. package/dist/recording-controller/util.d.ts +0 -13
  142. package/dist/roap/collection.d.ts +0 -10
  143. package/dist/roap/handler.d.ts +0 -47
  144. package/dist/roap/index.d.ts +0 -116
  145. package/dist/roap/request.d.ts +0 -35
  146. package/dist/roap/state.d.ts +0 -9
  147. package/dist/roap/turnDiscovery.d.ts +0 -81
  148. package/dist/roap/util.d.ts +0 -2
  149. package/dist/statsAnalyzer/global.d.ts +0 -118
  150. package/dist/statsAnalyzer/index.d.ts +0 -193
  151. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  152. 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', () => {
@@ -3711,17 +3646,14 @@ describe('plugin-meetings', () => {
3711
3646
  describe('#setUpLocusServicesListener', () => {
3712
3647
  it('listens to the locus services update event', (done) => {
3713
3648
  const newLocusServices = {
3714
- services: {
3715
- record: {
3716
- url: 'url',
3649
+ services: {
3650
+ record: {
3651
+ url: 'url',
3652
+ }
3717
3653
  },
3718
- },
3719
3654
  };
3720
3655
 
3721
- meeting.recordingController = {
3722
- setServiceUrl: sinon.stub().returns(undefined),
3723
- setSessionId: sinon.stub().returns(undefined),
3724
- };
3656
+ meeting.recordingController = {setServiceUrl: sinon.stub().returns(undefined), setSessionId: sinon.stub().returns(undefined)};
3725
3657
 
3726
3658
  meeting.locusInfo.emit(
3727
3659
  {function: 'test', file: 'test'},
@@ -3729,10 +3661,7 @@ describe('plugin-meetings', () => {
3729
3661
  newLocusServices
3730
3662
  );
3731
3663
 
3732
- assert.calledWith(
3733
- meeting.recordingController.setServiceUrl,
3734
- newLocusServices.services.record.url
3735
- );
3664
+ assert.calledWith(meeting.recordingController.setServiceUrl, newLocusServices.services.record.url);
3736
3665
  assert.calledOnce(meeting.recordingController.setSessionId);
3737
3666
  done();
3738
3667
  });
@@ -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
- }
@@ -1,15 +0,0 @@
1
- /**
2
- * Extended Error object to signify the intent to join for unclaimed PMR scenarios
3
- */
4
- export default class ReconnectionError 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
- }