@webex/web-client-media-engine 3.33.2 → 3.33.4
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/dist/cjs/index.js +830 -301
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +830 -301
- package/dist/esm/index.js.map +1 -1
- package/package.json +8 -8
package/dist/cjs/index.js
CHANGED
|
@@ -34,7 +34,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
34
34
|
PERFORMANCE OF THIS SOFTWARE.
|
|
35
35
|
***************************************************************************** */
|
|
36
36
|
|
|
37
|
-
function __awaiter$
|
|
37
|
+
function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
38
38
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
39
39
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
40
40
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -356,7 +356,7 @@ var DeviceKind$1;
|
|
|
356
356
|
* media has successfully been obtained.
|
|
357
357
|
*/
|
|
358
358
|
function getUserMedia(constraints) {
|
|
359
|
-
return __awaiter$
|
|
359
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
360
360
|
return navigator.mediaDevices.getUserMedia(constraints);
|
|
361
361
|
});
|
|
362
362
|
}
|
|
@@ -381,7 +381,7 @@ function getDisplayMedia(constraints) {
|
|
|
381
381
|
* fulfilled.
|
|
382
382
|
*/
|
|
383
383
|
function enumerateDevices() {
|
|
384
|
-
return __awaiter$
|
|
384
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
385
385
|
return navigator.mediaDevices.enumerateDevices();
|
|
386
386
|
});
|
|
387
387
|
}
|
|
@@ -403,7 +403,7 @@ function setOnDeviceChangeHandler$1(handler) {
|
|
|
403
403
|
* @returns Array of Permission Status objects.
|
|
404
404
|
*/
|
|
405
405
|
function checkNavigatorPermissions(deviceKinds) {
|
|
406
|
-
return __awaiter$
|
|
406
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
407
407
|
const permissionRequests = [];
|
|
408
408
|
if (deviceKinds.includes(DeviceKind$1.VideoInput)) {
|
|
409
409
|
permissionRequests.push(navigator.permissions.query({ name: 'camera' }));
|
|
@@ -421,7 +421,7 @@ function checkNavigatorPermissions(deviceKinds) {
|
|
|
421
421
|
* @returns True if device permissions exist, false if otherwise.
|
|
422
422
|
*/
|
|
423
423
|
function checkDevicePermissions(deviceKinds) {
|
|
424
|
-
return __awaiter$
|
|
424
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
425
425
|
try {
|
|
426
426
|
const permissions = yield checkNavigatorPermissions(deviceKinds);
|
|
427
427
|
if (permissions.every((permission) => permission.state === 'granted')) {
|
|
@@ -451,7 +451,7 @@ function checkDevicePermissions(deviceKinds) {
|
|
|
451
451
|
* @returns The callback's response.
|
|
452
452
|
*/
|
|
453
453
|
function ensureDevicePermissions(deviceKinds, callback) {
|
|
454
|
-
return __awaiter$
|
|
454
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
455
455
|
try {
|
|
456
456
|
const hasDevicePermissions = yield checkDevicePermissions(deviceKinds);
|
|
457
457
|
if (!hasDevicePermissions) {
|
|
@@ -520,7 +520,7 @@ class WebrtcCoreError {
|
|
|
520
520
|
* @returns A LocalCameraStream object or an error.
|
|
521
521
|
*/
|
|
522
522
|
function createCameraStream(cameraStreamConstructor, constraints) {
|
|
523
|
-
return __awaiter$
|
|
523
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
524
524
|
let stream;
|
|
525
525
|
try {
|
|
526
526
|
stream = yield getUserMedia({ video: Object.assign({}, constraints) });
|
|
@@ -540,7 +540,7 @@ function createCameraStream(cameraStreamConstructor, constraints) {
|
|
|
540
540
|
* @returns A LocalMicrophoneStream object or an error.
|
|
541
541
|
*/
|
|
542
542
|
function createMicrophoneStream(microphoneStreamConstructor, constraints) {
|
|
543
|
-
return __awaiter$
|
|
543
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
544
544
|
let stream;
|
|
545
545
|
try {
|
|
546
546
|
stream = yield getUserMedia({ audio: Object.assign({}, constraints) });
|
|
@@ -563,7 +563,7 @@ function createMicrophoneStream(microphoneStreamConstructor, constraints) {
|
|
|
563
563
|
* @returns A Promise that resolves to a LocalCameraStream and a LocalMicrophoneStream or an error.
|
|
564
564
|
*/
|
|
565
565
|
function createCameraAndMicrophoneStreams(cameraStreamConstructor, microphoneStreamConstructor, constraints) {
|
|
566
|
-
return __awaiter$
|
|
566
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
567
567
|
let stream;
|
|
568
568
|
try {
|
|
569
569
|
stream = yield getUserMedia({
|
|
@@ -608,7 +608,7 @@ function createCameraAndMicrophoneStreams(cameraStreamConstructor, microphoneStr
|
|
|
608
608
|
* instead.
|
|
609
609
|
*/
|
|
610
610
|
function createDisplayMedia(options) {
|
|
611
|
-
return __awaiter$
|
|
611
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
612
612
|
var _a, _b;
|
|
613
613
|
let stream;
|
|
614
614
|
const videoConstraints = options.video.constraints || true;
|
|
@@ -649,7 +649,7 @@ function createDisplayMedia(options) {
|
|
|
649
649
|
* @returns A Promise that resolves to a LocalDisplayStream or an error.
|
|
650
650
|
*/
|
|
651
651
|
function createDisplayStream(displayStreamConstructor, videoContentHint) {
|
|
652
|
-
return __awaiter$
|
|
652
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
653
653
|
const [localDisplayStream] = yield createDisplayMedia({
|
|
654
654
|
video: { displayStreamConstructor, videoContentHint },
|
|
655
655
|
});
|
|
@@ -667,7 +667,7 @@ function createDisplayStream(displayStreamConstructor, videoContentHint) {
|
|
|
667
667
|
* instead.
|
|
668
668
|
*/
|
|
669
669
|
function createDisplayStreamWithAudio(displayStreamConstructor, systemAudioStreamConstructor, videoContentHint) {
|
|
670
|
-
return __awaiter$
|
|
670
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
671
671
|
return createDisplayMedia({
|
|
672
672
|
video: { displayStreamConstructor, videoContentHint },
|
|
673
673
|
audio: { systemAudioStreamConstructor },
|
|
@@ -681,7 +681,7 @@ function createDisplayStreamWithAudio(displayStreamConstructor, systemAudioStrea
|
|
|
681
681
|
* @returns List of media devices in an array of MediaDeviceInfo objects.
|
|
682
682
|
*/
|
|
683
683
|
function getDevices(deviceKind) {
|
|
684
|
-
return __awaiter$
|
|
684
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
685
685
|
let devices;
|
|
686
686
|
const deviceKinds = deviceKind
|
|
687
687
|
? [deviceKind]
|
|
@@ -701,7 +701,7 @@ function getDevices(deviceKind) {
|
|
|
701
701
|
* @returns List of microphone devices in an array of MediaDeviceInfo objects.
|
|
702
702
|
*/
|
|
703
703
|
function getAudioInputDevices() {
|
|
704
|
-
return __awaiter$
|
|
704
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
705
705
|
return getDevices(DeviceKind$1.AudioInput);
|
|
706
706
|
});
|
|
707
707
|
}
|
|
@@ -711,7 +711,7 @@ function getAudioInputDevices() {
|
|
|
711
711
|
* @returns List of speaker devices in an array of MediaDeviceInfo objects.
|
|
712
712
|
*/
|
|
713
713
|
function getAudioOutputDevices() {
|
|
714
|
-
return __awaiter$
|
|
714
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
715
715
|
return getDevices(DeviceKind$1.AudioOutput);
|
|
716
716
|
});
|
|
717
717
|
}
|
|
@@ -721,7 +721,7 @@ function getAudioOutputDevices() {
|
|
|
721
721
|
* @returns List of camera devices in an array of MediaDeviceInfo objects.
|
|
722
722
|
*/
|
|
723
723
|
function getVideoInputDevices() {
|
|
724
|
-
return __awaiter$
|
|
724
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
725
725
|
return getDevices(DeviceKind$1.VideoInput);
|
|
726
726
|
});
|
|
727
727
|
}
|
|
@@ -864,7 +864,7 @@ EventEmitter$1$1.prototype.emit = function emit(type) {
|
|
|
864
864
|
ReflectApply$1$1(handler, this, args);
|
|
865
865
|
} else {
|
|
866
866
|
var len = handler.length;
|
|
867
|
-
var listeners = arrayClone$
|
|
867
|
+
var listeners = arrayClone$2(handler, len);
|
|
868
868
|
for (var i = 0; i < len; ++i)
|
|
869
869
|
ReflectApply$1$1(listeners[i], this, args);
|
|
870
870
|
}
|
|
@@ -872,7 +872,7 @@ EventEmitter$1$1.prototype.emit = function emit(type) {
|
|
|
872
872
|
return true;
|
|
873
873
|
};
|
|
874
874
|
|
|
875
|
-
function _addListener$
|
|
875
|
+
function _addListener$2(target, type, listener, prepend) {
|
|
876
876
|
var m;
|
|
877
877
|
var events;
|
|
878
878
|
var existing;
|
|
@@ -935,14 +935,14 @@ function _addListener$1$1(target, type, listener, prepend) {
|
|
|
935
935
|
}
|
|
936
936
|
|
|
937
937
|
EventEmitter$1$1.prototype.addListener = function addListener(type, listener) {
|
|
938
|
-
return _addListener$
|
|
938
|
+
return _addListener$2(this, type, listener, false);
|
|
939
939
|
};
|
|
940
940
|
|
|
941
941
|
EventEmitter$1$1.prototype.on = EventEmitter$1$1.prototype.addListener;
|
|
942
942
|
|
|
943
943
|
EventEmitter$1$1.prototype.prependListener =
|
|
944
944
|
function prependListener(type, listener) {
|
|
945
|
-
return _addListener$
|
|
945
|
+
return _addListener$2(this, type, listener, true);
|
|
946
946
|
};
|
|
947
947
|
|
|
948
948
|
function onceWrapper$1$1() {
|
|
@@ -955,7 +955,7 @@ function onceWrapper$1$1() {
|
|
|
955
955
|
}
|
|
956
956
|
}
|
|
957
957
|
|
|
958
|
-
function _onceWrap$
|
|
958
|
+
function _onceWrap$2(target, type, listener) {
|
|
959
959
|
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
|
|
960
960
|
var wrapped = onceWrapper$1$1.bind(state);
|
|
961
961
|
wrapped.listener = listener;
|
|
@@ -965,14 +965,14 @@ function _onceWrap$1$1(target, type, listener) {
|
|
|
965
965
|
|
|
966
966
|
EventEmitter$1$1.prototype.once = function once(type, listener) {
|
|
967
967
|
checkListener$1$1(listener);
|
|
968
|
-
this.on(type, _onceWrap$
|
|
968
|
+
this.on(type, _onceWrap$2(this, type, listener));
|
|
969
969
|
return this;
|
|
970
970
|
};
|
|
971
971
|
|
|
972
972
|
EventEmitter$1$1.prototype.prependOnceListener =
|
|
973
973
|
function prependOnceListener(type, listener) {
|
|
974
974
|
checkListener$1$1(listener);
|
|
975
|
-
this.prependListener(type, _onceWrap$
|
|
975
|
+
this.prependListener(type, _onceWrap$2(this, type, listener));
|
|
976
976
|
return this;
|
|
977
977
|
};
|
|
978
978
|
|
|
@@ -1016,7 +1016,7 @@ EventEmitter$1$1.prototype.removeListener =
|
|
|
1016
1016
|
if (position === 0)
|
|
1017
1017
|
list.shift();
|
|
1018
1018
|
else {
|
|
1019
|
-
spliceOne$
|
|
1019
|
+
spliceOne$2(list, position);
|
|
1020
1020
|
}
|
|
1021
1021
|
|
|
1022
1022
|
if (list.length === 1)
|
|
@@ -1096,7 +1096,7 @@ function _listeners$1$1(target, type, unwrap) {
|
|
|
1096
1096
|
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
1097
1097
|
|
|
1098
1098
|
return unwrap ?
|
|
1099
|
-
unwrapListeners$
|
|
1099
|
+
unwrapListeners$2(evlistener) : arrayClone$2(evlistener, evlistener.length);
|
|
1100
1100
|
}
|
|
1101
1101
|
|
|
1102
1102
|
EventEmitter$1$1.prototype.listeners = function listeners(type) {
|
|
@@ -1111,12 +1111,12 @@ EventEmitter$1$1.listenerCount = function(emitter, type) {
|
|
|
1111
1111
|
if (typeof emitter.listenerCount === 'function') {
|
|
1112
1112
|
return emitter.listenerCount(type);
|
|
1113
1113
|
} else {
|
|
1114
|
-
return listenerCount$
|
|
1114
|
+
return listenerCount$2.call(emitter, type);
|
|
1115
1115
|
}
|
|
1116
1116
|
};
|
|
1117
1117
|
|
|
1118
|
-
EventEmitter$1$1.prototype.listenerCount = listenerCount$
|
|
1119
|
-
function listenerCount$
|
|
1118
|
+
EventEmitter$1$1.prototype.listenerCount = listenerCount$2;
|
|
1119
|
+
function listenerCount$2(type) {
|
|
1120
1120
|
var events = this._events;
|
|
1121
1121
|
|
|
1122
1122
|
if (events !== undefined) {
|
|
@@ -1136,20 +1136,20 @@ EventEmitter$1$1.prototype.eventNames = function eventNames() {
|
|
|
1136
1136
|
return this._eventsCount > 0 ? ReflectOwnKeys$1$1(this._events) : [];
|
|
1137
1137
|
};
|
|
1138
1138
|
|
|
1139
|
-
function arrayClone$
|
|
1139
|
+
function arrayClone$2(arr, n) {
|
|
1140
1140
|
var copy = new Array(n);
|
|
1141
1141
|
for (var i = 0; i < n; ++i)
|
|
1142
1142
|
copy[i] = arr[i];
|
|
1143
1143
|
return copy;
|
|
1144
1144
|
}
|
|
1145
1145
|
|
|
1146
|
-
function spliceOne$
|
|
1146
|
+
function spliceOne$2(list, index) {
|
|
1147
1147
|
for (; index + 1 < list.length; index++)
|
|
1148
1148
|
list[index] = list[index + 1];
|
|
1149
1149
|
list.pop();
|
|
1150
1150
|
}
|
|
1151
1151
|
|
|
1152
|
-
function unwrapListeners$
|
|
1152
|
+
function unwrapListeners$2(arr) {
|
|
1153
1153
|
var ret = new Array(arr.length);
|
|
1154
1154
|
for (var i = 0; i < ret.length; ++i) {
|
|
1155
1155
|
ret[i] = arr[i].listener || arr[i];
|
|
@@ -1206,11 +1206,11 @@ function eventTargetAgnosticAddListener$1$1(emitter, name, listener, flags) {
|
|
|
1206
1206
|
}
|
|
1207
1207
|
}
|
|
1208
1208
|
|
|
1209
|
-
class EventEmitter$
|
|
1209
|
+
class EventEmitter$3$1 extends events$1$1.exports.EventEmitter {
|
|
1210
1210
|
}
|
|
1211
1211
|
class TypedEvent$1 {
|
|
1212
1212
|
constructor() {
|
|
1213
|
-
this.emitter = new EventEmitter$
|
|
1213
|
+
this.emitter = new EventEmitter$3$1();
|
|
1214
1214
|
}
|
|
1215
1215
|
on(handler) {
|
|
1216
1216
|
this.emitter.on('event', handler);
|
|
@@ -1500,7 +1500,7 @@ class _LocalStream extends Stream {
|
|
|
1500
1500
|
* @param effect - The effect to add.
|
|
1501
1501
|
*/
|
|
1502
1502
|
addEffect(effect) {
|
|
1503
|
-
return __awaiter$
|
|
1503
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1504
1504
|
// Check if the effect has already been added.
|
|
1505
1505
|
if (this.effects.some((e) => e.id === effect.id)) {
|
|
1506
1506
|
return;
|
|
@@ -1637,7 +1637,7 @@ class _LocalStream extends Stream {
|
|
|
1637
1637
|
* Cleanup the local effects.
|
|
1638
1638
|
*/
|
|
1639
1639
|
disposeEffects() {
|
|
1640
|
-
return __awaiter$
|
|
1640
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1641
1641
|
this.loadingEffects.clear();
|
|
1642
1642
|
// Dispose of any effects currently in use
|
|
1643
1643
|
if (this.effects.length > 0) {
|
|
@@ -1662,7 +1662,7 @@ class LocalAudioStream extends LocalStream {
|
|
|
1662
1662
|
* @returns A promise which resolves when the constraints have been successfully applied.
|
|
1663
1663
|
*/
|
|
1664
1664
|
applyConstraints(constraints) {
|
|
1665
|
-
return __awaiter$
|
|
1665
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1666
1666
|
logger$3.log(`Applying constraints to local track:`, constraints);
|
|
1667
1667
|
return this.inputTrack.applyConstraints(constraints).then(() => {
|
|
1668
1668
|
this[exports.LocalStreamEventNames.ConstraintsChange].emit();
|
|
@@ -1682,7 +1682,7 @@ class LocalVideoStream extends LocalStream {
|
|
|
1682
1682
|
* @returns A promise which resolves when the constraints have been successfully applied.
|
|
1683
1683
|
*/
|
|
1684
1684
|
applyConstraints(constraints) {
|
|
1685
|
-
return __awaiter$
|
|
1685
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1686
1686
|
logger$3.log(`Applying constraints to local track:`, constraints);
|
|
1687
1687
|
return this.inputTrack.applyConstraints(constraints).then(() => {
|
|
1688
1688
|
this[exports.LocalStreamEventNames.ConstraintsChange].emit();
|
|
@@ -1863,6 +1863,478 @@ class _RemoteStream extends Stream {
|
|
|
1863
1863
|
_a$6 = exports.RemoteStreamEventNames.MediaStateChange;
|
|
1864
1864
|
const RemoteStream = AddEvents(_RemoteStream);
|
|
1865
1865
|
|
|
1866
|
+
var domain;
|
|
1867
|
+
|
|
1868
|
+
// This constructor is used to store event handlers. Instantiating this is
|
|
1869
|
+
// faster than explicitly calling `Object.create(null)` to get a "clean" empty
|
|
1870
|
+
// object (tested with v8 v4.9).
|
|
1871
|
+
function EventHandlers() {}
|
|
1872
|
+
EventHandlers.prototype = Object.create(null);
|
|
1873
|
+
|
|
1874
|
+
function EventEmitter$2$1() {
|
|
1875
|
+
EventEmitter$2$1.init.call(this);
|
|
1876
|
+
}
|
|
1877
|
+
|
|
1878
|
+
// nodejs oddity
|
|
1879
|
+
// require('events') === require('events').EventEmitter
|
|
1880
|
+
EventEmitter$2$1.EventEmitter = EventEmitter$2$1;
|
|
1881
|
+
|
|
1882
|
+
EventEmitter$2$1.usingDomains = false;
|
|
1883
|
+
|
|
1884
|
+
EventEmitter$2$1.prototype.domain = undefined;
|
|
1885
|
+
EventEmitter$2$1.prototype._events = undefined;
|
|
1886
|
+
EventEmitter$2$1.prototype._maxListeners = undefined;
|
|
1887
|
+
|
|
1888
|
+
// By default EventEmitters will print a warning if more than 10 listeners are
|
|
1889
|
+
// added to it. This is a useful default which helps finding memory leaks.
|
|
1890
|
+
EventEmitter$2$1.defaultMaxListeners = 10;
|
|
1891
|
+
|
|
1892
|
+
EventEmitter$2$1.init = function() {
|
|
1893
|
+
this.domain = null;
|
|
1894
|
+
if (EventEmitter$2$1.usingDomains) {
|
|
1895
|
+
// if there is an active domain, then attach to it.
|
|
1896
|
+
if (domain.active ) ;
|
|
1897
|
+
}
|
|
1898
|
+
|
|
1899
|
+
if (!this._events || this._events === Object.getPrototypeOf(this)._events) {
|
|
1900
|
+
this._events = new EventHandlers();
|
|
1901
|
+
this._eventsCount = 0;
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
this._maxListeners = this._maxListeners || undefined;
|
|
1905
|
+
};
|
|
1906
|
+
|
|
1907
|
+
// Obviously not all Emitters should be limited to 10. This function allows
|
|
1908
|
+
// that to be increased. Set to zero for unlimited.
|
|
1909
|
+
EventEmitter$2$1.prototype.setMaxListeners = function setMaxListeners(n) {
|
|
1910
|
+
if (typeof n !== 'number' || n < 0 || isNaN(n))
|
|
1911
|
+
throw new TypeError('"n" argument must be a positive number');
|
|
1912
|
+
this._maxListeners = n;
|
|
1913
|
+
return this;
|
|
1914
|
+
};
|
|
1915
|
+
|
|
1916
|
+
function $getMaxListeners(that) {
|
|
1917
|
+
if (that._maxListeners === undefined)
|
|
1918
|
+
return EventEmitter$2$1.defaultMaxListeners;
|
|
1919
|
+
return that._maxListeners;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
EventEmitter$2$1.prototype.getMaxListeners = function getMaxListeners() {
|
|
1923
|
+
return $getMaxListeners(this);
|
|
1924
|
+
};
|
|
1925
|
+
|
|
1926
|
+
// These standalone emit* functions are used to optimize calling of event
|
|
1927
|
+
// handlers for fast cases because emit() itself often has a variable number of
|
|
1928
|
+
// arguments and can be deoptimized because of that. These functions always have
|
|
1929
|
+
// the same number of arguments and thus do not get deoptimized, so the code
|
|
1930
|
+
// inside them can execute faster.
|
|
1931
|
+
function emitNone(handler, isFn, self) {
|
|
1932
|
+
if (isFn)
|
|
1933
|
+
handler.call(self);
|
|
1934
|
+
else {
|
|
1935
|
+
var len = handler.length;
|
|
1936
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1937
|
+
for (var i = 0; i < len; ++i)
|
|
1938
|
+
listeners[i].call(self);
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
function emitOne(handler, isFn, self, arg1) {
|
|
1942
|
+
if (isFn)
|
|
1943
|
+
handler.call(self, arg1);
|
|
1944
|
+
else {
|
|
1945
|
+
var len = handler.length;
|
|
1946
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1947
|
+
for (var i = 0; i < len; ++i)
|
|
1948
|
+
listeners[i].call(self, arg1);
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
function emitTwo(handler, isFn, self, arg1, arg2) {
|
|
1952
|
+
if (isFn)
|
|
1953
|
+
handler.call(self, arg1, arg2);
|
|
1954
|
+
else {
|
|
1955
|
+
var len = handler.length;
|
|
1956
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1957
|
+
for (var i = 0; i < len; ++i)
|
|
1958
|
+
listeners[i].call(self, arg1, arg2);
|
|
1959
|
+
}
|
|
1960
|
+
}
|
|
1961
|
+
function emitThree(handler, isFn, self, arg1, arg2, arg3) {
|
|
1962
|
+
if (isFn)
|
|
1963
|
+
handler.call(self, arg1, arg2, arg3);
|
|
1964
|
+
else {
|
|
1965
|
+
var len = handler.length;
|
|
1966
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1967
|
+
for (var i = 0; i < len; ++i)
|
|
1968
|
+
listeners[i].call(self, arg1, arg2, arg3);
|
|
1969
|
+
}
|
|
1970
|
+
}
|
|
1971
|
+
|
|
1972
|
+
function emitMany(handler, isFn, self, args) {
|
|
1973
|
+
if (isFn)
|
|
1974
|
+
handler.apply(self, args);
|
|
1975
|
+
else {
|
|
1976
|
+
var len = handler.length;
|
|
1977
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1978
|
+
for (var i = 0; i < len; ++i)
|
|
1979
|
+
listeners[i].apply(self, args);
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1982
|
+
|
|
1983
|
+
EventEmitter$2$1.prototype.emit = function emit(type) {
|
|
1984
|
+
var er, handler, len, args, i, events, domain;
|
|
1985
|
+
var doError = (type === 'error');
|
|
1986
|
+
|
|
1987
|
+
events = this._events;
|
|
1988
|
+
if (events)
|
|
1989
|
+
doError = (doError && events.error == null);
|
|
1990
|
+
else if (!doError)
|
|
1991
|
+
return false;
|
|
1992
|
+
|
|
1993
|
+
domain = this.domain;
|
|
1994
|
+
|
|
1995
|
+
// If there is no 'error' event listener then throw.
|
|
1996
|
+
if (doError) {
|
|
1997
|
+
er = arguments[1];
|
|
1998
|
+
if (domain) {
|
|
1999
|
+
if (!er)
|
|
2000
|
+
er = new Error('Uncaught, unspecified "error" event');
|
|
2001
|
+
er.domainEmitter = this;
|
|
2002
|
+
er.domain = domain;
|
|
2003
|
+
er.domainThrown = false;
|
|
2004
|
+
domain.emit('error', er);
|
|
2005
|
+
} else if (er instanceof Error) {
|
|
2006
|
+
throw er; // Unhandled 'error' event
|
|
2007
|
+
} else {
|
|
2008
|
+
// At least give some kind of context to the user
|
|
2009
|
+
var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
|
|
2010
|
+
err.context = er;
|
|
2011
|
+
throw err;
|
|
2012
|
+
}
|
|
2013
|
+
return false;
|
|
2014
|
+
}
|
|
2015
|
+
|
|
2016
|
+
handler = events[type];
|
|
2017
|
+
|
|
2018
|
+
if (!handler)
|
|
2019
|
+
return false;
|
|
2020
|
+
|
|
2021
|
+
var isFn = typeof handler === 'function';
|
|
2022
|
+
len = arguments.length;
|
|
2023
|
+
switch (len) {
|
|
2024
|
+
// fast cases
|
|
2025
|
+
case 1:
|
|
2026
|
+
emitNone(handler, isFn, this);
|
|
2027
|
+
break;
|
|
2028
|
+
case 2:
|
|
2029
|
+
emitOne(handler, isFn, this, arguments[1]);
|
|
2030
|
+
break;
|
|
2031
|
+
case 3:
|
|
2032
|
+
emitTwo(handler, isFn, this, arguments[1], arguments[2]);
|
|
2033
|
+
break;
|
|
2034
|
+
case 4:
|
|
2035
|
+
emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
|
|
2036
|
+
break;
|
|
2037
|
+
// slower
|
|
2038
|
+
default:
|
|
2039
|
+
args = new Array(len - 1);
|
|
2040
|
+
for (i = 1; i < len; i++)
|
|
2041
|
+
args[i - 1] = arguments[i];
|
|
2042
|
+
emitMany(handler, isFn, this, args);
|
|
2043
|
+
}
|
|
2044
|
+
|
|
2045
|
+
return true;
|
|
2046
|
+
};
|
|
2047
|
+
|
|
2048
|
+
function _addListener$1$1(target, type, listener, prepend) {
|
|
2049
|
+
var m;
|
|
2050
|
+
var events;
|
|
2051
|
+
var existing;
|
|
2052
|
+
|
|
2053
|
+
if (typeof listener !== 'function')
|
|
2054
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2055
|
+
|
|
2056
|
+
events = target._events;
|
|
2057
|
+
if (!events) {
|
|
2058
|
+
events = target._events = new EventHandlers();
|
|
2059
|
+
target._eventsCount = 0;
|
|
2060
|
+
} else {
|
|
2061
|
+
// To avoid recursion in the case that type === "newListener"! Before
|
|
2062
|
+
// adding it to the listeners, first emit "newListener".
|
|
2063
|
+
if (events.newListener) {
|
|
2064
|
+
target.emit('newListener', type,
|
|
2065
|
+
listener.listener ? listener.listener : listener);
|
|
2066
|
+
|
|
2067
|
+
// Re-assign `events` because a newListener handler could have caused the
|
|
2068
|
+
// this._events to be assigned to a new object
|
|
2069
|
+
events = target._events;
|
|
2070
|
+
}
|
|
2071
|
+
existing = events[type];
|
|
2072
|
+
}
|
|
2073
|
+
|
|
2074
|
+
if (!existing) {
|
|
2075
|
+
// Optimize the case of one listener. Don't need the extra array object.
|
|
2076
|
+
existing = events[type] = listener;
|
|
2077
|
+
++target._eventsCount;
|
|
2078
|
+
} else {
|
|
2079
|
+
if (typeof existing === 'function') {
|
|
2080
|
+
// Adding the second element, need to change to array.
|
|
2081
|
+
existing = events[type] = prepend ? [listener, existing] :
|
|
2082
|
+
[existing, listener];
|
|
2083
|
+
} else {
|
|
2084
|
+
// If we've already got an array, just append.
|
|
2085
|
+
if (prepend) {
|
|
2086
|
+
existing.unshift(listener);
|
|
2087
|
+
} else {
|
|
2088
|
+
existing.push(listener);
|
|
2089
|
+
}
|
|
2090
|
+
}
|
|
2091
|
+
|
|
2092
|
+
// Check for listener leak
|
|
2093
|
+
if (!existing.warned) {
|
|
2094
|
+
m = $getMaxListeners(target);
|
|
2095
|
+
if (m && m > 0 && existing.length > m) {
|
|
2096
|
+
existing.warned = true;
|
|
2097
|
+
var w = new Error('Possible EventEmitter memory leak detected. ' +
|
|
2098
|
+
existing.length + ' ' + type + ' listeners added. ' +
|
|
2099
|
+
'Use emitter.setMaxListeners() to increase limit');
|
|
2100
|
+
w.name = 'MaxListenersExceededWarning';
|
|
2101
|
+
w.emitter = target;
|
|
2102
|
+
w.type = type;
|
|
2103
|
+
w.count = existing.length;
|
|
2104
|
+
emitWarning(w);
|
|
2105
|
+
}
|
|
2106
|
+
}
|
|
2107
|
+
}
|
|
2108
|
+
|
|
2109
|
+
return target;
|
|
2110
|
+
}
|
|
2111
|
+
function emitWarning(e) {
|
|
2112
|
+
typeof console.warn === 'function' ? console.warn(e) : console.log(e);
|
|
2113
|
+
}
|
|
2114
|
+
EventEmitter$2$1.prototype.addListener = function addListener(type, listener) {
|
|
2115
|
+
return _addListener$1$1(this, type, listener, false);
|
|
2116
|
+
};
|
|
2117
|
+
|
|
2118
|
+
EventEmitter$2$1.prototype.on = EventEmitter$2$1.prototype.addListener;
|
|
2119
|
+
|
|
2120
|
+
EventEmitter$2$1.prototype.prependListener =
|
|
2121
|
+
function prependListener(type, listener) {
|
|
2122
|
+
return _addListener$1$1(this, type, listener, true);
|
|
2123
|
+
};
|
|
2124
|
+
|
|
2125
|
+
function _onceWrap$1$1(target, type, listener) {
|
|
2126
|
+
var fired = false;
|
|
2127
|
+
function g() {
|
|
2128
|
+
target.removeListener(type, g);
|
|
2129
|
+
if (!fired) {
|
|
2130
|
+
fired = true;
|
|
2131
|
+
listener.apply(target, arguments);
|
|
2132
|
+
}
|
|
2133
|
+
}
|
|
2134
|
+
g.listener = listener;
|
|
2135
|
+
return g;
|
|
2136
|
+
}
|
|
2137
|
+
|
|
2138
|
+
EventEmitter$2$1.prototype.once = function once(type, listener) {
|
|
2139
|
+
if (typeof listener !== 'function')
|
|
2140
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2141
|
+
this.on(type, _onceWrap$1$1(this, type, listener));
|
|
2142
|
+
return this;
|
|
2143
|
+
};
|
|
2144
|
+
|
|
2145
|
+
EventEmitter$2$1.prototype.prependOnceListener =
|
|
2146
|
+
function prependOnceListener(type, listener) {
|
|
2147
|
+
if (typeof listener !== 'function')
|
|
2148
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2149
|
+
this.prependListener(type, _onceWrap$1$1(this, type, listener));
|
|
2150
|
+
return this;
|
|
2151
|
+
};
|
|
2152
|
+
|
|
2153
|
+
// emits a 'removeListener' event iff the listener was removed
|
|
2154
|
+
EventEmitter$2$1.prototype.removeListener =
|
|
2155
|
+
function removeListener(type, listener) {
|
|
2156
|
+
var list, events, position, i, originalListener;
|
|
2157
|
+
|
|
2158
|
+
if (typeof listener !== 'function')
|
|
2159
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2160
|
+
|
|
2161
|
+
events = this._events;
|
|
2162
|
+
if (!events)
|
|
2163
|
+
return this;
|
|
2164
|
+
|
|
2165
|
+
list = events[type];
|
|
2166
|
+
if (!list)
|
|
2167
|
+
return this;
|
|
2168
|
+
|
|
2169
|
+
if (list === listener || (list.listener && list.listener === listener)) {
|
|
2170
|
+
if (--this._eventsCount === 0)
|
|
2171
|
+
this._events = new EventHandlers();
|
|
2172
|
+
else {
|
|
2173
|
+
delete events[type];
|
|
2174
|
+
if (events.removeListener)
|
|
2175
|
+
this.emit('removeListener', type, list.listener || listener);
|
|
2176
|
+
}
|
|
2177
|
+
} else if (typeof list !== 'function') {
|
|
2178
|
+
position = -1;
|
|
2179
|
+
|
|
2180
|
+
for (i = list.length; i-- > 0;) {
|
|
2181
|
+
if (list[i] === listener ||
|
|
2182
|
+
(list[i].listener && list[i].listener === listener)) {
|
|
2183
|
+
originalListener = list[i].listener;
|
|
2184
|
+
position = i;
|
|
2185
|
+
break;
|
|
2186
|
+
}
|
|
2187
|
+
}
|
|
2188
|
+
|
|
2189
|
+
if (position < 0)
|
|
2190
|
+
return this;
|
|
2191
|
+
|
|
2192
|
+
if (list.length === 1) {
|
|
2193
|
+
list[0] = undefined;
|
|
2194
|
+
if (--this._eventsCount === 0) {
|
|
2195
|
+
this._events = new EventHandlers();
|
|
2196
|
+
return this;
|
|
2197
|
+
} else {
|
|
2198
|
+
delete events[type];
|
|
2199
|
+
}
|
|
2200
|
+
} else {
|
|
2201
|
+
spliceOne$1$1(list, position);
|
|
2202
|
+
}
|
|
2203
|
+
|
|
2204
|
+
if (events.removeListener)
|
|
2205
|
+
this.emit('removeListener', type, originalListener || listener);
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
return this;
|
|
2209
|
+
};
|
|
2210
|
+
|
|
2211
|
+
// Alias for removeListener added in NodeJS 10.0
|
|
2212
|
+
// https://nodejs.org/api/events.html#events_emitter_off_eventname_listener
|
|
2213
|
+
EventEmitter$2$1.prototype.off = function(type, listener){
|
|
2214
|
+
return this.removeListener(type, listener);
|
|
2215
|
+
};
|
|
2216
|
+
|
|
2217
|
+
EventEmitter$2$1.prototype.removeAllListeners =
|
|
2218
|
+
function removeAllListeners(type) {
|
|
2219
|
+
var listeners, events;
|
|
2220
|
+
|
|
2221
|
+
events = this._events;
|
|
2222
|
+
if (!events)
|
|
2223
|
+
return this;
|
|
2224
|
+
|
|
2225
|
+
// not listening for removeListener, no need to emit
|
|
2226
|
+
if (!events.removeListener) {
|
|
2227
|
+
if (arguments.length === 0) {
|
|
2228
|
+
this._events = new EventHandlers();
|
|
2229
|
+
this._eventsCount = 0;
|
|
2230
|
+
} else if (events[type]) {
|
|
2231
|
+
if (--this._eventsCount === 0)
|
|
2232
|
+
this._events = new EventHandlers();
|
|
2233
|
+
else
|
|
2234
|
+
delete events[type];
|
|
2235
|
+
}
|
|
2236
|
+
return this;
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
// emit removeListener for all listeners on all events
|
|
2240
|
+
if (arguments.length === 0) {
|
|
2241
|
+
var keys = Object.keys(events);
|
|
2242
|
+
for (var i = 0, key; i < keys.length; ++i) {
|
|
2243
|
+
key = keys[i];
|
|
2244
|
+
if (key === 'removeListener') continue;
|
|
2245
|
+
this.removeAllListeners(key);
|
|
2246
|
+
}
|
|
2247
|
+
this.removeAllListeners('removeListener');
|
|
2248
|
+
this._events = new EventHandlers();
|
|
2249
|
+
this._eventsCount = 0;
|
|
2250
|
+
return this;
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2253
|
+
listeners = events[type];
|
|
2254
|
+
|
|
2255
|
+
if (typeof listeners === 'function') {
|
|
2256
|
+
this.removeListener(type, listeners);
|
|
2257
|
+
} else if (listeners) {
|
|
2258
|
+
// LIFO order
|
|
2259
|
+
do {
|
|
2260
|
+
this.removeListener(type, listeners[listeners.length - 1]);
|
|
2261
|
+
} while (listeners[0]);
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
return this;
|
|
2265
|
+
};
|
|
2266
|
+
|
|
2267
|
+
EventEmitter$2$1.prototype.listeners = function listeners(type) {
|
|
2268
|
+
var evlistener;
|
|
2269
|
+
var ret;
|
|
2270
|
+
var events = this._events;
|
|
2271
|
+
|
|
2272
|
+
if (!events)
|
|
2273
|
+
ret = [];
|
|
2274
|
+
else {
|
|
2275
|
+
evlistener = events[type];
|
|
2276
|
+
if (!evlistener)
|
|
2277
|
+
ret = [];
|
|
2278
|
+
else if (typeof evlistener === 'function')
|
|
2279
|
+
ret = [evlistener.listener || evlistener];
|
|
2280
|
+
else
|
|
2281
|
+
ret = unwrapListeners$1$1(evlistener);
|
|
2282
|
+
}
|
|
2283
|
+
|
|
2284
|
+
return ret;
|
|
2285
|
+
};
|
|
2286
|
+
|
|
2287
|
+
EventEmitter$2$1.listenerCount = function(emitter, type) {
|
|
2288
|
+
if (typeof emitter.listenerCount === 'function') {
|
|
2289
|
+
return emitter.listenerCount(type);
|
|
2290
|
+
} else {
|
|
2291
|
+
return listenerCount$1$1.call(emitter, type);
|
|
2292
|
+
}
|
|
2293
|
+
};
|
|
2294
|
+
|
|
2295
|
+
EventEmitter$2$1.prototype.listenerCount = listenerCount$1$1;
|
|
2296
|
+
function listenerCount$1$1(type) {
|
|
2297
|
+
var events = this._events;
|
|
2298
|
+
|
|
2299
|
+
if (events) {
|
|
2300
|
+
var evlistener = events[type];
|
|
2301
|
+
|
|
2302
|
+
if (typeof evlistener === 'function') {
|
|
2303
|
+
return 1;
|
|
2304
|
+
} else if (evlistener) {
|
|
2305
|
+
return evlistener.length;
|
|
2306
|
+
}
|
|
2307
|
+
}
|
|
2308
|
+
|
|
2309
|
+
return 0;
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2312
|
+
EventEmitter$2$1.prototype.eventNames = function eventNames() {
|
|
2313
|
+
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
|
|
2314
|
+
};
|
|
2315
|
+
|
|
2316
|
+
// About 1.5x faster than the two-arg version of Array#splice().
|
|
2317
|
+
function spliceOne$1$1(list, index) {
|
|
2318
|
+
for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
|
|
2319
|
+
list[i] = list[k];
|
|
2320
|
+
list.pop();
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
function arrayClone$1$1(arr, i) {
|
|
2324
|
+
var copy = new Array(i);
|
|
2325
|
+
while (i--)
|
|
2326
|
+
copy[i] = arr[i];
|
|
2327
|
+
return copy;
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2330
|
+
function unwrapListeners$1$1(arr) {
|
|
2331
|
+
var ret = new Array(arr.length);
|
|
2332
|
+
for (var i = 0; i < ret.length; ++i) {
|
|
2333
|
+
ret[i] = arr[i].listener || arr[i];
|
|
2334
|
+
}
|
|
2335
|
+
return ret;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
1866
2338
|
var commonjsGlobal$3 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
1867
2339
|
|
|
1868
2340
|
function getDefaultExportFromCjs$1 (x) {
|
|
@@ -1884,6 +2356,12 @@ var BrowserName$1;
|
|
|
1884
2356
|
BrowserName["EDGE"] = "Microsoft Edge";
|
|
1885
2357
|
BrowserName["SAFARI"] = "Safari";
|
|
1886
2358
|
})(BrowserName$1 || (BrowserName$1 = {}));
|
|
2359
|
+
var OSName$1;
|
|
2360
|
+
(function (OSName) {
|
|
2361
|
+
OSName["WINDOWS"] = "Windows";
|
|
2362
|
+
OSName["MAC"] = "macOS";
|
|
2363
|
+
OSName["LINUX"] = "Linux";
|
|
2364
|
+
})(OSName$1 || (OSName$1 = {}));
|
|
1887
2365
|
class BrowserInfo$1 {
|
|
1888
2366
|
static getBrowserDetails() {
|
|
1889
2367
|
return this.browser.getBrowser();
|
|
@@ -1909,6 +2387,15 @@ class BrowserInfo$1 {
|
|
|
1909
2387
|
static isSafari() {
|
|
1910
2388
|
return this.browser.getBrowserName() === BrowserName$1.SAFARI;
|
|
1911
2389
|
}
|
|
2390
|
+
static isWindows() {
|
|
2391
|
+
return this.browser.getOSName() === OSName$1.WINDOWS;
|
|
2392
|
+
}
|
|
2393
|
+
static isMac() {
|
|
2394
|
+
return this.browser.getOSName() === OSName$1.MAC;
|
|
2395
|
+
}
|
|
2396
|
+
static isLinux() {
|
|
2397
|
+
return this.browser.getOSName() === OSName$1.LINUX;
|
|
2398
|
+
}
|
|
1912
2399
|
static isVersionGreaterThan(version) {
|
|
1913
2400
|
const browserName = this.browser.getBrowserName();
|
|
1914
2401
|
const checkTree = { [browserName]: `>${version}` };
|
|
@@ -1937,12 +2424,44 @@ class BrowserInfo$1 {
|
|
|
1937
2424
|
}
|
|
1938
2425
|
BrowserInfo$1.browser = Bowser$1.getParser(window.navigator.userAgent);
|
|
1939
2426
|
|
|
2427
|
+
var SystemInfoEvents$1;
|
|
2428
|
+
(function (SystemInfoEvents) {
|
|
2429
|
+
SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
|
|
2430
|
+
})(SystemInfoEvents$1 || (SystemInfoEvents$1 = {}));
|
|
2431
|
+
class PressureObserverHelper$1 extends EventEmitter$2$1 {
|
|
2432
|
+
constructor() {
|
|
2433
|
+
super();
|
|
2434
|
+
this.lastCpuPressure = undefined;
|
|
2435
|
+
if (PressureObserverHelper$1.isPressureObserverSupported()) {
|
|
2436
|
+
this.observer = new PressureObserver(this.handleStateChange.bind(this));
|
|
2437
|
+
if (this.observer) {
|
|
2438
|
+
this.observer.observe('cpu');
|
|
2439
|
+
}
|
|
2440
|
+
}
|
|
2441
|
+
}
|
|
2442
|
+
handleStateChange(records) {
|
|
2443
|
+
records.forEach((record) => {
|
|
2444
|
+
if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
|
|
2445
|
+
this.lastCpuPressure = record.state;
|
|
2446
|
+
this.emit(SystemInfoEvents$1.CpuPressureStateChange, record.state);
|
|
2447
|
+
}
|
|
2448
|
+
});
|
|
2449
|
+
}
|
|
2450
|
+
getCpuPressure() {
|
|
2451
|
+
return this.lastCpuPressure;
|
|
2452
|
+
}
|
|
2453
|
+
static isPressureObserverSupported() {
|
|
2454
|
+
return 'PressureObserver' in window;
|
|
2455
|
+
}
|
|
2456
|
+
}
|
|
2457
|
+
new PressureObserverHelper$1();
|
|
2458
|
+
|
|
1940
2459
|
var CapabilityState$1;
|
|
1941
2460
|
(function (CapabilityState) {
|
|
1942
2461
|
CapabilityState["NOT_CAPABLE"] = "not capable";
|
|
1943
2462
|
CapabilityState["CAPABLE"] = "capable";
|
|
1944
2463
|
CapabilityState["UNKNOWN"] = "unknown";
|
|
1945
|
-
})(CapabilityState$1 || (CapabilityState$1 = {}));
|
|
2464
|
+
})(CapabilityState$1 || (CapabilityState$1 = {}));
|
|
1946
2465
|
|
|
1947
2466
|
var events$2 = {exports: {}};
|
|
1948
2467
|
|
|
@@ -2078,7 +2597,7 @@ EventEmitter$1$2.prototype.emit = function emit(type) {
|
|
|
2078
2597
|
ReflectApply$2(handler, this, args);
|
|
2079
2598
|
} else {
|
|
2080
2599
|
var len = handler.length;
|
|
2081
|
-
var listeners = arrayClone$
|
|
2600
|
+
var listeners = arrayClone$3(handler, len);
|
|
2082
2601
|
for (var i = 0; i < len; ++i)
|
|
2083
2602
|
ReflectApply$2(listeners[i], this, args);
|
|
2084
2603
|
}
|
|
@@ -2086,7 +2605,7 @@ EventEmitter$1$2.prototype.emit = function emit(type) {
|
|
|
2086
2605
|
return true;
|
|
2087
2606
|
};
|
|
2088
2607
|
|
|
2089
|
-
function _addListener$
|
|
2608
|
+
function _addListener$3(target, type, listener, prepend) {
|
|
2090
2609
|
var m;
|
|
2091
2610
|
var events;
|
|
2092
2611
|
var existing;
|
|
@@ -2149,14 +2668,14 @@ function _addListener$2(target, type, listener, prepend) {
|
|
|
2149
2668
|
}
|
|
2150
2669
|
|
|
2151
2670
|
EventEmitter$1$2.prototype.addListener = function addListener(type, listener) {
|
|
2152
|
-
return _addListener$
|
|
2671
|
+
return _addListener$3(this, type, listener, false);
|
|
2153
2672
|
};
|
|
2154
2673
|
|
|
2155
2674
|
EventEmitter$1$2.prototype.on = EventEmitter$1$2.prototype.addListener;
|
|
2156
2675
|
|
|
2157
2676
|
EventEmitter$1$2.prototype.prependListener =
|
|
2158
2677
|
function prependListener(type, listener) {
|
|
2159
|
-
return _addListener$
|
|
2678
|
+
return _addListener$3(this, type, listener, true);
|
|
2160
2679
|
};
|
|
2161
2680
|
|
|
2162
2681
|
function onceWrapper$2() {
|
|
@@ -2169,7 +2688,7 @@ function onceWrapper$2() {
|
|
|
2169
2688
|
}
|
|
2170
2689
|
}
|
|
2171
2690
|
|
|
2172
|
-
function _onceWrap$
|
|
2691
|
+
function _onceWrap$3(target, type, listener) {
|
|
2173
2692
|
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
|
|
2174
2693
|
var wrapped = onceWrapper$2.bind(state);
|
|
2175
2694
|
wrapped.listener = listener;
|
|
@@ -2179,14 +2698,14 @@ function _onceWrap$2(target, type, listener) {
|
|
|
2179
2698
|
|
|
2180
2699
|
EventEmitter$1$2.prototype.once = function once(type, listener) {
|
|
2181
2700
|
checkListener$2(listener);
|
|
2182
|
-
this.on(type, _onceWrap$
|
|
2701
|
+
this.on(type, _onceWrap$3(this, type, listener));
|
|
2183
2702
|
return this;
|
|
2184
2703
|
};
|
|
2185
2704
|
|
|
2186
2705
|
EventEmitter$1$2.prototype.prependOnceListener =
|
|
2187
2706
|
function prependOnceListener(type, listener) {
|
|
2188
2707
|
checkListener$2(listener);
|
|
2189
|
-
this.prependListener(type, _onceWrap$
|
|
2708
|
+
this.prependListener(type, _onceWrap$3(this, type, listener));
|
|
2190
2709
|
return this;
|
|
2191
2710
|
};
|
|
2192
2711
|
|
|
@@ -2230,7 +2749,7 @@ EventEmitter$1$2.prototype.removeListener =
|
|
|
2230
2749
|
if (position === 0)
|
|
2231
2750
|
list.shift();
|
|
2232
2751
|
else {
|
|
2233
|
-
spliceOne$
|
|
2752
|
+
spliceOne$3(list, position);
|
|
2234
2753
|
}
|
|
2235
2754
|
|
|
2236
2755
|
if (list.length === 1)
|
|
@@ -2310,7 +2829,7 @@ function _listeners$2(target, type, unwrap) {
|
|
|
2310
2829
|
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
2311
2830
|
|
|
2312
2831
|
return unwrap ?
|
|
2313
|
-
unwrapListeners$
|
|
2832
|
+
unwrapListeners$3(evlistener) : arrayClone$3(evlistener, evlistener.length);
|
|
2314
2833
|
}
|
|
2315
2834
|
|
|
2316
2835
|
EventEmitter$1$2.prototype.listeners = function listeners(type) {
|
|
@@ -2325,12 +2844,12 @@ EventEmitter$1$2.listenerCount = function(emitter, type) {
|
|
|
2325
2844
|
if (typeof emitter.listenerCount === 'function') {
|
|
2326
2845
|
return emitter.listenerCount(type);
|
|
2327
2846
|
} else {
|
|
2328
|
-
return listenerCount$
|
|
2847
|
+
return listenerCount$3.call(emitter, type);
|
|
2329
2848
|
}
|
|
2330
2849
|
};
|
|
2331
2850
|
|
|
2332
|
-
EventEmitter$1$2.prototype.listenerCount = listenerCount$
|
|
2333
|
-
function listenerCount$
|
|
2851
|
+
EventEmitter$1$2.prototype.listenerCount = listenerCount$3;
|
|
2852
|
+
function listenerCount$3(type) {
|
|
2334
2853
|
var events = this._events;
|
|
2335
2854
|
|
|
2336
2855
|
if (events !== undefined) {
|
|
@@ -2350,20 +2869,20 @@ EventEmitter$1$2.prototype.eventNames = function eventNames() {
|
|
|
2350
2869
|
return this._eventsCount > 0 ? ReflectOwnKeys$2(this._events) : [];
|
|
2351
2870
|
};
|
|
2352
2871
|
|
|
2353
|
-
function arrayClone$
|
|
2872
|
+
function arrayClone$3(arr, n) {
|
|
2354
2873
|
var copy = new Array(n);
|
|
2355
2874
|
for (var i = 0; i < n; ++i)
|
|
2356
2875
|
copy[i] = arr[i];
|
|
2357
2876
|
return copy;
|
|
2358
2877
|
}
|
|
2359
2878
|
|
|
2360
|
-
function spliceOne$
|
|
2879
|
+
function spliceOne$3(list, index) {
|
|
2361
2880
|
for (; index + 1 < list.length; index++)
|
|
2362
2881
|
list[index] = list[index + 1];
|
|
2363
2882
|
list.pop();
|
|
2364
2883
|
}
|
|
2365
2884
|
|
|
2366
|
-
function unwrapListeners$
|
|
2885
|
+
function unwrapListeners$3(arr) {
|
|
2367
2886
|
var ret = new Array(arr.length);
|
|
2368
2887
|
for (var i = 0; i < ret.length; ++i) {
|
|
2369
2888
|
ret[i] = arr[i].listener || arr[i];
|
|
@@ -6064,7 +6583,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6064
6583
|
* other peer.
|
|
6065
6584
|
*/
|
|
6066
6585
|
createAnswer(options) {
|
|
6067
|
-
return __awaiter$
|
|
6586
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6068
6587
|
return this.pc.createAnswer(options).then((answer) => {
|
|
6069
6588
|
this.emit(PeerConnection.Events.CreateAnswerOnSuccess, answer);
|
|
6070
6589
|
return answer;
|
|
@@ -6082,7 +6601,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6082
6601
|
* That received offer should be delivered through the signaling server to a remote peer.
|
|
6083
6602
|
*/
|
|
6084
6603
|
createOffer(options) {
|
|
6085
|
-
return __awaiter$
|
|
6604
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6086
6605
|
return this.pc.createOffer(options).then((offer) => {
|
|
6087
6606
|
this.emit(PeerConnection.Events.CreateOfferOnSuccess, offer);
|
|
6088
6607
|
return offer;
|
|
@@ -6098,7 +6617,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6098
6617
|
* successfully changed or rejected if the change cannot be applied.
|
|
6099
6618
|
*/
|
|
6100
6619
|
setLocalDescription(description) {
|
|
6101
|
-
return __awaiter$
|
|
6620
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6102
6621
|
var _a;
|
|
6103
6622
|
// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even
|
|
6104
6623
|
// though it violates https://datatracker.ietf.org/doc/html/rfc8866. See
|
|
@@ -6128,7 +6647,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6128
6647
|
* specified description is incompatible with one or both of the peers on the connection).
|
|
6129
6648
|
*/
|
|
6130
6649
|
setRemoteDescription(description) {
|
|
6131
|
-
return __awaiter$
|
|
6650
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6132
6651
|
return this.pc.setRemoteDescription(description).then(() => {
|
|
6133
6652
|
this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess, description);
|
|
6134
6653
|
});
|
|
@@ -6203,7 +6722,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6203
6722
|
* @returns The connection type which would be `ConnectionType`.
|
|
6204
6723
|
*/
|
|
6205
6724
|
getCurrentConnectionType() {
|
|
6206
|
-
return __awaiter$
|
|
6725
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6207
6726
|
var _a;
|
|
6208
6727
|
// make sure this method only can be called when the ice connection is established;
|
|
6209
6728
|
const isIceConnected = this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';
|
|
@@ -7658,7 +8177,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
7658
8177
|
PERFORMANCE OF THIS SOFTWARE.
|
|
7659
8178
|
***************************************************************************** */
|
|
7660
8179
|
|
|
7661
|
-
function __awaiter
|
|
8180
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
7662
8181
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7663
8182
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7664
8183
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -7668,53 +8187,15 @@ function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
|
7668
8187
|
});
|
|
7669
8188
|
}
|
|
7670
8189
|
|
|
7671
|
-
|
|
7672
|
-
|
|
7673
|
-
var __awaiter = (commonjsGlobal$1 && commonjsGlobal$1.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7674
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7675
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7676
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7677
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7678
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7679
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
7680
|
-
});
|
|
7681
|
-
};
|
|
7682
|
-
var __generator = (commonjsGlobal$1 && commonjsGlobal$1.__generator) || function (thisArg, body) {
|
|
7683
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
7684
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
7685
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
7686
|
-
function step(op) {
|
|
7687
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
7688
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
7689
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
7690
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
7691
|
-
switch (op[0]) {
|
|
7692
|
-
case 0: case 1: t = op; break;
|
|
7693
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
7694
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
7695
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
7696
|
-
default:
|
|
7697
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
7698
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
7699
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
7700
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
7701
|
-
if (t[2]) _.ops.pop();
|
|
7702
|
-
_.trys.pop(); continue;
|
|
7703
|
-
}
|
|
7704
|
-
op = body.call(thisArg, _);
|
|
7705
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
7706
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
7707
|
-
}
|
|
7708
|
-
};
|
|
7709
|
-
Object.defineProperty(rtcstats, "__esModule", { value: true });
|
|
7710
|
-
var rtcStats_1 = rtcstats.rtcStats = void 0;
|
|
8190
|
+
// @todo WEBEX-425803: fix types issues with inline ts-ignore rules.
|
|
8191
|
+
// @see https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-425803
|
|
7711
8192
|
/**
|
|
7712
8193
|
* Copies values of any nested depth.
|
|
7713
8194
|
*
|
|
7714
8195
|
* @param value - The value to be copied.
|
|
7715
8196
|
* @returns - Copied value.
|
|
7716
8197
|
*/
|
|
7717
|
-
|
|
8198
|
+
const deepCopy$1 = (value) => JSON.parse(JSON.stringify(value));
|
|
7718
8199
|
/**
|
|
7719
8200
|
* Check deep equality between two values.
|
|
7720
8201
|
*
|
|
@@ -7722,7 +8203,7 @@ var deepCopy$1 = function (value) { return JSON.parse(JSON.stringify(value)); };
|
|
|
7722
8203
|
* @param value2 - Second value to check.
|
|
7723
8204
|
* @returns True if values are deeply equal, false otherwise.
|
|
7724
8205
|
*/
|
|
7725
|
-
|
|
8206
|
+
const deepEqual = (value1, value2) => {
|
|
7726
8207
|
// If both immutable values are equal, return true.
|
|
7727
8208
|
if (value1 === value2) {
|
|
7728
8209
|
return true;
|
|
@@ -7737,8 +8218,10 @@ var deepEqual = function (value1, value2) {
|
|
|
7737
8218
|
}
|
|
7738
8219
|
// Deep equal check each property in the object, returns true if we found no
|
|
7739
8220
|
// differing properties.
|
|
7740
|
-
return Object.keys(value1).reduce(
|
|
8221
|
+
return Object.keys(value1).reduce((val, prop) => {
|
|
8222
|
+
// @ts-ignore
|
|
7741
8223
|
if (value2[prop]) {
|
|
8224
|
+
// @ts-ignore
|
|
7742
8225
|
if (!deepEqual(value1[prop], value2[prop])) {
|
|
7743
8226
|
return false;
|
|
7744
8227
|
}
|
|
@@ -7758,38 +8241,36 @@ var deepEqual = function (value1, value2) {
|
|
|
7758
8241
|
* @param report - The report in Map form.
|
|
7759
8242
|
* @returns - A deduped object.
|
|
7760
8243
|
*/
|
|
7761
|
-
|
|
8244
|
+
const map2obj = (report) => {
|
|
7762
8245
|
if (!report.size) {
|
|
7763
8246
|
return report;
|
|
7764
8247
|
}
|
|
7765
|
-
|
|
7766
|
-
report.forEach(
|
|
8248
|
+
const o = {};
|
|
8249
|
+
report.forEach((value, key) => {
|
|
8250
|
+
// @ts-ignore
|
|
7767
8251
|
o[key] = value;
|
|
7768
8252
|
});
|
|
7769
8253
|
return o;
|
|
7770
8254
|
};
|
|
7771
|
-
|
|
8255
|
+
const dumpStream = (stream) => ({
|
|
7772
8256
|
id: stream.id,
|
|
7773
|
-
tracks: stream.getTracks().map(
|
|
8257
|
+
tracks: stream.getTracks().map((track) => ({
|
|
7774
8258
|
id: track.id,
|
|
7775
8259
|
kind: track.kind,
|
|
7776
8260
|
label: track.label,
|
|
7777
8261
|
enabled: track.enabled,
|
|
7778
8262
|
muted: track.muted,
|
|
7779
8263
|
readyState: track.readyState,
|
|
7780
|
-
})
|
|
7781
|
-
});
|
|
7782
|
-
|
|
8264
|
+
})),
|
|
8265
|
+
});
|
|
8266
|
+
const persistedKeys = ['type', 'id', 'timestamp'];
|
|
7783
8267
|
/**
|
|
7784
8268
|
* Check to see if the report consists of more than just the persisted metadata.
|
|
7785
8269
|
*
|
|
7786
8270
|
* @param report - The report line being checked.
|
|
7787
8271
|
* @returns True if the report item contains non-persisted keys, false otherwise.
|
|
7788
8272
|
*/
|
|
7789
|
-
|
|
7790
|
-
var hasNonMetadata = function (report) {
|
|
7791
|
-
return !!Object.keys(report).filter(function (key) { return !persistedKeys.includes(key); }).length;
|
|
7792
|
-
};
|
|
8273
|
+
const hasNonMetadata = (report) => !!Object.keys(report).filter((key) => !persistedKeys.includes(key)).length;
|
|
7793
8274
|
/**
|
|
7794
8275
|
* Apply a delta compression to the stats report. Reduces size by ~90%.
|
|
7795
8276
|
* To reduce further, report keys could be compressed.
|
|
@@ -7798,35 +8279,42 @@ var hasNonMetadata = function (report) {
|
|
|
7798
8279
|
* @param newStats - New incoming stats.
|
|
7799
8280
|
* @returns - Compressed Stats.
|
|
7800
8281
|
*/
|
|
7801
|
-
|
|
7802
|
-
|
|
7803
|
-
Object.keys(updatedStats).forEach(
|
|
7804
|
-
|
|
8282
|
+
const deltaCompression = (oldStats, newStats) => {
|
|
8283
|
+
const updatedStats = deepCopy$1(newStats);
|
|
8284
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8285
|
+
// @ts-ignore
|
|
8286
|
+
const report = updatedStats[id];
|
|
8287
|
+
// @ts-ignore
|
|
7805
8288
|
if (!oldStats[id]) {
|
|
7806
8289
|
return;
|
|
7807
8290
|
}
|
|
7808
8291
|
// Persist specific values beyond delta compression, as long as they
|
|
7809
8292
|
// aren't the only non-deduped keys.
|
|
7810
|
-
Object.keys(report).forEach(
|
|
8293
|
+
Object.keys(report).forEach((name) => {
|
|
8294
|
+
// @ts-ignore
|
|
7811
8295
|
if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {
|
|
8296
|
+
// @ts-ignore
|
|
7812
8297
|
delete updatedStats[id][name];
|
|
7813
8298
|
}
|
|
7814
8299
|
if (!hasNonMetadata(report)) {
|
|
8300
|
+
// @ts-ignore
|
|
7815
8301
|
delete updatedStats[id];
|
|
7816
8302
|
}
|
|
7817
8303
|
});
|
|
7818
8304
|
});
|
|
7819
8305
|
// Use the most recent timestamp.
|
|
7820
|
-
|
|
7821
|
-
Object.keys(updatedStats).forEach(
|
|
7822
|
-
|
|
8306
|
+
let timestamp = -Infinity;
|
|
8307
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8308
|
+
// @ts-ignore
|
|
8309
|
+
const report = updatedStats[id];
|
|
7823
8310
|
if (report.timestamp > timestamp) {
|
|
7824
8311
|
timestamp = report.timestamp;
|
|
7825
8312
|
}
|
|
7826
8313
|
});
|
|
7827
8314
|
// Delete the timestamps on each item.
|
|
7828
|
-
Object.keys(updatedStats).forEach(
|
|
7829
|
-
|
|
8315
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8316
|
+
// @ts-ignore
|
|
8317
|
+
const report = updatedStats[id];
|
|
7830
8318
|
if (report.timestamp === timestamp) {
|
|
7831
8319
|
delete report.timestamp;
|
|
7832
8320
|
}
|
|
@@ -7840,10 +8328,11 @@ var deltaCompression = function (oldStats, newStats) {
|
|
|
7840
8328
|
* @param report - A WebRTC stats report.
|
|
7841
8329
|
* @returns - An array of Stats Report items.
|
|
7842
8330
|
*/
|
|
7843
|
-
|
|
7844
|
-
return Object.keys(report)
|
|
7845
|
-
.filter(
|
|
7846
|
-
|
|
8331
|
+
const formatStatsReport = (report) => {
|
|
8332
|
+
return (Object.keys(report)
|
|
8333
|
+
.filter((name) => name !== 'timestamp')
|
|
8334
|
+
// @ts-ignore
|
|
8335
|
+
.map((name) => JSON.stringify(report[name])));
|
|
7847
8336
|
};
|
|
7848
8337
|
/**
|
|
7849
8338
|
* Parametrize a single string event to contain type and an (empty) id.
|
|
@@ -7851,7 +8340,7 @@ var formatStatsReport = function (report) {
|
|
|
7851
8340
|
* @param value - The value to parametrize.
|
|
7852
8341
|
* @returns An event object.
|
|
7853
8342
|
*/
|
|
7854
|
-
|
|
8343
|
+
const makeEvent = (value) => [JSON.stringify({ value, type: 'string', id: '' })];
|
|
7855
8344
|
/**
|
|
7856
8345
|
* Attach a Peer Connection to periodically get updated on events and stats.
|
|
7857
8346
|
*
|
|
@@ -7860,9 +8349,10 @@ var makeEvent = function (value) { return [JSON.stringify({ value: value, type:
|
|
|
7860
8349
|
* @param intervalTime - Time between each `getStats` check.
|
|
7861
8350
|
* @param statsPreProcessor - Optional function that modifies stats.
|
|
7862
8351
|
*/
|
|
7863
|
-
|
|
7864
|
-
|
|
7865
|
-
|
|
8352
|
+
const rtcStats = (pc, logger, intervalTime,
|
|
8353
|
+
// eslint-disable-next-line no-unused-vars
|
|
8354
|
+
statsPreProcessor = () => Promise.resolve()) => {
|
|
8355
|
+
let prev = {};
|
|
7866
8356
|
/**
|
|
7867
8357
|
* Log stats or event data with additional tracking information.
|
|
7868
8358
|
*
|
|
@@ -7870,131 +8360,143 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
7870
8360
|
* @param payload - Log data pertaining to the event.
|
|
7871
8361
|
* @param timestamp - Time the event happened in milliseconds.
|
|
7872
8362
|
*/
|
|
7873
|
-
|
|
7874
|
-
logger({ timestamp: timestamp ? Math.round(timestamp) : Date.now(), name
|
|
8363
|
+
const trace = (name, payload, timestamp) => {
|
|
8364
|
+
logger({ timestamp: timestamp ? Math.round(timestamp) : Date.now(), name, payload });
|
|
7875
8365
|
};
|
|
7876
8366
|
trace('rtcConfiguration', makeEvent(JSON.stringify(pc.getConfiguration())));
|
|
7877
|
-
|
|
7878
|
-
pc.addEventListener('icecandidate',
|
|
8367
|
+
const origPeerConnection = window.RTCPeerConnection;
|
|
8368
|
+
pc.addEventListener('icecandidate', (e) => {
|
|
7879
8369
|
if (e.candidate) {
|
|
7880
8370
|
trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));
|
|
7881
8371
|
}
|
|
7882
8372
|
});
|
|
7883
|
-
pc.addEventListener('icecandidateerror',
|
|
7884
|
-
|
|
7885
|
-
trace('onicecandidateerror', makeEvent(
|
|
8373
|
+
pc.addEventListener('icecandidateerror', (event) => {
|
|
8374
|
+
const { url, errorCode, errorText } = event;
|
|
8375
|
+
trace('onicecandidateerror', makeEvent(`[${url}] ${errorCode}: ${errorText}`));
|
|
7886
8376
|
});
|
|
7887
|
-
pc.addEventListener('track',
|
|
7888
|
-
trace('ontrack', makeEvent(
|
|
7889
|
-
.map(
|
|
7890
|
-
.join(' ')))
|
|
8377
|
+
pc.addEventListener('track', (e) => {
|
|
8378
|
+
trace('ontrack', makeEvent(`${e.track.kind}:${e.track.id} ${e.streams
|
|
8379
|
+
.map((stream) => `stream:${stream.id}`)
|
|
8380
|
+
.join(' ')}`));
|
|
7891
8381
|
});
|
|
7892
|
-
pc.addEventListener('signalingstatechange',
|
|
8382
|
+
pc.addEventListener('signalingstatechange', () => {
|
|
7893
8383
|
trace('onsignalingstatechange', makeEvent(pc.signalingState));
|
|
7894
8384
|
});
|
|
7895
|
-
pc.addEventListener('iceconnectionstatechange',
|
|
8385
|
+
pc.addEventListener('iceconnectionstatechange', () => {
|
|
7896
8386
|
trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));
|
|
7897
8387
|
});
|
|
7898
|
-
pc.addEventListener('icegatheringstatechange',
|
|
8388
|
+
pc.addEventListener('icegatheringstatechange', () => {
|
|
7899
8389
|
trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));
|
|
7900
8390
|
});
|
|
7901
|
-
pc.addEventListener('connectionstatechange',
|
|
8391
|
+
pc.addEventListener('connectionstatechange', () => {
|
|
7902
8392
|
trace('onconnectionstatechange', makeEvent(pc.connectionState));
|
|
7903
8393
|
});
|
|
7904
|
-
pc.addEventListener('negotiationneeded',
|
|
8394
|
+
pc.addEventListener('negotiationneeded', () => {
|
|
7905
8395
|
trace('onnegotiationneeded', makeEvent('negotiationneeded'));
|
|
7906
8396
|
});
|
|
7907
|
-
pc.addEventListener('datachannel',
|
|
7908
|
-
trace('ondatachannel', makeEvent(
|
|
8397
|
+
pc.addEventListener('datachannel', (event) => {
|
|
8398
|
+
trace('ondatachannel', makeEvent(`${event.channel.id}: ${event.channel.label}`));
|
|
7909
8399
|
});
|
|
7910
|
-
['close'].forEach(
|
|
7911
|
-
|
|
8400
|
+
['close'].forEach((method) => {
|
|
8401
|
+
// @ts-ignore
|
|
8402
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7912
8403
|
if (nativeMethod) {
|
|
8404
|
+
// @ts-ignore
|
|
7913
8405
|
origPeerConnection.prototype[method] = function () {
|
|
7914
|
-
trace(
|
|
8406
|
+
trace(`on${method}`, makeEvent(method));
|
|
7915
8407
|
return nativeMethod.apply(this, arguments);
|
|
7916
8408
|
};
|
|
7917
8409
|
}
|
|
7918
8410
|
});
|
|
7919
|
-
['createDataChannel'].forEach(
|
|
7920
|
-
|
|
8411
|
+
['createDataChannel'].forEach((method) => {
|
|
8412
|
+
// @ts-ignore
|
|
8413
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7921
8414
|
if (nativeMethod) {
|
|
8415
|
+
// @ts-ignore
|
|
7922
8416
|
origPeerConnection.prototype[method] = function () {
|
|
7923
|
-
trace(
|
|
7924
|
-
|
|
7925
|
-
dataChannel.addEventListener('open',
|
|
7926
|
-
trace(
|
|
8417
|
+
trace(`on${method}`, makeEvent(method));
|
|
8418
|
+
const dataChannel = nativeMethod.apply(this, arguments);
|
|
8419
|
+
dataChannel.addEventListener('open', () => {
|
|
8420
|
+
trace(`ondataChannelOpen`, makeEvent(`${dataChannel.id}:${dataChannel.label}`));
|
|
7927
8421
|
});
|
|
7928
|
-
dataChannel.addEventListener('close',
|
|
7929
|
-
trace(
|
|
8422
|
+
dataChannel.addEventListener('close', () => {
|
|
8423
|
+
trace(`ondataChannelClose`, makeEvent(`${dataChannel.id}:${dataChannel.label}`));
|
|
7930
8424
|
});
|
|
7931
|
-
dataChannel.addEventListener('error',
|
|
7932
|
-
|
|
7933
|
-
trace(
|
|
8425
|
+
dataChannel.addEventListener('error', (event) => {
|
|
8426
|
+
const { error } = event;
|
|
8427
|
+
trace(`ondataChannelError`, makeEvent(`${dataChannel.id}:${dataChannel.label}: ${error.errorDetail}`));
|
|
7934
8428
|
});
|
|
7935
8429
|
return dataChannel;
|
|
7936
8430
|
};
|
|
7937
8431
|
}
|
|
7938
8432
|
});
|
|
7939
|
-
['addStream', 'removeStream'].forEach(
|
|
7940
|
-
|
|
8433
|
+
['addStream', 'removeStream'].forEach((method) => {
|
|
8434
|
+
// @ts-ignore
|
|
8435
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7941
8436
|
if (nativeMethod) {
|
|
8437
|
+
// @ts-ignore
|
|
7942
8438
|
origPeerConnection.prototype[method] = function () {
|
|
7943
|
-
|
|
7944
|
-
|
|
8439
|
+
const stream = arguments[0];
|
|
8440
|
+
const streamInfo = stream
|
|
7945
8441
|
.getTracks()
|
|
7946
|
-
.map(
|
|
8442
|
+
.map((t) => `${t.kind}:${t.id}`)
|
|
7947
8443
|
.join(',');
|
|
7948
|
-
trace(
|
|
8444
|
+
trace(`on${method}`, makeEvent(`${stream.id} ${streamInfo}`));
|
|
7949
8445
|
return nativeMethod.apply(this, arguments);
|
|
7950
8446
|
};
|
|
7951
8447
|
}
|
|
7952
8448
|
});
|
|
7953
|
-
['addTrack'].forEach(
|
|
7954
|
-
|
|
8449
|
+
['addTrack'].forEach((method) => {
|
|
8450
|
+
// @ts-ignore
|
|
8451
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7955
8452
|
if (nativeMethod) {
|
|
8453
|
+
// @ts-ignore
|
|
7956
8454
|
origPeerConnection.prototype[method] = function () {
|
|
7957
|
-
|
|
7958
|
-
|
|
7959
|
-
trace(
|
|
8455
|
+
const track = arguments[0];
|
|
8456
|
+
const streams = [].slice.call(arguments, 1);
|
|
8457
|
+
trace(`on${method}`, makeEvent(`${track.kind}:${track.id} ${streams.map((s) => `stream:${s.id}`).join(';') || '-'}`));
|
|
7960
8458
|
return nativeMethod.apply(this, arguments);
|
|
7961
8459
|
};
|
|
7962
8460
|
}
|
|
7963
8461
|
});
|
|
7964
|
-
['removeTrack'].forEach(
|
|
7965
|
-
|
|
8462
|
+
['removeTrack'].forEach((method) => {
|
|
8463
|
+
// @ts-ignore
|
|
8464
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7966
8465
|
if (nativeMethod) {
|
|
8466
|
+
// @ts-ignore
|
|
7967
8467
|
origPeerConnection.prototype[method] = function () {
|
|
7968
|
-
|
|
7969
|
-
trace(
|
|
8468
|
+
const track = arguments[0].track;
|
|
8469
|
+
trace(`on${method}`, makeEvent(track ? `${track.kind}:${track.id}` : 'null'));
|
|
7970
8470
|
return nativeMethod.apply(this, arguments);
|
|
7971
8471
|
};
|
|
7972
8472
|
}
|
|
7973
8473
|
});
|
|
7974
|
-
['createOffer', 'createAnswer'].forEach(
|
|
7975
|
-
|
|
8474
|
+
['createOffer', 'createAnswer'].forEach((method) => {
|
|
8475
|
+
// @ts-ignore
|
|
8476
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7976
8477
|
if (nativeMethod) {
|
|
8478
|
+
// @ts-ignore
|
|
7977
8479
|
origPeerConnection.prototype[method] = function () {
|
|
7978
|
-
|
|
7979
|
-
|
|
8480
|
+
let opts;
|
|
8481
|
+
const args = arguments;
|
|
7980
8482
|
if (arguments.length === 1 && typeof arguments[0] === 'object') {
|
|
7981
|
-
// eslint-disable-next-line prefer-destructuring
|
|
7982
8483
|
opts = arguments[0];
|
|
7983
8484
|
}
|
|
7984
8485
|
else if (arguments.length === 3 && typeof arguments[2] === 'object') {
|
|
7985
|
-
// eslint-disable-next-line prefer-destructuring
|
|
7986
8486
|
opts = arguments[2];
|
|
7987
8487
|
}
|
|
7988
|
-
trace(
|
|
7989
|
-
return nativeMethod.apply(this, opts ? [opts] : undefined).then(
|
|
7990
|
-
|
|
8488
|
+
trace(`on${method}`, makeEvent(opts || ''));
|
|
8489
|
+
return nativeMethod.apply(this, opts ? [opts] : undefined).then(
|
|
8490
|
+
// @ts-ignore
|
|
8491
|
+
(description) => {
|
|
8492
|
+
trace(`on${method}OnSuccess`, makeEvent(description.sdp));
|
|
7991
8493
|
if (args.length > 0 && typeof args[0] === 'function') {
|
|
7992
8494
|
args[0].apply(null, [description]);
|
|
7993
8495
|
return undefined;
|
|
7994
8496
|
}
|
|
7995
8497
|
return description;
|
|
7996
|
-
},
|
|
7997
|
-
trace(
|
|
8498
|
+
}, (err) => {
|
|
8499
|
+
trace(`on${method}OnFailure`, makeEvent(err.toString()));
|
|
7998
8500
|
if (args.length > 1 && typeof args[1] === 'function') {
|
|
7999
8501
|
args[1].apply(null, [err]);
|
|
8000
8502
|
return;
|
|
@@ -8004,64 +8506,66 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8004
8506
|
};
|
|
8005
8507
|
}
|
|
8006
8508
|
});
|
|
8007
|
-
['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(
|
|
8008
|
-
|
|
8509
|
+
['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach((method) => {
|
|
8510
|
+
// @ts-ignore
|
|
8511
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
8009
8512
|
if (nativeMethod) {
|
|
8513
|
+
// @ts-ignore
|
|
8010
8514
|
origPeerConnection.prototype[method] = function () {
|
|
8011
|
-
|
|
8012
|
-
|
|
8013
|
-
trace("on".concat(method), makeEvent(method === 'addIceCandidate'
|
|
8515
|
+
const args = arguments;
|
|
8516
|
+
trace(`on${method}`, makeEvent(method === 'addIceCandidate'
|
|
8014
8517
|
? arguments[0]
|
|
8015
|
-
:
|
|
8016
|
-
|
|
8518
|
+
: arguments[0]
|
|
8519
|
+
? arguments[0].sdp
|
|
8520
|
+
: 'undefined'));
|
|
8521
|
+
return nativeMethod.apply(this, [arguments[0]]).then(() => {
|
|
8017
8522
|
var _a;
|
|
8018
|
-
trace(
|
|
8523
|
+
trace(`on${method}OnSuccess`, makeEvent('success'));
|
|
8019
8524
|
if (method.endsWith('Description')) {
|
|
8020
|
-
|
|
8021
|
-
|
|
8022
|
-
|
|
8525
|
+
// @ts-ignore
|
|
8526
|
+
if (!this.transportEventsPreviouslyAdded) {
|
|
8527
|
+
const senders = this.getSenders();
|
|
8528
|
+
for (const sender of senders) {
|
|
8023
8529
|
if (sender.transport) {
|
|
8024
|
-
sender.transport.addEventListener('statechange',
|
|
8530
|
+
sender.transport.addEventListener('statechange', () => {
|
|
8025
8531
|
if (sender && sender.transport) {
|
|
8026
|
-
trace(
|
|
8532
|
+
trace(`ondtlsStateChange`, makeEvent(sender.transport.state));
|
|
8027
8533
|
}
|
|
8028
8534
|
});
|
|
8029
|
-
sender.transport.addEventListener('error',
|
|
8030
|
-
|
|
8031
|
-
trace(
|
|
8535
|
+
sender.transport.addEventListener('error', (error) => {
|
|
8536
|
+
const errorEvent = error;
|
|
8537
|
+
trace(`ondtlsError`, makeEvent(errorEvent.error.errorDetail));
|
|
8032
8538
|
});
|
|
8033
8539
|
if (sender.transport.iceTransport) {
|
|
8034
|
-
sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',
|
|
8540
|
+
sender.transport.iceTransport.addEventListener('selectedcandidatepairchange', () => {
|
|
8035
8541
|
var _a, _b, _c, _d, _e, _f;
|
|
8036
8542
|
if (sender.transport && sender.transport.iceTransport) {
|
|
8037
|
-
|
|
8038
|
-
|
|
8039
|
-
|
|
8040
|
-
|
|
8543
|
+
const pair = sender.transport.iceTransport.getSelectedCandidatePair();
|
|
8544
|
+
const localCandidate = `${(_a = pair === null || pair === void 0 ? void 0 : pair.local) === null || _a === void 0 ? void 0 : _a.address}:${(_b = pair === null || pair === void 0 ? void 0 : pair.local) === null || _b === void 0 ? void 0 : _b.port}/${(_c = pair === null || pair === void 0 ? void 0 : pair.local) === null || _c === void 0 ? void 0 : _c.protocol}`;
|
|
8545
|
+
const remoteCandidate = `${(_d = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _d === void 0 ? void 0 : _d.address}:${(_e = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _e === void 0 ? void 0 : _e.port}/${(_f = pair === null || pair === void 0 ? void 0 : pair.remote) === null || _f === void 0 ? void 0 : _f.protocol}`;
|
|
8546
|
+
const pairString = `local: ${localCandidate}, remote: ${remoteCandidate}`;
|
|
8041
8547
|
trace('onselectedCandidatePairChange', makeEvent(pairString));
|
|
8042
8548
|
}
|
|
8043
8549
|
});
|
|
8044
8550
|
}
|
|
8045
|
-
|
|
8551
|
+
// @ts-ignore
|
|
8552
|
+
this.transportEventsPreviouslyAdded = true;
|
|
8046
8553
|
if (pc.getConfiguration().bundlePolicy === 'max-bundle') {
|
|
8047
|
-
|
|
8554
|
+
break;
|
|
8048
8555
|
}
|
|
8049
8556
|
}
|
|
8050
|
-
};
|
|
8051
|
-
for (var _i = 0, senders_1 = senders; _i < senders_1.length; _i++) {
|
|
8052
|
-
var sender = senders_1[_i];
|
|
8053
|
-
var state_1 = _loop_1(sender);
|
|
8054
|
-
if (state_1 === "break")
|
|
8055
|
-
break;
|
|
8056
8557
|
}
|
|
8057
8558
|
}
|
|
8058
|
-
|
|
8559
|
+
// @ts-ignore
|
|
8560
|
+
if (!this.sctpEventsPreviouslyAdded) {
|
|
8059
8561
|
// Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.
|
|
8060
|
-
if ((_a =
|
|
8061
|
-
|
|
8062
|
-
|
|
8562
|
+
if ((_a = this.sctp) === null || _a === void 0 ? void 0 : _a.addEventListener) {
|
|
8563
|
+
this.sctp.addEventListener('statechange', () => {
|
|
8564
|
+
// @ts-ignore
|
|
8565
|
+
trace('onsctpStateChange', makeEvent(this.sctp.state));
|
|
8063
8566
|
});
|
|
8064
|
-
|
|
8567
|
+
// @ts-ignore
|
|
8568
|
+
this.sctpEventsPreviouslyAdded = true;
|
|
8065
8569
|
}
|
|
8066
8570
|
}
|
|
8067
8571
|
}
|
|
@@ -8070,8 +8574,8 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8070
8574
|
return undefined;
|
|
8071
8575
|
}
|
|
8072
8576
|
return undefined;
|
|
8073
|
-
},
|
|
8074
|
-
trace(
|
|
8577
|
+
}, (err) => {
|
|
8578
|
+
trace(`on${method}OnFailure`, makeEvent(err.toString()));
|
|
8075
8579
|
if (args.length >= 3 && typeof args[2] === 'function') {
|
|
8076
8580
|
args[2].apply(null, [err]);
|
|
8077
8581
|
return undefined;
|
|
@@ -8082,15 +8586,15 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8082
8586
|
}
|
|
8083
8587
|
});
|
|
8084
8588
|
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
|
|
8085
|
-
|
|
8086
|
-
|
|
8589
|
+
const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
|
|
8590
|
+
const gum = function () {
|
|
8087
8591
|
trace('onnavigator.mediaDevices.getUserMedia', makeEvent(JSON.stringify(arguments[0])));
|
|
8088
|
-
return
|
|
8592
|
+
return origGetUserMedia
|
|
8089
8593
|
.apply(navigator.mediaDevices, arguments)
|
|
8090
|
-
.then(
|
|
8594
|
+
.then((stream) => {
|
|
8091
8595
|
trace('onnavigator.mediaDevices.getUserMediaOnSuccess', makeEvent(JSON.stringify(dumpStream(stream))));
|
|
8092
8596
|
return stream;
|
|
8093
|
-
},
|
|
8597
|
+
}, (err) => {
|
|
8094
8598
|
trace('onnavigator.mediaDevices.getUserMediaOnFailure', makeEvent(err.name));
|
|
8095
8599
|
return Promise.reject(err);
|
|
8096
8600
|
});
|
|
@@ -8098,53 +8602,46 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8098
8602
|
navigator.mediaDevices.getUserMedia = gum.bind(navigator.mediaDevices);
|
|
8099
8603
|
}
|
|
8100
8604
|
if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {
|
|
8101
|
-
|
|
8102
|
-
|
|
8605
|
+
const origGetDisplayMedia = navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);
|
|
8606
|
+
const gdm = function () {
|
|
8103
8607
|
trace('onnavigator.mediaDevices.getDisplayMedia', makeEvent(JSON.stringify(arguments[0])));
|
|
8104
|
-
return
|
|
8608
|
+
return origGetDisplayMedia
|
|
8105
8609
|
.apply(navigator.mediaDevices, arguments)
|
|
8106
|
-
.then(
|
|
8610
|
+
.then((stream) => {
|
|
8107
8611
|
trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess', makeEvent(JSON.stringify(dumpStream(stream))));
|
|
8108
8612
|
return stream;
|
|
8109
|
-
},
|
|
8613
|
+
}, (err) => {
|
|
8110
8614
|
trace('onnavigator.mediaDevices.getDisplayMediaOnFailure', makeEvent(err.name));
|
|
8111
8615
|
return Promise.reject(err);
|
|
8112
8616
|
});
|
|
8113
8617
|
};
|
|
8114
8618
|
navigator.mediaDevices.getDisplayMedia = gdm.bind(navigator.mediaDevices);
|
|
8115
8619
|
}
|
|
8116
|
-
|
|
8117
|
-
|
|
8118
|
-
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8122
|
-
|
|
8123
|
-
|
|
8124
|
-
|
|
8125
|
-
|
|
8126
|
-
|
|
8127
|
-
prev = base;
|
|
8128
|
-
return Promise.resolve();
|
|
8129
|
-
});
|
|
8130
|
-
})];
|
|
8620
|
+
const getStatsReport = async () => pc.getStats(null).then((res) => {
|
|
8621
|
+
// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
|
|
8622
|
+
const statsMap = new Map();
|
|
8623
|
+
res.forEach((stats, key) => statsMap.set(key, stats));
|
|
8624
|
+
return statsPreProcessor(statsMap).then(() => {
|
|
8625
|
+
const now = map2obj(statsMap);
|
|
8626
|
+
const base = deepCopy$1(now); // our new prev
|
|
8627
|
+
const compressed = deltaCompression(prev, now);
|
|
8628
|
+
trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);
|
|
8629
|
+
prev = base;
|
|
8630
|
+
return Promise.resolve();
|
|
8131
8631
|
});
|
|
8132
|
-
});
|
|
8133
|
-
|
|
8632
|
+
});
|
|
8633
|
+
const interval = window.setInterval(() => {
|
|
8134
8634
|
if (pc.signalingState === 'closed') {
|
|
8135
8635
|
window.clearInterval(interval);
|
|
8136
8636
|
return;
|
|
8137
8637
|
}
|
|
8138
8638
|
getStatsReport();
|
|
8139
8639
|
}, intervalTime);
|
|
8140
|
-
|
|
8141
|
-
return
|
|
8142
|
-
|
|
8143
|
-
|
|
8144
|
-
}); };
|
|
8145
|
-
return { forceStatsReport: forceStatsReport };
|
|
8640
|
+
const forceStatsReport = async () => {
|
|
8641
|
+
return getStatsReport();
|
|
8642
|
+
};
|
|
8643
|
+
return { forceStatsReport };
|
|
8146
8644
|
};
|
|
8147
|
-
rtcStats_1 = rtcstats.rtcStats = rtcStats;
|
|
8148
8645
|
|
|
8149
8646
|
const NUM = '\\d+';
|
|
8150
8647
|
const SDP_TOKEN = "[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";
|
|
@@ -9602,6 +10099,38 @@ class BrowserInfo {
|
|
|
9602
10099
|
}
|
|
9603
10100
|
BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
|
|
9604
10101
|
|
|
10102
|
+
var SystemInfoEvents;
|
|
10103
|
+
(function (SystemInfoEvents) {
|
|
10104
|
+
SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
|
|
10105
|
+
})(SystemInfoEvents || (SystemInfoEvents = {}));
|
|
10106
|
+
class PressureObserverHelper extends events$3.EventEmitter {
|
|
10107
|
+
constructor() {
|
|
10108
|
+
super();
|
|
10109
|
+
this.lastCpuPressure = undefined;
|
|
10110
|
+
if (PressureObserverHelper.isPressureObserverSupported()) {
|
|
10111
|
+
this.observer = new PressureObserver(this.handleStateChange.bind(this));
|
|
10112
|
+
if (this.observer) {
|
|
10113
|
+
this.observer.observe('cpu');
|
|
10114
|
+
}
|
|
10115
|
+
}
|
|
10116
|
+
}
|
|
10117
|
+
handleStateChange(records) {
|
|
10118
|
+
records.forEach((record) => {
|
|
10119
|
+
if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
|
|
10120
|
+
this.lastCpuPressure = record.state;
|
|
10121
|
+
this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
|
|
10122
|
+
}
|
|
10123
|
+
});
|
|
10124
|
+
}
|
|
10125
|
+
getCpuPressure() {
|
|
10126
|
+
return this.lastCpuPressure;
|
|
10127
|
+
}
|
|
10128
|
+
static isPressureObserverSupported() {
|
|
10129
|
+
return 'PressureObserver' in window;
|
|
10130
|
+
}
|
|
10131
|
+
}
|
|
10132
|
+
new PressureObserverHelper();
|
|
10133
|
+
|
|
9605
10134
|
var CapabilityState;
|
|
9606
10135
|
(function (CapabilityState) {
|
|
9607
10136
|
CapabilityState["NOT_CAPABLE"] = "not capable";
|
|
@@ -10660,12 +11189,12 @@ function getCurrentTimestamp() {
|
|
|
10660
11189
|
return performance.timeOrigin + performance.now();
|
|
10661
11190
|
}
|
|
10662
11191
|
class StatsManager {
|
|
10663
|
-
constructor(statsGetter, statsPreprocessor = () => __awaiter
|
|
11192
|
+
constructor(statsGetter, statsPreprocessor = () => __awaiter(this, void 0, void 0, function* () { })) {
|
|
10664
11193
|
this.statsGetter = statsGetter;
|
|
10665
11194
|
this.statsPreProcessor = statsPreprocessor;
|
|
10666
11195
|
}
|
|
10667
11196
|
getStats() {
|
|
10668
|
-
return __awaiter
|
|
11197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
10669
11198
|
const statsReport = yield this.statsGetter();
|
|
10670
11199
|
const statsMap = new Map();
|
|
10671
11200
|
statsReport.forEach((stats, key) => statsMap.set(key, stats));
|
|
@@ -10731,7 +11260,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
|
|
|
10731
11260
|
return this._receiveSlot;
|
|
10732
11261
|
}
|
|
10733
11262
|
getStats() {
|
|
10734
|
-
return __awaiter
|
|
11263
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
10735
11264
|
const statsMap = new Map();
|
|
10736
11265
|
const statsReport = yield this.receiver.getStats();
|
|
10737
11266
|
statsReport.forEach((stats, key) => {
|
|
@@ -14481,7 +15010,7 @@ function waterfall (tasks, callback) {
|
|
|
14481
15010
|
awaitify(waterfall);
|
|
14482
15011
|
|
|
14483
15012
|
function processTasks(task, finishedCallback) {
|
|
14484
|
-
return __awaiter
|
|
15013
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14485
15014
|
try {
|
|
14486
15015
|
yield task();
|
|
14487
15016
|
finishedCallback();
|
|
@@ -14541,7 +15070,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14541
15070
|
}
|
|
14542
15071
|
replaceSenderSource(stream) {
|
|
14543
15072
|
var _a, _b;
|
|
14544
|
-
return __awaiter
|
|
15073
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14545
15074
|
const trackOrNull = (_a = stream === null || stream === void 0 ? void 0 : stream.outputStream.getTracks()[0]) !== null && _a !== void 0 ? _a : null;
|
|
14546
15075
|
if (((_b = this.sender.track) === null || _b === void 0 ? void 0 : _b.id) !== (trackOrNull === null || trackOrNull === void 0 ? void 0 : trackOrNull.id)) {
|
|
14547
15076
|
yield this.sender.replaceTrack(trackOrNull);
|
|
@@ -14555,14 +15084,14 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14555
15084
|
});
|
|
14556
15085
|
}
|
|
14557
15086
|
handleTrackChange() {
|
|
14558
|
-
return __awaiter
|
|
15087
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14559
15088
|
if (this.requested) {
|
|
14560
15089
|
yield this.replaceSenderSource(this.publishedStream);
|
|
14561
15090
|
}
|
|
14562
15091
|
});
|
|
14563
15092
|
}
|
|
14564
15093
|
handleStreamConstraintsChange() {
|
|
14565
|
-
return __awaiter
|
|
15094
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14566
15095
|
yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
|
|
14567
15096
|
});
|
|
14568
15097
|
}
|
|
@@ -14579,7 +15108,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14579
15108
|
const _super = Object.create(null, {
|
|
14580
15109
|
replaceTransceiver: { get: () => super.replaceTransceiver }
|
|
14581
15110
|
});
|
|
14582
|
-
return __awaiter
|
|
15111
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14583
15112
|
_super.replaceTransceiver.call(this, newRtcRtpTransceiver);
|
|
14584
15113
|
newRtcRtpTransceiver.direction = this.direction;
|
|
14585
15114
|
if (this.requested) {
|
|
@@ -14588,7 +15117,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14588
15117
|
});
|
|
14589
15118
|
}
|
|
14590
15119
|
replacePublishedStream(newStream) {
|
|
14591
|
-
return __awaiter
|
|
15120
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14592
15121
|
const oldStream = this.publishedStream;
|
|
14593
15122
|
oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
|
|
14594
15123
|
oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(exports.LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
|
|
@@ -14641,7 +15170,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14641
15170
|
}
|
|
14642
15171
|
}
|
|
14643
15172
|
getStats() {
|
|
14644
|
-
return __awaiter
|
|
15173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14645
15174
|
const statsMap = new Map();
|
|
14646
15175
|
const statsReport = yield this.sender.getStats();
|
|
14647
15176
|
statsReport.forEach((stats, key) => {
|
|
@@ -14696,8 +15225,8 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14696
15225
|
});
|
|
14697
15226
|
}
|
|
14698
15227
|
updateSendParameters(requestedIdEncodingParamsMap) {
|
|
14699
|
-
return __awaiter
|
|
14700
|
-
return this.updateSendParametersQueue.push(() => __awaiter
|
|
15228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15229
|
+
return this.updateSendParametersQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
14701
15230
|
const sendParameters = this.sender.getParameters();
|
|
14702
15231
|
sendParameters.encodings.forEach((encoding, index) => {
|
|
14703
15232
|
var _a, _b;
|
|
@@ -14811,7 +15340,7 @@ class SendSlot {
|
|
|
14811
15340
|
this.sendTransceiver = sendTransceiver;
|
|
14812
15341
|
}
|
|
14813
15342
|
publishStream(stream) {
|
|
14814
|
-
return __awaiter
|
|
15343
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14815
15344
|
if (stream === this.sendTransceiver.publishedStream) {
|
|
14816
15345
|
return Promise.resolve();
|
|
14817
15346
|
}
|
|
@@ -14819,7 +15348,7 @@ class SendSlot {
|
|
|
14819
15348
|
});
|
|
14820
15349
|
}
|
|
14821
15350
|
unpublishStream() {
|
|
14822
|
-
return __awaiter
|
|
15351
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14823
15352
|
if (!this.sendTransceiver.publishedStream) {
|
|
14824
15353
|
return Promise.resolve();
|
|
14825
15354
|
}
|
|
@@ -14839,12 +15368,12 @@ class SendSlot {
|
|
|
14839
15368
|
this.sendTransceiver.active = active;
|
|
14840
15369
|
}
|
|
14841
15370
|
setCodecParameters(parameters) {
|
|
14842
|
-
return __awaiter
|
|
15371
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14843
15372
|
this.sendTransceiver.setCodecParameters(parameters);
|
|
14844
15373
|
});
|
|
14845
15374
|
}
|
|
14846
15375
|
deleteCodecParameters(parameters) {
|
|
14847
|
-
return __awaiter
|
|
15376
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14848
15377
|
this.sendTransceiver.deleteCodecParameters(parameters);
|
|
14849
15378
|
});
|
|
14850
15379
|
}
|
|
@@ -14856,7 +15385,7 @@ class SendSlot {
|
|
|
14856
15385
|
}
|
|
14857
15386
|
}
|
|
14858
15387
|
|
|
14859
|
-
const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnectionStats) => __awaiter
|
|
15388
|
+
const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnectionStats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14860
15389
|
const result = {
|
|
14861
15390
|
audio: {
|
|
14862
15391
|
senders: [],
|
|
@@ -14875,7 +15404,7 @@ const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnec
|
|
|
14875
15404
|
receivers: [],
|
|
14876
15405
|
},
|
|
14877
15406
|
};
|
|
14878
|
-
yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter
|
|
15407
|
+
yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14879
15408
|
var _a;
|
|
14880
15409
|
const item = {
|
|
14881
15410
|
report: yield transceiver.getStats(),
|
|
@@ -14900,8 +15429,8 @@ const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnec
|
|
|
14900
15429
|
result.screenShareVideo.senders.push(item);
|
|
14901
15430
|
}
|
|
14902
15431
|
})));
|
|
14903
|
-
yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter
|
|
14904
|
-
return Promise.all(transceivers.map((t) => __awaiter
|
|
15432
|
+
yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15433
|
+
return Promise.all(transceivers.map((t) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14905
15434
|
var _b;
|
|
14906
15435
|
const item = {
|
|
14907
15436
|
report: yield t.getStats(),
|
|
@@ -15418,14 +15947,14 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15418
15947
|
return recvOnlyTransceiver;
|
|
15419
15948
|
}
|
|
15420
15949
|
createReceiveSlot(mediaType) {
|
|
15421
|
-
return __awaiter
|
|
15950
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15422
15951
|
return (yield this.createReceiveSlots(mediaType, 1))[0];
|
|
15423
15952
|
});
|
|
15424
15953
|
}
|
|
15425
15954
|
createReceiveSlots(mediaType, count = 1) {
|
|
15426
|
-
return __awaiter
|
|
15955
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15427
15956
|
return new Promise((createReceiveSlotsResolve) => {
|
|
15428
|
-
this.offerAnswerQueue.push(() => __awaiter
|
|
15957
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15429
15958
|
const createdReceiveOnlyTransceivers = [];
|
|
15430
15959
|
for (let i = 0; i < count; i++) {
|
|
15431
15960
|
const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType);
|
|
@@ -15472,7 +16001,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15472
16001
|
return targetCodec.pt;
|
|
15473
16002
|
}
|
|
15474
16003
|
waitForIceGatheringComplete() {
|
|
15475
|
-
return __awaiter
|
|
16004
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15476
16005
|
return new Promise((resolve, reject) => {
|
|
15477
16006
|
const finalizeIceCandidatesGathering = () => this.pc.getIceCandidates().length > 0
|
|
15478
16007
|
? resolve()
|
|
@@ -15498,7 +16027,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15498
16027
|
});
|
|
15499
16028
|
}
|
|
15500
16029
|
createOffer() {
|
|
15501
|
-
return __awaiter
|
|
16030
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15502
16031
|
if (!this.pc.getLocalDescription()) {
|
|
15503
16032
|
this.midPredictor.allocateMidForDatachannel();
|
|
15504
16033
|
}
|
|
@@ -15509,7 +16038,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15509
16038
|
}
|
|
15510
16039
|
const createOfferId = ++this.currentCreateOfferId;
|
|
15511
16040
|
return new Promise((createOfferResolve, createOfferReject) => {
|
|
15512
|
-
this.offerAnswerQueue.push(() => __awaiter
|
|
16041
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15513
16042
|
var _a;
|
|
15514
16043
|
try {
|
|
15515
16044
|
const offer = yield this.pc.createOffer();
|
|
@@ -15519,7 +16048,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15519
16048
|
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
15520
16049
|
yield this.pc
|
|
15521
16050
|
.setLocalDescription(offer)
|
|
15522
|
-
.then(() => __awaiter
|
|
16051
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15523
16052
|
logger.info('this.pc.setLocalDescription() resolved');
|
|
15524
16053
|
}))
|
|
15525
16054
|
.catch((error) => {
|
|
@@ -15553,7 +16082,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15553
16082
|
});
|
|
15554
16083
|
}
|
|
15555
16084
|
setAnswer(answer) {
|
|
15556
|
-
return __awaiter
|
|
16085
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15557
16086
|
const sdp = this.preProcessRemoteAnswer(answer);
|
|
15558
16087
|
if (!this.setAnswerResolve) {
|
|
15559
16088
|
logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED, `Call to setAnswer without having previously called createOffer.`);
|
|
@@ -15561,7 +16090,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15561
16090
|
logger.info('calling this.pc.setRemoteDescription()');
|
|
15562
16091
|
return this.pc
|
|
15563
16092
|
.setRemoteDescription({ type: 'answer', sdp })
|
|
15564
|
-
.then(() => __awaiter
|
|
16093
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15565
16094
|
logger.info('this.pc.setRemoteDescription() resolved');
|
|
15566
16095
|
if (this.setAnswerResolve) {
|
|
15567
16096
|
this.setAnswerResolve();
|
|
@@ -15578,7 +16107,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15578
16107
|
}
|
|
15579
16108
|
doLocalOfferAnswer() {
|
|
15580
16109
|
var _a;
|
|
15581
|
-
return __awaiter
|
|
16110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15582
16111
|
const offer = yield this.pc.createOffer();
|
|
15583
16112
|
if (!offer.sdp) {
|
|
15584
16113
|
logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED, 'SDP not found in offer.');
|
|
@@ -15586,7 +16115,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15586
16115
|
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
15587
16116
|
yield this.pc
|
|
15588
16117
|
.setLocalDescription(offer)
|
|
15589
|
-
.then(() => __awaiter
|
|
16118
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15590
16119
|
logger.info('this.pc.setLocalDescription() resolved');
|
|
15591
16120
|
}))
|
|
15592
16121
|
.catch((error) => {
|
|
@@ -15596,7 +16125,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15596
16125
|
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
15597
16126
|
return this.pc
|
|
15598
16127
|
.setRemoteDescription({ type: 'answer', sdp: answer })
|
|
15599
|
-
.then(() => __awaiter
|
|
16128
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15600
16129
|
logger.info('this.pc.setRemoteDescription() resolved');
|
|
15601
16130
|
}))
|
|
15602
16131
|
.catch((error) => {
|
|
@@ -15605,8 +16134,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15605
16134
|
});
|
|
15606
16135
|
}
|
|
15607
16136
|
queueLocalOfferAnswer() {
|
|
15608
|
-
return __awaiter
|
|
15609
|
-
return this.offerAnswerQueue.push(() => __awaiter
|
|
16137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16138
|
+
return this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15610
16139
|
yield this.doLocalOfferAnswer();
|
|
15611
16140
|
}));
|
|
15612
16141
|
});
|
|
@@ -15779,7 +16308,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15779
16308
|
}
|
|
15780
16309
|
renewPeerConnection(userOptions) {
|
|
15781
16310
|
var _a;
|
|
15782
|
-
return __awaiter
|
|
16311
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15783
16312
|
(_a = this.pc) === null || _a === void 0 ? void 0 : _a.close();
|
|
15784
16313
|
try {
|
|
15785
16314
|
if (userOptions) {
|
|
@@ -15836,28 +16365,28 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15836
16365
|
return this.statsManager.getStats();
|
|
15837
16366
|
}
|
|
15838
16367
|
getTransceiverStats() {
|
|
15839
|
-
return __awaiter
|
|
16368
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15840
16369
|
const stats = yield this.getStats();
|
|
15841
16370
|
const peerConnectionStats = [...stats.values()].find((stat) => stat.type === 'peer-connection');
|
|
15842
16371
|
return organizeTransceiverStats(this.sendTransceivers, this.recvTransceivers, peerConnectionStats);
|
|
15843
16372
|
});
|
|
15844
16373
|
}
|
|
15845
16374
|
preProcessStats(stats) {
|
|
15846
|
-
return __awaiter
|
|
16375
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15847
16376
|
stats.forEach((stat) => {
|
|
15848
16377
|
if (stat.type === 'peer-connection') {
|
|
15849
16378
|
stat.isMediaBypassEdge = this.metadata.isMediaBypassEdge;
|
|
15850
16379
|
}
|
|
15851
16380
|
});
|
|
15852
|
-
yield Promise.all([...this.sendTransceivers.values()].map((transceiver) => __awaiter
|
|
16381
|
+
yield Promise.all([...this.sendTransceivers.values()].map((transceiver) => __awaiter(this, void 0, void 0, function* () {
|
|
15853
16382
|
(yield transceiver.getStats()).forEach((senderStats) => {
|
|
15854
16383
|
if (senderStats.type === 'outbound-rtp' || senderStats.type === 'media-source') {
|
|
15855
16384
|
stats.set(senderStats.id, senderStats);
|
|
15856
16385
|
}
|
|
15857
16386
|
});
|
|
15858
16387
|
})));
|
|
15859
|
-
yield Promise.all([...this.recvTransceivers.values()].map((transceivers) => __awaiter
|
|
15860
|
-
yield Promise.all(transceivers.map((transceiver) => __awaiter
|
|
16388
|
+
yield Promise.all([...this.recvTransceivers.values()].map((transceivers) => __awaiter(this, void 0, void 0, function* () {
|
|
16389
|
+
yield Promise.all(transceivers.map((transceiver) => __awaiter(this, void 0, void 0, function* () {
|
|
15861
16390
|
(yield transceiver.getStats()).forEach((receiverStats) => {
|
|
15862
16391
|
if (receiverStats.type === 'inbound-rtp') {
|
|
15863
16392
|
stats.set(receiverStats.id, receiverStats);
|
|
@@ -15868,7 +16397,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15868
16397
|
});
|
|
15869
16398
|
}
|
|
15870
16399
|
attachMetricsObserver() {
|
|
15871
|
-
this.forceStatsReport =
|
|
16400
|
+
this.forceStatsReport = rtcStats(this.pc.getUnderlyingRTCPeerConnection(), (data) => this.metricsCallback(data), 5000, (stats) => this.preProcessStats(stats)).forceStatsReport;
|
|
15872
16401
|
}
|
|
15873
16402
|
forceRtcMetricsCallback() {
|
|
15874
16403
|
var _a;
|