@webex/internal-media-core 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/cjs/index.js +2893 -120
  2. package/dist/esm/index.js +2893 -121
  3. package/dist/types/{MediaConnection/EventEmitter.d.ts → EventEmitter/index.d.ts} +2 -2
  4. package/dist/types/EventEmitter/index.d.ts.map +1 -0
  5. package/dist/types/Logger/index.d.ts +11 -14
  6. package/dist/types/Logger/index.d.ts.map +1 -1
  7. package/dist/types/Media/Logger/index.d.ts +16 -0
  8. package/dist/types/Media/Logger/index.d.ts.map +1 -0
  9. package/dist/types/Media/Track/Track.d.ts +3 -3
  10. package/dist/types/Media/Track/Track.d.ts.map +1 -1
  11. package/dist/types/Media/Track/eventTypes.d.ts +11 -0
  12. package/dist/types/Media/Track/eventTypes.d.ts.map +1 -0
  13. package/dist/types/{common/peerConnectionMock.d.ts → Media/testUtils/RTCPeerConnectionMock.d.ts} +1 -1
  14. package/dist/types/Media/testUtils/RTCPeerConnectionMock.d.ts.map +1 -0
  15. package/dist/types/MediaConnection/MediaConnection.d.ts +1 -1
  16. package/dist/types/MediaConnection/MediaConnection.d.ts.map +1 -1
  17. package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts +3 -4
  18. package/dist/types/MediaConnection/MultistreamRoapMediaConnection.d.ts.map +1 -1
  19. package/dist/types/MediaConnection/RoapMediaConnection.d.ts +3 -3
  20. package/dist/types/MediaConnection/RoapMediaConnection.d.ts.map +1 -1
  21. package/dist/types/MediaConnection/eventTypes.d.ts +15 -17
  22. package/dist/types/MediaConnection/eventTypes.d.ts.map +1 -1
  23. package/dist/types/MediaConnection/index.d.ts +2 -2
  24. package/dist/types/MediaConnection/index.d.ts.map +1 -1
  25. package/dist/types/MediaConnection/roap.d.ts +1 -1
  26. package/dist/types/MediaConnection/roap.d.ts.map +1 -1
  27. package/dist/types/MediaConnection/testUtils/EventListener.d.ts +6 -5
  28. package/dist/types/MediaConnection/testUtils/EventListener.d.ts.map +1 -1
  29. package/dist/types/MediaConnection/testUtils/RoapListener.d.ts +1 -1
  30. package/dist/types/MediaConnection/testUtils/RoapListener.d.ts.map +1 -1
  31. package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts +47 -0
  32. package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts.map +1 -0
  33. package/dist/types/StatsAnalyzer/StatsAnalyzer.test.d.ts +2 -0
  34. package/dist/types/StatsAnalyzer/StatsAnalyzer.test.d.ts.map +1 -0
  35. package/dist/types/StatsAnalyzer/constants.d.ts +282 -0
  36. package/dist/types/StatsAnalyzer/constants.d.ts.map +1 -0
  37. package/dist/types/StatsAnalyzer/eventTypes.d.ts +33 -0
  38. package/dist/types/StatsAnalyzer/eventTypes.d.ts.map +1 -0
  39. package/dist/types/StatsAnalyzer/index.d.ts +4 -0
  40. package/dist/types/StatsAnalyzer/index.d.ts.map +1 -0
  41. package/dist/types/StatsAnalyzer/types.d.ts +58 -0
  42. package/dist/types/StatsAnalyzer/types.d.ts.map +1 -0
  43. package/dist/types/StatsAnalyzer/utils.d.ts +55 -0
  44. package/dist/types/StatsAnalyzer/utils.d.ts.map +1 -0
  45. package/dist/types/common/testUtils/TestLogger.d.ts +13 -0
  46. package/dist/types/common/testUtils/TestLogger.d.ts.map +1 -0
  47. package/dist/types/{MediaConnection/testUtils/index.d.ts → common/testUtils/promiseUtils.d.ts} +1 -4
  48. package/dist/types/common/testUtils/promiseUtils.d.ts.map +1 -0
  49. package/dist/types/index.d.ts +1 -0
  50. package/dist/types/index.d.ts.map +1 -1
  51. package/package.json +3 -1
  52. package/dist/types/MediaConnection/EventEmitter.d.ts.map +0 -1
  53. package/dist/types/MediaConnection/logger.d.ts +0 -13
  54. package/dist/types/MediaConnection/logger.d.ts.map +0 -1
  55. package/dist/types/MediaConnection/testUtils/index.d.ts.map +0 -1
  56. package/dist/types/MediaConnection/testUtils/logger.d.ts +0 -3
  57. package/dist/types/MediaConnection/testUtils/logger.d.ts.map +0 -1
  58. package/dist/types/common/peerConnectionMock.d.ts.map +0 -1
package/dist/esm/index.js CHANGED
@@ -490,6 +490,8 @@ function unwrapListeners$3(arr) {
490
490
  return ret;
491
491
  }
492
492
 
493
+ class EventEmitter$5 extends EventEmitter$6 {}
494
+
493
495
  var MEDIA = 'MEDIA';
494
496
  var DEVICE = 'DEVICE';
495
497
  var MEDIA_STREAM_TRACK = 'MEDIA_STREAM_TRACK';
@@ -602,6 +604,11 @@ function getTrackSettings(track) {
602
604
  return {};
603
605
  }
604
606
 
607
+ var TrackEventNames;
608
+ (function (TrackEventNames) {
609
+ TrackEventNames["TRACK_MUTE_STATE_CHANGED"] = "track:mute";
610
+ })(TrackEventNames || (TrackEventNames = {}));
611
+
605
612
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
606
613
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
607
614
  var TrackStatus;
@@ -615,7 +622,7 @@ var TrackKind;
615
622
  TrackKind["VIDEO"] = "video";
616
623
  })(TrackKind || (TrackKind = {}));
617
624
  var _mediaStreamTrack = /*#__PURE__*/new WeakMap();
