@webex/plugin-meetings 3.3.1 → 3.4.0-next.10

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 (138) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +7 -2
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/constants.js +11 -4
  5. package/dist/constants.js.map +1 -1
  6. package/dist/interpretation/index.js +1 -1
  7. package/dist/interpretation/siLanguage.js +1 -1
  8. package/dist/locus-info/selfUtils.js +0 -5
  9. package/dist/locus-info/selfUtils.js.map +1 -1
  10. package/dist/media/MediaConnectionAwaiter.js +70 -15
  11. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  12. package/dist/media/index.js +18 -9
  13. package/dist/media/index.js.map +1 -1
  14. package/dist/meeting/connectionStateHandler.js +67 -0
  15. package/dist/meeting/connectionStateHandler.js.map +1 -0
  16. package/dist/meeting/index.js +576 -374
  17. package/dist/meeting/index.js.map +1 -1
  18. package/dist/meeting/locusMediaRequest.js +7 -0
  19. package/dist/meeting/locusMediaRequest.js.map +1 -1
  20. package/dist/meeting/muteState.js +6 -1
  21. package/dist/meeting/muteState.js.map +1 -1
  22. package/dist/meeting/util.js +1 -0
  23. package/dist/meeting/util.js.map +1 -1
  24. package/dist/meeting-info/index.js +4 -4
  25. package/dist/meeting-info/index.js.map +1 -1
  26. package/dist/meeting-info/meeting-info-v2.js +2 -2
  27. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  28. package/dist/meeting-info/util.js +17 -17
  29. package/dist/meeting-info/util.js.map +1 -1
  30. package/dist/meeting-info/utilv2.js +16 -16
  31. package/dist/meeting-info/utilv2.js.map +1 -1
  32. package/dist/meetings/collection.js +1 -1
  33. package/dist/meetings/collection.js.map +1 -1
  34. package/dist/meetings/index.js +41 -35
  35. package/dist/meetings/index.js.map +1 -1
  36. package/dist/meetings/meetings.types.js +8 -0
  37. package/dist/meetings/meetings.types.js.map +1 -1
  38. package/dist/meetings/util.js +3 -2
  39. package/dist/meetings/util.js.map +1 -1
  40. package/dist/metrics/constants.js +2 -1
  41. package/dist/metrics/constants.js.map +1 -1
  42. package/dist/metrics/index.js +57 -0
  43. package/dist/metrics/index.js.map +1 -1
  44. package/dist/personal-meeting-room/index.js +1 -1
  45. package/dist/personal-meeting-room/index.js.map +1 -1
  46. package/dist/reachability/clusterReachability.js +108 -53
  47. package/dist/reachability/clusterReachability.js.map +1 -1
  48. package/dist/reachability/index.js +546 -115
  49. package/dist/reachability/index.js.map +1 -1
  50. package/dist/reconnection-manager/index.js +1 -1
  51. package/dist/reconnection-manager/index.js.map +1 -1
  52. package/dist/rtcMetrics/index.js +26 -6
  53. package/dist/rtcMetrics/index.js.map +1 -1
  54. package/dist/types/constants.d.ts +11 -3
  55. package/dist/types/media/MediaConnectionAwaiter.d.ts +24 -4
  56. package/dist/types/meeting/connectionStateHandler.d.ts +30 -0
  57. package/dist/types/meeting/index.d.ts +28 -8
  58. package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
  59. package/dist/types/meeting-info/index.d.ts +3 -2
  60. package/dist/types/meeting-info/meeting-info-v2.d.ts +3 -2
  61. package/dist/types/meeting-info/util.d.ts +5 -4
  62. package/dist/types/meeting-info/utilv2.d.ts +3 -2
  63. package/dist/types/meetings/collection.d.ts +3 -2
  64. package/dist/types/meetings/index.d.ts +6 -4
  65. package/dist/types/meetings/meetings.types.d.ts +9 -0
  66. package/dist/types/metrics/constants.d.ts +1 -0
  67. package/dist/types/metrics/index.d.ts +15 -0
  68. package/dist/types/reachability/clusterReachability.d.ts +31 -3
  69. package/dist/types/reachability/index.d.ts +107 -4
  70. package/dist/types/rtcMetrics/index.d.ts +11 -1
  71. package/dist/webinar/index.js +1 -1
  72. package/package.json +23 -23
  73. package/src/breakouts/index.ts +7 -1
  74. package/src/constants.ts +13 -17
  75. package/src/locus-info/selfUtils.ts +0 -5
  76. package/src/media/MediaConnectionAwaiter.ts +89 -14
  77. package/src/media/index.ts +18 -9
  78. package/src/meeting/connectionStateHandler.ts +65 -0
  79. package/src/meeting/index.ts +541 -298
  80. package/src/meeting/locusMediaRequest.ts +5 -0
  81. package/src/meeting/muteState.ts +6 -1
  82. package/src/meeting/util.ts +1 -0
  83. package/src/meeting-info/index.ts +9 -6
  84. package/src/meeting-info/meeting-info-v2.ts +4 -4
  85. package/src/meeting-info/util.ts +23 -28
  86. package/src/meeting-info/utilv2.ts +18 -24
  87. package/src/meetings/collection.ts +3 -3
  88. package/src/meetings/index.ts +43 -43
  89. package/src/meetings/meetings.types.ts +11 -0
  90. package/src/meetings/util.ts +5 -4
  91. package/src/metrics/constants.ts +1 -0
  92. package/src/metrics/index.ts +44 -0
  93. package/src/personal-meeting-room/index.ts +2 -2
  94. package/src/reachability/clusterReachability.ts +86 -25
  95. package/src/reachability/index.ts +364 -30
  96. package/src/reconnection-manager/index.ts +1 -1
  97. package/src/rtcMetrics/index.ts +25 -5
  98. package/test/unit/spec/breakouts/index.ts +51 -32
  99. package/test/unit/spec/locus-info/selfUtils.js +25 -23
  100. package/test/unit/spec/media/MediaConnectionAwaiter.ts +131 -32
  101. package/test/unit/spec/media/index.ts +75 -34
  102. package/test/unit/spec/meeting/connectionStateHandler.ts +102 -0
  103. package/test/unit/spec/meeting/index.js +807 -185
  104. package/test/unit/spec/meeting/locusMediaRequest.ts +7 -0
  105. package/test/unit/spec/meeting/muteState.js +24 -0
  106. package/test/unit/spec/meeting-info/index.js +4 -4
  107. package/test/unit/spec/meeting-info/meetinginfov2.js +24 -28
  108. package/test/unit/spec/meeting-info/request.js +2 -2
  109. package/test/unit/spec/meeting-info/utilv2.js +41 -49
  110. package/test/unit/spec/meetings/index.js +44 -3
  111. package/test/unit/spec/metrics/index.js +126 -0
  112. package/test/unit/spec/multistream/mediaRequestManager.ts +2 -2
  113. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -2
  114. package/test/unit/spec/reachability/clusterReachability.ts +116 -22
  115. package/test/unit/spec/reachability/index.ts +1398 -131
  116. package/test/unit/spec/rtcMetrics/index.ts +32 -0
  117. package/dist/mediaQualityMetrics/config.js +0 -321
  118. package/dist/mediaQualityMetrics/config.js.map +0 -1
  119. package/dist/networkQualityMonitor/index.js +0 -227
  120. package/dist/networkQualityMonitor/index.js.map +0 -1
  121. package/dist/statsAnalyzer/global.js +0 -44
  122. package/dist/statsAnalyzer/global.js.map +0 -1
  123. package/dist/statsAnalyzer/index.js +0 -1072
  124. package/dist/statsAnalyzer/index.js.map +0 -1
  125. package/dist/statsAnalyzer/mqaUtil.js +0 -368
  126. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  127. package/dist/types/mediaQualityMetrics/config.d.ts +0 -247
  128. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  129. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  130. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  131. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  132. package/src/mediaQualityMetrics/config.ts +0 -255
  133. package/src/networkQualityMonitor/index.ts +0 -211
  134. package/src/statsAnalyzer/global.ts +0 -37
  135. package/src/statsAnalyzer/index.ts +0 -1318
  136. package/src/statsAnalyzer/mqaUtil.ts +0 -463
  137. package/test/unit/spec/networkQualityMonitor/index.js +0 -99
  138. package/test/unit/spec/stats-analyzer/index.js +0 -1819
