@webex/plugin-meetings 2.19.1 → 2.19.2
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.
- package/README.md +0 -300
- package/dist/constants.js +3 -206
- package/dist/constants.js.map +1 -1
- package/dist/meeting/index.js +352 -489
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/util.js +4 -213
- package/dist/meeting/util.js.map +1 -1
- package/dist/meetings/index.js +0 -28
- package/dist/meetings/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +145 -86
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/package.json +5 -7
- package/src/constants.ts +1 -214
- package/src/meeting/index.js +110 -208
- package/src/meeting/util.js +4 -252
- package/src/meetings/index.js +0 -22
- package/src/statsAnalyzer/index.js +164 -99
- package/test/integration/spec/journey.js +2 -67
- package/test/unit/spec/meeting/index.js +88 -29
- package/test/unit/spec/meeting/utils.js +0 -2
- package/test/unit/spec/stats-analyzer/index.js +209 -1
- package/dist/analyzer/analyzer.js +0 -113
- package/dist/analyzer/analyzer.js.map +0 -1
- package/dist/analyzer/calculator.js +0 -87
- package/dist/analyzer/calculator.js.map +0 -1
- package/dist/metrics/mqa-processor.js +0 -170
- package/dist/metrics/mqa-processor.js.map +0 -1
- package/dist/stats/data.js +0 -93
- package/dist/stats/data.js.map +0 -1
- package/dist/stats/events.js +0 -222
- package/dist/stats/events.js.map +0 -1
- package/dist/stats/filter.js +0 -84
- package/dist/stats/filter.js.map +0 -1
- package/dist/stats/history.js +0 -147
- package/dist/stats/history.js.map +0 -1
- package/dist/stats/index.js +0 -425
- package/dist/stats/index.js.map +0 -1
- package/dist/stats/metrics.js +0 -112
- package/dist/stats/metrics.js.map +0 -1
- package/dist/stats/stats.js +0 -592
- package/dist/stats/stats.js.map +0 -1
- package/dist/stats/stream.js +0 -156
- package/dist/stats/stream.js.map +0 -1
- package/dist/stats/transformer.js +0 -126
- package/dist/stats/transformer.js.map +0 -1
- package/dist/stats/util.js +0 -64
- package/dist/stats/util.js.map +0 -1
- package/src/analyzer/analyzer.js +0 -78
- package/src/analyzer/calculator.js +0 -77
- package/src/metrics/mqa-processor.js +0 -118
- package/src/stats/data.js +0 -56
- package/src/stats/events.js +0 -185
- package/src/stats/filter.js +0 -40
- package/src/stats/history.js +0 -107
- package/src/stats/index.js +0 -320
- package/src/stats/metrics.js +0 -95
- package/src/stats/stats.js +0 -477
- package/src/stats/stream.js +0 -108
- package/src/stats/transformer.js +0 -109
- package/src/stats/util.js +0 -44
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
-
|
|
5
|
-
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
|
|
7
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
8
|
-
|
|
9
|
-
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
10
|
-
|
|
11
|
-
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
12
|
-
|
|
13
|
-
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
14
|
-
|
|
15
|
-
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
16
|
-
|
|
17
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
18
|
-
value: true
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
exports.default = void 0;
|
|
22
|
-
|
|
23
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
24
|
-
|
|
25
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
26
|
-
|
|
27
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
28
|
-
|
|
29
|
-
var _constants = require("../constants");
|
|
30
|
-
|
|
31
|
-
var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
|
|
32
|
-
|
|
33
|
-
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
34
|
-
|
|
35
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
36
|
-
|
|
37
|
-
var _BrowserDetection = (0, _browserDetection.default)(),
|
|
38
|
-
isBrowser = _BrowserDetection.isBrowser;
|
|
39
|
-
/**
|
|
40
|
-
* @description MQAProcessor handles interval data for MQA
|
|
41
|
-
* @export
|
|
42
|
-
* @class MQAProcessor
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var MQAProcessor = /*#__PURE__*/function () {
|
|
47
|
-
/**
|
|
48
|
-
* @constructor
|
|
49
|
-
* @public
|
|
50
|
-
* @memberof MQAProcessor
|
|
51
|
-
*/
|
|
52
|
-
function MQAProcessor() {
|
|
53
|
-
(0, _classCallCheck2.default)(this, MQAProcessor);
|
|
54
|
-
this.data = {
|
|
55
|
-
videoReceive: [],
|
|
56
|
-
audioTransmit: [],
|
|
57
|
-
audioReceive: [],
|
|
58
|
-
videoTransmit: []
|
|
59
|
-
};
|
|
60
|
-
this.intervalNumber = 1;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* @param {String} id
|
|
64
|
-
* @param {Array<WebRTCData>} interval - a slice of metrics history
|
|
65
|
-
* @returns {undefined}
|
|
66
|
-
* @memberof MQAProcessor
|
|
67
|
-
*/
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
(0, _createClass2.default)(MQAProcessor, [{
|
|
71
|
-
key: "process",
|
|
72
|
-
value: function process(id, interval) {
|
|
73
|
-
var rtcCandidatePair, rtcOutVideo, rtpOutVideo; // TODO: , rtcInVideo, rtpInVideo, rtcOutAudio, rtcInAudio, rtpInAudio, rtpOutAudio; // TODO:
|
|
74
|
-
|
|
75
|
-
var vsTransmit;
|
|
76
|
-
var _this$data = this.data,
|
|
77
|
-
videoReceive = _this$data.videoReceive,
|
|
78
|
-
audioTransmit = _this$data.audioTransmit,
|
|
79
|
-
audioReceive = _this$data.audioReceive,
|
|
80
|
-
videoTransmit = _this$data.videoTransmit;
|
|
81
|
-
var sumValue = interval[0]; // the head is the last interval value, webRTC spec has some values automatically summed
|
|
82
|
-
|
|
83
|
-
if (sumValue) {
|
|
84
|
-
rtcCandidatePair = sumValue.rtcCandidatePair;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
switch (id) {
|
|
88
|
-
case _constants.STATS.AUDIO_SENDER_ID:
|
|
89
|
-
audioTransmit.push();
|
|
90
|
-
break;
|
|
91
|
-
|
|
92
|
-
case _constants.STATS.AUDIO_RECEIVER_ID:
|
|
93
|
-
audioReceive.push();
|
|
94
|
-
break;
|
|
95
|
-
|
|
96
|
-
case _constants.STATS.VIDEO_SENDER_ID:
|
|
97
|
-
videoTransmit.push();
|
|
98
|
-
break;
|
|
99
|
-
|
|
100
|
-
case _constants.STATS.VIDEO_RECEIVER_ID:
|
|
101
|
-
videoReceive.push();
|
|
102
|
-
break;
|
|
103
|
-
|
|
104
|
-
case _constants.STATS.SHARE_SENDER_ID:
|
|
105
|
-
if (sumValue) {
|
|
106
|
-
rtcOutVideo = sumValue.rtcOutVideo;
|
|
107
|
-
rtpOutVideo = sumValue.rtpOutVideo;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
vsTransmit = _objectSpread({}, _constants.MQA_STATS.DEFAULT_SHARE_SENDER_STATS);
|
|
111
|
-
|
|
112
|
-
if (isBrowser('firefox')) {
|
|
113
|
-
vsTransmit.common.remoteLossRate = rtpOutVideo ? rtpOutVideo.pliCount / (interval.length * this.intervalNumber) : 0;
|
|
114
|
-
vsTransmit.common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;
|
|
115
|
-
vsTransmit.streams[0].common.transmittedFrameRate = rtcOutVideo ? rtcOutVideo.framesEncoded / (interval.length * this.intervalNumber) : 0;
|
|
116
|
-
vsTransmit.streams[0].common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;
|
|
117
|
-
} else {
|
|
118
|
-
vsTransmit.common.availableBitRate = rtcCandidatePair ? rtcCandidatePair.availableOutgoingBitrate : 0;
|
|
119
|
-
vsTransmit.common.remoteLossRate = rtpOutVideo ? rtpOutVideo.pliCount / (interval.length * this.intervalNumber) : 0;
|
|
120
|
-
vsTransmit.common.roundTripTime = rtcCandidatePair ? rtcCandidatePair.totalRoundTripTime / (interval.length * this.intervalNumber) : 0;
|
|
121
|
-
vsTransmit.common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;
|
|
122
|
-
vsTransmit.streams[0].common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;
|
|
123
|
-
vsTransmit.streams[0].common.transmittedBitrate = rtcCandidatePair ? rtcCandidatePair.availableOutgoingBitrate : 0;
|
|
124
|
-
vsTransmit.streams[0].common.transmittedFrameRate = rtcOutVideo ? rtcOutVideo.framesSent / (interval.length * this.intervalNumber) : 0;
|
|
125
|
-
vsTransmit.streams[0].transmittedHeight = rtcOutVideo ? rtcOutVideo.frameHeight : 0;
|
|
126
|
-
vsTransmit.streams[0].transmittedKeyFrames = rtcOutVideo ? rtcOutVideo.hugeFramesSent : 0;
|
|
127
|
-
vsTransmit.streams[0].transmittedWidth = rtcOutVideo ? rtcOutVideo.frameWidth : 0;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
videoTransmit.push(vsTransmit);
|
|
131
|
-
break;
|
|
132
|
-
|
|
133
|
-
default:
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
this.data.intervalMetadata = this.data.intervalMetadata || _objectSpread({}, _constants.MQA_STATS.intervalMetadata);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* get the data payload for media quality events after they all have been processed
|
|
141
|
-
* wait to call this until after you have all the data from the interval you want
|
|
142
|
-
* this method clears the data as a side effect
|
|
143
|
-
* @returns {Object}
|
|
144
|
-
* @memberof MQAProcessor
|
|
145
|
-
*/
|
|
146
|
-
|
|
147
|
-
}, {
|
|
148
|
-
key: "getData",
|
|
149
|
-
value: function getData() {
|
|
150
|
-
this.intervalNumber += 1;
|
|
151
|
-
|
|
152
|
-
var payload = _objectSpread(_objectSpread({}, this.data), {}, {
|
|
153
|
-
intervalNumber: this.intervalNumber
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
this.data = {
|
|
157
|
-
videoReceive: [],
|
|
158
|
-
audioTransmit: [],
|
|
159
|
-
audioReceive: [],
|
|
160
|
-
videoTransmit: []
|
|
161
|
-
};
|
|
162
|
-
return payload;
|
|
163
|
-
}
|
|
164
|
-
}]);
|
|
165
|
-
return MQAProcessor;
|
|
166
|
-
}();
|
|
167
|
-
|
|
168
|
-
var _default = MQAProcessor;
|
|
169
|
-
exports.default = _default;
|
|
170
|
-
//# sourceMappingURL=mqa-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","isBrowser","MQAProcessor","data","videoReceive","audioTransmit","audioReceive","videoTransmit","intervalNumber","id","interval","rtcCandidatePair","rtcOutVideo","rtpOutVideo","vsTransmit","sumValue","STATS","AUDIO_SENDER_ID","push","AUDIO_RECEIVER_ID","VIDEO_SENDER_ID","VIDEO_RECEIVER_ID","SHARE_SENDER_ID","MQA_STATS","DEFAULT_SHARE_SENDER_STATS","common","remoteLossRate","pliCount","length","rtpPackets","packetsSent","streams","transmittedFrameRate","framesEncoded","availableBitRate","availableOutgoingBitrate","roundTripTime","totalRoundTripTime","transmittedBitrate","framesSent","transmittedHeight","frameHeight","transmittedKeyFrames","hugeFramesSent","transmittedWidth","frameWidth","intervalMetadata","payload"],"sources":["mqa-processor.js"],"sourcesContent":["import {\n STATS,\n MQA_STATS\n} from '../constants';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * @description MQAProcessor handles interval data for MQA\n * @export\n * @class MQAProcessor\n */\nclass MQAProcessor {\n /**\n * @constructor\n * @public\n * @memberof MQAProcessor\n */\n constructor() {\n this.data = {\n videoReceive: [],\n audioTransmit: [],\n audioReceive: [],\n videoTransmit: []\n };\n this.intervalNumber = 1;\n }\n\n /**\n * @param {String} id\n * @param {Array<WebRTCData>} interval - a slice of metrics history\n * @returns {undefined}\n * @memberof MQAProcessor\n */\n process(id, interval) {\n let rtcCandidatePair, rtcOutVideo, rtpOutVideo; // TODO: , rtcInVideo, rtpInVideo, rtcOutAudio, rtcInAudio, rtpInAudio, rtpOutAudio; // TODO:\n let vsTransmit;\n\n const {\n videoReceive, audioTransmit, audioReceive, videoTransmit\n } = this.data;\n\n const sumValue = interval[0]; // the head is the last interval value, webRTC spec has some values automatically summed\n\n if (sumValue) {\n rtcCandidatePair = sumValue.rtcCandidatePair;\n }\n\n switch (id) {\n case STATS.AUDIO_SENDER_ID:\n audioTransmit.push();\n break;\n case STATS.AUDIO_RECEIVER_ID:\n audioReceive.push();\n break;\n case STATS.VIDEO_SENDER_ID:\n videoTransmit.push();\n break;\n case STATS.VIDEO_RECEIVER_ID:\n videoReceive.push();\n break;\n case STATS.SHARE_SENDER_ID:\n if (sumValue) {\n rtcOutVideo = sumValue.rtcOutVideo;\n rtpOutVideo = sumValue.rtpOutVideo;\n }\n vsTransmit = {...MQA_STATS.DEFAULT_SHARE_SENDER_STATS};\n if (isBrowser('firefox')) {\n vsTransmit.common.remoteLossRate = rtpOutVideo ? rtpOutVideo.pliCount / (interval.length * this.intervalNumber) : 0;\n vsTransmit.common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;\n vsTransmit.streams[0].common.transmittedFrameRate = rtcOutVideo ? rtcOutVideo.framesEncoded / (interval.length * this.intervalNumber) : 0;\n vsTransmit.streams[0].common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;\n }\n else {\n vsTransmit.common.availableBitRate = rtcCandidatePair ? rtcCandidatePair.availableOutgoingBitrate : 0;\n vsTransmit.common.remoteLossRate = rtpOutVideo ? rtpOutVideo.pliCount / (interval.length * this.intervalNumber) : 0;\n vsTransmit.common.roundTripTime = rtcCandidatePair ? rtcCandidatePair.totalRoundTripTime / (interval.length * this.intervalNumber) : 0;\n vsTransmit.common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;\n vsTransmit.streams[0].common.rtpPackets = rtpOutVideo ? rtpOutVideo.packetsSent / (interval.length * this.intervalNumber) : 0;\n vsTransmit.streams[0].common.transmittedBitrate = rtcCandidatePair ? rtcCandidatePair.availableOutgoingBitrate : 0;\n vsTransmit.streams[0].common.transmittedFrameRate = rtcOutVideo ? rtcOutVideo.framesSent / (interval.length * this.intervalNumber) : 0;\n vsTransmit.streams[0].transmittedHeight = rtcOutVideo ? rtcOutVideo.frameHeight : 0;\n vsTransmit.streams[0].transmittedKeyFrames = rtcOutVideo ? rtcOutVideo.hugeFramesSent : 0;\n vsTransmit.streams[0].transmittedWidth = rtcOutVideo ? rtcOutVideo.frameWidth : 0;\n }\n videoTransmit.push(vsTransmit);\n break;\n default:\n break;\n }\n this.data.intervalMetadata = this.data.intervalMetadata || {...MQA_STATS.intervalMetadata};\n }\n\n /**\n * get the data payload for media quality events after they all have been processed\n * wait to call this until after you have all the data from the interval you want\n * this method clears the data as a side effect\n * @returns {Object}\n * @memberof MQAProcessor\n */\n getData() {\n this.intervalNumber += 1;\n\n const payload = {...this.data, intervalNumber: this.intervalNumber};\n\n this.data = {\n videoReceive: [],\n audioTransmit: [],\n audioReceive: [],\n videoTransmit: []\n };\n\n return payload;\n }\n}\n\nexport default MQAProcessor;\n"],"mappings":"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"}
|
package/dist/stats/data.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
|
-
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
exports.default = void 0;
|
|
12
|
-
|
|
13
|
-
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
14
|
-
|
|
15
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
16
|
-
|
|
17
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
18
|
-
|
|
19
|
-
var _omit2 = _interopRequireDefault(require("lodash/omit"));
|
|
20
|
-
|
|
21
|
-
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
22
|
-
|
|
23
|
-
var _uuid = _interopRequireDefault(require("uuid"));
|
|
24
|
-
|
|
25
|
-
var _constants = require("../constants");
|
|
26
|
-
|
|
27
|
-
// TODO: Break this up a bit more, so that consumers aren't calling data.data.getData()
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @class WebRTCData
|
|
31
|
-
*/
|
|
32
|
-
var WebRTCData = /*#__PURE__*/function () {
|
|
33
|
-
/**
|
|
34
|
-
* @param {Object} data
|
|
35
|
-
*/
|
|
36
|
-
function WebRTCData(data) {
|
|
37
|
-
(0, _classCallCheck2.default)(this, WebRTCData);
|
|
38
|
-
this.data = data;
|
|
39
|
-
this.id = _uuid.default.v4();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* get omitted rtc/rtcp/rtp/track/transport/candidate data with omitted data (default)
|
|
43
|
-
* @returns {Object}
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
(0, _createClass2.default)(WebRTCData, [{
|
|
48
|
-
key: "omit",
|
|
49
|
-
value: function omit() {
|
|
50
|
-
var _this = this;
|
|
51
|
-
|
|
52
|
-
var flat = {};
|
|
53
|
-
(0, _keys.default)(this.data).forEach(function (key) {
|
|
54
|
-
flat[key] = (0, _omit2.default)(_this.data[key], _constants.DEFAULT_OMISSION_DATA_KEYS);
|
|
55
|
-
});
|
|
56
|
-
return flat;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* returns if the data is empty
|
|
60
|
-
* @returns {Boolean};
|
|
61
|
-
*/
|
|
62
|
-
|
|
63
|
-
}, {
|
|
64
|
-
key: "isEmpty",
|
|
65
|
-
value: function isEmpty() {
|
|
66
|
-
return (0, _isEmpty2.default)(this.data);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* get the unique id for this specific stat pull
|
|
70
|
-
* @returns {String};
|
|
71
|
-
*/
|
|
72
|
-
|
|
73
|
-
}, {
|
|
74
|
-
key: "getId",
|
|
75
|
-
value: function getId() {
|
|
76
|
-
return this.id;
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* get the transformed data
|
|
80
|
-
* @returns {Object}
|
|
81
|
-
*/
|
|
82
|
-
|
|
83
|
-
}, {
|
|
84
|
-
key: "getData",
|
|
85
|
-
value: function getData() {
|
|
86
|
-
return this.data;
|
|
87
|
-
}
|
|
88
|
-
}]);
|
|
89
|
-
return WebRTCData;
|
|
90
|
-
}();
|
|
91
|
-
|
|
92
|
-
exports.default = WebRTCData;
|
|
93
|
-
//# sourceMappingURL=data.js.map
|
package/dist/stats/data.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["WebRTCData","data","id","uuid","v4","flat","forEach","key","DEFAULT_OMISSION_DATA_KEYS"],"sources":["data.js"],"sourcesContent":["import uuid from 'uuid';\nimport {isEmpty, omit} from 'lodash';\n\nimport {DEFAULT_OMISSION_DATA_KEYS} from '../constants';\n\n// TODO: Break this up a bit more, so that consumers aren't calling data.data.getData()\n/**\n * @class WebRTCData\n */\nexport default class WebRTCData {\n /**\n * @param {Object} data\n */\n constructor(data) {\n this.data = data;\n this.id = uuid.v4();\n }\n\n /**\n * get omitted rtc/rtcp/rtp/track/transport/candidate data with omitted data (default)\n * @returns {Object}\n */\n omit() {\n const flat = {};\n\n Object.keys(this.data).forEach((key) => {\n flat[key] = omit(this.data[key], DEFAULT_OMISSION_DATA_KEYS);\n });\n\n return flat;\n }\n\n /**\n * returns if the data is empty\n * @returns {Boolean};\n */\n isEmpty() {\n return isEmpty(this.data);\n }\n\n /**\n * get the unique id for this specific stat pull\n * @returns {String};\n */\n getId() {\n return this.id;\n }\n\n /**\n * get the transformed data\n * @returns {Object}\n */\n getData() {\n return this.data;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;AAGA;;AAEA;;AACA;AACA;AACA;IACqBA,U;EACnB;AACF;AACA;EACE,oBAAYC,IAAZ,EAAkB;IAAA;IAChB,KAAKA,IAAL,GAAYA,IAAZ;IACA,KAAKC,EAAL,GAAUC,aAAA,CAAKC,EAAL,EAAV;EACD;EAED;AACF;AACA;AACA;;;;;WACE,gBAAO;MAAA;;MACL,IAAMC,IAAI,GAAG,EAAb;MAEA,mBAAY,KAAKJ,IAAjB,EAAuBK,OAAvB,CAA+B,UAACC,GAAD,EAAS;QACtCF,IAAI,CAACE,GAAD,CAAJ,GAAY,oBAAK,KAAI,CAACN,IAAL,CAAUM,GAAV,CAAL,EAAqBC,qCAArB,CAAZ;MACD,CAFD;MAIA,OAAOH,IAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,uBAAQ,KAAKJ,IAAb,CAAP;IACD;IAED;AACF;AACA;AACA;;;;WACE,iBAAQ;MACN,OAAO,KAAKC,EAAZ;IACD;IAED;AACF;AACA;AACA;;;;WACE,mBAAU;MACR,OAAO,KAAKD,IAAZ;IACD"}
|
package/dist/stats/events.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
-
|
|
5
|
-
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
|
-
|
|
7
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
exports.default = void 0;
|
|
12
|
-
|
|
13
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
14
|
-
|
|
15
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
16
|
-
|
|
17
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
18
|
-
|
|
19
|
-
var _analyzer = _interopRequireDefault(require("../analyzer/analyzer"));
|
|
20
|
-
|
|
21
|
-
var _constants = require("../constants");
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @param {Object} operate the filtered, parsed, converted, transformed, simplified data point to check against
|
|
25
|
-
* @param {String} type - local or remote
|
|
26
|
-
* @param {String} keys - the stat keys for types of stats defined by DEFAULT_TRANSFORM_REGEX
|
|
27
|
-
* @param {String} stat - the accessor to get the actual stat
|
|
28
|
-
* @param {String} kind - audio or video
|
|
29
|
-
* @returns {Object} always whatever the first sentFirstVideoBytes were, in the past or if it happened now, or undefined if never
|
|
30
|
-
* @private
|
|
31
|
-
* @memberof StatsEvents
|
|
32
|
-
*/
|
|
33
|
-
var operateEvent = function operateEvent(operate, type, keys, stat, kind) {
|
|
34
|
-
var foundMatch = {};
|
|
35
|
-
foundMatch.found = keys.some(function (key) {
|
|
36
|
-
if (operate[key] && operate[key][stat] && operate[key][stat] > 0) {
|
|
37
|
-
foundMatch.match = {
|
|
38
|
-
type: type,
|
|
39
|
-
key: key,
|
|
40
|
-
data: operate[key],
|
|
41
|
-
stat: stat,
|
|
42
|
-
kind: kind
|
|
43
|
-
};
|
|
44
|
-
return true;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
return false;
|
|
48
|
-
});
|
|
49
|
-
return foundMatch;
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* @export
|
|
53
|
-
* @class StatsEvents
|
|
54
|
-
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var StatsEvents = /*#__PURE__*/function () {
|
|
58
|
-
/**
|
|
59
|
-
* constructs an instance
|
|
60
|
-
* @constructor
|
|
61
|
-
* @param {StatsHistory} series
|
|
62
|
-
* @param {Function} callback
|
|
63
|
-
* @memberof StatsEvents
|
|
64
|
-
*/
|
|
65
|
-
function StatsEvents() {
|
|
66
|
-
var series = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
67
|
-
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};
|
|
68
|
-
(0, _classCallCheck2.default)(this, StatsEvents);
|
|
69
|
-
(0, _defineProperty2.default)(this, "namespace", _constants.MEETINGS);
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* @instance
|
|
73
|
-
* @type {StatsHistory}
|
|
74
|
-
* @private
|
|
75
|
-
* @memberof StatsEvents
|
|
76
|
-
*/
|
|
77
|
-
this.series = series;
|
|
78
|
-
/**
|
|
79
|
-
* @instance
|
|
80
|
-
* @type {Function}
|
|
81
|
-
* @private
|
|
82
|
-
* @memberof StatsEvents
|
|
83
|
-
*/
|
|
84
|
-
|
|
85
|
-
this.callback = callback;
|
|
86
|
-
/**
|
|
87
|
-
* @instance
|
|
88
|
-
* @type {WebRTCData}
|
|
89
|
-
* @private
|
|
90
|
-
* @memberof StatsEvents
|
|
91
|
-
*/
|
|
92
|
-
|
|
93
|
-
this.first = null;
|
|
94
|
-
/**
|
|
95
|
-
* @instance
|
|
96
|
-
* @type {Boolean}
|
|
97
|
-
* @private
|
|
98
|
-
* @memberof StatsEvents
|
|
99
|
-
*/
|
|
100
|
-
|
|
101
|
-
this.sendRemainStopped = false;
|
|
102
|
-
/**
|
|
103
|
-
* @instance
|
|
104
|
-
* @type {Boolean}
|
|
105
|
-
* @private
|
|
106
|
-
* @memberof StatsEvents
|
|
107
|
-
*/
|
|
108
|
-
|
|
109
|
-
this.recvRemainStopped = false;
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* looks for data starting to flow through
|
|
113
|
-
* @param {WebRTCData} data
|
|
114
|
-
* @returns {Object}
|
|
115
|
-
*/
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
(0, _createClass2.default)(StatsEvents, [{
|
|
119
|
-
key: "start",
|
|
120
|
-
value: function start(data) {
|
|
121
|
-
if (data && data.data && data.data.getData()) {
|
|
122
|
-
var operate = data.data.getData();
|
|
123
|
-
|
|
124
|
-
if (operate && !this.first) {
|
|
125
|
-
var operator = [operateEvent(operate, _constants.EVENT_TYPES.LOCAL, _constants.DEFAULT_EVENT_AUDIO_SEND_KEYS, _constants.EVENT_STATS_MAP.BYTES_SENT, _constants.AUDIO), operateEvent(operate, _constants.EVENT_TYPES.LOCAL, _constants.DEFAULT_EVENT_VIDEO_SEND_KEYS, _constants.EVENT_STATS_MAP.BYTES_SENT, _constants.VIDEO), operateEvent(operate, _constants.EVENT_TYPES.REMOTE, _constants.DEFAULT_EVENT_VIDEO_RECEIVE_KEYS, _constants.EVENT_STATS_MAP.BYTES_RECEIVED, _constants.VIDEO), operateEvent(operate, _constants.EVENT_TYPES.REMOTE, _constants.DEFAULT_EVENT_AUDIO_RECEIVE_KEYS, _constants.EVENT_STATS_MAP.BYTES_RECEIVED, _constants.AUDIO)];
|
|
126
|
-
var somethingMatched = operator.find(function (element) {
|
|
127
|
-
return element && element.found && element.match;
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
if (somethingMatched) {
|
|
131
|
-
this.first = somethingMatched.match;
|
|
132
|
-
this.callback(this.first);
|
|
133
|
-
return somethingMatched;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Looks for data to stop coming through
|
|
142
|
-
* @returns {Object}
|
|
143
|
-
*/
|
|
144
|
-
|
|
145
|
-
}, {
|
|
146
|
-
key: "stop",
|
|
147
|
-
value: function stop() {
|
|
148
|
-
if (!this.series || this.series.get().length < 5) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
var fiveSecondsData = this.series.getSlice(5);
|
|
153
|
-
var prop = fiveSecondsData[0] && fiveSecondsData[0].rtpOutAudio || fiveSecondsData[0].rtpInAudio || fiveSecondsData[0].rtpInVideo || fiveSecondsData[0].rtpOutVideo;
|
|
154
|
-
|
|
155
|
-
var sendAnalysis = _analyzer.default.analyze(fiveSecondsData, {
|
|
156
|
-
analysisKeys: [{
|
|
157
|
-
key: _constants.EVENT_STATS_MAP.BYTES_SENT,
|
|
158
|
-
check: _constants.ANALYSIS_CHECKS.INCREASING,
|
|
159
|
-
prop: prop
|
|
160
|
-
}]
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
var receiveAnalysis = _analyzer.default.analyze(fiveSecondsData, {
|
|
164
|
-
analysisKeys: [{
|
|
165
|
-
key: _constants.EVENT_STATS_MAP.BYTES_RECEIVED,
|
|
166
|
-
check: _constants.ANALYSIS_CHECKS.INCREASING,
|
|
167
|
-
prop: prop
|
|
168
|
-
}]
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
if (!sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {
|
|
172
|
-
if (!this.sendRemainStopped) {
|
|
173
|
-
var ret = {
|
|
174
|
-
stop: true,
|
|
175
|
-
stat: _constants.EVENT_STATS_MAP.BYTES_SENT
|
|
176
|
-
};
|
|
177
|
-
this.callback(ret);
|
|
178
|
-
this.sendRemainStopped = true;
|
|
179
|
-
this.first = null;
|
|
180
|
-
return ret;
|
|
181
|
-
}
|
|
182
|
-
} else if (sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {
|
|
183
|
-
this.sendRemainStopped = false;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
if (!receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {
|
|
187
|
-
if (!this.recvRemainStopped) {
|
|
188
|
-
var _ret = {
|
|
189
|
-
stop: true,
|
|
190
|
-
stat: _constants.EVENT_STATS_MAP.BYTES_RECEIVED
|
|
191
|
-
};
|
|
192
|
-
this.callback(_ret);
|
|
193
|
-
this.recvRemainStopped = true;
|
|
194
|
-
this.first = null;
|
|
195
|
-
return _ret;
|
|
196
|
-
}
|
|
197
|
-
} else if (receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {
|
|
198
|
-
this.recvRemainStopped = false;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* handles all the types of events that need to be sent when they happen from getStats API
|
|
205
|
-
* @param {WebRTCData} data
|
|
206
|
-
* @returns {Object}
|
|
207
|
-
*/
|
|
208
|
-
|
|
209
|
-
}, {
|
|
210
|
-
key: "event",
|
|
211
|
-
value: function event(data) {
|
|
212
|
-
return {
|
|
213
|
-
start: this.start(data),
|
|
214
|
-
stop: this.stop()
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
}]);
|
|
218
|
-
return StatsEvents;
|
|
219
|
-
}();
|
|
220
|
-
|
|
221
|
-
exports.default = StatsEvents;
|
|
222
|
-
//# sourceMappingURL=events.js.map
|
package/dist/stats/events.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["operateEvent","operate","type","keys","stat","kind","foundMatch","found","some","key","match","data","StatsEvents","series","callback","MEETINGS","first","sendRemainStopped","recvRemainStopped","getData","operator","EVENT_TYPES","LOCAL","DEFAULT_EVENT_AUDIO_SEND_KEYS","EVENT_STATS_MAP","BYTES_SENT","AUDIO","DEFAULT_EVENT_VIDEO_SEND_KEYS","VIDEO","REMOTE","DEFAULT_EVENT_VIDEO_RECEIVE_KEYS","BYTES_RECEIVED","DEFAULT_EVENT_AUDIO_RECEIVE_KEYS","somethingMatched","find","element","get","length","fiveSecondsData","getSlice","prop","rtpOutAudio","rtpInAudio","rtpInVideo","rtpOutVideo","sendAnalysis","StatsAnalyzer","analyze","analysisKeys","check","ANALYSIS_CHECKS","INCREASING","receiveAnalysis","valid","bytesSent","reports","ret","stop","bytesReceived","start"],"sources":["events.js"],"sourcesContent":["import StatsAnalyzer from '../analyzer/analyzer';\nimport {\n DEFAULT_EVENT_VIDEO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_SEND_KEYS,\n DEFAULT_EVENT_AUDIO_RECEIVE_KEYS,\n DEFAULT_EVENT_VIDEO_RECEIVE_KEYS,\n EVENT_TYPES,\n EVENT_STATS_MAP,\n MEETINGS,\n AUDIO,\n VIDEO,\n ANALYSIS_CHECKS\n} from '../constants';\n\n/**\n * @param {Object} operate the filtered, parsed, converted, transformed, simplified data point to check against\n * @param {String} type - local or remote\n * @param {String} keys - the stat keys for types of stats defined by DEFAULT_TRANSFORM_REGEX\n * @param {String} stat - the accessor to get the actual stat\n * @param {String} kind - audio or video\n * @returns {Object} always whatever the first sentFirstVideoBytes were, in the past or if it happened now, or undefined if never\n * @private\n * @memberof StatsEvents\n */\nconst operateEvent = (operate, type, keys, stat, kind) => {\n const foundMatch = {};\n\n foundMatch.found = keys.some((key) => {\n if (operate[key] && operate[key][stat] && operate[key][stat] > 0) {\n foundMatch.match = {\n type,\n key,\n data: operate[key],\n stat,\n kind\n };\n\n return true;\n }\n\n return false;\n });\n\n return foundMatch;\n};\n\n/**\n * @export\n * @class StatsEvents\n */\nexport default class StatsEvents {\n namespace = MEETINGS;\n\n /**\n * constructs an instance\n * @constructor\n * @param {StatsHistory} series\n * @param {Function} callback\n * @memberof StatsEvents\n */\n constructor(series = null, callback = () => {}) {\n /**\n * @instance\n * @type {StatsHistory}\n * @private\n * @memberof StatsEvents\n */\n this.series = series;\n /**\n * @instance\n * @type {Function}\n * @private\n * @memberof StatsEvents\n */\n this.callback = callback;\n /**\n * @instance\n * @type {WebRTCData}\n * @private\n * @memberof StatsEvents\n */\n this.first = null;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.sendRemainStopped = false;\n /**\n * @instance\n * @type {Boolean}\n * @private\n * @memberof StatsEvents\n */\n this.recvRemainStopped = false;\n }\n\n /**\n * looks for data starting to flow through\n * @param {WebRTCData} data\n * @returns {Object}\n */\n start(data) {\n if (data && data.data && data.data.getData()) {\n const operate = data.data.getData();\n\n if (operate && !this.first) {\n const operator = [\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_AUDIO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, AUDIO),\n operateEvent(operate, EVENT_TYPES.LOCAL, DEFAULT_EVENT_VIDEO_SEND_KEYS, EVENT_STATS_MAP.BYTES_SENT, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_VIDEO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, VIDEO),\n operateEvent(operate, EVENT_TYPES.REMOTE, DEFAULT_EVENT_AUDIO_RECEIVE_KEYS, EVENT_STATS_MAP.BYTES_RECEIVED, AUDIO)\n ];\n const somethingMatched = operator.find((element) => element && element.found && element.match);\n\n if (somethingMatched) {\n this.first = somethingMatched.match;\n this.callback(this.first);\n\n return somethingMatched;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Looks for data to stop coming through\n * @returns {Object}\n */\n stop() {\n if (!this.series || this.series.get().length < 5) {\n return null;\n }\n const fiveSecondsData = this.series.getSlice(5);\n const prop = fiveSecondsData[0] && fiveSecondsData[0].rtpOutAudio || fiveSecondsData[0].rtpInAudio || fiveSecondsData[0].rtpInVideo || fiveSecondsData[0].rtpOutVideo;\n const sendAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_SENT, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n const receiveAnalysis = StatsAnalyzer.analyze(fiveSecondsData, {analysisKeys: [{key: EVENT_STATS_MAP.BYTES_RECEIVED, check: ANALYSIS_CHECKS.INCREASING, prop}]});\n\n if (!sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n if (!this.sendRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_SENT};\n\n this.callback(ret);\n this.sendRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (sendAnalysis.valid && sendAnalysis.data.bytesSent.reports.length > 0) {\n this.sendRemainStopped = false;\n }\n if (!receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n if (!this.recvRemainStopped) {\n const ret = {stop: true, stat: EVENT_STATS_MAP.BYTES_RECEIVED};\n\n this.callback(ret);\n this.recvRemainStopped = true;\n this.first = null;\n\n return ret;\n }\n }\n else if (receiveAnalysis.valid && receiveAnalysis.data.bytesReceived.reports.length > 0) {\n this.recvRemainStopped = false;\n }\n\n return null;\n }\n\n /**\n * handles all the types of events that need to be sent when they happen from getStats API\n * @param {WebRTCData} data\n * @returns {Object}\n */\n event(data) {\n return {\n start: this.start(data),\n stop: this.stop()\n };\n }\n}\n"],"mappings":"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"}
|
package/dist/stats/filter.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
|
-
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
|
-
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
|
-
_Object$defineProperty(exports, "__esModule", {
|
|
10
|
-
value: true
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
exports.default = void 0;
|
|
14
|
-
|
|
15
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
16
|
-
|
|
17
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
18
|
-
|
|
19
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
20
|
-
|
|
21
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
22
|
-
|
|
23
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
24
|
-
|
|
25
|
-
var _readableStream = require("readable-stream");
|
|
26
|
-
|
|
27
|
-
var _transformer = _interopRequireDefault(require("../stats/transformer"));
|
|
28
|
-
|
|
29
|
-
var _data = _interopRequireDefault(require("../stats/data"));
|
|
30
|
-
|
|
31
|
-
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); }; }
|
|
32
|
-
|
|
33
|
-
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; } }
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Reforms the interesting data from an RTCStatsReport to a new format
|
|
37
|
-
*/
|
|
38
|
-
var StatsFilter = /*#__PURE__*/function (_Transform) {
|
|
39
|
-
(0, _inherits2.default)(StatsFilter, _Transform);
|
|
40
|
-
|
|
41
|
-
var _super = _createSuper(StatsFilter);
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Tells the Stream we're operating in objectMode
|
|
45
|
-
* @private
|
|
46
|
-
*/
|
|
47
|
-
function StatsFilter() {
|
|
48
|
-
(0, _classCallCheck2.default)(this, StatsFilter);
|
|
49
|
-
return _super.call(this, {
|
|
50
|
-
objectMode: true
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Filters out data on the RTCStatsReport to the data around call quality and pushes it as a WebRTCData object
|
|
55
|
-
* @param {RTCStatsReport} report
|
|
56
|
-
* @param {*} encoding
|
|
57
|
-
* @param {Function} callback
|
|
58
|
-
* @private
|
|
59
|
-
* @returns {undefined}
|
|
60
|
-
*/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
(0, _createClass2.default)(StatsFilter, [{
|
|
64
|
-
key: "_transform",
|
|
65
|
-
value: function _transform(report, encoding, callback) {
|
|
66
|
-
if (!report) {
|
|
67
|
-
callback();
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
var data = _transformer.default.transform(report);
|
|
72
|
-
|
|
73
|
-
var push = new _data.default(data);
|
|
74
|
-
this.push({
|
|
75
|
-
data: push
|
|
76
|
-
});
|
|
77
|
-
callback();
|
|
78
|
-
}
|
|
79
|
-
}]);
|
|
80
|
-
return StatsFilter;
|
|
81
|
-
}(_readableStream.Transform);
|
|
82
|
-
|
|
83
|
-
exports.default = StatsFilter;
|
|
84
|
-
//# sourceMappingURL=filter.js.map
|
package/dist/stats/filter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["StatsFilter","objectMode","report","encoding","callback","data","StatsTransformer","transform","push","WebRTCData","Transform"],"sources":["filter.js"],"sourcesContent":["import {Transform} from 'readable-stream';\n\nimport StatsTransformer from '../stats/transformer';\nimport WebRTCData from '../stats/data';\n\n/**\n * Reforms the interesting data from an RTCStatsReport to a new format\n */\nexport default class StatsFilter extends Transform {\n /**\n * Tells the Stream we're operating in objectMode\n * @private\n */\n constructor() {\n super({objectMode: true});\n }\n\n /**\n * Filters out data on the RTCStatsReport to the data around call quality and pushes it as a WebRTCData object\n * @param {RTCStatsReport} report\n * @param {*} encoding\n * @param {Function} callback\n * @private\n * @returns {undefined}\n */\n _transform(report, encoding, callback) {\n if (!report) {\n callback();\n\n return;\n }\n const data = StatsTransformer.transform(report);\n const push = new WebRTCData(data);\n\n this.push({\n data: push\n });\n callback();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;;;;;AAEA;AACA;AACA;IACqBA,W;;;;;EACnB;AACF;AACA;AACA;EACE,uBAAc;IAAA;IAAA,yBACN;MAACC,UAAU,EAAE;IAAb,CADM;EAEb;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;;;WACE,oBAAWC,MAAX,EAAmBC,QAAnB,EAA6BC,QAA7B,EAAuC;MACrC,IAAI,CAACF,MAAL,EAAa;QACXE,QAAQ;QAER;MACD;;MACD,IAAMC,IAAI,GAAGC,oBAAA,CAAiBC,SAAjB,CAA2BL,MAA3B,CAAb;;MACA,IAAMM,IAAI,GAAG,IAAIC,aAAJ,CAAeJ,IAAf,CAAb;MAEA,KAAKG,IAAL,CAAU;QACRH,IAAI,EAAEG;MADE,CAAV;MAGAJ,QAAQ;IACT;;;EA9BsCM,yB"}
|