@webex/internal-media-core 1.39.1 → 2.0.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.
package/dist/esm/index.js CHANGED
@@ -169,7 +169,7 @@ function noop() {}
169
169
 
170
170
  var on$1 = noop;
171
171
  var addListener = noop;
172
- var once$3 = noop;
172
+ var once$4 = noop;
173
173
  var off$1 = noop;
174
174
  var removeListener = noop;
175
175
  var removeAllListeners = noop;
@@ -228,7 +228,7 @@ var browser$1 = {
228
228
  versions: versions,
229
229
  on: on$1,
230
230
  addListener: addListener,
231
- once: once$3,
231
+ once: once$4,
232
232
  off: off$1,
233
233
  removeListener: removeListener,
234
234
  removeAllListeners: removeAllListeners,
@@ -244,7 +244,7 @@ var browser$1 = {
244
244
  uptime: uptime
245
245
  };
246
246
 
247
- var commonjsGlobal$4 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
247
+ var commonjsGlobal$3 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
248
248
 
249
249
  var DetectRTC = {exports: {}};
250
250
 
@@ -272,14 +272,14 @@ var DetectRTC = {exports: {}};
272
272
  if (typeof window !== 'undefined') {
273
273
  return;
274
274
  }
275
- if (typeof window === 'undefined' && typeof commonjsGlobal$4 !== 'undefined') {
276
- commonjsGlobal$4.navigator = {
275
+ if (typeof window === 'undefined' && typeof commonjsGlobal$3 !== 'undefined') {
276
+ commonjsGlobal$3.navigator = {
277
277
  userAgent: browserFakeUserAgent,
278
278
  getUserMedia: function getUserMedia() {}
279
279
  };
280
280
 
281
281
  /*global window:true */
282
- that.window = commonjsGlobal$4;
282
+ that.window = commonjsGlobal$3;
283
283
  }
284
284
  if (typeof location === 'undefined') {
285
285
  /*global location:true */
@@ -296,7 +296,7 @@ var DetectRTC = {exports: {}};
296
296
  height: 0
297
297
  };
298
298
  }
299
- })(typeof commonjsGlobal$4 !== 'undefined' ? commonjsGlobal$4 : window);
299
+ })(typeof commonjsGlobal$3 !== 'undefined' ? commonjsGlobal$3 : window);
300
300
 
301
301
  /*global navigator:true */
302
302
  var navigator = window.navigator;
@@ -1286,14 +1286,14 @@ var log$3 = (level, args) => {
1286
1286
  console.log(logFormat(level, args));
1287
1287
  }
1288
1288
  };