@@ -1,3 +1,4 @@
1
+ import 'jsdom-global/register';
1
2
  import RtcMetrics from '@webex/plugin-meetings/src/rtcMetrics';
2
3
  import MockWebex from '@webex/test-helper-mock-webex';
3
4
  import {assert} from '@webex/test-helper-chai';
@@ -119,4 +120,35 @@ describe('RtcMetrics', () => {
119
120
  metrics.addMetrics({ name: 'stats-report', payload: [STATS_WITH_IP] });
120
121
  assert.calledOnce(anonymizeIpSpy);
121
122
  })
123
+
124
+ it('should send metrics on first stats-report', () => {
125
+ assert.callCount(webex.request, 0);
126
+
127
+ metrics.addMetrics(FAKE_METRICS_ITEM);
128
+ assert.callCount(webex.request, 0);
129
+
130
+ // first stats-report should trigger a call to webex.request
131
+ metrics.addMetrics({ name: 'stats-report', payload: [STATS_WITH_IP] });
132
+ assert.callCount(webex.request, 1);
133
+ });
134
+
135
+ it('should send metrics on first stats-report after a new connection', () => {
136
+ assert.callCount(webex.request, 0);
137
+
138
+ // first stats-report should trigger a call to webex.request
139
+ metrics.addMetrics({ name: 'stats-report', payload: [STATS_WITH_IP] });
140
+ assert.callCount(webex.request, 1);
141
+
142
+ // subsequent stats-report doesn't trigger it
143
+ metrics.addMetrics({ name: 'stats-report', payload: [STATS_WITH_IP] });
144
+ assert.callCount(webex.request, 1);
145
+
146
+ // now, simulate a failure - that triggers a new connection and upload of the metrics
147
+ metrics.addMetrics(FAILURE_METRICS_ITEM);
148
+ assert.callCount(webex.request, 2);
149
+
150
+ // and another stats-report should trigger another upload of the metrics
151
+ metrics.addMetrics({ name: 'stats-report', payload: [STATS_WITH_IP] });
152
+ assert.callCount(webex.request, 3);
153
+ });
122
154
  });
@@ -1,321 +0,0 @@
1
- "use strict";
2
-
3
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
- _Object$defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.emptyVideoTransmitStream = exports.emptyVideoTransmit = exports.emptyVideoReceiveStream = exports.emptyVideoReceive = exports.emptyMqaInterval = exports.emptyAudioTransmitStream = exports.emptyAudioTransmit = exports.emptyAudioReceiveStream = exports.emptyAudioReceive = void 0;
8
- var emptyMqaInterval = exports.emptyMqaInterval = {
9
- audioReceive: [],
10
- audioTransmit: [],
11
- intervalMetadata: {
12
- peerReflexiveIP: '0.0.0.0',
13
- peripherals: [],
14
- processAverageCPU: 0,
15
- processMaximumCPU: 0,
16
- systemAverageCPU: 0,
17
- systemMaximumCPU: 0
18
- },
19
- networkType: '',
20
- intervalNumber: 0,
21
- videoReceive: [],
22
- videoTransmit: []
23
- };
24
- var emptyAudioReceive = exports.emptyAudioReceive = {
25
- common: {
26
- common: {
27
- direction: 'inactive',
28
- isMain: true,
29
- mariFecEnabled: false,
30
- mariRtxEnabled: false,
31
- mariQosEnabled: false,
32
- mariLiteEnabled: false,
33
- multistreamEnabled: false
34
- },
35
- dtlsBitrate: 0,
36
- dtlsPackets: 0,
37
- fecBitrate: 0,
38
- fecPackets: 0,
39
- maxBitrate: 0,
40
- mediaHopByHopLost: 0,
41
- rtcpBitrate: 0,
42
- rtcpPackets: 0,
43
- rtpBitrate: 0,
44
- rtpHopByHopLost: 0,
45
- rtpPackets: 0,
46
- rtpRecovered: 0,
47
- rtxBitrate: 0,
48
- rtxPackets: 0,
49
- srtcpUnprotectErrors: 0,
50
- srtpUnprotectErrors: 0,
51
- stunBitrate: 0,
52
- stunPackets: 0,
53
- transportType: 'UDP'
54
- },
55
- streams: []
56
- };
57
- var emptyAudioReceiveStream = exports.emptyAudioReceiveStream = {
58
- common: {
59
- codec: 'opus',
60
- concealedFrames: 0,
61
- csi: [],
62
- maxConcealRunLength: 0,
63
- optimalBitrate: 0,
64
- optimalFrameRate: 0,
65
- receivedBitrate: 0,
66
- receivedFrameRate: 0,
67
- renderedFrameRate: 0,
68
- requestedBitrate: 0,
69
- requestedFrameRate: 0,
70
- rtpEndToEndLost: 0,
71
- maxRtpJitter: 0,
72
- meanRtpJitter: 0,
73
- rtpPackets: 0,
74
- ssci: 0
75
- }
76
- };
77
- var emptyAudioTransmit = exports.emptyAudioTransmit = {
78
- common: {
79
- availableBitrate: 0,
80
- common: {
81
- direction: 'inactive',
82
- isMain: true,
83
- mariFecEnabled: false,
84
- mariRtxEnabled: false,
85
- mariQosEnabled: false,
86
- mariLiteEnabled: false,
87
- multistreamEnabled: false
88
- },
89
- dtlsBitrate: 0,
90
- dtlsPackets: 0,
91
- fecBitrate: 0,
92
- fecPackets: 0,
93
- maxBitrate: 0,
94
- queueDelay: 0,
95
- remoteJitter: 0,
96
- remoteLossRate: 0,
97
- roundTripTime: 0,
98
- rtcpBitrate: 0,
99
- rtcpPackets: 0,
100
- rtpBitrate: 0,
101
- rtpPackets: 0,
102
- rtxBitrate: 0,
103
- rtxPackets: 0,
104
- stunBitrate: 0,
105
- stunPackets: 0,
106
- transportType: 'UDP'
107
- },
108
- streams: []
109
- };
110
- var emptyAudioTransmitStream = exports.emptyAudioTransmitStream = {
111
- common: {
112
- codec: 'opus',
113
- csi: [],
114
- requestedBitrate: 0,
115
- requestedFrames: 0,
116
- rtpPackets: 0,
117
- ssci: 0,
118
- transmittedBitrate: 0,
119
- transmittedFrameRate: 0
120
- }
121
- };
122
- var emptyVideoReceive = exports.emptyVideoReceive = {
123
- common: {
124
- common: {
125
- direction: 'inactive',
126
- isMain: true,
127
- // Not avaliable
128
- mariFecEnabled: false,
129
- mariRtxEnabled: false,
130
- mariQosEnabled: false,
131
- mariLiteEnabled: false,
132
- multistreamEnabled: true // Not avaliable
133
- },
134
-
135
- dtlsBitrate: 0,
136
- // Not avaliable
137
- dtlsPackets: 0,
138
- // Not avaliable
139
- fecBitrate: 0,
140
- // Not avaliable
141
- fecPackets: 0,
142
- // Not avaliable
143
- maxBitrate: 0,
144
- mediaHopByHopLost: 0,
145
- rtcpBitrate: 0,
146
- // Not avaliable
147
- rtcpPackets: 0,
148
- // Not avaliable
149
- rtpBitrate: 0,
150
- rtpHopByHopLost: 0,
151
- rtpPackets: 0,
152
- rtpRecovered: 0,
153
- // Not avaliable
154
- rtxBitrate: 0,
155
- // Not avaliable
156
- rtxPackets: 0,
157
- // Not avaliable
158
- srtcpUnprotectErrors: 0,
159
- // Not avaliable
160
- srtpUnprotectErrors: 0,
161
- // Not avaliable
162
- stunBitrate: 0,
163
- // Not avaliable
164
- stunPackets: 0,
165
- // Not avaliable
166
- transportType: 'UDP'
167
- },
168
- streams: []
169
- };
170
- var emptyVideoReceiveStream = exports.emptyVideoReceiveStream = {
171
- common: {
172
- codec: 'H264',
173
- concealedFrames: 0,
174
- // Not avaliable
175
- csi: [],
176
- maxConcealRunLength: 0,
177
- // Not avaliable
178
- optimalBitrate: 0,
179
- optimalFrameRate: 0,
180
- receivedBitrate: 0,
181
- receivedFrameRate: 0,
182
- renderedFrameRate: 0,
183
- // Not avaliable
184
- requestedBitrate: 0,
185
- requestedFrameRate: 0,
186
- rtpEndToEndLost: 0,
187
- rtpJitter: 0,
188
- rtpPackets: 0,
189
- ssci: 0 // Not avaliable
190
- },
191
-
192
- h264CodecProfile: 'BP',
193
- isActiveSpeaker: true,
194
- optimalFrameSize: 0,
195
- // Not avaliable
196
- receivedFrameSize: 0,
197
- receivedHeight: 0,
198
- receivedKeyFrames: 0,
199
- receivedKeyFramesForRequest: 0,
200
- receivedKeyFramesSourceChange: 0,
201
- receivedKeyFramesUnknown: 0,
202
- receivedWidth: 0,
203
- requestedFrameSize: 0,
204
- requestedKeyFrames: 0
205
- };
206
- var emptyVideoTransmit = exports.emptyVideoTransmit = {
207
- common: {
208
- availableBitrate: 0,
209
- // Not avaliable currently hardcoded
210
- common: {
211
- direction: 'inactive',
212
- isMain: true,
213
- mariFecEnabled: false,
214
- mariRtxEnabled: false,
215
- mariQosEnabled: false,
216
- mariLiteEnabled: false,
217
- multistreamEnabled: false // Not avaliable
218
- },
219
-
220
- dtlsBitrate: 0,
221
- // Not avaliable
222
- dtlsPackets: 0,
223
- // Not avaliable
224
- fecBitrate: 0,
225
- // Not avaliable
226
- fecPackets: 0,
227
- // TODO: check inbound-rtp// Not avaliable
228
- maxBitrate: 0,
229
- // Currently hardcoded
230
- queueDelay: 0,
231
- remoteJitter: 0,
232
- // remoteInboundRtp.jitter
233
- remoteLossRate: 0,
234
- // comparedResults.lossRate
235
- roundTripTime: 0,
236
- // compareResults.roundTripTime
237
- rtcpBitrate: 0,
238
- // Dont have access to it
239
- rtcpPackets: 0,
240
- // Dont have access to rtcp
241
- rtpBitrate: 0,
242
- // Dont have access
243
- rtpPackets: 0,
244
- // outboundRtp.packetsSent
245
- rtxBitrate: 0,
246
- // Dont have access to it
247
- rtxPackets: 0,
248
- // Dont have access to it
249
- stunBitrate: 0,
250
- // Dont have access to it
251
- stunPackets: 0,
252
- // Dont have access to it
253
- transportType: 'UDP' // TODO: need to calculate
254
- },
255
-
256
- streams: []
257
- };
258
- var emptyVideoTransmitStream = exports.emptyVideoTransmitStream = {
259
- common: {
260
- codec: 'H264',
261
- csi: [],
262
- duplicateSsci: 0,
263
- // Not Avaliable
264
- requestedBitrate: 0,
265
- // TODO: from remote SDP
266
- requestedFrames: 0,
267
- // TODO: from remote SDP
268
- rtpPackets: 0,
269
- // same as rtp packets
270
- ssci: 0,
271
- transmittedBitrate: 0,
272
- // TODO: get in the candidate pair
273
- transmittedFrameRate: 0 // TODO: from track info
274
- },
275
-
276
- h264CodecProfile: 'BP',
277
- // TODO: from localSDP
278
- isAvatar: false,
279
- // Not Avaliable
280
- isHardwareEncoded: false,
281
- // Not Avaliable
282
- localConfigurationChanges: 2,
283
- // Not Avaliable
284
- maxFrameQp: 0,
285
- // Not Avaliable
286
- maxNoiseLevel: 0,
287
- // Not Avaliable
288
- minRegionQp: 0,
289
- // Not Avaliable
290
- remoteConfigurationChanges: 0,
291
- // Not Avaliable
292
- requestedFrameSize: 0,
293
- // TODO: from remote SDP
294
- requestedKeyFrames: 0,
295
- // outbound Fir request
296
- transmittedFrameSize: 0,
297
- // Not Avaliable
298
- transmittedHeight: 0,
299
- transmittedKeyFrames: 0,
300
- // Key frames encoded
301
- transmittedKeyFramesClient: 0,
302
- // Not Avaliable
303
- transmittedKeyFramesConfigurationChange: 0,
304
- // Not Avaliable
305
- transmittedKeyFramesFeedback: 0,
306
- // Not Avaliable
307
- transmittedKeyFramesLocalDrop: 0,
308
- // Not Avaliable
309
- transmittedKeyFramesOtherLayer: 0,
310
- // Not Avaliable
311
- transmittedKeyFramesPeriodic: 0,
312
- // Not Avaliable
313
- transmittedKeyFramesSceneChange: 0,
314
- // Not Avaliable
315
- transmittedKeyFramesStartup: 0,
316
- // Not Avaliable
317
- transmittedKeyFramesUnknown: 0,
318
- // Not Avaliable
319
- transmittedWidth: 0
320
- };
321
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["emptyMqaInterval","exports","audioReceive","audioTransmit","intervalMetadata","peerReflexiveIP","peripherals","processAverageCPU","processMaximumCPU","systemAverageCPU","systemMaximumCPU","networkType","intervalNumber","videoReceive","videoTransmit","emptyAudioReceive","common","direction","isMain","mariFecEnabled","mariRtxEnabled","mariQosEnabled","mariLiteEnabled","multistreamEnabled","dtlsBitrate","dtlsPackets","fecBitrate","fecPackets","maxBitrate","mediaHopByHopLost","rtcpBitrate","rtcpPackets","rtpBitrate","rtpHopByHopLost","rtpPackets","rtpRecovered","rtxBitrate","rtxPackets","srtcpUnprotectErrors","srtpUnprotectErrors","stunBitrate","stunPackets","transportType","streams","emptyAudioReceiveStream","codec","concealedFrames","csi","maxConcealRunLength","optimalBitrate","optimalFrameRate","receivedBitrate","receivedFrameRate","renderedFrameRate","requestedBitrate","requestedFrameRate","rtpEndToEndLost","maxRtpJitter","meanRtpJitter","ssci","emptyAudioTransmit","availableBitrate","queueDelay","remoteJitter","remoteLossRate","roundTripTime","emptyAudioTransmitStream","requestedFrames","transmittedBitrate","transmittedFrameRate","emptyVideoReceive","emptyVideoReceiveStream","rtpJitter","h264CodecProfile","isActiveSpeaker","optimalFrameSize","receivedFrameSize","receivedHeight","receivedKeyFrames","receivedKeyFramesForRequest","receivedKeyFramesSourceChange","receivedKeyFramesUnknown","receivedWidth","requestedFrameSize","requestedKeyFrames","emptyVideoTransmit","emptyVideoTransmitStream","duplicateSsci","isAvatar","isHardwareEncoded","localConfigurationChanges","maxFrameQp","maxNoiseLevel","minRegionQp","remoteConfigurationChanges","transmittedFrameSize","transmittedHeight","transmittedKeyFrames","transmittedKeyFramesClient","transmittedKeyFramesConfigurationChange","transmittedKeyFramesFeedback","transmittedKeyFramesLocalDrop","transmittedKeyFramesOtherLayer","transmittedKeyFramesPeriodic","transmittedKeyFramesSceneChange","transmittedKeyFramesStartup","transmittedKeyFramesUnknown","transmittedWidth"],"sources":["config.ts"],"sourcesContent":["export const emptyMqaInterval = {\n audioReceive: [],\n audioTransmit: [],\n intervalMetadata: {\n peerReflexiveIP: '0.0.0.0',\n peripherals: [],\n processAverageCPU: 0,\n processMaximumCPU: 0,\n systemAverageCPU: 0,\n systemMaximumCPU: 0,\n },\n networkType: '',\n intervalNumber: 0,\n videoReceive: [],\n videoTransmit: [],\n};\n\nexport const emptyAudioReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n srtcpUnprotectErrors: 0,\n srtpUnprotectErrors: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioReceiveStream = {\n common: {\n codec: 'opus',\n concealedFrames: 0,\n csi: [],\n maxConcealRunLength: 0,\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0,\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n maxRtpJitter: 0,\n meanRtpJitter: 0,\n rtpPackets: 0,\n ssci: 0,\n },\n};\n\nexport const emptyAudioTransmit = {\n common: {\n availableBitrate: 0,\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false,\n },\n dtlsBitrate: 0,\n dtlsPackets: 0,\n fecBitrate: 0,\n fecPackets: 0,\n maxBitrate: 0,\n queueDelay: 0,\n remoteJitter: 0,\n remoteLossRate: 0,\n roundTripTime: 0,\n rtcpBitrate: 0,\n rtcpPackets: 0,\n rtpBitrate: 0,\n rtpPackets: 0,\n rtxBitrate: 0,\n rtxPackets: 0,\n stunBitrate: 0,\n stunPackets: 0,\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyAudioTransmitStream = {\n common: {\n codec: 'opus',\n csi: [],\n requestedBitrate: 0,\n requestedFrames: 0,\n rtpPackets: 0,\n ssci: 0,\n transmittedBitrate: 0,\n transmittedFrameRate: 0,\n },\n};\n\nexport const emptyVideoReceive = {\n common: {\n common: {\n direction: 'inactive',\n isMain: true, // Not avaliable\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: true, // Not avaliable\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // Not avaliable\n maxBitrate: 0,\n mediaHopByHopLost: 0,\n rtcpBitrate: 0, // Not avaliable\n rtcpPackets: 0, // Not avaliable\n rtpBitrate: 0,\n rtpHopByHopLost: 0,\n rtpPackets: 0,\n rtpRecovered: 0, // Not avaliable\n rtxBitrate: 0, // Not avaliable\n rtxPackets: 0, // Not avaliable\n srtcpUnprotectErrors: 0, // Not avaliable\n srtpUnprotectErrors: 0, // Not avaliable\n stunBitrate: 0, // Not avaliable\n stunPackets: 0, // Not avaliable\n transportType: 'UDP',\n },\n streams: [],\n};\n\nexport const emptyVideoReceiveStream = {\n common: {\n codec: 'H264',\n concealedFrames: 0, // Not avaliable\n csi: [],\n maxConcealRunLength: 0, // Not avaliable\n optimalBitrate: 0,\n optimalFrameRate: 0,\n receivedBitrate: 0,\n receivedFrameRate: 0,\n renderedFrameRate: 0, // Not avaliable\n requestedBitrate: 0,\n requestedFrameRate: 0,\n rtpEndToEndLost: 0,\n rtpJitter: 0,\n rtpPackets: 0,\n ssci: 0, // Not avaliable\n },\n h264CodecProfile: 'BP',\n isActiveSpeaker: true,\n optimalFrameSize: 0, // Not avaliable\n receivedFrameSize: 0,\n receivedHeight: 0,\n receivedKeyFrames: 0,\n receivedKeyFramesForRequest: 0,\n receivedKeyFramesSourceChange: 0,\n receivedKeyFramesUnknown: 0,\n receivedWidth: 0,\n requestedFrameSize: 0,\n requestedKeyFrames: 0,\n};\n\nexport const emptyVideoTransmit = {\n common: {\n availableBitrate: 0, // Not avaliable currently hardcoded\n common: {\n direction: 'inactive',\n isMain: true,\n mariFecEnabled: false,\n mariRtxEnabled: false,\n mariQosEnabled: false,\n mariLiteEnabled: false,\n multistreamEnabled: false, // Not avaliable\n },\n dtlsBitrate: 0, // Not avaliable\n dtlsPackets: 0, // Not avaliable\n fecBitrate: 0, // Not avaliable\n fecPackets: 0, // TODO: check inbound-rtp// Not avaliable\n maxBitrate: 0, // Currently hardcoded\n queueDelay: 0,\n remoteJitter: 0, // remoteInboundRtp.jitter\n remoteLossRate: 0, // comparedResults.lossRate\n roundTripTime: 0, // compareResults.roundTripTime\n rtcpBitrate: 0, // Dont have access to it\n rtcpPackets: 0, // Dont have access to rtcp\n rtpBitrate: 0, // Dont have access\n rtpPackets: 0, // outboundRtp.packetsSent\n rtxBitrate: 0, // Dont have access to it\n rtxPackets: 0, // Dont have access to it\n stunBitrate: 0, // Dont have access to it\n stunPackets: 0, // Dont have access to it\n transportType: 'UDP', // TODO: need to calculate\n },\n streams: [],\n};\n\nexport const emptyVideoTransmitStream = {\n common: {\n codec: 'H264',\n csi: [],\n duplicateSsci: 0, // Not Avaliable\n requestedBitrate: 0, // TODO: from remote SDP\n requestedFrames: 0, // TODO: from remote SDP\n rtpPackets: 0, // same as rtp packets\n ssci: 0,\n transmittedBitrate: 0, // TODO: get in the candidate pair\n transmittedFrameRate: 0, // TODO: from track info\n },\n h264CodecProfile: 'BP', // TODO: from localSDP\n isAvatar: false, // Not Avaliable\n isHardwareEncoded: false, // Not Avaliable\n localConfigurationChanges: 2, // Not Avaliable\n maxFrameQp: 0, // Not Avaliable\n maxNoiseLevel: 0, // Not Avaliable\n minRegionQp: 0, // Not Avaliable\n remoteConfigurationChanges: 0, // Not Avaliable\n requestedFrameSize: 0, // TODO: from remote SDP\n requestedKeyFrames: 0, // outbound Fir request\n transmittedFrameSize: 0, // Not Avaliable\n transmittedHeight: 0,\n transmittedKeyFrames: 0, // Key frames encoded\n transmittedKeyFramesClient: 0, // Not Avaliable\n transmittedKeyFramesConfigurationChange: 0, // Not Avaliable\n transmittedKeyFramesFeedback: 0, // Not Avaliable\n transmittedKeyFramesLocalDrop: 0, // Not Avaliable\n transmittedKeyFramesOtherLayer: 0, // Not Avaliable\n transmittedKeyFramesPeriodic: 0, // Not Avaliable\n transmittedKeyFramesSceneChange: 0, // Not Avaliable\n transmittedKeyFramesStartup: 0, // Not Avaliable\n transmittedKeyFramesUnknown: 0, // Not Avaliable\n transmittedWidth: 0,\n};\n"],"mappings":"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"}
@@ -1,227 +0,0 @@
1
- "use strict";
2
-
3
- var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
- var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
- _Object$defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- exports.default = void 0;
10
- var _freeze = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/freeze"));
11
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
13
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
15
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
16
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
17
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
18
- var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
19
- var _constants = require("../constants");
20
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
21
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
22
- /**
23
- * Meeting - network quality event
24
- * Emitted on each interval of retrieving stats Analyzer data
25
- * @event network:quality
26
- * @type {Object}
27
- * @property {string} mediaType {video|audio}
28
- * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
29
- * @memberof NetworkQualityMonitor
30
- */
31
- /**
32
- * NetworkQualityMonitor class that will emit events based on detected quality
33
- *
34
- * @class NetworkQualityMonitor
35
- * @extends {EventsScope}
36
- */
37
- var NetworkQualityMonitor = exports.default = /*#__PURE__*/function (_EventsScope) {
38
- (0, _inherits2.default)(NetworkQualityMonitor, _EventsScope);
39
- var _super = _createSuper(NetworkQualityMonitor);
40
- /**
41
- * Creates a new instance of NetworkQualityMonitor
42
- * @constructor
43
- * @public
44
- * @param {Object} config
45
- * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants
46
- * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}
47
- * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown
48
- * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes
49
- * @property {string} mediaType - audio|video
50
- */
51
- function NetworkQualityMonitor(config) {
52
- var _this;
53
- (0, _classCallCheck2.default)(this, NetworkQualityMonitor);
54
- _this = _super.call(this);
55
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
56
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "frequencyTypes", void 0);
57
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "indicatorTypes", void 0);
58
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaType", void 0);
59
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityScore", void 0);
60
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityStatus", void 0);
61
- _this.config = config;
62
- _this.indicatorTypes = (0, _freeze.default)({
63
- PACKETLOSS: 'packetLoss',
64
- LATENCY: 'latency',
65
- JITTER: 'jitter'
66
- });
67
- _this.frequencyTypes = (0, _freeze.default)({
68
- UPLINK: 'uplink',
69
- DOWNLINK: 'downlink'
70
- });
71
- _this.networkQualityScore = 1;
72
- _this.networkQualityStatus = (0, _defineProperty2.default)({}, _this.frequencyTypes.UPLINK, {});
73
- _this.mediaType = null;
74
- return _this;
75
- }
76
-
77
- /**
78
- * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score
79
- *
80
- * @memberof NetworkQualityMonitor
81
- * @returns {void}
82
- */
83
- (0, _createClass2.default)(NetworkQualityMonitor, [{
84
- key: "emitNetworkQuality",
85
- value: function emitNetworkQuality() {
86
- this.emit({
87
- file: 'networkQualityMonitor',
88
- function: 'emitNetworkQuality'
89
- }, _constants.EVENT_TRIGGERS.NETWORK_QUALITY, {
90
- mediaType: this.mediaType,
91
- networkQualityScore: this.networkQualityScore
92
- });
93
- }
94
-
95
- /**
96
- * invokes emitNetworkQuality method resets values back to default
97
- * @returns {void}
98
- * @memberof NetworkQualityMonitor
99
- */
100
- }, {
101
- key: "updateNetworkQualityStatus",
102
- value: function updateNetworkQualityStatus() {
103
- this.emitNetworkQuality();
104
-
105
- // reset values
106
- this.networkQualityScore = 1;
107
- this.mediaType = null;
108
- }
109
-
110
- /**
111
- * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp
112
- * @param {Object} configObj
113
- * @param {string} configObj.mediaType {audio|video}
114
- * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj
115
- * @param {Object} configObj.statsAnalyzerCurrentStats statsResults
116
- * @returns {void}
117
- * @public
118
- * @memberof NetworkQualityMonitor
119
- */
120
- }, {
121
- key: "determineUplinkNetworkQuality",
122
- value: function determineUplinkNetworkQuality(_ref) {
123
- var _this2 = this;
124
- var mediaType = _ref.mediaType,
125
- remoteRtpResults = _ref.remoteRtpResults,
126
- statsAnalyzerCurrentStats = _ref.statsAnalyzerCurrentStats;
127
- var roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;
128
- var jitterInMilliseconds = remoteRtpResults.jitter * 1000;
129
- var currentPacketLossRatio = statsAnalyzerCurrentStats[mediaType].send.currentPacketLossRatio;
130
- this.mediaType = mediaType;
131
- var _this$indicatorTypes = this.indicatorTypes,
132
- JITTER = _this$indicatorTypes.JITTER,
133
- PACKETLOSS = _this$indicatorTypes.PACKETLOSS,
134
- LATENCY = _this$indicatorTypes.LATENCY;
135
- var UPLINK = this.frequencyTypes.UPLINK;
136
-
137
- /**
138
- * determines if packetLoss ratio is over threshold set in config
139
- * sets networkQualityScore to 0 if over threshold
140
- * @returns {boolean}
141
- */
142
- var determinePacketLoss = function determinePacketLoss() {
143
- if (currentPacketLossRatio > _this2.config.videoPacketLossRatioThreshold) {
144
- _this2.networkQualityScore = 0;
145
- return false;
146
- }
147
- return true;
148
- };
149
-
150
- /**
151
- * determines if round trip time value is over threshold set in config
152
- * sets networkQualityScore to 0 if over threshold
153
- * @returns {boolean}
154
- */
155
- var determineLatency = function determineLatency() {
156
- if (roundTripTimeInMilliseconds > _this2.config.rttThreshold) {
157
- _this2.networkQualityScore = 0;
158
- return false;
159
- }
160
- return true;
161
- };
162
-
163
- /**
164
- * determines if jitter value is over threshold in config
165
- * sets networkQualityScore to 0 if over threshold
166
- * @returns {boolean}
167
- */
168
- var deterMineJitter = function deterMineJitter() {
169
- if (jitterInMilliseconds > _this2.config.jitterThreshold) {
170
- _this2.networkQualityScore = 0;
171
- return false;
172
- }
173
- return true;
174
- };
175
-
176
- /**
177
- * returns null if val is specifically undefined
178
- * @param {(number|undefined)} value
179
- * @returns {(number|null)}
180
- */
181
- var determineIfUndefined = function determineIfUndefined(value) {
182
- return typeof value === 'undefined' ? null : value;
183
- };
184
- if (!this.networkQualityStatus[UPLINK][mediaType]) {
185
- this.networkQualityStatus[UPLINK][mediaType] = {};
186
- }
187
-
188
- /**
189
- * Values for some browsers specifically Safari will be undefined we explicitly set to null
190
- * https://bugs.webkit.org/show_bug.cgi?id=206645
191
- * https://bugs.webkit.org/show_bug.cgi?id=212668
192
- */
193
- // PACKET LOSS
194
- this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {
195
- acceptable: determinePacketLoss(),
196
- value: determineIfUndefined(currentPacketLossRatio)
197
- };
198
-
199
- // LATENCY measured in Round trip time
200
- this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {
201
- acceptable: determineLatency(),
202
- value: determineIfUndefined(remoteRtpResults.roundTripTime)
203
- };
204
-
205
- // JITTER
206
- this.networkQualityStatus[UPLINK][mediaType][JITTER] = {
207
- acceptable: deterMineJitter(),
208
- value: determineIfUndefined(remoteRtpResults.jitter)
209
- };
210
- this.updateNetworkQualityStatus();
211
- }
212
-
213
- /**
214
- * Get the current status of network quaility object - networkQualityStatus
215
- * @returns {Object}
216
- * @public
217
- */
218
- }, {
219
- key: "networkQualityStats",
220
- get: function get() {
221
- var UPLINK = this.frequencyTypes.UPLINK;
222
- return this.networkQualityStatus[UPLINK];
223
- }
224
- }]);
225
- return NetworkQualityMonitor;
226
- }(_eventsScope.default);
227
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_eventsScope","_interopRequireDefault","require","_constants","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","NetworkQualityMonitor","exports","_EventsScope","_inherits2","_super","config","_this","_classCallCheck2","_defineProperty2","_assertThisInitialized2","indicatorTypes","_freeze","PACKETLOSS","LATENCY","JITTER","frequencyTypes","UPLINK","DOWNLINK","networkQualityScore","networkQualityStatus","mediaType","_createClass2","key","value","emitNetworkQuality","emit","file","function","EVENT_TRIGGERS","NETWORK_QUALITY","updateNetworkQualityStatus","determineUplinkNetworkQuality","_ref","_this2","remoteRtpResults","statsAnalyzerCurrentStats","roundTripTimeInMilliseconds","roundTripTime","jitterInMilliseconds","jitter","currentPacketLossRatio","send","_this$indicatorTypes","determinePacketLoss","videoPacketLossRatioThreshold","determineLatency","rttThreshold","deterMineJitter","jitterThreshold","determineIfUndefined","acceptable","get","EventsScope"],"sources":["index.ts"],"sourcesContent":["import EventsScope from '../common/events/events-scope';\nimport {EVENT_TRIGGERS} from '../constants';\n\n/**\n * Meeting - network quality event\n * Emitted on each interval of retrieving stats Analyzer data\n * @event network:quality\n * @type {Object}\n * @property {string} mediaType {video|audio}\n * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality\n * @memberof NetworkQualityMonitor\n */\n/**\n * NetworkQualityMonitor class that will emit events based on detected quality\n *\n * @class NetworkQualityMonitor\n * @extends {EventsScope}\n */\nexport default class NetworkQualityMonitor extends EventsScope {\n config: any;\n frequencyTypes: any;\n indicatorTypes: any;\n mediaType: any;\n networkQualityScore: any;\n networkQualityStatus: any;\n\n /**\n * Creates a new instance of NetworkQualityMonitor\n * @constructor\n * @public\n * @param {Object} config\n * @property {Object} indicatorTypes - network properties used to evaluate network quality used as constants\n * @property {Object} frequencyTypes - frequency properties used as constants {uplink|send} {downlink|receive}\n * @property {number} networkQualityScore - 0|1 1 is acceptable 0 is bad/unknown\n * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes\n * @property {string} mediaType - audio|video\n */\n constructor(config: any) {\n super();\n this.config = config;\n this.indicatorTypes = Object.freeze({\n PACKETLOSS: 'packetLoss',\n LATENCY: 'latency',\n JITTER: 'jitter',\n });\n this.frequencyTypes = Object.freeze({\n UPLINK: 'uplink',\n DOWNLINK: 'downlink',\n });\n this.networkQualityScore = 1;\n this.networkQualityStatus = {\n [this.frequencyTypes.UPLINK]: {},\n };\n this.mediaType = null;\n }\n\n /**\n * emits NETWORK_QUALITY event on meeting with payload of media type and uplinkNetworkQuality score\n *\n * @memberof NetworkQualityMonitor\n * @returns {void}\n */\n emitNetworkQuality() {\n this.emit(\n {\n file: 'networkQualityMonitor',\n function: 'emitNetworkQuality',\n },\n EVENT_TRIGGERS.NETWORK_QUALITY,\n {\n mediaType: this.mediaType,\n networkQualityScore: this.networkQualityScore,\n }\n );\n }\n\n /**\n * invokes emitNetworkQuality method resets values back to default\n * @returns {void}\n * @memberof NetworkQualityMonitor\n */\n updateNetworkQualityStatus() {\n this.emitNetworkQuality();\n\n // reset values\n this.networkQualityScore = 1;\n this.mediaType = null;\n }\n\n /**\n * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp\n * @param {Object} configObj\n * @param {string} configObj.mediaType {audio|video}\n * @param {RTCStats} configObj.remoteRtpResults RTC stats remote obj\n * @param {Object} configObj.statsAnalyzerCurrentStats statsResults\n * @returns {void}\n * @public\n * @memberof NetworkQualityMonitor\n */\n public determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults,\n statsAnalyzerCurrentStats,\n }: {\n mediaType: string;\n remoteRtpResults: any;\n statsAnalyzerCurrentStats: object;\n }) {\n const roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;\n const jitterInMilliseconds = remoteRtpResults.jitter * 1000;\n const {currentPacketLossRatio} = statsAnalyzerCurrentStats[mediaType].send;\n\n this.mediaType = mediaType;\n\n const {JITTER, PACKETLOSS, LATENCY} = this.indicatorTypes;\n const {UPLINK} = this.frequencyTypes;\n\n /**\n * determines if packetLoss ratio is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determinePacketLoss = () => {\n if (currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if round trip time value is over threshold set in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const determineLatency = () => {\n if (roundTripTimeInMilliseconds > this.config.rttThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * determines if jitter value is over threshold in config\n * sets networkQualityScore to 0 if over threshold\n * @returns {boolean}\n */\n const deterMineJitter = () => {\n if (jitterInMilliseconds > this.config.jitterThreshold) {\n this.networkQualityScore = 0;\n\n return false;\n }\n\n return true;\n };\n\n /**\n * returns null if val is specifically undefined\n * @param {(number|undefined)} value\n * @returns {(number|null)}\n */\n const determineIfUndefined = (value: number | undefined) =>\n typeof value === 'undefined' ? null : value;\n\n if (!this.networkQualityStatus[UPLINK][mediaType]) {\n this.networkQualityStatus[UPLINK][mediaType] = {};\n }\n\n /**\n * Values for some browsers specifically Safari will be undefined we explicitly set to null\n * https://bugs.webkit.org/show_bug.cgi?id=206645\n * https://bugs.webkit.org/show_bug.cgi?id=212668\n */\n // PACKET LOSS\n this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {\n acceptable: determinePacketLoss(),\n value: determineIfUndefined(currentPacketLossRatio),\n };\n\n // LATENCY measured in Round trip time\n this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {\n acceptable: determineLatency(),\n value: determineIfUndefined(remoteRtpResults.roundTripTime),\n };\n\n // JITTER\n this.networkQualityStatus[UPLINK][mediaType][JITTER] = {\n acceptable: deterMineJitter(),\n value: determineIfUndefined(remoteRtpResults.jitter),\n };\n\n this.updateNetworkQualityStatus();\n }\n\n /**\n * Get the current status of network quaility object - networkQualityStatus\n * @returns {Object}\n * @public\n */\n get networkQualityStats() {\n const {UPLINK} = this.frequencyTypes;\n\n return this.networkQualityStatus[UPLINK];\n }\n}\n"],"mappings":"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"}