@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/esm/index.js
CHANGED
|
@@ -30,7 +30,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
30
30
|
PERFORMANCE OF THIS SOFTWARE.
|
|
31
31
|
***************************************************************************** */
|
|
32
32
|
|
|
33
|
-
function __awaiter$
|
|
33
|
+
function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
34
34
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
35
35
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
36
36
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -352,7 +352,7 @@ var DeviceKind$1;
|
|
|
352
352
|
* media has successfully been obtained.
|
|
353
353
|
*/
|
|
354
354
|
function getUserMedia(constraints) {
|
|
355
|
-
return __awaiter$
|
|
355
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
356
356
|
return navigator.mediaDevices.getUserMedia(constraints);
|
|
357
357
|
});
|
|
358
358
|
}
|
|
@@ -377,7 +377,7 @@ function getDisplayMedia(constraints) {
|
|
|
377
377
|
* fulfilled.
|
|
378
378
|
*/
|
|
379
379
|
function enumerateDevices() {
|
|
380
|
-
return __awaiter$
|
|
380
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
381
381
|
return navigator.mediaDevices.enumerateDevices();
|
|
382
382
|
});
|
|
383
383
|
}
|
|
@@ -399,7 +399,7 @@ function setOnDeviceChangeHandler$1(handler) {
|
|
|
399
399
|
* @returns Array of Permission Status objects.
|
|
400
400
|
*/
|
|
401
401
|
function checkNavigatorPermissions(deviceKinds) {
|
|
402
|
-
return __awaiter$
|
|
402
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
403
403
|
const permissionRequests = [];
|
|
404
404
|
if (deviceKinds.includes(DeviceKind$1.VideoInput)) {
|
|
405
405
|
permissionRequests.push(navigator.permissions.query({ name: 'camera' }));
|
|
@@ -417,7 +417,7 @@ function checkNavigatorPermissions(deviceKinds) {
|
|
|
417
417
|
* @returns True if device permissions exist, false if otherwise.
|
|
418
418
|
*/
|
|
419
419
|
function checkDevicePermissions(deviceKinds) {
|
|
420
|
-
return __awaiter$
|
|
420
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
421
421
|
try {
|
|
422
422
|
const permissions = yield checkNavigatorPermissions(deviceKinds);
|
|
423
423
|
if (permissions.every((permission) => permission.state === 'granted')) {
|
|
@@ -447,7 +447,7 @@ function checkDevicePermissions(deviceKinds) {
|
|
|
447
447
|
* @returns The callback's response.
|
|
448
448
|
*/
|
|
449
449
|
function ensureDevicePermissions(deviceKinds, callback) {
|
|
450
|
-
return __awaiter$
|
|
450
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
451
451
|
try {
|
|
452
452
|
const hasDevicePermissions = yield checkDevicePermissions(deviceKinds);
|
|
453
453
|
if (!hasDevicePermissions) {
|
|
@@ -516,7 +516,7 @@ class WebrtcCoreError {
|
|
|
516
516
|
* @returns A LocalCameraStream object or an error.
|
|
517
517
|
*/
|
|
518
518
|
function createCameraStream(cameraStreamConstructor, constraints) {
|
|
519
|
-
return __awaiter$
|
|
519
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
520
520
|
let stream;
|
|
521
521
|
try {
|
|
522
522
|
stream = yield getUserMedia({ video: Object.assign({}, constraints) });
|
|
@@ -536,7 +536,7 @@ function createCameraStream(cameraStreamConstructor, constraints) {
|
|
|
536
536
|
* @returns A LocalMicrophoneStream object or an error.
|
|
537
537
|
*/
|
|
538
538
|
function createMicrophoneStream(microphoneStreamConstructor, constraints) {
|
|
539
|
-
return __awaiter$
|
|
539
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
540
540
|
let stream;
|
|
541
541
|
try {
|
|
542
542
|
stream = yield getUserMedia({ audio: Object.assign({}, constraints) });
|
|
@@ -559,7 +559,7 @@ function createMicrophoneStream(microphoneStreamConstructor, constraints) {
|
|
|
559
559
|
* @returns A Promise that resolves to a LocalCameraStream and a LocalMicrophoneStream or an error.
|
|
560
560
|
*/
|
|
561
561
|
function createCameraAndMicrophoneStreams(cameraStreamConstructor, microphoneStreamConstructor, constraints) {
|
|
562
|
-
return __awaiter$
|
|
562
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
563
563
|
let stream;
|
|
564
564
|
try {
|
|
565
565
|
stream = yield getUserMedia({
|
|
@@ -604,7 +604,7 @@ function createCameraAndMicrophoneStreams(cameraStreamConstructor, microphoneStr
|
|
|
604
604
|
* instead.
|
|
605
605
|
*/
|
|
606
606
|
function createDisplayMedia(options) {
|
|
607
|
-
return __awaiter$
|
|
607
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
608
608
|
var _a, _b;
|
|
609
609
|
let stream;
|
|
610
610
|
const videoConstraints = options.video.constraints || true;
|
|
@@ -645,7 +645,7 @@ function createDisplayMedia(options) {
|
|
|
645
645
|
* @returns A Promise that resolves to a LocalDisplayStream or an error.
|
|
646
646
|
*/
|
|
647
647
|
function createDisplayStream(displayStreamConstructor, videoContentHint) {
|
|
648
|
-
return __awaiter$
|
|
648
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
649
649
|
const [localDisplayStream] = yield createDisplayMedia({
|
|
650
650
|
video: { displayStreamConstructor, videoContentHint },
|
|
651
651
|
});
|
|
@@ -663,7 +663,7 @@ function createDisplayStream(displayStreamConstructor, videoContentHint) {
|
|
|
663
663
|
* instead.
|
|
664
664
|
*/
|
|
665
665
|
function createDisplayStreamWithAudio(displayStreamConstructor, systemAudioStreamConstructor, videoContentHint) {
|
|
666
|
-
return __awaiter$
|
|
666
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
667
667
|
return createDisplayMedia({
|
|
668
668
|
video: { displayStreamConstructor, videoContentHint },
|
|
669
669
|
audio: { systemAudioStreamConstructor },
|
|
@@ -677,7 +677,7 @@ function createDisplayStreamWithAudio(displayStreamConstructor, systemAudioStrea
|
|
|
677
677
|
* @returns List of media devices in an array of MediaDeviceInfo objects.
|
|
678
678
|
*/
|
|
679
679
|
function getDevices(deviceKind) {
|
|
680
|
-
return __awaiter$
|
|
680
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
681
681
|
let devices;
|
|
682
682
|
const deviceKinds = deviceKind
|
|
683
683
|
? [deviceKind]
|
|
@@ -697,7 +697,7 @@ function getDevices(deviceKind) {
|
|
|
697
697
|
* @returns List of microphone devices in an array of MediaDeviceInfo objects.
|
|
698
698
|
*/
|
|
699
699
|
function getAudioInputDevices() {
|
|
700
|
-
return __awaiter$
|
|
700
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
701
701
|
return getDevices(DeviceKind$1.AudioInput);
|
|
702
702
|
});
|
|
703
703
|
}
|
|
@@ -707,7 +707,7 @@ function getAudioInputDevices() {
|
|
|
707
707
|
* @returns List of speaker devices in an array of MediaDeviceInfo objects.
|
|
708
708
|
*/
|
|
709
709
|
function getAudioOutputDevices() {
|
|
710
|
-
return __awaiter$
|
|
710
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
711
711
|
return getDevices(DeviceKind$1.AudioOutput);
|
|
712
712
|
});
|
|
713
713
|
}
|
|
@@ -717,7 +717,7 @@ function getAudioOutputDevices() {
|
|
|
717
717
|
* @returns List of camera devices in an array of MediaDeviceInfo objects.
|
|
718
718
|
*/
|
|
719
719
|
function getVideoInputDevices() {
|
|
720
|
-
return __awaiter$
|
|
720
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
721
721
|
return getDevices(DeviceKind$1.VideoInput);
|
|
722
722
|
});
|
|
723
723
|
}
|
|
@@ -860,7 +860,7 @@ EventEmitter$1$1.prototype.emit = function emit(type) {
|
|
|
860
860
|
ReflectApply$1$1(handler, this, args);
|
|
861
861
|
} else {
|
|
862
862
|
var len = handler.length;
|
|
863
|
-
var listeners = arrayClone$
|
|
863
|
+
var listeners = arrayClone$2(handler, len);
|
|
864
864
|
for (var i = 0; i < len; ++i)
|
|
865
865
|
ReflectApply$1$1(listeners[i], this, args);
|
|
866
866
|
}
|
|
@@ -868,7 +868,7 @@ EventEmitter$1$1.prototype.emit = function emit(type) {
|
|
|
868
868
|
return true;
|
|
869
869
|
};
|
|
870
870
|
|
|
871
|
-
function _addListener$
|
|
871
|
+
function _addListener$2(target, type, listener, prepend) {
|
|
872
872
|
var m;
|
|
873
873
|
var events;
|
|
874
874
|
var existing;
|
|
@@ -931,14 +931,14 @@ function _addListener$1$1(target, type, listener, prepend) {
|
|
|
931
931
|
}
|
|
932
932
|
|
|
933
933
|
EventEmitter$1$1.prototype.addListener = function addListener(type, listener) {
|
|
934
|
-
return _addListener$
|
|
934
|
+
return _addListener$2(this, type, listener, false);
|
|
935
935
|
};
|
|
936
936
|
|
|
937
937
|
EventEmitter$1$1.prototype.on = EventEmitter$1$1.prototype.addListener;
|
|
938
938
|
|
|
939
939
|
EventEmitter$1$1.prototype.prependListener =
|
|
940
940
|
function prependListener(type, listener) {
|
|
941
|
-
return _addListener$
|
|
941
|
+
return _addListener$2(this, type, listener, true);
|
|
942
942
|
};
|
|
943
943
|
|
|
944
944
|
function onceWrapper$1$1() {
|
|
@@ -951,7 +951,7 @@ function onceWrapper$1$1() {
|
|
|
951
951
|
}
|
|
952
952
|
}
|
|
953
953
|
|
|
954
|
-
function _onceWrap$
|
|
954
|
+
function _onceWrap$2(target, type, listener) {
|
|
955
955
|
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
|
|
956
956
|
var wrapped = onceWrapper$1$1.bind(state);
|
|
957
957
|
wrapped.listener = listener;
|
|
@@ -961,14 +961,14 @@ function _onceWrap$1$1(target, type, listener) {
|
|
|
961
961
|
|
|
962
962
|
EventEmitter$1$1.prototype.once = function once(type, listener) {
|
|
963
963
|
checkListener$1$1(listener);
|
|
964
|
-
this.on(type, _onceWrap$
|
|
964
|
+
this.on(type, _onceWrap$2(this, type, listener));
|
|
965
965
|
return this;
|
|
966
966
|
};
|
|
967
967
|
|
|
968
968
|
EventEmitter$1$1.prototype.prependOnceListener =
|
|
969
969
|
function prependOnceListener(type, listener) {
|
|
970
970
|
checkListener$1$1(listener);
|
|
971
|
-
this.prependListener(type, _onceWrap$
|
|
971
|
+
this.prependListener(type, _onceWrap$2(this, type, listener));
|
|
972
972
|
return this;
|
|
973
973
|
};
|
|
974
974
|
|
|
@@ -1012,7 +1012,7 @@ EventEmitter$1$1.prototype.removeListener =
|
|
|
1012
1012
|
if (position === 0)
|
|
1013
1013
|
list.shift();
|
|
1014
1014
|
else {
|
|
1015
|
-
spliceOne$
|
|
1015
|
+
spliceOne$2(list, position);
|
|
1016
1016
|
}
|
|
1017
1017
|
|
|
1018
1018
|
if (list.length === 1)
|
|
@@ -1092,7 +1092,7 @@ function _listeners$1$1(target, type, unwrap) {
|
|
|
1092
1092
|
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
1093
1093
|
|
|
1094
1094
|
return unwrap ?
|
|
1095
|
-
unwrapListeners$
|
|
1095
|
+
unwrapListeners$2(evlistener) : arrayClone$2(evlistener, evlistener.length);
|
|
1096
1096
|
}
|
|
1097
1097
|
|
|
1098
1098
|
EventEmitter$1$1.prototype.listeners = function listeners(type) {
|
|
@@ -1107,12 +1107,12 @@ EventEmitter$1$1.listenerCount = function(emitter, type) {
|
|
|
1107
1107
|
if (typeof emitter.listenerCount === 'function') {
|
|
1108
1108
|
return emitter.listenerCount(type);
|
|
1109
1109
|
} else {
|
|
1110
|
-
return listenerCount$
|
|
1110
|
+
return listenerCount$2.call(emitter, type);
|
|
1111
1111
|
}
|
|
1112
1112
|
};
|
|
1113
1113
|
|
|
1114
|
-
EventEmitter$1$1.prototype.listenerCount = listenerCount$
|
|
1115
|
-
function listenerCount$
|
|
1114
|
+
EventEmitter$1$1.prototype.listenerCount = listenerCount$2;
|
|
1115
|
+
function listenerCount$2(type) {
|
|
1116
1116
|
var events = this._events;
|
|
1117
1117
|
|
|
1118
1118
|
if (events !== undefined) {
|
|
@@ -1132,20 +1132,20 @@ EventEmitter$1$1.prototype.eventNames = function eventNames() {
|
|
|
1132
1132
|
return this._eventsCount > 0 ? ReflectOwnKeys$1$1(this._events) : [];
|
|
1133
1133
|
};
|
|
1134
1134
|
|
|
1135
|
-
function arrayClone$
|
|
1135
|
+
function arrayClone$2(arr, n) {
|
|
1136
1136
|
var copy = new Array(n);
|
|
1137
1137
|
for (var i = 0; i < n; ++i)
|
|
1138
1138
|
copy[i] = arr[i];
|
|
1139
1139
|
return copy;
|
|
1140
1140
|
}
|
|
1141
1141
|
|
|
1142
|
-
function spliceOne$
|
|
1142
|
+
function spliceOne$2(list, index) {
|
|
1143
1143
|
for (; index + 1 < list.length; index++)
|
|
1144
1144
|
list[index] = list[index + 1];
|
|
1145
1145
|
list.pop();
|
|
1146
1146
|
}
|
|
1147
1147
|
|
|
1148
|
-
function unwrapListeners$
|
|
1148
|
+
function unwrapListeners$2(arr) {
|
|
1149
1149
|
var ret = new Array(arr.length);
|
|
1150
1150
|
for (var i = 0; i < ret.length; ++i) {
|
|
1151
1151
|
ret[i] = arr[i].listener || arr[i];
|
|
@@ -1202,11 +1202,11 @@ function eventTargetAgnosticAddListener$1$1(emitter, name, listener, flags) {
|
|
|
1202
1202
|
}
|
|
1203
1203
|
}
|
|
1204
1204
|
|
|
1205
|
-
class EventEmitter$
|
|
1205
|
+
class EventEmitter$3$1 extends events$1$1.exports.EventEmitter {
|
|
1206
1206
|
}
|
|
1207
1207
|
class TypedEvent$1 {
|
|
1208
1208
|
constructor() {
|
|
1209
|
-
this.emitter = new EventEmitter$
|
|
1209
|
+
this.emitter = new EventEmitter$3$1();
|
|
1210
1210
|
}
|
|
1211
1211
|
on(handler) {
|
|
1212
1212
|
this.emitter.on('event', handler);
|
|
@@ -1496,7 +1496,7 @@ class _LocalStream extends Stream {
|
|
|
1496
1496
|
* @param effect - The effect to add.
|
|
1497
1497
|
*/
|
|
1498
1498
|
addEffect(effect) {
|
|
1499
|
-
return __awaiter$
|
|
1499
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1500
1500
|
// Check if the effect has already been added.
|
|
1501
1501
|
if (this.effects.some((e) => e.id === effect.id)) {
|
|
1502
1502
|
return;
|
|
@@ -1633,7 +1633,7 @@ class _LocalStream extends Stream {
|
|
|
1633
1633
|
* Cleanup the local effects.
|
|
1634
1634
|
*/
|
|
1635
1635
|
disposeEffects() {
|
|
1636
|
-
return __awaiter$
|
|
1636
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1637
1637
|
this.loadingEffects.clear();
|
|
1638
1638
|
// Dispose of any effects currently in use
|
|
1639
1639
|
if (this.effects.length > 0) {
|
|
@@ -1658,7 +1658,7 @@ class LocalAudioStream extends LocalStream {
|
|
|
1658
1658
|
* @returns A promise which resolves when the constraints have been successfully applied.
|
|
1659
1659
|
*/
|
|
1660
1660
|
applyConstraints(constraints) {
|
|
1661
|
-
return __awaiter$
|
|
1661
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1662
1662
|
logger$3.log(`Applying constraints to local track:`, constraints);
|
|
1663
1663
|
return this.inputTrack.applyConstraints(constraints).then(() => {
|
|
1664
1664
|
this[LocalStreamEventNames.ConstraintsChange].emit();
|
|
@@ -1678,7 +1678,7 @@ class LocalVideoStream extends LocalStream {
|
|
|
1678
1678
|
* @returns A promise which resolves when the constraints have been successfully applied.
|
|
1679
1679
|
*/
|
|
1680
1680
|
applyConstraints(constraints) {
|
|
1681
|
-
return __awaiter$
|
|
1681
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1682
1682
|
logger$3.log(`Applying constraints to local track:`, constraints);
|
|
1683
1683
|
return this.inputTrack.applyConstraints(constraints).then(() => {
|
|
1684
1684
|
this[LocalStreamEventNames.ConstraintsChange].emit();
|
|
@@ -1859,6 +1859,478 @@ class _RemoteStream extends Stream {
|
|
|
1859
1859
|
_a$6 = RemoteStreamEventNames.MediaStateChange;
|
|
1860
1860
|
const RemoteStream = AddEvents(_RemoteStream);
|
|
1861
1861
|
|
|
1862
|
+
var domain;
|
|
1863
|
+
|
|
1864
|
+
// This constructor is used to store event handlers. Instantiating this is
|
|
1865
|
+
// faster than explicitly calling `Object.create(null)` to get a "clean" empty
|
|
1866
|
+
// object (tested with v8 v4.9).
|
|
1867
|
+
function EventHandlers() {}
|
|
1868
|
+
EventHandlers.prototype = Object.create(null);
|
|
1869
|
+
|
|
1870
|
+
function EventEmitter$2$1() {
|
|
1871
|
+
EventEmitter$2$1.init.call(this);
|
|
1872
|
+
}
|
|
1873
|
+
|
|
1874
|
+
// nodejs oddity
|
|
1875
|
+
// require('events') === require('events').EventEmitter
|
|
1876
|
+
EventEmitter$2$1.EventEmitter = EventEmitter$2$1;
|
|
1877
|
+
|
|
1878
|
+
EventEmitter$2$1.usingDomains = false;
|
|
1879
|
+
|
|
1880
|
+
EventEmitter$2$1.prototype.domain = undefined;
|
|
1881
|
+
EventEmitter$2$1.prototype._events = undefined;
|
|
1882
|
+
EventEmitter$2$1.prototype._maxListeners = undefined;
|
|
1883
|
+
|
|
1884
|
+
// By default EventEmitters will print a warning if more than 10 listeners are
|
|
1885
|
+
// added to it. This is a useful default which helps finding memory leaks.
|
|
1886
|
+
EventEmitter$2$1.defaultMaxListeners = 10;
|
|
1887
|
+
|
|
1888
|
+
EventEmitter$2$1.init = function() {
|
|
1889
|
+
this.domain = null;
|
|
1890
|
+
if (EventEmitter$2$1.usingDomains) {
|
|
1891
|
+
// if there is an active domain, then attach to it.
|
|
1892
|
+
if (domain.active ) ;
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1895
|
+
if (!this._events || this._events === Object.getPrototypeOf(this)._events) {
|
|
1896
|
+
this._events = new EventHandlers();
|
|
1897
|
+
this._eventsCount = 0;
|
|
1898
|
+
}
|
|
1899
|
+
|
|
1900
|
+
this._maxListeners = this._maxListeners || undefined;
|
|
1901
|
+
};
|
|
1902
|
+
|
|
1903
|
+
// Obviously not all Emitters should be limited to 10. This function allows
|
|
1904
|
+
// that to be increased. Set to zero for unlimited.
|
|
1905
|
+
EventEmitter$2$1.prototype.setMaxListeners = function setMaxListeners(n) {
|
|
1906
|
+
if (typeof n !== 'number' || n < 0 || isNaN(n))
|
|
1907
|
+
throw new TypeError('"n" argument must be a positive number');
|
|
1908
|
+
this._maxListeners = n;
|
|
1909
|
+
return this;
|
|
1910
|
+
};
|
|
1911
|
+
|
|
1912
|
+
function $getMaxListeners(that) {
|
|
1913
|
+
if (that._maxListeners === undefined)
|
|
1914
|
+
return EventEmitter$2$1.defaultMaxListeners;
|
|
1915
|
+
return that._maxListeners;
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1918
|
+
EventEmitter$2$1.prototype.getMaxListeners = function getMaxListeners() {
|
|
1919
|
+
return $getMaxListeners(this);
|
|
1920
|
+
};
|
|
1921
|
+
|
|
1922
|
+
// These standalone emit* functions are used to optimize calling of event
|
|
1923
|
+
// handlers for fast cases because emit() itself often has a variable number of
|
|
1924
|
+
// arguments and can be deoptimized because of that. These functions always have
|
|
1925
|
+
// the same number of arguments and thus do not get deoptimized, so the code
|
|
1926
|
+
// inside them can execute faster.
|
|
1927
|
+
function emitNone(handler, isFn, self) {
|
|
1928
|
+
if (isFn)
|
|
1929
|
+
handler.call(self);
|
|
1930
|
+
else {
|
|
1931
|
+
var len = handler.length;
|
|
1932
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1933
|
+
for (var i = 0; i < len; ++i)
|
|
1934
|
+
listeners[i].call(self);
|
|
1935
|
+
}
|
|
1936
|
+
}
|
|
1937
|
+
function emitOne(handler, isFn, self, arg1) {
|
|
1938
|
+
if (isFn)
|
|
1939
|
+
handler.call(self, arg1);
|
|
1940
|
+
else {
|
|
1941
|
+
var len = handler.length;
|
|
1942
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1943
|
+
for (var i = 0; i < len; ++i)
|
|
1944
|
+
listeners[i].call(self, arg1);
|
|
1945
|
+
}
|
|
1946
|
+
}
|
|
1947
|
+
function emitTwo(handler, isFn, self, arg1, arg2) {
|
|
1948
|
+
if (isFn)
|
|
1949
|
+
handler.call(self, arg1, arg2);
|
|
1950
|
+
else {
|
|
1951
|
+
var len = handler.length;
|
|
1952
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1953
|
+
for (var i = 0; i < len; ++i)
|
|
1954
|
+
listeners[i].call(self, arg1, arg2);
|
|
1955
|
+
}
|
|
1956
|
+
}
|
|
1957
|
+
function emitThree(handler, isFn, self, arg1, arg2, arg3) {
|
|
1958
|
+
if (isFn)
|
|
1959
|
+
handler.call(self, arg1, arg2, arg3);
|
|
1960
|
+
else {
|
|
1961
|
+
var len = handler.length;
|
|
1962
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1963
|
+
for (var i = 0; i < len; ++i)
|
|
1964
|
+
listeners[i].call(self, arg1, arg2, arg3);
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
|
|
1968
|
+
function emitMany(handler, isFn, self, args) {
|
|
1969
|
+
if (isFn)
|
|
1970
|
+
handler.apply(self, args);
|
|
1971
|
+
else {
|
|
1972
|
+
var len = handler.length;
|
|
1973
|
+
var listeners = arrayClone$1$1(handler, len);
|
|
1974
|
+
for (var i = 0; i < len; ++i)
|
|
1975
|
+
listeners[i].apply(self, args);
|
|
1976
|
+
}
|
|
1977
|
+
}
|
|
1978
|
+
|
|
1979
|
+
EventEmitter$2$1.prototype.emit = function emit(type) {
|
|
1980
|
+
var er, handler, len, args, i, events, domain;
|
|
1981
|
+
var doError = (type === 'error');
|
|
1982
|
+
|
|
1983
|
+
events = this._events;
|
|
1984
|
+
if (events)
|
|
1985
|
+
doError = (doError && events.error == null);
|
|
1986
|
+
else if (!doError)
|
|
1987
|
+
return false;
|
|
1988
|
+
|
|
1989
|
+
domain = this.domain;
|
|
1990
|
+
|
|
1991
|
+
// If there is no 'error' event listener then throw.
|
|
1992
|
+
if (doError) {
|
|
1993
|
+
er = arguments[1];
|
|
1994
|
+
if (domain) {
|
|
1995
|
+
if (!er)
|
|
1996
|
+
er = new Error('Uncaught, unspecified "error" event');
|
|
1997
|
+
er.domainEmitter = this;
|
|
1998
|
+
er.domain = domain;
|
|
1999
|
+
er.domainThrown = false;
|
|
2000
|
+
domain.emit('error', er);
|
|
2001
|
+
} else if (er instanceof Error) {
|
|
2002
|
+
throw er; // Unhandled 'error' event
|
|
2003
|
+
} else {
|
|
2004
|
+
// At least give some kind of context to the user
|
|
2005
|
+
var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
|
|
2006
|
+
err.context = er;
|
|
2007
|
+
throw err;
|
|
2008
|
+
}
|
|
2009
|
+
return false;
|
|
2010
|
+
}
|
|
2011
|
+
|
|
2012
|
+
handler = events[type];
|
|
2013
|
+
|
|
2014
|
+
if (!handler)
|
|
2015
|
+
return false;
|
|
2016
|
+
|
|
2017
|
+
var isFn = typeof handler === 'function';
|
|
2018
|
+
len = arguments.length;
|
|
2019
|
+
switch (len) {
|
|
2020
|
+
// fast cases
|
|
2021
|
+
case 1:
|
|
2022
|
+
emitNone(handler, isFn, this);
|
|
2023
|
+
break;
|
|
2024
|
+
case 2:
|
|
2025
|
+
emitOne(handler, isFn, this, arguments[1]);
|
|
2026
|
+
break;
|
|
2027
|
+
case 3:
|
|
2028
|
+
emitTwo(handler, isFn, this, arguments[1], arguments[2]);
|
|
2029
|
+
break;
|
|
2030
|
+
case 4:
|
|
2031
|
+
emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);
|
|
2032
|
+
break;
|
|
2033
|
+
// slower
|
|
2034
|
+
default:
|
|
2035
|
+
args = new Array(len - 1);
|
|
2036
|
+
for (i = 1; i < len; i++)
|
|
2037
|
+
args[i - 1] = arguments[i];
|
|
2038
|
+
emitMany(handler, isFn, this, args);
|
|
2039
|
+
}
|
|
2040
|
+
|
|
2041
|
+
return true;
|
|
2042
|
+
};
|
|
2043
|
+
|
|
2044
|
+
function _addListener$1$1(target, type, listener, prepend) {
|
|
2045
|
+
var m;
|
|
2046
|
+
var events;
|
|
2047
|
+
var existing;
|
|
2048
|
+
|
|
2049
|
+
if (typeof listener !== 'function')
|
|
2050
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2051
|
+
|
|
2052
|
+
events = target._events;
|
|
2053
|
+
if (!events) {
|
|
2054
|
+
events = target._events = new EventHandlers();
|
|
2055
|
+
target._eventsCount = 0;
|
|
2056
|
+
} else {
|
|
2057
|
+
// To avoid recursion in the case that type === "newListener"! Before
|
|
2058
|
+
// adding it to the listeners, first emit "newListener".
|
|
2059
|
+
if (events.newListener) {
|
|
2060
|
+
target.emit('newListener', type,
|
|
2061
|
+
listener.listener ? listener.listener : listener);
|
|
2062
|
+
|
|
2063
|
+
// Re-assign `events` because a newListener handler could have caused the
|
|
2064
|
+
// this._events to be assigned to a new object
|
|
2065
|
+
events = target._events;
|
|
2066
|
+
}
|
|
2067
|
+
existing = events[type];
|
|
2068
|
+
}
|
|
2069
|
+
|
|
2070
|
+
if (!existing) {
|
|
2071
|
+
// Optimize the case of one listener. Don't need the extra array object.
|
|
2072
|
+
existing = events[type] = listener;
|
|
2073
|
+
++target._eventsCount;
|
|
2074
|
+
} else {
|
|
2075
|
+
if (typeof existing === 'function') {
|
|
2076
|
+
// Adding the second element, need to change to array.
|
|
2077
|
+
existing = events[type] = prepend ? [listener, existing] :
|
|
2078
|
+
[existing, listener];
|
|
2079
|
+
} else {
|
|
2080
|
+
// If we've already got an array, just append.
|
|
2081
|
+
if (prepend) {
|
|
2082
|
+
existing.unshift(listener);
|
|
2083
|
+
} else {
|
|
2084
|
+
existing.push(listener);
|
|
2085
|
+
}
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2088
|
+
// Check for listener leak
|
|
2089
|
+
if (!existing.warned) {
|
|
2090
|
+
m = $getMaxListeners(target);
|
|
2091
|
+
if (m && m > 0 && existing.length > m) {
|
|
2092
|
+
existing.warned = true;
|
|
2093
|
+
var w = new Error('Possible EventEmitter memory leak detected. ' +
|
|
2094
|
+
existing.length + ' ' + type + ' listeners added. ' +
|
|
2095
|
+
'Use emitter.setMaxListeners() to increase limit');
|
|
2096
|
+
w.name = 'MaxListenersExceededWarning';
|
|
2097
|
+
w.emitter = target;
|
|
2098
|
+
w.type = type;
|
|
2099
|
+
w.count = existing.length;
|
|
2100
|
+
emitWarning(w);
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
return target;
|
|
2106
|
+
}
|
|
2107
|
+
function emitWarning(e) {
|
|
2108
|
+
typeof console.warn === 'function' ? console.warn(e) : console.log(e);
|
|
2109
|
+
}
|
|
2110
|
+
EventEmitter$2$1.prototype.addListener = function addListener(type, listener) {
|
|
2111
|
+
return _addListener$1$1(this, type, listener, false);
|
|
2112
|
+
};
|
|
2113
|
+
|
|
2114
|
+
EventEmitter$2$1.prototype.on = EventEmitter$2$1.prototype.addListener;
|
|
2115
|
+
|
|
2116
|
+
EventEmitter$2$1.prototype.prependListener =
|
|
2117
|
+
function prependListener(type, listener) {
|
|
2118
|
+
return _addListener$1$1(this, type, listener, true);
|
|
2119
|
+
};
|
|
2120
|
+
|
|
2121
|
+
function _onceWrap$1$1(target, type, listener) {
|
|
2122
|
+
var fired = false;
|
|
2123
|
+
function g() {
|
|
2124
|
+
target.removeListener(type, g);
|
|
2125
|
+
if (!fired) {
|
|
2126
|
+
fired = true;
|
|
2127
|
+
listener.apply(target, arguments);
|
|
2128
|
+
}
|
|
2129
|
+
}
|
|
2130
|
+
g.listener = listener;
|
|
2131
|
+
return g;
|
|
2132
|
+
}
|
|
2133
|
+
|
|
2134
|
+
EventEmitter$2$1.prototype.once = function once(type, listener) {
|
|
2135
|
+
if (typeof listener !== 'function')
|
|
2136
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2137
|
+
this.on(type, _onceWrap$1$1(this, type, listener));
|
|
2138
|
+
return this;
|
|
2139
|
+
};
|
|
2140
|
+
|
|
2141
|
+
EventEmitter$2$1.prototype.prependOnceListener =
|
|
2142
|
+
function prependOnceListener(type, listener) {
|
|
2143
|
+
if (typeof listener !== 'function')
|
|
2144
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2145
|
+
this.prependListener(type, _onceWrap$1$1(this, type, listener));
|
|
2146
|
+
return this;
|
|
2147
|
+
};
|
|
2148
|
+
|
|
2149
|
+
// emits a 'removeListener' event iff the listener was removed
|
|
2150
|
+
EventEmitter$2$1.prototype.removeListener =
|
|
2151
|
+
function removeListener(type, listener) {
|
|
2152
|
+
var list, events, position, i, originalListener;
|
|
2153
|
+
|
|
2154
|
+
if (typeof listener !== 'function')
|
|
2155
|
+
throw new TypeError('"listener" argument must be a function');
|
|
2156
|
+
|
|
2157
|
+
events = this._events;
|
|
2158
|
+
if (!events)
|
|
2159
|
+
return this;
|
|
2160
|
+
|
|
2161
|
+
list = events[type];
|
|
2162
|
+
if (!list)
|
|
2163
|
+
return this;
|
|
2164
|
+
|
|
2165
|
+
if (list === listener || (list.listener && list.listener === listener)) {
|
|
2166
|
+
if (--this._eventsCount === 0)
|
|
2167
|
+
this._events = new EventHandlers();
|
|
2168
|
+
else {
|
|
2169
|
+
delete events[type];
|
|
2170
|
+
if (events.removeListener)
|
|
2171
|
+
this.emit('removeListener', type, list.listener || listener);
|
|
2172
|
+
}
|
|
2173
|
+
} else if (typeof list !== 'function') {
|
|
2174
|
+
position = -1;
|
|
2175
|
+
|
|
2176
|
+
for (i = list.length; i-- > 0;) {
|
|
2177
|
+
if (list[i] === listener ||
|
|
2178
|
+
(list[i].listener && list[i].listener === listener)) {
|
|
2179
|
+
originalListener = list[i].listener;
|
|
2180
|
+
position = i;
|
|
2181
|
+
break;
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
|
|
2185
|
+
if (position < 0)
|
|
2186
|
+
return this;
|
|
2187
|
+
|
|
2188
|
+
if (list.length === 1) {
|
|
2189
|
+
list[0] = undefined;
|
|
2190
|
+
if (--this._eventsCount === 0) {
|
|
2191
|
+
this._events = new EventHandlers();
|
|
2192
|
+
return this;
|
|
2193
|
+
} else {
|
|
2194
|
+
delete events[type];
|
|
2195
|
+
}
|
|
2196
|
+
} else {
|
|
2197
|
+
spliceOne$1$1(list, position);
|
|
2198
|
+
}
|
|
2199
|
+
|
|
2200
|
+
if (events.removeListener)
|
|
2201
|
+
this.emit('removeListener', type, originalListener || listener);
|
|
2202
|
+
}
|
|
2203
|
+
|
|
2204
|
+
return this;
|
|
2205
|
+
};
|
|
2206
|
+
|
|
2207
|
+
// Alias for removeListener added in NodeJS 10.0
|
|
2208
|
+
// https://nodejs.org/api/events.html#events_emitter_off_eventname_listener
|
|
2209
|
+
EventEmitter$2$1.prototype.off = function(type, listener){
|
|
2210
|
+
return this.removeListener(type, listener);
|
|
2211
|
+
};
|
|
2212
|
+
|
|
2213
|
+
EventEmitter$2$1.prototype.removeAllListeners =
|
|
2214
|
+
function removeAllListeners(type) {
|
|
2215
|
+
var listeners, events;
|
|
2216
|
+
|
|
2217
|
+
events = this._events;
|
|
2218
|
+
if (!events)
|
|
2219
|
+
return this;
|
|
2220
|
+
|
|
2221
|
+
// not listening for removeListener, no need to emit
|
|
2222
|
+
if (!events.removeListener) {
|
|
2223
|
+
if (arguments.length === 0) {
|
|
2224
|
+
this._events = new EventHandlers();
|
|
2225
|
+
this._eventsCount = 0;
|
|
2226
|
+
} else if (events[type]) {
|
|
2227
|
+
if (--this._eventsCount === 0)
|
|
2228
|
+
this._events = new EventHandlers();
|
|
2229
|
+
else
|
|
2230
|
+
delete events[type];
|
|
2231
|
+
}
|
|
2232
|
+
return this;
|
|
2233
|
+
}
|
|
2234
|
+
|
|
2235
|
+
// emit removeListener for all listeners on all events
|
|
2236
|
+
if (arguments.length === 0) {
|
|
2237
|
+
var keys = Object.keys(events);
|
|
2238
|
+
for (var i = 0, key; i < keys.length; ++i) {
|
|
2239
|
+
key = keys[i];
|
|
2240
|
+
if (key === 'removeListener') continue;
|
|
2241
|
+
this.removeAllListeners(key);
|
|
2242
|
+
}
|
|
2243
|
+
this.removeAllListeners('removeListener');
|
|
2244
|
+
this._events = new EventHandlers();
|
|
2245
|
+
this._eventsCount = 0;
|
|
2246
|
+
return this;
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
listeners = events[type];
|
|
2250
|
+
|
|
2251
|
+
if (typeof listeners === 'function') {
|
|
2252
|
+
this.removeListener(type, listeners);
|
|
2253
|
+
} else if (listeners) {
|
|
2254
|
+
// LIFO order
|
|
2255
|
+
do {
|
|
2256
|
+
this.removeListener(type, listeners[listeners.length - 1]);
|
|
2257
|
+
} while (listeners[0]);
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
return this;
|
|
2261
|
+
};
|
|
2262
|
+
|
|
2263
|
+
EventEmitter$2$1.prototype.listeners = function listeners(type) {
|
|
2264
|
+
var evlistener;
|
|
2265
|
+
var ret;
|
|
2266
|
+
var events = this._events;
|
|
2267
|
+
|
|
2268
|
+
if (!events)
|
|
2269
|
+
ret = [];
|
|
2270
|
+
else {
|
|
2271
|
+
evlistener = events[type];
|
|
2272
|
+
if (!evlistener)
|
|
2273
|
+
ret = [];
|
|
2274
|
+
else if (typeof evlistener === 'function')
|
|
2275
|
+
ret = [evlistener.listener || evlistener];
|
|
2276
|
+
else
|
|
2277
|
+
ret = unwrapListeners$1$1(evlistener);
|
|
2278
|
+
}
|
|
2279
|
+
|
|
2280
|
+
return ret;
|
|
2281
|
+
};
|
|
2282
|
+
|
|
2283
|
+
EventEmitter$2$1.listenerCount = function(emitter, type) {
|
|
2284
|
+
if (typeof emitter.listenerCount === 'function') {
|
|
2285
|
+
return emitter.listenerCount(type);
|
|
2286
|
+
} else {
|
|
2287
|
+
return listenerCount$1$1.call(emitter, type);
|
|
2288
|
+
}
|
|
2289
|
+
};
|
|
2290
|
+
|
|
2291
|
+
EventEmitter$2$1.prototype.listenerCount = listenerCount$1$1;
|
|
2292
|
+
function listenerCount$1$1(type) {
|
|
2293
|
+
var events = this._events;
|
|
2294
|
+
|
|
2295
|
+
if (events) {
|
|
2296
|
+
var evlistener = events[type];
|
|
2297
|
+
|
|
2298
|
+
if (typeof evlistener === 'function') {
|
|
2299
|
+
return 1;
|
|
2300
|
+
} else if (evlistener) {
|
|
2301
|
+
return evlistener.length;
|
|
2302
|
+
}
|
|
2303
|
+
}
|
|
2304
|
+
|
|
2305
|
+
return 0;
|
|
2306
|
+
}
|
|
2307
|
+
|
|
2308
|
+
EventEmitter$2$1.prototype.eventNames = function eventNames() {
|
|
2309
|
+
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
|
|
2310
|
+
};
|
|
2311
|
+
|
|
2312
|
+
// About 1.5x faster than the two-arg version of Array#splice().
|
|
2313
|
+
function spliceOne$1$1(list, index) {
|
|
2314
|
+
for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
|
|
2315
|
+
list[i] = list[k];
|
|
2316
|
+
list.pop();
|
|
2317
|
+
}
|
|
2318
|
+
|
|
2319
|
+
function arrayClone$1$1(arr, i) {
|
|
2320
|
+
var copy = new Array(i);
|
|
2321
|
+
while (i--)
|
|
2322
|
+
copy[i] = arr[i];
|
|
2323
|
+
return copy;
|
|
2324
|
+
}
|
|
2325
|
+
|
|
2326
|
+
function unwrapListeners$1$1(arr) {
|
|
2327
|
+
var ret = new Array(arr.length);
|
|
2328
|
+
for (var i = 0; i < ret.length; ++i) {
|
|
2329
|
+
ret[i] = arr[i].listener || arr[i];
|
|
2330
|
+
}
|
|
2331
|
+
return ret;
|
|
2332
|
+
}
|
|
2333
|
+
|
|
1862
2334
|
var commonjsGlobal$3 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
1863
2335
|
|
|
1864
2336
|
function getDefaultExportFromCjs$1 (x) {
|
|
@@ -1880,6 +2352,12 @@ var BrowserName$1;
|
|
|
1880
2352
|
BrowserName["EDGE"] = "Microsoft Edge";
|
|
1881
2353
|
BrowserName["SAFARI"] = "Safari";
|
|
1882
2354
|
})(BrowserName$1 || (BrowserName$1 = {}));
|
|
2355
|
+
var OSName$1;
|
|
2356
|
+
(function (OSName) {
|
|
2357
|
+
OSName["WINDOWS"] = "Windows";
|
|
2358
|
+
OSName["MAC"] = "macOS";
|
|
2359
|
+
OSName["LINUX"] = "Linux";
|
|
2360
|
+
})(OSName$1 || (OSName$1 = {}));
|
|
1883
2361
|
class BrowserInfo$1 {
|
|
1884
2362
|
static getBrowserDetails() {
|
|
1885
2363
|
return this.browser.getBrowser();
|
|
@@ -1905,6 +2383,15 @@ class BrowserInfo$1 {
|
|
|
1905
2383
|
static isSafari() {
|
|
1906
2384
|
return this.browser.getBrowserName() === BrowserName$1.SAFARI;
|
|
1907
2385
|
}
|
|
2386
|
+
static isWindows() {
|
|
2387
|
+
return this.browser.getOSName() === OSName$1.WINDOWS;
|
|
2388
|
+
}
|
|
2389
|
+
static isMac() {
|
|
2390
|
+
return this.browser.getOSName() === OSName$1.MAC;
|
|
2391
|
+
}
|
|
2392
|
+
static isLinux() {
|
|
2393
|
+
return this.browser.getOSName() === OSName$1.LINUX;
|
|
2394
|
+
}
|
|
1908
2395
|
static isVersionGreaterThan(version) {
|
|
1909
2396
|
const browserName = this.browser.getBrowserName();
|
|
1910
2397
|
const checkTree = { [browserName]: `>${version}` };
|
|
@@ -1933,12 +2420,44 @@ class BrowserInfo$1 {
|
|
|
1933
2420
|
}
|
|
1934
2421
|
BrowserInfo$1.browser = Bowser$1.getParser(window.navigator.userAgent);
|
|
1935
2422
|
|
|
2423
|
+
var SystemInfoEvents$1;
|
|
2424
|
+
(function (SystemInfoEvents) {
|
|
2425
|
+
SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
|
|
2426
|
+
})(SystemInfoEvents$1 || (SystemInfoEvents$1 = {}));
|
|
2427
|
+
class PressureObserverHelper$1 extends EventEmitter$2$1 {
|
|
2428
|
+
constructor() {
|
|
2429
|
+
super();
|
|
2430
|
+
this.lastCpuPressure = undefined;
|
|
2431
|
+
if (PressureObserverHelper$1.isPressureObserverSupported()) {
|
|
2432
|
+
this.observer = new PressureObserver(this.handleStateChange.bind(this));
|
|
2433
|
+
if (this.observer) {
|
|
2434
|
+
this.observer.observe('cpu');
|
|
2435
|
+
}
|
|
2436
|
+
}
|
|
2437
|
+
}
|
|
2438
|
+
handleStateChange(records) {
|
|
2439
|
+
records.forEach((record) => {
|
|
2440
|
+
if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
|
|
2441
|
+
this.lastCpuPressure = record.state;
|
|
2442
|
+
this.emit(SystemInfoEvents$1.CpuPressureStateChange, record.state);
|
|
2443
|
+
}
|
|
2444
|
+
});
|
|
2445
|
+
}
|
|
2446
|
+
getCpuPressure() {
|
|
2447
|
+
return this.lastCpuPressure;
|
|
2448
|
+
}
|
|
2449
|
+
static isPressureObserverSupported() {
|
|
2450
|
+
return 'PressureObserver' in window;
|
|
2451
|
+
}
|
|
2452
|
+
}
|
|
2453
|
+
new PressureObserverHelper$1();
|
|
2454
|
+
|
|
1936
2455
|
var CapabilityState$1;
|
|
1937
2456
|
(function (CapabilityState) {
|
|
1938
2457
|
CapabilityState["NOT_CAPABLE"] = "not capable";
|
|
1939
2458
|
CapabilityState["CAPABLE"] = "capable";
|
|
1940
2459
|
CapabilityState["UNKNOWN"] = "unknown";
|
|
1941
|
-
})(CapabilityState$1 || (CapabilityState$1 = {}));
|
|
2460
|
+
})(CapabilityState$1 || (CapabilityState$1 = {}));
|
|
1942
2461
|
|
|
1943
2462
|
var events$2 = {exports: {}};
|
|
1944
2463
|
|
|
@@ -2074,7 +2593,7 @@ EventEmitter$1$2.prototype.emit = function emit(type) {
|
|
|
2074
2593
|
ReflectApply$2(handler, this, args);
|
|
2075
2594
|
} else {
|
|
2076
2595
|
var len = handler.length;
|
|
2077
|
-
var listeners = arrayClone$
|
|
2596
|
+
var listeners = arrayClone$3(handler, len);
|
|
2078
2597
|
for (var i = 0; i < len; ++i)
|
|
2079
2598
|
ReflectApply$2(listeners[i], this, args);
|
|
2080
2599
|
}
|
|
@@ -2082,7 +2601,7 @@ EventEmitter$1$2.prototype.emit = function emit(type) {
|
|
|
2082
2601
|
return true;
|
|
2083
2602
|
};
|
|
2084
2603
|
|
|
2085
|
-
function _addListener$
|
|
2604
|
+
function _addListener$3(target, type, listener, prepend) {
|
|
2086
2605
|
var m;
|
|
2087
2606
|
var events;
|
|
2088
2607
|
var existing;
|
|
@@ -2145,14 +2664,14 @@ function _addListener$2(target, type, listener, prepend) {
|
|
|
2145
2664
|
}
|
|
2146
2665
|
|
|
2147
2666
|
EventEmitter$1$2.prototype.addListener = function addListener(type, listener) {
|
|
2148
|
-
return _addListener$
|
|
2667
|
+
return _addListener$3(this, type, listener, false);
|
|
2149
2668
|
};
|
|
2150
2669
|
|
|
2151
2670
|
EventEmitter$1$2.prototype.on = EventEmitter$1$2.prototype.addListener;
|
|
2152
2671
|
|
|
2153
2672
|
EventEmitter$1$2.prototype.prependListener =
|
|
2154
2673
|
function prependListener(type, listener) {
|
|
2155
|
-
return _addListener$
|
|
2674
|
+
return _addListener$3(this, type, listener, true);
|
|
2156
2675
|
};
|
|
2157
2676
|
|
|
2158
2677
|
function onceWrapper$2() {
|
|
@@ -2165,7 +2684,7 @@ function onceWrapper$2() {
|
|
|
2165
2684
|
}
|
|
2166
2685
|
}
|
|
2167
2686
|
|
|
2168
|
-
function _onceWrap$
|
|
2687
|
+
function _onceWrap$3(target, type, listener) {
|
|
2169
2688
|
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
|
|
2170
2689
|
var wrapped = onceWrapper$2.bind(state);
|
|
2171
2690
|
wrapped.listener = listener;
|
|
@@ -2175,14 +2694,14 @@ function _onceWrap$2(target, type, listener) {
|
|
|
2175
2694
|
|
|
2176
2695
|
EventEmitter$1$2.prototype.once = function once(type, listener) {
|
|
2177
2696
|
checkListener$2(listener);
|
|
2178
|
-
this.on(type, _onceWrap$
|
|
2697
|
+
this.on(type, _onceWrap$3(this, type, listener));
|
|
2179
2698
|
return this;
|
|
2180
2699
|
};
|
|
2181
2700
|
|
|
2182
2701
|
EventEmitter$1$2.prototype.prependOnceListener =
|
|
2183
2702
|
function prependOnceListener(type, listener) {
|
|
2184
2703
|
checkListener$2(listener);
|
|
2185
|
-
this.prependListener(type, _onceWrap$
|
|
2704
|
+
this.prependListener(type, _onceWrap$3(this, type, listener));
|
|
2186
2705
|
return this;
|
|
2187
2706
|
};
|
|
2188
2707
|
|
|
@@ -2226,7 +2745,7 @@ EventEmitter$1$2.prototype.removeListener =
|
|
|
2226
2745
|
if (position === 0)
|
|
2227
2746
|
list.shift();
|
|
2228
2747
|
else {
|
|
2229
|
-
spliceOne$
|
|
2748
|
+
spliceOne$3(list, position);
|
|
2230
2749
|
}
|
|
2231
2750
|
|
|
2232
2751
|
if (list.length === 1)
|
|
@@ -2306,7 +2825,7 @@ function _listeners$2(target, type, unwrap) {
|
|
|
2306
2825
|
return unwrap ? [evlistener.listener || evlistener] : [evlistener];
|
|
2307
2826
|
|
|
2308
2827
|
return unwrap ?
|
|
2309
|
-
unwrapListeners$
|
|
2828
|
+
unwrapListeners$3(evlistener) : arrayClone$3(evlistener, evlistener.length);
|
|
2310
2829
|
}
|
|
2311
2830
|
|
|
2312
2831
|
EventEmitter$1$2.prototype.listeners = function listeners(type) {
|
|
@@ -2321,12 +2840,12 @@ EventEmitter$1$2.listenerCount = function(emitter, type) {
|
|
|
2321
2840
|
if (typeof emitter.listenerCount === 'function') {
|
|
2322
2841
|
return emitter.listenerCount(type);
|
|
2323
2842
|
} else {
|
|
2324
|
-
return listenerCount$
|
|
2843
|
+
return listenerCount$3.call(emitter, type);
|
|
2325
2844
|
}
|
|
2326
2845
|
};
|
|
2327
2846
|
|
|
2328
|
-
EventEmitter$1$2.prototype.listenerCount = listenerCount$
|
|
2329
|
-
function listenerCount$
|
|
2847
|
+
EventEmitter$1$2.prototype.listenerCount = listenerCount$3;
|
|
2848
|
+
function listenerCount$3(type) {
|
|
2330
2849
|
var events = this._events;
|
|
2331
2850
|
|
|
2332
2851
|
if (events !== undefined) {
|
|
@@ -2346,20 +2865,20 @@ EventEmitter$1$2.prototype.eventNames = function eventNames() {
|
|
|
2346
2865
|
return this._eventsCount > 0 ? ReflectOwnKeys$2(this._events) : [];
|
|
2347
2866
|
};
|
|
2348
2867
|
|
|
2349
|
-
function arrayClone$
|
|
2868
|
+
function arrayClone$3(arr, n) {
|
|
2350
2869
|
var copy = new Array(n);
|
|
2351
2870
|
for (var i = 0; i < n; ++i)
|
|
2352
2871
|
copy[i] = arr[i];
|
|
2353
2872
|
return copy;
|
|
2354
2873
|
}
|
|
2355
2874
|
|
|
2356
|
-
function spliceOne$
|
|
2875
|
+
function spliceOne$3(list, index) {
|
|
2357
2876
|
for (; index + 1 < list.length; index++)
|
|
2358
2877
|
list[index] = list[index + 1];
|
|
2359
2878
|
list.pop();
|
|
2360
2879
|
}
|
|
2361
2880
|
|
|
2362
|
-
function unwrapListeners$
|
|
2881
|
+
function unwrapListeners$3(arr) {
|
|
2363
2882
|
var ret = new Array(arr.length);
|
|
2364
2883
|
for (var i = 0; i < ret.length; ++i) {
|
|
2365
2884
|
ret[i] = arr[i].listener || arr[i];
|
|
@@ -6060,7 +6579,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6060
6579
|
* other peer.
|
|
6061
6580
|
*/
|
|
6062
6581
|
createAnswer(options) {
|
|
6063
|
-
return __awaiter$
|
|
6582
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6064
6583
|
return this.pc.createAnswer(options).then((answer) => {
|
|
6065
6584
|
this.emit(PeerConnection.Events.CreateAnswerOnSuccess, answer);
|
|
6066
6585
|
return answer;
|
|
@@ -6078,7 +6597,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6078
6597
|
* That received offer should be delivered through the signaling server to a remote peer.
|
|
6079
6598
|
*/
|
|
6080
6599
|
createOffer(options) {
|
|
6081
|
-
return __awaiter$
|
|
6600
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6082
6601
|
return this.pc.createOffer(options).then((offer) => {
|
|
6083
6602
|
this.emit(PeerConnection.Events.CreateOfferOnSuccess, offer);
|
|
6084
6603
|
return offer;
|
|
@@ -6094,7 +6613,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6094
6613
|
* successfully changed or rejected if the change cannot be applied.
|
|
6095
6614
|
*/
|
|
6096
6615
|
setLocalDescription(description) {
|
|
6097
|
-
return __awaiter$
|
|
6616
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6098
6617
|
var _a;
|
|
6099
6618
|
// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even
|
|
6100
6619
|
// though it violates https://datatracker.ietf.org/doc/html/rfc8866. See
|
|
@@ -6124,7 +6643,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6124
6643
|
* specified description is incompatible with one or both of the peers on the connection).
|
|
6125
6644
|
*/
|
|
6126
6645
|
setRemoteDescription(description) {
|
|
6127
|
-
return __awaiter$
|
|
6646
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6128
6647
|
return this.pc.setRemoteDescription(description).then(() => {
|
|
6129
6648
|
this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess, description);
|
|
6130
6649
|
});
|
|
@@ -6199,7 +6718,7 @@ class PeerConnection extends EventEmitter$4 {
|
|
|
6199
6718
|
* @returns The connection type which would be `ConnectionType`.
|
|
6200
6719
|
*/
|
|
6201
6720
|
getCurrentConnectionType() {
|
|
6202
|
-
return __awaiter$
|
|
6721
|
+
return __awaiter$1(this, void 0, void 0, function* () {
|
|
6203
6722
|
var _a;
|
|
6204
6723
|
// make sure this method only can be called when the ice connection is established;
|
|
6205
6724
|
const isIceConnected = this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed';
|
|
@@ -7654,7 +8173,7 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
7654
8173
|
PERFORMANCE OF THIS SOFTWARE.
|
|
7655
8174
|
***************************************************************************** */
|
|
7656
8175
|
|
|
7657
|
-
function __awaiter
|
|
8176
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
7658
8177
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7659
8178
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7660
8179
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
@@ -7664,53 +8183,15 @@ function __awaiter$1(thisArg, _arguments, P, generator) {
|
|
|
7664
8183
|
});
|
|
7665
8184
|
}
|
|
7666
8185
|
|
|
7667
|
-
|
|
7668
|
-
|
|
7669
|
-
var __awaiter = (commonjsGlobal$1 && commonjsGlobal$1.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
7670
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7671
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7672
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
7673
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7674
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7675
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
7676
|
-
});
|
|
7677
|
-
};
|
|
7678
|
-
var __generator = (commonjsGlobal$1 && commonjsGlobal$1.__generator) || function (thisArg, body) {
|
|
7679
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
7680
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
7681
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
7682
|
-
function step(op) {
|
|
7683
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
7684
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
7685
|
-
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;
|
|
7686
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
7687
|
-
switch (op[0]) {
|
|
7688
|
-
case 0: case 1: t = op; break;
|
|
7689
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
7690
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
7691
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
7692
|
-
default:
|
|
7693
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
7694
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
7695
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
7696
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
7697
|
-
if (t[2]) _.ops.pop();
|
|
7698
|
-
_.trys.pop(); continue;
|
|
7699
|
-
}
|
|
7700
|
-
op = body.call(thisArg, _);
|
|
7701
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
7702
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
7703
|
-
}
|
|
7704
|
-
};
|
|
7705
|
-
Object.defineProperty(rtcstats, "__esModule", { value: true });
|
|
7706
|
-
var rtcStats_1 = rtcstats.rtcStats = void 0;
|
|
8186
|
+
// @todo WEBEX-425803: fix types issues with inline ts-ignore rules.
|
|
8187
|
+
// @see https://jira-eng-gpk2.cisco.com/jira/browse/WEBEX-425803
|
|
7707
8188
|
/**
|
|
7708
8189
|
* Copies values of any nested depth.
|
|
7709
8190
|
*
|
|
7710
8191
|
* @param value - The value to be copied.
|
|
7711
8192
|
* @returns - Copied value.
|
|
7712
8193
|
*/
|
|
7713
|
-
|
|
8194
|
+
const deepCopy$1 = (value) => JSON.parse(JSON.stringify(value));
|
|
7714
8195
|
/**
|
|
7715
8196
|
* Check deep equality between two values.
|
|
7716
8197
|
*
|
|
@@ -7718,7 +8199,7 @@ var deepCopy$1 = function (value) { return JSON.parse(JSON.stringify(value)); };
|
|
|
7718
8199
|
* @param value2 - Second value to check.
|
|
7719
8200
|
* @returns True if values are deeply equal, false otherwise.
|
|
7720
8201
|
*/
|
|
7721
|
-
|
|
8202
|
+
const deepEqual = (value1, value2) => {
|
|
7722
8203
|
// If both immutable values are equal, return true.
|
|
7723
8204
|
if (value1 === value2) {
|
|
7724
8205
|
return true;
|
|
@@ -7733,8 +8214,10 @@ var deepEqual = function (value1, value2) {
|
|
|
7733
8214
|
}
|
|
7734
8215
|
// Deep equal check each property in the object, returns true if we found no
|
|
7735
8216
|
// differing properties.
|
|
7736
|
-
return Object.keys(value1).reduce(
|
|
8217
|
+
return Object.keys(value1).reduce((val, prop) => {
|
|
8218
|
+
// @ts-ignore
|
|
7737
8219
|
if (value2[prop]) {
|
|
8220
|
+
// @ts-ignore
|
|
7738
8221
|
if (!deepEqual(value1[prop], value2[prop])) {
|
|
7739
8222
|
return false;
|
|
7740
8223
|
}
|
|
@@ -7754,38 +8237,36 @@ var deepEqual = function (value1, value2) {
|
|
|
7754
8237
|
* @param report - The report in Map form.
|
|
7755
8238
|
* @returns - A deduped object.
|
|
7756
8239
|
*/
|
|
7757
|
-
|
|
8240
|
+
const map2obj = (report) => {
|
|
7758
8241
|
if (!report.size) {
|
|
7759
8242
|
return report;
|
|
7760
8243
|
}
|
|
7761
|
-
|
|
7762
|
-
report.forEach(
|
|
8244
|
+
const o = {};
|
|
8245
|
+
report.forEach((value, key) => {
|
|
8246
|
+
// @ts-ignore
|
|
7763
8247
|
o[key] = value;
|
|
7764
8248
|
});
|
|
7765
8249
|
return o;
|
|
7766
8250
|
};
|
|
7767
|
-
|
|
8251
|
+
const dumpStream = (stream) => ({
|
|
7768
8252
|
id: stream.id,
|
|
7769
|
-
tracks: stream.getTracks().map(
|
|
8253
|
+
tracks: stream.getTracks().map((track) => ({
|
|
7770
8254
|
id: track.id,
|
|
7771
8255
|
kind: track.kind,
|
|
7772
8256
|
label: track.label,
|
|
7773
8257
|
enabled: track.enabled,
|
|
7774
8258
|
muted: track.muted,
|
|
7775
8259
|
readyState: track.readyState,
|
|
7776
|
-
})
|
|
7777
|
-
});
|
|
7778
|
-
|
|
8260
|
+
})),
|
|
8261
|
+
});
|
|
8262
|
+
const persistedKeys = ['type', 'id', 'timestamp'];
|
|
7779
8263
|
/**
|
|
7780
8264
|
* Check to see if the report consists of more than just the persisted metadata.
|
|
7781
8265
|
*
|
|
7782
8266
|
* @param report - The report line being checked.
|
|
7783
8267
|
* @returns True if the report item contains non-persisted keys, false otherwise.
|
|
7784
8268
|
*/
|
|
7785
|
-
|
|
7786
|
-
var hasNonMetadata = function (report) {
|
|
7787
|
-
return !!Object.keys(report).filter(function (key) { return !persistedKeys.includes(key); }).length;
|
|
7788
|
-
};
|
|
8269
|
+
const hasNonMetadata = (report) => !!Object.keys(report).filter((key) => !persistedKeys.includes(key)).length;
|
|
7789
8270
|
/**
|
|
7790
8271
|
* Apply a delta compression to the stats report. Reduces size by ~90%.
|
|
7791
8272
|
* To reduce further, report keys could be compressed.
|
|
@@ -7794,35 +8275,42 @@ var hasNonMetadata = function (report) {
|
|
|
7794
8275
|
* @param newStats - New incoming stats.
|
|
7795
8276
|
* @returns - Compressed Stats.
|
|
7796
8277
|
*/
|
|
7797
|
-
|
|
7798
|
-
|
|
7799
|
-
Object.keys(updatedStats).forEach(
|
|
7800
|
-
|
|
8278
|
+
const deltaCompression = (oldStats, newStats) => {
|
|
8279
|
+
const updatedStats = deepCopy$1(newStats);
|
|
8280
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8281
|
+
// @ts-ignore
|
|
8282
|
+
const report = updatedStats[id];
|
|
8283
|
+
// @ts-ignore
|
|
7801
8284
|
if (!oldStats[id]) {
|
|
7802
8285
|
return;
|
|
7803
8286
|
}
|
|
7804
8287
|
// Persist specific values beyond delta compression, as long as they
|
|
7805
8288
|
// aren't the only non-deduped keys.
|
|
7806
|
-
Object.keys(report).forEach(
|
|
8289
|
+
Object.keys(report).forEach((name) => {
|
|
8290
|
+
// @ts-ignore
|
|
7807
8291
|
if (deepEqual(report[name], oldStats[id][name]) && !persistedKeys.includes(name)) {
|
|
8292
|
+
// @ts-ignore
|
|
7808
8293
|
delete updatedStats[id][name];
|
|
7809
8294
|
}
|
|
7810
8295
|
if (!hasNonMetadata(report)) {
|
|
8296
|
+
// @ts-ignore
|
|
7811
8297
|
delete updatedStats[id];
|
|
7812
8298
|
}
|
|
7813
8299
|
});
|
|
7814
8300
|
});
|
|
7815
8301
|
// Use the most recent timestamp.
|
|
7816
|
-
|
|
7817
|
-
Object.keys(updatedStats).forEach(
|
|
7818
|
-
|
|
8302
|
+
let timestamp = -Infinity;
|
|
8303
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8304
|
+
// @ts-ignore
|
|
8305
|
+
const report = updatedStats[id];
|
|
7819
8306
|
if (report.timestamp > timestamp) {
|
|
7820
8307
|
timestamp = report.timestamp;
|
|
7821
8308
|
}
|
|
7822
8309
|
});
|
|
7823
8310
|
// Delete the timestamps on each item.
|
|
7824
|
-
Object.keys(updatedStats).forEach(
|
|
7825
|
-
|
|
8311
|
+
Object.keys(updatedStats).forEach((id) => {
|
|
8312
|
+
// @ts-ignore
|
|
8313
|
+
const report = updatedStats[id];
|
|
7826
8314
|
if (report.timestamp === timestamp) {
|
|
7827
8315
|
delete report.timestamp;
|
|
7828
8316
|
}
|
|
@@ -7836,10 +8324,11 @@ var deltaCompression = function (oldStats, newStats) {
|
|
|
7836
8324
|
* @param report - A WebRTC stats report.
|
|
7837
8325
|
* @returns - An array of Stats Report items.
|
|
7838
8326
|
*/
|
|
7839
|
-
|
|
7840
|
-
return Object.keys(report)
|
|
7841
|
-
.filter(
|
|
7842
|
-
|
|
8327
|
+
const formatStatsReport = (report) => {
|
|
8328
|
+
return (Object.keys(report)
|
|
8329
|
+
.filter((name) => name !== 'timestamp')
|
|
8330
|
+
// @ts-ignore
|
|
8331
|
+
.map((name) => JSON.stringify(report[name])));
|
|
7843
8332
|
};
|
|
7844
8333
|
/**
|
|
7845
8334
|
* Parametrize a single string event to contain type and an (empty) id.
|
|
@@ -7847,7 +8336,7 @@ var formatStatsReport = function (report) {
|
|
|
7847
8336
|
* @param value - The value to parametrize.
|
|
7848
8337
|
* @returns An event object.
|
|
7849
8338
|
*/
|
|
7850
|
-
|
|
8339
|
+
const makeEvent = (value) => [JSON.stringify({ value, type: 'string', id: '' })];
|
|
7851
8340
|
/**
|
|
7852
8341
|
* Attach a Peer Connection to periodically get updated on events and stats.
|
|
7853
8342
|
*
|
|
@@ -7856,9 +8345,10 @@ var makeEvent = function (value) { return [JSON.stringify({ value: value, type:
|
|
|
7856
8345
|
* @param intervalTime - Time between each `getStats` check.
|
|
7857
8346
|
* @param statsPreProcessor - Optional function that modifies stats.
|
|
7858
8347
|
*/
|
|
7859
|
-
|
|
7860
|
-
|
|
7861
|
-
|
|
8348
|
+
const rtcStats = (pc, logger, intervalTime,
|
|
8349
|
+
// eslint-disable-next-line no-unused-vars
|
|
8350
|
+
statsPreProcessor = () => Promise.resolve()) => {
|
|
8351
|
+
let prev = {};
|
|
7862
8352
|
/**
|
|
7863
8353
|
* Log stats or event data with additional tracking information.
|
|
7864
8354
|
*
|
|
@@ -7866,131 +8356,143 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
7866
8356
|
* @param payload - Log data pertaining to the event.
|
|
7867
8357
|
* @param timestamp - Time the event happened in milliseconds.
|
|
7868
8358
|
*/
|
|
7869
|
-
|
|
7870
|
-
logger({ timestamp: timestamp ? Math.round(timestamp) : Date.now(), name
|
|
8359
|
+
const trace = (name, payload, timestamp) => {
|
|
8360
|
+
logger({ timestamp: timestamp ? Math.round(timestamp) : Date.now(), name, payload });
|
|
7871
8361
|
};
|
|
7872
8362
|
trace('rtcConfiguration', makeEvent(JSON.stringify(pc.getConfiguration())));
|
|
7873
|
-
|
|
7874
|
-
pc.addEventListener('icecandidate',
|
|
8363
|
+
const origPeerConnection = window.RTCPeerConnection;
|
|
8364
|
+
pc.addEventListener('icecandidate', (e) => {
|
|
7875
8365
|
if (e.candidate) {
|
|
7876
8366
|
trace('onicecandidate', makeEvent(JSON.stringify(e.candidate)));
|
|
7877
8367
|
}
|
|
7878
8368
|
});
|
|
7879
|
-
pc.addEventListener('icecandidateerror',
|
|
7880
|
-
|
|
7881
|
-
trace('onicecandidateerror', makeEvent(
|
|
8369
|
+
pc.addEventListener('icecandidateerror', (event) => {
|
|
8370
|
+
const { url, errorCode, errorText } = event;
|
|
8371
|
+
trace('onicecandidateerror', makeEvent(`[${url}] ${errorCode}: ${errorText}`));
|
|
7882
8372
|
});
|
|
7883
|
-
pc.addEventListener('track',
|
|
7884
|
-
trace('ontrack', makeEvent(
|
|
7885
|
-
.map(
|
|
7886
|
-
.join(' ')))
|
|
8373
|
+
pc.addEventListener('track', (e) => {
|
|
8374
|
+
trace('ontrack', makeEvent(`${e.track.kind}:${e.track.id} ${e.streams
|
|
8375
|
+
.map((stream) => `stream:${stream.id}`)
|
|
8376
|
+
.join(' ')}`));
|
|
7887
8377
|
});
|
|
7888
|
-
pc.addEventListener('signalingstatechange',
|
|
8378
|
+
pc.addEventListener('signalingstatechange', () => {
|
|
7889
8379
|
trace('onsignalingstatechange', makeEvent(pc.signalingState));
|
|
7890
8380
|
});
|
|
7891
|
-
pc.addEventListener('iceconnectionstatechange',
|
|
8381
|
+
pc.addEventListener('iceconnectionstatechange', () => {
|
|
7892
8382
|
trace('oniceconnectionstatechange', makeEvent(pc.iceConnectionState));
|
|
7893
8383
|
});
|
|
7894
|
-
pc.addEventListener('icegatheringstatechange',
|
|
8384
|
+
pc.addEventListener('icegatheringstatechange', () => {
|
|
7895
8385
|
trace('onicegatheringstatechange', makeEvent(pc.iceGatheringState));
|
|
7896
8386
|
});
|
|
7897
|
-
pc.addEventListener('connectionstatechange',
|
|
8387
|
+
pc.addEventListener('connectionstatechange', () => {
|
|
7898
8388
|
trace('onconnectionstatechange', makeEvent(pc.connectionState));
|
|
7899
8389
|
});
|
|
7900
|
-
pc.addEventListener('negotiationneeded',
|
|
8390
|
+
pc.addEventListener('negotiationneeded', () => {
|
|
7901
8391
|
trace('onnegotiationneeded', makeEvent('negotiationneeded'));
|
|
7902
8392
|
});
|
|
7903
|
-
pc.addEventListener('datachannel',
|
|
7904
|
-
trace('ondatachannel', makeEvent(
|
|
8393
|
+
pc.addEventListener('datachannel', (event) => {
|
|
8394
|
+
trace('ondatachannel', makeEvent(`${event.channel.id}: ${event.channel.label}`));
|
|
7905
8395
|
});
|
|
7906
|
-
['close'].forEach(
|
|
7907
|
-
|
|
8396
|
+
['close'].forEach((method) => {
|
|
8397
|
+
// @ts-ignore
|
|
8398
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7908
8399
|
if (nativeMethod) {
|
|
8400
|
+
// @ts-ignore
|
|
7909
8401
|
origPeerConnection.prototype[method] = function () {
|
|
7910
|
-
trace(
|
|
8402
|
+
trace(`on${method}`, makeEvent(method));
|
|
7911
8403
|
return nativeMethod.apply(this, arguments);
|
|
7912
8404
|
};
|
|
7913
8405
|
}
|
|
7914
8406
|
});
|
|
7915
|
-
['createDataChannel'].forEach(
|
|
7916
|
-
|
|
8407
|
+
['createDataChannel'].forEach((method) => {
|
|
8408
|
+
// @ts-ignore
|
|
8409
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7917
8410
|
if (nativeMethod) {
|
|
8411
|
+
// @ts-ignore
|
|
7918
8412
|
origPeerConnection.prototype[method] = function () {
|
|
7919
|
-
trace(
|
|
7920
|
-
|
|
7921
|
-
dataChannel.addEventListener('open',
|
|
7922
|
-
trace(
|
|
8413
|
+
trace(`on${method}`, makeEvent(method));
|
|
8414
|
+
const dataChannel = nativeMethod.apply(this, arguments);
|
|
8415
|
+
dataChannel.addEventListener('open', () => {
|
|
8416
|
+
trace(`ondataChannelOpen`, makeEvent(`${dataChannel.id}:${dataChannel.label}`));
|
|
7923
8417
|
});
|
|
7924
|
-
dataChannel.addEventListener('close',
|
|
7925
|
-
trace(
|
|
8418
|
+
dataChannel.addEventListener('close', () => {
|
|
8419
|
+
trace(`ondataChannelClose`, makeEvent(`${dataChannel.id}:${dataChannel.label}`));
|
|
7926
8420
|
});
|
|
7927
|
-
dataChannel.addEventListener('error',
|
|
7928
|
-
|
|
7929
|
-
trace(
|
|
8421
|
+
dataChannel.addEventListener('error', (event) => {
|
|
8422
|
+
const { error } = event;
|
|
8423
|
+
trace(`ondataChannelError`, makeEvent(`${dataChannel.id}:${dataChannel.label}: ${error.errorDetail}`));
|
|
7930
8424
|
});
|
|
7931
8425
|
return dataChannel;
|
|
7932
8426
|
};
|
|
7933
8427
|
}
|
|
7934
8428
|
});
|
|
7935
|
-
['addStream', 'removeStream'].forEach(
|
|
7936
|
-
|
|
8429
|
+
['addStream', 'removeStream'].forEach((method) => {
|
|
8430
|
+
// @ts-ignore
|
|
8431
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7937
8432
|
if (nativeMethod) {
|
|
8433
|
+
// @ts-ignore
|
|
7938
8434
|
origPeerConnection.prototype[method] = function () {
|
|
7939
|
-
|
|
7940
|
-
|
|
8435
|
+
const stream = arguments[0];
|
|
8436
|
+
const streamInfo = stream
|
|
7941
8437
|
.getTracks()
|
|
7942
|
-
.map(
|
|
8438
|
+
.map((t) => `${t.kind}:${t.id}`)
|
|
7943
8439
|
.join(',');
|
|
7944
|
-
trace(
|
|
8440
|
+
trace(`on${method}`, makeEvent(`${stream.id} ${streamInfo}`));
|
|
7945
8441
|
return nativeMethod.apply(this, arguments);
|
|
7946
8442
|
};
|
|
7947
8443
|
}
|
|
7948
8444
|
});
|
|
7949
|
-
['addTrack'].forEach(
|
|
7950
|
-
|
|
8445
|
+
['addTrack'].forEach((method) => {
|
|
8446
|
+
// @ts-ignore
|
|
8447
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7951
8448
|
if (nativeMethod) {
|
|
8449
|
+
// @ts-ignore
|
|
7952
8450
|
origPeerConnection.prototype[method] = function () {
|
|
7953
|
-
|
|
7954
|
-
|
|
7955
|
-
trace(
|
|
8451
|
+
const track = arguments[0];
|
|
8452
|
+
const streams = [].slice.call(arguments, 1);
|
|
8453
|
+
trace(`on${method}`, makeEvent(`${track.kind}:${track.id} ${streams.map((s) => `stream:${s.id}`).join(';') || '-'}`));
|
|
7956
8454
|
return nativeMethod.apply(this, arguments);
|
|
7957
8455
|
};
|
|
7958
8456
|
}
|
|
7959
8457
|
});
|
|
7960
|
-
['removeTrack'].forEach(
|
|
7961
|
-
|
|
8458
|
+
['removeTrack'].forEach((method) => {
|
|
8459
|
+
// @ts-ignore
|
|
8460
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7962
8461
|
if (nativeMethod) {
|
|
8462
|
+
// @ts-ignore
|
|
7963
8463
|
origPeerConnection.prototype[method] = function () {
|
|
7964
|
-
|
|
7965
|
-
trace(
|
|
8464
|
+
const track = arguments[0].track;
|
|
8465
|
+
trace(`on${method}`, makeEvent(track ? `${track.kind}:${track.id}` : 'null'));
|
|
7966
8466
|
return nativeMethod.apply(this, arguments);
|
|
7967
8467
|
};
|
|
7968
8468
|
}
|
|
7969
8469
|
});
|
|
7970
|
-
['createOffer', 'createAnswer'].forEach(
|
|
7971
|
-
|
|
8470
|
+
['createOffer', 'createAnswer'].forEach((method) => {
|
|
8471
|
+
// @ts-ignore
|
|
8472
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
7972
8473
|
if (nativeMethod) {
|
|
8474
|
+
// @ts-ignore
|
|
7973
8475
|
origPeerConnection.prototype[method] = function () {
|
|
7974
|
-
|
|
7975
|
-
|
|
8476
|
+
let opts;
|
|
8477
|
+
const args = arguments;
|
|
7976
8478
|
if (arguments.length === 1 && typeof arguments[0] === 'object') {
|
|
7977
|
-
// eslint-disable-next-line prefer-destructuring
|
|
7978
8479
|
opts = arguments[0];
|
|
7979
8480
|
}
|
|
7980
8481
|
else if (arguments.length === 3 && typeof arguments[2] === 'object') {
|
|
7981
|
-
// eslint-disable-next-line prefer-destructuring
|
|
7982
8482
|
opts = arguments[2];
|
|
7983
8483
|
}
|
|
7984
|
-
trace(
|
|
7985
|
-
return nativeMethod.apply(this, opts ? [opts] : undefined).then(
|
|
7986
|
-
|
|
8484
|
+
trace(`on${method}`, makeEvent(opts || ''));
|
|
8485
|
+
return nativeMethod.apply(this, opts ? [opts] : undefined).then(
|
|
8486
|
+
// @ts-ignore
|
|
8487
|
+
(description) => {
|
|
8488
|
+
trace(`on${method}OnSuccess`, makeEvent(description.sdp));
|
|
7987
8489
|
if (args.length > 0 && typeof args[0] === 'function') {
|
|
7988
8490
|
args[0].apply(null, [description]);
|
|
7989
8491
|
return undefined;
|
|
7990
8492
|
}
|
|
7991
8493
|
return description;
|
|
7992
|
-
},
|
|
7993
|
-
trace(
|
|
8494
|
+
}, (err) => {
|
|
8495
|
+
trace(`on${method}OnFailure`, makeEvent(err.toString()));
|
|
7994
8496
|
if (args.length > 1 && typeof args[1] === 'function') {
|
|
7995
8497
|
args[1].apply(null, [err]);
|
|
7996
8498
|
return;
|
|
@@ -8000,64 +8502,66 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8000
8502
|
};
|
|
8001
8503
|
}
|
|
8002
8504
|
});
|
|
8003
|
-
['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(
|
|
8004
|
-
|
|
8505
|
+
['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach((method) => {
|
|
8506
|
+
// @ts-ignore
|
|
8507
|
+
const nativeMethod = origPeerConnection.prototype[method];
|
|
8005
8508
|
if (nativeMethod) {
|
|
8509
|
+
// @ts-ignore
|
|
8006
8510
|
origPeerConnection.prototype[method] = function () {
|
|
8007
|
-
|
|
8008
|
-
|
|
8009
|
-
trace("on".concat(method), makeEvent(method === 'addIceCandidate'
|
|
8511
|
+
const args = arguments;
|
|
8512
|
+
trace(`on${method}`, makeEvent(method === 'addIceCandidate'
|
|
8010
8513
|
? arguments[0]
|
|
8011
|
-
:
|
|
8012
|
-
|
|
8514
|
+
: arguments[0]
|
|
8515
|
+
? arguments[0].sdp
|
|
8516
|
+
: 'undefined'));
|
|
8517
|
+
return nativeMethod.apply(this, [arguments[0]]).then(() => {
|
|
8013
8518
|
var _a;
|
|
8014
|
-
trace(
|
|
8519
|
+
trace(`on${method}OnSuccess`, makeEvent('success'));
|
|
8015
8520
|
if (method.endsWith('Description')) {
|
|
8016
|
-
|
|
8017
|
-
|
|
8018
|
-
|
|
8521
|
+
// @ts-ignore
|
|
8522
|
+
if (!this.transportEventsPreviouslyAdded) {
|
|
8523
|
+
const senders = this.getSenders();
|
|
8524
|
+
for (const sender of senders) {
|
|
8019
8525
|
if (sender.transport) {
|
|
8020
|
-
sender.transport.addEventListener('statechange',
|
|
8526
|
+
sender.transport.addEventListener('statechange', () => {
|
|
8021
8527
|
if (sender && sender.transport) {
|
|
8022
|
-
trace(
|
|
8528
|
+
trace(`ondtlsStateChange`, makeEvent(sender.transport.state));
|
|
8023
8529
|
}
|
|
8024
8530
|
});
|
|
8025
|
-
sender.transport.addEventListener('error',
|
|
8026
|
-
|
|
8027
|
-
trace(
|
|
8531
|
+
sender.transport.addEventListener('error', (error) => {
|
|
8532
|
+
const errorEvent = error;
|
|
8533
|
+
trace(`ondtlsError`, makeEvent(errorEvent.error.errorDetail));
|
|
8028
8534
|
});
|
|
8029
8535
|
if (sender.transport.iceTransport) {
|
|
8030
|
-
sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',
|
|
8536
|
+
sender.transport.iceTransport.addEventListener('selectedcandidatepairchange', () => {
|
|
8031
8537
|
var _a, _b, _c, _d, _e, _f;
|
|
8032
8538
|
if (sender.transport && sender.transport.iceTransport) {
|
|
8033
|
-
|
|
8034
|
-
|
|
8035
|
-
|
|
8036
|
-
|
|
8539
|
+
const pair = sender.transport.iceTransport.getSelectedCandidatePair();
|
|
8540
|
+
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}`;
|
|
8541
|
+
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}`;
|
|
8542
|
+
const pairString = `local: ${localCandidate}, remote: ${remoteCandidate}`;
|
|
8037
8543
|
trace('onselectedCandidatePairChange', makeEvent(pairString));
|
|
8038
8544
|
}
|
|
8039
8545
|
});
|
|
8040
8546
|
}
|
|
8041
|
-
|
|
8547
|
+
// @ts-ignore
|
|
8548
|
+
this.transportEventsPreviouslyAdded = true;
|
|
8042
8549
|
if (pc.getConfiguration().bundlePolicy === 'max-bundle') {
|
|
8043
|
-
|
|
8550
|
+
break;
|
|
8044
8551
|
}
|
|
8045
8552
|
}
|
|
8046
|
-
};
|
|
8047
|
-
for (var _i = 0, senders_1 = senders; _i < senders_1.length; _i++) {
|
|
8048
|
-
var sender = senders_1[_i];
|
|
8049
|
-
var state_1 = _loop_1(sender);
|
|
8050
|
-
if (state_1 === "break")
|
|
8051
|
-
break;
|
|
8052
8553
|
}
|
|
8053
8554
|
}
|
|
8054
|
-
|
|
8555
|
+
// @ts-ignore
|
|
8556
|
+
if (!this.sctpEventsPreviouslyAdded) {
|
|
8055
8557
|
// Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.
|
|
8056
|
-
if ((_a =
|
|
8057
|
-
|
|
8058
|
-
|
|
8558
|
+
if ((_a = this.sctp) === null || _a === void 0 ? void 0 : _a.addEventListener) {
|
|
8559
|
+
this.sctp.addEventListener('statechange', () => {
|
|
8560
|
+
// @ts-ignore
|
|
8561
|
+
trace('onsctpStateChange', makeEvent(this.sctp.state));
|
|
8059
8562
|
});
|
|
8060
|
-
|
|
8563
|
+
// @ts-ignore
|
|
8564
|
+
this.sctpEventsPreviouslyAdded = true;
|
|
8061
8565
|
}
|
|
8062
8566
|
}
|
|
8063
8567
|
}
|
|
@@ -8066,8 +8570,8 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8066
8570
|
return undefined;
|
|
8067
8571
|
}
|
|
8068
8572
|
return undefined;
|
|
8069
|
-
},
|
|
8070
|
-
trace(
|
|
8573
|
+
}, (err) => {
|
|
8574
|
+
trace(`on${method}OnFailure`, makeEvent(err.toString()));
|
|
8071
8575
|
if (args.length >= 3 && typeof args[2] === 'function') {
|
|
8072
8576
|
args[2].apply(null, [err]);
|
|
8073
8577
|
return undefined;
|
|
@@ -8078,15 +8582,15 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8078
8582
|
}
|
|
8079
8583
|
});
|
|
8080
8584
|
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
|
|
8081
|
-
|
|
8082
|
-
|
|
8585
|
+
const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
|
|
8586
|
+
const gum = function () {
|
|
8083
8587
|
trace('onnavigator.mediaDevices.getUserMedia', makeEvent(JSON.stringify(arguments[0])));
|
|
8084
|
-
return
|
|
8588
|
+
return origGetUserMedia
|
|
8085
8589
|
.apply(navigator.mediaDevices, arguments)
|
|
8086
|
-
.then(
|
|
8590
|
+
.then((stream) => {
|
|
8087
8591
|
trace('onnavigator.mediaDevices.getUserMediaOnSuccess', makeEvent(JSON.stringify(dumpStream(stream))));
|
|
8088
8592
|
return stream;
|
|
8089
|
-
},
|
|
8593
|
+
}, (err) => {
|
|
8090
8594
|
trace('onnavigator.mediaDevices.getUserMediaOnFailure', makeEvent(err.name));
|
|
8091
8595
|
return Promise.reject(err);
|
|
8092
8596
|
});
|
|
@@ -8094,53 +8598,46 @@ var rtcStats = function (pc, logger, intervalTime, statsPreProcessor) {
|
|
|
8094
8598
|
navigator.mediaDevices.getUserMedia = gum.bind(navigator.mediaDevices);
|
|
8095
8599
|
}
|
|
8096
8600
|
if (navigator.mediaDevices && navigator.mediaDevices.getDisplayMedia) {
|
|
8097
|
-
|
|
8098
|
-
|
|
8601
|
+
const origGetDisplayMedia = navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);
|
|
8602
|
+
const gdm = function () {
|
|
8099
8603
|
trace('onnavigator.mediaDevices.getDisplayMedia', makeEvent(JSON.stringify(arguments[0])));
|
|
8100
|
-
return
|
|
8604
|
+
return origGetDisplayMedia
|
|
8101
8605
|
.apply(navigator.mediaDevices, arguments)
|
|
8102
|
-
.then(
|
|
8606
|
+
.then((stream) => {
|
|
8103
8607
|
trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess', makeEvent(JSON.stringify(dumpStream(stream))));
|
|
8104
8608
|
return stream;
|
|
8105
|
-
},
|
|
8609
|
+
}, (err) => {
|
|
8106
8610
|
trace('onnavigator.mediaDevices.getDisplayMediaOnFailure', makeEvent(err.name));
|
|
8107
8611
|
return Promise.reject(err);
|
|
8108
8612
|
});
|
|
8109
8613
|
};
|
|
8110
8614
|
navigator.mediaDevices.getDisplayMedia = gdm.bind(navigator.mediaDevices);
|
|
8111
8615
|
}
|
|
8112
|
-
|
|
8113
|
-
|
|
8114
|
-
|
|
8115
|
-
|
|
8116
|
-
|
|
8117
|
-
|
|
8118
|
-
|
|
8119
|
-
|
|
8120
|
-
|
|
8121
|
-
|
|
8122
|
-
|
|
8123
|
-
prev = base;
|
|
8124
|
-
return Promise.resolve();
|
|
8125
|
-
});
|
|
8126
|
-
})];
|
|
8616
|
+
const getStatsReport = async () => pc.getStats(null).then((res) => {
|
|
8617
|
+
// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
|
|
8618
|
+
const statsMap = new Map();
|
|
8619
|
+
res.forEach((stats, key) => statsMap.set(key, stats));
|
|
8620
|
+
return statsPreProcessor(statsMap).then(() => {
|
|
8621
|
+
const now = map2obj(statsMap);
|
|
8622
|
+
const base = deepCopy$1(now); // our new prev
|
|
8623
|
+
const compressed = deltaCompression(prev, now);
|
|
8624
|
+
trace('stats-report', formatStatsReport(compressed), compressed.timestamp !== -Infinity ? compressed.timestamp : undefined);
|
|
8625
|
+
prev = base;
|
|
8626
|
+
return Promise.resolve();
|
|
8127
8627
|
});
|
|
8128
|
-
});
|
|
8129
|
-
|
|
8628
|
+
});
|
|
8629
|
+
const interval = window.setInterval(() => {
|
|
8130
8630
|
if (pc.signalingState === 'closed') {
|
|
8131
8631
|
window.clearInterval(interval);
|
|
8132
8632
|
return;
|
|
8133
8633
|
}
|
|
8134
8634
|
getStatsReport();
|
|
8135
8635
|
}, intervalTime);
|
|
8136
|
-
|
|
8137
|
-
return
|
|
8138
|
-
|
|
8139
|
-
|
|
8140
|
-
}); };
|
|
8141
|
-
return { forceStatsReport: forceStatsReport };
|
|
8636
|
+
const forceStatsReport = async () => {
|
|
8637
|
+
return getStatsReport();
|
|
8638
|
+
};
|
|
8639
|
+
return { forceStatsReport };
|
|
8142
8640
|
};
|
|
8143
|
-
rtcStats_1 = rtcstats.rtcStats = rtcStats;
|
|
8144
8641
|
|
|
8145
8642
|
const NUM = '\\d+';
|
|
8146
8643
|
const SDP_TOKEN = "[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";
|
|
@@ -9598,6 +10095,38 @@ class BrowserInfo {
|
|
|
9598
10095
|
}
|
|
9599
10096
|
BrowserInfo.browser = Bowser.getParser(window.navigator.userAgent);
|
|
9600
10097
|
|
|
10098
|
+
var SystemInfoEvents;
|
|
10099
|
+
(function (SystemInfoEvents) {
|
|
10100
|
+
SystemInfoEvents["CpuPressureStateChange"] = "cpu-pressure-state-change";
|
|
10101
|
+
})(SystemInfoEvents || (SystemInfoEvents = {}));
|
|
10102
|
+
class PressureObserverHelper extends EventEmitter$5 {
|
|
10103
|
+
constructor() {
|
|
10104
|
+
super();
|
|
10105
|
+
this.lastCpuPressure = undefined;
|
|
10106
|
+
if (PressureObserverHelper.isPressureObserverSupported()) {
|
|
10107
|
+
this.observer = new PressureObserver(this.handleStateChange.bind(this));
|
|
10108
|
+
if (this.observer) {
|
|
10109
|
+
this.observer.observe('cpu');
|
|
10110
|
+
}
|
|
10111
|
+
}
|
|
10112
|
+
}
|
|
10113
|
+
handleStateChange(records) {
|
|
10114
|
+
records.forEach((record) => {
|
|
10115
|
+
if (record.source === 'cpu' && record.state !== this.lastCpuPressure) {
|
|
10116
|
+
this.lastCpuPressure = record.state;
|
|
10117
|
+
this.emit(SystemInfoEvents.CpuPressureStateChange, record.state);
|
|
10118
|
+
}
|
|
10119
|
+
});
|
|
10120
|
+
}
|
|
10121
|
+
getCpuPressure() {
|
|
10122
|
+
return this.lastCpuPressure;
|
|
10123
|
+
}
|
|
10124
|
+
static isPressureObserverSupported() {
|
|
10125
|
+
return 'PressureObserver' in window;
|
|
10126
|
+
}
|
|
10127
|
+
}
|
|
10128
|
+
new PressureObserverHelper();
|
|
10129
|
+
|
|
9601
10130
|
var CapabilityState;
|
|
9602
10131
|
(function (CapabilityState) {
|
|
9603
10132
|
CapabilityState["NOT_CAPABLE"] = "not capable";
|
|
@@ -10656,12 +11185,12 @@ function getCurrentTimestamp() {
|
|
|
10656
11185
|
return performance.timeOrigin + performance.now();
|
|
10657
11186
|
}
|
|
10658
11187
|
class StatsManager {
|
|
10659
|
-
constructor(statsGetter, statsPreprocessor = () => __awaiter
|
|
11188
|
+
constructor(statsGetter, statsPreprocessor = () => __awaiter(this, void 0, void 0, function* () { })) {
|
|
10660
11189
|
this.statsGetter = statsGetter;
|
|
10661
11190
|
this.statsPreProcessor = statsPreprocessor;
|
|
10662
11191
|
}
|
|
10663
11192
|
getStats() {
|
|
10664
|
-
return __awaiter
|
|
11193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
10665
11194
|
const statsReport = yield this.statsGetter();
|
|
10666
11195
|
const statsMap = new Map();
|
|
10667
11196
|
statsReport.forEach((stats, key) => statsMap.set(key, stats));
|
|
@@ -10727,7 +11256,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
|
|
|
10727
11256
|
return this._receiveSlot;
|
|
10728
11257
|
}
|
|
10729
11258
|
getStats() {
|
|
10730
|
-
return __awaiter
|
|
11259
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
10731
11260
|
const statsMap = new Map();
|
|
10732
11261
|
const statsReport = yield this.receiver.getStats();
|
|
10733
11262
|
statsReport.forEach((stats, key) => {
|
|
@@ -14477,7 +15006,7 @@ function waterfall (tasks, callback) {
|
|
|
14477
15006
|
awaitify(waterfall);
|
|
14478
15007
|
|
|
14479
15008
|
function processTasks(task, finishedCallback) {
|
|
14480
|
-
return __awaiter
|
|
15009
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14481
15010
|
try {
|
|
14482
15011
|
yield task();
|
|
14483
15012
|
finishedCallback();
|
|
@@ -14537,7 +15066,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14537
15066
|
}
|
|
14538
15067
|
replaceSenderSource(stream) {
|
|
14539
15068
|
var _a, _b;
|
|
14540
|
-
return __awaiter
|
|
15069
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14541
15070
|
const trackOrNull = (_a = stream === null || stream === void 0 ? void 0 : stream.outputStream.getTracks()[0]) !== null && _a !== void 0 ? _a : null;
|
|
14542
15071
|
if (((_b = this.sender.track) === null || _b === void 0 ? void 0 : _b.id) !== (trackOrNull === null || trackOrNull === void 0 ? void 0 : trackOrNull.id)) {
|
|
14543
15072
|
yield this.sender.replaceTrack(trackOrNull);
|
|
@@ -14551,14 +15080,14 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14551
15080
|
});
|
|
14552
15081
|
}
|
|
14553
15082
|
handleTrackChange() {
|
|
14554
|
-
return __awaiter
|
|
15083
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14555
15084
|
if (this.requested) {
|
|
14556
15085
|
yield this.replaceSenderSource(this.publishedStream);
|
|
14557
15086
|
}
|
|
14558
15087
|
});
|
|
14559
15088
|
}
|
|
14560
15089
|
handleStreamConstraintsChange() {
|
|
14561
|
-
return __awaiter
|
|
15090
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14562
15091
|
yield this.updateSendParameters(this.requestedIdEncodingParamsMap);
|
|
14563
15092
|
});
|
|
14564
15093
|
}
|
|
@@ -14575,7 +15104,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14575
15104
|
const _super = Object.create(null, {
|
|
14576
15105
|
replaceTransceiver: { get: () => super.replaceTransceiver }
|
|
14577
15106
|
});
|
|
14578
|
-
return __awaiter
|
|
15107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14579
15108
|
_super.replaceTransceiver.call(this, newRtcRtpTransceiver);
|
|
14580
15109
|
newRtcRtpTransceiver.direction = this.direction;
|
|
14581
15110
|
if (this.requested) {
|
|
@@ -14584,7 +15113,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14584
15113
|
});
|
|
14585
15114
|
}
|
|
14586
15115
|
replacePublishedStream(newStream) {
|
|
14587
|
-
return __awaiter
|
|
15116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14588
15117
|
const oldStream = this.publishedStream;
|
|
14589
15118
|
oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(LocalStreamEventNames.OutputTrackChange, this.handleTrackChange);
|
|
14590
15119
|
oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(LocalStreamEventNames.ConstraintsChange, this.handleStreamConstraintsChange);
|
|
@@ -14637,7 +15166,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14637
15166
|
}
|
|
14638
15167
|
}
|
|
14639
15168
|
getStats() {
|
|
14640
|
-
return __awaiter
|
|
15169
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14641
15170
|
const statsMap = new Map();
|
|
14642
15171
|
const statsReport = yield this.sender.getStats();
|
|
14643
15172
|
statsReport.forEach((stats, key) => {
|
|
@@ -14692,8 +15221,8 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14692
15221
|
});
|
|
14693
15222
|
}
|
|
14694
15223
|
updateSendParameters(requestedIdEncodingParamsMap) {
|
|
14695
|
-
return __awaiter
|
|
14696
|
-
return this.updateSendParametersQueue.push(() => __awaiter
|
|
15224
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15225
|
+
return this.updateSendParametersQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
14697
15226
|
const sendParameters = this.sender.getParameters();
|
|
14698
15227
|
sendParameters.encodings.forEach((encoding, index) => {
|
|
14699
15228
|
var _a, _b;
|
|
@@ -14807,7 +15336,7 @@ class SendSlot {
|
|
|
14807
15336
|
this.sendTransceiver = sendTransceiver;
|
|
14808
15337
|
}
|
|
14809
15338
|
publishStream(stream) {
|
|
14810
|
-
return __awaiter
|
|
15339
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14811
15340
|
if (stream === this.sendTransceiver.publishedStream) {
|
|
14812
15341
|
return Promise.resolve();
|
|
14813
15342
|
}
|
|
@@ -14815,7 +15344,7 @@ class SendSlot {
|
|
|
14815
15344
|
});
|
|
14816
15345
|
}
|
|
14817
15346
|
unpublishStream() {
|
|
14818
|
-
return __awaiter
|
|
15347
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14819
15348
|
if (!this.sendTransceiver.publishedStream) {
|
|
14820
15349
|
return Promise.resolve();
|
|
14821
15350
|
}
|
|
@@ -14835,12 +15364,12 @@ class SendSlot {
|
|
|
14835
15364
|
this.sendTransceiver.active = active;
|
|
14836
15365
|
}
|
|
14837
15366
|
setCodecParameters(parameters) {
|
|
14838
|
-
return __awaiter
|
|
15367
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14839
15368
|
this.sendTransceiver.setCodecParameters(parameters);
|
|
14840
15369
|
});
|
|
14841
15370
|
}
|
|
14842
15371
|
deleteCodecParameters(parameters) {
|
|
14843
|
-
return __awaiter
|
|
15372
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14844
15373
|
this.sendTransceiver.deleteCodecParameters(parameters);
|
|
14845
15374
|
});
|
|
14846
15375
|
}
|
|
@@ -14852,7 +15381,7 @@ class SendSlot {
|
|
|
14852
15381
|
}
|
|
14853
15382
|
}
|
|
14854
15383
|
|
|
14855
|
-
const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnectionStats) => __awaiter
|
|
15384
|
+
const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnectionStats) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14856
15385
|
const result = {
|
|
14857
15386
|
audio: {
|
|
14858
15387
|
senders: [],
|
|
@@ -14871,7 +15400,7 @@ const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnec
|
|
|
14871
15400
|
receivers: [],
|
|
14872
15401
|
},
|
|
14873
15402
|
};
|
|
14874
|
-
yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter
|
|
15403
|
+
yield Promise.all([...sendTransceivers.entries()].map(([mediaType, transceiver]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14875
15404
|
var _a;
|
|
14876
15405
|
const item = {
|
|
14877
15406
|
report: yield transceiver.getStats(),
|
|
@@ -14896,8 +15425,8 @@ const organizeTransceiverStats = (sendTransceivers, recvTransceivers, peerConnec
|
|
|
14896
15425
|
result.screenShareVideo.senders.push(item);
|
|
14897
15426
|
}
|
|
14898
15427
|
})));
|
|
14899
|
-
yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter
|
|
14900
|
-
return Promise.all(transceivers.map((t) => __awaiter
|
|
15428
|
+
yield Promise.all([...recvTransceivers.entries()].map(([mediaType, transceivers]) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15429
|
+
return Promise.all(transceivers.map((t) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14901
15430
|
var _b;
|
|
14902
15431
|
const item = {
|
|
14903
15432
|
report: yield t.getStats(),
|
|
@@ -15414,14 +15943,14 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15414
15943
|
return recvOnlyTransceiver;
|
|
15415
15944
|
}
|
|
15416
15945
|
createReceiveSlot(mediaType) {
|
|
15417
|
-
return __awaiter
|
|
15946
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15418
15947
|
return (yield this.createReceiveSlots(mediaType, 1))[0];
|
|
15419
15948
|
});
|
|
15420
15949
|
}
|
|
15421
15950
|
createReceiveSlots(mediaType, count = 1) {
|
|
15422
|
-
return __awaiter
|
|
15951
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15423
15952
|
return new Promise((createReceiveSlotsResolve) => {
|
|
15424
|
-
this.offerAnswerQueue.push(() => __awaiter
|
|
15953
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15425
15954
|
const createdReceiveOnlyTransceivers = [];
|
|
15426
15955
|
for (let i = 0; i < count; i++) {
|
|
15427
15956
|
const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType);
|
|
@@ -15468,7 +15997,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15468
15997
|
return targetCodec.pt;
|
|
15469
15998
|
}
|
|
15470
15999
|
waitForIceGatheringComplete() {
|
|
15471
|
-
return __awaiter
|
|
16000
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15472
16001
|
return new Promise((resolve, reject) => {
|
|
15473
16002
|
const finalizeIceCandidatesGathering = () => this.pc.getIceCandidates().length > 0
|
|
15474
16003
|
? resolve()
|
|
@@ -15494,7 +16023,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15494
16023
|
});
|
|
15495
16024
|
}
|
|
15496
16025
|
createOffer() {
|
|
15497
|
-
return __awaiter
|
|
16026
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15498
16027
|
if (!this.pc.getLocalDescription()) {
|
|
15499
16028
|
this.midPredictor.allocateMidForDatachannel();
|
|
15500
16029
|
}
|
|
@@ -15505,7 +16034,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15505
16034
|
}
|
|
15506
16035
|
const createOfferId = ++this.currentCreateOfferId;
|
|
15507
16036
|
return new Promise((createOfferResolve, createOfferReject) => {
|
|
15508
|
-
this.offerAnswerQueue.push(() => __awaiter
|
|
16037
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15509
16038
|
var _a;
|
|
15510
16039
|
try {
|
|
15511
16040
|
const offer = yield this.pc.createOffer();
|
|
@@ -15515,7 +16044,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15515
16044
|
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
15516
16045
|
yield this.pc
|
|
15517
16046
|
.setLocalDescription(offer)
|
|
15518
|
-
.then(() => __awaiter
|
|
16047
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15519
16048
|
logger.info('this.pc.setLocalDescription() resolved');
|
|
15520
16049
|
}))
|
|
15521
16050
|
.catch((error) => {
|
|
@@ -15549,7 +16078,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15549
16078
|
});
|
|
15550
16079
|
}
|
|
15551
16080
|
setAnswer(answer) {
|
|
15552
|
-
return __awaiter
|
|
16081
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15553
16082
|
const sdp = this.preProcessRemoteAnswer(answer);
|
|
15554
16083
|
if (!this.setAnswerResolve) {
|
|
15555
16084
|
logErrorAndThrow(WcmeErrorType.SET_ANSWER_FAILED, `Call to setAnswer without having previously called createOffer.`);
|
|
@@ -15557,7 +16086,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15557
16086
|
logger.info('calling this.pc.setRemoteDescription()');
|
|
15558
16087
|
return this.pc
|
|
15559
16088
|
.setRemoteDescription({ type: 'answer', sdp })
|
|
15560
|
-
.then(() => __awaiter
|
|
16089
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15561
16090
|
logger.info('this.pc.setRemoteDescription() resolved');
|
|
15562
16091
|
if (this.setAnswerResolve) {
|
|
15563
16092
|
this.setAnswerResolve();
|
|
@@ -15574,7 +16103,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15574
16103
|
}
|
|
15575
16104
|
doLocalOfferAnswer() {
|
|
15576
16105
|
var _a;
|
|
15577
|
-
return __awaiter
|
|
16106
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15578
16107
|
const offer = yield this.pc.createOffer();
|
|
15579
16108
|
if (!offer.sdp) {
|
|
15580
16109
|
logErrorAndThrow(WcmeErrorType.CREATE_OFFER_FAILED, 'SDP not found in offer.');
|
|
@@ -15582,7 +16111,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15582
16111
|
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
15583
16112
|
yield this.pc
|
|
15584
16113
|
.setLocalDescription(offer)
|
|
15585
|
-
.then(() => __awaiter
|
|
16114
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15586
16115
|
logger.info('this.pc.setLocalDescription() resolved');
|
|
15587
16116
|
}))
|
|
15588
16117
|
.catch((error) => {
|
|
@@ -15592,7 +16121,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15592
16121
|
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
15593
16122
|
return this.pc
|
|
15594
16123
|
.setRemoteDescription({ type: 'answer', sdp: answer })
|
|
15595
|
-
.then(() => __awaiter
|
|
16124
|
+
.then(() => __awaiter(this, void 0, void 0, function* () {
|
|
15596
16125
|
logger.info('this.pc.setRemoteDescription() resolved');
|
|
15597
16126
|
}))
|
|
15598
16127
|
.catch((error) => {
|
|
@@ -15601,8 +16130,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15601
16130
|
});
|
|
15602
16131
|
}
|
|
15603
16132
|
queueLocalOfferAnswer() {
|
|
15604
|
-
return __awaiter
|
|
15605
|
-
return this.offerAnswerQueue.push(() => __awaiter
|
|
16133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
16134
|
+
return this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
15606
16135
|
yield this.doLocalOfferAnswer();
|
|
15607
16136
|
}));
|
|
15608
16137
|
});
|
|
@@ -15775,7 +16304,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15775
16304
|
}
|
|
15776
16305
|
renewPeerConnection(userOptions) {
|
|
15777
16306
|
var _a;
|
|
15778
|
-
return __awaiter
|
|
16307
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15779
16308
|
(_a = this.pc) === null || _a === void 0 ? void 0 : _a.close();
|
|
15780
16309
|
try {
|
|
15781
16310
|
if (userOptions) {
|
|
@@ -15832,28 +16361,28 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15832
16361
|
return this.statsManager.getStats();
|
|
15833
16362
|
}
|
|
15834
16363
|
getTransceiverStats() {
|
|
15835
|
-
return __awaiter
|
|
16364
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15836
16365
|
const stats = yield this.getStats();
|
|
15837
16366
|
const peerConnectionStats = [...stats.values()].find((stat) => stat.type === 'peer-connection');
|
|
15838
16367
|
return organizeTransceiverStats(this.sendTransceivers, this.recvTransceivers, peerConnectionStats);
|
|
15839
16368
|
});
|
|
15840
16369
|
}
|
|
15841
16370
|
preProcessStats(stats) {
|
|
15842
|
-
return __awaiter
|
|
16371
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
15843
16372
|
stats.forEach((stat) => {
|
|
15844
16373
|
if (stat.type === 'peer-connection') {
|
|
15845
16374
|
stat.isMediaBypassEdge = this.metadata.isMediaBypassEdge;
|
|
15846
16375
|
}
|
|
15847
16376
|
});
|
|
15848
|
-
yield Promise.all([...this.sendTransceivers.values()].map((transceiver) => __awaiter
|
|
16377
|
+
yield Promise.all([...this.sendTransceivers.values()].map((transceiver) => __awaiter(this, void 0, void 0, function* () {
|
|
15849
16378
|
(yield transceiver.getStats()).forEach((senderStats) => {
|
|
15850
16379
|
if (senderStats.type === 'outbound-rtp' || senderStats.type === 'media-source') {
|
|
15851
16380
|
stats.set(senderStats.id, senderStats);
|
|
15852
16381
|
}
|
|
15853
16382
|
});
|
|
15854
16383
|
})));
|
|
15855
|
-
yield Promise.all([...this.recvTransceivers.values()].map((transceivers) => __awaiter
|
|
15856
|
-
yield Promise.all(transceivers.map((transceiver) => __awaiter
|
|
16384
|
+
yield Promise.all([...this.recvTransceivers.values()].map((transceivers) => __awaiter(this, void 0, void 0, function* () {
|
|
16385
|
+
yield Promise.all(transceivers.map((transceiver) => __awaiter(this, void 0, void 0, function* () {
|
|
15857
16386
|
(yield transceiver.getStats()).forEach((receiverStats) => {
|
|
15858
16387
|
if (receiverStats.type === 'inbound-rtp') {
|
|
15859
16388
|
stats.set(receiverStats.id, receiverStats);
|
|
@@ -15864,7 +16393,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15864
16393
|
});
|
|
15865
16394
|
}
|
|
15866
16395
|
attachMetricsObserver() {
|
|
15867
|
-
this.forceStatsReport =
|
|
16396
|
+
this.forceStatsReport = rtcStats(this.pc.getUnderlyingRTCPeerConnection(), (data) => this.metricsCallback(data), 5000, (stats) => this.preProcessStats(stats)).forceStatsReport;
|
|
15868
16397
|
}
|
|
15869
16398
|
forceRtcMetricsCallback() {
|
|
15870
16399
|
var _a;
|