1289
- var logger$5 = {
1289
+ var logger$4 = {
1290
1290
  info: args => log$3('info', args),
1291
1291
  warn: args => log$3('warn', args),
1292
1292
  error: args => log$3('error', args),
1293
1293
  debug: args => log$3('debug', args)
1294
1294
  };
1295
1295
  var _loop = function _loop(level) {
1296
- logger$5[level] = logInfo => {
1296
+ logger$4[level] = logInfo => {
1297
1297
  var {
1298
1298
  ID,
1299
1299
  mediaType,
@@ -1323,27 +1323,27 @@ var domain;
1323
1323
  function EventHandlers() {}
1324
1324
  EventHandlers.prototype = Object.create(null);
1325
1325
 
1326
- function EventEmitter$4() {
1327
- EventEmitter$4.init.call(this);
1326
+ function EventEmitter$6() {
1327
+ EventEmitter$6.init.call(this);
1328
1328
  }
1329
1329
 
1330
1330
  // nodejs oddity
1331
1331
  // require('events') === require('events').EventEmitter
1332
- EventEmitter$4.EventEmitter = EventEmitter$4;
1332
+ EventEmitter$6.EventEmitter = EventEmitter$6;
1333
1333
 
1334
- EventEmitter$4.usingDomains = false;
1334
+ EventEmitter$6.usingDomains = false;
1335
1335
 
1336
- EventEmitter$4.prototype.domain = undefined;
1337
- EventEmitter$4.prototype._events = undefined;
1338
- EventEmitter$4.prototype._maxListeners = undefined;
1336
+ EventEmitter$6.prototype.domain = undefined;
1337
+ EventEmitter$6.prototype._events = undefined;
1338
+ EventEmitter$6.prototype._maxListeners = undefined;
1339
1339
 
1340
1340
  // By default EventEmitters will print a warning if more than 10 listeners are
1341
1341
  // added to it. This is a useful default which helps finding memory leaks.
1342
- EventEmitter$4.defaultMaxListeners = 10;
1342
+ EventEmitter$6.defaultMaxListeners = 10;
1343
1343
 
1344
- EventEmitter$4.init = function() {
1344
+ EventEmitter$6.init = function() {
1345
1345
  this.domain = null;
1346
- if (EventEmitter$4.usingDomains) {
1346
+ if (EventEmitter$6.usingDomains) {
1347
1347
  // if there is an active domain, then attach to it.
1348
1348
  if (domain.active ) ;
1349
1349
  }
@@ -1358,7 +1358,7 @@ EventEmitter$4.init = function() {
1358
1358
 
1359
1359
  // Obviously not all Emitters should be limited to 10. This function allows
1360
1360
  // that to be increased. Set to zero for unlimited.
1361
- EventEmitter$4.prototype.setMaxListeners = function setMaxListeners(n) {
1361
+ EventEmitter$6.prototype.setMaxListeners = function setMaxListeners(n) {
1362
1362
  if (typeof n !== 'number' || n < 0 || isNaN(n))
1363
1363
  throw new TypeError('"n" argument must be a positive number');
1364
1364
  this._maxListeners = n;
@@ -1367,11 +1367,11 @@ EventEmitter$4.prototype.setMaxListeners = function setMaxListeners(n) {
1367
1367
 
1368
1368
  function $getMaxListeners(that) {
1369
1369
  if (that._maxListeners === undefined)
1370
- return EventEmitter$4.defaultMaxListeners;
1370
+ return EventEmitter$6.defaultMaxListeners;
1371
1371
  return that._maxListeners;
1372
1372
  }
1373
1373
 
1374
- EventEmitter$4.prototype.getMaxListeners = function getMaxListeners() {
1374
+ EventEmitter$6.prototype.getMaxListeners = function getMaxListeners() {
1375
1375
  return $getMaxListeners(this);
1376
1376
  };
1377
1377
 
@@ -1385,7 +1385,7 @@ function emitNone(handler, isFn, self) {
1385
1385
  handler.call(self);
1386
1386
  else {
1387
1387
  var len = handler.length;
1388
- var listeners = arrayClone$2(handler, len);
1388
+ var listeners = arrayClone$3(handler, len);
1389
1389
  for (var i = 0; i < len; ++i)
1390
1390
  listeners[i].call(self);
1391
1391
  }
@@ -1395,7 +1395,7 @@ function emitOne(handler, isFn, self, arg1) {
1395
1395
  handler.call(self, arg1);
1396
1396
  else {
1397
1397
  var len = handler.length;
1398
- var listeners = arrayClone$2(handler, len);
1398
+ var listeners = arrayClone$3(handler, len);
1399
1399
  for (var i = 0; i < len; ++i)
1400
1400
  listeners[i].call(self, arg1);
1401
1401
  }
@@ -1405,7 +1405,7 @@ function emitTwo(handler, isFn, self, arg1, arg2) {
1405
1405
  handler.call(self, arg1, arg2);
1406
1406
  else {
1407
1407
  var len = handler.length;
1408
- var listeners = arrayClone$2(handler, len);
1408
+ var listeners = arrayClone$3(handler, len);
1409
1409
  for (var i = 0; i < len; ++i)
1410
1410
  listeners[i].call(self, arg1, arg2);
1411
1411
  }
@@ -1415,7 +1415,7 @@ function emitThree(handler, isFn, self, arg1, arg2, arg3) {
1415
1415
  handler.call(self, arg1, arg2, arg3);
1416
1416
  else {
1417
1417
  var len = handler.length;
1418
- var listeners = arrayClone$2(handler, len);
1418
+ var listeners = arrayClone$3(handler, len);
1419
1419
  for (var i = 0; i < len; ++i)
1420
1420
  listeners[i].call(self, arg1, arg2, arg3);
1421
1421
  }
@@ -1426,13 +1426,13 @@ function emitMany(handler, isFn, self, args) {
1426
1426
  handler.apply(self, args);
1427
1427
  else {
1428
1428
  var len = handler.length;
1429
- var listeners = arrayClone$2(handler, len);
1429
+ var listeners = arrayClone$3(handler, len);
1430
1430
  for (var i = 0; i < len; ++i)
1431
1431
  listeners[i].apply(self, args);
1432
1432
  }
1433
1433
  }
1434
1434
 
1435
- EventEmitter$4.prototype.emit = function emit(type) {
1435
+ EventEmitter$6.prototype.emit = function emit(type) {
1436
1436
  var er, handler, len, args, i, events, domain;
1437
1437
  var doError = (type === 'error');
1438
1438
 
@@ -1497,7 +1497,7 @@ EventEmitter$4.prototype.emit = function emit(type) {
1497
1497
  return true;
1498
1498
  };
1499
1499
 
1500
- function _addListener$2(target, type, listener, prepend) {
1500
+ function _addListener$3(target, type, listener, prepend) {
1501
1501
  var m;
1502
1502
  var events;
1503
1503
  var existing;
@@ -1563,18 +1563,18 @@ function _addListener$2(target, type, listener, prepend) {
1563
1563
  function emitWarning(e) {
1564
1564
  typeof console.warn === 'function' ? console.warn(e) : console.log(e);
1565
1565
  }
1566
- EventEmitter$4.prototype.addListener = function addListener(type, listener) {
1567
- return _addListener$2(this, type, listener, false);
1566
+ EventEmitter$6.prototype.addListener = function addListener(type, listener) {
1567
+ return _addListener$3(this, type, listener, false);
1568
1568
  };
1569
1569
 
1570
- EventEmitter$4.prototype.on = EventEmitter$4.prototype.addListener;
1570
+ EventEmitter$6.prototype.on = EventEmitter$6.prototype.addListener;
1571
1571
 
1572
- EventEmitter$4.prototype.prependListener =
1572
+ EventEmitter$6.prototype.prependListener =
1573
1573
  function prependListener(type, listener) {
1574
- return _addListener$2(this, type, listener, true);
1574
+ return _addListener$3(this, type, listener, true);
1575
1575
  };
1576
1576
 
1577
- function _onceWrap$2(target, type, listener) {
1577
+ function _onceWrap$3(target, type, listener) {
1578
1578
  var fired = false;
1579
1579
  function g() {
1580
1580
  target.removeListener(type, g);
@@ -1587,23 +1587,23 @@ function _onceWrap$2(target, type, listener) {
1587
1587
  return g;
1588
1588
  }
1589
1589
 
1590
- EventEmitter$4.prototype.once = function once(type, listener) {
1590
+ EventEmitter$6.prototype.once = function once(type, listener) {
1591
1591
  if (typeof listener !== 'function')
1592
1592
  throw new TypeError('"listener" argument must be a function');
1593
- this.on(type, _onceWrap$2(this, type, listener));
1593
+ this.on(type, _onceWrap$3(this, type, listener));
1594
1594
  return this;
1595
1595
  };
1596
1596
 
1597
- EventEmitter$4.prototype.prependOnceListener =
1597
+ EventEmitter$6.prototype.prependOnceListener =
1598
1598
  function prependOnceListener(type, listener) {
1599
1599
  if (typeof listener !== 'function')
1600
1600
  throw new TypeError('"listener" argument must be a function');
1601
- this.prependListener(type, _onceWrap$2(this, type, listener));
1601
+ this.prependListener(type, _onceWrap$3(this, type, listener));
1602
1602
  return this;
1603
1603
  };
1604
1604
 
1605
1605
  // emits a 'removeListener' event iff the listener was removed
1606
- EventEmitter$4.prototype.removeListener =
1606
+ EventEmitter$6.prototype.removeListener =
1607
1607
  function removeListener(type, listener) {
1608
1608
  var list, events, position, i, originalListener;
1609
1609
 
@@ -1650,7 +1650,7 @@ EventEmitter$4.prototype.removeListener =
1650
1650
  delete events[type];
1651
1651
  }
1652
1652
  } else {
1653
- spliceOne$2(list, position);
1653
+ spliceOne$3(list, position);
1654
1654
  }
1655
1655
 
1656
1656
  if (events.removeListener)
@@ -1662,11 +1662,11 @@ EventEmitter$4.prototype.removeListener =
1662
1662
 
1663
1663
  // Alias for removeListener added in NodeJS 10.0
1664
1664
  // https://nodejs.org/api/events.html#events_emitter_off_eventname_listener
1665
- EventEmitter$4.prototype.off = function(type, listener){
1665
+ EventEmitter$6.prototype.off = function(type, listener){
1666
1666
  return this.removeListener(type, listener);
1667
1667
  };
1668
1668
 
1669
- EventEmitter$4.prototype.removeAllListeners =
1669
+ EventEmitter$6.prototype.removeAllListeners =
1670
1670
  function removeAllListeners(type) {
1671
1671
  var listeners, events;
1672
1672
 
@@ -1716,7 +1716,7 @@ EventEmitter$4.prototype.removeAllListeners =
1716
1716
  return this;
1717
1717
  };
1718
1718
 
1719
- EventEmitter$4.prototype.listeners = function listeners(type) {
1719
+ EventEmitter$6.prototype.listeners = function listeners(type) {
1720
1720
  var evlistener;
1721
1721
  var ret;
1722
1722
  var events = this._events;
@@ -1730,22 +1730,22 @@ EventEmitter$4.prototype.listeners = function listeners(type) {
1730
1730
  else if (typeof evlistener === 'function')
1731
1731
  ret = [evlistener.listener || evlistener];
1732
1732
  else
1733
- ret = unwrapListeners$2(evlistener);
1733
+ ret = unwrapListeners$3(evlistener);
1734
1734
  }
1735
1735
 
1736
1736
  return ret;
1737
1737
  };
1738
1738
 
1739
- EventEmitter$4.listenerCount = function(emitter, type) {
1739
+ EventEmitter$6.listenerCount = function(emitter, type) {
1740
1740
  if (typeof emitter.listenerCount === 'function') {
1741
1741
  return emitter.listenerCount(type);
1742
1742
  } else {
1743
- return listenerCount$2.call(emitter, type);
1743
+ return listenerCount$3.call(emitter, type);
1744
1744
  }
1745
1745
  };
1746
1746
 
1747
- EventEmitter$4.prototype.listenerCount = listenerCount$2;
1748
- function listenerCount$2(type) {
1747
+ EventEmitter$6.prototype.listenerCount = listenerCount$3;
1748
+ function listenerCount$3(type) {
1749
1749
  var events = this._events;
1750
1750
 
1751
1751
  if (events) {
@@ -1761,25 +1761,25 @@ function listenerCount$2(type) {
1761
1761
  return 0;
1762
1762
  }
1763
1763
 
1764
- EventEmitter$4.prototype.eventNames = function eventNames() {
1764
+ EventEmitter$6.prototype.eventNames = function eventNames() {
1765
1765
  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
1766
1766
  };
1767
1767
 
1768
1768
  // About 1.5x faster than the two-arg version of Array#splice().
1769
- function spliceOne$2(list, index) {
1769
+ function spliceOne$3(list, index) {
1770
1770
  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
1771
1771
  list[i] = list[k];
1772
1772
  list.pop();
1773
1773
  }
1774
1774
 
1775
- function arrayClone$2(arr, i) {
1775
+ function arrayClone$3(arr, i) {
1776
1776
  var copy = new Array(i);
1777
1777
  while (i--)
1778
1778
  copy[i] = arr[i];
1779
1779
  return copy;
1780
1780
  }
1781
1781
 
1782
- function unwrapListeners$2(arr) {
1782
+ function unwrapListeners$3(arr) {
1783
1783
  var ret = new Array(arr.length);
1784
1784
  for (var i = 0; i < ret.length; ++i) {
1785
1785
  ret[i] = arr[i].listener || arr[i];
@@ -1815,7 +1815,7 @@ class Device {
1815
1815
  }
1816
1816
 
1817
1817
  function getTrackSettings(track) {
1818
- logger$5.debug({
1818
+ logger$4.debug({
1819
1819
  ID: track.id,
1820
1820
  mediaType: MEDIA_STREAM_TRACK,
1821
1821
  action: 'getTrackSettings()',
@@ -1823,7 +1823,7 @@ function getTrackSettings(track) {
1823
1823
  });
1824
1824
  var settings = track.getSettings();
1825
1825
  if (settings) {
1826
- logger$5.debug({
1826
+ logger$4.debug({
1827
1827
  ID: track.id,
1828
1828
  mediaType: MEDIA_STREAM_TRACK,
1829
1829
  action: 'getTrackSettings()',
@@ -1832,7 +1832,7 @@ function getTrackSettings(track) {
1832
1832
  return settings;
1833
1833
  }
1834
1834
  var error = new Error('Unable to get track settings');
1835
- logger$5.info({
1835
+ logger$4.info({
1836
1836
  ID: track.id,
1837
1837
  mediaType: MEDIA_STREAM_TRACK,
1838
1838
  action: 'getTrackSettings()',
@@ -1855,7 +1855,7 @@ var TrackKind;
1855
1855
  TrackKind["VIDEO"] = "video";
1856
1856
  })(TrackKind || (TrackKind = {}));
1857
1857
  var _mediaStreamTrack = /*#__PURE__*/new WeakMap();
1858
- class Track extends EventEmitter$4 {
1858
+ class Track extends EventEmitter$6 {
1859
1859
  constructor(mediaStreamTrack) {
1860
1860
  super();
1861
1861
  _defineProperty(this, "ID", void 0);
@@ -1888,13 +1888,13 @@ class Track extends EventEmitter$4 {
1888
1888
  var _this = this;
1889
1889
  return _asyncToGenerator(function* () {
1890
1890
  var _constraints$deviceId, _constraints$deviceId2, _constraints$deviceId5;
1891
- logger$5.debug({
1891
+ logger$4.debug({
1892
1892
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId = constraints.deviceId) === null || _constraints$deviceId === void 0 ? void 0 : _constraints$deviceId.toString(),
1893
1893
  mediaType: DEVICE,
1894
1894
  action: 'applyConstraints()',
1895
1895
  description: "Called with ".concat(JSON.stringify(constraints))
1896
1896
  });
1897
- logger$5.info({
1897
+ logger$4.info({
1898
1898
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId2 = constraints.deviceId) === null || _constraints$deviceId2 === void 0 ? void 0 : _constraints$deviceId2.toString(),
1899
1899
  mediaType: DEVICE,
1900
1900
  action: 'applyConstraints()',
@@ -1905,7 +1905,7 @@ class Track extends EventEmitter$4 {
1905
1905
  for (var thisConstraint of Object.keys(constraints)) {
1906
1906
  if (!supportedConstraints[thisConstraint]) {
1907
1907
  var _constraints$deviceId3;
1908
- logger$5.debug({
1908
+ logger$4.debug({
1909
1909
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId3 = constraints.deviceId) === null || _constraints$deviceId3 === void 0 ? void 0 : _constraints$deviceId3.toString(),
1910
1910
  mediaType: DEVICE,
1911
1911
  action: 'applyConstraints()',
@@ -1917,7 +1917,7 @@ class Track extends EventEmitter$4 {
1917
1917
  if (notSupportedConstraints.length > 0) {
1918
1918
  var _constraints$deviceId4;
1919
1919
  console.warn("#TrackObject Unsupported constraints - ".concat(notSupportedConstraints.join(', ')));
1920
- logger$5.debug({
1920
+ logger$4.debug({
1921
1921
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId4 = constraints.deviceId) === null || _constraints$deviceId4 === void 0 ? void 0 : _constraints$deviceId4.toString(),
1922
1922
  mediaType: DEVICE,
1923
1923
  action: 'applyConstraints()',
@@ -1926,7 +1926,7 @@ class Track extends EventEmitter$4 {
1926
1926
  return false;
1927
1927
  }
1928
1928
  yield _classPrivateFieldGet(_this, _mediaStreamTrack).applyConstraints(constraints);
1929
- logger$5.debug({
1929
+ logger$4.debug({
1930
1930
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId5 = constraints.deviceId) === null || _constraints$deviceId5 === void 0 ? void 0 : _constraints$deviceId5.toString(),
1931
1931
  mediaType: DEVICE,
1932
1932
  action: 'applyConstraints()',
@@ -1936,18 +1936,18 @@ class Track extends EventEmitter$4 {
1936
1936
  })();
1937
1937
  }
1938
1938
  getSettings() {
1939
- logger$5.debug({
1939
+ logger$4.debug({
1940
1940
  mediaType: MEDIA,
1941
1941
  action: 'getSettings()',
1942
1942
  description: 'Called'
1943
1943
  });
1944
- logger$5.info({
1944
+ logger$4.info({
1945
1945
  mediaType: MEDIA,
1946
1946
  action: 'getSettings()',
1947
1947
  description: 'Fetching constraints properties for the current media stream track'
1948
1948
  });
1949
1949
  var settings = getTrackSettings(_classPrivateFieldGet(this, _mediaStreamTrack));
1950
- logger$5.debug({
1950
+ logger$4.debug({
1951
1951
  mediaType: MEDIA,
1952
1952
  action: 'getSettings()',
1953
1953
  description: "Received settings ".concat(JSON.stringify(settings))
@@ -1955,13 +1955,13 @@ class Track extends EventEmitter$4 {
1955
1955
  return settings;
1956
1956
  }
1957
1957
  getMediaStreamTrack() {
1958
- logger$5.debug({
1958
+ logger$4.debug({
1959
1959
  mediaType: MEDIA,
1960
1960
  action: 'getMediaStreamTrack()',
1961
1961
  description: 'Called'
1962
1962
  });
1963
1963
  var mediaStreamTrack = _classPrivateFieldGet(this, _mediaStreamTrack);
1964
- logger$5.debug({
1964
+ logger$4.debug({
1965
1965
  mediaType: MEDIA,
1966
1966
  action: 'getMediaStreamTrack()',
1967
1967
  description: "Received media stream track ".concat(JSON.stringify(mediaStreamTrack))
@@ -1970,12 +1970,12 @@ class Track extends EventEmitter$4 {
1970
1970
  }
1971
1971
  }
1972
1972
 
1973
- var eventEmitter = new EventEmitter$4();
1973
+ var eventEmitter = new EventEmitter$6();
1974
1974
  var deviceList = [];
1975
1975
  var getDevices$1 = /*#__PURE__*/function () {
1976
1976
  var _ref = _asyncToGenerator(function* () {
1977
1977
  var _navigator$mediaDevic;
1978
- logger$5.debug({
1978
+ logger$4.debug({
1979
1979
  mediaType: DEVICE,
1980
1980
  action: 'getDevices()',
1981
1981
  description: 'Called'
@@ -1984,7 +1984,7 @@ var getDevices$1 = /*#__PURE__*/function () {
1984
1984
  console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');
1985
1985
  return [];
1986
1986
  }
1987
- logger$5.info({
1987
+ logger$4.info({
1988
1988
  mediaType: DEVICE,
1989
1989
  action: 'getDevices()',
1990
1990
  description: 'Requesting list of available media input and output devices'
@@ -1997,13 +1997,13 @@ var getDevices$1 = /*#__PURE__*/function () {
1997
1997
  }();
1998
1998
  var getCameras = /*#__PURE__*/function () {
1999
1999
  var _ref2 = _asyncToGenerator(function* () {
2000
- logger$5.debug({
2000
+ logger$4.debug({
2001
2001
  mediaType: DEVICE,
2002
2002
  action: 'getCameras()',
2003
2003
  description: 'Called'
2004
2004
  });
2005
2005
  var devices = yield getDevices$1();
2006
- logger$5.info({
2006
+ logger$4.info({
2007
2007
  mediaType: DEVICE,
2008
2008
  action: 'getCameras()',
2009
2009
  description: 'Filtering camera devices from all available media devices'
@@ -2014,7 +2014,7 @@ var getCameras = /*#__PURE__*/function () {
2014
2014
  } = _ref3;
2015
2015
  return kind === DeviceKinds.VIDEO_INPUT;
2016
2016
  }).map(device => {
2017
- logger$5.debug({
2017
+ logger$4.debug({
2018
2018
  ID: device.deviceId,
2019
2019
  mediaType: DEVICE,
2020
2020
  action: 'getCameras()',
@@ -2029,13 +2029,13 @@ var getCameras = /*#__PURE__*/function () {
2029
2029
  }();
2030
2030
  var getMicrophones = /*#__PURE__*/function () {
2031
2031
  var _ref4 = _asyncToGenerator(function* () {
2032
- logger$5.debug({
2032
+ logger$4.debug({
2033
2033
  mediaType: DEVICE,
2034
2034
  action: 'getMicrophones()',
2035
2035
  description: 'Called'
2036
2036
  });
2037
2037
  var devices = yield getDevices$1();
2038
- logger$5.info({
2038
+ logger$4.info({
2039
2039
  mediaType: DEVICE,
2040
2040
  action: 'getMicrophones()',
2041
2041
  description: 'Filtering microphones devices from all available media devices'
@@ -2046,7 +2046,7 @@ var getMicrophones = /*#__PURE__*/function () {
2046
2046
  } = _ref5;
2047
2047
  return kind === DeviceKinds.AUDIO_INPUT;
2048
2048
  }).map(device => {
2049
- logger$5.debug({
2049
+ logger$4.debug({
2050
2050
  ID: device.deviceId,
2051
2051
  mediaType: DEVICE,
2052
2052
  action: 'getMicrophones()',
@@ -2061,13 +2061,13 @@ var getMicrophones = /*#__PURE__*/function () {
2061
2061
  }();
2062
2062
  var getSpeakers = /*#__PURE__*/function () {
2063
2063
  var _ref6 = _asyncToGenerator(function* () {
2064
- logger$5.debug({
2064
+ logger$4.debug({
2065
2065
  mediaType: DEVICE,
2066
2066
  action: 'getSpeakers()',
2067
2067
  description: 'Called'
2068
2068
  });
2069
2069
  var devices = yield getDevices$1();
2070
- logger$5.info({
2070
+ logger$4.info({
2071
2071
  mediaType: DEVICE,
2072
2072
  action: 'getSpeakers()',
2073
2073
  description: 'Filtering speaker devices from all available media devices'
@@ -2078,7 +2078,7 @@ var getSpeakers = /*#__PURE__*/function () {
2078
2078
  } = _ref7;
2079
2079
  return kind === DeviceKinds.AUDIO_OUTPUT;
2080
2080
  }).map(device => {
2081
- logger$5.debug({
2081
+ logger$4.debug({
2082
2082
  ID: device.deviceId,
2083
2083
  mediaType: DEVICE,
2084
2084
  action: 'getSpeakers()',
@@ -2092,12 +2092,12 @@ var getSpeakers = /*#__PURE__*/function () {
2092
2092
  };
2093
2093
  }();
2094
2094
  function getUnsupportedConstraints(mediaConstraints) {
2095
- logger$5.debug({
2095
+ logger$4.debug({
2096
2096
  mediaType: MEDIA,
2097
2097
  action: 'getUnsupportedConstraints()',
2098
2098
  description: "Called with ".concat(JSON.stringify(mediaConstraints))
2099
2099
  });
2100
- logger$5.info({
2100
+ logger$4.info({
2101
2101
  mediaType: MEDIA,
2102
2102
  action: 'getUnsupportedConstraints()',
2103
2103
  description: 'Filtering list of media track unsupported constraints'
@@ -2109,7 +2109,7 @@ function getUnsupportedConstraints(mediaConstraints) {
2109
2109
  unsupportedConstraints.push(constraint);
2110
2110
  }
2111
2111
  });
2112
- logger$5.debug({
2112
+ logger$4.debug({
2113
2113
  mediaType: MEDIA,
2114
2114
  action: 'getUnsupportedConstraints()',
2115
2115
  description: "Received unsupported constraints ".concat(unsupportedConstraints)
@@ -2121,7 +2121,7 @@ function createAudioTrack(_x) {
2121
2121
  }
2122
2122
  function _createAudioTrack() {
2123
2123
  _createAudioTrack = _asyncToGenerator(function* (device) {
2124
- logger$5.debug({
2124
+ logger$4.debug({
2125
2125
  ID: device === null || device === void 0 ? void 0 : device.ID,
2126
2126
  mediaType: DEVICE,
2127
2127
  action: 'createAudioTrack()',
@@ -2129,7 +2129,7 @@ function _createAudioTrack() {
2129
2129
  });
2130
2130
  if (device && device.kind !== DeviceKinds.AUDIO_INPUT) {
2131
2131
  var _error = new Error("Device ".concat(device.ID, " is not of kind AUDIO_INPUT"));
2132
- logger$5.error({
2132
+ logger$4.error({
2133
2133
  ID: device.ID,
2134
2134
  mediaType: 'DEVICE',
2135
2135
  action: 'createAudioTrack()',
@@ -2138,7 +2138,7 @@ function _createAudioTrack() {
2138
2138
  });
2139
2139
  throw _error;
2140
2140
  }
2141
- logger$5.info({
2141
+ logger$4.info({
2142
2142
  ID: device === null || device === void 0 ? void 0 : device.ID,
2143
2143
  mediaType: DEVICE,
2144
2144
  action: 'createAudioTrack()',
@@ -2157,7 +2157,7 @@ function _createAudioTrack() {
2157
2157
  var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);
2158
2158
  var track = stream.getAudioTracks()[0];
2159
2159
  if (track) {
2160
- logger$5.debug({
2160
+ logger$4.debug({
2161
2161
  ID: device === null || device === void 0 ? void 0 : device.ID,
2162
2162
  mediaType: DEVICE,
2163
2163
  action: 'createAudioTrack()',
@@ -2166,7 +2166,7 @@ function _createAudioTrack() {
2166
2166
  return new Track(track);
2167
2167
  }
2168
2168
  var error = new Error("Device could not obtain an audio track of kind ".concat(device === null || device === void 0 ? void 0 : device.kind));
2169
- logger$5.error({
2169
+ logger$4.error({
2170
2170
  ID: device === null || device === void 0 ? void 0 : device.ID,
2171
2171
  mediaType: 'DEVICE',
2172
2172
  action: 'createAudioTrack()',
@@ -2182,7 +2182,7 @@ function createVideoTrack(_x2) {
2182
2182
  }
2183
2183
  function _createVideoTrack() {
2184
2184
  _createVideoTrack = _asyncToGenerator(function* (device) {
2185
- logger$5.debug({
2185
+ logger$4.debug({
2186
2186
  ID: device === null || device === void 0 ? void 0 : device.ID,
2187
2187
  mediaType: DEVICE,
2188
2188
  action: 'createVideoTrack()',
@@ -2190,7 +2190,7 @@ function _createVideoTrack() {
2190
2190
  });
2191
2191
  if (device && device.kind !== DeviceKinds.VIDEO_INPUT) {
2192
2192
  var _error2 = new Error("Device ".concat(device.ID, " is not of kind VIDEO_INPUT"));
2193
- logger$5.error({
2193
+ logger$4.error({
2194
2194
  ID: device.ID,
2195
2195
  mediaType: 'DEVICE',
2196
2196
  action: 'createVideoTrack()',
@@ -2199,7 +2199,7 @@ function _createVideoTrack() {
2199
2199
  });
2200
2200
  throw _error2;
2201
2201
  }
2202
- logger$5.info({
2202
+ logger$4.info({
2203
2203
  ID: device === null || device === void 0 ? void 0 : device.ID,
2204
2204
  mediaType: DEVICE,
2205
2205
  action: 'createVideoTrack()',
@@ -2218,7 +2218,7 @@ function _createVideoTrack() {
2218
2218
  var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);
2219
2219
  var track = stream.getVideoTracks()[0];
2220
2220
  if (track) {
2221
- logger$5.debug({
2221
+ logger$4.debug({
2222
2222
  ID: device === null || device === void 0 ? void 0 : device.ID,
2223
2223
  mediaType: DEVICE,
2224
2224
  action: 'createVideoTrack()',
@@ -2227,7 +2227,7 @@ function _createVideoTrack() {
2227
2227
  return new Track(track);
2228
2228
  }
2229
2229
  var error = new Error("Device could not obtain a video track of kind ".concat(device === null || device === void 0 ? void 0 : device.kind));
2230
- logger$5.error({
2230
+ logger$4.error({
2231
2231
  ID: device === null || device === void 0 ? void 0 : device.ID,
2232
2232
  mediaType: 'DEVICE',
2233
2233
  action: 'createVideoTrack()',
@@ -2244,13 +2244,13 @@ function createContentTrack(_x3) {
2244
2244
  function _createContentTrack() {
2245
2245
  _createContentTrack = _asyncToGenerator(function* (mediaConstraints) {
2246
2246
  var _mediaConstraints$dev, _mediaConstraints$dev2, _mediaConstraints$dev7;
2247
- logger$5.debug({
2247
+ logger$4.debug({
2248
2248
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev = mediaConstraints.deviceId) === null || _mediaConstraints$dev === void 0 ? void 0 : _mediaConstraints$dev.toString(),
2249
2249
  mediaType: DEVICE,
2250
2250
  action: 'createContentTrack()',
2251
2251
  description: "Called ".concat(mediaConstraints ? "with ".concat(JSON.stringify(mediaConstraints)) : '', " ")
2252
2252
  });
2253
- logger$5.info({
2253
+ logger$4.info({
2254
2254
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev2 = mediaConstraints.deviceId) === null || _mediaConstraints$dev2 === void 0 ? void 0 : _mediaConstraints$dev2.toString(),
2255
2255
  mediaType: MEDIA,
2256
2256
  action: 'createContentTrack()',
@@ -2268,7 +2268,7 @@ function _createContentTrack() {
2268
2268
  } catch (error) {
2269
2269
  if (error instanceof Error) {
2270
2270
  var _mediaConstraints$dev3;
2271
- logger$5.error({
2271
+ logger$4.error({
2272
2272
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev3 = mediaConstraints.deviceId) === null || _mediaConstraints$dev3 === void 0 ? void 0 : _mediaConstraints$dev3.toString(),
2273
2273
  mediaType: 'DEVICE',
2274
2274
  action: 'createContentTrack()',
@@ -2283,7 +2283,7 @@ function _createContentTrack() {
2283
2283
  if (unsupportedConstraints.length <= 0) {
2284
2284
  var _mediaConstraints$dev4;
2285
2285
  track.applyConstraints(mediaConstraints);
2286
- logger$5.debug({
2286
+ logger$4.debug({
2287
2287
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev4 = mediaConstraints.deviceId) === null || _mediaConstraints$dev4 === void 0 ? void 0 : _mediaConstraints$dev4.toString(),
2288
2288
  mediaType: DEVICE,
2289
2289
  action: 'createContentTrack()',
@@ -2292,7 +2292,7 @@ function _createContentTrack() {
2292
2292
  } else {
2293
2293
  var _mediaConstraints$dev5;
2294
2294
  var _error3 = new Error("".concat(unsupportedConstraints.join(', '), " constraint is not supported by browser"));
2295
- logger$5.error({
2295
+ logger$4.error({
2296
2296
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev5 = mediaConstraints.deviceId) === null || _mediaConstraints$dev5 === void 0 ? void 0 : _mediaConstraints$dev5.toString(),
2297
2297
  mediaType: 'DEVICE',
2298
2298
  action: 'createContentTrack()',
@@ -2304,7 +2304,7 @@ function _createContentTrack() {
2304
2304
  }
2305
2305
  if (track) {
2306
2306
  var _mediaConstraints$dev6;
2307
- logger$5.debug({
2307
+ logger$4.debug({
2308
2308
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev6 = mediaConstraints.deviceId) === null || _mediaConstraints$dev6 === void 0 ? void 0 : _mediaConstraints$dev6.toString(),
2309
2309
  mediaType: DEVICE,
2310
2310
  action: 'createContentTrack()',
@@ -2313,7 +2313,7 @@ function _createContentTrack() {
2313
2313
  return new Track(track);
2314
2314
  }
2315
2315
  var error = new Error('Could not obtain a content track');
2316
- logger$5.error({
2316
+ logger$4.error({
2317
2317
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev7 = mediaConstraints.deviceId) === null || _mediaConstraints$dev7 === void 0 ? void 0 : _mediaConstraints$dev7.toString(),
2318
2318
  mediaType: 'DEVICE',
2319
2319
  action: 'createContentTrack()',
@@ -2330,7 +2330,7 @@ function deviceChangePublisher() {
2330
2330
  function _deviceChangePublisher() {
2331
2331
  _deviceChangePublisher = _asyncToGenerator(function* () {
2332
2332
  var _navigator$mediaDevic2;
2333
- logger$5.debug({
2333
+ logger$4.debug({
2334
2334
  mediaType: DEVICE,
2335
2335
  action: 'deviceChangePublisher()',
2336
2336
  description: 'Called'
@@ -2339,7 +2339,7 @@ function _deviceChangePublisher() {
2339
2339
  console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');
2340
2340
  return;
2341
2341
  }
2342
- logger$5.info({
2342
+ logger$4.info({
2343
2343
  mediaType: DEVICE,
2344
2344
  action: 'deviceChangePublisher()',
2345
2345
  description: 'Calling individual subscription listener obtained by device change event'
@@ -2371,7 +2371,7 @@ function on(_x4, _x5) {
2371
2371
  }
2372
2372
  function _on() {
2373
2373
  _on = _asyncToGenerator(function* (eventName, listener) {
2374
- logger$5.debug({
2374
+ logger$4.debug({
2375
2375
  mediaType: MEDIA,
2376
2376
  action: 'on()',
2377
2377
  description: "Subscribing to an ".concat(eventName, ",").concat(listener)
@@ -2386,7 +2386,7 @@ function _on() {
2386
2386
  return _on.apply(this, arguments);
2387
2387
  }
2388
2388
  var off = (eventName, listener) => {
2389
- logger$5.debug({
2389
+ logger$4.debug({
2390
2390
  mediaType: MEDIA,
2391
2391
  action: 'off()',
2392
2392
  description: "Called ".concat(eventName, " with ").concat(listener, " listener")
@@ -2408,7 +2408,7 @@ function isValidTrack(track) {
2408
2408
  } = settings;
2409
2409
  if (sampleRate && !supportedSampleRates.includes(sampleRate)) {
2410
2410
  var error = new Error("Sample rate of ".concat(sampleRate, " is not supported."));
2411
- logger$5.error({
2411
+ logger$4.error({
2412
2412
  ID: track.id,
2413
2413
  mediaType: MEDIA_STREAM_TRACK,
2414
2414
  action: 'isValidTrack()',
@@ -2421,7 +2421,7 @@ function isValidTrack(track) {
2421
2421
  }
2422
2422
  } else {
2423
2423
  var _error = new Error('Not supported');
2424
- logger$5.info({
2424
+ logger$4.info({
2425
2425
  ID: track.id,
2426
2426
  mediaType: MEDIA_STREAM_TRACK,
2427
2427
  action: 'isValidTrack()',
@@ -2436,7 +2436,7 @@ function loadProcessor() {
2436
2436
  }
2437
2437
  function _loadProcessor() {
2438
2438
  _loadProcessor = _asyncToGenerator(function* () {
2439
- logger$5.info({
2439
+ logger$4.info({
2440
2440
  mediaType: MEDIA_STREAM_TRACK,
2441
2441
  action: 'loadProcessor()',
2442
2442
  description: 'Creating and loading BNR module'
@@ -2455,7 +2455,7 @@ function enableBNR(_x) {
2455
2455
  }
2456
2456
  function _enableBNR() {
2457
2457
  _enableBNR = _asyncToGenerator(function* (track) {
2458
- logger$5.debug({
2458
+ logger$4.debug({
2459
2459
  ID: track.id,
2460
2460
  mediaType: MEDIA_STREAM_TRACK,
2461
2461
  action: 'enableBNR()',
@@ -2466,7 +2466,7 @@ function _enableBNR() {
2466
2466
  var streamFromTrack = new MediaStream();
2467
2467
  streamFromTrack.addTrack(track);
2468
2468
  var workletNode;
2469
- logger$5.info({
2469
+ logger$4.info({
2470
2470
  ID: track.id,
2471
2471
  mediaType: MEDIA_STREAM_TRACK,
2472
2472
  action: 'enableBNR()',
@@ -2476,7 +2476,7 @@ function _enableBNR() {
2476
2476
  if (oldDestinationTrack && track.id === oldDestinationTrack.id) {
2477
2477
  var oldTrackErrorMsg = 'BNR is enabled on the track already';
2478
2478
  var oldTrackError = new Error(oldTrackErrorMsg);
2479
- logger$5.error({
2479
+ logger$4.error({
2480
2480
  ID: track.id,
2481
2481
  mediaType: MEDIA_STREAM_TRACK,
2482
2482
  action: 'enableBNR()',
@@ -2486,7 +2486,7 @@ function _enableBNR() {
2486
2486
  throw oldTrackError;
2487
2487
  }
2488
2488
  if (bnrProcessor.isModuleAdded) {
2489
- logger$5.debug({
2489
+ logger$4.debug({
2490
2490
  ID: track.id,
2491
2491
  mediaType: MEDIA_STREAM_TRACK,
2492
2492
  action: 'enableBNR()',
@@ -2495,7 +2495,7 @@ function _enableBNR() {
2495
2495
  workletNode = bnrProcessor.workletNode;
2496
2496
  workletNode.port.postMessage('DISPOSE');
2497
2497
  }
2498
- logger$5.info({
2498
+ logger$4.info({
2499
2499
  ID: track.id,
2500
2500
  mediaType: MEDIA_STREAM_TRACK,
2501
2501
  action: 'enableBNR()',
@@ -2508,7 +2508,7 @@ function _enableBNR() {
2508
2508
  bnrProcessor.sourceNode.connect(workletNode);
2509
2509
  bnrProcessor.destinationStream = audioContext.createMediaStreamDestination();
2510
2510
  workletNode.connect(bnrProcessor.destinationStream);
2511
- logger$5.info({
2511
+ logger$4.info({
2512
2512
  ID: track.id,
2513
2513
  mediaType: MEDIA_STREAM_TRACK,
2514
2514
  action: 'enableBNR()',
@@ -2519,7 +2519,7 @@ function _enableBNR() {
2519
2519
  bnrProcessor.destinationTrack = destinationTrack;
2520
2520
  return destinationTrack;
2521
2521
  } catch (error) {
2522
- logger$5.error({
2522
+ logger$4.error({
2523
2523
  ID: track.id,
2524
2524
  mediaType: MEDIA_STREAM_TRACK,
2525
2525
  action: 'enableBNR()',
@@ -2532,28 +2532,28 @@ function _enableBNR() {
2532
2532
  return _enableBNR.apply(this, arguments);
2533
2533
  }
2534
2534
  function disableBNR() {
2535
- logger$5.debug({
2535
+ logger$4.debug({
2536
2536
  mediaType: MEDIA_STREAM_TRACK,
2537
2537
  action: 'disableBNR()',
2538
2538
  description: 'Called'
2539
2539
  });
2540
2540
  try {
2541
2541
  var workletNode;
2542
- logger$5.info({
2542
+ logger$4.info({
2543
2543
  mediaType: MEDIA_STREAM_TRACK,
2544
2544
  action: 'disableBNR()',
2545
2545
  description: 'Checking if BNR is enabled before disabling'
2546
2546
  });
2547
2547
  if (!bnrProcessor.isModuleAdded) {
2548
2548
  var error = new Error('Can not disable as BNR is not enabled');
2549
- logger$5.error({
2549
+ logger$4.error({
2550
2550
  mediaType: MEDIA_STREAM_TRACK,
2551
2551
  action: 'disableBNR()',
2552
2552
  description: 'Can not disable as BNR is not enabled'
2553
2553
  });
2554
2554
  throw error;
2555
2555
  } else {
2556
- logger$5.info({
2556
+ logger$4.info({
2557
2557
  mediaType: MEDIA_STREAM_TRACK,
2558
2558
  action: 'disableBNR()',
2559
2559
  description: 'Using existing AudioWorkletNode for disabling BNR'
@@ -2561,7 +2561,7 @@ function disableBNR() {
2561
2561
  workletNode = bnrProcessor.workletNode;
2562
2562
  }
2563
2563
  workletNode.port.postMessage('DISPOSE');
2564
- logger$5.info({
2564
+ logger$4.info({
2565
2565
  mediaType: MEDIA_STREAM_TRACK,
2566
2566
  action: 'disableBNR()',
2567
2567
  description: 'Obtaining raw media stream track and removing bnr context'
@@ -2576,7 +2576,7 @@ function disableBNR() {
2576
2576
  delete bnrProcessor.destinationTrack;
2577
2577
  return track;
2578
2578
  } catch (error) {
2579
- logger$5.error({
2579
+ logger$4.error({
2580
2580
  mediaType: MEDIA_STREAM_TRACK,
2581
2581
  action: 'disableBNR()',
2582
2582
  description: 'Error in disableBNR',
@@ -2678,7 +2678,7 @@ var Error$1 = /*#__PURE__*/Object.freeze({
2678
2678
  SdpOfferHandlingError: SdpOfferHandlingError
2679
2679
  });
2680
2680
 
2681
- class EventEmitter$3 extends EventEmitter$4 {}
2681
+ class EventEmitter$5 extends EventEmitter$6 {}
2682
2682
 
2683
2683
  function _mergeNamespaces$1(n,m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function get(){return e[k];}});}});});return Object.freeze(n);}/******************************************************************************
2684
2684
  Copyright (c) Microsoft Corporation.
@@ -2795,7 +2795,7 @@ return devices.filter(device=>deviceKinds.includes(device.kind)).every(device=>d
2795
2795
  // (Firefox) will allow the user to access device information.
2796
2796
  var callbackRes=yield callback();// Stop tracks in the stream so the browser (Safari) will know that there is not an active
2797
2797
  // stream running.
2798
- stream.getTracks().forEach(track=>track.stop());return callbackRes;}return callback();}catch(e){logger$3.error(e);throw new Error('Failed to ensure device permissions.');}});}var media=/*#__PURE__*/Object.freeze({__proto__:null,get DeviceKind(){return DeviceKind;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var ErrorTypes;(function(ErrorTypes){ErrorTypes["DEVICE_PERMISSION_DENIED"]="DEVICE_PERMISSION_DENIED";ErrorTypes["CREATE_CAMERA_TRACK_FAILED"]="CREATE_CAMERA_TRACK_FAILED";ErrorTypes["CREATE_MICROPHONE_TRACK_FAILED"]="CREATE_MICROPHONE_TRACK_FAILED";})(ErrorTypes||(ErrorTypes={}));/**
2798
+ stream.getTracks().forEach(track=>track.stop());return callbackRes;}return callback();}catch(e){logger$3.error(e);throw new Error('Failed to ensure device permissions.');}});}var media=/*#__PURE__*/Object.freeze({__proto__:null,get DeviceKind(){return DeviceKind;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var ErrorTypes;(function(ErrorTypes){ErrorTypes["DEVICE_PERMISSION_DENIED"]="DEVICE_PERMISSION_DENIED";ErrorTypes["CREATE_STREAM_FAILED"]="CREATE_CAMERA_STREAM";})(ErrorTypes||(ErrorTypes={}));/**
2799
2799
  * Represents a WCME error, which contains error type and error message.
2800
2800
  */class WcmeError{/**
2801
2801
  * Creates new error.
@@ -2803,37 +2803,38 @@ stream.getTracks().forEach(track=>track.stop());return callbackRes;}return callb
2803
2803
  * @param type - Error type.
2804
2804
  * @param message - Error message.
2805
2805
  */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**
2806
- * Creates a camera video track. Please note that the constraint params in second getUserMedia call would NOT take effect when:
2806
+ * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:
2807
2807
  *
2808
- * 1. Previous captured video track from the same device is not stopped .
2809
- * 2. Previous createCameraTrack() call for the same device is in progress.
2808
+ * 1. Previous captured video stream from the same device is not stopped.
2809
+ * 2. Previous createCameraStream() call for the same device is in progress.
2810
2810
  *
2811
- * @param constructor - Constructor for the local camera track.
2811
+ * @param constructor - Constructor for the local camera stream.
2812
2812
  * @param constraints - Video device constraints.
2813
- * @returns A LocalTrack object or an error.
2814
- */function createCameraTrack(constructor,constraints){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WcmeError(ErrorTypes.CREATE_CAMERA_TRACK_FAILED,"Failed to create camera track ".concat(error));}return new constructor(stream);});}/**
2815
- * Creates a microphone audio track.
2813
+ * @returns A LocalCameraStream object or an error.
2814
+ */function createCameraStream(constructor,constraints){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WcmeError(ErrorTypes.CREATE_STREAM_FAILED,"Failed to create camera stream: ".concat(error));}return new constructor(stream);});}/**
2815
+ * Creates a LocalMicrophoneStream with the given constraints.
2816
2816
  *
2817
- * @param constructor - Constructor for the local microphone track.
2817
+ * @param constructor - Constructor for the local microphone stream.
2818
2818
  * @param constraints - Audio device constraints.
2819
- * @returns A LocalTrack object or an error.
2820
- */function createMicrophoneTrack(constructor,constraints){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WcmeError(ErrorTypes.CREATE_MICROPHONE_TRACK_FAILED,"Failed to create microphone track ".concat(error));}return new constructor(stream);});}/**
2821
- * Creates a display video track.
2819
+ * @returns A LocalMicrophoneStream object or an error.
2820
+ */function createMicrophoneStream(constructor,constraints){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WcmeError(ErrorTypes.CREATE_STREAM_FAILED,"Failed to create microphone stream: ".concat(error));}return new constructor(stream);});}/**
2821
+ * Creates a LocalDisplayStream with the given parameters.
2822
2822
  *
2823
- * @param constructor - Constructor for the local display track.
2824
- * @param videoContentHint - An optional parameters to give a hint for the content of the track.
2825
- * @returns A Promise that resolves to a LocalDisplayTrack.
2826
- */function createDisplayTrack(constructor,videoContentHint){return __awaiter$1(this,void 0,void 0,function*(){var stream=yield getDisplayMedia({video:true});return new constructor(stream,videoContentHint);});}/**
2827
- * Creates a display video track and a system audio track.
2823
+ * @param constructor - Constructor for the local display stream.
2824
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
2825
+ * @returns A Promise that resolves to a LocalDisplayStream or an error.
2826
+ */function createDisplayStream(constructor,videoContentHint){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true});}catch(error){throw new WcmeError(ErrorTypes.CREATE_STREAM_FAILED,"Failed to create display stream: ".concat(error));}var localDisplayStream=new constructor(stream);if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}return localDisplayStream;});}/**
2827
+ * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.
2828
2828
  *
2829
- * @param videoTrackConstructor - Constructor for the local display track.
2830
- * @param audioTrackConstructor - Constructor for the local system audio track.
2831
- * @param videoContentHint - An optional parameter to give a hint for the content of the track.
2832
- * @returns A Promise that resolves to a LocalDisplayTrack and a LocalSystemAudioTrack. If no system
2833
- * audio is available, the LocalSystemAudioTrack will be resolved as null instead.
2834
- */function createDisplayTrackWithAudio(videoTrackConstructor,audioTrackConstructor,videoContentHint){return __awaiter$1(this,void 0,void 0,function*(){var stream=yield getDisplayMedia({video:true,audio:true});// eslint-disable-next-line new-cap
2835
- var videoTrack=new videoTrackConstructor(new MediaStream(stream.getVideoTracks()),videoContentHint);var audioTrack=null;if(stream.getAudioTracks().length>0){// eslint-disable-next-line new-cap
2836
- audioTrack=new audioTrackConstructor(new MediaStream(stream.getAudioTracks()));}return [videoTrack,audioTrack];});}/**
2829
+ * @param displayStreamConstructor - Constructor for the local display stream.
2830
+ * @param systemAudioStreamConstructor - Constructor for the local system audio stream.
2831
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
2832
+ * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an
2833
+ * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null
2834
+ * instead.
2835
+ */function createDisplayStreamWithAudio(displayStreamConstructor,systemAudioStreamConstructor,videoContentHint){return __awaiter$1(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true,audio:true});}catch(error){throw new WcmeError(ErrorTypes.CREATE_STREAM_FAILED,"Failed to create display and system audio streams: ".concat(error));}// eslint-disable-next-line new-cap
2836
+ var localDisplayStream=new displayStreamConstructor(new MediaStream(stream.getVideoTracks()));if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}var localSystemAudioStream=null;if(stream.getAudioTracks().length>0){// eslint-disable-next-line new-cap
2837
+ localSystemAudioStream=new systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**
2837
2838
  * Enumerates the media input and output devices available.
2838
2839
  *
2839
2840
  * @param deviceKind - Optional filter to return a specific device kind.
@@ -2852,18 +2853,18 @@ audioTrack=new audioTrackConstructor(new MediaStream(stream.getAudioTracks()));}
2852
2853
  * @returns List of camera devices in an array of MediaDeviceInfo objects.
2853
2854
  */function getVideoInputDevices(){return __awaiter$1(this,void 0,void 0,function*(){return getDevices(DeviceKind.VideoInput);});}/**
2854
2855
  * Export the setOnDeviceChangeHandler method directly from the core lib.
2855
- */var {setOnDeviceChangeHandler}=media;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$1$1(){EventEmitter$1$1.init.call(this);}events$1.exports=EventEmitter$1$1;events$1.exports.once=once$2;// Backwards-compat with node 0.10.x
2856
+ */var {setOnDeviceChangeHandler}=media;var events$1$1={exports:{}};var R$1$1=typeof Reflect==='object'?Reflect:null;var ReflectApply$1$1=R$1$1&&typeof R$1$1.apply==='function'?R$1$1.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$1$1;if(R$1$1&&typeof R$1$1.ownKeys==='function'){ReflectOwnKeys$1$1=R$1$1.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$1$1=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$1$1(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$1$1=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$1(){EventEmitter$1$1.init.call(this);}events$1$1.exports=EventEmitter$1$1;events$1$1.exports.once=once$1$1;// Backwards-compat with node 0.10.x
2856
2857
  EventEmitter$1$1.EventEmitter=EventEmitter$1$1;EventEmitter$1$1.prototype._events=undefined;EventEmitter$1$1.prototype._eventsCount=0;EventEmitter$1$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
2857
2858
  // added to it. This is a useful default which helps finding memory leaks.
2858
- 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$1$1,'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$1$1.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
2859
+ var defaultMaxListeners$1$1=10;function checkListener$1$1(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$1$1;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$1$1(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$1$1=arg;}});EventEmitter$1$1.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
2859
2860
  // that to be increased. Set to zero for unlimited.
2860
- EventEmitter$1$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1(that){if(that._maxListeners===undefined)return EventEmitter$1$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1(this);};EventEmitter$1$1.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
2861
+ EventEmitter$1$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1$1(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1$1(that){if(that._maxListeners===undefined)return EventEmitter$1$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1$1(this);};EventEmitter$1$1.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
2861
2862
  if(doError){var er;if(args.length>0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show
2862
2863
  // up in Node's output if this results in an unhandled exception.
2863
2864
  throw er;// Unhandled 'error' event
2864
2865
  }// At least give some kind of context to the user
2865
2866
  var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
2866
- }var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1(handler,len);for(var i=0;i<len;++i){ReflectApply$1(listeners[i],this,args);}}return true;};function _addListener$1(target,type,listener,prepend){var m;var events;var existing;checkListener$1(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
2867
+ }var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1$1(handler,len);for(var i=0;i<len;++i){ReflectApply$1$1(listeners[i],this,args);}}return true;};function _addListener$1$1(target,type,listener,prepend){var m;var events;var existing;checkListener$1$1(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
2867
2868
  // adding it to the listeners, first emit "newListener".
2868
2869
  if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
2869
2870
  // this._events to be assigned to a new object
@@ -2871,151 +2872,187 @@ events=target._events;}existing=events[type];}if(existing===undefined){// Optimi
2871
2872
  existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
2872
2873
  existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
2873
2874
  }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
2874
- m=_getMaxListeners$1(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
2875
+ m=_getMaxListeners$1$1(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
2875
2876
  // eslint-disable-next-line no-restricted-syntax
2876
- var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1(w);}}return target;}EventEmitter$1$1.prototype.addListener=function addListener(type,listener){return _addListener$1(this,type,listener,false);};EventEmitter$1$1.prototype.on=EventEmitter$1$1.prototype.addListener;EventEmitter$1$1.prototype.prependListener=function prependListener(type,listener){return _addListener$1(this,type,listener,true);};function onceWrapper$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$1.prototype.once=function once(type,listener){checkListener$1(listener);this.on(type,_onceWrap$1(this,type,listener));return this;};EventEmitter$1$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1(listener);this.prependListener(type,_onceWrap$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
2877
- EventEmitter$1$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$1.prototype.off=EventEmitter$1$1.prototype.removeListener;EventEmitter$1$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
2877
+ var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1$1(w);}}return target;}EventEmitter$1$1.prototype.addListener=function addListener(type,listener){return _addListener$1$1(this,type,listener,false);};EventEmitter$1$1.prototype.on=EventEmitter$1$1.prototype.addListener;EventEmitter$1$1.prototype.prependListener=function prependListener(type,listener){return _addListener$1$1(this,type,listener,true);};function onceWrapper$1$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$1.prototype.once=function once(type,listener){checkListener$1$1(listener);this.on(type,_onceWrap$1$1(this,type,listener));return this;};EventEmitter$1$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1$1(listener);this.prependListener(type,_onceWrap$1$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
2878
+ EventEmitter$1$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$1.prototype.off=EventEmitter$1$1.prototype.removeListener;EventEmitter$1$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
2878
2879
  if(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events
2879
2880
  if(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=Object.create(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners!==undefined){// LIFO order
2880
- for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1(evlistener):arrayClone$1(evlistener,evlistener.length);}EventEmitter$1$1.prototype.listeners=function listeners(type){return _listeners$1(this,type,true);};EventEmitter$1$1.prototype.rawListeners=function rawListeners(type){return _listeners$1(this,type,false);};EventEmitter$1$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1.call(emitter,type);}};EventEmitter$1$1.prototype.listenerCount=listenerCount$1;function listenerCount$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1(this._events):[];};function arrayClone$1(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne$1(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners$1(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once$2(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener$1(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter$1(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter$1(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener$1(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener$1(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
2881
+ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1$1(evlistener):arrayClone$1$1(evlistener,evlistener.length);}EventEmitter$1$1.prototype.listeners=function listeners(type){return _listeners$1$1(this,type,true);};EventEmitter$1$1.prototype.rawListeners=function rawListeners(type){return _listeners$1$1(this,type,false);};EventEmitter$1$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1$1.call(emitter,type);}};EventEmitter$1$1.prototype.listenerCount=listenerCount$1$1;function listenerCount$1$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1$1(this._events):[];};function arrayClone$1$1(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne$1$1(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners$1$1(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once$1$1(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener$1$1(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter$1$1(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter$1$1(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener$1$1(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener$1$1(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
2881
2882
  // EventEmitters, we do not listen for `error` events here.
2882
2883
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
2883
2884
  // have to do it manually.
2884
- if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}/**
2885
- * Typed event emitter class.
2886
- */class EventEmitter$2 extends events$1.exports.EventEmitter{}var LocalTrackEvents;(function(LocalTrackEvents){LocalTrackEvents["Ended"]="ended";LocalTrackEvents["Muted"]="muted";/**
2887
- * Fires when the published state of a LocalTrack changes. A value of 'true' indicates the
2888
- * track has been published, and 'false' indicates that it is no longer published. Tracks are
2889
- * unpublished by default, and must be published explicitly (no event will be fired to indicate
2890
- * the initial state of 'unpublished').
2891
- */LocalTrackEvents["PublishedStateUpdate"]="published-state-update";/**
2892
- * Fires when there has been a change in the underlying track.
2893
- */LocalTrackEvents["UnderlyingTrackChange"]="underlying-track-change";/**
2894
- * Fires when the applyConstraints() has been called for the track.
2895
- */LocalTrackEvents["TrackConstraintsChange"]="track-constraints-change";})(LocalTrackEvents||(LocalTrackEvents={}));// TBD: Fix this once types are published separately
2896
- // export type TrackEffect = BaseMicrophoneEffect | BaseCameraEffect;
2897
- /**
2898
- * Basic Track class. Wrapper for LocalTrack from 'webrtc-core'.
2899
- */class LocalTrack extends EventEmitter$2{/**
2900
- * Constructor for the Track class. Creates an empty CoreLocalTrack or uses an existing one.
2885
+ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter$2$1 extends events$1$1.exports.EventEmitter{}class TypedEvent$1{constructor(){this.emitter=new EventEmitter$2$1();}on(handler){this.emitter.on('event',handler);}once(handler){this.emitter.once('event',handler);}off(handler){this.emitter.off('event',handler);}emit(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}this.emitter.emit('event',...args);}}function AddEvents(Base){return class WithEvents extends Base{on(eventName,handler){this[eventName].on(handler);}once(eventName,handler){this[eventName].once(handler);}off(eventName,handler){this[eventName].off(handler);}};}var _a$1$1,_b$1;var StreamEventNames;(function(StreamEventNames){StreamEventNames["MuteStateChange"]="mute-state-change";StreamEventNames["Ended"]="stream-ended";})(StreamEventNames||(StreamEventNames={}));/**
2886
+ * Base stream class.
2887
+ */class _Stream{/**
2888
+ * Create a Stream from the given values.
2901
2889
  *
2902
- * @param stream - The MediaStream for this LocalTrack.
2903
- */constructor(stream){super();this.isPublished=false;this.loadingEffects=new Map();this.effects=new Map();this.originalStream=stream;this.underlyingStream=stream;// Effects create a new label but we want to retain the original one.
2904
- this.label=this.underlyingStream.getTracks()[0].label;/**
2905
- * Emit ended event when the underlying track ends.
2906
- */this.underlyingTrack.onended=()=>{this.emit(LocalTrackEvents.Ended,{trackState:this.trackState});};}/**
2907
- * Get the kind of this track.
2908
- * NOTE(brian): the need for this will likely go away once we get the rest of the track hierarchy
2909
- * done, as we can use something like instanceof instead.
2890
+ * @param stream - The initial output MediaStream for this Stream.
2891
+ */constructor(stream){// TODO: these should be protected, but we need the helper type in ts-events
2892
+ // to hide the 'emit' method from TypedEvent.
2893
+ this[_a$1$1]=new TypedEvent$1();this[_b$1]=new TypedEvent$1();this.outputStream=stream;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this.handleTrackEnded=this.handleTrackEnded.bind(this);this.addTrackHandlers(this.outputTrack);}/**
2894
+ * Handler which is called when a track's mute event fires.
2895
+ */handleTrackMuted(){this[StreamEventNames.MuteStateChange].emit(true);}/**
2896
+ * Handler which is called when a track's unmute event fires.
2897
+ */handleTrackUnmuted(){this[StreamEventNames.MuteStateChange].emit(false);}/**
2898
+ * Handler which is called when a track's ended event fires.
2899
+ */handleTrackEnded(){this[StreamEventNames.Ended].emit();}/**
2900
+ * Add event handlers to a MediaStreamTrack.
2910
2901
  *
2911
- * @returns - The kind of this track, as a MediaStreamTrackKind.
2912
- */get kind(){return this.underlyingTrack.kind;}/**
2913
- * Get id of this track.
2902
+ * @param track - The MediaStreamTrack.
2903
+ */addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);track.addEventListener('ended',this.handleTrackEnded);}/**
2904
+ * Remove event handlers from a MediaStreamTrack.
2914
2905
  *
2915
- * @returns The id of this track.
2916
- */get id(){return this.underlyingTrack.id;}/**
2917
- * Get muted state of this track.
2906
+ * @param track - The MediaStreamTrack.
2907
+ */removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);track.removeEventListener('ended',this.handleTrackEnded);}/**
2908
+ * Get the track of the output stream.
2918
2909
  *
2919
- * @returns The muted state of this track.
2920
- */get muted(){return !this.underlyingTrack.enabled;}/**
2921
- * Get published state of this track.
2910
+ * @returns The output track.
2911
+ */get outputTrack(){return this.outputStream.getTracks()[0];}}_a$1$1=StreamEventNames.MuteStateChange,_b$1=StreamEventNames.Ended;var Stream=AddEvents(_Stream);var _a$6$1,_b;var LocalStreamEventNames;(function(LocalStreamEventNames){LocalStreamEventNames["ConstraintsChange"]="constraints-change";LocalStreamEventNames["OutputTrackChange"]="output-track-change";})(LocalStreamEventNames||(LocalStreamEventNames={}));/**
2912
+ * A stream which originates on the local device.
2913
+ */class _LocalStream extends Stream{/**
2914
+ * Create a LocalStream from the given values.
2922
2915
  *
2923
- * @returns The published state of this track.
2924
- */get published(){return this.isPublished;}/**
2925
- * Get the underlying MediaStream.
2916
+ * @param stream - The initial output MediaStream for this Stream.
2917
+ */constructor(stream){super(stream);this[_a$6$1]=new TypedEvent$1();this[_b]=new TypedEvent$1();this.effects=[];this.loadingEffects=new Map();this.inputStream=stream;}/**
2918
+ * Get the track within the MediaStream with which this LocalStream was created.
2926
2919
  *
2927
- * @returns The underlying MediaStream.
2928
- */get underlyingStream(){return this._underlyingStream;}/**
2929
- * Set the underlying MediaStream.
2930
- */set underlyingStream(stream){this._underlyingStream=stream;}/**
2931
- * Get current state of this track.
2920
+ * @returns The track within the MediaStream with which this LocalStream
2921
+ * was created.
2922
+ */get inputTrack(){return this.inputStream.getTracks()[0];}/**
2923
+ * @inheritdoc
2924
+ */get muted(){return !this.inputTrack.enabled;}/**
2925
+ * Set the mute state of this stream.
2932
2926
  *
2933
- * @returns Current state of this track.
2934
- */get trackState(){return {id:this.id,label:this.label,type:this.kind,muted:this.muted};}/**
2935
- * Get the underlying MediaStreamTrack.
2927
+ * @param isMuted - True to mute, false to unmute.
2928
+ */setMuted(isMuted){if(this.inputTrack.enabled===isMuted){this.inputTrack.enabled=!isMuted;// setting `enabled` will not automatically emit MuteStateChange, so we emit it here
2929
+ this[StreamEventNames.MuteStateChange].emit(isMuted);}}/**
2930
+ * @inheritdoc
2931
+ */getSettings(){return this.inputTrack.getSettings();}/**
2932
+ * Get the label of the input track on this stream.
2936
2933
  *
2937
- * @returns The underlying MediaStreamTrack.
2938
- */get underlyingTrack(){return this._underlyingStream.getTracks()[0];}/**
2939
- * Get the original MediaStreamTrack. We retain a reference to the stream obtained through
2940
- * `getUserMedia()` to ensure it's updated alongside the `underlyingStream`. These two streams may
2941
- * be different if effects have been added to the original stream.
2934
+ * @returns The label of the track.
2935
+ */get label(){return this.inputTrack.label;}/**
2936
+ * Change the track of the output stream to a different track.
2942
2937
  *
2943
- * @returns The original MediaStreamTrack.
2944
- */get originalTrack(){return this.originalStream.getTracks()[0];}/**
2945
- * Set the mute state of this track.
2938
+ * Note: this method assumes and enforces that if both input and output streams have the same
2939
+ * track, then they must also be the same stream.
2946
2940
  *
2947
- * @param muted - True to mute, false to unmute.
2948
- * @fires LocalTrackEvents.Muted
2949
- */setMuted(muted){// Only change state if it's different, where "enabled" means "unmuted."
2950
- if(this.underlyingTrack.enabled===muted){this.originalTrack.enabled=!muted;this.underlyingTrack.enabled=!muted;this.emit(LocalTrackEvents.Muted,{trackState:this.trackState});logger$3.log("Local track ".concat(muted?'muted':'unmuted',":"),{trackState:this.trackState});}}/**
2951
- * Set the published state of this LocalTrack.
2952
- *
2953
- * @param isPublished - True if this track has been published, false otherwise.
2954
- * @fires LocalTrackEvents.PublishedStateUpdate
2955
- */setPublished(isPublished){if(this.isPublished!==isPublished){this.isPublished=isPublished;this.emit(LocalTrackEvents.PublishedStateUpdate,{trackState:this.trackState,isPublished});logger$3.log("Local track ".concat(isPublished?'published':'unpublished',":"),{trackState:this.trackState});}}/**
2956
- * Stop this track.
2957
- *
2958
- * @fires LocalTrackEvents.Ended
2959
- */stop(){this.originalTrack.stop();this.underlyingTrack.stop();this.emit(LocalTrackEvents.Ended,{trackState:this.trackState});logger$3.log("Local track stopped:",{trackState:this.trackState});}/**
2960
- * Adds an effect to a local track.
2941
+ * @param newTrack - The track to be used in the output stream.
2942
+ */changeOutputTrack(newTrack){if(this.outputTrack.id!==newTrack.id){// If the input track and the *old* output track are currently the same, then the streams must
2943
+ // be the same too. We want to apply the new track to the output stream without affecting the
2944
+ // input stream, so we separate them by setting the input stream to be its own stream.
2945
+ if(this.inputTrack.id===this.outputTrack.id){this.inputStream=new MediaStream(this.inputStream);}this.outputStream.removeTrack(this.outputTrack);this.outputStream.addTrack(newTrack);// If the input track and the *new* output track are now the same, then we want the streams to
2946
+ // be the same too.
2947
+ if(this.inputTrack.id===this.outputTrack.id){this.inputStream=this.outputStream;}this[LocalStreamEventNames.OutputTrackChange].emit(newTrack);}}/**
2948
+ * @inheritdoc
2949
+ */stop(){this.inputTrack.stop();this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here
2950
+ this[StreamEventNames.Ended].emit();}/**
2951
+ * Adds an effect to a local stream.
2961
2952
  *
2962
2953
  * @param name - The name of the effect.
2963
2954
  * @param effect - The effect to add.
2964
2955
  */addEffect(name,effect){return __awaiter$1(this,void 0,void 0,function*(){// Load the effect
2965
- this.loadingEffects.set(name,effect);yield effect.load(this.underlyingStream);// Check that the loaded effect is the latest one and dispose if not
2966
- if(effect!==this.loadingEffects.get(name)){yield effect.dispose();throw new Error("Effect \"".concat(name,"\" not required after loading"));}// Use the loaded effect
2967
- this.underlyingStream=effect.getUnderlyingStream();this.effects.set(name,effect);this.loadingEffects.delete(name);this.emit(LocalTrackEvents.UnderlyingTrackChange);});}/**
2968
- * Get an effect by name.
2956
+ this.loadingEffects.set(name,effect);var outputTrack=yield effect.load(this.outputTrack);// Check that the loaded effect is the latest one and dispose if not
2957
+ if(effect!==this.loadingEffects.get(name)){yield effect.dispose();throw new Error("Effect \"".concat(name,"\" not required after loading"));}// Use the effect
2958
+ this.loadingEffects.delete(name);this.effects.push({name,effect});this.changeOutputTrack(outputTrack);// When the effect's track is updated, update the next effect or output stream.
2959
+ // TODO: using EffectEvent.TrackUpdated will cause the entire web-media-effects lib to be built
2960
+ // and makes the size of the webrtc-core build much larger, so we use type assertion here as a
2961
+ // temporary workaround.
2962
+ effect.on('track-updated',track=>{var _c;var effectIndex=this.effects.findIndex(e=>e.name===name);if(effectIndex===this.effects.length-1){this.changeOutputTrack(track);}else {(_c=this.effects[effectIndex+1])===null||_c===void 0?void 0:_c.effect.replaceInputTrack(track);}});});}/**
2963
+ * Get an effect from the effects list.
2969
2964
  *
2970
- * @param name - The effect name.
2971
- * @returns A MicrophoneEffect.
2972
- */getEffect(name){var effect=this.effects.get(name);if(!effect){logger$3.log("No effect found with name '".concat(name,"'"));}return effect;}/**
2973
- * Get a copy of the effects Map.
2965
+ * @param name - The name of the effect you want to get.
2966
+ * @returns The effect or undefined.
2967
+ */getEffect(name){var _c;return (_c=this.effects.find(e=>e.name===name))===null||_c===void 0?void 0:_c.effect;}/**
2968
+ * Cleanup the local effects.
2969
+ */disposeEffects(){return __awaiter$1(this,void 0,void 0,function*(){this.loadingEffects.clear();// Dispose of any effects currently in use
2970
+ if(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(item=>item.effect.dispose()));this.effects=[];}});}}_a$6$1=LocalStreamEventNames.ConstraintsChange,_b=LocalStreamEventNames.OutputTrackChange;var LocalStream=AddEvents(_LocalStream);/**
2971
+ * An audio LocalStream.
2972
+ */class LocalAudioStream extends LocalStream{/**
2973
+ * Apply constraints to the stream.
2974
2974
  *
2975
- * @returns A copy of the effects map.
2976
- */getEffects(){return new Map(this.effects);}/**
2977
- * Cleanup the local microphone track.
2978
- */disposeEffects(){return __awaiter$1(this,void 0,void 0,function*(){// Clear effects that are loading to indicate that they are not needed
2979
- this.loadingEffects.clear();// Dispose of any effects currently in use
2980
- if(this.effects.size>0){yield Promise.all(Array.from(this.effects.values(),effect=>effect.dispose()));this.effects.clear();this.underlyingStream=this.originalStream;this.emit(LocalTrackEvents.UnderlyingTrackChange);}});}/**
2981
- * Apply constraints to the track.
2975
+ * @param constraints - The constraints to apply.
2976
+ * @returns A promise which resolves when the constraints have been successfully applied.
2977
+ */applyConstraints(constraints){return __awaiter$1(this,void 0,void 0,function*(){logger$3.log("Applying constraints to local track:",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}}/**
2978
+ * A video LocalStream.
2979
+ */class LocalVideoStream extends LocalStream{/**
2980
+ * Apply constraints to the stream.
2982
2981
  *
2983
- * @param constraints - The constraints to apply to the track.
2982
+ * @param constraints - The constraints to apply.
2984
2983
  * @returns A promise which resolves when the constraints have been successfully applied.
2985
- */applyConstraints(constraints){return __awaiter$1(this,void 0,void 0,function*(){logger$3.log("Applying constraints to local track:",constraints);var ret=this.underlyingTrack.applyConstraints(constraints).then(()=>{this.emit(LocalTrackEvents.TrackConstraintsChange);});return ret;});}/**
2986
- * Get the current constraints of the track.
2984
+ */applyConstraints(constraints){return __awaiter$1(this,void 0,void 0,function*(){logger$3.log("Applying constraints to local track:",constraints);return this.inputTrack.applyConstraints(constraints).then(()=>{this[LocalStreamEventNames.ConstraintsChange].emit();});});}/**
2985
+ * Get the content hint for this stream.
2987
2986
  *
2988
- * @returns The constraints of the track.
2989
- */getConstraints(){return this.underlyingTrack.getConstraints();}/**
2990
- * Get the current settings of the track.
2987
+ * @returns The content hint setting for this stream, or undefined if none has been set.
2988
+ */get contentHint(){return this.inputTrack.contentHint;}/**
2989
+ * Set the content hint for this stream.
2991
2990
  *
2992
- * @returns The settings of the track.
2993
- */getSettings(){return this.underlyingTrack.getSettings();}/**
2991
+ * @param hint - The content hint to set.
2992
+ */set contentHint(hint){this.inputTrack.contentHint=hint;}/**
2994
2993
  * Check the resolution and then return how many layers will be active.
2995
2994
  *
2996
2995
  * @returns The active layers count.
2997
- */getNumActiveSimulcastLayers(){var activeSimulcastLayersNumber=0;if(this.trackState.type==='audio'){return activeSimulcastLayersNumber;}var videoHeight=this.underlyingTrack.getSettings().height;if(videoHeight<=180){activeSimulcastLayersNumber=1;}else if(videoHeight<=360){activeSimulcastLayersNumber=2;}else {activeSimulcastLayersNumber=3;}return activeSimulcastLayersNumber;}}LocalTrack.Events=LocalTrackEvents;/**
2998
- * Represents a local track for a camera source.
2999
- */class LocalCameraTrack extends LocalTrack{}/**
3000
- * Represents a local track for a display source.
3001
- */class LocalDisplayTrack extends LocalTrack{/**
3002
- * Create a LocalDisplayTrack from the given values.
3003
- *
3004
- * @param stream - The MediaStream for this track.
3005
- * @param videoContentHint - An optional content hint, describing the content of the track.
3006
- */constructor(stream,videoContentHint){super(stream);this._videoContentHint=videoContentHint;this.underlyingTrack.contentHint=videoContentHint||'';}/**
3007
- * Get the VideoContentHint for this track.
2996
+ */getNumActiveSimulcastLayers(){var activeSimulcastLayersNumber=0;var videoHeight=this.inputTrack.getSettings().height;if(videoHeight<=180){activeSimulcastLayersNumber=1;}else if(videoHeight<=360){activeSimulcastLayersNumber=2;}else {activeSimulcastLayersNumber=3;}return activeSimulcastLayersNumber;}}/**
2997
+ * A local camera stream.
2998
+ */class LocalCameraStream extends LocalVideoStream{}/**
2999
+ * A local display stream.
3000
+ */class LocalDisplayStream extends LocalVideoStream{}/**
3001
+ * A local microphone stream.
3002
+ */class LocalMicrophoneStream extends LocalAudioStream{}/**
3003
+ * A local system audio stream.
3004
+ */class LocalSystemAudioStream extends LocalAudioStream{}/**
3005
+ * A stream originating from a remote peer.
3006
+ */class RemoteStream extends Stream{/**
3007
+ * @inheritdoc
3008
+ */get muted(){return !this.outputTrack.enabled;}/**
3009
+ * @inheritdoc
3010
+ */getSettings(){return this.outputTrack.getSettings();}/**
3011
+ * Replace the existing track on the output stream for a new track.
3008
3012
  *
3009
- * @returns The VideoContentHint for this track.
3010
- */get videoContentHint(){return this._videoContentHint;}}/**
3011
- * Represents a local track for a microphone source.
3012
- */class LocalMicrophoneTrack extends LocalTrack{}/**
3013
- * Represents a local track for system audio.
3014
- */class LocalSystemAudioTrack extends LocalTrack{}// Overall connection state (based on the ICE and DTLS connection states)
3013
+ * @param newTrack - The track to add to the stream.
3014
+ */replaceTrack(newTrack){var oldTrack=this.outputTrack;this.removeTrackHandlers(oldTrack);this.outputStream.removeTrack(oldTrack);this.outputStream.addTrack(newTrack);this.addTrackHandlers(newTrack);// TODO: Chrome/React may not automatically refresh the media element with the new track when
3015
+ // the output track has changed, so we may need to emit an event here if this is the case.
3016
+ // this[StreamEventNames.OutputTrackChange].emit(newTrack);
3017
+ }/**
3018
+ * @inheritdoc
3019
+ */stop(){this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here
3020
+ this[StreamEventNames.Ended].emit();}}var events$2={exports:{}};var R$2=typeof Reflect==='object'?Reflect:null;var ReflectApply$2=R$2&&typeof R$2.apply==='function'?R$2.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys$2;if(R$2&&typeof R$2.ownKeys==='function'){ReflectOwnKeys$2=R$2.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys$2=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning$2(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN$2=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1$2(){EventEmitter$1$2.init.call(this);}events$2.exports=EventEmitter$1$2;events$2.exports.once=once$3;// Backwards-compat with node 0.10.x
3021
+ EventEmitter$1$2.EventEmitter=EventEmitter$1$2;EventEmitter$1$2.prototype._events=undefined;EventEmitter$1$2.prototype._eventsCount=0;EventEmitter$1$2.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
3022
+ // added to it. This is a useful default which helps finding memory leaks.
3023
+ var defaultMaxListeners$2=10;function checkListener$2(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1$2,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners$2;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN$2(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners$2=arg;}});EventEmitter$1$2.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
3024
+ // that to be increased. Set to zero for unlimited.
3025
+ EventEmitter$1$2.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$2(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$2(that){if(that._maxListeners===undefined)return EventEmitter$1$2.defaultMaxListeners;return that._maxListeners;}EventEmitter$1$2.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$2(this);};EventEmitter$1$2.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
3026
+ if(doError){var er;if(args.length>0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show
3027
+ // up in Node's output if this results in an unhandled exception.
3028
+ throw er;// Unhandled 'error' event
3029
+ }// At least give some kind of context to the user
3030
+ var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
3031
+ }var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$2(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$2(handler,len);for(var i=0;i<len;++i){ReflectApply$2(listeners[i],this,args);}}return true;};function _addListener$2(target,type,listener,prepend){var m;var events;var existing;checkListener$2(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
3032
+ // adding it to the listeners, first emit "newListener".
3033
+ if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
3034
+ // this._events to be assigned to a new object
3035
+ events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
3036
+ existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
3037
+ existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
3038
+ }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
3039
+ m=_getMaxListeners$2(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
3040
+ // eslint-disable-next-line no-restricted-syntax
3041
+ var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$2(w);}}return target;}EventEmitter$1$2.prototype.addListener=function addListener(type,listener){return _addListener$2(this,type,listener,false);};EventEmitter$1$2.prototype.on=EventEmitter$1$2.prototype.addListener;EventEmitter$1$2.prototype.prependListener=function prependListener(type,listener){return _addListener$2(this,type,listener,true);};function onceWrapper$2(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$2(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$2.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1$2.prototype.once=function once(type,listener){checkListener$2(listener);this.on(type,_onceWrap$2(this,type,listener));return this;};EventEmitter$1$2.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$2(listener);this.prependListener(type,_onceWrap$2(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
3042
+ EventEmitter$1$2.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$2(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$2(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1$2.prototype.off=EventEmitter$1$2.prototype.removeListener;EventEmitter$1$2.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
3043
+ if(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events
3044
+ if(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=Object.create(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners!==undefined){// LIFO order
3045
+ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$2(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$2(evlistener):arrayClone$2(evlistener,evlistener.length);}EventEmitter$1$2.prototype.listeners=function listeners(type){return _listeners$2(this,type,true);};EventEmitter$1$2.prototype.rawListeners=function rawListeners(type){return _listeners$2(this,type,false);};EventEmitter$1$2.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$2.call(emitter,type);}};EventEmitter$1$2.prototype.listenerCount=listenerCount$2;function listenerCount$2(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1$2.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$2(this._events):[];};function arrayClone$2(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne$2(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners$2(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once$3(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener$2(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter$2(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter$2(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener$2(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener$2(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
3046
+ // EventEmitters, we do not listen for `error` events here.
3047
+ emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3048
+ // have to do it manually.
3049
+ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}/**
3050
+ * Typed event emitter class.
3051
+ */class EventEmitter$4 extends events$2.exports.EventEmitter{}// Overall connection state (based on the ICE and DTLS connection states)
3015
3052
  var ConnectionState;(function(ConnectionState){ConnectionState["New"]="New";ConnectionState["Closed"]="Closed";ConnectionState["Connected"]="Connected";ConnectionState["Connecting"]="Connecting";ConnectionState["Disconnected"]="Disconnected";ConnectionState["Failed"]="Failed";})(ConnectionState||(ConnectionState={}));var ConnectionStateEvents;(function(ConnectionStateEvents){ConnectionStateEvents["ConnectionStateChanged"]="ConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
3016
3053
  * Listens on the connection's ICE and DTLS state changes and emits a single
3017
3054
  * event that summarizes all the internal states into a single overall connection state.
3018
- */class ConnectionStateHandler extends EventEmitter$2{/**
3055
+ */class ConnectionStateHandler extends EventEmitter$4{/**
3019
3056
  * Creates an instance of ConnectionStateHandler.
3020
3057
  *
3021
3058
  * @param getCurrentStatesCallback - Callback for getting the connection state information
@@ -3208,7 +3245,7 @@ if(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreate
3208
3245
  * tree.
3209
3246
  */function shimLocalStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getLocalStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getLocalStreams=function getLocalStreams(){if(!this._localStreams){this._localStreams=[];}return this._localStreams;};}if(!('addStream'in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function addStream(stream){if(!this._localStreams){this._localStreams=[];}if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}// Try to emulate Chrome's behaviour of adding in audio-video order.
3210
3247
  // Safari orders by track id.
3211
- stream.getAudioTracks().forEach(track=>_addTrack.call(this,track,stream));stream.getVideoTracks().forEach(track=>_addTrack.call(this,track,stream));};window.RTCPeerConnection.prototype.addTrack=function addTrack(track){for(var _len=arguments.length,streams=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++){streams[_key-1]=arguments[_key];}if(streams){streams.forEach(stream=>{if(!this._localStreams){this._localStreams=[stream];}else if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}});}return _addTrack.apply(this,arguments);};}if(!('removeStream'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){if(!this._localStreams){this._localStreams=[];}var index=this._localStreams.indexOf(stream);if(index===-1){return;}this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach(sender=>{if(tracks.includes(sender.track)){this.removeTrack(sender);}});};}}function shimRemoteStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getRemoteStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getRemoteStreams=function getRemoteStreams(){return this._remoteStreams?this._remoteStreams:[];};}if(!('onaddstream'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'onaddstream',{get(){return this._onaddstream;},set(f){if(this._onaddstream){this.removeEventListener('addstream',this._onaddstream);this.removeEventListener('track',this._onaddstreampoly);}this.addEventListener('addstream',this._onaddstream=f);this.addEventListener('track',this._onaddstreampoly=e=>{e.streams.forEach(stream=>{if(!this._remoteStreams){this._remoteStreams=[];}if(this._remoteStreams.includes(stream)){return;}this._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;this.dispatchEvent(event);});});}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){var pc=this;if(!this._onaddstreampoly){this.addEventListener('track',this._onaddstreampoly=function(e){e.streams.forEach(stream=>{if(!pc._remoteStreams){pc._remoteStreams=[];}if(pc._remoteStreams.indexOf(stream)>=0){return;}pc._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;pc.dispatchEvent(event);});});}return origSetRemoteDescription.apply(pc,arguments);};}}function shimCallbacksAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}var prototype=window.RTCPeerConnection.prototype;var origCreateOffer=prototype.createOffer;var origCreateAnswer=prototype.createAnswer;var setLocalDescription=prototype.setLocalDescription;var setRemoteDescription=prototype.setRemoteDescription;var addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function createOffer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateOffer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.createAnswer=function createAnswer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateAnswer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};var withCallback=function withCallback(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setLocalDescription=withCallback;withCallback=function withCallback(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setRemoteDescription=withCallback;withCallback=function withCallback(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.addIceCandidate=withCallback;}function shimGetUserMedia$3(window){var navigator=window&&window.navigator;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){// shim not needed in Safari 12.1
3248
+ stream.getAudioTracks().forEach(track=>_addTrack.call(this,track,stream));stream.getVideoTracks().forEach(track=>_addTrack.call(this,track,stream));};window.RTCPeerConnection.prototype.addTrack=function addTrack(track){for(var _len2=arguments.length,streams=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){streams[_key2-1]=arguments[_key2];}if(streams){streams.forEach(stream=>{if(!this._localStreams){this._localStreams=[stream];}else if(!this._localStreams.includes(stream)){this._localStreams.push(stream);}});}return _addTrack.apply(this,arguments);};}if(!('removeStream'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.removeStream=function removeStream(stream){if(!this._localStreams){this._localStreams=[];}var index=this._localStreams.indexOf(stream);if(index===-1){return;}this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach(sender=>{if(tracks.includes(sender.track)){this.removeTrack(sender);}});};}}function shimRemoteStreamsAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}if(!('getRemoteStreams'in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getRemoteStreams=function getRemoteStreams(){return this._remoteStreams?this._remoteStreams:[];};}if(!('onaddstream'in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,'onaddstream',{get(){return this._onaddstream;},set(f){if(this._onaddstream){this.removeEventListener('addstream',this._onaddstream);this.removeEventListener('track',this._onaddstreampoly);}this.addEventListener('addstream',this._onaddstream=f);this.addEventListener('track',this._onaddstreampoly=e=>{e.streams.forEach(stream=>{if(!this._remoteStreams){this._remoteStreams=[];}if(this._remoteStreams.includes(stream)){return;}this._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;this.dispatchEvent(event);});});}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function setRemoteDescription(){var pc=this;if(!this._onaddstreampoly){this.addEventListener('track',this._onaddstreampoly=function(e){e.streams.forEach(stream=>{if(!pc._remoteStreams){pc._remoteStreams=[];}if(pc._remoteStreams.indexOf(stream)>=0){return;}pc._remoteStreams.push(stream);var event=new Event('addstream');event.stream=stream;pc.dispatchEvent(event);});});}return origSetRemoteDescription.apply(pc,arguments);};}}function shimCallbacksAPI$1(window){if(typeof window!=='object'||!window.RTCPeerConnection){return;}var prototype=window.RTCPeerConnection.prototype;var origCreateOffer=prototype.createOffer;var origCreateAnswer=prototype.createAnswer;var setLocalDescription=prototype.setLocalDescription;var setRemoteDescription=prototype.setRemoteDescription;var addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function createOffer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateOffer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.createAnswer=function createAnswer(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=origCreateAnswer.apply(this,[options]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};var withCallback=function withCallback(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setLocalDescription=withCallback;withCallback=function withCallback(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.setRemoteDescription=withCallback;withCallback=function withCallback(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);if(!failureCallback){return promise;}promise.then(successCallback,failureCallback);return Promise.resolve();};prototype.addIceCandidate=withCallback;}function shimGetUserMedia$3(window){var navigator=window&&window.navigator;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){// shim not needed in Safari 12.1
3212
3249
  var mediaDevices=navigator.mediaDevices;var _getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=constraints=>{return _getUserMedia(shimConstraints$1(constraints));};}if(!navigator.getUserMedia&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){navigator.getUserMedia=function getUserMedia(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb);}.bind(navigator);}}function shimConstraints$1(constraints){if(constraints&&constraints.video!==undefined){return Object.assign({},constraints,{video:compactObject$1(constraints.video)});}return constraints;}function shimRTCIceServerUrls$1(window){if(!window.RTCPeerConnection){return;}// migrate from non-spec RTCIceServer.url to RTCIceServer.urls
3213
3250
  var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function RTCPeerConnection(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;i<pcConfig.iceServers.length;i++){var server=pcConfig.iceServers[i];if(!server.hasOwnProperty('urls')&&server.hasOwnProperty('url')){deprecated$1('RTCIceServer.url','RTCIceServer.urls');server=JSON.parse(JSON.stringify(server));server.urls=server.url;delete server.url;newIceServers.push(server);}else {newIceServers.push(pcConfig.iceServers[i]);}}pcConfig.iceServers=newIceServers;}return new OrigPeerConnection(pcConfig,pcConstraints);};window.RTCPeerConnection.prototype=OrigPeerConnection.prototype;// wrap static methods. Currently just generateCertificate.
3214
3251
  if('generateCertificate'in OrigPeerConnection){Object.defineProperty(window.RTCPeerConnection,'generateCertificate',{get(){return OrigPeerConnection.generateCertificate;}});}}function shimTrackEventTransceiver$1(window){// Add event.transceiver member over deprecated event.receiver
@@ -3433,7 +3470,7 @@ shimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLoca
3433
3470
  * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.
3434
3471
  */var MediaStreamTrackKind;(function(MediaStreamTrackKind){MediaStreamTrackKind["Audio"]="audio";MediaStreamTrackKind["Video"]="video";})(MediaStreamTrackKind||(MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents["IceGatheringStateChange"]="icegatheringstatechange";PeerConnectionEvents["ConnectionStateChange"]="connectionstatechange";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**
3435
3472
  * Manages a single RTCPeerConnection with the server.
3436
- */class PeerConnection extends EventEmitter$2{/**
3473
+ */class PeerConnection extends EventEmitter$4{/**
3437
3474
  * Creates an instance of the RTCPeerConnection.
3438
3475
  *
3439
3476
  * @param configuration - Config to the RTCPeerConnection constructor.
@@ -3457,7 +3494,7 @@ this.pc.onconnectionstatechange=()=>this.connectionStateHandler.onConnectionStat
3457
3494
  * added.
3458
3495
  * @returns The RTCRtpSender object which will be used to transmit the media data, or null if
3459
3496
  * there is no underlying track when a track is added.
3460
- */addTrack(track){for(var _len2=arguments.length,streams=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){streams[_key2-1]=arguments[_key2];}return this.pc.addTrack(track,...streams);}/**
3497
+ */addTrack(track){for(var _len3=arguments.length,streams=new Array(_len3>1?_len3-1:0),_key3=1;_key3<_len3;_key3++){streams[_key3-1]=arguments[_key3];}return this.pc.addTrack(track,...streams);}/**
3461
3498
  * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the
3462
3499
  * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender
3463
3500
  * and an RTCRtpReceiver associated with it.
@@ -3561,20 +3598,7 @@ var isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnecti
3561
3598
  var localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.
3562
3599
  if(report.type==='candidate-pair'&&((_a=report.state)===null||_a===void 0?void 0:_a.toLowerCase())==='succeeded'){succeededLocalCandidateIds.add(report.localCandidateId);}// collect all `local-candidate` stats.
3563
3600
  if(report.type==='local-candidate'){localCandidateStatsReports.push(report);}});// find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.
3564
- var localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return "TURN-".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents;var MediaCodecMimeType;(function(MediaCodecMimeType){MediaCodecMimeType["H264"]="video/H264";MediaCodecMimeType["AV1"]="video/AV1";MediaCodecMimeType["OPUS"]="audio/opus";})(MediaCodecMimeType||(MediaCodecMimeType={}));var defaultMaxVideoEncodeFrameSize=8160;var defaultMaxVideoEncodeMbps=244800;var RecommendedOpusBitrates;(function(RecommendedOpusBitrates){RecommendedOpusBitrates[RecommendedOpusBitrates["NB"]=12000]="NB";RecommendedOpusBitrates[RecommendedOpusBitrates["WB"]=20000]="WB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB"]=40000]="FB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"]=64000]="FB_MONO_MUSIC";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"]=128000]="FB_STEREO_MUSIC";})(RecommendedOpusBitrates||(RecommendedOpusBitrates={}));var maxFrameSizeToMaxBitrateMap=new Map([[60,99000],[240,199000],[576,300000],[920,640000],[1296,720000],[2304,880000],[3600,2500000],[8160,4000000]]);function areProfileLevelIdsCompatible(senderProfileLevelId,receiverProfileLevelId,levelAsymmetryAllowed){var senderProfile=Number.parseInt("0x".concat(senderProfileLevelId),16);var recvProfile=Number.parseInt("0x".concat(receiverProfileLevelId),16);var senderProfileIdc=senderProfile>>16;var recvProfileIdc=recvProfile>>16;var senderProfileIop=(senderProfile&0x00ff00)>>8;var recvProfileIop=(recvProfile&0x00ff00)>>8;var senderLevelIdc=senderProfile&0x0000ff;var recvLevelIdc=recvProfile&0x0000ff;var areProfileCompatible=senderProfileIdc===recvProfileIdc&&senderProfileIop===recvProfileIop||senderProfileIdc===0x42&&recvProfileIdc===0x42&&(senderProfileIop&0x40)===(recvProfileIop&0x40);var isLevelIdcCompatible=levelAsymmetryAllowed?true:senderLevelIdc<=recvLevelIdc;return areProfileCompatible&&isLevelIdcCompatible;}function areCodecsCompatible(senderCodec,receiverCodec){return Object.keys(receiverCodec).every(key=>{if(key==='clockRate'||key==='name'){return senderCodec[key]===receiverCodec[key];}if(key==='fmtParams'){var fmtpForSender=senderCodec[key];var fmtpForReceiver=receiverCodec[key];var levelAsymmetryAllowed=[...fmtpForSender.keys()].some(senderFmtpParamKey=>{return senderFmtpParamKey==='level-asymmetry-allowed'&&fmtpForReceiver.get(senderFmtpParamKey)==='1'&&fmtpForSender.get(senderFmtpParamKey)==='1';});return [...fmtpForSender.keys()].every(senderFmtpParamKey=>{if(fmtpForReceiver.get(senderFmtpParamKey)){if(senderFmtpParamKey==='profile-level-id'){return areProfileLevelIdsCompatible(fmtpForSender.get(senderFmtpParamKey),fmtpForReceiver.get(senderFmtpParamKey),levelAsymmetryAllowed);}}if(senderFmtpParamKey==='packetization-mode'){return fmtpForSender.get(senderFmtpParamKey)===fmtpForReceiver.get(senderFmtpParamKey);}return true;});}return true;});}function gcd(a,b){return b===0?a:gcd(b,a%b);}function getFrameHeightByMaxFs(sourceAspectRatio,requestedMaxFs){var _gcd=gcd(sourceAspectRatio[0],sourceAspectRatio[1]);var minNumberRatiosForWidth=sourceAspectRatio[0]/_gcd;var minNumberRatiosForHeight=sourceAspectRatio[1]/_gcd;return Math.floor(Math.sqrt(requestedMaxFs*16*16/(minNumberRatiosForWidth*minNumberRatiosForHeight)))*minNumberRatiosForHeight;}function getScaleDownRatio(sourceWidth,sourceHeight,maxFs,maxWidth,maxHeight){if(!sourceWidth||!sourceHeight||!maxFs){return undefined;}var scaleDownRatio=Math.max(sourceHeight/getFrameHeightByMaxFs([sourceWidth,sourceHeight],maxFs),1.0);if(maxWidth&&maxHeight){scaleDownRatio=Math.max(sourceWidth/maxWidth,sourceHeight/maxHeight,scaleDownRatio);}return scaleDownRatio;}function getRecommendedMaxBitrateForFrameSize(requestedMaxFs){if(requestedMaxFs<60){throw new Error("requested video max frame size can not less than 60");}var expectedHeight=[...maxFrameSizeToMaxBitrateMap.keys()].sort((a,b)=>b-a).find(h=>requestedMaxFs>=h);return maxFrameSizeToMaxBitrateMap.get(expectedHeight);}/******************************************************************************
3565
- Copyright (c) Microsoft Corporation.
3566
-
3567
- Permission to use, copy, modify, and/or distribute this software for any
3568
- purpose with or without fee is hereby granted.
3569
-
3570
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
3571
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3572
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
3573
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
3574
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3575
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3576
- PERFORMANCE OF THIS SOFTWARE.
3577
- ***************************************************************************** */function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator["throw"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$2={exports:{}};/*!
3601
+ var localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return "TURN-".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents;var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$2={exports:{}};/*!
3578
3602
  * js-logger - http://github.com/jonnyreeves/js-logger
3579
3603
  * Jonny Reeves, http://jonnyreeves.co.uk/
3580
3604
  * js-logger may be freely distributed under the MIT license.
@@ -3623,7 +3647,20 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
3623
3647
  // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
3624
3648
  Logger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.
3625
3649
  Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
3626
- if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});function isValidActiveSpeakerInfo(msg){var maybeActiveSpeakerInfo=msg;return Boolean('priority'in maybeActiveSpeakerInfo&&'crossPriorityDuplication'in maybeActiveSpeakerInfo&&'crossPolicyDuplication'in maybeActiveSpeakerInfo&&'preferLiveVideo'in maybeActiveSpeakerInfo);}function areNamedMediaGroupArraysEqual(left,right){if(left===undefined||right===undefined){return left===right;}if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(left[i]!==right[i]){return false;}}return true;}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areNamedMediaGroupArraysEqual(left.namedMediaGroups,right.namedMediaGroups);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}var HomerMsgType$1;(function(HomerMsgType){HomerMsgType["Multistream"]="multistream";})(HomerMsgType$1||(HomerMsgType$1={}));class HomerMsg{constructor(msgType,payload){this.msgType=msgType;this.payload=payload;}static fromJson(data){if(!data.msgType||!data.payload){return null;}return new HomerMsg(data.msgType,data.payload);}}var JmpMsgType$1;(function(JmpMsgType){JmpMsgType["MediaRequest"]="mediaRequest";JmpMsgType["MediaRequestAck"]="mediaRequestAck";JmpMsgType["MediaRequestStatus"]="mediaRequestStatus";JmpMsgType["MediaRequestStatusAck"]="mediaRequestStatusAck";JmpMsgType["SourceAdvertisement"]="sourceAdvertisement";JmpMsgType["SourceAdvertisementAck"]="sourceAdvertisementAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";})(JmpMsgType$1||(JmpMsgType$1={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestMsg{constructor(seqNum,requests){this.seqNum=seqNum;this.requests=requests;}toString(){return "JmpMediaMsg(seqNum=".concat(this.seqNum,", requests=[").concat(this.requests,"])");}}function isValidMediaRequestMsg(msg){var maybeMediaRequestMsg=msg;return Boolean(maybeMediaRequestMsg.seqNum&&maybeMediaRequestMsg.requests);}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return "MediaRequestAckMsg(seqNum=".concat(this.mediaRequestSeqNum,")");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}function isValidStreamId(obj){var maybeStreamId=obj;if(maybeStreamId.mid&&maybeStreamId.ssrc){return false;}return Boolean(maybeStreamId.mid)||Boolean(maybeStreamId.ssrc);}function compareStreamIds(id1,id2){var keys1=Object.keys(id1);var keys2=Object.keys(id2);if(keys1.length!==keys2.length){return false;}return keys1.every(key=>id1[key]===id2[key]);}function isValidStreamInfo(obj){var maybeStreamInfo=obj;return Boolean(maybeStreamInfo.id&&isValidStreamId(maybeStreamInfo.id)&&['no source','invalid source','live','avatar','bandwidth disabled'].includes(maybeStreamInfo.state));}class MediaRequestStatusMsg{constructor(seqNum,streamStates){this.seqNum=seqNum;this.streamStates=streamStates;}}function isValidMediaRequestStatusMsg(msg){var maybeMediaRequestStatusMsg=msg;return Boolean(maybeMediaRequestStatusMsg.seqNum)&&maybeMediaRequestStatusMsg.streamStates&&maybeMediaRequestStatusMsg.streamStates.every(streamInfo=>isValidStreamInfo(streamInfo));}function compareStreamStateArrays(streamStates1,streamStates2){var _a,_b;if(streamStates1.length!==streamStates2.length){return false;}for(var i=0;i<streamStates1.length;i+=1){if(!compareStreamIds(streamStates1[i].id,streamStates2[i].id)){return false;}if(streamStates1[i].state!==streamStates2[i].state){return false;}if(((_a=streamStates1[i])===null||_a===void 0?void 0:_a.csi)!==((_b=streamStates2[i])===null||_b===void 0?void 0:_b.csi)){return false;}}return true;}class MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return "MediaRequestStatusAckMsg(seqNum=".concat(this.mediaRequestStatusSeqNum,")");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}function areH264CodecsEqual(left,right){if(left===undefined||right===undefined){return left===right;}return left.maxFs===right.maxFs&&left.maxFps===right.maxFps&&left.maxMbps===right.maxMbps&&left.maxWidth===right.maxWidth&&left.maxHeight===right.maxHeight;}function areCodecInfosEqual(left,right){return left.payloadType===right.payloadType&&areH264CodecsEqual(left.h264,right.h264);}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}var MediaFamily$1;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(MediaFamily$1||(MediaFamily$1={}));var MediaContent$1;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(MediaContent$1||(MediaContent$1={}));var Policy$1;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(Policy$1||(Policy$1={}));var MediaType$1;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(MediaType$1||(MediaType$1={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily$1.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Main){return MediaType$1.VideoMain;}if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Slides){return MediaType$1.VideoSlides;}if(mediaFamily===MediaFamily$1.Audio&&mediaContent===MediaContent$1.Main){return MediaType$1.AudioMain;}return MediaType$1.AudioSlides;}function getMediaFamily$1(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaFamily$1.Video:MediaFamily$1.Audio;}function getMediaContent(mediaType){return [MediaType$1.VideoMain,MediaType$1.AudioMain].includes(mediaType)?MediaContent$1.Main:MediaContent$1.Slides;}var truthyOrZero=value=>value===0||value;class SourceAdvertisementMsg{constructor(seqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){this.seqNum=seqNum;this.numTotalSources=numTotalSources;this.numLiveSources=numLiveSources;this.namedMediaGroups=namedMediaGroups;this.videoContentHint=videoContentHint;}toString(){return "SourceAdvertisement(seqNum=".concat(this.seqNum,", numTotalSources=").concat(this.numTotalSources,", numLiveSources=").concat(this.numLiveSources,", namedMediaGroups=").concat(this.namedMediaGroups,", videoContentHint=").concat(this.videoContentHint);}}function isValidSourceAdvertisementMsg(msg){var maybeSourceAdvertisementMsg=msg;return Boolean(maybeSourceAdvertisementMsg.seqNum&&truthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&truthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}class SourceAdvertisementAckMsg{constructor(sourceAdvertisementSeqNum){this.sourceAdvertisementSeqNum=sourceAdvertisementSeqNum;}toString(){return "SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=".concat(this.sourceAdvertisementSeqNum,")");}}function isValidSourceAdvertisementAckMsg(msg){var maybeSourceAdvertisementAckMsg=msg;return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);}class StreamRequest$1{constructor(policy,policySpecificInfo,ids,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return "Request(policy=".concat(this.policy,", info=").concat(this.policySpecificInfo,", ids=[").concat(this.ids,"], maxPayloadBitsPerSecond=[").concat(this.maxPayloadBitsPerSecond,"], codecInfos=[").concat(this.codecInfos,"])");}}function arePolicySpecificInfosEqual(left,right){if(isValidActiveSpeakerInfo(left)){if(!isValidActiveSpeakerInfo(right)){return false;}return areActiveSpeakerInfosEqual(left,right);}if(isValidReceiverSelectedInfo(left)){if(!isValidReceiverSelectedInfo(right)){return false;}return areReceiverSelectedInfosEqual(left,right);}throw new Error('Invalid PolicySpecificInfo');}function areCodecInfoArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!areCodecInfosEqual(left[i],right[i])){return false;}}return true;}function areStreamIdArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!compareStreamIds(left[i],right[i])){return false;}}return true;}function areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areStreamIdArraysEqual(left.ids,right.ids)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}if(!areCodecInfoArraysEqual(left.codecInfos,right.codecInfos)){return false;}return true;}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents$1;(function(JmpSessionEvents){JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["MediaRequestReceived"]="media-request-received";JmpSessionEvents["MediaRequestStatusReceived"]="media-request-status-received";JmpSessionEvents["SourceAdvertisementReceived"]="source-advertisement-received";})(JmpSessionEvents$1||(JmpSessionEvents$1={}));function areStreamRequestArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!areStreamRequestsEqual(left[i],right[i])){return false;}}return true;}class JmpSession extends EventEmitter$4{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currMediaRequestSeqNum=1;this.currSourceAdvertisementSeqNum=1;this.currMediaRequestStatusSeqNum=1;this.txCallback=undefined;this.lastSentMediaRequest=undefined;this.lastSentMediaRequestAck=undefined;this.lastReceivedMediaRequest=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get("JmpSession ".concat(this.mediaFamily,"-").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var mediaRequestMsg=new MediaRequestMsg(this.currMediaRequestSeqNum,requests);if(!this.lastSentMediaRequest||!areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests,requests)){this.sendJmpMsg(JmpMsgType$1.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.MediaRequest,mediaRequestMsg),expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum++,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);this.sendJmpMsg(JmpMsgType$1.SourceAdvertisement,sourceAdvertisementMsg);this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.SourceAdvertisement,sourceAdvertisementMsg),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});}sendMediaRequestStatus(streamStates){var _a,_b;var filteredStreamStates=streamStates.filter(streamState=>{var _a;return (_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>compareStreamIds(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!compareStreamStateArrays(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates)){this.sendJmpMsg(JmpMsgType$1.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.MediaRequestStatus,mediaRequestStatus),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currMediaRequestStatusSeqNum++;}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(jmpMsg," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",jmpMsg);var{payload}=jmpMsg;if(payload.msgType===JmpMsgType$1.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error("Received invalid MediaRequest:",mediaRequestMsg);return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType$1.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error("Received invalid MediaRequest ACK:",mediaRequestAckMsg);return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType$1.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",activeSpeakerNotification);return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType$1.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error("Received invalid SourceAdvertisementMsg: ",sourceAdvertisement);return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType$1.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error("Received invalid SourceAdvertisementAckMsg: ",sourceAdvertisementAck);return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType$1.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error("Received invalid MediaRequestStatusMsg: ",mediaRequestStatus);return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType$1.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error("Received invalid MediaRequestStatusAckMsg: ",mediaRequestStatusAck);return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a;this.logger.info("closing");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});var homerMsg=new HomerMsg(HomerMsgType$1.Multistream,jmpMsg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old MediaRequest, ignoring");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info("Received duplicate MediaRequest, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn("Received duplicate MediaRequest, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequest, sending ACK");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType$1.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents$1.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequest");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequest");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents$1.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum<this.lastReceivedSourceAdvertisement.seqNum){this.logger.info("Received old SourceAdvertisement, ignoring");}else if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum===this.lastReceivedSourceAdvertisement.seqNum){if(this.lastSentSourceAdvertisementAck){this.logger.info("Received duplicate SourceAdvertisement, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.SourceAdvertisementAck,this.lastSentSourceAdvertisementAck);}else {this.logger.warn("Received duplicate SourceAdvertisement, but there was no ACK previously sent");}}else {this.logger.info("Received new SourceAdvertisement, sending ACK");var sourceAdvertisementAck=new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);this.lastReceivedSourceAdvertisement=sourceAdvertisement;this.lastSentSourceAdvertisementAck=sourceAdvertisementAck;this.sendJmpMsg(JmpMsgType$1.SourceAdvertisementAck,sourceAdvertisementAck);this.emit(JmpSessionEvents$1.SourceAdvertisementReceived,sourceAdvertisement);}}handleIncomingSourceAdvertisementAck(sourceAdvertisementAck){var _a,_b,_c;if(sourceAdvertisementAck.sourceAdvertisementSeqNum===((_b=(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent SourceAdvertisement");(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old SourceAdvertisement");}}handleIncomingMediaRequestStatus(mediaRequestStatus){if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum<this.lastReceivedMediaRequestStatus.seqNum){this.logger.info("Received old MediaRequestStatus, ignoring");}else if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum===this.lastReceivedMediaRequestStatus.seqNum){if(this.lastSentMediaRequestStatusAck){this.logger.info("Received duplicate MediaRequestStatus, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.MediaRequestStatusAck,this.lastSentMediaRequestStatusAck);}else {this.logger.warn("Received duplicate MediaRequestStatus, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequestStatus, sending ACK");var mediaRequestStatusAck=new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);this.lastReceivedMediaRequestStatus=mediaRequestStatus;this.lastSentMediaRequestStatusAck=mediaRequestStatusAck;this.sendJmpMsg(JmpMsgType$1.MediaRequestStatusAck,mediaRequestStatusAck);this.emit(JmpSessionEvents$1.MediaRequestStatusReceived,mediaRequestStatus);}}handleIncomingMediaRequestStatusAck(mediaRequestStatusAck){var _a,_b,_c;if(mediaRequestStatusAck.mediaRequestStatusSeqNum===((_b=(_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequestStatus");(_c=this.lastSentMediaRequestStatus)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequestStatus");}}}var commonjsGlobal$3=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 rtcStats_1=void 0;/**
3650
+ if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});class ActiveSpeakerInfo{constructor(priority,crossPriorityDuplication,crossPolicyDuplication,preferLiveVideo,namedMediaGroups){this.priority=priority;this.crossPriorityDuplication=crossPriorityDuplication;this.crossPolicyDuplication=crossPolicyDuplication;this.preferLiveVideo=preferLiveVideo;this.namedMediaGroups=namedMediaGroups;}toString(){return "ActiveSpeakerInfo(priority=".concat(this.priority,", crossPriorityDuplication=").concat(this.crossPriorityDuplication,", crossPolicyDuplication=").concat(this.crossPolicyDuplication,", preferLiveVideo=").concat(this.preferLiveVideo,"), namedMediaGroups=").concat(this.namedMediaGroups);}}function isValidActiveSpeakerInfo(msg){var maybeActiveSpeakerInfo=msg;return Boolean('priority'in maybeActiveSpeakerInfo&&'crossPriorityDuplication'in maybeActiveSpeakerInfo&&'crossPolicyDuplication'in maybeActiveSpeakerInfo&&'preferLiveVideo'in maybeActiveSpeakerInfo);}function areNamedMediaGroupArraysEqual(left,right){if(left===undefined||right===undefined){return left===right;}if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(left[i]!==right[i]){return false;}}return true;}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areNamedMediaGroupArraysEqual(left.namedMediaGroups,right.namedMediaGroups);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}var HomerMsgType;(function(HomerMsgType){HomerMsgType["Multistream"]="multistream";})(HomerMsgType||(HomerMsgType={}));class HomerMsg{constructor(msgType,payload){this.msgType=msgType;this.payload=payload;}static fromJson(data){if(!data.msgType||!data.payload){return null;}return new HomerMsg(data.msgType,data.payload);}}var JmpMsgType;(function(JmpMsgType){JmpMsgType["MediaRequest"]="mediaRequest";JmpMsgType["MediaRequestAck"]="mediaRequestAck";JmpMsgType["MediaRequestStatus"]="mediaRequestStatus";JmpMsgType["MediaRequestStatusAck"]="mediaRequestStatusAck";JmpMsgType["SourceAdvertisement"]="sourceAdvertisement";JmpMsgType["SourceAdvertisementAck"]="sourceAdvertisementAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";})(JmpMsgType||(JmpMsgType={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestMsg{constructor(seqNum,requests){this.seqNum=seqNum;this.requests=requests;}toString(){return "JmpMediaMsg(seqNum=".concat(this.seqNum,", requests=[").concat(this.requests,"])");}}function isValidMediaRequestMsg(msg){var maybeMediaRequestMsg=msg;return Boolean(maybeMediaRequestMsg.seqNum&&maybeMediaRequestMsg.requests);}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return "MediaRequestAckMsg(seqNum=".concat(this.mediaRequestSeqNum,")");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}function isValidStreamId(obj){var maybeStreamId=obj;if(maybeStreamId.mid&&maybeStreamId.ssrc){return false;}return Boolean(maybeStreamId.mid)||Boolean(maybeStreamId.ssrc);}function compareStreamIds(id1,id2){var keys1=Object.keys(id1);var keys2=Object.keys(id2);if(keys1.length!==keys2.length){return false;}return keys1.every(key=>id1[key]===id2[key]);}function isValidStreamInfo(obj){var maybeStreamInfo=obj;return Boolean(maybeStreamInfo.id&&isValidStreamId(maybeStreamInfo.id)&&['no source','invalid source','live','avatar','bandwidth disabled'].includes(maybeStreamInfo.state));}class MediaRequestStatusMsg{constructor(seqNum,streamStates){this.seqNum=seqNum;this.streamStates=streamStates;}}function isValidMediaRequestStatusMsg(msg){var maybeMediaRequestStatusMsg=msg;return Boolean(maybeMediaRequestStatusMsg.seqNum)&&maybeMediaRequestStatusMsg.streamStates&&maybeMediaRequestStatusMsg.streamStates.every(streamInfo=>isValidStreamInfo(streamInfo));}function compareStreamStateArrays(streamStates1,streamStates2){var _a,_b;if(streamStates1.length!==streamStates2.length){return false;}for(var i=0;i<streamStates1.length;i+=1){if(!compareStreamIds(streamStates1[i].id,streamStates2[i].id)){return false;}if(streamStates1[i].state!==streamStates2[i].state){return false;}if(((_a=streamStates1[i])===null||_a===void 0?void 0:_a.csi)!==((_b=streamStates2[i])===null||_b===void 0?void 0:_b.csi)){return false;}}return true;}class MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return "MediaRequestStatusAckMsg(seqNum=".concat(this.mediaRequestStatusSeqNum,")");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}class H264Codec{constructor(maxFs,maxFps,maxMbps,maxWidth,maxHeight){this.maxFs=maxFs;this.maxFps=maxFps;this.maxMbps=maxMbps;this.maxWidth=maxWidth;this.maxHeight=maxHeight;}}function areH264CodecsEqual(left,right){if(left===undefined||right===undefined){return left===right;}return left.maxFs===right.maxFs&&left.maxFps===right.maxFps&&left.maxMbps===right.maxMbps&&left.maxWidth===right.maxWidth&&left.maxHeight===right.maxHeight;}class CodecInfo$1{constructor(payloadType,h264){this.payloadType=payloadType;this.h264=h264;}}function areCodecInfosEqual(left,right){return left.payloadType===right.payloadType&&areH264CodecsEqual(left.h264,right.h264);}class ReceiverSelectedInfo{constructor(csi){this.csi=csi;}toString(){return "ReceiverSelectedInfo(csi=".concat(this.csi,")");}}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}var MediaFamily;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(MediaFamily||(MediaFamily={}));var MediaContent;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(MediaContent||(MediaContent={}));var Policy;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(Policy||(Policy={}));var MediaType;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(MediaType||(MediaType={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Main){return MediaType.VideoMain;}if(mediaFamily===MediaFamily.Video&&mediaContent===MediaContent.Slides){return MediaType.VideoSlides;}if(mediaFamily===MediaFamily.Audio&&mediaContent===MediaContent.Main){return MediaType.AudioMain;}return MediaType.AudioSlides;}function getMediaFamily(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaFamily.Video:MediaFamily.Audio;}function getMediaContent(mediaType){return [MediaType.VideoMain,MediaType.AudioMain].includes(mediaType)?MediaContent.Main:MediaContent.Slides;}var truthyOrZero=value=>value===0||value;class SourceAdvertisementMsg{constructor(seqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){this.seqNum=seqNum;this.numTotalSources=numTotalSources;this.numLiveSources=numLiveSources;this.namedMediaGroups=namedMediaGroups;this.videoContentHint=videoContentHint;}toString(){return "SourceAdvertisement(seqNum=".concat(this.seqNum,", numTotalSources=").concat(this.numTotalSources,", numLiveSources=").concat(this.numLiveSources,", namedMediaGroups=").concat(this.namedMediaGroups,", videoContentHint=").concat(this.videoContentHint);}}function isValidSourceAdvertisementMsg(msg){var maybeSourceAdvertisementMsg=msg;return Boolean(maybeSourceAdvertisementMsg.seqNum&&truthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&truthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}class SourceAdvertisementAckMsg{constructor(sourceAdvertisementSeqNum){this.sourceAdvertisementSeqNum=sourceAdvertisementSeqNum;}toString(){return "SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=".concat(this.sourceAdvertisementSeqNum,")");}}function isValidSourceAdvertisementAckMsg(msg){var maybeSourceAdvertisementAckMsg=msg;return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);}class StreamRequest$1{constructor(policy,policySpecificInfo,ids,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return "Request(policy=".concat(this.policy,", info=").concat(this.policySpecificInfo,", ids=[").concat(this.ids,"], maxPayloadBitsPerSecond=[").concat(this.maxPayloadBitsPerSecond,"], codecInfos=[").concat(this.codecInfos,"])");}}function arePolicySpecificInfosEqual(left,right){if(isValidActiveSpeakerInfo(left)){if(!isValidActiveSpeakerInfo(right)){return false;}return areActiveSpeakerInfosEqual(left,right);}if(isValidReceiverSelectedInfo(left)){if(!isValidReceiverSelectedInfo(right)){return false;}return areReceiverSelectedInfosEqual(left,right);}throw new Error('Invalid PolicySpecificInfo');}function areCodecInfoArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!areCodecInfosEqual(left[i],right[i])){return false;}}return true;}function areStreamIdArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!compareStreamIds(left[i],right[i])){return false;}}return true;}function areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areStreamIdArraysEqual(left.ids,right.ids)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}if(!areCodecInfoArraysEqual(left.codecInfos,right.codecInfos)){return false;}return true;}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents;(function(JmpSessionEvents){JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["MediaRequestReceived"]="media-request-received";JmpSessionEvents["MediaRequestStatusReceived"]="media-request-status-received";JmpSessionEvents["SourceAdvertisementReceived"]="source-advertisement-received";})(JmpSessionEvents||(JmpSessionEvents={}));function areStreamRequestArraysEqual(left,right){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!areStreamRequestsEqual(left[i],right[i])){return false;}}return true;}class JmpSession extends EventEmitter$6{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currMediaRequestSeqNum=1;this.currSourceAdvertisementSeqNum=1;this.currMediaRequestStatusSeqNum=1;this.txCallback=undefined;this.lastSentMediaRequest=undefined;this.lastSentMediaRequestAck=undefined;this.lastReceivedMediaRequest=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get("JmpSession ".concat(this.mediaFamily,"-").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var mediaRequestMsg=new MediaRequestMsg(this.currMediaRequestSeqNum,requests);if(!this.lastSentMediaRequest||!areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests,requests)){this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg),expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum++,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});}sendMediaRequestStatus(streamStates){var _a,_b;var filteredStreamStates=streamStates.filter(streamState=>{var _a;return (_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>compareStreamIds(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!compareStreamStateArrays(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates)){this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currMediaRequestStatusSeqNum++;}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(jmpMsg," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",jmpMsg);var{payload}=jmpMsg;if(payload.msgType===JmpMsgType.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error("Received invalid MediaRequest:",mediaRequestMsg);return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error("Received invalid MediaRequest ACK:",mediaRequestAckMsg);return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",activeSpeakerNotification);return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error("Received invalid SourceAdvertisementMsg: ",sourceAdvertisement);return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error("Received invalid SourceAdvertisementAckMsg: ",sourceAdvertisementAck);return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error("Received invalid MediaRequestStatusMsg: ",mediaRequestStatus);return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error("Received invalid MediaRequestStatusAckMsg: ",mediaRequestStatusAck);return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a;this.logger.info("closing");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMsg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old MediaRequest, ignoring");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info("Received duplicate MediaRequest, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn("Received duplicate MediaRequest, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequest, sending ACK");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequest");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequest");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum<this.lastReceivedSourceAdvertisement.seqNum){this.logger.info("Received old SourceAdvertisement, ignoring");}else if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum===this.lastReceivedSourceAdvertisement.seqNum){if(this.lastSentSourceAdvertisementAck){this.logger.info("Received duplicate SourceAdvertisement, re-sending ACK");this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,this.lastSentSourceAdvertisementAck);}else {this.logger.warn("Received duplicate SourceAdvertisement, but there was no ACK previously sent");}}else {this.logger.info("Received new SourceAdvertisement, sending ACK");var sourceAdvertisementAck=new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);this.lastReceivedSourceAdvertisement=sourceAdvertisement;this.lastSentSourceAdvertisementAck=sourceAdvertisementAck;this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,sourceAdvertisementAck);this.emit(JmpSessionEvents.SourceAdvertisementReceived,sourceAdvertisement);}}handleIncomingSourceAdvertisementAck(sourceAdvertisementAck){var _a,_b,_c;if(sourceAdvertisementAck.sourceAdvertisementSeqNum===((_b=(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent SourceAdvertisement");(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old SourceAdvertisement");}}handleIncomingMediaRequestStatus(mediaRequestStatus){if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum<this.lastReceivedMediaRequestStatus.seqNum){this.logger.info("Received old MediaRequestStatus, ignoring");}else if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum===this.lastReceivedMediaRequestStatus.seqNum){if(this.lastSentMediaRequestStatusAck){this.logger.info("Received duplicate MediaRequestStatus, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,this.lastSentMediaRequestStatusAck);}else {this.logger.warn("Received duplicate MediaRequestStatus, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequestStatus, sending ACK");var mediaRequestStatusAck=new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);this.lastReceivedMediaRequestStatus=mediaRequestStatus;this.lastSentMediaRequestStatusAck=mediaRequestStatusAck;this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,mediaRequestStatusAck);this.emit(JmpSessionEvents.MediaRequestStatusReceived,mediaRequestStatus);}}handleIncomingMediaRequestStatusAck(mediaRequestStatusAck){var _a,_b,_c;if(mediaRequestStatusAck.mediaRequestStatusSeqNum===((_b=(_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequestStatus");(_c=this.lastSentMediaRequestStatus)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequestStatus");}}}var MediaCodecMimeType;(function(MediaCodecMimeType){MediaCodecMimeType["H264"]="video/H264";MediaCodecMimeType["AV1"]="video/AV1";MediaCodecMimeType["OPUS"]="audio/opus";})(MediaCodecMimeType||(MediaCodecMimeType={}));var defaultMaxVideoEncodeFrameSize=8160;var defaultMaxVideoEncodeMbps=244800;var RecommendedOpusBitrates;(function(RecommendedOpusBitrates){RecommendedOpusBitrates[RecommendedOpusBitrates["NB"]=12000]="NB";RecommendedOpusBitrates[RecommendedOpusBitrates["WB"]=20000]="WB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB"]=40000]="FB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"]=64000]="FB_MONO_MUSIC";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"]=128000]="FB_STEREO_MUSIC";})(RecommendedOpusBitrates||(RecommendedOpusBitrates={}));var maxFrameSizeToMaxBitrateMap=new Map([[60,99000],[240,199000],[576,300000],[920,640000],[1296,720000],[2304,880000],[3600,2500000],[8160,4000000]]);function areProfileLevelIdsCompatible(senderProfileLevelId,receiverProfileLevelId,levelAsymmetryAllowed){var senderProfile=Number.parseInt("0x".concat(senderProfileLevelId),16);var recvProfile=Number.parseInt("0x".concat(receiverProfileLevelId),16);var senderProfileIdc=senderProfile>>16;var recvProfileIdc=recvProfile>>16;var senderProfileIop=(senderProfile&0x00ff00)>>8;var recvProfileIop=(recvProfile&0x00ff00)>>8;var senderLevelIdc=senderProfile&0x0000ff;var recvLevelIdc=recvProfile&0x0000ff;var areProfileCompatible=senderProfileIdc===recvProfileIdc&&senderProfileIop===recvProfileIop||senderProfileIdc===0x42&&recvProfileIdc===0x42&&(senderProfileIop&0x40)===(recvProfileIop&0x40);var isLevelIdcCompatible=levelAsymmetryAllowed?true:senderLevelIdc<=recvLevelIdc;return areProfileCompatible&&isLevelIdcCompatible;}function areCodecsCompatible(senderCodec,receiverCodec){return Object.keys(receiverCodec).every(key=>{if(key==='clockRate'||key==='name'){return senderCodec[key]===receiverCodec[key];}if(key==='fmtParams'){var fmtpForSender=senderCodec[key];var fmtpForReceiver=receiverCodec[key];var levelAsymmetryAllowed=[...fmtpForSender.keys()].some(senderFmtpParamKey=>{return senderFmtpParamKey==='level-asymmetry-allowed'&&fmtpForReceiver.get(senderFmtpParamKey)==='1'&&fmtpForSender.get(senderFmtpParamKey)==='1';});return [...fmtpForSender.keys()].every(senderFmtpParamKey=>{if(fmtpForReceiver.get(senderFmtpParamKey)){if(senderFmtpParamKey==='profile-level-id'){return areProfileLevelIdsCompatible(fmtpForSender.get(senderFmtpParamKey),fmtpForReceiver.get(senderFmtpParamKey),levelAsymmetryAllowed);}}if(senderFmtpParamKey==='packetization-mode'){return fmtpForSender.get(senderFmtpParamKey)===fmtpForReceiver.get(senderFmtpParamKey);}return true;});}return true;});}function gcd(a,b){return b===0?a:gcd(b,a%b);}function getFrameHeightByMaxFs(sourceAspectRatio,requestedMaxFs){var _gcd=gcd(sourceAspectRatio[0],sourceAspectRatio[1]);var minNumberRatiosForWidth=sourceAspectRatio[0]/_gcd;var minNumberRatiosForHeight=sourceAspectRatio[1]/_gcd;return Math.floor(Math.sqrt(requestedMaxFs*16*16/(minNumberRatiosForWidth*minNumberRatiosForHeight)))*minNumberRatiosForHeight;}function getScaleDownRatio(sourceWidth,sourceHeight,maxFs,maxWidth,maxHeight){if(!sourceWidth||!sourceHeight||!maxFs){return undefined;}var scaleDownRatio=Math.max(sourceHeight/getFrameHeightByMaxFs([sourceWidth,sourceHeight],maxFs),1.0);if(maxWidth&&maxHeight){scaleDownRatio=Math.max(sourceWidth/maxWidth,sourceHeight/maxHeight,scaleDownRatio);}return scaleDownRatio;}function getRecommendedMaxBitrateForFrameSize(requestedMaxFs){if(requestedMaxFs<60){throw new Error("requested video max frame size can not less than 60");}var expectedHeight=[...maxFrameSizeToMaxBitrateMap.keys()].sort((a,b)=>b-a).find(h=>requestedMaxFs>=h);return maxFrameSizeToMaxBitrateMap.get(expectedHeight);}/******************************************************************************
3651
+ Copyright (c) Microsoft Corporation.
3652
+
3653
+ Permission to use, copy, modify, and/or distribute this software for any
3654
+ purpose with or without fee is hereby granted.
3655
+
3656
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
3657
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3658
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
3659
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
3660
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3661
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3662
+ PERFORMANCE OF THIS SOFTWARE.
3663
+ ***************************************************************************** */function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator["throw"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}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 rtcStats_1=void 0;/**
3627
3664
  * Copies values of any nested depth.
3628
3665
  *
3629
3666
  * @param value - The value to be copied.
@@ -3687,7 +3724,85 @@ Object.keys(updatedStats).forEach(function(id){var report=updatedStats[id];if(re
3687
3724
  * @param timestamp - Time the event happened in milliseconds.
3688
3725
  */var trace=function trace(name,payload,timestamp){logger({timestamp:timestamp?Math.round(timestamp):Date.now(),name:name,payload:payload});};pc.addEventListener('icecandidate',function(e){if(e.candidate){trace('onicecandidate',makeEvent(JSON.stringify(e.candidate)));}});pc.addEventListener('icecandidateerror',function(event){var _a=event,errorCode=_a.errorCode,errorText=_a.errorText;trace('onicecandidateerror',makeEvent("".concat(errorCode,": ").concat(errorText)));});pc.addEventListener('track',function(e){trace('ontrack',makeEvent("".concat(e.track.kind,":").concat(e.track.id," ").concat(e.streams.map(function(stream){return "stream:".concat(stream.id);}).join(' '))));});pc.addEventListener('signalingstatechange',function(){trace('onsignalingstatechange',makeEvent(pc.signalingState));});pc.addEventListener('iceconnectionstatechange',function(){trace('oniceconnectionstatechange',makeEvent(pc.iceConnectionState));});pc.addEventListener('icegatheringstatechange',function(){trace('onicegatheringstatechange',makeEvent(pc.iceGatheringState));});pc.addEventListener('connectionstatechange',function(){trace('onconnectionstatechange',makeEvent(pc.connectionState));});pc.addEventListener('negotiationneeded',function(){trace('onnegotiationneeded',makeEvent('negotiationneeded'));});pc.addEventListener('datachannel',function(event){trace('ondatachannel',makeEvent("".concat(event.channel.id,": ").concat(event.channel.label)));});var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
3689
3726
  var statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev
3690
- var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;});});},intervalTime);};rtcStats_1=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$1;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$1=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$1.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$1;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$1=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$1.RID_ID,") (").concat(_a$1$1.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=[];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=[];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){this.extMaps.push(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);}}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 removeCodec(sdp,codecName){sdp.avMedia.forEach(media=>{var codecInfos=[...media.codecs.entries()].filter(_ref=>{var[,ci]=_ref;var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});codecInfos.forEach(_ref2=>{var[pt]=_ref2;return media.removePt(pt);});});}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 events={exports:{}};var R=typeof Reflect==='object'?Reflect:null;var ReflectApply=R&&typeof R.apply==='function'?R.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys;if(R&&typeof R.ownKeys==='function'){ReflectOwnKeys=R.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1(){EventEmitter$1.init.call(this);}events.exports=EventEmitter$1;events.exports.once=once$1;// Backwards-compat with node 0.10.x
3727
+ var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;});});},intervalTime);};rtcStats_1=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$1;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$1=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$1.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 removeCodec(sdpOrAv,codecName){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{var codecInfos=[...media.codecs.entries()].filter(_ref2=>{var[,ci]=_ref2;var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});codecInfos.forEach(_ref3=>{var[pt]=_ref3;return media.removePt(pt);});});}function retainCodecs(sdpOrAv,allowedCodecNames){var avMediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];var allowedLowerCase=allowedCodecNames.map(s=>s.toLowerCase());avMediaDescriptions.map(av=>{return [...av.codecs.values()].map(c=>c.name);}).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(unwantedCodec=>removeCodec(sdpOrAv,unwantedCodec));}function retainCandidates(sdpOrMedia,allowedTransportTypes){var mediaDescriptions=sdpOrMedia instanceof Sdp$1?sdpOrMedia.media:[sdpOrMedia];var filtered=false;mediaDescriptions.forEach(media=>{media.iceInfo.candidates=media.iceInfo.candidates.filter(candidate=>{if(allowedTransportTypes.includes(candidate.transport.toLowerCase())){return true;}filtered=true;return false;});});return filtered;}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 simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};var logger$1={exports:{}};/*!
3728
+ * js-logger - http://github.com/jonnyreeves/js-logger
3729
+ * Jonny Reeves, http://jonnyreeves.co.uk/
3730
+ * js-logger may be freely distributed under the MIT license.
3731
+ */(function(module){(function(global){// Top level module for the global, static logger instance.
3732
+ var Logger={};// For those that are at home that are keeping score.
3733
+ Logger.VERSION="1.6.1";// Function which handles all incoming log messages.
3734
+ var logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
3735
+ var contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.
3736
+ var bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.
3737
+ var merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i<args.length;i++){for(key in args[i]){if(!(key in target)&&args[i].hasOwnProperty(key)){target[key]=args[i][key];}}}return target;};// Helper to define a logging level object; helps with optimisation.
3738
+ var defineLogLevel=function defineLogLevel(value,name){return {value:value,name:name};};// Predefined logging levels.
3739
+ Logger.TRACE=defineLogLevel(1,'TRACE');Logger.DEBUG=defineLogLevel(2,'DEBUG');Logger.INFO=defineLogLevel(3,'INFO');Logger.TIME=defineLogLevel(4,'TIME');Logger.WARN=defineLogLevel(5,'WARN');Logger.ERROR=defineLogLevel(8,'ERROR');Logger.OFF=defineLogLevel(99,'OFF');// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently
3740
+ // of each other.
3741
+ var ContextualLogger=function ContextualLogger(defaultContext){this.context=defaultContext;this.setLevel(defaultContext.filterLevel);this.log=this.info;// Convenience alias.
3742
+ };ContextualLogger.prototype={// Changes the current logging level for the logging instance.
3743
+ setLevel:function setLevel(newLevel){// Ensure the supplied Level object looks valid.
3744
+ if(newLevel&&"value"in newLevel){this.context.filterLevel=newLevel;}},// Gets the current logging level for the logging instance
3745
+ getLevel:function getLevel(){return this.context.filterLevel;},// Is the logger configured to output messages at the supplied level?
3746
+ enabledFor:function enabledFor(lvl){var filterLevel=this.context.filterLevel;return lvl.value>=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.
3747
+ invoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.
3748
+ var globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.
3749
+ (function(){// Shortcut for optimisers.
3750
+ var L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!
3751
+ L.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
3752
+ // object with the supplied log messages and the second being a context object which contains a hash of stateful
3753
+ // parameters which the logging function can consume.
3754
+ Logger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
3755
+ // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
3756
+ Logger.setLevel=function(level){// Set the globalLogger's level.
3757
+ globalLogger.setLevel(level);// Apply this level to all registered contextual loggers.
3758
+ for(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level
3759
+ Logger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
3760
+ // default context and log handler.
3761
+ Logger.get=function(name){// All logger instances are cached so they can be configured ahead of use.
3762
+ return contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will
3763
+ // write to the window's console object (if present); the optional options object can be used to customise the
3764
+ // formatter used to format each log message.
3765
+ Logger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.
3766
+ if(context.name){messages.unshift("["+context.name+"]");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
3767
+ // that don't offer a native console method.
3768
+ var timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)
3769
+ var invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.
3770
+ if(typeof console==="undefined"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.
3771
+ messages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.
3772
+ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The
3773
+ // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
3774
+ Logger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.
3775
+ Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
3776
+ if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal);})(logger$1);var Logger=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger=Logger.get(DEFAULT_LOGGER_NAME);logger.setLevel(Logger.DEBUG);function setLogHandler(logHandler){Logger.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}class JmpLine extends Line$1{constructor(versions){super();this.versions=versions;}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);}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;}function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){throw new Error("Offer media description is missing MID");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){throw new Error("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){throw new Error("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;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){if(mediaDescription.iceInfo.candidates.length===0){mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',1,'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,'tcp',3,'0.0.0.0',9,'relay'));}}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(){this.streamIds=[];this.customCodecParameters=new Map();}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,simulcastEnabled,rtxEnabled){var _a;retainCodecs(mediaDescription,['h264','opus','rtx']);mediaDescription.bandwidth=new BandwidthLine$1('TIAS',20000000);mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=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))){throw new Error('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){throw new Error("Expect ".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))){throw new Error('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){throw new Error('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(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','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-','1'));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');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(retainCandidates(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}[...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(_ref4=>{var[param,value]=_ref4;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
3777
+ 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
3778
+ // added to it. This is a useful default which helps finding memory leaks.
3779
+ 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
3780
+ // that to be increased. Set to zero for unlimited.
3781
+ EventEmitter$3.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN$1(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners$1(that){if(that._maxListeners===undefined)return EventEmitter$3.defaultMaxListeners;return that._maxListeners;}EventEmitter$3.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners$1(this);};EventEmitter$3.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
3782
+ if(doError){var er;if(args.length>0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show
3783
+ // up in Node's output if this results in an unhandled exception.
3784
+ throw er;// Unhandled 'error' event
3785
+ }// At least give some kind of context to the user
3786
+ var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
3787
+ }var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply$1(handler,this,args);}else {var len=handler.length;var listeners=arrayClone$1(handler,len);for(var i=0;i<len;++i){ReflectApply$1(listeners[i],this,args);}}return true;};function _addListener$1(target,type,listener,prepend){var m;var events;var existing;checkListener$1(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
3788
+ // adding it to the listeners, first emit "newListener".
3789
+ if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
3790
+ // this._events to be assigned to a new object
3791
+ events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
3792
+ existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
3793
+ existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
3794
+ }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
3795
+ m=_getMaxListeners$1(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
3796
+ // eslint-disable-next-line no-restricted-syntax
3797
+ var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning$1(w);}}return target;}EventEmitter$3.prototype.addListener=function addListener(type,listener){return _addListener$1(this,type,listener,false);};EventEmitter$3.prototype.on=EventEmitter$3.prototype.addListener;EventEmitter$3.prototype.prependListener=function prependListener(type,listener){return _addListener$1(this,type,listener,true);};function onceWrapper$1(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap$1(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper$1.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$3.prototype.once=function once(type,listener){checkListener$1(listener);this.on(type,_onceWrap$1(this,type,listener));return this;};EventEmitter$3.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener$1(listener);this.prependListener(type,_onceWrap$1(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
3798
+ EventEmitter$3.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener$1(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne$1(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$3.prototype.off=EventEmitter$3.prototype.removeListener;EventEmitter$3.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
3799
+ if(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events
3800
+ if(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=Object.create(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners!==undefined){// LIFO order
3801
+ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners$1(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners$1(evlistener):arrayClone$1(evlistener,evlistener.length);}EventEmitter$3.prototype.listeners=function listeners(type){return _listeners$1(this,type,true);};EventEmitter$3.prototype.rawListeners=function rawListeners(type){return _listeners$1(this,type,false);};EventEmitter$3.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount$1.call(emitter,type);}};EventEmitter$3.prototype.listenerCount=listenerCount$1;function listenerCount$1(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$3.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys$1(this._events):[];};function arrayClone$1(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne$1(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners$1(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once$2(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener$1(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter$1(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter$1(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener$1(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener$1(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
3802
+ // EventEmitters, we do not listen for `error` events here.
3803
+ emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3804
+ // have to do it manually.
3805
+ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter$2 extends events$1.exports.EventEmitter{}class IngressSdpMunger{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}mungeLocalDescription(mediaDescription){retainCodecs(mediaDescription,['h264','opus','rtx']);mediaDescription.bandwidth=new BandwidthLine$1('TIAS',20000000);removeMidRidExtensions(mediaDescription);}mungeRemoteDescription(mediaDescription){if(!mediaDescription.ssrcs.length){mediaDescription.addLine(new SsrcLine$1(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mediaDescription)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mediaDescription.addLine(new SsrcLine$1(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(this.rtxSsrc,'msid','-','1'));mediaDescription.addLine(new SsrcGroupLine$1('FID',[this.ssrc,this.rtxSsrc]));}}if(retainCandidates(mediaDescription,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(mediaDescription.mid));}[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}reset(){this.ssrc=generateSsrc();}}class MidPredictor{constructor(){this.currentMid=0;this.midMap=new Map();}getNextMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);return "".concat(mid);}allocateMidForDatachannel(){this.currentMid+=1;}reset(){this.midMap=new Map();this.currentMid=0;}getMidMap(){return this.midMap;}}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["MediaEnded"]="media-ended";ReceiveSlotEvents["SourceUpdate"]="source-update";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter$2{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);this.handleStreamEnded=this.handleStreamEnded.bind(this);this._stream=new RemoteStream(new MediaStream([track]));this._sourceState='no source';this._stream.on(StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);this._stream.on(StreamEventNames.Ended,this.handleStreamEnded);}handleStreamMuteStateChange(muted){if(muted){this.emit(ReceiveSlotEvents.MediaStopped);}else {this.emit(ReceiveSlotEvents.MediaStarted);}}handleStreamEnded(){this.emit(ReceiveSlotEvents.MediaEnded);}_replaceTrack(newTrack){this._stream.replaceTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.off(StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);this._stream.off(StreamEventNames.Ended,this.handleStreamEnded);}get id(){return this._idGetter();}get stream(){return this._stream.outputStream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver,mid){this._rtcRtpTransceiver=rtcRtpTransceiver;this.mid=mid;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,munger){super(rtcRtpTransceiver,mid);this.munger=munger;this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return this.munger.getReceiverId();},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot._replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get receiverId(){return this.munger.getReceiverId();}resetSdpMunger(){this.munger.reset();}}ReceiveOnlyTransceiver.rid='1';var events={exports:{}};var R=typeof Reflect==='object'?Reflect:null;var ReflectApply=R&&typeof R.apply==='function'?R.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys;if(R&&typeof R.ownKeys==='function'){ReflectOwnKeys=R.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1(){EventEmitter$1.init.call(this);}events.exports=EventEmitter$1;events.exports.once=once$1;// Backwards-compat with node 0.10.x
3691
3806
  EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=undefined;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
3692
3807
  // added to it. This is a useful default which helps finding memory leaks.
3693
3808
  var defaultMaxListeners=10;function checkListener(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners=arg;}});EventEmitter$1.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
@@ -3716,7 +3831,7 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
3716
3831
  // EventEmitters, we do not listen for `error` events here.
3717
3832
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3718
3833
  // have to do it manually.
3719
- if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}class MidPredictor{constructor(){this.currentMid=0;this.midMap=new Map();}getNextMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);return "".concat(mid);}allocateMidForDatachannel(){this.currentMid+=1;}reset(){this.midMap=new Map();this.currentMid=0;}getMidMap(){return this.midMap;}}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this._stream=new MediaStream([track]);this._sourceState='no source';this.addTrackHandlers(track);}addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);}handleTrackMuted(){this.emit(ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(ReceiveSlotEvents.MediaStarted);}removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);}replaceTrack(newTrack){var _a;var trackToRemove=(_a=this._stream.getTracks())===null||_a===void 0?void 0:_a[0];if(trackToRemove){this._stream.removeTrack(trackToRemove);this.removeTrackHandlers(trackToRemove);}this.addTrackHandlers(newTrack);this._stream.addTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.getTracks().forEach(t=>{this.removeTrackHandlers(t);});}get id(){return this._idGetter();}get stream(){return this._stream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver,mid){this._rtcRtpTransceiver=rtcRtpTransceiver;this.mid=mid;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,signaler){super(rtcRtpTransceiver,mid);this.streamSignaler=signaler;this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return this.streamSignaler.getReceiverId();},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}signalLocalStreams(mLine){this.streamSignaler.signalLocalStreams(mLine);}signalRemoteStreams(mLine){this.streamSignaler.signalRemoteStreams(mLine);}get receiverId(){return this.streamSignaler.getReceiverId();}resetStreamSignaler(){this.streamSignaler.reset();}}ReceiveOnlyTransceiver.rid='1';class JmpLine extends Line$1{constructor(versions){super();this.versions=versions;}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);}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 getMediaTypeForMline(mLine){var _a,_b;var mediaFamily;if(mLine.type.toLowerCase()===MediaFamily$1.Audio.toLowerCase()){mediaFamily=MediaFamily$1.Audio;}else if(mLine.type.toLowerCase()===MediaFamily$1.Video.toLowerCase()){mediaFamily=MediaFamily$1.Video;}else {throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));}var mediaContent;if((_b=(_a=mLine.content)===null||_a===void 0?void 0:_a.values)===null||_b===void 0?void 0:_b.some(v=>v.toLowerCase()==='slides')){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}return getMediaType(mediaFamily,mediaContent);}function filterCodecs(parsedSdp,allowedCodecs){var allowedLowerCase=allowedCodecs.map(s=>s.toLowerCase());parsedSdp.avMedia.map(m=>[...m.codecs.values()].map(c=>c.name)).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(c=>removeCodec(parsedSdp,c));}function setMaxBandwidth(parsedSdp,maxBandwidth){parsedSdp.avMedia.forEach(mline=>{mline.bandwidth=new BandwidthLine$1('TIAS',maxBandwidth);});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType$1.AudioMain);var videoMainMids=midMap.get(MediaType$1.VideoMain);var audioContentMids=midMap.get(MediaType$1.AudioSlides);var videoContentMids=midMap.get(MediaType$1.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 filterRecvOnlyMlines(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(mLine=>{if(mLine instanceof ApplicationMediaDescription$1||mLine instanceof AvMediaDescription$1&&mLine.direction!=='recvonly'){filteredMids.push(mLine.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentTypes(sdp,contentTypeMap){contentTypeMap.forEach((mediaContent,mid)=>{var mline=sdp.media.find(m=>m.mid===mid);if(!mline){throw new Error("Error trying to set content type for mid ".concat(mid,": not found in SDP"));}if(mediaContent===MediaContent$1.Slides){mline.addLine(new ContentLine$1(['slides']));}});}function injectJmpAttributes(parsedSdp,csiMap,streamSignalingMode){parsedSdp.avMedia.filter(mLine=>mLine.direction==='sendrecv'||mLine.direction==='inactive').forEach(mLine=>{if(!mLine.otherLines.find(line=>line instanceof JmpLine)){mLine.addLine(new JmpLine(['v1']));}if(!mLine.otherLines.find(line=>line instanceof JmpSourceLine)){var mediaType=getMediaTypeForMline(mLine);var csi=csiMap.get(mediaType);if(!csi){throw new Error("Unable to find CSI for MediaType ".concat(mediaType));}mLine.addLine(new JmpSourceLine(mLine.mid,csi.toString()));}if(!mLine.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));}});}function injectDummyCandidates(parsedSdp){parsedSdp.media.forEach(mLine=>{if(mLine.iceInfo.candidates.length===0){mLine.addLine(new CandidateLine$1('dummy1',1,'udp',1,'0.0.0.0',1,'host'));mLine.addLine(new CandidateLine$1('dummy2',2,'tcp',2,'0.0.0.0',2,'host'));mLine.addLine(new CandidateLine$1('dummy3',3,'udp',3,'0.0.0.0',3,'relay'));}});}function addVlaExtension(mLine){var vlaUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(mLine.extMaps.findIndex(extMapLine=>extMapLine.uri===vlaUri)===-1){var maxIdValue=Math.max(...mLine.extMaps.map(extMapLine=>extMapLine.id),0);var videoLayersAllocationLine=new ExtMapLine$1(maxIdValue+1,vlaUri,undefined);mLine.extMaps.push(videoLayersAllocationLine);}}var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class RidIngressStreamSignaler{constructor(mid){this.mid=mid;}getReceiverId(){return {mid:this.mid,rid:'1'};}signalLocalStreams(mLine){}signalRemoteStreams(mLine){}reset(){}}class RidEgressStreamSignaler{constructor(mid){this.streamIds=[];this.mid=mid;}signalStreams(simulcastEnabled,_rtxEnabled,mLine){mLine.ssrcGroups=[];if(this.streamIds.length===0){if(simulcastEnabled){this.streamIds=[{mid:this.mid,rid:'low'},{mid:this.mid,rid:'medium'},{mid:this.mid,rid:'high'}];}else {this.streamIds=[{mid:this.mid}];}}if(simulcastEnabled){mLine.rids=this.streamIds.map((streamId,index)=>new RidLine$1(streamId.rid,'send',"max-fs=".concat(simulcastMaxFrameSizes[index])));mLine.simulcast=new SimulcastLine$1(SimulcastLayerList$1.fromString('low;medium;high'),new SimulcastLayerList$1());addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}reset(){this.streamIds=[];}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){}deleteCodecParameters(parameters){}}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;}function matchMlinesInAnswer(parsedOffer,parsedAnswer,recvTransceiversByMid){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMline=>{if(!offerMline.mid){throw new Error("Offer mline is missing MID");}var answerMline=parsedAnswer.media.find(m=>m.mid===offerMline.mid);if(answerMline){if(answerMline instanceof AvMediaDescription$1){[...answerMline.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}return answerMline;}if(!(offerMline instanceof AvMediaDescription$1)){throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));}var startingMline=parsedAnswer.avMedia.find(m=>m.type===offerMline.type);if(!startingMline){throw new Error("Answer has no mline of type ".concat(offerMline.type,", can't generate synthetic answer mline for mid ").concat(offerMline.mid));}var fakeCorrespondingMline=deepCopy(startingMline);fakeCorrespondingMline.mid=offerMline.mid;fakeCorrespondingMline.simulcast=undefined;if(offerMline.direction==='sendrecv'||offerMline.direction==='sendonly'){fakeCorrespondingMline.direction='recvonly';}if(offerMline.direction==='recvonly'){fakeCorrespondingMline.direction='sendonly';var recvTransceiver=recvTransceiversByMid.get(offerMline.mid);if(!recvTransceiver){throw new Error("Can't find recv transceiver for mid ".concat(offerMline.mid));}recvTransceiver.signalRemoteStreams(fakeCorrespondingMline);}return fakeCorrespondingMline;});}class SendOnlyTransceiver extends Transceiver{constructor(rtcpRtpTransceiver,mid,csi,signaler){super(rtcpRtpTransceiver,mid);this.rtxEnabled=false;this.requested=false;this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.streamSignaler=signaler;}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replacePublishedTrack(newTrack){var _a,_b;return __awaiter(this,void 0,void 0,function*(){(_a=this.publishedTrack)===null||_a===void 0?void 0:_a.off(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.setPublished(false);if(this.requested){yield this.sender.replaceTrack((newTrack===null||newTrack===void 0?void 0:newTrack.underlyingTrack)||null);}this.publishedTrack=newTrack;newTrack===null||newTrack===void 0?void 0:newTrack.on(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);newTrack===null||newTrack===void 0?void 0:newTrack.setPublished(true);});}setTrackRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null:null;yield this.sender.replaceTrack(newTrack);}});}publishTrack(track){return this.replacePublishedTrack(track);}unpublishTrack(){return this.replacePublishedTrack();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;return this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection;}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){if(!this.publishedTrack)return;this.setTrackRequested(requestedIdEncodingParamsMap.size>0);var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}signalStreams(mLine){this.streamSignaler.signalStreams(this.isSimulcastEnabled(),this.rtxEnabled,mLine);}get senderIds(){return this.streamSignaler.getSenderIds();}getEncodingIndexForStreamId(id){return this.streamSignaler.getEncodingIndexForStreamId(id);}resetStreamSignaler(){this.streamSignaler.reset();}setCodecParameters(parameters){this.streamSignaler.setCodecParameters(parameters);}deleteCodecParameters(parameters){this.streamSignaler.deleteCodecParameters(parameters);}}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}function setCustomCodecParams(mLine,paramsMap){paramsMap.forEach((value,param)=>{[...mLine.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));}});});}class SsrcIngressStreamSignaler{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}signalLocalStreams(mLine){mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));}signalRemoteStreams(mLine){mLine.addLine(new SsrcLine$1(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine$1(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mLine)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mLine.addLine(new SsrcLine$1(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine$1(this.rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine$1('FID',[this.ssrc,this.rtxSsrc]));}}reset(){this.ssrc=generateSsrc();}}class SsrcEgressStreamSignaler{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}reset(){this.streamIds=[];}signalStreams(simulcastEnabled,rtxEnabled,mLine){var _a;mLine.rids=[];mLine.simulcast=undefined;mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));var numStreams=simulcastEnabled?3:1;if(!this.streamIds.length){if(mLine.ssrcs.length){var ssrcs=[...new Set(mLine.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mLine.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){throw new Error('SSRC present in SSRC groups is missing from SSRC lines');}});var rtxSsrcGroups=mLine.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){throw new Error("Expect ".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=mLine.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))){throw new Error('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){throw new Error('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(rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mLine.ssrcs=[];mLine.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mLine.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine$1(rtpSsrc,'msid','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mLine.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine$1(rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mLine.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));addVlaExtension(mLine);}setCustomCodecParams(mLine,this.customCodecParameters);}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_ref3=>{var[param,value]=_ref3;this.customCodecParameters.set(param,value);});}deleteCodecParameters(parameters){parameters.forEach(param=>{this.customCodecParameters.set(param,null);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref4=>{var[mediaType,transceiver]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType$1.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref5=>{var[mediaType,transceivers]=_ref5;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType$1.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,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);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
3834
+ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}class TypedEvent{constructor(){this.emitter=new EventEmitter();}on(handler){this.emitter.on('event',handler);}once(handler){this.emitter.once('event',handler);}off(handler){this.emitter.off('event',handler);}emit(){for(var _len4=arguments.length,args=new Array(_len4),_key4=0;_key4<_len4;_key4++){args[_key4]=arguments[_key4];}this.emitter.emit('event',...args);}}var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType["LocalOnly"]=0]="LocalOnly";OfferAnswerType[OfferAnswerType["Remote"]=1]="Remote";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,mid,csi,munger,mediaType){super(rtcRtpTransceiver,mid);this.rtxEnabled=false;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.requested=false;this.requestedIdEncodingParamsMap=new Map();this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);this.munger=munger;this.mediaType=mediaType;}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedStream)===null||_a===void 0?void 0:_a.outputStream.getTracks()[0])||null);}});}handleStreamConstraintsChange(){return __awaiter(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedStream)===null||_a===void 0?void 0:_a.outputStream.getTracks()[0])||null);}});}replacePublishedStream(newStream){return __awaiter(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.sender.replaceTrack((newStream===null||newStream===void 0?void 0:newStream.outputStream.getTracks()[0])||null);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}if(newStream){this.updateSendParameters(this.requestedIdEncodingParamsMap);}});}setStreamRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedStream)===null||_a===void 0?void 0:_a.outputStream.getTracks()[0])||null:null;yield this.sender.replaceTrack(newTrack);}});}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){if(this.publishedStream){this.setStreamRequested(requestedIdEncodingParamsMap.size>0);var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);}this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,this.isSimulcastEnabled(),this.rtxEnabled);}mungeLocalDescriptionForRemoteServer(mediaDescription){this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription);}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}set active(active){this.sendTransceiver.setActive(active);}setCodecParameters(parameters){return __awaiter(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref5=>{var[mediaType,transceiver]=_ref5;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref6=>{var[mediaType,transceivers]=_ref6;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});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);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
3720
3835
  * Creates a continuation function with some arguments already applied.
3721
3836
  *
3722
3837
  * Useful as a shorthand when combined with other control flow functions. Any
@@ -3760,7 +3875,7 @@ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});
3760
3875
  * one
3761
3876
  * two
3762
3877
  * three
3763
- */function initialParams(fn){return function(){for(var _len3=arguments.length,args=new Array(_len3),_key3=0;_key3<_len3;_key3++){args[_key3]=arguments[_key3];}var callback=args.pop();return fn.call(this,args,callback);};}/* istanbul ignore file */var hasQueueMicrotask=typeof queueMicrotask==='function'&&queueMicrotask;var hasSetImmediate=typeof setImmediate==='function'&&setImmediate;var hasNextTick=typeof browser$1==='object'&&typeof browser$1.nextTick==='function';function fallback(fn){setTimeout(fn,0);}function wrap(defer){return function(fn){for(var _len4=arguments.length,args=new Array(_len4>1?_len4-1:0),_key4=1;_key4<_len4;_key4++){args[_key4-1]=arguments[_key4];}return defer(()=>fn(...args));};}var _defer;if(hasQueueMicrotask){_defer=queueMicrotask;}else if(hasSetImmediate){_defer=setImmediate;}else if(hasNextTick){_defer=browser$1.nextTick;}else {_defer=fallback;}var setImmediate$1=wrap(_defer);/**
3878
+ */function initialParams(fn){return function(){for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}var callback=args.pop();return fn.call(this,args,callback);};}/* istanbul ignore file */var hasQueueMicrotask=typeof queueMicrotask==='function'&&queueMicrotask;var hasSetImmediate=typeof setImmediate==='function'&&setImmediate;var hasNextTick=typeof browser$1==='object'&&typeof browser$1.nextTick==='function';function fallback(fn){setTimeout(fn,0);}function wrap(defer){return function(fn){for(var _len6=arguments.length,args=new Array(_len6>1?_len6-1:0),_key6=1;_key6<_len6;_key6++){args[_key6-1]=arguments[_key6];}return defer(()=>fn(...args));};}var _defer;if(hasQueueMicrotask){_defer=queueMicrotask;}else if(hasSetImmediate){_defer=setImmediate;}else if(hasNextTick){_defer=browser$1.nextTick;}else {_defer=fallback;}var setImmediate$1=wrap(_defer);/**
3764
3879
  * Take a sync function and make it async, passing its return value to a
3765
3880
  * callback. This is useful for plugging sync functions into a waterfall,
3766
3881
  * series, or other async functions. Any arguments passed to the generated
@@ -3815,15 +3930,15 @@ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});
3815
3930
  * }));
3816
3931
  *
3817
3932
  * q.push(files);
3818
- */function asyncify(func){if(isAsync(func)){return function(){for(var _len5=arguments.length,args=new Array(_len5),_key5=0;_key5<_len5;_key5++){args[_key5]=arguments[_key5];}var callback=args.pop();var promise=func.apply(this,args);return handlePromise(promise,callback);};}return initialParams(function(args,callback){var result;try{result=func.apply(this,args);}catch(e){return callback(e);}// if result is Promise object
3933
+ */function asyncify(func){if(isAsync(func)){return function(){for(var _len7=arguments.length,args=new Array(_len7),_key7=0;_key7<_len7;_key7++){args[_key7]=arguments[_key7];}var callback=args.pop();var promise=func.apply(this,args);return handlePromise(promise,callback);};}return initialParams(function(args,callback){var result;try{result=func.apply(this,args);}catch(e){return callback(e);}// if result is Promise object
3819
3934
  if(result&&typeof result.then==='function'){return handlePromise(result,callback);}else {callback(null,result);}});}function handlePromise(promise,callback){return promise.then(value=>{invokeCallback(callback,null,value);},err=>{invokeCallback(callback,err&&err.message?err:new Error(err));});}function invokeCallback(callback,error,value){try{callback(error,value);}catch(err){setImmediate$1(e=>{throw e;},err);}}function isAsync(fn){return fn[Symbol.toStringTag]==='AsyncFunction';}function isAsyncGenerator(fn){return fn[Symbol.toStringTag]==='AsyncGenerator';}function isAsyncIterable(obj){return typeof obj[Symbol.asyncIterator]==='function';}function wrapAsync(asyncFn){if(typeof asyncFn!=='function')throw new Error('expected a function');return isAsync(asyncFn)?asyncify(asyncFn):asyncFn;}// conditionally promisify a function.
3820
3935
  // only return a promise if a callback is omitted
3821
- function awaitify(asyncFn){var arity=arguments.length>1&&arguments[1]!==undefined?arguments[1]:asyncFn.length;if(!arity)throw new Error('arity is undefined');function awaitable(){for(var _len6=arguments.length,args=new Array(_len6),_key6=0;_key6<_len6;_key6++){args[_key6]=arguments[_key6];}if(typeof args[arity-1]==='function'){return asyncFn.apply(this,args);}return new Promise((resolve,reject)=>{args[arity-1]=function(err){if(err)return reject(err);for(var _len7=arguments.length,cbArgs=new Array(_len7>1?_len7-1:0),_key7=1;_key7<_len7;_key7++){cbArgs[_key7-1]=arguments[_key7];}resolve(cbArgs.length>1?cbArgs:cbArgs[0]);};asyncFn.apply(this,args);});}return awaitable;}function _asyncMap(eachfn,arr,iteratee,callback){arr=arr||[];var results=[];var counter=0;var _iteratee=wrapAsync(iteratee);return eachfn(arr,(value,_,iterCb)=>{var index=counter++;_iteratee(value,(err,v)=>{results[index]=v;iterCb(err);});},err=>{callback(err,results);});}function isArrayLike(value){return value&&typeof value.length==='number'&&value.length>=0&&value.length%1===0;}// A temporary value used to identify if the loop should be broken.
3936
+ function awaitify(asyncFn){var arity=arguments.length>1&&arguments[1]!==undefined?arguments[1]:asyncFn.length;if(!arity)throw new Error('arity is undefined');function awaitable(){for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}if(typeof args[arity-1]==='function'){return asyncFn.apply(this,args);}return new Promise((resolve,reject)=>{args[arity-1]=function(err){if(err)return reject(err);for(var _len9=arguments.length,cbArgs=new Array(_len9>1?_len9-1:0),_key9=1;_key9<_len9;_key9++){cbArgs[_key9-1]=arguments[_key9];}resolve(cbArgs.length>1?cbArgs:cbArgs[0]);};asyncFn.apply(this,args);});}return awaitable;}function _asyncMap(eachfn,arr,iteratee,callback){arr=arr||[];var results=[];var counter=0;var _iteratee=wrapAsync(iteratee);return eachfn(arr,(value,_,iterCb)=>{var index=counter++;_iteratee(value,(err,v)=>{results[index]=v;iterCb(err);});},err=>{callback(err,results);});}function isArrayLike(value){return value&&typeof value.length==='number'&&value.length>=0&&value.length%1===0;}// A temporary value used to identify if the loop should be broken.
3822
3937
  // See #1064, #1293
3823
- var breakLoop={};function once(fn){function wrapper(){if(fn===null)return;var callFn=fn;fn=null;for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}callFn.apply(this,args);}Object.assign(wrapper,fn);return wrapper;}function getIterator(coll){return coll[Symbol.iterator]&&coll[Symbol.iterator]();}function createArrayIterator(coll){var i=-1;var len=coll.length;return function next(){return ++i<len?{value:coll[i],key:i}:null;};}function createES2015Iterator(iterator){var i=-1;return function next(){var item=iterator.next();if(item.done)return null;i++;return {value:item.value,key:i};};}function createObjectIterator(obj){var okeys=obj?Object.keys(obj):[];var i=-1;var len=okeys.length;return function next(){var key=okeys[++i];if(key==='__proto__'){return next();}return i<len?{value:obj[key],key}:null;};}function createIterator(coll){if(isArrayLike(coll)){return createArrayIterator(coll);}var iterator=getIterator(coll);return iterator?createES2015Iterator(iterator):createObjectIterator(coll);}function onlyOnce(fn){return function(){if(fn===null)throw new Error("Callback was already called.");var callFn=fn;fn=null;for(var _len9=arguments.length,args=new Array(_len9),_key9=0;_key9<_len9;_key9++){args[_key9]=arguments[_key9];}callFn.apply(this,args);};}// for async generators
3938
+ var breakLoop={};function once(fn){function wrapper(){if(fn===null)return;var callFn=fn;fn=null;for(var _len10=arguments.length,args=new Array(_len10),_key10=0;_key10<_len10;_key10++){args[_key10]=arguments[_key10];}callFn.apply(this,args);}Object.assign(wrapper,fn);return wrapper;}function getIterator(coll){return coll[Symbol.iterator]&&coll[Symbol.iterator]();}function createArrayIterator(coll){var i=-1;var len=coll.length;return function next(){return ++i<len?{value:coll[i],key:i}:null;};}function createES2015Iterator(iterator){var i=-1;return function next(){var item=iterator.next();if(item.done)return null;i++;return {value:item.value,key:i};};}function createObjectIterator(obj){var okeys=obj?Object.keys(obj):[];var i=-1;var len=okeys.length;return function next(){var key=okeys[++i];if(key==='__proto__'){return next();}return i<len?{value:obj[key],key}:null;};}function createIterator(coll){if(isArrayLike(coll)){return createArrayIterator(coll);}var iterator=getIterator(coll);return iterator?createES2015Iterator(iterator):createObjectIterator(coll);}function onlyOnce(fn){return function(){if(fn===null)throw new Error("Callback was already called.");var callFn=fn;fn=null;for(var _len11=arguments.length,args=new Array(_len11),_key11=0;_key11<_len11;_key11++){args[_key11]=arguments[_key11];}callFn.apply(this,args);};}// for async generators
3824
3939
  function asyncEachOfLimit(generator,limit,iteratee,callback){var done=false;var canceled=false;var awaiting=false;var running=0;var idx=0;function replenish(){//console.log('replenish')
3825
3940
  if(running>=limit||awaiting||done)return;//console.log('replenish awaiting')
3826
- awaiting=true;generator.next().then(_ref6=>{var{value,done:iterDone}=_ref6;//console.log('got value', value)
3941
+ awaiting=true;generator.next().then(_ref7=>{var{value,done:iterDone}=_ref7;//console.log('got value', value)
3827
3942
  if(canceled||done)return;awaiting=false;if(iterDone){done=true;if(running<=0){//console.log('done nextCb')
3828
3943
  callback(null);}return;}running++;iteratee(value,idx,iterateeCallback);idx++;replenish();}).catch(handleError);}function iterateeCallback(err,result){//console.log('iterateeCallback')
3829
3944
  running-=1;if(canceled)return;if(err)return handleError(err);if(err===false){done=true;canceled=true;return;}if(result===breakLoop||done&&running<=0){done=true;//console.log('done iterCb')
@@ -4112,9 +4227,9 @@ function eachOfGeneric(coll,iteratee,callback){return eachOfLimit$2(coll,Infinit
4112
4227
  // used for queues. This implementation assumes that the node provided by the user can be modified
4113
4228
  // to adjust the next and last properties. We implement only the minimal functionality
4114
4229
  // for queue support.
4115
- class DLL{constructor(){this.head=this.tail=null;this.length=0;}removeLink(node){if(node.prev)node.prev.next=node.next;else this.head=node.next;if(node.next)node.next.prev=node.prev;else this.tail=node.prev;node.prev=node.next=null;this.length-=1;return node;}empty(){while(this.head){this.shift();}return this;}insertAfter(node,newNode){newNode.prev=node;newNode.next=node.next;if(node.next)node.next.prev=newNode;else this.tail=newNode;node.next=newNode;this.length+=1;}insertBefore(node,newNode){newNode.prev=node.prev;newNode.next=node;if(node.prev)node.prev.next=newNode;else this.head=newNode;node.prev=newNode;this.length+=1;}unshift(node){if(this.head)this.insertBefore(this.head,node);else setInitial(this,node);}push(node){if(this.tail)this.insertAfter(this.tail,node);else setInitial(this,node);}shift(){return this.head&&this.removeLink(this.head);}pop(){return this.tail&&this.removeLink(this.tail);}toArray(){return [...this];}*[Symbol.iterator](){var cur=this.head;while(cur){yield cur.data;cur=cur.next;}}remove(testFn){var curr=this.head;while(curr){var{next}=curr;if(testFn(curr)){this.removeLink(curr);}curr=next;}return this;}}function setInitial(dll,node){dll.length=1;dll.head=dll.tail=node;}function queue(worker,concurrency,payload){if(concurrency==null){concurrency=1;}else if(concurrency===0){throw new RangeError('Concurrency must not be zero');}var _worker=wrapAsync(worker);var numRunning=0;var workersList=[];var events={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};function on(event,handler){events[event].push(handler);}function once(event,handler){var handleAndRemove=function handleAndRemove(){off(event,handleAndRemove);handler(...arguments);};events[event].push(handleAndRemove);}function off(event,handler){if(!event)return Object.keys(events).forEach(ev=>events[ev]=[]);if(!handler)return events[event]=[];events[event]=events[event].filter(ev=>ev!==handler);}function trigger(event){for(var _len10=arguments.length,args=new Array(_len10>1?_len10-1:0),_key10=1;_key10<_len10;_key10++){args[_key10-1]=arguments[_key10];}events[event].forEach(handler=>handler(...args));}var processingScheduled=false;function _insert(data,insertAtFront,rejectOnError,callback){if(callback!=null&&typeof callback!=='function'){throw new Error('task callback must be a function');}q.started=true;var res,rej;function promiseCallback(err){// we don't care about the error, let the global error handler
4230
+ class DLL{constructor(){this.head=this.tail=null;this.length=0;}removeLink(node){if(node.prev)node.prev.next=node.next;else this.head=node.next;if(node.next)node.next.prev=node.prev;else this.tail=node.prev;node.prev=node.next=null;this.length-=1;return node;}empty(){while(this.head){this.shift();}return this;}insertAfter(node,newNode){newNode.prev=node;newNode.next=node.next;if(node.next)node.next.prev=newNode;else this.tail=newNode;node.next=newNode;this.length+=1;}insertBefore(node,newNode){newNode.prev=node.prev;newNode.next=node;if(node.prev)node.prev.next=newNode;else this.head=newNode;node.prev=newNode;this.length+=1;}unshift(node){if(this.head)this.insertBefore(this.head,node);else setInitial(this,node);}push(node){if(this.tail)this.insertAfter(this.tail,node);else setInitial(this,node);}shift(){return this.head&&this.removeLink(this.head);}pop(){return this.tail&&this.removeLink(this.tail);}toArray(){return [...this];}*[Symbol.iterator](){var cur=this.head;while(cur){yield cur.data;cur=cur.next;}}remove(testFn){var curr=this.head;while(curr){var{next}=curr;if(testFn(curr)){this.removeLink(curr);}curr=next;}return this;}}function setInitial(dll,node){dll.length=1;dll.head=dll.tail=node;}function queue(worker,concurrency,payload){if(concurrency==null){concurrency=1;}else if(concurrency===0){throw new RangeError('Concurrency must not be zero');}var _worker=wrapAsync(worker);var numRunning=0;var workersList=[];var events={error:[],drain:[],saturated:[],unsaturated:[],empty:[]};function on(event,handler){events[event].push(handler);}function once(event,handler){var handleAndRemove=function handleAndRemove(){off(event,handleAndRemove);handler(...arguments);};events[event].push(handleAndRemove);}function off(event,handler){if(!event)return Object.keys(events).forEach(ev=>events[ev]=[]);if(!handler)return events[event]=[];events[event]=events[event].filter(ev=>ev!==handler);}function trigger(event){for(var _len12=arguments.length,args=new Array(_len12>1?_len12-1:0),_key12=1;_key12<_len12;_key12++){args[_key12-1]=arguments[_key12];}events[event].forEach(handler=>handler(...args));}var processingScheduled=false;function _insert(data,insertAtFront,rejectOnError,callback){if(callback!=null&&typeof callback!=='function'){throw new Error('task callback must be a function');}q.started=true;var res,rej;function promiseCallback(err){// we don't care about the error, let the global error handler
4116
4231
  // deal with it
4117
- if(err)return rejectOnError?rej(err):res();for(var _len11=arguments.length,args=new Array(_len11>1?_len11-1:0),_key11=1;_key11<_len11;_key11++){args[_key11-1]=arguments[_key11];}if(args.length<=1)return res(args[0]);res(args);}var item=q._createTaskItem(data,rejectOnError?promiseCallback:callback||promiseCallback);if(insertAtFront){q._tasks.unshift(item);}else {q._tasks.push(item);}if(!processingScheduled){processingScheduled=true;setImmediate$1(()=>{processingScheduled=false;q.process();});}if(rejectOnError||!callback){return new Promise((resolve,reject)=>{res=resolve;rej=reject;});}}function _createCB(tasks){return function(err){numRunning-=1;for(var _len12=arguments.length,args=new Array(_len12>1?_len12-1:0),_key12=1;_key12<_len12;_key12++){args[_key12-1]=arguments[_key12];}for(var i=0,l=tasks.length;i<l;i++){var task=tasks[i];var index=workersList.indexOf(task);if(index===0){workersList.shift();}else if(index>0){workersList.splice(index,1);}task.callback(err,...args);if(err!=null){trigger('error',err,task.data);}}if(numRunning<=q.concurrency-q.buffer){trigger('unsaturated');}if(q.idle()){trigger('drain');}q.process();};}function _maybeDrain(data){if(data.length===0&&q.idle()){// call drain immediately if there are no tasks
4232
+ if(err)return rejectOnError?rej(err):res();for(var _len13=arguments.length,args=new Array(_len13>1?_len13-1:0),_key13=1;_key13<_len13;_key13++){args[_key13-1]=arguments[_key13];}if(args.length<=1)return res(args[0]);res(args);}var item=q._createTaskItem(data,rejectOnError?promiseCallback:callback||promiseCallback);if(insertAtFront){q._tasks.unshift(item);}else {q._tasks.push(item);}if(!processingScheduled){processingScheduled=true;setImmediate$1(()=>{processingScheduled=false;q.process();});}if(rejectOnError||!callback){return new Promise((resolve,reject)=>{res=resolve;rej=reject;});}}function _createCB(tasks){return function(err){numRunning-=1;for(var _len14=arguments.length,args=new Array(_len14>1?_len14-1:0),_key14=1;_key14<_len14;_key14++){args[_key14-1]=arguments[_key14];}for(var i=0,l=tasks.length;i<l;i++){var task=tasks[i];var index=workersList.indexOf(task);if(index===0){workersList.shift();}else if(index>0){workersList.splice(index,1);}task.callback(err,...args);if(err!=null){trigger('error',err,task.data);}}if(numRunning<=q.concurrency-q.buffer){trigger('unsaturated');}if(q.idle()){trigger('drain');}q.process();};}function _maybeDrain(data){if(data.length===0&&q.idle()){// call drain immediately if there are no tasks
4118
4233
  setImmediate$1(()=>trigger('drain'));return true;}return false;}var eventMethod=name=>handler=>{if(!handler){return new Promise((resolve,reject)=>{once(name,(err,data)=>{if(err)return reject(err);resolve(data);});});}off(name);on(name,handler);};var isProcessing=false;var q={_tasks:new DLL(),_createTaskItem(data,callback){return {data,callback};},*[Symbol.iterator](){yield*q._tasks[Symbol.iterator]();},concurrency,payload,buffer:concurrency/4,started:false,paused:false,push(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,false,callback));}return _insert(data,false,false,callback);},pushAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,false,true,callback));}return _insert(data,false,true,callback);},kill(){off();q._tasks.empty();},unshift(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,false,callback));}return _insert(data,true,false,callback);},unshiftAsync(data,callback){if(Array.isArray(data)){if(_maybeDrain(data))return;return data.map(datum=>_insert(datum,true,true,callback));}return _insert(data,true,true,callback);},remove(testFn){q._tasks.remove(testFn);},process(){// Avoid trying to start too many processing operations. This can occur
4119
4234
  // when callbacks resolve synchronously (#1267).
4120
4235
  if(isProcessing){return;}isProcessing=true;while(!q.paused&&numRunning<q.concurrency&&q._tasks.length){var tasks=[],data=[];var l=q._tasks.length;if(q.payload)l=Math.min(l,q.payload);for(var i=0;i<l;i++){var node=q._tasks.shift();tasks.push(node);workersList.push(node);data.push(node.data);}numRunning+=1;if(q._tasks.length===0){trigger('empty');}if(numRunning===q.concurrency){trigger('saturated');}var cb=onlyOnce(_createCB(tasks));_worker(data,cb);}isProcessing=false;},length(){return q._tasks.length;},running(){return numRunning;},workersList(){return workersList;},idle(){return q._tasks.length+numRunning===0;},pause(){q.paused=true;},resume(){if(q.paused===false){return;}q.paused=false;setImmediate$1(q.process);}};// define these as fixed properties, so people get useful errors when updating
@@ -4272,7 +4387,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4272
4387
  * containing the concatenated results of the `iteratee` function. Invoked with
4273
4388
  * (err, results).
4274
4389
  * @returns A Promise, if no callback is passed
4275
- */function concatLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,function(err){if(err)return iterCb(err);for(var _len13=arguments.length,args=new Array(_len13>1?_len13-1:0),_key13=1;_key13<_len13;_key13++){args[_key13-1]=arguments[_key13];}return iterCb(err,args);});},(err,mapResults)=>{var result=[];for(var i=0;i<mapResults.length;i++){if(mapResults[i]){result=result.concat(...mapResults[i]);}}return callback(err,result);});}var concatLimit$1=awaitify(concatLimit,4);/**
4390
+ */function concatLimit(coll,limit,iteratee,callback){var _iteratee=wrapAsync(iteratee);return mapLimit$1(coll,limit,(val,iterCb)=>{_iteratee(val,function(err){if(err)return iterCb(err);for(var _len15=arguments.length,args=new Array(_len15>1?_len15-1:0),_key15=1;_key15<_len15;_key15++){args[_key15-1]=arguments[_key15];}return iterCb(err,args);});},(err,mapResults)=>{var result=[];for(var i=0;i<mapResults.length;i++){if(mapResults[i]){result=result.concat(...mapResults[i]);}}return callback(err,result);});}var concatLimit$1=awaitify(concatLimit,4);/**
4276
4391
  * Applies `iteratee` to each item in `coll`, concatenating the results. Returns
4277
4392
  * the concatenated list. The `iteratee`s are called in parallel, and the
4278
4393
  * results are concatenated as they return. The results array will be returned in
@@ -4518,7 +4633,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4518
4633
  * `callback` will be passed an error and any arguments passed to the final
4519
4634
  * `iteratee`'s callback. Invoked with (err, [results]);
4520
4635
  * @returns {Promise} a promise, if no callback is passed
4521
- */function doWhilst(iteratee,test,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results;function next(err){if(err)return callback(err);if(err===false)return;for(var _len14=arguments.length,args=new Array(_len14>1?_len14-1:0),_key14=1;_key14<_len14;_key14++){args[_key14-1]=arguments[_key14];}results=args;_test(...args,check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return check(null,true);}awaitify(doWhilst,3);function _withoutIndex(iteratee){return (value,index,callback)=>iteratee(value,callback);}/**
4636
+ */function doWhilst(iteratee,test,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results;function next(err){if(err)return callback(err);if(err===false)return;for(var _len16=arguments.length,args=new Array(_len16>1?_len16-1:0),_key16=1;_key16<_len16;_key16++){args[_key16-1]=arguments[_key16];}results=args;_test(...args,check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return check(null,true);}awaitify(doWhilst,3);function _withoutIndex(iteratee){return (value,index,callback)=>iteratee(value,callback);}/**
4522
4637
  * Applies the function `iteratee` to each item in `coll`, in parallel.
4523
4638
  * The `iteratee` is called with an item from the list, and a callback for when
4524
4639
  * it has finished. If the `iteratee` passes an error to its `callback`, the
@@ -4692,7 +4807,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4692
4807
  * // this will defer sometimesAsync's callback if necessary,
4693
4808
  * // preventing stack overflows
4694
4809
  * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);
4695
- */function ensureAsync(fn){if(isAsync(fn))return fn;return function(){for(var _len15=arguments.length,args=new Array(_len15),_key15=0;_key15<_len15;_key15++){args[_key15]=arguments[_key15];}var callback=args.pop();var sync=true;args.push(function(){for(var _len16=arguments.length,innerArgs=new Array(_len16),_key16=0;_key16<_len16;_key16++){innerArgs[_key16]=arguments[_key16];}if(sync){setImmediate$1(()=>callback(...innerArgs));}else {callback(...innerArgs);}});fn.apply(this,args);sync=false;};}/**
4810
+ */function ensureAsync(fn){if(isAsync(fn))return fn;return function(){for(var _len17=arguments.length,args=new Array(_len17),_key17=0;_key17<_len17;_key17++){args[_key17]=arguments[_key17];}var callback=args.pop();var sync=true;args.push(function(){for(var _len18=arguments.length,innerArgs=new Array(_len18),_key18=0;_key18<_len18;_key18++){innerArgs[_key18]=arguments[_key18];}if(sync){setImmediate$1(()=>callback(...innerArgs));}else {callback(...innerArgs);}});fn.apply(this,args);sync=false;};}/**
4696
4811
  * Returns `true` if every element in `coll` satisfies an async test. If any
4697
4812
  * iteratee call returns `false`, the main `callback` is immediately called.
4698
4813
  *
@@ -4998,7 +5113,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
4998
5113
  * of each key from `obj`, with each transformed value on the right-hand side.
4999
5114
  * Invoked with (err, result).
5000
5115
  * @returns {Promise} a promise, if no callback is passed
5001
- */function mapValuesLimit(obj,limit,iteratee,callback){callback=once(callback);var newObj={};var _iteratee=wrapAsync(iteratee);return eachOfLimit(limit)(obj,(val,key,next)=>{_iteratee(val,key,(err,result)=>{if(err)return next(err);newObj[key]=result;next(err);});},err=>callback(err,newObj));}awaitify(mapValuesLimit,4);if(hasNextTick){browser$1.nextTick;}else if(hasSetImmediate){setImmediate;}else;awaitify((eachfn,tasks,callback)=>{var results=isArrayLike(tasks)?[]:{};eachfn(tasks,(task,key,taskCb)=>{wrapAsync(task)(function(err){for(var _len17=arguments.length,result=new Array(_len17>1?_len17-1:0),_key17=1;_key17<_len17;_key17++){result[_key17-1]=arguments[_key17];}if(result.length<2){[result]=result;}results[key]=result;taskCb(err);});},err=>callback(err,results));},3);/**
5116
+ */function mapValuesLimit(obj,limit,iteratee,callback){callback=once(callback);var newObj={};var _iteratee=wrapAsync(iteratee);return eachOfLimit(limit)(obj,(val,key,next)=>{_iteratee(val,key,(err,result)=>{if(err)return next(err);newObj[key]=result;next(err);});},err=>callback(err,newObj));}awaitify(mapValuesLimit,4);if(hasNextTick){browser$1.nextTick;}else if(hasSetImmediate){setImmediate;}else;awaitify((eachfn,tasks,callback)=>{var results=isArrayLike(tasks)?[]:{};eachfn(tasks,(task,key,taskCb)=>{wrapAsync(task)(function(err){for(var _len19=arguments.length,result=new Array(_len19>1?_len19-1:0),_key19=1;_key19<_len19;_key19++){result[_key19-1]=arguments[_key19];}if(result.length<2){[result]=result;}results[key]=result;taskCb(err);});},err=>callback(err,results));},3);/**
5002
5117
  * A queue of tasks for the worker function to complete.
5003
5118
  * @typedef {Iterable} QueueObject
5004
5119
  * @memberOf module:ControlFlow
@@ -5592,7 +5707,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5592
5707
  * Now do something with the data.
5593
5708
  * });
5594
5709
  *
5595
- */function tryEach(tasks,callback){var error=null;var result;return eachSeries$1(tasks,(task,taskCb)=>{wrapAsync(task)(function(err){if(err===false)return taskCb(err);for(var _len18=arguments.length,args=new Array(_len18>1?_len18-1:0),_key18=1;_key18<_len18;_key18++){args[_key18-1]=arguments[_key18];}if(args.length<2){[result]=args;}else {result=args;}error=err;taskCb(err?null:{});});},()=>callback(error,result));}awaitify(tryEach);/**
5710
+ */function tryEach(tasks,callback){var error=null;var result;return eachSeries$1(tasks,(task,taskCb)=>{wrapAsync(task)(function(err){if(err===false)return taskCb(err);for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){args[_key20-1]=arguments[_key20];}if(args.length<2){[result]=args;}else {result=args;}error=err;taskCb(err?null:{});});},()=>callback(error,result));}awaitify(tryEach);/**
5596
5711
  * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when
5597
5712
  * stopped, or an error occurs.
5598
5713
  *
@@ -5625,7 +5740,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5625
5740
  * // 5 seconds have passed, n = 5
5626
5741
  * }
5627
5742
  * );
5628
- */function whilst(test,iteratee,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results=[];function next(err){if(err)return callback(err);for(var _len19=arguments.length,rest=new Array(_len19>1?_len19-1:0),_key19=1;_key19<_len19;_key19++){rest[_key19-1]=arguments[_key19];}results=rest;if(err===false)return;_test(check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return _test(check);}awaitify(whilst,3);/**
5743
+ */function whilst(test,iteratee,callback){callback=onlyOnce(callback);var _fn=wrapAsync(iteratee);var _test=wrapAsync(test);var results=[];function next(err){if(err)return callback(err);for(var _len21=arguments.length,rest=new Array(_len21>1?_len21-1:0),_key21=1;_key21<_len21;_key21++){rest[_key21-1]=arguments[_key21];}results=rest;if(err===false)return;_test(check);}function check(err,truth){if(err)return callback(err);if(err===false)return;if(!truth)return callback(null,...results);_fn(next);}return _test(check);}awaitify(whilst,3);/**
5629
5744
  * Runs the `tasks` array of functions in series, each passing their results to
5630
5745
  * the next in the array. However, if any of the `tasks` pass an error to their
5631
5746
  * own callback, the next function is not executed, and the main `callback` is
@@ -5681,56 +5796,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5681
5796
  * // arg1 now equals 'three'
5682
5797
  * callback(null, 'done');
5683
5798
  * }
5684
- */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){args[_key20-1]=arguments[_key20];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var logger$1={exports:{}};/*!
5685
- * js-logger - http://github.com/jonnyreeves/js-logger
5686
- * Jonny Reeves, http://jonnyreeves.co.uk/
5687
- * js-logger may be freely distributed under the MIT license.
5688
- */(function(module){(function(global){// Top level module for the global, static logger instance.
5689
- var Logger={};// For those that are at home that are keeping score.
5690
- Logger.VERSION="1.6.1";// Function which handles all incoming log messages.
5691
- var logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
5692
- var contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.
5693
- var bind=function bind(scope,func){return function(){return func.apply(scope,arguments);};};// Super exciting object merger-matron 9000 adding another 100 bytes to your download.
5694
- var merge=function merge(){var args=arguments,target=args[0],key,i;for(i=1;i<args.length;i++){for(key in args[i]){if(!(key in target)&&args[i].hasOwnProperty(key)){target[key]=args[i][key];}}}return target;};// Helper to define a logging level object; helps with optimisation.
5695
- var defineLogLevel=function defineLogLevel(value,name){return {value:value,name:name};};// Predefined logging levels.
5696
- Logger.TRACE=defineLogLevel(1,'TRACE');Logger.DEBUG=defineLogLevel(2,'DEBUG');Logger.INFO=defineLogLevel(3,'INFO');Logger.TIME=defineLogLevel(4,'TIME');Logger.WARN=defineLogLevel(5,'WARN');Logger.ERROR=defineLogLevel(8,'ERROR');Logger.OFF=defineLogLevel(99,'OFF');// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently
5697
- // of each other.
5698
- var ContextualLogger=function ContextualLogger(defaultContext){this.context=defaultContext;this.setLevel(defaultContext.filterLevel);this.log=this.info;// Convenience alias.
5699
- };ContextualLogger.prototype={// Changes the current logging level for the logging instance.
5700
- setLevel:function setLevel(newLevel){// Ensure the supplied Level object looks valid.
5701
- if(newLevel&&"value"in newLevel){this.context.filterLevel=newLevel;}},// Gets the current logging level for the logging instance
5702
- getLevel:function getLevel(){return this.context.filterLevel;},// Is the logger configured to output messages at the supplied level?
5703
- enabledFor:function enabledFor(lvl){var filterLevel=this.context.filterLevel;return lvl.value>=filterLevel.value;},trace:function trace(){this.invoke(Logger.TRACE,arguments);},debug:function debug(){this.invoke(Logger.DEBUG,arguments);},info:function info(){this.invoke(Logger.INFO,arguments);},warn:function warn(){this.invoke(Logger.WARN,arguments);},error:function error(){this.invoke(Logger.ERROR,arguments);},time:function time(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'start']);}},timeEnd:function timeEnd(label){if(typeof label==='string'&&label.length>0){this.invoke(Logger.TIME,[label,'end']);}},// Invokes the logger callback if it's not being filtered.
5704
- invoke:function invoke(level,msgArgs){if(logHandler&&this.enabledFor(level)){logHandler(msgArgs,merge({level:level},this.context));}}};// Protected instance which all calls to the to level `Logger` module will be routed through.
5705
- var globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.
5706
- (function(){// Shortcut for optimisers.
5707
- var L=Logger;L.enabledFor=bind(globalLogger,globalLogger.enabledFor);L.trace=bind(globalLogger,globalLogger.trace);L.debug=bind(globalLogger,globalLogger.debug);L.time=bind(globalLogger,globalLogger.time);L.timeEnd=bind(globalLogger,globalLogger.timeEnd);L.info=bind(globalLogger,globalLogger.info);L.warn=bind(globalLogger,globalLogger.warn);L.error=bind(globalLogger,globalLogger.error);// Don't forget the convenience alias!
5708
- L.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
5709
- // object with the supplied log messages and the second being a context object which contains a hash of stateful
5710
- // parameters which the logging function can consume.
5711
- Logger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
5712
- // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
5713
- Logger.setLevel=function(level){// Set the globalLogger's level.
5714
- globalLogger.setLevel(level);// Apply this level to all registered contextual loggers.
5715
- for(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level
5716
- Logger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
5717
- // default context and log handler.
5718
- Logger.get=function(name){// All logger instances are cached so they can be configured ahead of use.
5719
- return contextualLoggersByNameMap[name]||(contextualLoggersByNameMap[name]=new ContextualLogger(merge({name:name},globalLogger.context)));};// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will
5720
- // write to the window's console object (if present); the optional options object can be used to customise the
5721
- // formatter used to format each log message.
5722
- Logger.createDefaultHandler=function(options){options=options||{};options.formatter=options.formatter||function defaultMessageFormatter(messages,context){// Prepend the logger's name to the log message for easy identification.
5723
- if(context.name){messages.unshift("["+context.name+"]");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
5724
- // that don't offer a native console method.
5725
- var timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)
5726
- var invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.
5727
- if(typeof console==="undefined"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.
5728
- messages=Array.prototype.slice.call(messages);var hdlr=console.log;var timerLabel;if(context.level===Logger.TIME){timerLabel=(context.name?'['+context.name+'] ':'')+messages[0];if(messages[1]==='start'){if(console.time){console.time(timerLabel);}else {timerStartTimeByLabelMap[timerLabel]=new Date().getTime();}}else {if(console.timeEnd){console.timeEnd(timerLabel);}else {invokeConsoleMethod(hdlr,[timerLabel+': '+(new Date().getTime()-timerStartTimeByLabelMap[timerLabel])+'ms']);}}}else {// Delegate through to custom warn/error loggers if present on the console.
5729
- if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context.level===Logger.ERROR&&console.error){hdlr=console.error;}else if(context.level===Logger.INFO&&console.info){hdlr=console.info;}else if(context.level===Logger.DEBUG&&console.debug){hdlr=console.debug;}else if(context.level===Logger.TRACE&&console.trace){hdlr=console.trace;}options.formatter(messages,context);invokeConsoleMethod(hdlr,messages);}};};// Configure and example a Default implementation which writes to the `window.console` (if present). The
5730
- // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
5731
- Logger.useDefaults=function(options){Logger.setLevel(options&&options.defaultLevel||Logger.DEBUG);Logger.setHandler(Logger.createDefaultHandler(options));};// Createa an alias to useDefaults to avoid reaking a react-hooks rule.
5732
- Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
5733
- if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$3);})(logger$1);var Logger$3=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger$4=Logger$3.get(DEFAULT_LOGGER_NAME);logger$4.setLevel(Logger$3.DEBUG);function setLogHandler(logHandler){Logger$3.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}function toMediaStreamTrackKind(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}function createEgressStreamSignaler(signalingMode,mid){if(signalingMode==='MID-RID'){return new RidEgressStreamSignaler(mid);}if(signalingMode==='SSRC'){return new SsrcEgressStreamSignaler();}throw new Error("unknown signaling mode");}function createIngressStreamSignaler(signalingMode,mid){if(signalingMode==='MID-RID'){return new RidIngressStreamSignaler(mid);}if(signalingMode==='SSRC'){return new SsrcIngressStreamSignaler();}throw new Error("unknown signaling mode");}function toMediaFamily(kind){if(kind===MediaStreamTrackKind.Video){return MediaFamily$1.Video;}return MediaFamily$1.Audio;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={floorControlledPresentation:false,disableSimulcast:getBrowserDetails().name==='Firefox',streamSignalingMode:'SSRC',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,enableMainAudio:true,enableMainVideo:true};class MultistreamConnection extends EventEmitter{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _a,_b;super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.requestedIdEncodingParamsMap=new Map();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Main);this.createSendTransceiver(MediaType$1.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType$1.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType$1.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType$1.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType$1.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType$1.AudioSlides,contentSceneId);}}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent$1.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger$4.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily$1(mediaType),sceneId);var signaler=createEgressStreamSignaler(this.options.streamSignalingMode,mid);var transceiver=new SendOnlyTransceiver(rtcTransceiver,mid,csi,signaler);if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily$1(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger$4.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger$4.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily$1(mediaType)===MediaFamily$1.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents$1.MediaRequestReceived,data=>{if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily$1(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger$4.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref7=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref7;var _a,_b,_c;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger$4.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=sendTransceiver.senderIds.some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily$1.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger$4.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger$4.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger$4.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger$4.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger$4.error("Error parsing datachannel JSON: ".concat(err));return;}logger$4.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger$4.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger$4.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger$4.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger$4.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily$1(mediaType)!==MediaFamily$1.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){contentHint=transceiver.publishedTrack.videoContentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}publishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);if(track===sendTransceiver.publishedTrack){logger$4.warn("This track has already been published on the transceiver.");return Promise.resolve();}this.addTrackListeners(mediaType,track);return sendTransceiver.publishTrack(track);});}unpublishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.unpublishTrack();});}addTrackListeners(mediaType,track){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var onTrackResolutionChange=()=>{sendTransceiver.updateSendParameters(this.requestedIdEncodingParamsMap);};track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.Muted,onTrackMute);var onTrackPublish=event=>{if(!event.isPublished){track.off(LocalTrack.Events.Muted,onTrackMute);track.off(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);track.off(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);}if(!track.muted){this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);if(mediaType===MediaType$1.VideoMain){sendTransceiver.updateSendParameters(this.requestedIdEncodingParamsMap);}}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoStreamStates(mediaType){var _a,_b;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var published=(_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.published;var muted=((_b=sendTransceiver.publishedTrack)===null||_b===void 0?void 0:_b.muted)===true;return sendTransceiver.senderIds.map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){return new Promise(createReceiveSlotResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var transceiverMid=this.midPredictor.getNextMid(mediaType);var ingressSignaler=createIngressStreamSignaler(this.options.streamSignalingMode,transceiverMid);var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,transceiverMid,ingressSignaler);this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}logger$4.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){logger$4.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger$4.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}}));});}doLocalOfferAnswer(){var _a;return __awaiter(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});});}queueLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}enableMultistreamAudio(enabled){var sendTransceiver=this.sendTransceivers.get(MediaType$1.AudioMain);if(sendTransceiver){return sendTransceiver.setActive(enabled);}return false;}preProcessLocalOffer(offer){var parsed=parse$1(offer);filterCodecs(parsed,['h264','opus','rtx']);setMaxBandwidth(parsed,20000000);parsed.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var transceiver=this.getRecvTransceiverByMidOrThrow(av.mid);transceiver.signalLocalStreams(av);});parsed.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var transceiver=this.getSendTransceiverByMidOrThrow(av.mid);transceiver.signalStreams(av);});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsed.toString();}prepareLocalOfferForRemoteServer(offer){var parsed=parse$1(offer);var midContentMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{midContentMap.set(transceiver.mid,getMediaContent(mediaType));});injectContentTypes(parsed,midContentMap);var csiMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{csiMap.set(mediaType,transceiver.csi);});injectJmpAttributes(parsed,csiMap,this.options.streamSignalingMode);filterRecvOnlyMlines(parsed);injectDummyCandidates(parsed);parsed.avMedia.filter(av=>av.direction==='sendrecv'&&av.type==='video').forEach(av=>{var ssrcGroup=av.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{av.addLine(new SsrcLine$1(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsed.media.forEach((mline,index)=>{if(index>0){mline.port=parsed.media[0].port;}});}}return parsed.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);var recvTransceiversByMid=new Map([...this.recvTransceivers.values()].flat().map(t=>[t.mid,t]));matchMlinesInAnswer(parsedOffer,parsedAnswer,recvTransceiversByMid);if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){var{ufrag,pwd}=parsedAnswer.media[0].iceInfo;parsedAnswer.media.forEach((mline,index)=>{if(index>0){mline.iceInfo.ufrag=ufrag;mline.iceInfo.pwd=pwd;}});}}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){throw new Error("Unable to find send transceiver with mid ".concat(mid));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){throw new Error("Unable to find recv transceiver with mid ".concat(mid));}return transceiver;}getPublishedTracks(){return [...this.sendTransceivers.values()].map(transceiver=>transceiver.publishedTrack).filter(Boolean);}setCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var transceiver=this.sendTransceivers.get(mediaType);transceiver===null||transceiver===void 0?void 0:transceiver.setCodecParameters(parameters);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}deleteCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var transceiver=this.sendTransceivers.get(mediaType);transceiver===null||transceiver===void 0?void 0:transceiver.deleteCodecParameters(parameters);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent$1.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily$1.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily$1(mediaType),sceneId);transceiver.resetStreamSignaler();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref8=>{var[mediaType,transceiver]=_ref8;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref9=>{var[mediaType,transceivers]=_ref9;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;Object.assign(statsToModify,transceiver.receiverId);stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats));}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType$1.AudioMain),audioSlides:this.getCsiByMediaType(MediaType$1.AudioSlides),videoMain:this.getCsiByMediaType(MediaType$1.VideoMain),videoSlides:this.getCsiByMediaType(MediaType$1.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
5799
+ */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}function toMediaStreamTrackKind(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:getBrowserDetails().name==='Firefox',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(MediaContent.Slides);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);this.createSendTransceiver(MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger();var transceiver=new SendOnlyTransceiver(rtcTransceiver,mid,csi,munger,mediaType);if(getMediaFamily(mediaType)===MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.setActive(false);transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.setActive(active);return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{if(getMediaFamily(mediaType)===MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref8=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref8;var _a,_b,_c;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=sendTransceiver.senderIds.some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error("Error parsing datachannel JSON: ".concat(err));return;}logger.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==MediaFamily.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var _a;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var published=!!sendTransceiver.publishedStream;var muted=(_a=sendTransceiver.publishedStream)===null||_a===void 0?void 0:_a.muted;return sendTransceiver.senderIds.map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){return new Promise(createReceiveSlotResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var transceiverMid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,transceiverMid,munger);this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}}));});}doLocalOfferAnswer(){var _a;return __awaiter(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});});}queueLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av);});parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});if(getBrowserDetails().name==='Firefox'){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidates(media,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(media.mid));}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){throw new Error("Unable to find send transceiver with mid ".concat(mid));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){throw new Error("Unable to find recv transceiver with mid ".concat(mid));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref9=>{var[mediaType,transceiver]=_ref9;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref10=>{var[mediaType,transceivers]=_ref10;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;Object.assign(statsToModify,transceiver.receiverId);stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats));}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType.AudioMain),audioSlides:this.getCsiByMediaType(MediaType.AudioSlides),videoMain:this.getCsiByMediaType(MediaType.VideoMain),videoSlides:this.getCsiByMediaType(MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
5734
5800
 
5735
5801
  var defaultLogger = {
5736
5802
  info: function info() {
@@ -6696,7 +6762,7 @@ class ApplicationMediaDescription extends MediaDescription {
6696
6762
  return true;
6697
6763
  }
6698
6764
  }
6699
- class CodecInfo$1 {
6765
+ class CodecInfo {
6700
6766
  constructor(pt) {
6701
6767
  this.fmtParams = new Map();
6702
6768
  this.feedback = [];
@@ -6750,7 +6816,7 @@ class AvMediaDescription extends MediaDescription {
6750
6816
  this.pts = mediaLine.formats.map(fmt => {
6751
6817
  return parseInt(fmt, 10);
6752
6818
  });
6753
- this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo$1(pt)));
6819
+ this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo(pt)));
6754
6820
  }
6755
6821
  toLines() {
6756
6822
  var lines = [];
@@ -7289,364 +7355,6 @@ function mungeRemoteSdp(config, sdp) {
7289
7355
  return parsedSdp.toString();
7290
7356
  }
7291
7357
 
7292
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
7293
- var logger = {
7294
- exports: {}
7295
- };
7296
-
7297
- /*!
7298
- * js-logger - http://github.com/jonnyreeves/js-logger
7299
- * Jonny Reeves, http://jonnyreeves.co.uk/
7300
- * js-logger may be freely distributed under the MIT license.
7301
- */
7302
-
7303
- (function (module) {
7304
- (function (global) {
7305
- // Top level module for the global, static logger instance.
7306
- var Logger = {};
7307
-
7308
- // For those that are at home that are keeping score.
7309
- Logger.VERSION = "1.6.1";
7310
-
7311
- // Function which handles all incoming log messages.
7312
- var logHandler;
7313
-
7314
- // Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
7315
- var contextualLoggersByNameMap = {};
7316
-
7317
- // Polyfill for ES5's Function.bind.
7318
- var bind = function bind(scope, func) {
7319
- return function () {
7320
- return func.apply(scope, arguments);
7321
- };
7322
- };
7323
-
7324
- // Super exciting object merger-matron 9000 adding another 100 bytes to your download.
7325
- var merge = function merge() {
7326
- var args = arguments,
7327
- target = args[0],
7328
- key,
7329
- i;
7330
- for (i = 1; i < args.length; i++) {
7331
- for (key in args[i]) {
7332
- if (!(key in target) && args[i].hasOwnProperty(key)) {
7333
- target[key] = args[i][key];
7334
- }
7335
- }
7336
- }
7337
- return target;
7338
- };
7339
-
7340
- // Helper to define a logging level object; helps with optimisation.
7341
- var defineLogLevel = function defineLogLevel(value, name) {
7342
- return {
7343
- value: value,
7344
- name: name
7345
- };
7346
- };
7347
-
7348
- // Predefined logging levels.
7349
- Logger.TRACE = defineLogLevel(1, 'TRACE');
7350
- Logger.DEBUG = defineLogLevel(2, 'DEBUG');
7351
- Logger.INFO = defineLogLevel(3, 'INFO');
7352
- Logger.TIME = defineLogLevel(4, 'TIME');
7353
- Logger.WARN = defineLogLevel(5, 'WARN');
7354
- Logger.ERROR = defineLogLevel(8, 'ERROR');
7355
- Logger.OFF = defineLogLevel(99, 'OFF');
7356
-
7357
- // Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently
7358
- // of each other.
7359
- var ContextualLogger = function ContextualLogger(defaultContext) {
7360
- this.context = defaultContext;
7361
- this.setLevel(defaultContext.filterLevel);
7362
- this.log = this.info; // Convenience alias.
7363
- };
7364
-
7365
- ContextualLogger.prototype = {
7366
- // Changes the current logging level for the logging instance.
7367
- setLevel: function setLevel(newLevel) {
7368
- // Ensure the supplied Level object looks valid.
7369
- if (newLevel && "value" in newLevel) {
7370
- this.context.filterLevel = newLevel;
7371
- }
7372
- },
7373
- // Gets the current logging level for the logging instance
7374
- getLevel: function getLevel() {
7375
- return this.context.filterLevel;
7376
- },
7377
- // Is the logger configured to output messages at the supplied level?
7378
- enabledFor: function enabledFor(lvl) {
7379
- var filterLevel = this.context.filterLevel;
7380
- return lvl.value >= filterLevel.value;
7381
- },
7382
- trace: function trace() {
7383
- this.invoke(Logger.TRACE, arguments);
7384
- },
7385
- debug: function debug() {
7386
- this.invoke(Logger.DEBUG, arguments);
7387
- },
7388
- info: function info() {
7389
- this.invoke(Logger.INFO, arguments);
7390
- },
7391
- warn: function warn() {
7392
- this.invoke(Logger.WARN, arguments);
7393
- },
7394
- error: function error() {
7395
- this.invoke(Logger.ERROR, arguments);
7396
- },
7397
- time: function time(label) {
7398
- if (typeof label === 'string' && label.length > 0) {
7399
- this.invoke(Logger.TIME, [label, 'start']);
7400
- }
7401
- },
7402
- timeEnd: function timeEnd(label) {
7403
- if (typeof label === 'string' && label.length > 0) {
7404
- this.invoke(Logger.TIME, [label, 'end']);
7405
- }
7406
- },
7407
- // Invokes the logger callback if it's not being filtered.
7408
- invoke: function invoke(level, msgArgs) {
7409
- if (logHandler && this.enabledFor(level)) {
7410
- logHandler(msgArgs, merge({
7411
- level: level
7412
- }, this.context));
7413
- }
7414
- }
7415
- };
7416
-
7417
- // Protected instance which all calls to the to level `Logger` module will be routed through.
7418
- var globalLogger = new ContextualLogger({
7419
- filterLevel: Logger.OFF
7420
- });
7421
-
7422
- // Configure the global Logger instance.
7423
- (function () {
7424
- // Shortcut for optimisers.
7425
- var L = Logger;
7426
- L.enabledFor = bind(globalLogger, globalLogger.enabledFor);
7427
- L.trace = bind(globalLogger, globalLogger.trace);
7428
- L.debug = bind(globalLogger, globalLogger.debug);
7429
- L.time = bind(globalLogger, globalLogger.time);
7430
- L.timeEnd = bind(globalLogger, globalLogger.timeEnd);
7431
- L.info = bind(globalLogger, globalLogger.info);
7432
- L.warn = bind(globalLogger, globalLogger.warn);
7433
- L.error = bind(globalLogger, globalLogger.error);
7434
-
7435
- // Don't forget the convenience alias!
7436
- L.log = L.info;
7437
- })();
7438
-
7439
- // Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
7440
- // object with the supplied log messages and the second being a context object which contains a hash of stateful
7441
- // parameters which the logging function can consume.
7442
- Logger.setHandler = function (func) {
7443
- logHandler = func;
7444
- };
7445
-
7446
- // Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
7447
- // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
7448
- Logger.setLevel = function (level) {
7449
- // Set the globalLogger's level.
7450
- globalLogger.setLevel(level);
7451
-
7452
- // Apply this level to all registered contextual loggers.
7453
- for (var key in contextualLoggersByNameMap) {
7454
- if (contextualLoggersByNameMap.hasOwnProperty(key)) {
7455
- contextualLoggersByNameMap[key].setLevel(level);
7456
- }
7457
- }
7458
- };
7459
-
7460
- // Gets the global logging filter level
7461
- Logger.getLevel = function () {
7462
- return globalLogger.getLevel();
7463
- };
7464
-
7465
- // Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
7466
- // default context and log handler.
7467
- Logger.get = function (name) {
7468
- // All logger instances are cached so they can be configured ahead of use.
7469
- return contextualLoggersByNameMap[name] || (contextualLoggersByNameMap[name] = new ContextualLogger(merge({
7470
- name: name
7471
- }, globalLogger.context)));
7472
- };
7473
-
7474
- // CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will
7475
- // write to the window's console object (if present); the optional options object can be used to customise the
7476
- // formatter used to format each log message.
7477
- Logger.createDefaultHandler = function (options) {
7478
- options = options || {};
7479
- options.formatter = options.formatter || function defaultMessageFormatter(messages, context) {
7480
- // Prepend the logger's name to the log message for easy identification.
7481
- if (context.name) {
7482
- messages.unshift("[" + context.name + "]");
7483
- }
7484
- };
7485
-
7486
- // Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
7487
- // that don't offer a native console method.
7488
- var timerStartTimeByLabelMap = {};
7489
-
7490
- // Support for IE8+ (and other, slightly more sane environments)
7491
- var invokeConsoleMethod = function invokeConsoleMethod(hdlr, messages) {
7492
- Function.prototype.apply.call(hdlr, console, messages);
7493
- };
7494
-
7495
- // Check for the presence of a logger.
7496
- if (typeof console === "undefined") {
7497
- return function () {/* no console */};
7498
- }
7499
- return function (messages, context) {
7500
- // Convert arguments object to Array.
7501
- messages = Array.prototype.slice.call(messages);
7502
- var hdlr = console.log;
7503
- var timerLabel;
7504
- if (context.level === Logger.TIME) {
7505
- timerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];
7506
- if (messages[1] === 'start') {
7507
- if (console.time) {
7508
- console.time(timerLabel);
7509
- } else {
7510
- timerStartTimeByLabelMap[timerLabel] = new Date().getTime();
7511
- }
7512
- } else {
7513
- if (console.timeEnd) {
7514
- console.timeEnd(timerLabel);
7515
- } else {
7516
- invokeConsoleMethod(hdlr, [timerLabel + ': ' + (new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms']);
7517
- }
7518
- }
7519
- } else {
7520
- // Delegate through to custom warn/error loggers if present on the console.
7521
- if (context.level === Logger.WARN && console.warn) {
7522
- hdlr = console.warn;
7523
- } else if (context.level === Logger.ERROR && console.error) {
7524
- hdlr = console.error;
7525
- } else if (context.level === Logger.INFO && console.info) {
7526
- hdlr = console.info;
7527
- } else if (context.level === Logger.DEBUG && console.debug) {
7528
- hdlr = console.debug;
7529
- } else if (context.level === Logger.TRACE && console.trace) {
7530
- hdlr = console.trace;
7531
- }
7532
- options.formatter(messages, context);
7533
- invokeConsoleMethod(hdlr, messages);
7534
- }
7535
- };
7536
- };
7537
-
7538
- // Configure and example a Default implementation which writes to the `window.console` (if present). The
7539
- // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
7540
- Logger.useDefaults = function (options) {
7541
- Logger.setLevel(options && options.defaultLevel || Logger.DEBUG);
7542
- Logger.setHandler(Logger.createDefaultHandler(options));
7543
- };
7544
-
7545
- // Createa an alias to useDefaults to avoid reaking a react-hooks rule.
7546
- Logger.setDefaults = Logger.useDefaults;
7547
-
7548
- // Export to popular environments boilerplate.
7549
- if (module.exports) {
7550
- module.exports = Logger;
7551
- } else {
7552
- Logger._prevLogger = global.Logger;
7553
- Logger.noConflict = function () {
7554
- global.Logger = Logger._prevLogger;
7555
- return Logger;
7556
- };
7557
- global.Logger = Logger;
7558
- }
7559
- })(commonjsGlobal);
7560
- })(logger);
7561
- var Logger = logger.exports;
7562
- Logger.useDefaults({
7563
- defaultLevel: Logger.DEBUG,
7564
- formatter: (messages, context) => {
7565
- messages.unshift("[".concat(context.name, "] "));
7566
- }
7567
- });
7568
- class ActiveSpeakerInfo {
7569
- constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo, namedMediaGroups) {
7570
- this.priority = priority;
7571
- this.crossPriorityDuplication = crossPriorityDuplication;
7572
- this.crossPolicyDuplication = crossPolicyDuplication;
7573
- this.preferLiveVideo = preferLiveVideo;
7574
- this.namedMediaGroups = namedMediaGroups;
7575
- }
7576
- toString() {
7577
- return "ActiveSpeakerInfo(priority=".concat(this.priority, ", crossPriorityDuplication=").concat(this.crossPriorityDuplication, ", crossPolicyDuplication=").concat(this.crossPolicyDuplication, ", preferLiveVideo=").concat(this.preferLiveVideo, "), namedMediaGroups=").concat(this.namedMediaGroups);
7578
- }
7579
- }
7580
- var HomerMsgType;
7581
- (function (HomerMsgType) {
7582
- HomerMsgType["Multistream"] = "multistream";
7583
- })(HomerMsgType || (HomerMsgType = {}));
7584
- var JmpMsgType;
7585
- (function (JmpMsgType) {
7586
- JmpMsgType["MediaRequest"] = "mediaRequest";
7587
- JmpMsgType["MediaRequestAck"] = "mediaRequestAck";
7588
- JmpMsgType["MediaRequestStatus"] = "mediaRequestStatus";
7589
- JmpMsgType["MediaRequestStatusAck"] = "mediaRequestStatusAck";
7590
- JmpMsgType["SourceAdvertisement"] = "sourceAdvertisement";
7591
- JmpMsgType["SourceAdvertisementAck"] = "sourceAdvertisementAck";
7592
- JmpMsgType["ActiveSpeakerNotification"] = "activeSpeakerNotification";
7593
- })(JmpMsgType || (JmpMsgType = {}));
7594
- class CodecInfo {
7595
- constructor(payloadType, h264) {
7596
- this.payloadType = payloadType;
7597
- this.h264 = h264;
7598
- }
7599
- }
7600
- class H264Codec {
7601
- constructor(maxFs, maxFps, maxMbps, maxWidth, maxHeight) {
7602
- this.maxFs = maxFs;
7603
- this.maxFps = maxFps;
7604
- this.maxMbps = maxMbps;
7605
- this.maxWidth = maxWidth;
7606
- this.maxHeight = maxHeight;
7607
- }
7608
- }
7609
- class ReceiverSelectedInfo {
7610
- constructor(csi) {
7611
- this.csi = csi;
7612
- }
7613
- toString() {
7614
- return "ReceiverSelectedInfo(csi=".concat(this.csi, ")");
7615
- }
7616
- }
7617
- var MediaFamily;
7618
- (function (MediaFamily) {
7619
- MediaFamily["Audio"] = "AUDIO";
7620
- MediaFamily["Video"] = "VIDEO";
7621
- })(MediaFamily || (MediaFamily = {}));
7622
- var MediaContent;
7623
- (function (MediaContent) {
7624
- MediaContent["Main"] = "MAIN";
7625
- MediaContent["Slides"] = "SLIDES";
7626
- })(MediaContent || (MediaContent = {}));
7627
- var Policy;
7628
- (function (Policy) {
7629
- Policy["ActiveSpeaker"] = "active-speaker";
7630
- Policy["ReceiverSelected"] = "receiver-selected";
7631
- })(Policy || (Policy = {}));
7632
- var MediaType;
7633
- (function (MediaType) {
7634
- MediaType["VideoMain"] = "VIDEO-MAIN";
7635
- MediaType["VideoSlides"] = "VIDEO-SLIDES";
7636
- MediaType["AudioMain"] = "AUDIO-MAIN";
7637
- MediaType["AudioSlides"] = "AUDIO-SLIDES";
7638
- })(MediaType || (MediaType = {}));
7639
- function getMediaFamily(mediaType) {
7640
- return [MediaType.VideoMain, MediaType.VideoSlides].includes(mediaType) ? MediaFamily.Video : MediaFamily.Audio;
7641
- }
7642
- var JmpSessionEvents;
7643
- (function (JmpSessionEvents) {
7644
- JmpSessionEvents["ActiveSpeaker"] = "active-speaker";
7645
- JmpSessionEvents["MediaRequestReceived"] = "media-request-received";
7646
- JmpSessionEvents["MediaRequestStatusReceived"] = "media-request-status-received";
7647
- JmpSessionEvents["SourceAdvertisementReceived"] = "source-advertisement-received";
7648
- })(JmpSessionEvents || (JmpSessionEvents = {}));
7649
-
7650
7358
  var Event$1;
7651
7359
  (function (Event) {
7652
7360
  Event["CONNECTION_STATE_CHANGED"] = "connectionState:changed";
@@ -7691,7 +7399,7 @@ var localTrackTypes = [{
7691
7399
  type: 'screenShareVideo',
7692
7400
  kind: 'video'
7693
7401
  }];
7694
- class MediaConnection extends EventEmitter$3 {
7402
+ class MediaConnection extends EventEmitter$5 {
7695
7403
  constructor(mediaConnectionConfig, options, debugId) {
7696
7404
  super();
7697
7405
  _defineProperty(this, "id", void 0);
@@ -15567,7 +15275,7 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
15567
15275
  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; }
15568
15276
  var WEB_TIEBREAKER_VALUE = 0xfffffffe;
15569
15277
  var MAX_RETRIES = 2;
15570
- class Roap extends EventEmitter$3 {
15278
+ class Roap extends EventEmitter$5 {
15571
15279
  constructor(createLocalOfferCallback, handleRemoteOfferCallback, handleRemoteAnswerCallback, debugId, initialSeq) {
15572
15280
  super();
15573
15281
  _defineProperty(this, "id", void 0);
@@ -16083,7 +15791,7 @@ class Roap extends EventEmitter$3 {
16083
15791
 
16084
15792
  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; }
16085
15793
  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; }
16086
- class RoapMediaConnection extends EventEmitter$3 {
15794
+ class RoapMediaConnection extends EventEmitter$5 {
16087
15795
  constructor(mediaConnectionConfig, options, debugId) {
16088
15796
  super();
16089
15797
  _defineProperty(this, "id", void 0);
@@ -16246,7 +15954,7 @@ class RoapMediaConnection extends EventEmitter$3 {
16246
15954
 
16247
15955
  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; }
16248
15956
  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; }
16249
- class MultistreamRoapMediaConnection extends EventEmitter$4 {
15957
+ class MultistreamRoapMediaConnection extends EventEmitter$6 {
16250
15958
  constructor(mediaConnectionConfig, debugId) {
16251
15959
  var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
16252
15960
  var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
@@ -16272,14 +15980,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16272
15980
  getLogger().error("".concat(this.id, ":").concat(action, " ").concat(description, " ").concat(getErrorDescription(error)));
16273
15981
  }
16274
15982
  createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
16275
- this.log('createMultistreamConnection()', 'creating MultistreamConnection with floorControlledPresentation: true');
16276
- var multistreamConnection = new MultistreamConnection(_objectSpread(_objectSpread({}, mediaConnectionConfig), {}, {
16277
- floorControlledPresentation: true
16278
- }));
16279
- multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, data => {
16280
- this.emit(Event$1.ACTIVE_SPEAKERS_CHANGED, {
16281
- csis: data.csis
16282
- });
15983
+ this.log('createMultistreamConnection()', 'called');
15984
+ var multistreamConnection = new MultistreamConnection(_objectSpread({}, mediaConnectionConfig));
15985
+ multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
15986
+ this.emit(Event$1.ACTIVE_SPEAKERS_CHANGED, csis);
16283
15987
  });
16284
15988
  multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
16285
15989
  this.emit(Event$1.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
@@ -16359,21 +16063,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16359
16063
  }
16360
16064
  this.roap.roapMessageReceived(roapMessage);
16361
16065
  }
16362
- enableMultistreamAudio(enabled) {
16363
- this.log('enableMultistreamAudio()', 'called');
16364
- var sdpNegotiationNeeded = this.multistreamConnection.enableMultistreamAudio(enabled);
16365
- if (sdpNegotiationNeeded) {
16366
- return this.roap.initiateOffer();
16367
- }
16368
- return Promise.resolve();
16369
- }
16370
- publishTrack(track) {
16371
- this.log('publishTrack()', 'called');
16372
- return this.multistreamConnection.publishTrack(track);
16373
- }
16374
- unpublishTrack(track) {
16375
- this.log('unpublishTrack()', 'called');
16376
- return this.multistreamConnection.unpublishTrack(track);
16066
+ createSendSlot(mediaType) {
16067
+ var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16068
+ this.log('createSendSlot()', "called with mediaType=".concat(mediaType, ", active=").concat(active));
16069
+ return this.multistreamConnection.createSendSlot(mediaType, active);
16377
16070
  }
16378
16071
  createReceiveSlot(mediaType) {
16379
16072
  this.log('createReceiveSlot()', "called");
@@ -16383,14 +16076,6 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16383
16076
  this.log('requestMedia()', "called");
16384
16077
  return this.multistreamConnection.requestMedia(mediaType, streamRequests);
16385
16078
  }
16386
- setCodecParameters(mediaType, parameters) {
16387
- this.log('setCodecParameters()', "called: mediaType=".concat(mediaType, ", parameters=").concat(JSON.stringify(parameters)));
16388
- return this.multistreamConnection.setCodecParameters(mediaType, parameters);
16389
- }
16390
- deleteCodecParameters(mediaType, parameters) {
16391
- this.log('deleteCodecParameters()', "called: mediaType=".concat(mediaType, ", parameters=").concat(JSON.stringify(parameters)));
16392
- return this.multistreamConnection.deleteCodecParameters(mediaType, parameters);
16393
- }
16394
16079
  createLocalOffer() {
16395
16080
  return this.multistreamConnection.createOffer().then(result => {
16396
16081
  if (result.sdp) {
@@ -16431,7 +16116,7 @@ var Errors = Error$1;
16431
16116
 
16432
16117
  function isBrowserSupported() {
16433
16118
  var isSupported = false;
16434
- logger$5.info({
16119
+ logger$4.info({
16435
16120
  mediaType: MEDIA,
16436
16121
  action: 'isBrowserSupported()',
16437
16122
  description: 'Checking is current browser supported by webrtc'
@@ -16459,4 +16144,4 @@ var Media = {
16459
16144
  isBrowserSupported
16460
16145
  };
16461
16146
 
16462
- export { ActiveSpeakerInfo, CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalSystemAudioTrack, LocalTrack, LocalTrackEvents, Media, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteTrackType, RoapMediaConnection, StreamRequest, WcmeError, configureWcmeLogger, createCameraTrack, createDisplayTrack, createDisplayTrackWithAudio, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, isBrowserSupported, setLogger, setOnDeviceChangeHandler };
16147
+ 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, RemoteTrackType, RoapMediaConnection, SendSlot, StreamEventNames, StreamRequest, WcmeError, configureWcmeLogger, createCameraStream, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, isBrowserSupported, setLogger, setOnDeviceChangeHandler };