618
- class Track extends EventEmitter$6 {
625
+ class Track extends EventEmitter$5 {
619
626
  constructor(mediaStreamTrack) {
620
627
  super();
621
628
  _defineProperty(this, "ID", void 0);
@@ -635,7 +642,7 @@ class Track extends EventEmitter$6 {
635
642
  _classPrivateFieldSet(this, _mediaStreamTrack, mediaStreamTrack);
636
643
  _classPrivateFieldGet(this, _mediaStreamTrack).onmute = () => {
637
644
  var action = _classPrivateFieldGet(this, _mediaStreamTrack).enabled ? 'muted' : 'unmuted';
638
- this.emit('track:mute', {
645
+ this.emit(TrackEventNames.TRACK_MUTE_STATE_CHANGED, {
639
646
  action
640
647
  });
641
648
  };
@@ -730,7 +737,7 @@ class Track extends EventEmitter$6 {
730
737
  }
731
738
  }
732
739
 
733
- var eventEmitter = new EventEmitter$6();
740
+ var eventEmitter = new EventEmitter$5();
734
741
  var deviceList = [];
735
742
  var getDevices$1 = /*#__PURE__*/function () {
736
743
  var _ref = _asyncToGenerator(function* () {
@@ -1367,60 +1374,60 @@ class MediaConnectionError extends Error {
1367
1374
  }
1368
1375
  }
1369
1376
 
1370
- function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1371
- function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1377
+ function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1378
+ function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1372
1379
  class SdpError extends MediaConnectionError {
1373
1380
  constructor(message) {
1374
1381
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1375
- super(message, _objectSpread$8({
1382
+ super(message, _objectSpread$9({
1376
1383
  code: ErrorCode.SdpError,
1377
1384
  name: 'SdpError'
1378
1385
  }, options));
1379
1386
  }
1380
1387
  }
1381
1388
 
1382
- function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1383
- function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1389
+ function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1390
+ function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1384
1391
  class IceGatheringError extends SdpError {
1385
1392
  constructor(message) {
1386
1393
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1387
- super(message, _objectSpread$7({
1394
+ super(message, _objectSpread$8({
1388
1395
  code: ErrorCode.IceGatheringError,
1389
1396
  name: 'IceGatheringError'
1390
1397
  }, options));
1391
1398
  }
1392
1399
  }
1393
1400
 
1394
- function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1395
- function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1401
+ function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1402
+ function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1396
1403
  class SdpAnswerHandlingError extends SdpError {
1397
1404
  constructor(message) {
1398
1405
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1399
- super(message, _objectSpread$6({
1406
+ super(message, _objectSpread$7({
1400
1407
  code: ErrorCode.SdpAnswerHandlingError,
1401
1408
  name: 'SdpAnswerHandlingError'
1402
1409
  }, options));
1403
1410
  }
1404
1411
  }
1405
1412
 
1406
- function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1407
- function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1413
+ function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1414
+ function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1408
1415
  class SdpOfferCreationError extends SdpError {
1409
1416
  constructor(message) {
1410
1417
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1411
- super(message, _objectSpread$5({
1418
+ super(message, _objectSpread$6({
1412
1419
  code: ErrorCode.SdpOfferCreationError,
1413
1420
  name: 'SdpOfferCreationError'
1414
1421
  }, options));
1415
1422
  }
1416
1423
  }
1417
1424
 
1418
- function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1419
- function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1425
+ function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1426
+ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1420
1427
  class SdpOfferHandlingError extends SdpError {
1421
1428
  constructor(message) {
1422
1429
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1423
- super(message, _objectSpread$4({
1430
+ super(message, _objectSpread$5({
1424
1431
  code: ErrorCode.SdpOfferHandlingError,
1425
1432
  name: 'SdpOfferHandlingError'
1426
1433
  }, options));
@@ -1438,8 +1445,6 @@ var Error$1 = /*#__PURE__*/Object.freeze({
1438
1445
  SdpOfferHandlingError: SdpOfferHandlingError
1439
1446
  });
1440
1447
 
1441
- class EventEmitter$5 extends EventEmitter$6 {}
1442
-
1443
1448
  var global$1 = (typeof global !== "undefined" ? global :
1444
1449
  typeof self !== "undefined" ? self :
1445
1450
  typeof window !== "undefined" ? window : {});
@@ -2873,7 +2878,7 @@ opts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object')
2873
2878
  opts=arguments[2];}trace("on".concat(method),makeEvent(opts||''));return nativeMethod.apply(this,opts?[opts]:undefined).then(function(description){trace("on".concat(method,"OnSuccess"),makeEvent(description.sdp));if(args.length>0&&typeof args[0]==='function'){args[0].apply(null,[description]);return undefined;}return description;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>1&&typeof args[1]==='function'){args[1].apply(null,[err]);return;}throw err;});};}});['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var _this=this;var args=arguments;trace("on".concat(method),makeEvent(method==='addIceCandidate'?arguments[0]:arguments[0].sdp));return nativeMethod.apply(this,[arguments[0]]).then(function(){var _a;trace("on".concat(method,"OnSuccess"),makeEvent('success'));if(method.endsWith('Description')){if(!_this.transportEventsPreviouslyAdded){var senders=_this.getSenders();var _loop_1=function _loop_1(sender){if(sender.transport){sender.transport.addEventListener('statechange',function(){if(sender&&sender.transport){trace("ondtlsStateChange",makeEvent(sender.transport.state));}});sender.transport.addEventListener('error',function(error){var errorEvent=error;trace("ondtlsError",makeEvent(errorEvent.error.errorDetail));});if(sender.transport.iceTransport){sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',function(){var _a,_b,_c,_d,_e,_f;if(sender.transport&&sender.transport.iceTransport){var pair=sender.transport.iceTransport.getSelectedCandidatePair();var localCandidate="".concat((_a=pair===null||pair===void 0?void 0:pair.local)===null||_a===void 0?void 0:_a.address,":").concat((_b=pair===null||pair===void 0?void 0:pair.local)===null||_b===void 0?void 0:_b.port,"/").concat((_c=pair===null||pair===void 0?void 0:pair.local)===null||_c===void 0?void 0:_c.protocol);var remoteCandidate="".concat((_d=pair===null||pair===void 0?void 0:pair.remote)===null||_d===void 0?void 0:_d.address,":").concat((_e=pair===null||pair===void 0?void 0:pair.remote)===null||_e===void 0?void 0:_e.port,"/").concat((_f=pair===null||pair===void 0?void 0:pair.remote)===null||_f===void 0?void 0:_f.protocol);var pairString="local: ".concat(localCandidate,", remote: ").concat(remoteCandidate);trace('onselectedCandidatePairChange',makeEvent(pairString));}});}_this.transportEventsPreviouslyAdded=true;if(pc.getConfiguration().bundlePolicy==='max-bundle'){return "break";}}};for(var _i=0,senders_1=senders;_i<senders_1.length;_i++){var sender=senders_1[_i];var state_1=_loop_1(sender);if(state_1==="break")break;}}if(!_this.sctpEventsPreviouslyAdded){// Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.
2874
2879
  if((_a=_this.sctp)===null||_a===void 0?void 0:_a.addEventListener){_this.sctp.addEventListener('statechange',function(){trace('onsctpStateChange',makeEvent(_this.sctp.state));});_this.sctpEventsPreviouslyAdded=true;}}}if(args.length>=2&&typeof args[1]==='function'){args[1].apply(null,[]);return undefined;}return undefined;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>=3&&typeof args[2]==='function'){args[2].apply(null,[err]);return undefined;}throw err;});};}});if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var origGetUserMedia_1=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);var gum=function gum(){trace('onnavigator.mediaDevices.getUserMedia',makeEvent(JSON.stringify(arguments[0])));return origGetUserMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getUserMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getUserMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getUserMedia=gum.bind(navigator.mediaDevices);}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var origGetDisplayMedia_1=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);var gdm=function gdm(){trace('onnavigator.mediaDevices.getDisplayMedia',makeEvent(JSON.stringify(arguments[0])));return origGetDisplayMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getDisplayMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getDisplayMedia=gdm.bind(navigator.mediaDevices);}var getStatsReport=function getStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
2875
2880
  var statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});return statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev
2876
- var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&&param.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);var BrowserName;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName||(BrowserName={}));var OSName;(function(OSName){OSName["WINDOWS"]="Windows";OSName["MAC"]="macOS";OSName["LINUX"]="Linux";})(OSName||(OSName={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName.MAC;}static isLinux(){return this.browser.getOSName()===OSName.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser.getParser(window.navigator.userAgent);var CapabilityState;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState||(CapabilityState={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return "a=jmp:".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return "a=jmp-stream-id-mode:".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line="a=jmp-source:".concat(this.source);if(this.csi){line+=" csi=".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp("^jmp-source:(".concat(ANY_NON_WS$1,") (?:csi=(").concat(ANY_NON_WS$1,"))"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(options){this.streamIds=[];this.customCodecParameters=new Map();this.egressMungerOptions=options;}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log("No H.264 CBP present in m-line with MID ".concat(mediaDescription.mid,", so all H.264 codecs have been retained."));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(!this.egressMungerOptions.doFullIce){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref2=>{var[param,value]=_ref2;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x
2881
+ var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&&param.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function retainCodecs(av,predicate){var filtered=false;av.codecs.forEach(codecInfo=>{if(!predicate(codecInfo)){av.removePt(codecInfo.pt);filtered=true;}});return filtered;}function retainCodecsByCodecName(av,allowedCodecNames){var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());return retainCodecs(av,codecInfo=>!!codecInfo.name&&allowedLowerCase.includes(codecInfo.name.toLowerCase()));}function retainCandidates(sdpOrMedia,predicate){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(predicate(candidate)){return true;}filtered=true;return false;});});return filtered;}function retainCandidatesByTransportType(sdpOrMedia,allowedTransportTypes){var allowedLowerCase=allowedTransportTypes.map(s=>s.toLowerCase());return retainCandidates(sdpOrMedia,candidate=>allowedLowerCase.includes(candidate.transport.toLowerCase()));}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var commonjsGlobal$4=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$2(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$2={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$4,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5$2);var Bowser$2=/*@__PURE__*/getDefaultExportFromCjs$2(es5$2.exports);var BrowserName$2;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName$2||(BrowserName$2={}));var OSName$1;(function(OSName){OSName["WINDOWS"]="Windows";OSName["MAC"]="macOS";OSName["LINUX"]="Linux";})(OSName$1||(OSName$1={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$2.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$2.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$2.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$2.SAFARI;}static isWindows(){return this.browser.getOSName()===OSName$1.WINDOWS;}static isMac(){return this.browser.getOSName()===OSName$1.MAC;}static isLinux(){return this.browser.getOSName()===OSName$1.LINUX;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser$2.getParser(window.navigator.userAgent);var CapabilityState$2;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState$2||(CapabilityState$2={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return "a=jmp:".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return "a=jmp-stream-id-mode:".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line="a=jmp-source:".concat(this.source);if(this.csi){line+=" csi=".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp("^jmp-source:(".concat(ANY_NON_WS$1,") (?:csi=(").concat(ANY_NON_WS$1,"))"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine$1(videoContentMids));}}}function filterRecvOnlyMediaDescriptions(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(media=>{if(media instanceof ApplicationMediaDescription$1||media instanceof AvMediaDescription$1&&media.direction!=='recvonly'){filteredMids.push(media.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentType(mediaDescription,mediaContent){if(mediaContent===MediaContent.Slides){mediaDescription.addLine(new ContentLine$1(['slides']));}}function injectJmpAttributes(mediaDescription,csi,streamSignalingMode){if(!mediaDescription.otherLines.find(line=>line instanceof JmpLine)){mediaDescription.addLine(new JmpLine(['v1']));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpSourceLine)){mediaDescription.addLine(new JmpSourceLine(mediaDescription.mid,csi.toString()));}if(!mediaDescription.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mediaDescription.addLine(new JmpStreamIdModeLine(streamSignalingMode));}}function injectDummyCandidates(mediaDescription){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(options){this.streamIds=[];this.customCodecParameters=new Map();this.egressMungerOptions=options;}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecsByCodecName(mediaDescription,['h264','opus','rtx']);if(options.forceSoftwareEncoder){var isH264Cbp=codecInfo=>{var _a;if(((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())==='h264'){var profileLevelId=codecInfo.fmtParams.get('profile-level-id');return !!profileLevelId&&/^42[^0]/.test(profileLevelId);}return false;};if([...mediaDescription.codecs.values()].some(isH264Cbp)){retainCodecs(mediaDescription,codecInfo=>{var _a;return ((_a=codecInfo.name)===null||_a===void 0?void 0:_a.toLowerCase())!=='h264'||isH264Cbp(codecInfo);});}else {logger.log("No H.264 CBP present in m-line with MID ".concat(mediaDescription.mid,", so all H.264 codecs have been retained."));}}if(mediaDescription.codecs.size===0){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');if(!this.egressMungerOptions.doFullIce){injectDummyCandidates(mediaDescription);}if(mediaDescription.type==='video'){var ssrcGroup=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{mediaDescription.addLine(new SsrcLine$1(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}}}mungeRemoteDescription(mediaDescription){if(retainCandidatesByTransportType(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}mediaDescription.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref2=>{var[param,value]=_ref2;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}var events$1={exports:{}};var R$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1=R$1&&typeof R$1.apply==='function'?R$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1;if(R$1&&typeof R$1.ownKeys==='function'){ReflectOwnKeys$1=R$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$3(){EventEmitter$3.init.call(this);}events$1.exports=EventEmitter$3;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x
2877
2882
  EventEmitter$3.EventEmitter=EventEmitter$3;EventEmitter$3.prototype._events=undefined;EventEmitter$3.prototype._eventsCount=0;EventEmitter$3.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
2878
2883
  // added to it. This is a useful default which helps finding memory leaks.
2879
2884
  var defaultMaxListeners$1=10;function checkListener$1(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$3,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1=arg;}});EventEmitter$3.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows
@@ -6455,27 +6460,27 @@ function mungeRemoteSdp(config, sdp) {
6455
6460
  return parsedSdp.toString();
6456
6461
  }
6457
6462
 
6458
- var Event$1;
6459
- (function (Event) {
6460
- Event["ICE_GATHERING_STATE_CHANGED"] = "iceGatheringState:changed";
6461
- Event["PEER_CONNECTION_STATE_CHANGED"] = "peerConnectionState:changed";
6462
- Event["ICE_CONNECTION_STATE_CHANGED"] = "iceConnectionState:changed";
6463
- Event["REMOTE_TRACK_ADDED"] = "remoteTrack:added";
6464
- Event["ROAP_MESSAGE_TO_SEND"] = "roap:messageToSend";
6465
- Event["ROAP_STARTED"] = "roap:started";
6466
- Event["ROAP_FAILURE"] = "roap:failure";
6467
- Event["ROAP_DONE"] = "roap:done";
6468
- Event["DTMF_TONE_CHANGED"] = "dtmfTone:changed";
6469
- Event["ACTIVE_SPEAKERS_CHANGED"] = "activeSpeakers:changed";
6470
- Event["VIDEO_SOURCES_COUNT_CHANGED"] = "videoSourcesCount:changed";
6471
- Event["AUDIO_SOURCES_COUNT_CHANGED"] = "audioSourcesCount:changed";
6472
- Event["REMOTE_SDP_ANSWER_PROCESSED"] = "remoteSdpAnswer:processed";
6473
- Event["REMOTE_SDP_OFFER_PROCESSED"] = "remoteSdpOffer:processed";
6474
- Event["LOCAL_SDP_OFFER_GENERATED"] = "localSdpOffer:processed";
6475
- Event["LOCAL_SDP_ANSWER_GENERATED"] = "localSdpAnswer:processed";
6476
- Event["ICE_CANDIDATE"] = "iceCandidate";
6477
- Event["ICE_CANDIDATE_ERROR"] = "iceCandidate:error";
6478
- })(Event$1 || (Event$1 = {}));
6463
+ var MediaConnectionEventNames;
6464
+ (function (MediaConnectionEventNames) {
6465
+ MediaConnectionEventNames["ICE_GATHERING_STATE_CHANGED"] = "iceGatheringState:changed";
6466
+ MediaConnectionEventNames["PEER_CONNECTION_STATE_CHANGED"] = "peerConnectionState:changed";
6467
+ MediaConnectionEventNames["ICE_CONNECTION_STATE_CHANGED"] = "iceConnectionState:changed";
6468
+ MediaConnectionEventNames["REMOTE_TRACK_ADDED"] = "remoteTrack:added";
6469
+ MediaConnectionEventNames["ROAP_MESSAGE_TO_SEND"] = "roap:messageToSend";
6470
+ MediaConnectionEventNames["ROAP_STARTED"] = "roap:started";
6471
+ MediaConnectionEventNames["ROAP_FAILURE"] = "roap:failure";
6472
+ MediaConnectionEventNames["ROAP_DONE"] = "roap:done";
6473
+ MediaConnectionEventNames["DTMF_TONE_CHANGED"] = "dtmfTone:changed";
6474
+ MediaConnectionEventNames["ACTIVE_SPEAKERS_CHANGED"] = "activeSpeakers:changed";
6475
+ MediaConnectionEventNames["VIDEO_SOURCES_COUNT_CHANGED"] = "videoSourcesCount:changed";
6476
+ MediaConnectionEventNames["AUDIO_SOURCES_COUNT_CHANGED"] = "audioSourcesCount:changed";
6477
+ MediaConnectionEventNames["REMOTE_SDP_ANSWER_PROCESSED"] = "remoteSdpAnswer:processed";
6478
+ MediaConnectionEventNames["REMOTE_SDP_OFFER_PROCESSED"] = "remoteSdpOffer:processed";
6479
+ MediaConnectionEventNames["LOCAL_SDP_OFFER_GENERATED"] = "localSdpOffer:processed";
6480
+ MediaConnectionEventNames["LOCAL_SDP_ANSWER_GENERATED"] = "localSdpAnswer:processed";
6481
+ MediaConnectionEventNames["ICE_CANDIDATE"] = "iceCandidate";
6482
+ MediaConnectionEventNames["ICE_CANDIDATE_ERROR"] = "iceCandidate:error";
6483
+ })(MediaConnectionEventNames || (MediaConnectionEventNames = {}));
6479
6484
  var RemoteTrackType;
6480
6485
  (function (RemoteTrackType) {
6481
6486
  RemoteTrackType["AUDIO"] = "audio";
@@ -6495,8 +6500,8 @@ var ErrorType;
6495
6500
  ErrorType["TIMEOUT"] = "TIMEOUT";
6496
6501
  })(ErrorType || (ErrorType = {}));
6497
6502
 
6498
- function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6499
- function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6503
+ function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
6504
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6500
6505
  var localTrackTypes = [{
6501
6506
  type: 'audio',
6502
6507
  kind: 'audio'
@@ -6518,8 +6523,8 @@ class MediaConnection extends EventEmitter$5 {
6518
6523
  _defineProperty(this, "mediaDirection", void 0);
6519
6524
  _defineProperty(this, "remoteQualityLevel", void 0);
6520
6525
  this.config = mediaConnectionConfig;
6521
- this.mediaDirection = _objectSpread$3({}, options.direction);
6522
- this.localTracks = _objectSpread$3({}, options.localTracks);
6526
+ this.mediaDirection = _objectSpread$4({}, options.direction);
6527
+ this.localTracks = _objectSpread$4({}, options.localTracks);
6523
6528
  this.remoteQualityLevel = options.remoteQualityLevel;
6524
6529
  this.id = debugId || 'MediaConnection';
6525
6530
  this.transceivers = {};
@@ -6531,12 +6536,12 @@ class MediaConnection extends EventEmitter$5 {
6531
6536
  this.pc.oniceconnectionstatechange = this.onIceConnectionStateChange.bind(this);
6532
6537
  this.pc.onconnectionstatechange = this.onPeerConnectionStateChange.bind(this);
6533
6538
  this.pc.addEventListener('icecandidate', event => {
6534
- this.emit(Event$1.ICE_CANDIDATE, {
6539
+ this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {
6535
6540
  candidate: event.candidate
6536
6541
  });
6537
6542
  });
6538
6543
  this.pc.addEventListener('icecandidateerror', event => {
6539
- this.emit(Event$1.ICE_CANDIDATE_ERROR, {
6544
+ this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {
6540
6545
  error: event
6541
6546
  });
6542
6547
  });
@@ -6640,7 +6645,7 @@ class MediaConnection extends EventEmitter$5 {
6640
6645
  updateLocalTracks(tracks) {
6641
6646
  return this.updateTransceivers({
6642
6647
  localTracks: tracks,
6643
- direction: _objectSpread$3({}, this.mediaDirection)
6648
+ direction: _objectSpread$4({}, this.mediaDirection)
6644
6649
  });
6645
6650
  }
6646
6651
  updateDirection(direction) {
@@ -6746,7 +6751,7 @@ class MediaConnection extends EventEmitter$5 {
6746
6751
  }
6747
6752
  onToneChange(event) {
6748
6753
  this.log('onToneChange()', "emitting Event.DTMF_TONE_CHANGED with tone=\"".concat(event.tone, "\""));
6749
- this.emit(Event$1.DTMF_TONE_CHANGED, {
6754
+ this.emit(MediaConnectionEventNames.DTMF_TONE_CHANGED, {
6750
6755
  tone: event.tone
6751
6756
  });
6752
6757
  }
@@ -6790,21 +6795,21 @@ class MediaConnection extends EventEmitter$5 {
6790
6795
  switch (trackMediaID) {
6791
6796
  case MEDIA_ID.AUDIO_TRACK:
6792
6797
  this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=AUDIO');
6793
- this.emit(Event$1.REMOTE_TRACK_ADDED, {
6798
+ this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
6794
6799
  type: RemoteTrackType.AUDIO,
6795
6800
  track
6796
6801
  });
6797
6802
  break;
6798
6803
  case MEDIA_ID.VIDEO_TRACK:
6799
6804
  this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=VIDEO');
6800
- this.emit(Event$1.REMOTE_TRACK_ADDED, {
6805
+ this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
6801
6806
  type: RemoteTrackType.VIDEO,
6802
6807
  track
6803
6808
  });
6804
6809
  break;
6805
6810
  case MEDIA_ID.SHARE_TRACK:
6806
6811
  this.log('onTrack()', 'emitting Event.REMOTE_TRACK_ADDED with type=SCREENSHARE_VIDEO');
6807
- this.emit(Event$1.REMOTE_TRACK_ADDED, {
6812
+ this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, {
6808
6813
  type: RemoteTrackType.SCREENSHARE_VIDEO,
6809
6814
  track
6810
6815
  });
@@ -6829,13 +6834,13 @@ class MediaConnection extends EventEmitter$5 {
6829
6834
  }
6830
6835
  onPeerConnectionStateChange() {
6831
6836
  this.log('onPeerConnectionStateChange()', "callback called: peerConnectionState=".concat(this.pc.connectionState));
6832
- this.emit(Event$1.PEER_CONNECTION_STATE_CHANGED, {
6837
+ this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {
6833
6838
  state: this.pc.connectionState
6834
6839
  });
6835
6840
  }
6836
6841
  onIceConnectionStateChange() {
6837
6842
  this.log('onIceConnectionStateChange()', "callback called: iceConnectionState=".concat(this.pc.iceConnectionState));
6838
- this.emit(Event$1.ICE_CONNECTION_STATE_CHANGED, {
6843
+ this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {
6839
6844
  state: this.pc.iceConnectionState
6840
6845
  });
6841
6846
  }
@@ -6873,7 +6878,7 @@ class MediaConnection extends EventEmitter$5 {
6873
6878
  if (this.config.sdpMunging.h264MaxFs) {
6874
6879
  this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');
6875
6880
  }
6876
- return _objectSpread$3(_objectSpread$3({}, this.config.sdpMunging), {}, {
6881
+ return _objectSpread$4(_objectSpread$4({}, this.config.sdpMunging), {}, {
6877
6882
  h264MaxFs: maxFsValues[this.remoteQualityLevel]
6878
6883
  });
6879
6884
  }
@@ -6891,7 +6896,7 @@ class MediaConnection extends EventEmitter$5 {
6891
6896
  }).then(() => this.waitForIceCandidates()).then(() => {
6892
6897
  var _this$pc$localDescrip;
6893
6898
  var mungedSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip = this.pc.localDescription) === null || _this$pc$localDescrip === void 0 ? void 0 : _this$pc$localDescrip.sdp) || '');
6894
- this.emit(Event$1.LOCAL_SDP_OFFER_GENERATED);
6899
+ this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
6895
6900
  return {
6896
6901
  sdp: mungedSdp
6897
6902
  };
@@ -6915,7 +6920,7 @@ class MediaConnection extends EventEmitter$5 {
6915
6920
  return this.pc.setRemoteDescription(new window.RTCSessionDescription({
6916
6921
  type: 'offer',
6917
6922
  sdp: mungedRemoteSdp
6918
- })).then(() => this.emit(Event$1.REMOTE_SDP_OFFER_PROCESSED)).then(() => this.pc.createAnswer()).then(answer => {
6923
+ })).then(() => this.emit(MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED)).then(() => this.pc.createAnswer()).then(answer => {
6919
6924
  var mungedAnswer = {
6920
6925
  type: answer.type,
6921
6926
  sdp: mungeLocalSdpForBrowser(sdpMungingConfig, (answer === null || answer === void 0 ? void 0 : answer.sdp) || '')
@@ -6924,7 +6929,7 @@ class MediaConnection extends EventEmitter$5 {
6924
6929
  }).then(() => this.waitForIceCandidates()).then(() => {
6925
6930
  var _this$pc$localDescrip2;
6926
6931
  var mungedLocalSdp = mungeLocalSdp(sdpMungingConfig, ((_this$pc$localDescrip2 = this.pc.localDescription) === null || _this$pc$localDescrip2 === void 0 ? void 0 : _this$pc$localDescrip2.sdp) || '');
6927
- this.emit(Event$1.LOCAL_SDP_ANSWER_GENERATED);
6932
+ this.emit(MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);
6928
6933
  return {
6929
6934
  sdp: mungedLocalSdp
6930
6935
  };
@@ -6948,7 +6953,7 @@ class MediaConnection extends EventEmitter$5 {
6948
6953
  type: 'answer',
6949
6954
  sdp: mungedRemoteSdp
6950
6955
  })).then(result => {
6951
- this.emit(Event$1.REMOTE_SDP_ANSWER_PROCESSED);
6956
+ this.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
6952
6957
  return result;
6953
6958
  }).catch(error => {
6954
6959
  throw new SdpAnswerHandlingError("handleRemoteAnswer() failure: ".concat(error.message), {
@@ -7005,7 +7010,7 @@ class MediaConnection extends EventEmitter$5 {
7005
7010
  }
7006
7011
  this.pc.onicegatheringstatechange = () => {
7007
7012
  this.log('waitForIceCandidates()', "iceGatheringState changed to ".concat(this.pc.iceGatheringState));
7008
- this.emit(Event$1.ICE_GATHERING_STATE_CHANGED, {
7013
+ this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {
7009
7014
  state: this.pc.iceGatheringState
7010
7015
  });
7011
7016
  if (this.pc.iceGatheringState === 'complete') {
@@ -14419,8 +14424,8 @@ function createMachine(config, options) {
14419
14424
 
14420
14425
  var assign = assign$1;
14421
14426
 
14422
- function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14423
- function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14427
+ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14428
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14424
14429
  var WEB_TIEBREAKER_VALUE = 0xfffffffe;
14425
14430
  var MAX_RETRIES = 2;
14426
14431
  var DEFAULT_IS_OK_IN_TRANSACTION = true;
@@ -14460,13 +14465,13 @@ class Roap extends EventEmitter$5 {
14460
14465
  browserError: {
14461
14466
  onEntry: (context, event) => {
14462
14467
  this.error('FSM', "browserError state onEntry: context=".concat(JSON.stringify(context), ":"), event.data);
14463
- this.emit(Event$1.ROAP_FAILURE, event.data);
14468
+ this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);
14464
14469
  }
14465
14470
  },
14466
14471
  remoteError: {
14467
14472
  onEntry: (_, event) => {
14468
- this.log('FSM', 'remoteError state onEntry called, emitting Event.ROAP_FAILURE');
14469
- this.emit(Event$1.ROAP_FAILURE, event.data);
14473
+ this.log('FSM', 'remoteError state onEntry called, emitting MediaConnectionEventNames.ROAP_FAILURE');
14474
+ this.emit(MediaConnectionEventNames.ROAP_FAILURE, event.data);
14470
14475
  }
14471
14476
  },
14472
14477
  idle: {
@@ -14682,28 +14687,28 @@ class Roap extends EventEmitter$5 {
14682
14687
  handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)
14683
14688
  },
14684
14689
  actions: {
14685
- enqueueNewOfferCreation: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14690
+ enqueueNewOfferCreation: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14686
14691
  pendingLocalOffer: true
14687
14692
  })),
14688
- resetPendingLocalOffer: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14693
+ resetPendingLocalOffer: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14689
14694
  pendingLocalOffer: false
14690
14695
  })),
14691
- increaseSeq: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14696
+ increaseSeq: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14692
14697
  seq: context.seq + 1
14693
14698
  })),
14694
- updateSeq: assign((context, event) => _objectSpread$2(_objectSpread$2({}, context), {}, {
14699
+ updateSeq: assign((context, event) => _objectSpread$3(_objectSpread$3({}, context), {}, {
14695
14700
  seq: event.seq
14696
14701
  })),
14697
- increaseRetryCounter: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14702
+ increaseRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14698
14703
  retryCounter: context.retryCounter + 1
14699
14704
  })),
14700
- resetRetryCounter: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14705
+ resetRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14701
14706
  retryCounter: 0
14702
14707
  })),
14703
- setOfferRequestFlag: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14708
+ setOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14704
14709
  isHandlingOfferRequest: true
14705
14710
  })),
14706
- resetOfferRequestFlag: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14711
+ resetOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14707
14712
  isHandlingOfferRequest: false
14708
14713
  })),
14709
14714
  handleGlare: (_context, event) => {
@@ -14730,11 +14735,11 @@ class Roap extends EventEmitter$5 {
14730
14735
  rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),
14731
14736
  updateIsOkInTransaction: assign((context, event) => {
14732
14737
  var _event$headers;
14733
- return _objectSpread$2(_objectSpread$2({}, context), {}, {
14738
+ return _objectSpread$3(_objectSpread$3({}, context), {}, {
14734
14739
  isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))
14735
14740
  });
14736
14741
  }),
14737
- resetOkInTransaction: assign(context => _objectSpread$2(_objectSpread$2({}, context), {}, {
14742
+ resetOkInTransaction: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
14738
14743
  isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION
14739
14744
  }))
14740
14745
  },
@@ -14776,7 +14781,7 @@ class Roap extends EventEmitter$5 {
14776
14781
  }
14777
14782
  sendRoapOfferMessage(seq, sdp) {
14778
14783
  this.log('sendRoapOfferMessage', 'emitting ROAP OFFER');
14779
- this.emit(Event$1.ROAP_MESSAGE_TO_SEND, {
14784
+ this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
14780
14785
  roapMessage: {
14781
14786
  seq,
14782
14787
  messageType: 'OFFER',
@@ -14787,7 +14792,7 @@ class Roap extends EventEmitter$5 {
14787
14792
  }
14788
14793
  sendRoapOfferResponseMessage(seq, sdp) {
14789
14794
  this.log('sendRoapOfferResponseMessage', 'emitting ROAP OFFER RESPONSE');
14790
- this.emit(Event$1.ROAP_MESSAGE_TO_SEND, {
14795
+ this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
14791
14796
  roapMessage: {
14792
14797
  seq,
14793
14798
  messageType: 'OFFER_RESPONSE',
@@ -14797,7 +14802,7 @@ class Roap extends EventEmitter$5 {
14797
14802
  }
14798
14803
  sendRoapOkMessage(seq) {
14799
14804
  this.log('sendRoapOkMessage', 'emitting ROAP OK');
14800
- this.emit(Event$1.ROAP_MESSAGE_TO_SEND, {
14805
+ this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
14801
14806
  roapMessage: {
14802
14807
  seq,
14803
14808
  messageType: 'OK'
@@ -14806,7 +14811,7 @@ class Roap extends EventEmitter$5 {
14806
14811
  }
14807
14812
  sendRoapAnswerMessage(seq, sdp) {
14808
14813
  this.log('sendRoapAnswerMessage', 'emitting ROAP ANSWER');
14809
- this.emit(Event$1.ROAP_MESSAGE_TO_SEND, {
14814
+ this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
14810
14815
  roapMessage: {
14811
14816
  seq,
14812
14817
  messageType: 'ANSWER',
@@ -14816,11 +14821,11 @@ class Roap extends EventEmitter$5 {
14816
14821
  }
14817
14822
  sendDoneEvent() {
14818
14823
  this.log('sendDoneEvent', 'emitting ROAP DONE');
14819
- this.emit(Event$1.ROAP_DONE);
14824
+ this.emit(MediaConnectionEventNames.ROAP_DONE);
14820
14825
  }
14821
14826
  sendStartedEvent() {
14822
14827
  this.log('sendStartedEvent', 'emitting ROAP STARTED');
14823
- this.emit(Event$1.ROAP_STARTED);
14828
+ this.emit(MediaConnectionEventNames.ROAP_STARTED);
14824
14829
  }
14825
14830
  sendErrorMessage(seq, errorType) {
14826
14831
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -14828,7 +14833,7 @@ class Roap extends EventEmitter$5 {
14828
14833
  retryAfter
14829
14834
  } = options;
14830
14835
  this.log('sendErrorMessage', "emitting ROAP ERROR (".concat(errorType, ")"));
14831
- this.emit(Event$1.ROAP_MESSAGE_TO_SEND, {
14836
+ this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, {
14832
14837
  roapMessage: {
14833
14838
  seq,
14834
14839
  messageType: 'ERROR',
@@ -14956,8 +14961,8 @@ class Roap extends EventEmitter$5 {
14956
14961
  }
14957
14962
  }
14958
14963
 
14959
- function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14960
- function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14964
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14965
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14961
14966
  class RoapMediaConnection extends EventEmitter$5 {
14962
14967
  constructor(mediaConnectionConfig, options, debugId) {
14963
14968
  super();
@@ -14991,25 +14996,25 @@ class RoapMediaConnection extends EventEmitter$5 {
14991
14996
  }
14992
14997
  createMediaConnection(mediaConnectionConfig, options, debugId) {
14993
14998
  var mediaConnection = new MediaConnection(mediaConnectionConfig, options, debugId);
14994
- mediaConnection.on(Event$1.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));
14995
- this.forwardEvent(mediaConnection, Event$1.PEER_CONNECTION_STATE_CHANGED);
14996
- this.forwardEvent(mediaConnection, Event$1.ICE_CONNECTION_STATE_CHANGED);
14997
- this.forwardEvent(mediaConnection, Event$1.REMOTE_SDP_ANSWER_PROCESSED);
14998
- this.forwardEvent(mediaConnection, Event$1.REMOTE_SDP_OFFER_PROCESSED);
14999
- this.forwardEvent(mediaConnection, Event$1.LOCAL_SDP_ANSWER_GENERATED);
15000
- this.forwardEvent(mediaConnection, Event$1.LOCAL_SDP_OFFER_GENERATED);
15001
- this.forwardEvent(mediaConnection, Event$1.DTMF_TONE_CHANGED);
15002
- this.forwardEvent(mediaConnection, Event$1.ICE_GATHERING_STATE_CHANGED);
15003
- this.forwardEvent(mediaConnection, Event$1.ICE_CANDIDATE);
15004
- this.forwardEvent(mediaConnection, Event$1.ICE_CANDIDATE_ERROR);
14999
+ mediaConnection.on(MediaConnectionEventNames.REMOTE_TRACK_ADDED, this.onRemoteTrack.bind(this));
15000
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED);
15001
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED);
15002
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
15003
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.REMOTE_SDP_OFFER_PROCESSED);
15004
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED);
15005
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
15006
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.DTMF_TONE_CHANGED);
15007
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED);
15008
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE);
15009
+ this.forwardEvent(mediaConnection, MediaConnectionEventNames.ICE_CANDIDATE_ERROR);
15005
15010
  return mediaConnection;
15006
15011
  }
15007
15012
  createRoap(debugId, seq) {
15008
15013
  var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);
15009
- roap.on(Event$1.ROAP_MESSAGE_TO_SEND, event => this.emit(Event$1.ROAP_MESSAGE_TO_SEND, event));
15010
- roap.on(Event$1.ROAP_STARTED, () => this.emit(Event$1.ROAP_STARTED));
15011
- roap.on(Event$1.ROAP_DONE, () => this.emit(Event$1.ROAP_DONE));
15012
- roap.on(Event$1.ROAP_FAILURE, error => this.emit(Event$1.ROAP_FAILURE, error));
15014
+ roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));
15015
+ roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));
15016
+ roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));
15017
+ roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));
15013
15018
  return roap;
15014
15019
  }
15015
15020
  initiateOffer() {
@@ -15038,7 +15043,7 @@ class RoapMediaConnection extends EventEmitter$5 {
15038
15043
  reconnect(iceServers) {
15039
15044
  var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15040
15045
  this.log('reconnect()', "iceServers: ".concat(JSON.stringify(iceServers)));
15041
- var config = _objectSpread$1(_objectSpread$1({}, this.mediaConnection.getConfig()), {}, {
15046
+ var config = _objectSpread$2(_objectSpread$2({}, this.mediaConnection.getConfig()), {}, {
15042
15047
  iceServers
15043
15048
  });
15044
15049
  var options = this.mediaConnection.getSendReceiveOptions();
@@ -15126,7 +15131,7 @@ class RoapMediaConnection extends EventEmitter$5 {
15126
15131
  this.roap.roapMessageReceived(roapMessage);
15127
15132
  }
15128
15133
  onRemoteTrack(event) {
15129
- this.emit(Event$1.REMOTE_TRACK_ADDED, event);
15134
+ this.emit(MediaConnectionEventNames.REMOTE_TRACK_ADDED, event);
15130
15135
  }
15131
15136
  createLocalOffer() {
15132
15137
  return this.mediaConnection.createLocalOffer();
@@ -15139,9 +15144,9 @@ class RoapMediaConnection extends EventEmitter$5 {
15139
15144
  }
15140
15145
  }
15141
15146
 
15142
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15143
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15144
- class MultistreamRoapMediaConnection extends EventEmitter$6 {
15147
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15148
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15149
+ class MultistreamRoapMediaConnection extends EventEmitter$5 {
15145
15150
  constructor(mediaConnectionConfig, debugId) {
15146
15151
  var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
15147
15152
  var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
@@ -15171,28 +15176,28 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15171
15176
  }
15172
15177
  createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
15173
15178
  this.log('createMultistreamConnection()', 'called');
15174
- var multistreamConnection = new MultistreamConnection(_objectSpread({}, mediaConnectionConfig));
15179
+ var multistreamConnection = new MultistreamConnection(_objectSpread$1({}, mediaConnectionConfig));
15175
15180
  multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
15176
- this.emit(Event$1.ACTIVE_SPEAKERS_CHANGED, csis);
15181
+ this.emit(MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED, csis);
15177
15182
  });
15178
15183
  multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
15179
- this.emit(Event$1.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
15184
+ this.emit(MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
15180
15185
  });
15181
15186
  multistreamConnection.on(MultistreamConnectionEventNames.VideoSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
15182
- this.emit(Event$1.VIDEO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
15187
+ this.emit(MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
15183
15188
  });
15184
15189
  multistreamConnection.on(MultistreamConnectionEventNames.PeerConnectionStateUpdate, state => {
15185
- this.emit(Event$1.PEER_CONNECTION_STATE_CHANGED, {
15190
+ this.emit(MediaConnectionEventNames.PEER_CONNECTION_STATE_CHANGED, {
15186
15191
  state
15187
15192
  });
15188
15193
  });
15189
15194
  multistreamConnection.on(MultistreamConnectionEventNames.IceConnectionStateUpdate, state => {
15190
- this.emit(Event$1.ICE_CONNECTION_STATE_CHANGED, {
15195
+ this.emit(MediaConnectionEventNames.ICE_CONNECTION_STATE_CHANGED, {
15191
15196
  state
15192
15197
  });
15193
15198
  });
15194
15199
  multistreamConnection.on(MultistreamConnectionEventNames.IceGatheringStateUpdate, state => {
15195
- this.emit(Event$1.ICE_GATHERING_STATE_CHANGED, {
15200
+ this.emit(MediaConnectionEventNames.ICE_GATHERING_STATE_CHANGED, {
15196
15201
  state
15197
15202
  });
15198
15203
  });
@@ -15200,12 +15205,12 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15200
15205
  this.onNegotiationNeeded();
15201
15206
  });
15202
15207
  multistreamConnection.on(MultistreamConnectionEventNames.IceCandidate, event => {
15203
- this.emit(Event$1.ICE_CANDIDATE, {
15208
+ this.emit(MediaConnectionEventNames.ICE_CANDIDATE, {
15204
15209
  candidate: event.candidate
15205
15210
  });
15206
15211
  });
15207
15212
  multistreamConnection.on(MultistreamConnectionEventNames.IceCandidateError, event => {
15208
- this.emit(Event$1.ICE_CANDIDATE_ERROR, {
15213
+ this.emit(MediaConnectionEventNames.ICE_CANDIDATE_ERROR, {
15209
15214
  error: event
15210
15215
  });
15211
15216
  });
@@ -15214,10 +15219,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15214
15219
  }
15215
15220
  createRoap(debugId, seq) {
15216
15221
  var roap = new Roap(this.createLocalOffer.bind(this), this.handleRemoteOffer.bind(this), this.handleRemoteAnswer.bind(this), debugId, seq);
15217
- roap.on(Event$1.ROAP_MESSAGE_TO_SEND, event => this.emit(Event$1.ROAP_MESSAGE_TO_SEND, event));
15218
- roap.on(Event$1.ROAP_STARTED, () => this.emit(Event$1.ROAP_STARTED));
15219
- roap.on(Event$1.ROAP_DONE, () => this.emit(Event$1.ROAP_DONE));
15220
- roap.on(Event$1.ROAP_FAILURE, error => this.emit(Event$1.ROAP_FAILURE, error));
15222
+ roap.on(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event => this.emit(MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, event));
15223
+ roap.on(MediaConnectionEventNames.ROAP_STARTED, () => this.emit(MediaConnectionEventNames.ROAP_STARTED));
15224
+ roap.on(MediaConnectionEventNames.ROAP_DONE, () => this.emit(MediaConnectionEventNames.ROAP_DONE));
15225
+ roap.on(MediaConnectionEventNames.ROAP_FAILURE, error => this.emit(MediaConnectionEventNames.ROAP_FAILURE, error));
15221
15226
  return roap;
15222
15227
  }
15223
15228
  onNegotiationNeeded() {
@@ -15314,7 +15319,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15314
15319
  this.log('createLocalOffer()', 'calling this.multistreamConnection.createOffer');
15315
15320
  return this.multistreamConnection.createOffer().then(result => {
15316
15321
  if (result.sdp) {
15317
- this.emit(Event$1.LOCAL_SDP_OFFER_GENERATED);
15322
+ this.emit(MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED);
15318
15323
  return {
15319
15324
  sdp: result.sdp
15320
15325
  };
@@ -15336,7 +15341,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15336
15341
  this.log('handleRemoteAnswer()', 'calling this.multistreamConnection.setAnswer');
15337
15342
  return this.multistreamConnection.setAnswer(mungedSdp).then(result => {
15338
15343
  this.log('handleRemoteAnswer()', 'this.multistreamConnection.setAnswer resolved');
15339
- this.emit(Event$1.REMOTE_SDP_ANSWER_PROCESSED);
15344
+ this.emit(MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED);
15340
15345
  return result;
15341
15346
  }).catch(error => {
15342
15347
  this.log('handleRemoteAnswer()', "this.multistreamConnection.setAnswer failed");
@@ -15354,6 +15359,2773 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15354
15359
 
15355
15360
  var Errors = Error$1;
15356
15361
 
15362
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
15363
+ function getDefaultExportFromCjs(x) {
15364
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
15365
+ }
15366
+ var es5 = {
15367
+ exports: {}
15368
+ };
15369
+ (function (module, exports) {
15370
+ !function (e, t) {
15371
+ module.exports = t();
15372
+ }(commonjsGlobal, function () {
15373
+ return function (e) {
15374
+ var t = {};
15375
+ function r(n) {
15376
+ if (t[n]) return t[n].exports;
15377
+ var i = t[n] = {
15378
+ i: n,
15379
+ l: !1,
15380
+ exports: {}
15381
+ };
15382
+ return e[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports;
15383
+ }
15384
+ return r.m = e, r.c = t, r.d = function (e, t, n) {
15385
+ r.o(e, t) || Object.defineProperty(e, t, {
15386
+ enumerable: !0,
15387
+ get: n
15388
+ });
15389
+ }, r.r = function (e) {
15390
+ "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
15391
+ value: "Module"
15392
+ }), Object.defineProperty(e, "__esModule", {
15393
+ value: !0
15394
+ });
15395
+ }, r.t = function (e, t) {
15396
+ if (1 & t && (e = r(e)), 8 & t) return e;
15397
+ if (4 & t && "object" == typeof e && e && e.__esModule) return e;
15398
+ var n = Object.create(null);
15399
+ if (r.r(n), Object.defineProperty(n, "default", {
15400
+ enumerable: !0,
15401
+ value: e
15402
+ }), 2 & t && "string" != typeof e) for (var i in e) {
15403
+ r.d(n, i, function (t) {
15404
+ return e[t];
15405
+ }.bind(null, i));
15406
+ }
15407
+ return n;
15408
+ }, r.n = function (e) {
15409
+ var t = e && e.__esModule ? function () {
15410
+ return e.default;
15411
+ } : function () {
15412
+ return e;
15413
+ };
15414
+ return r.d(t, "a", t), t;
15415
+ }, r.o = function (e, t) {
15416
+ return Object.prototype.hasOwnProperty.call(e, t);
15417
+ }, r.p = "", r(r.s = 90);
15418
+ }({
15419
+ 17: function _(e, t, r) {
15420
+ t.__esModule = !0, t.default = void 0;
15421
+ var n = r(18),
15422
+ i = function () {
15423
+ function e() {}
15424
+ return e.getFirstMatch = function (e, t) {
15425
+ var r = t.match(e);
15426
+ return r && r.length > 0 && r[1] || "";
15427
+ }, e.getSecondMatch = function (e, t) {
15428
+ var r = t.match(e);
15429
+ return r && r.length > 1 && r[2] || "";
15430
+ }, e.matchAndReturnConst = function (e, t, r) {
15431
+ if (e.test(t)) return r;
15432
+ }, e.getWindowsVersionName = function (e) {
15433
+ switch (e) {
15434
+ case "NT":
15435
+ return "NT";
15436
+ case "XP":
15437
+ return "XP";
15438
+ case "NT 5.0":
15439
+ return "2000";
15440
+ case "NT 5.1":
15441
+ return "XP";
15442
+ case "NT 5.2":
15443
+ return "2003";
15444
+ case "NT 6.0":
15445
+ return "Vista";
15446
+ case "NT 6.1":
15447
+ return "7";
15448
+ case "NT 6.2":
15449
+ return "8";
15450
+ case "NT 6.3":
15451
+ return "8.1";
15452
+ case "NT 10.0":
15453
+ return "10";
15454
+ default:
15455
+ return;
15456
+ }
15457
+ }, e.getMacOSVersionName = function (e) {
15458
+ var t = e.split(".").splice(0, 2).map(function (e) {
15459
+ return parseInt(e, 10) || 0;
15460
+ });
15461
+ if (t.push(0), 10 === t[0]) switch (t[1]) {
15462
+ case 5:
15463
+ return "Leopard";
15464
+ case 6:
15465
+ return "Snow Leopard";
15466
+ case 7:
15467
+ return "Lion";
15468
+ case 8:
15469
+ return "Mountain Lion";
15470
+ case 9:
15471
+ return "Mavericks";
15472
+ case 10:
15473
+ return "Yosemite";
15474
+ case 11:
15475
+ return "El Capitan";
15476
+ case 12:
15477
+ return "Sierra";
15478
+ case 13:
15479
+ return "High Sierra";
15480
+ case 14:
15481
+ return "Mojave";
15482
+ case 15:
15483
+ return "Catalina";
15484
+ default:
15485
+ return;
15486
+ }
15487
+ }, e.getAndroidVersionName = function (e) {
15488
+ var t = e.split(".").splice(0, 2).map(function (e) {
15489
+ return parseInt(e, 10) || 0;
15490
+ });
15491
+ if (t.push(0), !(1 === t[0] && t[1] < 5)) return 1 === t[0] && t[1] < 6 ? "Cupcake" : 1 === t[0] && t[1] >= 6 ? "Donut" : 2 === t[0] && t[1] < 2 ? "Eclair" : 2 === t[0] && 2 === t[1] ? "Froyo" : 2 === t[0] && t[1] > 2 ? "Gingerbread" : 3 === t[0] ? "Honeycomb" : 4 === t[0] && t[1] < 1 ? "Ice Cream Sandwich" : 4 === t[0] && t[1] < 4 ? "Jelly Bean" : 4 === t[0] && t[1] >= 4 ? "KitKat" : 5 === t[0] ? "Lollipop" : 6 === t[0] ? "Marshmallow" : 7 === t[0] ? "Nougat" : 8 === t[0] ? "Oreo" : 9 === t[0] ? "Pie" : void 0;
15492
+ }, e.getVersionPrecision = function (e) {
15493
+ return e.split(".").length;
15494
+ }, e.compareVersions = function (t, r, n) {
15495
+ void 0 === n && (n = !1);
15496
+ var i = e.getVersionPrecision(t),
15497
+ s = e.getVersionPrecision(r),
15498
+ a = Math.max(i, s),
15499
+ o = 0,
15500
+ u = e.map([t, r], function (t) {
15501
+ var r = a - e.getVersionPrecision(t),
15502
+ n = t + new Array(r + 1).join(".0");
15503
+ return e.map(n.split("."), function (e) {
15504
+ return new Array(20 - e.length).join("0") + e;
15505
+ }).reverse();
15506
+ });
15507
+ for (n && (o = a - Math.min(i, s)), a -= 1; a >= o;) {
15508
+ if (u[0][a] > u[1][a]) return 1;
15509
+ if (u[0][a] === u[1][a]) {
15510
+ if (a === o) return 0;
15511
+ a -= 1;
15512
+ } else if (u[0][a] < u[1][a]) return -1;
15513
+ }
15514
+ }, e.map = function (e, t) {
15515
+ var r,
15516
+ n = [];
15517
+ if (Array.prototype.map) return Array.prototype.map.call(e, t);
15518
+ for (r = 0; r < e.length; r += 1) {
15519
+ n.push(t(e[r]));
15520
+ }
15521
+ return n;
15522
+ }, e.find = function (e, t) {
15523
+ var r, n;
15524
+ if (Array.prototype.find) return Array.prototype.find.call(e, t);
15525
+ for (r = 0, n = e.length; r < n; r += 1) {
15526
+ var i = e[r];
15527
+ if (t(i, r)) return i;
15528
+ }
15529
+ }, e.assign = function (e) {
15530
+ for (var t, r, n = e, i = arguments.length, s = new Array(i > 1 ? i - 1 : 0), a = 1; a < i; a++) {
15531
+ s[a - 1] = arguments[a];
15532
+ }
15533
+ if (Object.assign) return Object.assign.apply(Object, [e].concat(s));
15534
+ var o = function o() {
15535
+ var e = s[t];
15536
+ "object" == typeof e && null !== e && Object.keys(e).forEach(function (t) {
15537
+ n[t] = e[t];
15538
+ });
15539
+ };
15540
+ for (t = 0, r = s.length; t < r; t += 1) {
15541
+ o();
15542
+ }
15543
+ return e;
15544
+ }, e.getBrowserAlias = function (e) {
15545
+ return n.BROWSER_ALIASES_MAP[e];
15546
+ }, e.getBrowserTypeByAlias = function (e) {
15547
+ return n.BROWSER_MAP[e] || "";
15548
+ }, e;
15549
+ }();
15550
+ t.default = i, e.exports = t.default;
15551
+ },
15552
+ 18: function _(e, t, r) {
15553
+ t.__esModule = !0, t.ENGINE_MAP = t.OS_MAP = t.PLATFORMS_MAP = t.BROWSER_MAP = t.BROWSER_ALIASES_MAP = void 0;
15554
+ t.BROWSER_ALIASES_MAP = {
15555
+ "Amazon Silk": "amazon_silk",
15556
+ "Android Browser": "android",
15557
+ Bada: "bada",
15558
+ BlackBerry: "blackberry",
15559
+ Chrome: "chrome",
15560
+ Chromium: "chromium",
15561
+ Electron: "electron",
15562
+ Epiphany: "epiphany",
15563
+ Firefox: "firefox",
15564
+ Focus: "focus",
15565
+ Generic: "generic",
15566
+ "Google Search": "google_search",
15567
+ Googlebot: "googlebot",
15568
+ "Internet Explorer": "ie",
15569
+ "K-Meleon": "k_meleon",
15570
+ Maxthon: "maxthon",
15571
+ "Microsoft Edge": "edge",
15572
+ "MZ Browser": "mz",
15573
+ "NAVER Whale Browser": "naver",
15574
+ Opera: "opera",
15575
+ "Opera Coast": "opera_coast",
15576
+ PhantomJS: "phantomjs",
15577
+ Puffin: "puffin",
15578
+ QupZilla: "qupzilla",
15579
+ QQ: "qq",
15580
+ QQLite: "qqlite",
15581
+ Safari: "safari",
15582
+ Sailfish: "sailfish",
15583
+ "Samsung Internet for Android": "samsung_internet",
15584
+ SeaMonkey: "seamonkey",
15585
+ Sleipnir: "sleipnir",
15586
+ Swing: "swing",
15587
+ Tizen: "tizen",
15588
+ "UC Browser": "uc",
15589
+ Vivaldi: "vivaldi",
15590
+ "WebOS Browser": "webos",
15591
+ WeChat: "wechat",
15592
+ "Yandex Browser": "yandex",
15593
+ Roku: "roku"
15594
+ };
15595
+ t.BROWSER_MAP = {
15596
+ amazon_silk: "Amazon Silk",
15597
+ android: "Android Browser",
15598
+ bada: "Bada",
15599
+ blackberry: "BlackBerry",
15600
+ chrome: "Chrome",
15601
+ chromium: "Chromium",
15602
+ electron: "Electron",
15603
+ epiphany: "Epiphany",
15604
+ firefox: "Firefox",
15605
+ focus: "Focus",
15606
+ generic: "Generic",
15607
+ googlebot: "Googlebot",
15608
+ google_search: "Google Search",
15609
+ ie: "Internet Explorer",
15610
+ k_meleon: "K-Meleon",
15611
+ maxthon: "Maxthon",
15612
+ edge: "Microsoft Edge",
15613
+ mz: "MZ Browser",
15614
+ naver: "NAVER Whale Browser",
15615
+ opera: "Opera",
15616
+ opera_coast: "Opera Coast",
15617
+ phantomjs: "PhantomJS",
15618
+ puffin: "Puffin",
15619
+ qupzilla: "QupZilla",
15620
+ qq: "QQ Browser",
15621
+ qqlite: "QQ Browser Lite",
15622
+ safari: "Safari",
15623
+ sailfish: "Sailfish",
15624
+ samsung_internet: "Samsung Internet for Android",
15625
+ seamonkey: "SeaMonkey",
15626
+ sleipnir: "Sleipnir",
15627
+ swing: "Swing",
15628
+ tizen: "Tizen",
15629
+ uc: "UC Browser",
15630
+ vivaldi: "Vivaldi",
15631
+ webos: "WebOS Browser",
15632
+ wechat: "WeChat",
15633
+ yandex: "Yandex Browser"
15634
+ };
15635
+ t.PLATFORMS_MAP = {
15636
+ tablet: "tablet",
15637
+ mobile: "mobile",
15638
+ desktop: "desktop",
15639
+ tv: "tv"
15640
+ };
15641
+ t.OS_MAP = {
15642
+ WindowsPhone: "Windows Phone",
15643
+ Windows: "Windows",
15644
+ MacOS: "macOS",
15645
+ iOS: "iOS",
15646
+ Android: "Android",
15647
+ WebOS: "WebOS",
15648
+ BlackBerry: "BlackBerry",
15649
+ Bada: "Bada",
15650
+ Tizen: "Tizen",
15651
+ Linux: "Linux",
15652
+ ChromeOS: "Chrome OS",
15653
+ PlayStation4: "PlayStation 4",
15654
+ Roku: "Roku"
15655
+ };
15656
+ t.ENGINE_MAP = {
15657
+ EdgeHTML: "EdgeHTML",
15658
+ Blink: "Blink",
15659
+ Trident: "Trident",
15660
+ Presto: "Presto",
15661
+ Gecko: "Gecko",
15662
+ WebKit: "WebKit"
15663
+ };
15664
+ },
15665
+ 90: function _(e, t, r) {
15666
+ t.__esModule = !0, t.default = void 0;
15667
+ var n,
15668
+ i = (n = r(91)) && n.__esModule ? n : {
15669
+ default: n
15670
+ },
15671
+ s = r(18);
15672
+ function a(e, t) {
15673
+ for (var r = 0; r < t.length; r++) {
15674
+ var n = t[r];
15675
+ n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);
15676
+ }
15677
+ }
15678
+ var o = function () {
15679
+ function e() {}
15680
+ var t, r, n;
15681
+ return e.getParser = function (e, t) {
15682
+ if (void 0 === t && (t = !1), "string" != typeof e) throw new Error("UserAgent should be a string");
15683
+ return new i.default(e, t);
15684
+ }, e.parse = function (e) {
15685
+ return new i.default(e).getResult();
15686
+ }, t = e, n = [{
15687
+ key: "BROWSER_MAP",
15688
+ get: function get() {
15689
+ return s.BROWSER_MAP;
15690
+ }
15691
+ }, {
15692
+ key: "ENGINE_MAP",
15693
+ get: function get() {
15694
+ return s.ENGINE_MAP;
15695
+ }
15696
+ }, {
15697
+ key: "OS_MAP",
15698
+ get: function get() {
15699
+ return s.OS_MAP;
15700
+ }
15701
+ }, {
15702
+ key: "PLATFORMS_MAP",
15703
+ get: function get() {
15704
+ return s.PLATFORMS_MAP;
15705
+ }
15706
+ }], (r = null) && a(t.prototype, r), n && a(t, n), e;
15707
+ }();
15708
+ t.default = o, e.exports = t.default;
15709
+ },
15710
+ 91: function _(e, t, r) {
15711
+ t.__esModule = !0, t.default = void 0;
15712
+ var n = u(r(92)),
15713
+ i = u(r(93)),
15714
+ s = u(r(94)),
15715
+ a = u(r(95)),
15716
+ o = u(r(17));
15717
+ function u(e) {
15718
+ return e && e.__esModule ? e : {
15719
+ default: e
15720
+ };
15721
+ }
15722
+ var d = function () {
15723
+ function e(e, t) {
15724
+ if (void 0 === t && (t = !1), null == e || "" === e) throw new Error("UserAgent parameter can't be empty");
15725
+ this._ua = e, this.parsedResult = {}, !0 !== t && this.parse();
15726
+ }
15727
+ var t = e.prototype;
15728
+ return t.getUA = function () {
15729
+ return this._ua;
15730
+ }, t.test = function (e) {
15731
+ return e.test(this._ua);
15732
+ }, t.parseBrowser = function () {
15733
+ var e = this;
15734
+ this.parsedResult.browser = {};
15735
+ var t = o.default.find(n.default, function (t) {
15736
+ if ("function" == typeof t.test) return t.test(e);
15737
+ if (t.test instanceof Array) return t.test.some(function (t) {
15738
+ return e.test(t);
15739
+ });
15740
+ throw new Error("Browser's test function is not valid");
15741
+ });
15742
+ return t && (this.parsedResult.browser = t.describe(this.getUA())), this.parsedResult.browser;
15743
+ }, t.getBrowser = function () {
15744
+ return this.parsedResult.browser ? this.parsedResult.browser : this.parseBrowser();
15745
+ }, t.getBrowserName = function (e) {
15746
+ return e ? String(this.getBrowser().name).toLowerCase() || "" : this.getBrowser().name || "";
15747
+ }, t.getBrowserVersion = function () {
15748
+ return this.getBrowser().version;
15749
+ }, t.getOS = function () {
15750
+ return this.parsedResult.os ? this.parsedResult.os : this.parseOS();
15751
+ }, t.parseOS = function () {
15752
+ var e = this;
15753
+ this.parsedResult.os = {};
15754
+ var t = o.default.find(i.default, function (t) {
15755
+ if ("function" == typeof t.test) return t.test(e);
15756
+ if (t.test instanceof Array) return t.test.some(function (t) {
15757
+ return e.test(t);
15758
+ });
15759
+ throw new Error("Browser's test function is not valid");
15760
+ });
15761
+ return t && (this.parsedResult.os = t.describe(this.getUA())), this.parsedResult.os;
15762
+ }, t.getOSName = function (e) {
15763
+ var t = this.getOS().name;
15764
+ return e ? String(t).toLowerCase() || "" : t || "";
15765
+ }, t.getOSVersion = function () {
15766
+ return this.getOS().version;
15767
+ }, t.getPlatform = function () {
15768
+ return this.parsedResult.platform ? this.parsedResult.platform : this.parsePlatform();
15769
+ }, t.getPlatformType = function (e) {
15770
+ void 0 === e && (e = !1);
15771
+ var t = this.getPlatform().type;
15772
+ return e ? String(t).toLowerCase() || "" : t || "";
15773
+ }, t.parsePlatform = function () {
15774
+ var e = this;
15775
+ this.parsedResult.platform = {};
15776
+ var t = o.default.find(s.default, function (t) {
15777
+ if ("function" == typeof t.test) return t.test(e);
15778
+ if (t.test instanceof Array) return t.test.some(function (t) {
15779
+ return e.test(t);
15780
+ });
15781
+ throw new Error("Browser's test function is not valid");
15782
+ });
15783
+ return t && (this.parsedResult.platform = t.describe(this.getUA())), this.parsedResult.platform;
15784
+ }, t.getEngine = function () {
15785
+ return this.parsedResult.engine ? this.parsedResult.engine : this.parseEngine();
15786
+ }, t.getEngineName = function (e) {
15787
+ return e ? String(this.getEngine().name).toLowerCase() || "" : this.getEngine().name || "";
15788
+ }, t.parseEngine = function () {
15789
+ var e = this;
15790
+ this.parsedResult.engine = {};
15791
+ var t = o.default.find(a.default, function (t) {
15792
+ if ("function" == typeof t.test) return t.test(e);
15793
+ if (t.test instanceof Array) return t.test.some(function (t) {
15794
+ return e.test(t);
15795
+ });
15796
+ throw new Error("Browser's test function is not valid");
15797
+ });
15798
+ return t && (this.parsedResult.engine = t.describe(this.getUA())), this.parsedResult.engine;
15799
+ }, t.parse = function () {
15800
+ return this.parseBrowser(), this.parseOS(), this.parsePlatform(), this.parseEngine(), this;
15801
+ }, t.getResult = function () {
15802
+ return o.default.assign({}, this.parsedResult);
15803
+ }, t.satisfies = function (e) {
15804
+ var t = this,
15805
+ r = {},
15806
+ n = 0,
15807
+ i = {},
15808
+ s = 0;
15809
+ if (Object.keys(e).forEach(function (t) {
15810
+ var a = e[t];
15811
+ "string" == typeof a ? (i[t] = a, s += 1) : "object" == typeof a && (r[t] = a, n += 1);
15812
+ }), n > 0) {
15813
+ var a = Object.keys(r),
15814
+ u = o.default.find(a, function (e) {
15815
+ return t.isOS(e);
15816
+ });
15817
+ if (u) {
15818
+ var d = this.satisfies(r[u]);
15819
+ if (void 0 !== d) return d;
15820
+ }
15821
+ var c = o.default.find(a, function (e) {
15822
+ return t.isPlatform(e);
15823
+ });
15824
+ if (c) {
15825
+ var f = this.satisfies(r[c]);
15826
+ if (void 0 !== f) return f;
15827
+ }
15828
+ }
15829
+ if (s > 0) {
15830
+ var l = Object.keys(i),
15831
+ h = o.default.find(l, function (e) {
15832
+ return t.isBrowser(e, !0);
15833
+ });
15834
+ if (void 0 !== h) return this.compareVersion(i[h]);
15835
+ }
15836
+ }, t.isBrowser = function (e, t) {
15837
+ void 0 === t && (t = !1);
15838
+ var r = this.getBrowserName().toLowerCase(),
15839
+ n = e.toLowerCase(),
15840
+ i = o.default.getBrowserTypeByAlias(n);
15841
+ return t && i && (n = i.toLowerCase()), n === r;
15842
+ }, t.compareVersion = function (e) {
15843
+ var t = [0],
15844
+ r = e,
15845
+ n = !1,
15846
+ i = this.getBrowserVersion();
15847
+ if ("string" == typeof i) return ">" === e[0] || "<" === e[0] ? (r = e.substr(1), "=" === e[1] ? (n = !0, r = e.substr(2)) : t = [], ">" === e[0] ? t.push(1) : t.push(-1)) : "=" === e[0] ? r = e.substr(1) : "~" === e[0] && (n = !0, r = e.substr(1)), t.indexOf(o.default.compareVersions(i, r, n)) > -1;
15848
+ }, t.isOS = function (e) {
15849
+ return this.getOSName(!0) === String(e).toLowerCase();
15850
+ }, t.isPlatform = function (e) {
15851
+ return this.getPlatformType(!0) === String(e).toLowerCase();
15852
+ }, t.isEngine = function (e) {
15853
+ return this.getEngineName(!0) === String(e).toLowerCase();
15854
+ }, t.is = function (e, t) {
15855
+ return void 0 === t && (t = !1), this.isBrowser(e, t) || this.isOS(e) || this.isPlatform(e);
15856
+ }, t.some = function (e) {
15857
+ var t = this;
15858
+ return void 0 === e && (e = []), e.some(function (e) {
15859
+ return t.is(e);
15860
+ });
15861
+ }, e;
15862
+ }();
15863
+ t.default = d, e.exports = t.default;
15864
+ },
15865
+ 92: function _(e, t, r) {
15866
+ t.__esModule = !0, t.default = void 0;
15867
+ var n,
15868
+ i = (n = r(17)) && n.__esModule ? n : {
15869
+ default: n
15870
+ };
15871
+ var s = /version\/(\d+(\.?_?\d+)+)/i,
15872
+ a = [{
15873
+ test: [/googlebot/i],
15874
+ describe: function describe(e) {
15875
+ var t = {
15876
+ name: "Googlebot"
15877
+ },
15878
+ r = i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, e) || i.default.getFirstMatch(s, e);
15879
+ return r && (t.version = r), t;
15880
+ }
15881
+ }, {
15882
+ test: [/opera/i],
15883
+ describe: function describe(e) {
15884
+ var t = {
15885
+ name: "Opera"
15886
+ },
15887
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, e);
15888
+ return r && (t.version = r), t;
15889
+ }
15890
+ }, {
15891
+ test: [/opr\/|opios/i],
15892
+ describe: function describe(e) {
15893
+ var t = {
15894
+ name: "Opera"
15895
+ },
15896
+ r = i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, e) || i.default.getFirstMatch(s, e);
15897
+ return r && (t.version = r), t;
15898
+ }
15899
+ }, {
15900
+ test: [/SamsungBrowser/i],
15901
+ describe: function describe(e) {
15902
+ var t = {
15903
+ name: "Samsung Internet for Android"
15904
+ },
15905
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
15906
+ return r && (t.version = r), t;
15907
+ }
15908
+ }, {
15909
+ test: [/Whale/i],
15910
+ describe: function describe(e) {
15911
+ var t = {
15912
+ name: "NAVER Whale Browser"
15913
+ },
15914
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, e);
15915
+ return r && (t.version = r), t;
15916
+ }
15917
+ }, {
15918
+ test: [/MZBrowser/i],
15919
+ describe: function describe(e) {
15920
+ var t = {
15921
+ name: "MZ Browser"
15922
+ },
15923
+ r = i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
15924
+ return r && (t.version = r), t;
15925
+ }
15926
+ }, {
15927
+ test: [/focus/i],
15928
+ describe: function describe(e) {
15929
+ var t = {
15930
+ name: "Focus"
15931
+ },
15932
+ r = i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
15933
+ return r && (t.version = r), t;
15934
+ }
15935
+ }, {
15936
+ test: [/swing/i],
15937
+ describe: function describe(e) {
15938
+ var t = {
15939
+ name: "Swing"
15940
+ },
15941
+ r = i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, e) || i.default.getFirstMatch(s, e);
15942
+ return r && (t.version = r), t;
15943
+ }
15944
+ }, {
15945
+ test: [/coast/i],
15946
+ describe: function describe(e) {
15947
+ var t = {
15948
+ name: "Opera Coast"
15949
+ },
15950
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, e);
15951
+ return r && (t.version = r), t;
15952
+ }
15953
+ }, {
15954
+ test: [/opt\/\d+(?:.?_?\d+)+/i],
15955
+ describe: function describe(e) {
15956
+ var t = {
15957
+ name: "Opera Touch"
15958
+ },
15959
+ r = i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
15960
+ return r && (t.version = r), t;
15961
+ }
15962
+ }, {
15963
+ test: [/yabrowser/i],
15964
+ describe: function describe(e) {
15965
+ var t = {
15966
+ name: "Yandex Browser"
15967
+ },
15968
+ r = i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
15969
+ return r && (t.version = r), t;
15970
+ }
15971
+ }, {
15972
+ test: [/ucbrowser/i],
15973
+ describe: function describe(e) {
15974
+ var t = {
15975
+ name: "UC Browser"
15976
+ },
15977
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
15978
+ return r && (t.version = r), t;
15979
+ }
15980
+ }, {
15981
+ test: [/Maxthon|mxios/i],
15982
+ describe: function describe(e) {
15983
+ var t = {
15984
+ name: "Maxthon"
15985
+ },
15986
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, e);
15987
+ return r && (t.version = r), t;
15988
+ }
15989
+ }, {
15990
+ test: [/epiphany/i],
15991
+ describe: function describe(e) {
15992
+ var t = {
15993
+ name: "Epiphany"
15994
+ },
15995
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, e);
15996
+ return r && (t.version = r), t;
15997
+ }
15998
+ }, {
15999
+ test: [/puffin/i],
16000
+ describe: function describe(e) {
16001
+ var t = {
16002
+ name: "Puffin"
16003
+ },
16004
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, e);
16005
+ return r && (t.version = r), t;
16006
+ }
16007
+ }, {
16008
+ test: [/sleipnir/i],
16009
+ describe: function describe(e) {
16010
+ var t = {
16011
+ name: "Sleipnir"
16012
+ },
16013
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, e);
16014
+ return r && (t.version = r), t;
16015
+ }
16016
+ }, {
16017
+ test: [/k-meleon/i],
16018
+ describe: function describe(e) {
16019
+ var t = {
16020
+ name: "K-Meleon"
16021
+ },
16022
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, e);
16023
+ return r && (t.version = r), t;
16024
+ }
16025
+ }, {
16026
+ test: [/micromessenger/i],
16027
+ describe: function describe(e) {
16028
+ var t = {
16029
+ name: "WeChat"
16030
+ },
16031
+ r = i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
16032
+ return r && (t.version = r), t;
16033
+ }
16034
+ }, {
16035
+ test: [/qqbrowser/i],
16036
+ describe: function describe(e) {
16037
+ var t = {
16038
+ name: /qqbrowserlite/i.test(e) ? "QQ Browser Lite" : "QQ Browser"
16039
+ },
16040
+ r = i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
16041
+ return r && (t.version = r), t;
16042
+ }
16043
+ }, {
16044
+ test: [/msie|trident/i],
16045
+ describe: function describe(e) {
16046
+ var t = {
16047
+ name: "Internet Explorer"
16048
+ },
16049
+ r = i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, e);
16050
+ return r && (t.version = r), t;
16051
+ }
16052
+ }, {
16053
+ test: [/\sedg\//i],
16054
+ describe: function describe(e) {
16055
+ var t = {
16056
+ name: "Microsoft Edge"
16057
+ },
16058
+ r = i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, e);
16059
+ return r && (t.version = r), t;
16060
+ }
16061
+ }, {
16062
+ test: [/edg([ea]|ios)/i],
16063
+ describe: function describe(e) {
16064
+ var t = {
16065
+ name: "Microsoft Edge"
16066
+ },
16067
+ r = i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, e);
16068
+ return r && (t.version = r), t;
16069
+ }
16070
+ }, {
16071
+ test: [/vivaldi/i],
16072
+ describe: function describe(e) {
16073
+ var t = {
16074
+ name: "Vivaldi"
16075
+ },
16076
+ r = i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, e);
16077
+ return r && (t.version = r), t;
16078
+ }
16079
+ }, {
16080
+ test: [/seamonkey/i],
16081
+ describe: function describe(e) {
16082
+ var t = {
16083
+ name: "SeaMonkey"
16084
+ },
16085
+ r = i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, e);
16086
+ return r && (t.version = r), t;
16087
+ }
16088
+ }, {
16089
+ test: [/sailfish/i],
16090
+ describe: function describe(e) {
16091
+ var t = {
16092
+ name: "Sailfish"
16093
+ },
16094
+ r = i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, e);
16095
+ return r && (t.version = r), t;
16096
+ }
16097
+ }, {
16098
+ test: [/silk/i],
16099
+ describe: function describe(e) {
16100
+ var t = {
16101
+ name: "Amazon Silk"
16102
+ },
16103
+ r = i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, e);
16104
+ return r && (t.version = r), t;
16105
+ }
16106
+ }, {
16107
+ test: [/phantom/i],
16108
+ describe: function describe(e) {
16109
+ var t = {
16110
+ name: "PhantomJS"
16111
+ },
16112
+ r = i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, e);
16113
+ return r && (t.version = r), t;
16114
+ }
16115
+ }, {
16116
+ test: [/slimerjs/i],
16117
+ describe: function describe(e) {
16118
+ var t = {
16119
+ name: "SlimerJS"
16120
+ },
16121
+ r = i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, e);
16122
+ return r && (t.version = r), t;
16123
+ }
16124
+ }, {
16125
+ test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
16126
+ describe: function describe(e) {
16127
+ var t = {
16128
+ name: "BlackBerry"
16129
+ },
16130
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, e);
16131
+ return r && (t.version = r), t;
16132
+ }
16133
+ }, {
16134
+ test: [/(web|hpw)[o0]s/i],
16135
+ describe: function describe(e) {
16136
+ var t = {
16137
+ name: "WebOS Browser"
16138
+ },
16139
+ r = i.default.getFirstMatch(s, e) || i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, e);
16140
+ return r && (t.version = r), t;
16141
+ }
16142
+ }, {
16143
+ test: [/bada/i],
16144
+ describe: function describe(e) {
16145
+ var t = {
16146
+ name: "Bada"
16147
+ },
16148
+ r = i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, e);
16149
+ return r && (t.version = r), t;
16150
+ }
16151
+ }, {
16152
+ test: [/tizen/i],
16153
+ describe: function describe(e) {
16154
+ var t = {
16155
+ name: "Tizen"
16156
+ },
16157
+ r = i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
16158
+ return r && (t.version = r), t;
16159
+ }
16160
+ }, {
16161
+ test: [/qupzilla/i],
16162
+ describe: function describe(e) {
16163
+ var t = {
16164
+ name: "QupZilla"
16165
+ },
16166
+ r = i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
16167
+ return r && (t.version = r), t;
16168
+ }
16169
+ }, {
16170
+ test: [/firefox|iceweasel|fxios/i],
16171
+ describe: function describe(e) {
16172
+ var t = {
16173
+ name: "Firefox"
16174
+ },
16175
+ r = i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, e);
16176
+ return r && (t.version = r), t;
16177
+ }
16178
+ }, {
16179
+ test: [/electron/i],
16180
+ describe: function describe(e) {
16181
+ var t = {
16182
+ name: "Electron"
16183
+ },
16184
+ r = i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, e);
16185
+ return r && (t.version = r), t;
16186
+ }
16187
+ }, {
16188
+ test: [/MiuiBrowser/i],
16189
+ describe: function describe(e) {
16190
+ var t = {
16191
+ name: "Miui"
16192
+ },
16193
+ r = i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i, e);
16194
+ return r && (t.version = r), t;
16195
+ }
16196
+ }, {
16197
+ test: [/chromium/i],
16198
+ describe: function describe(e) {
16199
+ var t = {
16200
+ name: "Chromium"
16201
+ },
16202
+ r = i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, e) || i.default.getFirstMatch(s, e);
16203
+ return r && (t.version = r), t;
16204
+ }
16205
+ }, {
16206
+ test: [/chrome|crios|crmo/i],
16207
+ describe: function describe(e) {
16208
+ var t = {
16209
+ name: "Chrome"
16210
+ },
16211
+ r = i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, e);
16212
+ return r && (t.version = r), t;
16213
+ }
16214
+ }, {
16215
+ test: [/GSA/i],
16216
+ describe: function describe(e) {
16217
+ var t = {
16218
+ name: "Google Search"
16219
+ },
16220
+ r = i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, e);
16221
+ return r && (t.version = r), t;
16222
+ }
16223
+ }, {
16224
+ test: function test(e) {
16225
+ var t = !e.test(/like android/i),
16226
+ r = e.test(/android/i);
16227
+ return t && r;
16228
+ },
16229
+ describe: function describe(e) {
16230
+ var t = {
16231
+ name: "Android Browser"
16232
+ },
16233
+ r = i.default.getFirstMatch(s, e);
16234
+ return r && (t.version = r), t;
16235
+ }
16236
+ }, {
16237
+ test: [/playstation 4/i],
16238
+ describe: function describe(e) {
16239
+ var t = {
16240
+ name: "PlayStation 4"
16241
+ },
16242
+ r = i.default.getFirstMatch(s, e);
16243
+ return r && (t.version = r), t;
16244
+ }
16245
+ }, {
16246
+ test: [/safari|applewebkit/i],
16247
+ describe: function describe(e) {
16248
+ var t = {
16249
+ name: "Safari"
16250
+ },
16251
+ r = i.default.getFirstMatch(s, e);
16252
+ return r && (t.version = r), t;
16253
+ }
16254
+ }, {
16255
+ test: [/.*/i],
16256
+ describe: function describe(e) {
16257
+ var t = -1 !== e.search("\\(") ? /^(.*)\/(.*)[ \t]\((.*)/ : /^(.*)\/(.*) /;
16258
+ return {
16259
+ name: i.default.getFirstMatch(t, e),
16260
+ version: i.default.getSecondMatch(t, e)
16261
+ };
16262
+ }
16263
+ }];
16264
+ t.default = a, e.exports = t.default;
16265
+ },
16266
+ 93: function _(e, t, r) {
16267
+ t.__esModule = !0, t.default = void 0;
16268
+ var n,
16269
+ i = (n = r(17)) && n.__esModule ? n : {
16270
+ default: n
16271
+ },
16272
+ s = r(18);
16273
+ var a = [{
16274
+ test: [/Roku\/DVP/],
16275
+ describe: function describe(e) {
16276
+ var t = i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i, e);
16277
+ return {
16278
+ name: s.OS_MAP.Roku,
16279
+ version: t
16280
+ };
16281
+ }
16282
+ }, {
16283
+ test: [/windows phone/i],
16284
+ describe: function describe(e) {
16285
+ var t = i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, e);
16286
+ return {
16287
+ name: s.OS_MAP.WindowsPhone,
16288
+ version: t
16289
+ };
16290
+ }
16291
+ }, {
16292
+ test: [/windows /i],
16293
+ describe: function describe(e) {
16294
+ var t = i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, e),
16295
+ r = i.default.getWindowsVersionName(t);
16296
+ return {
16297
+ name: s.OS_MAP.Windows,
16298
+ version: t,
16299
+ versionName: r
16300
+ };
16301
+ }
16302
+ }, {
16303
+ test: [/Macintosh(.*?) FxiOS(.*?)\//],
16304
+ describe: function describe(e) {
16305
+ var t = {
16306
+ name: s.OS_MAP.iOS
16307
+ },
16308
+ r = i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/, e);
16309
+ return r && (t.version = r), t;
16310
+ }
16311
+ }, {
16312
+ test: [/macintosh/i],
16313
+ describe: function describe(e) {
16314
+ var t = i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, e).replace(/[_\s]/g, "."),
16315
+ r = i.default.getMacOSVersionName(t),
16316
+ n = {
16317
+ name: s.OS_MAP.MacOS,
16318
+ version: t
16319
+ };
16320
+ return r && (n.versionName = r), n;
16321
+ }
16322
+ }, {
16323
+ test: [/(ipod|iphone|ipad)/i],
16324
+ describe: function describe(e) {
16325
+ var t = i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, e).replace(/[_\s]/g, ".");
16326
+ return {
16327
+ name: s.OS_MAP.iOS,
16328
+ version: t
16329
+ };
16330
+ }
16331
+ }, {
16332
+ test: function test(e) {
16333
+ var t = !e.test(/like android/i),
16334
+ r = e.test(/android/i);
16335
+ return t && r;
16336
+ },
16337
+ describe: function describe(e) {
16338
+ var t = i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i, e),
16339
+ r = i.default.getAndroidVersionName(t),
16340
+ n = {
16341
+ name: s.OS_MAP.Android,
16342
+ version: t
16343
+ };
16344
+ return r && (n.versionName = r), n;
16345
+ }
16346
+ }, {
16347
+ test: [/(web|hpw)[o0]s/i],
16348
+ describe: function describe(e) {
16349
+ var t = i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, e),
16350
+ r = {
16351
+ name: s.OS_MAP.WebOS
16352
+ };
16353
+ return t && t.length && (r.version = t), r;
16354
+ }
16355
+ }, {
16356
+ test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
16357
+ describe: function describe(e) {
16358
+ var t = i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, e) || i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, e) || i.default.getFirstMatch(/\bbb(\d+)/i, e);
16359
+ return {
16360
+ name: s.OS_MAP.BlackBerry,
16361
+ version: t
16362
+ };
16363
+ }
16364
+ }, {
16365
+ test: [/bada/i],
16366
+ describe: function describe(e) {
16367
+ var t = i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i, e);
16368
+ return {
16369
+ name: s.OS_MAP.Bada,
16370
+ version: t
16371
+ };
16372
+ }
16373
+ }, {
16374
+ test: [/tizen/i],
16375
+ describe: function describe(e) {
16376
+ var t = i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i, e);
16377
+ return {
16378
+ name: s.OS_MAP.Tizen,
16379
+ version: t
16380
+ };
16381
+ }
16382
+ }, {
16383
+ test: [/linux/i],
16384
+ describe: function describe() {
16385
+ return {
16386
+ name: s.OS_MAP.Linux
16387
+ };
16388
+ }
16389
+ }, {
16390
+ test: [/CrOS/],
16391
+ describe: function describe() {
16392
+ return {
16393
+ name: s.OS_MAP.ChromeOS
16394
+ };
16395
+ }
16396
+ }, {
16397
+ test: [/PlayStation 4/],
16398
+ describe: function describe(e) {
16399
+ var t = i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, e);
16400
+ return {
16401
+ name: s.OS_MAP.PlayStation4,
16402
+ version: t
16403
+ };
16404
+ }
16405
+ }];
16406
+ t.default = a, e.exports = t.default;
16407
+ },
16408
+ 94: function _(e, t, r) {
16409
+ t.__esModule = !0, t.default = void 0;
16410
+ var n,
16411
+ i = (n = r(17)) && n.__esModule ? n : {
16412
+ default: n
16413
+ },
16414
+ s = r(18);
16415
+ var a = [{
16416
+ test: [/googlebot/i],
16417
+ describe: function describe() {
16418
+ return {
16419
+ type: "bot",
16420
+ vendor: "Google"
16421
+ };
16422
+ }
16423
+ }, {
16424
+ test: [/huawei/i],
16425
+ describe: function describe(e) {
16426
+ var t = i.default.getFirstMatch(/(can-l01)/i, e) && "Nova",
16427
+ r = {
16428
+ type: s.PLATFORMS_MAP.mobile,
16429
+ vendor: "Huawei"
16430
+ };
16431
+ return t && (r.model = t), r;
16432
+ }
16433
+ }, {
16434
+ test: [/nexus\s*(?:7|8|9|10).*/i],
16435
+ describe: function describe() {
16436
+ return {
16437
+ type: s.PLATFORMS_MAP.tablet,
16438
+ vendor: "Nexus"
16439
+ };
16440
+ }
16441
+ }, {
16442
+ test: [/ipad/i],
16443
+ describe: function describe() {
16444
+ return {
16445
+ type: s.PLATFORMS_MAP.tablet,
16446
+ vendor: "Apple",
16447
+ model: "iPad"
16448
+ };
16449
+ }
16450
+ }, {
16451
+ test: [/Macintosh(.*?) FxiOS(.*?)\//],
16452
+ describe: function describe() {
16453
+ return {
16454
+ type: s.PLATFORMS_MAP.tablet,
16455
+ vendor: "Apple",
16456
+ model: "iPad"
16457
+ };
16458
+ }
16459
+ }, {
16460
+ test: [/kftt build/i],
16461
+ describe: function describe() {
16462
+ return {
16463
+ type: s.PLATFORMS_MAP.tablet,
16464
+ vendor: "Amazon",
16465
+ model: "Kindle Fire HD 7"
16466
+ };
16467
+ }
16468
+ }, {
16469
+ test: [/silk/i],
16470
+ describe: function describe() {
16471
+ return {
16472
+ type: s.PLATFORMS_MAP.tablet,
16473
+ vendor: "Amazon"
16474
+ };
16475
+ }
16476
+ }, {
16477
+ test: [/tablet(?! pc)/i],
16478
+ describe: function describe() {
16479
+ return {
16480
+ type: s.PLATFORMS_MAP.tablet
16481
+ };
16482
+ }
16483
+ }, {
16484
+ test: function test(e) {
16485
+ var t = e.test(/ipod|iphone/i),
16486
+ r = e.test(/like (ipod|iphone)/i);
16487
+ return t && !r;
16488
+ },
16489
+ describe: function describe(e) {
16490
+ var t = i.default.getFirstMatch(/(ipod|iphone)/i, e);
16491
+ return {
16492
+ type: s.PLATFORMS_MAP.mobile,
16493
+ vendor: "Apple",
16494
+ model: t
16495
+ };
16496
+ }
16497
+ }, {
16498
+ test: [/nexus\s*[0-6].*/i, /galaxy nexus/i],
16499
+ describe: function describe() {
16500
+ return {
16501
+ type: s.PLATFORMS_MAP.mobile,
16502
+ vendor: "Nexus"
16503
+ };
16504
+ }
16505
+ }, {
16506
+ test: [/[^-]mobi/i],
16507
+ describe: function describe() {
16508
+ return {
16509
+ type: s.PLATFORMS_MAP.mobile
16510
+ };
16511
+ }
16512
+ }, {
16513
+ test: function test(e) {
16514
+ return "blackberry" === e.getBrowserName(!0);
16515
+ },
16516
+ describe: function describe() {
16517
+ return {
16518
+ type: s.PLATFORMS_MAP.mobile,
16519
+ vendor: "BlackBerry"
16520
+ };
16521
+ }
16522
+ }, {
16523
+ test: function test(e) {
16524
+ return "bada" === e.getBrowserName(!0);
16525
+ },
16526
+ describe: function describe() {
16527
+ return {
16528
+ type: s.PLATFORMS_MAP.mobile
16529
+ };
16530
+ }
16531
+ }, {
16532
+ test: function test(e) {
16533
+ return "windows phone" === e.getBrowserName();
16534
+ },
16535
+ describe: function describe() {
16536
+ return {
16537
+ type: s.PLATFORMS_MAP.mobile,
16538
+ vendor: "Microsoft"
16539
+ };
16540
+ }
16541
+ }, {
16542
+ test: function test(e) {
16543
+ var t = Number(String(e.getOSVersion()).split(".")[0]);
16544
+ return "android" === e.getOSName(!0) && t >= 3;
16545
+ },
16546
+ describe: function describe() {
16547
+ return {
16548
+ type: s.PLATFORMS_MAP.tablet
16549
+ };
16550
+ }
16551
+ }, {
16552
+ test: function test(e) {
16553
+ return "android" === e.getOSName(!0);
16554
+ },
16555
+ describe: function describe() {
16556
+ return {
16557
+ type: s.PLATFORMS_MAP.mobile
16558
+ };
16559
+ }
16560
+ }, {
16561
+ test: function test(e) {
16562
+ return "macos" === e.getOSName(!0);
16563
+ },
16564
+ describe: function describe() {
16565
+ return {
16566
+ type: s.PLATFORMS_MAP.desktop,
16567
+ vendor: "Apple"
16568
+ };
16569
+ }
16570
+ }, {
16571
+ test: function test(e) {
16572
+ return "windows" === e.getOSName(!0);
16573
+ },
16574
+ describe: function describe() {
16575
+ return {
16576
+ type: s.PLATFORMS_MAP.desktop
16577
+ };
16578
+ }
16579
+ }, {
16580
+ test: function test(e) {
16581
+ return "linux" === e.getOSName(!0);
16582
+ },
16583
+ describe: function describe() {
16584
+ return {
16585
+ type: s.PLATFORMS_MAP.desktop
16586
+ };
16587
+ }
16588
+ }, {
16589
+ test: function test(e) {
16590
+ return "playstation 4" === e.getOSName(!0);
16591
+ },
16592
+ describe: function describe() {
16593
+ return {
16594
+ type: s.PLATFORMS_MAP.tv
16595
+ };
16596
+ }
16597
+ }, {
16598
+ test: function test(e) {
16599
+ return "roku" === e.getOSName(!0);
16600
+ },
16601
+ describe: function describe() {
16602
+ return {
16603
+ type: s.PLATFORMS_MAP.tv
16604
+ };
16605
+ }
16606
+ }];
16607
+ t.default = a, e.exports = t.default;
16608
+ },
16609
+ 95: function _(e, t, r) {
16610
+ t.__esModule = !0, t.default = void 0;
16611
+ var n,
16612
+ i = (n = r(17)) && n.__esModule ? n : {
16613
+ default: n
16614
+ },
16615
+ s = r(18);
16616
+ var a = [{
16617
+ test: function test(e) {
16618
+ return "microsoft edge" === e.getBrowserName(!0);
16619
+ },
16620
+ describe: function describe(e) {
16621
+ if (/\sedg\//i.test(e)) return {
16622
+ name: s.ENGINE_MAP.Blink
16623
+ };
16624
+ var t = i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i, e);
16625
+ return {
16626
+ name: s.ENGINE_MAP.EdgeHTML,
16627
+ version: t
16628
+ };
16629
+ }
16630
+ }, {
16631
+ test: [/trident/i],
16632
+ describe: function describe(e) {
16633
+ var t = {
16634
+ name: s.ENGINE_MAP.Trident
16635
+ },
16636
+ r = i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i, e);
16637
+ return r && (t.version = r), t;
16638
+ }
16639
+ }, {
16640
+ test: function test(e) {
16641
+ return e.test(/presto/i);
16642
+ },
16643
+ describe: function describe(e) {
16644
+ var t = {
16645
+ name: s.ENGINE_MAP.Presto
16646
+ },
16647
+ r = i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i, e);
16648
+ return r && (t.version = r), t;
16649
+ }
16650
+ }, {
16651
+ test: function test(e) {
16652
+ var t = e.test(/gecko/i),
16653
+ r = e.test(/like gecko/i);
16654
+ return t && !r;
16655
+ },
16656
+ describe: function describe(e) {
16657
+ var t = {
16658
+ name: s.ENGINE_MAP.Gecko
16659
+ },
16660
+ r = i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i, e);
16661
+ return r && (t.version = r), t;
16662
+ }
16663
+ }, {
16664
+ test: [/(apple)?webkit\/537\.36/i],
16665
+ describe: function describe() {
16666
+ return {
16667
+ name: s.ENGINE_MAP.Blink
16668
+ };
16669
+ }
16670
+ }, {
16671
+ test: [/(apple)?webkit/i],
16672
+ describe: function describe(e) {
16673
+ var t = {
16674
+ name: s.ENGINE_MAP.WebKit
16675
+ },
16676
+ r = i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i, e);
16677
+ return r && (t.version = r), t;
16678
+ }
16679
+ }];
16680
+ t.default = a, e.exports = t.default;
16681
+ }
16682
+ });
16683
+ });
16684
+ })(es5);
16685
+ var Bowser = /*@__PURE__*/getDefaultExportFromCjs(es5.exports);
16686
+ var BrowserName;
16687
+ (function (BrowserName) {
16688
+ BrowserName["CHROME"] = "Chrome";
16689
+ BrowserName["FIREFOX"] = "Firefox";
16690
+ BrowserName["EDGE"] = "Microsoft Edge";
16691
+ BrowserName["SAFARI"] = "Safari";
16692
+ })(BrowserName || (BrowserName = {}));
16693
+ var OSName;
16694
+ (function (OSName) {
16695
+ OSName["WINDOWS"] = "Windows";
16696
+ OSName["MAC"] = "macOS";
16697
+ OSName["LINUX"] = "Linux";
16698
+ })(OSName || (OSName = {}));
16699
+ Bowser.getParser(window.navigator.userAgent);
16700
+ class CpuInfo {
16701
+ static getNumLogicalCores() {
16702
+ return navigator.hardwareConcurrency;
16703
+ }
16704
+ }
16705
+ var CapabilityState;
16706
+ (function (CapabilityState) {
16707
+ CapabilityState["NOT_CAPABLE"] = "not capable";
16708
+ CapabilityState["CAPABLE"] = "capable";
16709
+ CapabilityState["UNKNOWN"] = "unknown";
16710
+ })(CapabilityState || (CapabilityState = {}));
16711
+
16712
+ var NetworkType;
16713
+ (function (NetworkType) {
16714
+ NetworkType["VPN"] = "vpn";
16715
+ NetworkType["UNKNOWN"] = "unknown";
16716
+ NetworkType["WIFI"] = "wifi";
16717
+ NetworkType["ETHERNET"] = "ethernet";
16718
+ })(NetworkType || (NetworkType = {}));
16719
+ var MediaDevices;
16720
+ (function (MediaDevices) {
16721
+ MediaDevices["MICROPHONE"] = "microphone";
16722
+ MediaDevices["SPEAKER"] = "speaker";
16723
+ MediaDevices["CAMERA"] = "camera";
16724
+ })(MediaDevices || (MediaDevices = {}));
16725
+ var MediaDirection;
16726
+ (function (MediaDirection) {
16727
+ MediaDirection["SEND"] = "send";
16728
+ MediaDirection["RECEIVE"] = "recv";
16729
+ })(MediaDirection || (MediaDirection = {}));
16730
+ var IpType;
16731
+ (function (IpType) {
16732
+ IpType["REMOTE"] = "remote";
16733
+ IpType["LOCAL"] = "local";
16734
+ })(IpType || (IpType = {}));
16735
+
16736
+ var STATS_DEFAULT = {
16737
+ encryption: 'sha-256',
16738
+ bandwidth: {
16739
+ systemBandwidth: 0,
16740
+ sentPerSecond: 0,
16741
+ encodedPerSecond: 0,
16742
+ helper: {
16743
+ audioBytesSent: 0,
16744
+ videoBytesSent: 0
16745
+ },
16746
+ speed: 0
16747
+ },
16748
+ results: {},
16749
+ connectionType: {
16750
+ systemNetworkType: 'unknown',
16751
+ systemIpAddress: '0.0.0.0',
16752
+ local: {
16753
+ candidateType: 'host',
16754
+ transport: 'UDP',
16755
+ networkType: NetworkType.UNKNOWN
16756
+ },
16757
+ remote: {
16758
+ candidateType: 'host',
16759
+ transport: 'UDP',
16760
+ networkType: NetworkType.UNKNOWN
16761
+ }
16762
+ },
16763
+ resolutions: {},
16764
+ internal: {
16765
+ remote: {},
16766
+ candidates: {}
16767
+ }
16768
+ };
16769
+ var DEFAULT_GET_STATS_FILTER = {
16770
+ types: ['track', 'transport', 'candidate-pair', 'outbound-rtp', 'outboundrtp', 'inbound-rtp', 'inboundrtp', 'remote-inbound-rtp', 'remote-outbound-rtp', 'remote-candidate', 'local-candidate', 'media-source']
16771
+ };
16772
+ var MQA_INTERVAL = 60000;
16773
+ var _UNKNOWN_ = 'UNKNOWN';
16774
+ var emptyMqaInterval = {
16775
+ audioReceive: [],
16776
+ audioTransmit: [],
16777
+ intervalMetadata: {
16778
+ peerReflexiveIP: '0.0.0.0',
16779
+ peripherals: [],
16780
+ cpuInfo: {
16781
+ numberOfCores: 1,
16782
+ description: 'NA',
16783
+ architecture: 'unknown'
16784
+ },
16785
+ processAverageCPU: 0,
16786
+ processMaximumCPU: 0,
16787
+ systemAverageCPU: 0,
16788
+ systemMaximumCPU: 0,
16789
+ screenWidth: 0,
16790
+ screenHeight: 0,
16791
+ screenResolution: 0,
16792
+ appWindowWidth: 0,
16793
+ appWindowHeight: 0,
16794
+ appWindowSize: 0
16795
+ },
16796
+ networkType: '',
16797
+ intervalNumber: 0,
16798
+ videoReceive: [],
16799
+ videoTransmit: []
16800
+ };
16801
+ var emptyAudioReceive = {
16802
+ common: {
16803
+ common: {
16804
+ direction: 'inactive',
16805
+ isMain: true,
16806
+ mariFecEnabled: false,
16807
+ mariRtxEnabled: false,
16808
+ mariQosEnabled: false,
16809
+ mariLiteEnabled: false,
16810
+ multistreamEnabled: false
16811
+ },
16812
+ dtlsBitrate: 0,
16813
+ dtlsPackets: 0,
16814
+ fecBitrate: 0,
16815
+ fecPackets: 0,
16816
+ maxBitrate: 0,
16817
+ mediaHopByHopLost: 0,
16818
+ rtcpBitrate: 0,
16819
+ rtcpPackets: 0,
16820
+ rtpBitrate: 0,
16821
+ rtpHopByHopLost: 0,
16822
+ rtpPackets: 0,
16823
+ rtpRecovered: 0,
16824
+ rtxBitrate: 0,
16825
+ rtxPackets: 0,
16826
+ srtcpUnprotectErrors: 0,
16827
+ srtpUnprotectErrors: 0,
16828
+ stunBitrate: 0,
16829
+ stunPackets: 0,
16830
+ transportType: 'UDP'
16831
+ },
16832
+ streams: []
16833
+ };
16834
+ var emptyAudioReceiveStream = {
16835
+ common: {
16836
+ codec: 'opus',
16837
+ concealedFrames: 0,
16838
+ csi: [],
16839
+ maxConcealRunLength: 0,
16840
+ optimalBitrate: 0,
16841
+ optimalFrameRate: 0,
16842
+ receivedBitrate: 0,
16843
+ receivedFrameRate: 0,
16844
+ renderedFrameRate: 0,
16845
+ requestedBitrate: 0,
16846
+ requestedFrameRate: 0,
16847
+ rtpEndToEndLost: 0,
16848
+ maxRtpJitter: 0,
16849
+ meanRtpJitter: 0,
16850
+ rtpPackets: 0,
16851
+ ssci: 0
16852
+ }
16853
+ };
16854
+ var emptyAudioTransmit = {
16855
+ common: {
16856
+ availableBitrate: 0,
16857
+ common: {
16858
+ direction: 'inactive',
16859
+ isMain: true,
16860
+ mariFecEnabled: false,
16861
+ mariRtxEnabled: false,
16862
+ mariQosEnabled: false,
16863
+ mariLiteEnabled: false,
16864
+ multistreamEnabled: false
16865
+ },
16866
+ dtlsBitrate: 0,
16867
+ dtlsPackets: 0,
16868
+ fecBitrate: 0,
16869
+ fecPackets: 0,
16870
+ maxBitrate: 0,
16871
+ queueDelay: 0,
16872
+ remoteJitter: 0,
16873
+ remoteLossRate: 0,
16874
+ roundTripTime: 0,
16875
+ rtcpBitrate: 0,
16876
+ rtcpPackets: 0,
16877
+ rtpBitrate: 0,
16878
+ rtpPackets: 0,
16879
+ rtxBitrate: 0,
16880
+ rtxPackets: 0,
16881
+ stunBitrate: 0,
16882
+ stunPackets: 0,
16883
+ transportType: 'UDP'
16884
+ },
16885
+ streams: []
16886
+ };
16887
+ var emptyAudioTransmitStream = {
16888
+ common: {
16889
+ codec: 'opus',
16890
+ csi: [],
16891
+ requestedBitrate: 0,
16892
+ requestedFrames: 0,
16893
+ rtpPackets: 0,
16894
+ ssci: 0,
16895
+ transmittedBitrate: 0,
16896
+ transmittedFrameRate: 0
16897
+ }
16898
+ };
16899
+ var emptyVideoReceive = {
16900
+ common: {
16901
+ common: {
16902
+ direction: 'inactive',
16903
+ isMain: true,
16904
+ mariFecEnabled: false,
16905
+ mariRtxEnabled: false,
16906
+ mariQosEnabled: false,
16907
+ mariLiteEnabled: false,
16908
+ multistreamEnabled: false
16909
+ },
16910
+ dtlsBitrate: 0,
16911
+ dtlsPackets: 0,
16912
+ fecBitrate: 0,
16913
+ fecPackets: 0,
16914
+ maxBitrate: 0,
16915
+ mediaHopByHopLost: 0,
16916
+ rtcpBitrate: 0,
16917
+ rtcpPackets: 0,
16918
+ rtpBitrate: 0,
16919
+ rtpHopByHopLost: 0,
16920
+ rtpPackets: 0,
16921
+ rtpRecovered: 0,
16922
+ rtxBitrate: 0,
16923
+ rtxPackets: 0,
16924
+ srtcpUnprotectErrors: 0,
16925
+ srtpUnprotectErrors: 0,
16926
+ stunBitrate: 0,
16927
+ stunPackets: 0,
16928
+ transportType: 'UDP'
16929
+ },
16930
+ streams: []
16931
+ };
16932
+ var emptyVideoReceiveStream = {
16933
+ common: {
16934
+ codec: 'H264',
16935
+ concealedFrames: 0,
16936
+ csi: [],
16937
+ maxConcealRunLength: 0,
16938
+ optimalBitrate: 0,
16939
+ optimalFrameRate: 0,
16940
+ receivedBitrate: 0,
16941
+ receivedFrameRate: 0,
16942
+ renderedFrameRate: 0,
16943
+ requestedBitrate: 0,
16944
+ requestedFrameRate: 0,
16945
+ rtpEndToEndLost: 0,
16946
+ maxRtpJitter: 0,
16947
+ meanRtpJitter: 0,
16948
+ rtpPackets: 0,
16949
+ ssci: 0
16950
+ },
16951
+ h264CodecProfile: 'BP',
16952
+ isActiveSpeaker: false,
16953
+ optimalFrameSize: 0,
16954
+ receivedFrameSize: 0,
16955
+ receivedHeight: 0,
16956
+ receivedKeyFrames: 0,
16957
+ receivedKeyFramesForRequest: 0,
16958
+ receivedKeyFramesSourceChange: 0,
16959
+ receivedKeyFramesUnknown: 0,
16960
+ receivedWidth: 0,
16961
+ requestedFrameSize: 0,
16962
+ requestedKeyFrames: 0
16963
+ };
16964
+ var emptyVideoTransmit = {
16965
+ common: {
16966
+ availableBitrate: 0,
16967
+ common: {
16968
+ direction: 'inactive',
16969
+ isMain: true,
16970
+ mariFecEnabled: false,
16971
+ mariRtxEnabled: false,
16972
+ mariQosEnabled: false,
16973
+ mariLiteEnabled: false,
16974
+ multistreamEnabled: false
16975
+ },
16976
+ dtlsBitrate: 0,
16977
+ dtlsPackets: 0,
16978
+ fecBitrate: 0,
16979
+ fecPackets: 0,
16980
+ maxBitrate: 0,
16981
+ queueDelay: 0,
16982
+ remoteJitter: 0,
16983
+ remoteLossRate: 0,
16984
+ roundTripTime: 0,
16985
+ rtcpBitrate: 0,
16986
+ rtcpPackets: 0,
16987
+ rtpBitrate: 0,
16988
+ rtpPackets: 0,
16989
+ rtxBitrate: 0,
16990
+ rtxPackets: 0,
16991
+ stunBitrate: 0,
16992
+ stunPackets: 0,
16993
+ transportType: 'UDP'
16994
+ },
16995
+ streams: []
16996
+ };
16997
+ var emptyVideoTransmitStream = {
16998
+ common: {
16999
+ codec: 'H264',
17000
+ csi: [],
17001
+ duplicateSsci: 0,
17002
+ requestedBitrate: 0,
17003
+ requestedFrames: 0,
17004
+ rtpPackets: 0,
17005
+ ssci: 0,
17006
+ transmittedBitrate: 0,
17007
+ transmittedFrameRate: 0
17008
+ },
17009
+ h264CodecProfile: 'BP',
17010
+ isAvatar: false,
17011
+ isHardwareEncoded: false,
17012
+ localConfigurationChanges: 2,
17013
+ maxFrameQp: 0,
17014
+ maxNoiseLevel: 0,
17015
+ minRegionQp: 0,
17016
+ remoteConfigurationChanges: 0,
17017
+ requestedFrameSize: 0,
17018
+ requestedKeyFrames: 0,
17019
+ transmittedFrameSize: 0,
17020
+ transmittedHeight: 0,
17021
+ transmittedKeyFrames: 0,
17022
+ transmittedKeyFramesClient: 0,
17023
+ transmittedKeyFramesConfigurationChange: 0,
17024
+ transmittedKeyFramesFeedback: 0,
17025
+ transmittedKeyFramesLocalDrop: 0,
17026
+ transmittedKeyFramesOtherLayer: 0,
17027
+ transmittedKeyFramesPeriodic: 0,
17028
+ transmittedKeyFramesSceneChange: 0,
17029
+ transmittedKeyFramesStartup: 0,
17030
+ transmittedKeyFramesUnknown: 0,
17031
+ transmittedWidth: 0
17032
+ };
17033
+ var emptySender = {
17034
+ trackLabel: '',
17035
+ maxPacketLossRatio: 0,
17036
+ availableBandwidth: 0,
17037
+ bytesSent: 0,
17038
+ meanRemoteJitter: [],
17039
+ meanRoundTripTime: []
17040
+ };
17041
+ var emptyReceiver = {
17042
+ availableBandwidth: 0,
17043
+ bytesReceived: 0,
17044
+ meanRtpJitter: [],
17045
+ meanRoundTripTime: []
17046
+ };
17047
+ var VIDEO_FRAME_RATE_MULTIPLIER = 100;
17048
+
17049
+ var max = array => {
17050
+ if (array.length === 0) {
17051
+ return 0;
17052
+ }
17053
+ return Math.max(...array);
17054
+ };
17055
+ var mean = array => {
17056
+ if (array.length === 0) {
17057
+ return 0;
17058
+ }
17059
+ return array.reduce((a, b) => a + b) / array.length;
17060
+ };
17061
+ var getTotalValueFromBaseType = (stats, sendrecvType, baseMediaType, value) => Object.keys(stats).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => {
17062
+ var _stats$mt, _stats$mt$sendrecvTyp;
17063
+ return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);
17064
+ }, 0);
17065
+ var getAudioReceiverMqa = _ref => {
17066
+ var {
17067
+ audioReceiver,
17068
+ statsResults,
17069
+ lastMqaDataSent,
17070
+ baseMediaType,
17071
+ isMultistream
17072
+ } = _ref;
17073
+ var sendrecvType = MediaDirection.RECEIVE;
17074
+ var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
17075
+ var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
17076
+ var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
17077
+ var lastPacketsLost = getLastTotalValue('totalPacketsLost');
17078
+ var lastBytesReceived = getLastTotalValue('totalBytesReceived');
17079
+ var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
17080
+ var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
17081
+ var totalPacketsReceived = getTotalValue('totalPacketsReceived');
17082
+ var packetsLost = getTotalValue('totalPacketsLost');
17083
+ var totalBytesReceived = getTotalValue('totalBytesReceived');
17084
+ var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
17085
+ var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
17086
+ var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
17087
+ if (mediaTypeKey) {
17088
+ var _statsResults$mediaTy;
17089
+ audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';
17090
+ } else {
17091
+ audioReceiver.common.common.direction = 'inactive';
17092
+ }
17093
+ audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
17094
+ audioReceiver.common.common.multistreamEnabled = isMultistream;
17095
+ audioReceiver.common.transportType = statsResults.connectionType.local.transport;
17096
+ audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
17097
+ var totalPacketsLost = packetsLost - lastPacketsLost;
17098
+ audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
17099
+ audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
17100
+ var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
17101
+ audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;
17102
+ audioReceiver.common.rtpRecovered = fecRecovered;
17103
+ audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
17104
+ };
17105
+ var getAudioReceiverStreamMqa = _ref2 => {
17106
+ var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8;
17107
+ var {
17108
+ audioReceiverStream,
17109
+ statsResults,
17110
+ lastMqaDataSent,
17111
+ mediaType
17112
+ } = _ref2;
17113
+ var sendrecvType = MediaDirection.RECEIVE;
17114
+ var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;
17115
+ var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;
17116
+ var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;
17117
+ var lastBytesReceived = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].totalBytesReceived) || 0;
17118
+ var lastFecPacketsReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].fecPacketsReceived) || 0;
17119
+ var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsDiscarded) || 0;
17120
+ var lastPacketsReceived = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].totalPacketsReceived) || 0;
17121
+ var lastPacketsLost = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsLost) || 0;
17122
+ var {
17123
+ csi
17124
+ } = statsResults[mediaType];
17125
+ if (csi && !audioReceiverStream.common.csi.includes(csi)) {
17126
+ audioReceiverStream.common.csi.push(csi);
17127
+ }
17128
+ audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
17129
+ audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17130
+ audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17131
+ var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
17132
+ audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
17133
+ audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
17134
+ audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;
17135
+ audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
17136
+ audioReceiverStream.common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;
17137
+ audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
17138
+ };
17139
+ var getAudioSenderMqa = _ref3 => {
17140
+ var {
17141
+ audioSender,
17142
+ statsResults,
17143
+ lastMqaDataSent,
17144
+ baseMediaType,
17145
+ isMultistream
17146
+ } = _ref3;
17147
+ var sendrecvType = MediaDirection.SEND;
17148
+ var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
17149
+ var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
17150
+ var lastPacketsSent = getLastTotalValue('totalPacketsSent');
17151
+ var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
17152
+ var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
17153
+ var totalPacketsSent = getTotalValue('totalPacketsSent');
17154
+ var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
17155
+ var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
17156
+ var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
17157
+ if (mediaTypeKey) {
17158
+ var _statsResults$mediaTy2;
17159
+ audioSender.common.common.direction = ((_statsResults$mediaTy2 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy2 === void 0 ? void 0 : _statsResults$mediaTy2.direction) || 'inactive';
17160
+ } else {
17161
+ audioSender.common.common.direction = 'inactive';
17162
+ }
17163
+ audioSender.common.common.isMain = !baseMediaType.includes('-share');
17164
+ audioSender.common.common.multistreamEnabled = isMultistream;
17165
+ audioSender.common.transportType = statsResults.connectionType.local.transport;
17166
+ audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
17167
+ audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
17168
+ audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
17169
+ audioSender.common.availableBitrate = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'availableOutgoingBitrate');
17170
+ var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
17171
+ audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
17172
+ audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
17173
+ audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
17174
+ audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
17175
+ var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
17176
+ audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
17177
+ };
17178
+ var getAudioSenderStreamMqa = _ref4 => {
17179
+ var _lastMqaDataSent$medi9, _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12;
17180
+ var {
17181
+ audioSenderStream,
17182
+ statsResults,
17183
+ lastMqaDataSent,
17184
+ mediaType
17185
+ } = _ref4;
17186
+ var sendrecvType = MediaDirection.SEND;
17187
+ var lastBytesSent = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalBytesSent) || 0;
17188
+ var lastFramesEncoded = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalKeyFramesEncoded) || 0;
17189
+ var lastFirCount = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalFirCount) || 0;
17190
+ var lastPacketsSent = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalPacketsSent) || 0;
17191
+ var {
17192
+ csi
17193
+ } = statsResults[mediaType];
17194
+ if (csi && !audioSenderStream.common.csi.includes(csi)) {
17195
+ audioSenderStream.common.csi.push(csi);
17196
+ }
17197
+ audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
17198
+ var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
17199
+ audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
17200
+ audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
17201
+ audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
17202
+ audioSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;
17203
+ };
17204
+ var getVideoReceiverMqa = _ref5 => {
17205
+ var {
17206
+ videoReceiver,
17207
+ statsResults,
17208
+ lastMqaDataSent,
17209
+ baseMediaType,
17210
+ isMultistream
17211
+ } = _ref5;
17212
+ var sendrecvType = MediaDirection.RECEIVE;
17213
+ var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
17214
+ var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
17215
+ var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
17216
+ var lastPacketsLost = getLastTotalValue('totalPacketsLost');
17217
+ var lastBytesReceived = getLastTotalValue('totalBytesReceived');
17218
+ var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');
17219
+ var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');
17220
+ var packetsLost = getTotalValue('totalPacketsLost');
17221
+ var totalPacketsReceived = getTotalValue('totalPacketsReceived');
17222
+ var totalBytesReceived = getTotalValue('totalBytesReceived');
17223
+ var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');
17224
+ var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');
17225
+ var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
17226
+ if (mediaTypeKey) {
17227
+ var _statsResults$mediaTy3;
17228
+ videoReceiver.common.common.direction = ((_statsResults$mediaTy3 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy3 === void 0 ? void 0 : _statsResults$mediaTy3.direction) || 'inactive';
17229
+ } else {
17230
+ videoReceiver.common.common.direction = 'inactive';
17231
+ }
17232
+ videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
17233
+ videoReceiver.common.common.multistreamEnabled = isMultistream;
17234
+ videoReceiver.common.transportType = statsResults.connectionType.local.transport;
17235
+ videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
17236
+ var totalPacketsLost = packetsLost - lastPacketsLost;
17237
+ videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
17238
+ videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
17239
+ var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
17240
+ var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;
17241
+ videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
17242
+ videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;
17243
+ videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;
17244
+ };
17245
+ var getVideoReceiverStreamMqa = _ref6 => {
17246
+ var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _statsResults$mediaTy4, _statsResults$mediaTy5;
17247
+ var {
17248
+ videoReceiverStream,
17249
+ statsResults,
17250
+ lastMqaDataSent,
17251
+ mediaType
17252
+ } = _ref6;
17253
+ var sendrecvType = MediaDirection.RECEIVE;
17254
+ var lastPacketsReceived = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsReceived) || 0;
17255
+ var lastPacketsLost = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsLost) || 0;
17256
+ var lastBytesReceived = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalBytesReceived) || 0;
17257
+ var lastFramesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].framesReceived) || 0;
17258
+ var lastFramesDecoded = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesDecoded) || 0;
17259
+ var lastFramesDropped = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDropped) || 0;
17260
+ var lastKeyFramesDecoded = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].keyFramesDecoded) || 0;
17261
+ var lastPliCount = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].totalPliCount) || 0;
17262
+ var {
17263
+ csi
17264
+ } = statsResults[mediaType];
17265
+ if (csi && !videoReceiverStream.common.csi.includes(csi)) {
17266
+ videoReceiverStream.common.csi.push(csi);
17267
+ }
17268
+ videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
17269
+ var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
17270
+ videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
17271
+ videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17272
+ videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17273
+ var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
17274
+ videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
17275
+ var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
17276
+ var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
17277
+ videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
17278
+ videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
17279
+ videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
17280
+ videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
17281
+ videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
17282
+ videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
17283
+ videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
17284
+ videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
17285
+ videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy4 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy4 !== void 0 ? _statsResults$mediaTy4 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy5 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy5 !== void 0 ? _statsResults$mediaTy5 : 0) < MQA_INTERVAL;
17286
+ };
17287
+ var getVideoSenderMqa = _ref7 => {
17288
+ var {
17289
+ videoSender,
17290
+ statsResults,
17291
+ lastMqaDataSent,
17292
+ baseMediaType,
17293
+ isMultistream
17294
+ } = _ref7;
17295
+ var sendrecvType = MediaDirection.SEND;
17296
+ var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
17297
+ var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
17298
+ var lastPacketsSent = getLastTotalValue('totalPacketsSent');
17299
+ var lastBytesSent = getLastTotalValue('totalBytesSent');
17300
+ var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
17301
+ var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');
17302
+ var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');
17303
+ var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
17304
+ var totalPacketsSent = getTotalValue('totalPacketsSent');
17305
+ var totalBytesSent = getTotalValue('totalBytesSent');
17306
+ var availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
17307
+ var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');
17308
+ var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');
17309
+ var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
17310
+ if (mediaTypeKey) {
17311
+ var _statsResults$mediaTy6;
17312
+ videoSender.common.common.direction = ((_statsResults$mediaTy6 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6.direction) || 'inactive';
17313
+ } else {
17314
+ videoSender.common.common.direction = 'inactive';
17315
+ }
17316
+ videoSender.common.common.isMain = !baseMediaType.includes('-share');
17317
+ videoSender.common.common.multistreamEnabled = isMultistream;
17318
+ videoSender.common.transportType = statsResults.connectionType.local.transport;
17319
+ var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
17320
+ var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
17321
+ videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
17322
+ videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
17323
+ videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
17324
+ videoSender.common.availableBitrate = availableOutgoingBitrate;
17325
+ var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
17326
+ videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
17327
+ videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
17328
+ videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
17329
+ videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
17330
+ var totalBytesSentInaMin = totalBytesSent - lastBytesSent;
17331
+ var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;
17332
+ videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
17333
+ videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;
17334
+ videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;
17335
+ };
17336
+ var getVideoSenderStreamMqa = _ref8 => {
17337
+ var _lastMqaDataSent$medi21, _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25;
17338
+ var {
17339
+ videoSenderStream,
17340
+ statsResults,
17341
+ lastMqaDataSent,
17342
+ mediaType
17343
+ } = _ref8;
17344
+ var sendrecvType = MediaDirection.SEND;
17345
+ var lastPacketsSent = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPacketsSent) || 0;
17346
+ var lastBytesSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalBytesSent) || 0;
17347
+ var lastKeyFramesEncoded = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalKeyFramesEncoded) || 0;
17348
+ var lastFirCount = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalFirCount) || 0;
17349
+ var lastFramesSent = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].framesSent) || 0;
17350
+ var {
17351
+ csi
17352
+ } = statsResults[mediaType];
17353
+ if (csi && !videoSenderStream.common.csi.includes(csi)) {
17354
+ videoSenderStream.common.csi.push(csi);
17355
+ }
17356
+ videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
17357
+ var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
17358
+ videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
17359
+ videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
17360
+ videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
17361
+ var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
17362
+ videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
17363
+ videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
17364
+ videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
17365
+ videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
17366
+ videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;
17367
+ videoSenderStream.requestedFrameSize = statsResults[mediaType][sendrecvType].requestedFrameSize || 0;
17368
+ };
17369
+ var isStreamRequested = (statsResults, mediaType, direction) => {
17370
+ var _statsResults$mediaTy7, _statsResults$mediaTy8;
17371
+ var now = performance.timeOrigin + performance.now();
17372
+ var lastUpdateTimestamp = (_statsResults$mediaTy7 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy7 === void 0 ? void 0 : _statsResults$mediaTy7.lastRequestedUpdateTimestamp;
17373
+ var isRequested = (_statsResults$mediaTy8 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy8 === void 0 ? void 0 : _statsResults$mediaTy8.isRequested;
17374
+ return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL;
17375
+ };
17376
+
17377
+ var StatsAnalyzerEventNames;
17378
+ (function (StatsAnalyzerEventNames) {
17379
+ StatsAnalyzerEventNames["MEDIA_QUALITY"] = "MEDIA_QUALITY";
17380
+ StatsAnalyzerEventNames["LOCAL_MEDIA_STARTED"] = "LOCAL_MEDIA_STARTED";
17381
+ StatsAnalyzerEventNames["LOCAL_MEDIA_STOPPED"] = "LOCAL_MEDIA_STOPPED";
17382
+ StatsAnalyzerEventNames["REMOTE_MEDIA_STARTED"] = "REMOTE_MEDIA_STARTED";
17383
+ StatsAnalyzerEventNames["REMOTE_MEDIA_STOPPED"] = "REMOTE_MEDIA_STOPPED";
17384
+ })(StatsAnalyzerEventNames || (StatsAnalyzerEventNames = {}));
17385
+
17386
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17387
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17388
+ class StatsAnalyzer extends EventEmitter$5 {
17389
+ constructor(_ref) {
17390
+ var {
17391
+ config,
17392
+ networkQualityMonitor = {},
17393
+ statsResults = STATS_DEFAULT,
17394
+ isMultistream = false
17395
+ } = _ref;
17396
+ super();
17397
+ _defineProperty(this, "config", void 0);
17398
+ _defineProperty(this, "correlationId", void 0);
17399
+ _defineProperty(this, "lastEmittedStartStopEvents", void 0);
17400
+ _defineProperty(this, "lastMqaDataSent", void 0);
17401
+ _defineProperty(this, "lastStatsResults", void 0);
17402
+ _defineProperty(this, "meetingMediaStatus", void 0);
17403
+ _defineProperty(this, "mqaInterval", void 0);
17404
+ _defineProperty(this, "mqaSentCount", void 0);
17405
+ _defineProperty(this, "networkQualityMonitor", void 0);
17406
+ _defineProperty(this, "mediaConnection", void 0);
17407
+ _defineProperty(this, "statsInterval", void 0);
17408
+ _defineProperty(this, "statsResults", void 0);
17409
+ _defineProperty(this, "statsStarted", void 0);
17410
+ _defineProperty(this, "successfulCandidatePair", void 0);
17411
+ _defineProperty(this, "localIpAddress", void 0);
17412
+ _defineProperty(this, "shareVideoEncoderImplementation", void 0);
17413
+ _defineProperty(this, "isMultistream", void 0);
17414
+ _defineProperty(this, "emitStartStopEvents", (mediaType, previousValue, currentValue, isLocal) => {
17415
+ var _this$lastEmittedStar, _this$lastEmittedStar2;
17416
+ if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
17417
+ throw new Error("Unsupported mediaType: ".concat(mediaType));
17418
+ }
17419
+ if (previousValue === undefined) previousValue = 0;
17420
+ if (currentValue === undefined) currentValue = 0;
17421
+ if (!this.lastEmittedStartStopEvents[mediaType]) {
17422
+ this.lastEmittedStartStopEvents[mediaType] = {};
17423
+ }
17424
+ var lastEmittedEvent = isLocal ? (_this$lastEmittedStar = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar === void 0 ? void 0 : _this$lastEmittedStar.local : (_this$lastEmittedStar2 = this.lastEmittedStartStopEvents[mediaType]) === null || _this$lastEmittedStar2 === void 0 ? void 0 : _this$lastEmittedStar2.remote;
17425
+ var newEvent;
17426
+ if (currentValue - previousValue > 0) {
17427
+ newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;
17428
+ } else if (currentValue === previousValue && currentValue > 0) {
17429
+ newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;
17430
+ }
17431
+ if (newEvent && lastEmittedEvent !== newEvent) {
17432
+ var emittedEvent = this.lastEmittedStartStopEvents[mediaType];
17433
+ if (isLocal) {
17434
+ emittedEvent.local = newEvent;
17435
+ } else {
17436
+ emittedEvent.remote = newEvent;
17437
+ }
17438
+ this.emit(newEvent, {
17439
+ mediaType
17440
+ });
17441
+ }
17442
+ });
17443
+ _defineProperty(this, "extractAndSetLocalIpAddressInfoForDiagnostics", (successfulCandidatePairId, candidates) => {
17444
+ var newIpAddress = '';
17445
+ if (successfulCandidatePairId && Object.keys(candidates).length > 0) {
17446
+ var localCandidate = candidates[successfulCandidatePairId];
17447
+ if (localCandidate) {
17448
+ if (localCandidate.candidateType === 'host') {
17449
+ newIpAddress = "".concat(localCandidate.address);
17450
+ } else if (localCandidate.candidateType === 'prflx') {
17451
+ if (!localCandidate.relayProtocol) {
17452
+ newIpAddress = "".concat(localCandidate.relatedAddress);
17453
+ } else {
17454
+ newIpAddress = "".concat(localCandidate.address);
17455
+ }
17456
+ }
17457
+ }
17458
+ }
17459
+ this.localIpAddress = newIpAddress;
17460
+ });
17461
+ _defineProperty(this, "parseCandidate", (result, type, isSender, isRemote) => {
17462
+ var _this$successfulCandi;
17463
+ if (!result || !result.id) {
17464
+ return;
17465
+ }
17466
+ if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
17467
+ return;
17468
+ }
17469
+ var transport;
17470
+ if (result.relayProtocol) {
17471
+ transport = result.relayProtocol.toUpperCase();
17472
+ } else if (result.protocol) {
17473
+ transport = result.protocol.toUpperCase();
17474
+ }
17475
+ var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;
17476
+ var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;
17477
+ if (!this.statsResults.candidates) {
17478
+ this.statsResults.candidates = {};
17479
+ }
17480
+ this.statsResults.candidates[result.id] = {
17481
+ candidateType: result.candidateType,
17482
+ ipAddress: result.ip,
17483
+ relatedAddress: result.relatedAddress,
17484
+ relatedPort: result.relatedPort,
17485
+ relayProtocol: result.relayProtocol,
17486
+ protocol: result.protocol,
17487
+ address: result.address,
17488
+ portNumber: result.port,
17489
+ networkType: result.networkType,
17490
+ priority: result.priority,
17491
+ transport,
17492
+ timestamp: result.time,
17493
+ id: result.id,
17494
+ type: result.type
17495
+ };
17496
+ this.statsResults.connectionType[ipType].candidateType = result.candidateType;
17497
+ this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
17498
+ this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;
17499
+ this.statsResults.connectionType[ipType].transport = transport;
17500
+ this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
17501
+ });
17502
+ this.statsStarted = false;
17503
+ this.statsResults = statsResults;
17504
+ this.lastStatsResults = null;
17505
+ this.config = config;
17506
+ this.networkQualityMonitor = networkQualityMonitor;
17507
+ this.correlationId = config.correlationId;
17508
+ this.mqaSentCount = -1;
17509
+ this.lastMqaDataSent = {};
17510
+ this.mediaConnection = null;
17511
+ this.lastEmittedStartStopEvents = {};
17512
+ this.successfulCandidatePair = {};
17513
+ this.localIpAddress = '';
17514
+ this.isMultistream = isMultistream;
17515
+ }
17516
+ resetStatsResults() {
17517
+ Object.keys(this.statsResults).forEach(mediaType => {
17518
+ if (mediaType.includes('recv')) {
17519
+ this.statsResults[mediaType].recv.meanRtpJitter = [];
17520
+ }
17521
+ if (mediaType.includes('send')) {
17522
+ this.statsResults[mediaType].send.meanRemoteJitter = [];
17523
+ this.statsResults[mediaType].send.meanRoundTripTime = [];
17524
+ }
17525
+ });
17526
+ }
17527
+ updateMediaStatus(status) {
17528
+ var _this$meetingMediaSta, _this$meetingMediaSta2;
17529
+ this.meetingMediaStatus = {
17530
+ actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
17531
+ expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
17532
+ };
17533
+ }
17534
+ sendMqaData() {
17535
+ var newMqa = structuredClone(emptyMqaInterval);
17536
+ Object.keys(this.statsResults).forEach(mediaType => {
17537
+ if (!this.lastMqaDataSent[mediaType]) {
17538
+ this.lastMqaDataSent[mediaType] = {};
17539
+ }
17540
+ if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
17541
+ this.lastMqaDataSent[mediaType].send = {};
17542
+ }
17543
+ if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
17544
+ this.lastMqaDataSent[mediaType].recv = {};
17545
+ }
17546
+ });
17547
+ var audioSender = structuredClone(emptyAudioTransmit);
17548
+ var audioShareSender = structuredClone(emptyAudioTransmit);
17549
+ var audioReceiver = structuredClone(emptyAudioReceive);
17550
+ var audioShareReceiver = structuredClone(emptyAudioReceive);
17551
+ var videoSender = structuredClone(emptyVideoTransmit);
17552
+ var videoShareSender = structuredClone(emptyVideoTransmit);
17553
+ var videoReceiver = structuredClone(emptyVideoReceive);
17554
+ var videoShareReceiver = structuredClone(emptyVideoReceive);
17555
+ getAudioSenderMqa({
17556
+ audioSender,
17557
+ statsResults: this.statsResults,
17558
+ lastMqaDataSent: this.lastMqaDataSent,
17559
+ baseMediaType: 'audio-send',
17560
+ isMultistream: this.isMultistream
17561
+ });
17562
+ newMqa.audioTransmit.push(audioSender);
17563
+ getAudioSenderMqa({
17564
+ audioSender: audioShareSender,
17565
+ statsResults: this.statsResults,
17566
+ lastMqaDataSent: this.lastMqaDataSent,
17567
+ baseMediaType: 'audio-share-send',
17568
+ isMultistream: this.isMultistream
17569
+ });
17570
+ newMqa.audioTransmit.push(audioShareSender);
17571
+ getAudioReceiverMqa({
17572
+ audioReceiver,
17573
+ statsResults: this.statsResults,
17574
+ lastMqaDataSent: this.lastMqaDataSent,
17575
+ baseMediaType: 'audio-recv',
17576
+ isMultistream: this.isMultistream
17577
+ });
17578
+ newMqa.audioReceive.push(audioReceiver);
17579
+ getAudioReceiverMqa({
17580
+ audioReceiver: audioShareReceiver,
17581
+ statsResults: this.statsResults,
17582
+ lastMqaDataSent: this.lastMqaDataSent,
17583
+ baseMediaType: 'audio-share-recv',
17584
+ isMultistream: this.isMultistream
17585
+ });
17586
+ newMqa.audioReceive.push(audioShareReceiver);
17587
+ getVideoSenderMqa({
17588
+ videoSender,
17589
+ statsResults: this.statsResults,
17590
+ lastMqaDataSent: this.lastMqaDataSent,
17591
+ baseMediaType: 'video-send',
17592
+ isMultistream: this.isMultistream
17593
+ });
17594
+ newMqa.videoTransmit.push(videoSender);
17595
+ getVideoSenderMqa({
17596
+ videoSender: videoShareSender,
17597
+ statsResults: this.statsResults,
17598
+ lastMqaDataSent: this.lastMqaDataSent,
17599
+ baseMediaType: 'video-share-send',
17600
+ isMultistream: this.isMultistream
17601
+ });
17602
+ newMqa.videoTransmit.push(videoShareSender);
17603
+ getVideoReceiverMqa({
17604
+ videoReceiver,
17605
+ statsResults: this.statsResults,
17606
+ lastMqaDataSent: this.lastMqaDataSent,
17607
+ baseMediaType: 'video-recv',
17608
+ isMultistream: this.isMultistream
17609
+ });
17610
+ newMqa.videoReceive.push(videoReceiver);
17611
+ getVideoReceiverMqa({
17612
+ videoReceiver: videoShareReceiver,
17613
+ statsResults: this.statsResults,
17614
+ lastMqaDataSent: this.lastMqaDataSent,
17615
+ baseMediaType: 'video-share-recv',
17616
+ isMultistream: this.isMultistream
17617
+ });
17618
+ newMqa.videoReceive.push(videoShareReceiver);
17619
+ Object.keys(this.statsResults).forEach(mediaType => {
17620
+ if (mediaType.startsWith('audio-send')) {
17621
+ var audioSenderStream = structuredClone(emptyAudioTransmitStream);
17622
+ getAudioSenderStreamMqa({
17623
+ audioSenderStream,
17624
+ statsResults: this.statsResults,
17625
+ lastMqaDataSent: this.lastMqaDataSent,
17626
+ mediaType
17627
+ });
17628
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
17629
+ newMqa.audioTransmit[0].streams.push(audioSenderStream);
17630
+ }
17631
+ this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
17632
+ } else if (mediaType.startsWith('audio-share-send')) {
17633
+ var _audioSenderStream = structuredClone(emptyAudioTransmitStream);
17634
+ getAudioSenderStreamMqa({
17635
+ audioSenderStream: _audioSenderStream,
17636
+ statsResults: this.statsResults,
17637
+ lastMqaDataSent: this.lastMqaDataSent,
17638
+ mediaType
17639
+ });
17640
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
17641
+ newMqa.audioTransmit[1].streams.push(_audioSenderStream);
17642
+ }
17643
+ this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
17644
+ } else if (mediaType.startsWith('audio-recv')) {
17645
+ var audioReceiverStream = structuredClone(emptyAudioReceiveStream);
17646
+ getAudioReceiverStreamMqa({
17647
+ audioReceiverStream,
17648
+ statsResults: this.statsResults,
17649
+ lastMqaDataSent: this.lastMqaDataSent,
17650
+ mediaType
17651
+ });
17652
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
17653
+ newMqa.audioReceive[0].streams.push(audioReceiverStream);
17654
+ }
17655
+ this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
17656
+ } else if (mediaType.startsWith('audio-share-recv')) {
17657
+ var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);
17658
+ getAudioReceiverStreamMqa({
17659
+ audioReceiverStream: _audioReceiverStream,
17660
+ statsResults: this.statsResults,
17661
+ lastMqaDataSent: this.lastMqaDataSent,
17662
+ mediaType
17663
+ });
17664
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
17665
+ newMqa.audioReceive[1].streams.push(_audioReceiverStream);
17666
+ }
17667
+ this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
17668
+ } else if (mediaType.startsWith('video-send-layer')) {
17669
+ var videoSenderStream = structuredClone(emptyVideoTransmitStream);
17670
+ getVideoSenderStreamMqa({
17671
+ videoSenderStream,
17672
+ statsResults: this.statsResults,
17673
+ lastMqaDataSent: this.lastMqaDataSent,
17674
+ mediaType
17675
+ });
17676
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
17677
+ newMqa.videoTransmit[0].streams.push(videoSenderStream);
17678
+ }
17679
+ this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
17680
+ } else if (mediaType.startsWith('video-share-send')) {
17681
+ var _videoSenderStream = structuredClone(emptyVideoTransmitStream);
17682
+ getVideoSenderStreamMqa({
17683
+ videoSenderStream: _videoSenderStream,
17684
+ statsResults: this.statsResults,
17685
+ lastMqaDataSent: this.lastMqaDataSent,
17686
+ mediaType
17687
+ });
17688
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.SEND)) {
17689
+ newMqa.videoTransmit[1].streams.push(_videoSenderStream);
17690
+ }
17691
+ this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
17692
+ } else if (mediaType.startsWith('video-recv')) {
17693
+ var videoReceiverStream = structuredClone(emptyVideoReceiveStream);
17694
+ getVideoReceiverStreamMqa({
17695
+ videoReceiverStream,
17696
+ statsResults: this.statsResults,
17697
+ lastMqaDataSent: this.lastMqaDataSent,
17698
+ mediaType
17699
+ });
17700
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
17701
+ newMqa.videoReceive[0].streams.push(videoReceiverStream);
17702
+ }
17703
+ this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
17704
+ } else if (mediaType.startsWith('video-share-recv')) {
17705
+ var _videoReceiverStream = structuredClone(emptyVideoReceiveStream);
17706
+ getVideoReceiverStreamMqa({
17707
+ videoReceiverStream: _videoReceiverStream,
17708
+ statsResults: this.statsResults,
17709
+ lastMqaDataSent: this.lastMqaDataSent,
17710
+ mediaType
17711
+ });
17712
+ if (isStreamRequested(this.statsResults, mediaType, MediaDirection.RECEIVE)) {
17713
+ newMqa.videoReceive[1].streams.push(_videoReceiverStream);
17714
+ }
17715
+ this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
17716
+ }
17717
+ });
17718
+ newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
17719
+ newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;
17720
+ newMqa.intervalMetadata.peripherals.push({
17721
+ information: _UNKNOWN_,
17722
+ name: MediaDevices.SPEAKER
17723
+ });
17724
+ if (this.statsResults['audio-send']) {
17725
+ newMqa.intervalMetadata.peripherals.push({
17726
+ information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,
17727
+ name: MediaDevices.MICROPHONE
17728
+ });
17729
+ }
17730
+ var existingVideoSender = Object.keys(this.statsResults).find(item => item.includes('video-send'));
17731
+ if (existingVideoSender) {
17732
+ newMqa.intervalMetadata.peripherals.push({
17733
+ information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,
17734
+ name: MediaDevices.CAMERA
17735
+ });
17736
+ }
17737
+ newMqa.networkType = this.statsResults.connectionType.local.networkType;
17738
+ newMqa.intervalMetadata.screenWidth = window.screen.width;
17739
+ newMqa.intervalMetadata.screenHeight = window.screen.height;
17740
+ newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);
17741
+ newMqa.intervalMetadata.appWindowWidth = window.innerWidth;
17742
+ newMqa.intervalMetadata.appWindowHeight = window.innerHeight;
17743
+ newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);
17744
+ this.mqaSentCount += 1;
17745
+ newMqa.intervalNumber = this.mqaSentCount;
17746
+ this.resetStatsResults();
17747
+ this.emit(StatsAnalyzerEventNames.MEDIA_QUALITY, {
17748
+ data: newMqa
17749
+ });
17750
+ }
17751
+ getLocalIpAddress() {
17752
+ return this.localIpAddress;
17753
+ }
17754
+ startAnalyzer(mediaConnection) {
17755
+ if (!this.statsStarted) {
17756
+ this.statsStarted = true;
17757
+ this.mediaConnection = mediaConnection;
17758
+ return this.getStatsAndParse().then(() => {
17759
+ this.statsInterval = setInterval(() => {
17760
+ this.getStatsAndParse();
17761
+ }, this.config.analyzerInterval);
17762
+ this.sendMqaData();
17763
+ this.mqaInterval = setInterval(() => {
17764
+ this.sendMqaData();
17765
+ }, MQA_INTERVAL);
17766
+ });
17767
+ }
17768
+ return Promise.resolve();
17769
+ }
17770
+ stopAnalyzer() {
17771
+ var sendOneLastMqa = this.mqaInterval && this.statsInterval;
17772
+ if (this.statsInterval) {
17773
+ clearInterval(this.statsInterval);
17774
+ this.statsInterval = undefined;
17775
+ }
17776
+ if (this.mqaInterval) {
17777
+ clearInterval(this.mqaInterval);
17778
+ this.mqaInterval = undefined;
17779
+ }
17780
+ if (sendOneLastMqa) {
17781
+ return this.getStatsAndParse().then(() => {
17782
+ this.sendMqaData();
17783
+ this.mediaConnection = null;
17784
+ });
17785
+ }
17786
+ return Promise.resolve();
17787
+ }
17788
+ parseGetStatsResult(getStatsResult, type, isSender) {
17789
+ if (!getStatsResult) {
17790
+ return;
17791
+ }
17792
+ if (!this.statsResults[type]) {
17793
+ this.statsResults[type] = {};
17794
+ }
17795
+ if (isSender && !this.statsResults[type].send) {
17796
+ this.statsResults[type].send = structuredClone(emptySender);
17797
+ } else if (!isSender && !this.statsResults[type].recv) {
17798
+ this.statsResults[type].recv = structuredClone(emptyReceiver);
17799
+ }
17800
+ switch (getStatsResult.type) {
17801
+ case 'outbound-rtp':
17802
+ this.processOutboundRTPResult(getStatsResult, type);
17803
+ break;
17804
+ case 'inbound-rtp':
17805
+ this.processInboundRTPResult(getStatsResult, type);
17806
+ break;
17807
+ case 'remote-inbound-rtp':
17808
+ case 'remote-outbound-rtp':
17809
+ this.compareSentAndReceived(getStatsResult, type);
17810
+ break;
17811
+ case 'remotecandidate':
17812
+ case 'remote-candidate':
17813
+ this.parseCandidate(getStatsResult, type, isSender, true);
17814
+ break;
17815
+ case 'local-candidate':
17816
+ this.parseCandidate(getStatsResult, type, isSender, false);
17817
+ break;
17818
+ case 'media-source':
17819
+ this.parseAudioSource(getStatsResult, type);
17820
+ break;
17821
+ }
17822
+ }
17823
+ filterAndParseGetStatsResults(statsItem, type, isSender) {
17824
+ var {
17825
+ types
17826
+ } = DEFAULT_GET_STATS_FILTER;
17827
+ statsItem.report.forEach(report => {
17828
+ if (report.type === 'candidate-pair' && report.state === 'succeeded') {
17829
+ this.successfulCandidatePair = report;
17830
+ }
17831
+ });
17832
+ var videoSenderIndex = 0;
17833
+ statsItem.report.forEach(result => {
17834
+ if (types.includes(result.type)) {
17835
+ if (type === 'video-send' && result.type === 'outbound-rtp') {
17836
+ var newType = "video-send-layer-".concat(videoSenderIndex);
17837
+ this.parseGetStatsResult(result, newType, isSender);
17838
+ videoSenderIndex += 1;
17839
+ this.statsResults[newType].direction = statsItem.currentDirection;
17840
+ this.statsResults[newType].trackLabel = statsItem.localTrackLabel;
17841
+ this.statsResults[newType].csi = statsItem.csi;
17842
+ } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {
17843
+ this.shareVideoEncoderImplementation = result.encoderImplementation;
17844
+ this.parseGetStatsResult(result, type, isSender);
17845
+ } else {
17846
+ this.parseGetStatsResult(result, type, isSender);
17847
+ }
17848
+ }
17849
+ });
17850
+ if (this.statsResults[type]) {
17851
+ var _this$successfulCandi2, _this$statsResults;
17852
+ this.statsResults[type].direction = statsItem.currentDirection;
17853
+ this.statsResults[type].trackLabel = statsItem.localTrackLabel;
17854
+ this.statsResults[type].csi = statsItem.csi;
17855
+ this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
17856
+ this.successfulCandidatePair = {};
17857
+ }
17858
+ }
17859
+ parseAudioSource(result, type) {
17860
+ if (!result) {
17861
+ return;
17862
+ }
17863
+ if (type.includes('audio-send')) {
17864
+ this.statsResults[type].send.audioLevel = result.audioLevel;
17865
+ this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
17866
+ }
17867
+ }
17868
+ compareLastStatsResult() {
17869
+ if (this.lastStatsResults !== null && this.meetingMediaStatus) {
17870
+ var getCurrentStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
17871
+ var _this$statsResults$cu;
17872
+ return prev + (((_this$statsResults$cu = this.statsResults[cur]) === null || _this$statsResults$cu === void 0 ? void 0 : _this$statsResults$cu[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
17873
+ }, 0);
17874
+ var getPreviousStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
17875
+ var _this$lastStatsResult, _this$lastStatsResult2;
17876
+ return prev + (((_this$lastStatsResult = this.lastStatsResults) === null || _this$lastStatsResult === void 0 ? void 0 : (_this$lastStatsResult2 = _this$lastStatsResult[cur]) === null || _this$lastStatsResult2 === void 0 ? void 0 : _this$lastStatsResult2[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
17877
+ }, 0);
17878
+ if (this.lastStatsResults['audio-send']) {
17879
+ var currentStats = this.statsResults['audio-send'].send;
17880
+ var previousStats = this.lastStatsResults['audio-send'].send;
17881
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
17882
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
17883
+ } else {
17884
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
17885
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
17886
+ }
17887
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
17888
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
17889
+ }
17890
+ }
17891
+ this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
17892
+ }
17893
+ var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
17894
+ var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
17895
+ this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
17896
+ var currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');
17897
+ var previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');
17898
+ var currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');
17899
+ var previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');
17900
+ var currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');
17901
+ var previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');
17902
+ var doesVideoSendExist = Object.keys(this.lastStatsResults).some(item => item.includes('video-send'));
17903
+ if (doesVideoSendExist) {
17904
+ if (this.meetingMediaStatus.expected.sendVideo && (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)) {
17905
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", currentTotalPacketsSent);
17906
+ } else {
17907
+ if (this.meetingMediaStatus.expected.sendVideo && (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)) {
17908
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", currentFramesEncoded);
17909
+ }
17910
+ if (this.meetingMediaStatus.expected.sendVideo && (currentFramesSent === previousFramesSent || currentFramesSent === 0)) {
17911
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", currentFramesSent);
17912
+ }
17913
+ }
17914
+ this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);
17915
+ }
17916
+ var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
17917
+ var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
17918
+ this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
17919
+ if (this.lastStatsResults['video-share-send']) {
17920
+ var _currentStats = this.statsResults['video-share-send'].send;
17921
+ var _previousStats = this.lastStatsResults['video-share-send'].send;
17922
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
17923
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats.totalPacketsSent);
17924
+ } else {
17925
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
17926
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats.framesEncoded);
17927
+ }
17928
+ if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
17929
+ getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
17930
+ }
17931
+ }
17932
+ this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);
17933
+ }
17934
+ var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
17935
+ var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
17936
+ this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
17937
+ }
17938
+ }
17939
+ getStatsAndParse() {
17940
+ if (!this.mediaConnection) {
17941
+ return Promise.resolve();
17942
+ }
17943
+ if (this.mediaConnection && this.mediaConnection.getConnectionState() === ConnectionState.Failed) {
17944
+ getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
17945
+ return Promise.resolve();
17946
+ }
17947
+ getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
17948
+ return this.mediaConnection.getTransceiverStats().then(transceiverStats => {
17949
+ transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false));
17950
+ transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false));
17951
+ transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false));
17952
+ transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false));
17953
+ transceiverStats.video.senders.forEach((sender, i) => {
17954
+ if (i > 0) {
17955
+ throw new Error('Stats Analyzer does not support multiple senders.');
17956
+ }
17957
+ this.filterAndParseGetStatsResults(sender, 'video-send', true);
17958
+ });
17959
+ transceiverStats.audio.senders.forEach((sender, i) => {
17960
+ if (i > 0) {
17961
+ throw new Error('Stats Analyzer does not support multiple senders.');
17962
+ }
17963
+ this.filterAndParseGetStatsResults(sender, 'audio-send', true);
17964
+ });
17965
+ transceiverStats.screenShareVideo.senders.forEach((sender, i) => {
17966
+ if (i > 0) {
17967
+ throw new Error('Stats Analyzer does not support multiple senders.');
17968
+ }
17969
+ this.filterAndParseGetStatsResults(sender, 'video-share-send', true);
17970
+ });
17971
+ transceiverStats.screenShareAudio.senders.forEach((sender, i) => {
17972
+ if (i > 0) {
17973
+ throw new Error('Stats Analyzer does not support multiple senders.');
17974
+ }
17975
+ this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
17976
+ });
17977
+ this.compareLastStatsResult();
17978
+ this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
17979
+ getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
17980
+ });
17981
+ }
17982
+ processOutboundRTPResult(result, mediaType) {
17983
+ var sendrecvType = MediaDirection.SEND;
17984
+ if (result.bytesSent) {
17985
+ var kilobytes = 0;
17986
+ if (result.frameWidth && result.frameHeight) {
17987
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
17988
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
17989
+ this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
17990
+ this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
17991
+ }
17992
+ this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
17993
+ this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
17994
+ this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
17995
+ this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
17996
+ this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
17997
+ this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
17998
+ this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
17999
+ this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;
18000
+ this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
18001
+ this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
18002
+ this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
18003
+ this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
18004
+ this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
18005
+ this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
18006
+ this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;
18007
+ this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;
18008
+ this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
18009
+ this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
18010
+ this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
18011
+ this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
18012
+ this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
18013
+ this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
18014
+ this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
18015
+ }
18016
+ }
18017
+ processInboundRTPResult(result, mediaType) {
18018
+ var sendrecvType = MediaDirection.RECEIVE;
18019
+ if (result.bytesReceived) {
18020
+ var kilobytes = 0;
18021
+ var sourceState = result.sourceState;
18022
+ var midAndCsi = "mid: \"".concat(result.mid || '', "\"").concat(result.csi ? " and csi: ".concat(result.csi) : '');
18023
+ var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
18024
+ kilobytes = bytes / 1024;
18025
+ this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
18026
+ var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
18027
+ if (currentPacketsLost < 0) {
18028
+ currentPacketsLost = 0;
18029
+ }
18030
+ var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
18031
+ this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
18032
+ if (packetsReceivedDiff === 0) {
18033
+ if (sourceState === 'live') {
18034
+ getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total packets received on slot: "), result.packetsReceived);
18035
+ }
18036
+ }
18037
+ if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
18038
+ var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
18039
+ if (videoFramesReceivedDiff === 0) {
18040
+ if (sourceState === 'live') {
18041
+ getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames received on slot: "), result.framesReceived);
18042
+ }
18043
+ }
18044
+ var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
18045
+ if (videoFramesDecodedDiff === 0) {
18046
+ if (sourceState === 'live') {
18047
+ getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
18048
+ }
18049
+ }
18050
+ var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
18051
+ if (videoFramesDroppedDiff > 10) {
18052
+ if (sourceState === 'live') {
18053
+ getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
18054
+ }
18055
+ }
18056
+ }
18057
+ if (mediaType.startsWith('video-recv')) {
18058
+ this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;
18059
+ this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;
18060
+ }
18061
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
18062
+ if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
18063
+ getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
18064
+ }
18065
+ if (result.frameWidth && result.frameHeight) {
18066
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
18067
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
18068
+ this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
18069
+ }
18070
+ if (result.packetsLost) {
18071
+ this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
18072
+ } else {
18073
+ this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
18074
+ }
18075
+ this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
18076
+ this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
18077
+ this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
18078
+ this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
18079
+ this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
18080
+ this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
18081
+ this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
18082
+ this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
18083
+ this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
18084
+ this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
18085
+ this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
18086
+ this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
18087
+ this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
18088
+ this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
18089
+ this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;
18090
+ this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;
18091
+ this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
18092
+ this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
18093
+ this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
18094
+ this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
18095
+ this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
18096
+ this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
18097
+ this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
18098
+ this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
18099
+ }
18100
+ }
18101
+ compareSentAndReceived(result, type) {
18102
+ if (!type || !this.statsResults[type].send) {
18103
+ return;
18104
+ }
18105
+ var mediaType = type;
18106
+ var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
18107
+ this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
18108
+ this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
18109
+ this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
18110
+ this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
18111
+ this.statsResults[mediaType].send.timestamp = result.timestamp;
18112
+ this.statsResults[mediaType].send.ssrc = result.ssrc;
18113
+ this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
18114
+ this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
18115
+ this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
18116
+ if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
18117
+ this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
18118
+ }
18119
+ if (result.type === 'remote-inbound-rtp') {
18120
+ this.networkQualityMonitor.determineUplinkNetworkQuality({
18121
+ mediaType,
18122
+ remoteRtpResults: result,
18123
+ statsAnalyzerCurrentStats: this.statsResults
18124
+ });
18125
+ }
18126
+ }
18127
+ }
18128
+
15357
18129
  var Media = {
15358
18130
  createAudioTrack: createAudioTrack,
15359
18131
  createVideoTrack: createVideoTrack,
@@ -15371,4 +18143,4 @@ var Media = {
15371
18143
  }
15372
18144
  };
15373
18145
 
15374
- export { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraStream, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };
18146
+ export { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, H264Codec, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaConnectionEventNames, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StatsAnalyzer, StatsAnalyzerEventNames, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraStream, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };