@webex/internal-media-core 1.39.0 → 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/cjs/index.js CHANGED
@@ -180,7 +180,7 @@ function noop() {}
180
180
 
181
181
  var on$1 = noop;
182
182
  var addListener = noop;
183
- var once$3 = noop;
183
+ var once$4 = noop;
184
184
  var off$1 = noop;
185
185
  var removeListener = noop;
186
186
  var removeAllListeners = noop;
@@ -239,7 +239,7 @@ var browser$1 = {
239
239
  versions: versions,
240
240
  on: on$1,
241
241
  addListener: addListener,
242
- once: once$3,
242
+ once: once$4,
243
243
  off: off$1,
244
244
  removeListener: removeListener,
245
245
  removeAllListeners: removeAllListeners,
@@ -255,7 +255,7 @@ var browser$1 = {
255
255
  uptime: uptime
256
256
  };
257
257
 
258
- var commonjsGlobal$4 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
258
+ var commonjsGlobal$3 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
259
259
 
260
260
  var DetectRTC = {exports: {}};
261
261
 
@@ -283,14 +283,14 @@ var DetectRTC = {exports: {}};
283
283
  if (typeof window !== 'undefined') {
284
284
  return;
285
285
  }
286
- if (typeof window === 'undefined' && typeof commonjsGlobal$4 !== 'undefined') {
287
- commonjsGlobal$4.navigator = {
286
+ if (typeof window === 'undefined' && typeof commonjsGlobal$3 !== 'undefined') {
287
+ commonjsGlobal$3.navigator = {
288
288
  userAgent: browserFakeUserAgent,
289
289
  getUserMedia: function getUserMedia() {}
290
290
  };
291
291
 
292
292
  /*global window:true */
293
- that.window = commonjsGlobal$4;
293
+ that.window = commonjsGlobal$3;
294
294
  }
295
295
  if (typeof location === 'undefined') {
296
296
  /*global location:true */
@@ -307,7 +307,7 @@ var DetectRTC = {exports: {}};
307
307
  height: 0
308
308
  };
309
309
  }
310
- })(typeof commonjsGlobal$4 !== 'undefined' ? commonjsGlobal$4 : window);
310
+ })(typeof commonjsGlobal$3 !== 'undefined' ? commonjsGlobal$3 : window);
311
311
 
312
312
  /*global navigator:true */
313
313
  var navigator = window.navigator;
@@ -1297,14 +1297,14 @@ var log$3 = (level, args) => {
1297
1297
  console.log(logFormat(level, args));
1298
1298
  }
1299
1299
  };
1300
- var logger$5 = {
1300
+ var logger$4 = {
1301
1301
  info: args => log$3('info', args),
1302
1302
  warn: args => log$3('warn', args),
1303
1303
  error: args => log$3('error', args),
1304
1304
  debug: args => log$3('debug', args)
1305
1305
  };
1306
1306
  var _loop = function _loop(level) {
1307
- logger$5[level] = logInfo => {
1307
+ logger$4[level] = logInfo => {
1308
1308
  var {
1309
1309
  ID,
1310
1310
  mediaType,
@@ -1334,27 +1334,27 @@ var domain;
1334
1334
  function EventHandlers() {}
1335
1335
  EventHandlers.prototype = Object.create(null);
1336
1336
 
1337
- function EventEmitter$4() {
1338
- EventEmitter$4.init.call(this);
1337
+ function EventEmitter$6() {
1338
+ EventEmitter$6.init.call(this);
1339
1339
  }
1340
1340
 
1341
1341
  // nodejs oddity
1342
1342
  // require('events') === require('events').EventEmitter
1343
- EventEmitter$4.EventEmitter = EventEmitter$4;
1343
+ EventEmitter$6.EventEmitter = EventEmitter$6;
1344
1344
 
1345
- EventEmitter$4.usingDomains = false;
1345
+ EventEmitter$6.usingDomains = false;
1346
1346
 
1347
- EventEmitter$4.prototype.domain = undefined;
1348
- EventEmitter$4.prototype._events = undefined;
1349
- EventEmitter$4.prototype._maxListeners = undefined;
1347
+ EventEmitter$6.prototype.domain = undefined;
1348
+ EventEmitter$6.prototype._events = undefined;
1349
+ EventEmitter$6.prototype._maxListeners = undefined;
1350
1350
 
1351
1351
  // By default EventEmitters will print a warning if more than 10 listeners are
1352
1352
  // added to it. This is a useful default which helps finding memory leaks.
1353
- EventEmitter$4.defaultMaxListeners = 10;
1353
+ EventEmitter$6.defaultMaxListeners = 10;
1354
1354
 
1355
- EventEmitter$4.init = function() {
1355
+ EventEmitter$6.init = function() {
1356
1356
  this.domain = null;
1357
- if (EventEmitter$4.usingDomains) {
1357
+ if (EventEmitter$6.usingDomains) {
1358
1358
  // if there is an active domain, then attach to it.
1359
1359
  if (domain.active ) ;
1360
1360
  }
@@ -1369,7 +1369,7 @@ EventEmitter$4.init = function() {
1369
1369
 
1370
1370
  // Obviously not all Emitters should be limited to 10. This function allows
1371
1371
  // that to be increased. Set to zero for unlimited.
1372
- EventEmitter$4.prototype.setMaxListeners = function setMaxListeners(n) {
1372
+ EventEmitter$6.prototype.setMaxListeners = function setMaxListeners(n) {
1373
1373
  if (typeof n !== 'number' || n < 0 || isNaN(n))
1374
1374
  throw new TypeError('"n" argument must be a positive number');
1375
1375
  this._maxListeners = n;
@@ -1378,11 +1378,11 @@ EventEmitter$4.prototype.setMaxListeners = function setMaxListeners(n) {
1378
1378
 
1379
1379
  function $getMaxListeners(that) {
1380
1380
  if (that._maxListeners === undefined)
1381
- return EventEmitter$4.defaultMaxListeners;
1381
+ return EventEmitter$6.defaultMaxListeners;
1382
1382
  return that._maxListeners;
1383
1383
  }
1384
1384
 
1385
- EventEmitter$4.prototype.getMaxListeners = function getMaxListeners() {
1385
+ EventEmitter$6.prototype.getMaxListeners = function getMaxListeners() {
1386
1386
  return $getMaxListeners(this);
1387
1387
  };
1388
1388
 
@@ -1396,7 +1396,7 @@ function emitNone(handler, isFn, self) {
1396
1396
  handler.call(self);
1397
1397
  else {
1398
1398
  var len = handler.length;
1399
- var listeners = arrayClone$2(handler, len);
1399
+ var listeners = arrayClone$3(handler, len);
1400
1400
  for (var i = 0; i < len; ++i)
1401
1401
  listeners[i].call(self);
1402
1402
  }
@@ -1406,7 +1406,7 @@ function emitOne(handler, isFn, self, arg1) {
1406
1406
  handler.call(self, arg1);
1407
1407
  else {
1408
1408
  var len = handler.length;
1409
- var listeners = arrayClone$2(handler, len);
1409
+ var listeners = arrayClone$3(handler, len);
1410
1410
  for (var i = 0; i < len; ++i)
1411
1411
  listeners[i].call(self, arg1);
1412
1412
  }
@@ -1416,7 +1416,7 @@ function emitTwo(handler, isFn, self, arg1, arg2) {
1416
1416
  handler.call(self, arg1, arg2);
1417
1417
  else {
1418
1418
  var len = handler.length;
1419
- var listeners = arrayClone$2(handler, len);
1419
+ var listeners = arrayClone$3(handler, len);
1420
1420
  for (var i = 0; i < len; ++i)
1421
1421
  listeners[i].call(self, arg1, arg2);
1422
1422
  }
@@ -1426,7 +1426,7 @@ function emitThree(handler, isFn, self, arg1, arg2, arg3) {
1426
1426
  handler.call(self, arg1, arg2, arg3);
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].call(self, arg1, arg2, arg3);
1432
1432
  }
@@ -1437,13 +1437,13 @@ function emitMany(handler, isFn, self, args) {
1437
1437
  handler.apply(self, args);
1438
1438
  else {
1439
1439
  var len = handler.length;
1440
- var listeners = arrayClone$2(handler, len);
1440
+ var listeners = arrayClone$3(handler, len);
1441
1441
  for (var i = 0; i < len; ++i)
1442
1442
  listeners[i].apply(self, args);
1443
1443
  }
1444
1444
  }
1445
1445
 
1446
- EventEmitter$4.prototype.emit = function emit(type) {
1446
+ EventEmitter$6.prototype.emit = function emit(type) {
1447
1447
  var er, handler, len, args, i, events, domain;
1448
1448
  var doError = (type === 'error');
1449
1449
 
@@ -1508,7 +1508,7 @@ EventEmitter$4.prototype.emit = function emit(type) {
1508
1508
  return true;
1509
1509
  };
1510
1510
 
1511
- function _addListener$2(target, type, listener, prepend) {
1511
+ function _addListener$3(target, type, listener, prepend) {
1512
1512
  var m;
1513
1513
  var events;
1514
1514
  var existing;
@@ -1574,18 +1574,18 @@ function _addListener$2(target, type, listener, prepend) {
1574
1574
  function emitWarning(e) {
1575
1575
  typeof console.warn === 'function' ? console.warn(e) : console.log(e);
1576
1576
  }
1577
- EventEmitter$4.prototype.addListener = function addListener(type, listener) {
1578
- return _addListener$2(this, type, listener, false);
1577
+ EventEmitter$6.prototype.addListener = function addListener(type, listener) {
1578
+ return _addListener$3(this, type, listener, false);
1579
1579
  };
1580
1580
 
1581
- EventEmitter$4.prototype.on = EventEmitter$4.prototype.addListener;
1581
+ EventEmitter$6.prototype.on = EventEmitter$6.prototype.addListener;
1582
1582
 
1583
- EventEmitter$4.prototype.prependListener =
1583
+ EventEmitter$6.prototype.prependListener =
1584
1584
  function prependListener(type, listener) {
1585
- return _addListener$2(this, type, listener, true);
1585
+ return _addListener$3(this, type, listener, true);
1586
1586
  };
1587
1587
 
1588
- function _onceWrap$2(target, type, listener) {
1588
+ function _onceWrap$3(target, type, listener) {
1589
1589
  var fired = false;
1590
1590
  function g() {
1591
1591
  target.removeListener(type, g);
@@ -1598,23 +1598,23 @@ function _onceWrap$2(target, type, listener) {
1598
1598
  return g;
1599
1599
  }
1600
1600
 
1601
- EventEmitter$4.prototype.once = function once(type, listener) {
1601
+ EventEmitter$6.prototype.once = function once(type, listener) {
1602
1602
  if (typeof listener !== 'function')
1603
1603
  throw new TypeError('"listener" argument must be a function');
1604
- this.on(type, _onceWrap$2(this, type, listener));
1604
+ this.on(type, _onceWrap$3(this, type, listener));
1605
1605
  return this;
1606
1606
  };
1607
1607
 
1608
- EventEmitter$4.prototype.prependOnceListener =
1608
+ EventEmitter$6.prototype.prependOnceListener =
1609
1609
  function prependOnceListener(type, listener) {
1610
1610
  if (typeof listener !== 'function')
1611
1611
  throw new TypeError('"listener" argument must be a function');
1612
- this.prependListener(type, _onceWrap$2(this, type, listener));
1612
+ this.prependListener(type, _onceWrap$3(this, type, listener));
1613
1613
  return this;
1614
1614
  };
1615
1615
 
1616
1616
  // emits a 'removeListener' event iff the listener was removed
1617
- EventEmitter$4.prototype.removeListener =
1617
+ EventEmitter$6.prototype.removeListener =
1618
1618
  function removeListener(type, listener) {
1619
1619
  var list, events, position, i, originalListener;
1620
1620
 
@@ -1661,7 +1661,7 @@ EventEmitter$4.prototype.removeListener =
1661
1661
  delete events[type];
1662
1662
  }
1663
1663
  } else {
1664
- spliceOne$2(list, position);
1664
+ spliceOne$3(list, position);
1665
1665
  }
1666
1666
 
1667
1667
  if (events.removeListener)
@@ -1673,11 +1673,11 @@ EventEmitter$4.prototype.removeListener =
1673
1673
 
1674
1674
  // Alias for removeListener added in NodeJS 10.0
1675
1675
  // https://nodejs.org/api/events.html#events_emitter_off_eventname_listener
1676
- EventEmitter$4.prototype.off = function(type, listener){
1676
+ EventEmitter$6.prototype.off = function(type, listener){
1677
1677
  return this.removeListener(type, listener);
1678
1678
  };
1679
1679
 
1680
- EventEmitter$4.prototype.removeAllListeners =
1680
+ EventEmitter$6.prototype.removeAllListeners =
1681
1681
  function removeAllListeners(type) {
1682
1682
  var listeners, events;
1683
1683
 
@@ -1727,7 +1727,7 @@ EventEmitter$4.prototype.removeAllListeners =
1727
1727
  return this;
1728
1728
  };
1729
1729
 
1730
- EventEmitter$4.prototype.listeners = function listeners(type) {
1730
+ EventEmitter$6.prototype.listeners = function listeners(type) {
1731
1731
  var evlistener;
1732
1732
  var ret;
1733
1733
  var events = this._events;
@@ -1741,22 +1741,22 @@ EventEmitter$4.prototype.listeners = function listeners(type) {
1741
1741
  else if (typeof evlistener === 'function')
1742
1742
  ret = [evlistener.listener || evlistener];
1743
1743
  else
1744
- ret = unwrapListeners$2(evlistener);
1744
+ ret = unwrapListeners$3(evlistener);
1745
1745
  }
1746
1746
 
1747
1747
  return ret;
1748
1748
  };
1749
1749
 
1750
- EventEmitter$4.listenerCount = function(emitter, type) {
1750
+ EventEmitter$6.listenerCount = function(emitter, type) {
1751
1751
  if (typeof emitter.listenerCount === 'function') {
1752
1752
  return emitter.listenerCount(type);
1753
1753
  } else {
1754
- return listenerCount$2.call(emitter, type);
1754
+ return listenerCount$3.call(emitter, type);
1755
1755
  }
1756
1756
  };
1757
1757
 
1758
- EventEmitter$4.prototype.listenerCount = listenerCount$2;
1759
- function listenerCount$2(type) {
1758
+ EventEmitter$6.prototype.listenerCount = listenerCount$3;
1759
+ function listenerCount$3(type) {
1760
1760
  var events = this._events;
1761
1761
 
1762
1762
  if (events) {
@@ -1772,25 +1772,25 @@ function listenerCount$2(type) {
1772
1772
  return 0;
1773
1773
  }
1774
1774
 
1775
- EventEmitter$4.prototype.eventNames = function eventNames() {
1775
+ EventEmitter$6.prototype.eventNames = function eventNames() {
1776
1776
  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];
1777
1777
  };
1778
1778
 
1779
1779
  // About 1.5x faster than the two-arg version of Array#splice().
1780
- function spliceOne$2(list, index) {
1780
+ function spliceOne$3(list, index) {
1781
1781
  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)
1782
1782
  list[i] = list[k];
1783
1783
  list.pop();
1784
1784
  }
1785
1785
 
1786
- function arrayClone$2(arr, i) {
1786
+ function arrayClone$3(arr, i) {
1787
1787
  var copy = new Array(i);
1788
1788
  while (i--)
1789
1789
  copy[i] = arr[i];
1790
1790
  return copy;
1791
1791
  }
1792
1792
 
1793
- function unwrapListeners$2(arr) {
1793
+ function unwrapListeners$3(arr) {
1794
1794
  var ret = new Array(arr.length);
1795
1795
  for (var i = 0; i < ret.length; ++i) {
1796
1796
  ret[i] = arr[i].listener || arr[i];
@@ -1826,7 +1826,7 @@ class Device {
1826
1826
  }
1827
1827
 
1828
1828
  function getTrackSettings(track) {
1829
- logger$5.debug({
1829
+ logger$4.debug({
1830
1830
  ID: track.id,
1831
1831
  mediaType: MEDIA_STREAM_TRACK,
1832
1832
  action: 'getTrackSettings()',
@@ -1834,7 +1834,7 @@ function getTrackSettings(track) {
1834
1834
  });
1835
1835
  var settings = track.getSettings();
1836
1836
  if (settings) {
1837
- logger$5.debug({
1837
+ logger$4.debug({
1838
1838
  ID: track.id,
1839
1839
  mediaType: MEDIA_STREAM_TRACK,
1840
1840
  action: 'getTrackSettings()',
@@ -1843,7 +1843,7 @@ function getTrackSettings(track) {
1843
1843
  return settings;
1844
1844
  }
1845
1845
  var error = new Error('Unable to get track settings');
1846
- logger$5.info({
1846
+ logger$4.info({
1847
1847
  ID: track.id,
1848
1848
  mediaType: MEDIA_STREAM_TRACK,
1849
1849
  action: 'getTrackSettings()',
@@ -1866,7 +1866,7 @@ var TrackKind;
1866
1866
  TrackKind["VIDEO"] = "video";
1867
1867
  })(TrackKind || (TrackKind = {}));
1868
1868
  var _mediaStreamTrack = /*#__PURE__*/new WeakMap();
1869
- class Track extends EventEmitter$4 {
1869
+ class Track extends EventEmitter$6 {
1870
1870
  constructor(mediaStreamTrack) {
1871
1871
  super();
1872
1872
  _defineProperty__default["default"](this, "ID", void 0);
@@ -1899,13 +1899,13 @@ class Track extends EventEmitter$4 {
1899
1899
  var _this = this;
1900
1900
  return _asyncToGenerator__default["default"](function* () {
1901
1901
  var _constraints$deviceId, _constraints$deviceId2, _constraints$deviceId5;
1902
- logger$5.debug({
1902
+ logger$4.debug({
1903
1903
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId = constraints.deviceId) === null || _constraints$deviceId === void 0 ? void 0 : _constraints$deviceId.toString(),
1904
1904
  mediaType: DEVICE,
1905
1905
  action: 'applyConstraints()',
1906
1906
  description: "Called with ".concat(JSON.stringify(constraints))
1907
1907
  });
1908
- logger$5.info({
1908
+ logger$4.info({
1909
1909
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId2 = constraints.deviceId) === null || _constraints$deviceId2 === void 0 ? void 0 : _constraints$deviceId2.toString(),
1910
1910
  mediaType: DEVICE,
1911
1911
  action: 'applyConstraints()',
@@ -1916,7 +1916,7 @@ class Track extends EventEmitter$4 {
1916
1916
  for (var thisConstraint of Object.keys(constraints)) {
1917
1917
  if (!supportedConstraints[thisConstraint]) {
1918
1918
  var _constraints$deviceId3;
1919
- logger$5.debug({
1919
+ logger$4.debug({
1920
1920
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId3 = constraints.deviceId) === null || _constraints$deviceId3 === void 0 ? void 0 : _constraints$deviceId3.toString(),
1921
1921
  mediaType: DEVICE,
1922
1922
  action: 'applyConstraints()',
@@ -1928,7 +1928,7 @@ class Track extends EventEmitter$4 {
1928
1928
  if (notSupportedConstraints.length > 0) {
1929
1929
  var _constraints$deviceId4;
1930
1930
  console.warn("#TrackObject Unsupported constraints - ".concat(notSupportedConstraints.join(', ')));
1931
- logger$5.debug({
1931
+ logger$4.debug({
1932
1932
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId4 = constraints.deviceId) === null || _constraints$deviceId4 === void 0 ? void 0 : _constraints$deviceId4.toString(),
1933
1933
  mediaType: DEVICE,
1934
1934
  action: 'applyConstraints()',
@@ -1937,7 +1937,7 @@ class Track extends EventEmitter$4 {
1937
1937
  return false;
1938
1938
  }
1939
1939
  yield _classPrivateFieldGet__default["default"](_this, _mediaStreamTrack).applyConstraints(constraints);
1940
- logger$5.debug({
1940
+ logger$4.debug({
1941
1941
  ID: constraints === null || constraints === void 0 ? void 0 : (_constraints$deviceId5 = constraints.deviceId) === null || _constraints$deviceId5 === void 0 ? void 0 : _constraints$deviceId5.toString(),
1942
1942
  mediaType: DEVICE,
1943
1943
  action: 'applyConstraints()',
@@ -1947,18 +1947,18 @@ class Track extends EventEmitter$4 {
1947
1947
  })();
1948
1948
  }
1949
1949
  getSettings() {
1950
- logger$5.debug({
1950
+ logger$4.debug({
1951
1951
  mediaType: MEDIA,
1952
1952
  action: 'getSettings()',
1953
1953
  description: 'Called'
1954
1954
  });
1955
- logger$5.info({
1955
+ logger$4.info({
1956
1956
  mediaType: MEDIA,
1957
1957
  action: 'getSettings()',
1958
1958
  description: 'Fetching constraints properties for the current media stream track'
1959
1959
  });
1960
1960
  var settings = getTrackSettings(_classPrivateFieldGet__default["default"](this, _mediaStreamTrack));
1961
- logger$5.debug({
1961
+ logger$4.debug({
1962
1962
  mediaType: MEDIA,
1963
1963
  action: 'getSettings()',
1964
1964
  description: "Received settings ".concat(JSON.stringify(settings))
@@ -1966,13 +1966,13 @@ class Track extends EventEmitter$4 {
1966
1966
  return settings;
1967
1967
  }
1968
1968
  getMediaStreamTrack() {
1969
- logger$5.debug({
1969
+ logger$4.debug({
1970
1970
  mediaType: MEDIA,
1971
1971
  action: 'getMediaStreamTrack()',
1972
1972
  description: 'Called'
1973
1973
  });
1974
1974
  var mediaStreamTrack = _classPrivateFieldGet__default["default"](this, _mediaStreamTrack);
1975
- logger$5.debug({
1975
+ logger$4.debug({
1976
1976
  mediaType: MEDIA,
1977
1977
  action: 'getMediaStreamTrack()',
1978
1978
  description: "Received media stream track ".concat(JSON.stringify(mediaStreamTrack))
@@ -1981,12 +1981,12 @@ class Track extends EventEmitter$4 {
1981
1981
  }
1982
1982
  }
1983
1983
 
1984
- var eventEmitter = new EventEmitter$4();
1984
+ var eventEmitter = new EventEmitter$6();
1985
1985
  var deviceList = [];
1986
1986
  var getDevices$1 = /*#__PURE__*/function () {
1987
1987
  var _ref = _asyncToGenerator__default["default"](function* () {
1988
1988
  var _navigator$mediaDevic;
1989
- logger$5.debug({
1989
+ logger$4.debug({
1990
1990
  mediaType: DEVICE,
1991
1991
  action: 'getDevices()',
1992
1992
  description: 'Called'
@@ -1995,7 +1995,7 @@ var getDevices$1 = /*#__PURE__*/function () {
1995
1995
  console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');
1996
1996
  return [];
1997
1997
  }
1998
- logger$5.info({
1998
+ logger$4.info({
1999
1999
  mediaType: DEVICE,
2000
2000
  action: 'getDevices()',
2001
2001
  description: 'Requesting list of available media input and output devices'
@@ -2008,13 +2008,13 @@ var getDevices$1 = /*#__PURE__*/function () {
2008
2008
  }();
2009
2009
  var getCameras = /*#__PURE__*/function () {
2010
2010
  var _ref2 = _asyncToGenerator__default["default"](function* () {
2011
- logger$5.debug({
2011
+ logger$4.debug({
2012
2012
  mediaType: DEVICE,
2013
2013
  action: 'getCameras()',
2014
2014
  description: 'Called'
2015
2015
  });
2016
2016
  var devices = yield getDevices$1();
2017
- logger$5.info({
2017
+ logger$4.info({
2018
2018
  mediaType: DEVICE,
2019
2019
  action: 'getCameras()',
2020
2020
  description: 'Filtering camera devices from all available media devices'
@@ -2025,7 +2025,7 @@ var getCameras = /*#__PURE__*/function () {
2025
2025
  } = _ref3;
2026
2026
  return kind === DeviceKinds.VIDEO_INPUT;
2027
2027
  }).map(device => {
2028
- logger$5.debug({
2028
+ logger$4.debug({
2029
2029
  ID: device.deviceId,
2030
2030
  mediaType: DEVICE,
2031
2031
  action: 'getCameras()',
@@ -2040,13 +2040,13 @@ var getCameras = /*#__PURE__*/function () {
2040
2040
  }();
2041
2041
  var getMicrophones = /*#__PURE__*/function () {
2042
2042
  var _ref4 = _asyncToGenerator__default["default"](function* () {
2043
- logger$5.debug({
2043
+ logger$4.debug({
2044
2044
  mediaType: DEVICE,
2045
2045
  action: 'getMicrophones()',
2046
2046
  description: 'Called'
2047
2047
  });
2048
2048
  var devices = yield getDevices$1();
2049
- logger$5.info({
2049
+ logger$4.info({
2050
2050
  mediaType: DEVICE,
2051
2051
  action: 'getMicrophones()',
2052
2052
  description: 'Filtering microphones devices from all available media devices'
@@ -2057,7 +2057,7 @@ var getMicrophones = /*#__PURE__*/function () {
2057
2057
  } = _ref5;
2058
2058
  return kind === DeviceKinds.AUDIO_INPUT;
2059
2059
  }).map(device => {
2060
- logger$5.debug({
2060
+ logger$4.debug({
2061
2061
  ID: device.deviceId,
2062
2062
  mediaType: DEVICE,
2063
2063
  action: 'getMicrophones()',
@@ -2072,13 +2072,13 @@ var getMicrophones = /*#__PURE__*/function () {
2072
2072
  }();
2073
2073
  var getSpeakers = /*#__PURE__*/function () {
2074
2074
  var _ref6 = _asyncToGenerator__default["default"](function* () {
2075
- logger$5.debug({
2075
+ logger$4.debug({
2076
2076
  mediaType: DEVICE,
2077
2077
  action: 'getSpeakers()',
2078
2078
  description: 'Called'
2079
2079
  });
2080
2080
  var devices = yield getDevices$1();
2081
- logger$5.info({
2081
+ logger$4.info({
2082
2082
  mediaType: DEVICE,
2083
2083
  action: 'getSpeakers()',
2084
2084
  description: 'Filtering speaker devices from all available media devices'
@@ -2089,7 +2089,7 @@ var getSpeakers = /*#__PURE__*/function () {
2089
2089
  } = _ref7;
2090
2090
  return kind === DeviceKinds.AUDIO_OUTPUT;
2091
2091
  }).map(device => {
2092
- logger$5.debug({
2092
+ logger$4.debug({
2093
2093
  ID: device.deviceId,
2094
2094
  mediaType: DEVICE,
2095
2095
  action: 'getSpeakers()',
@@ -2103,12 +2103,12 @@ var getSpeakers = /*#__PURE__*/function () {
2103
2103
  };
2104
2104
  }();
2105
2105
  function getUnsupportedConstraints(mediaConstraints) {
2106
- logger$5.debug({
2106
+ logger$4.debug({
2107
2107
  mediaType: MEDIA,
2108
2108
  action: 'getUnsupportedConstraints()',
2109
2109
  description: "Called with ".concat(JSON.stringify(mediaConstraints))
2110
2110
  });
2111
- logger$5.info({
2111
+ logger$4.info({
2112
2112
  mediaType: MEDIA,
2113
2113
  action: 'getUnsupportedConstraints()',
2114
2114
  description: 'Filtering list of media track unsupported constraints'
@@ -2120,7 +2120,7 @@ function getUnsupportedConstraints(mediaConstraints) {
2120
2120
  unsupportedConstraints.push(constraint);
2121
2121
  }
2122
2122
  });
2123
- logger$5.debug({
2123
+ logger$4.debug({
2124
2124
  mediaType: MEDIA,
2125
2125
  action: 'getUnsupportedConstraints()',
2126
2126
  description: "Received unsupported constraints ".concat(unsupportedConstraints)
@@ -2132,7 +2132,7 @@ function createAudioTrack(_x) {
2132
2132
  }
2133
2133
  function _createAudioTrack() {
2134
2134
  _createAudioTrack = _asyncToGenerator__default["default"](function* (device) {
2135
- logger$5.debug({
2135
+ logger$4.debug({
2136
2136
  ID: device === null || device === void 0 ? void 0 : device.ID,
2137
2137
  mediaType: DEVICE,
2138
2138
  action: 'createAudioTrack()',
@@ -2140,7 +2140,7 @@ function _createAudioTrack() {
2140
2140
  });
2141
2141
  if (device && device.kind !== DeviceKinds.AUDIO_INPUT) {
2142
2142
  var _error = new Error("Device ".concat(device.ID, " is not of kind AUDIO_INPUT"));
2143
- logger$5.error({
2143
+ logger$4.error({
2144
2144
  ID: device.ID,
2145
2145
  mediaType: 'DEVICE',
2146
2146
  action: 'createAudioTrack()',
@@ -2149,7 +2149,7 @@ function _createAudioTrack() {
2149
2149
  });
2150
2150
  throw _error;
2151
2151
  }
2152
- logger$5.info({
2152
+ logger$4.info({
2153
2153
  ID: device === null || device === void 0 ? void 0 : device.ID,
2154
2154
  mediaType: DEVICE,
2155
2155
  action: 'createAudioTrack()',
@@ -2168,7 +2168,7 @@ function _createAudioTrack() {
2168
2168
  var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);
2169
2169
  var track = stream.getAudioTracks()[0];
2170
2170
  if (track) {
2171
- logger$5.debug({
2171
+ logger$4.debug({
2172
2172
  ID: device === null || device === void 0 ? void 0 : device.ID,
2173
2173
  mediaType: DEVICE,
2174
2174
  action: 'createAudioTrack()',
@@ -2177,7 +2177,7 @@ function _createAudioTrack() {
2177
2177
  return new Track(track);
2178
2178
  }
2179
2179
  var error = new Error("Device could not obtain an audio track of kind ".concat(device === null || device === void 0 ? void 0 : device.kind));
2180
- logger$5.error({
2180
+ logger$4.error({
2181
2181
  ID: device === null || device === void 0 ? void 0 : device.ID,
2182
2182
  mediaType: 'DEVICE',
2183
2183
  action: 'createAudioTrack()',
@@ -2193,7 +2193,7 @@ function createVideoTrack(_x2) {
2193
2193
  }
2194
2194
  function _createVideoTrack() {
2195
2195
  _createVideoTrack = _asyncToGenerator__default["default"](function* (device) {
2196
- logger$5.debug({
2196
+ logger$4.debug({
2197
2197
  ID: device === null || device === void 0 ? void 0 : device.ID,
2198
2198
  mediaType: DEVICE,
2199
2199
  action: 'createVideoTrack()',
@@ -2201,7 +2201,7 @@ function _createVideoTrack() {
2201
2201
  });
2202
2202
  if (device && device.kind !== DeviceKinds.VIDEO_INPUT) {
2203
2203
  var _error2 = new Error("Device ".concat(device.ID, " is not of kind VIDEO_INPUT"));
2204
- logger$5.error({
2204
+ logger$4.error({
2205
2205
  ID: device.ID,
2206
2206
  mediaType: 'DEVICE',
2207
2207
  action: 'createVideoTrack()',
@@ -2210,7 +2210,7 @@ function _createVideoTrack() {
2210
2210
  });
2211
2211
  throw _error2;
2212
2212
  }
2213
- logger$5.info({
2213
+ logger$4.info({
2214
2214
  ID: device === null || device === void 0 ? void 0 : device.ID,
2215
2215
  mediaType: DEVICE,
2216
2216
  action: 'createVideoTrack()',
@@ -2229,7 +2229,7 @@ function _createVideoTrack() {
2229
2229
  var stream = yield navigator.mediaDevices.getUserMedia(deviceConfig);
2230
2230
  var track = stream.getVideoTracks()[0];
2231
2231
  if (track) {
2232
- logger$5.debug({
2232
+ logger$4.debug({
2233
2233
  ID: device === null || device === void 0 ? void 0 : device.ID,
2234
2234
  mediaType: DEVICE,
2235
2235
  action: 'createVideoTrack()',
@@ -2238,7 +2238,7 @@ function _createVideoTrack() {
2238
2238
  return new Track(track);
2239
2239
  }
2240
2240
  var error = new Error("Device could not obtain a video track of kind ".concat(device === null || device === void 0 ? void 0 : device.kind));
2241
- logger$5.error({
2241
+ logger$4.error({
2242
2242
  ID: device === null || device === void 0 ? void 0 : device.ID,
2243
2243
  mediaType: 'DEVICE',
2244
2244
  action: 'createVideoTrack()',
@@ -2255,13 +2255,13 @@ function createContentTrack(_x3) {
2255
2255
  function _createContentTrack() {
2256
2256
  _createContentTrack = _asyncToGenerator__default["default"](function* (mediaConstraints) {
2257
2257
  var _mediaConstraints$dev, _mediaConstraints$dev2, _mediaConstraints$dev7;
2258
- logger$5.debug({
2258
+ logger$4.debug({
2259
2259
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev = mediaConstraints.deviceId) === null || _mediaConstraints$dev === void 0 ? void 0 : _mediaConstraints$dev.toString(),
2260
2260
  mediaType: DEVICE,
2261
2261
  action: 'createContentTrack()',
2262
2262
  description: "Called ".concat(mediaConstraints ? "with ".concat(JSON.stringify(mediaConstraints)) : '', " ")
2263
2263
  });
2264
- logger$5.info({
2264
+ logger$4.info({
2265
2265
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev2 = mediaConstraints.deviceId) === null || _mediaConstraints$dev2 === void 0 ? void 0 : _mediaConstraints$dev2.toString(),
2266
2266
  mediaType: MEDIA,
2267
2267
  action: 'createContentTrack()',
@@ -2279,7 +2279,7 @@ function _createContentTrack() {
2279
2279
  } catch (error) {
2280
2280
  if (error instanceof Error) {
2281
2281
  var _mediaConstraints$dev3;
2282
- logger$5.error({
2282
+ logger$4.error({
2283
2283
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev3 = mediaConstraints.deviceId) === null || _mediaConstraints$dev3 === void 0 ? void 0 : _mediaConstraints$dev3.toString(),
2284
2284
  mediaType: 'DEVICE',
2285
2285
  action: 'createContentTrack()',
@@ -2294,7 +2294,7 @@ function _createContentTrack() {
2294
2294
  if (unsupportedConstraints.length <= 0) {
2295
2295
  var _mediaConstraints$dev4;
2296
2296
  track.applyConstraints(mediaConstraints);
2297
- logger$5.debug({
2297
+ logger$4.debug({
2298
2298
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev4 = mediaConstraints.deviceId) === null || _mediaConstraints$dev4 === void 0 ? void 0 : _mediaConstraints$dev4.toString(),
2299
2299
  mediaType: DEVICE,
2300
2300
  action: 'createContentTrack()',
@@ -2303,7 +2303,7 @@ function _createContentTrack() {
2303
2303
  } else {
2304
2304
  var _mediaConstraints$dev5;
2305
2305
  var _error3 = new Error("".concat(unsupportedConstraints.join(', '), " constraint is not supported by browser"));
2306
- logger$5.error({
2306
+ logger$4.error({
2307
2307
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev5 = mediaConstraints.deviceId) === null || _mediaConstraints$dev5 === void 0 ? void 0 : _mediaConstraints$dev5.toString(),
2308
2308
  mediaType: 'DEVICE',
2309
2309
  action: 'createContentTrack()',
@@ -2315,7 +2315,7 @@ function _createContentTrack() {
2315
2315
  }
2316
2316
  if (track) {
2317
2317
  var _mediaConstraints$dev6;
2318
- logger$5.debug({
2318
+ logger$4.debug({
2319
2319
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev6 = mediaConstraints.deviceId) === null || _mediaConstraints$dev6 === void 0 ? void 0 : _mediaConstraints$dev6.toString(),
2320
2320
  mediaType: DEVICE,
2321
2321
  action: 'createContentTrack()',
@@ -2324,7 +2324,7 @@ function _createContentTrack() {
2324
2324
  return new Track(track);
2325
2325
  }
2326
2326
  var error = new Error('Could not obtain a content track');
2327
- logger$5.error({
2327
+ logger$4.error({
2328
2328
  ID: mediaConstraints === null || mediaConstraints === void 0 ? void 0 : (_mediaConstraints$dev7 = mediaConstraints.deviceId) === null || _mediaConstraints$dev7 === void 0 ? void 0 : _mediaConstraints$dev7.toString(),
2329
2329
  mediaType: 'DEVICE',
2330
2330
  action: 'createContentTrack()',
@@ -2341,7 +2341,7 @@ function deviceChangePublisher() {
2341
2341
  function _deviceChangePublisher() {
2342
2342
  _deviceChangePublisher = _asyncToGenerator__default["default"](function* () {
2343
2343
  var _navigator$mediaDevic2;
2344
- logger$5.debug({
2344
+ logger$4.debug({
2345
2345
  mediaType: DEVICE,
2346
2346
  action: 'deviceChangePublisher()',
2347
2347
  description: 'Called'
@@ -2350,7 +2350,7 @@ function _deviceChangePublisher() {
2350
2350
  console.warn('navigator.mediaDevices.enumerateDevices() is not supported.');
2351
2351
  return;
2352
2352
  }
2353
- logger$5.info({
2353
+ logger$4.info({
2354
2354
  mediaType: DEVICE,
2355
2355
  action: 'deviceChangePublisher()',
2356
2356
  description: 'Calling individual subscription listener obtained by device change event'
@@ -2382,7 +2382,7 @@ function on(_x4, _x5) {
2382
2382
  }
2383
2383
  function _on() {
2384
2384
  _on = _asyncToGenerator__default["default"](function* (eventName, listener) {
2385
- logger$5.debug({
2385
+ logger$4.debug({
2386
2386
  mediaType: MEDIA,
2387
2387
  action: 'on()',
2388
2388
  description: "Subscribing to an ".concat(eventName, ",").concat(listener)
@@ -2397,7 +2397,7 @@ function _on() {
2397
2397
  return _on.apply(this, arguments);
2398
2398
  }
2399
2399
  var off = (eventName, listener) => {
2400
- logger$5.debug({
2400
+ logger$4.debug({
2401
2401
  mediaType: MEDIA,
2402
2402
  action: 'off()',
2403
2403
  description: "Called ".concat(eventName, " with ").concat(listener, " listener")
@@ -2419,7 +2419,7 @@ function isValidTrack(track) {
2419
2419
  } = settings;
2420
2420
  if (sampleRate && !supportedSampleRates.includes(sampleRate)) {
2421
2421
  var error = new Error("Sample rate of ".concat(sampleRate, " is not supported."));
2422
- logger$5.error({
2422
+ logger$4.error({
2423
2423
  ID: track.id,
2424
2424
  mediaType: MEDIA_STREAM_TRACK,
2425
2425
  action: 'isValidTrack()',
@@ -2432,7 +2432,7 @@ function isValidTrack(track) {
2432
2432
  }
2433
2433
  } else {
2434
2434
  var _error = new Error('Not supported');
2435
- logger$5.info({
2435
+ logger$4.info({
2436
2436
  ID: track.id,
2437
2437
  mediaType: MEDIA_STREAM_TRACK,
2438
2438
  action: 'isValidTrack()',
@@ -2447,7 +2447,7 @@ function loadProcessor() {
2447
2447
  }
2448
2448
  function _loadProcessor() {
2449
2449
  _loadProcessor = _asyncToGenerator__default["default"](function* () {
2450
- logger$5.info({
2450
+ logger$4.info({
2451
2451
  mediaType: MEDIA_STREAM_TRACK,
2452
2452
  action: 'loadProcessor()',
2453
2453
  description: 'Creating and loading BNR module'
@@ -2466,7 +2466,7 @@ function enableBNR(_x) {
2466
2466
  }
2467
2467
  function _enableBNR() {
2468
2468
  _enableBNR = _asyncToGenerator__default["default"](function* (track) {
2469
- logger$5.debug({
2469
+ logger$4.debug({
2470
2470
  ID: track.id,
2471
2471
  mediaType: MEDIA_STREAM_TRACK,
2472
2472
  action: 'enableBNR()',
@@ -2477,7 +2477,7 @@ function _enableBNR() {
2477
2477
  var streamFromTrack = new MediaStream();
2478
2478
  streamFromTrack.addTrack(track);
2479
2479
  var workletNode;
2480
- logger$5.info({
2480
+ logger$4.info({
2481
2481
  ID: track.id,
2482
2482
  mediaType: MEDIA_STREAM_TRACK,
2483
2483
  action: 'enableBNR()',
@@ -2487,7 +2487,7 @@ function _enableBNR() {
2487
2487
  if (oldDestinationTrack && track.id === oldDestinationTrack.id) {
2488
2488
  var oldTrackErrorMsg = 'BNR is enabled on the track already';
2489
2489
  var oldTrackError = new Error(oldTrackErrorMsg);
2490
- logger$5.error({
2490
+ logger$4.error({
2491
2491
  ID: track.id,
2492
2492
  mediaType: MEDIA_STREAM_TRACK,
2493
2493
  action: 'enableBNR()',
@@ -2497,7 +2497,7 @@ function _enableBNR() {
2497
2497
  throw oldTrackError;
2498
2498
  }
2499
2499
  if (bnrProcessor.isModuleAdded) {
2500
- logger$5.debug({
2500
+ logger$4.debug({
2501
2501
  ID: track.id,
2502
2502
  mediaType: MEDIA_STREAM_TRACK,
2503
2503
  action: 'enableBNR()',
@@ -2506,7 +2506,7 @@ function _enableBNR() {
2506
2506
  workletNode = bnrProcessor.workletNode;
2507
2507
  workletNode.port.postMessage('DISPOSE');
2508
2508
  }
2509
- logger$5.info({
2509
+ logger$4.info({
2510
2510
  ID: track.id,
2511
2511
  mediaType: MEDIA_STREAM_TRACK,
2512
2512
  action: 'enableBNR()',
@@ -2519,7 +2519,7 @@ function _enableBNR() {
2519
2519
  bnrProcessor.sourceNode.connect(workletNode);
2520
2520
  bnrProcessor.destinationStream = audioContext.createMediaStreamDestination();
2521
2521
  workletNode.connect(bnrProcessor.destinationStream);
2522
- logger$5.info({
2522
+ logger$4.info({
2523
2523
  ID: track.id,
2524
2524
  mediaType: MEDIA_STREAM_TRACK,
2525
2525
  action: 'enableBNR()',
@@ -2530,7 +2530,7 @@ function _enableBNR() {
2530
2530
  bnrProcessor.destinationTrack = destinationTrack;
2531
2531
  return destinationTrack;
2532
2532
  } catch (error) {
2533
- logger$5.error({
2533
+ logger$4.error({
2534
2534
  ID: track.id,
2535
2535
  mediaType: MEDIA_STREAM_TRACK,
2536
2536
  action: 'enableBNR()',
@@ -2543,28 +2543,28 @@ function _enableBNR() {
2543
2543
  return _enableBNR.apply(this, arguments);
2544
2544
  }
2545
2545
  function disableBNR() {
2546
- logger$5.debug({
2546
+ logger$4.debug({
2547
2547
  mediaType: MEDIA_STREAM_TRACK,
2548
2548
  action: 'disableBNR()',
2549
2549
  description: 'Called'
2550
2550
  });
2551
2551
  try {
2552
2552
  var workletNode;
2553
- logger$5.info({
2553
+ logger$4.info({
2554
2554
  mediaType: MEDIA_STREAM_TRACK,
2555
2555
  action: 'disableBNR()',
2556
2556
  description: 'Checking if BNR is enabled before disabling'
2557
2557
  });
2558
2558
  if (!bnrProcessor.isModuleAdded) {
2559
2559
  var error = new Error('Can not disable as BNR is not enabled');
2560
- logger$5.error({
2560
+ logger$4.error({
2561
2561
  mediaType: MEDIA_STREAM_TRACK,
2562
2562
  action: 'disableBNR()',
2563
2563
  description: 'Can not disable as BNR is not enabled'
2564
2564
  });
2565
2565
  throw error;
2566
2566
  } else {
2567
- logger$5.info({
2567
+ logger$4.info({
2568
2568
  mediaType: MEDIA_STREAM_TRACK,
2569
2569
  action: 'disableBNR()',
2570
2570
  description: 'Using existing AudioWorkletNode for disabling BNR'
@@ -2572,7 +2572,7 @@ function disableBNR() {
2572
2572
  workletNode = bnrProcessor.workletNode;
2573
2573
  }
2574
2574
  workletNode.port.postMessage('DISPOSE');
2575
- logger$5.info({
2575
+ logger$4.info({
2576
2576
  mediaType: MEDIA_STREAM_TRACK,
2577
2577
  action: 'disableBNR()',
2578
2578
  description: 'Obtaining raw media stream track and removing bnr context'
@@ -2587,7 +2587,7 @@ function disableBNR() {
2587
2587
  delete bnrProcessor.destinationTrack;
2588
2588
  return track;
2589
2589
  } catch (error) {
2590
- logger$5.error({
2590
+ logger$4.error({
2591
2591
  mediaType: MEDIA_STREAM_TRACK,
2592
2592
  action: 'disableBNR()',
2593
2593
  description: 'Error in disableBNR',
@@ -2689,7 +2689,7 @@ var Error$1 = /*#__PURE__*/Object.freeze({
2689
2689
  SdpOfferHandlingError: SdpOfferHandlingError
2690
2690
  });
2691
2691
 
2692
- class EventEmitter$3 extends EventEmitter$4 {}
2692
+ class EventEmitter$5 extends EventEmitter$6 {}
2693
2693
 
2694
2694
  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);}/******************************************************************************
2695
2695
  Copyright (c) Microsoft Corporation.
@@ -2806,7 +2806,7 @@ return devices.filter(device=>deviceKinds.includes(device.kind)).every(device=>d
2806
2806
  // (Firefox) will allow the user to access device information.
2807
2807
  var callbackRes=yield callback();// Stop tracks in the stream so the browser (Safari) will know that there is not an active
2808
2808
  // stream running.
2809
- 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={}));/**
2809
+ 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={}));/**
2810
2810
  * Represents a WCME error, which contains error type and error message.
2811
2811
  */class WcmeError{/**
2812
2812
  * Creates new error.
@@ -2814,27 +2814,38 @@ stream.getTracks().forEach(track=>track.stop());return callbackRes;}return callb
2814
2814
  * @param type - Error type.
2815
2815
  * @param message - Error message.
2816
2816
  */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**
2817
- * Creates a camera video track. Please note that the constraint params in second getUserMedia call would NOT take effect when:
2817
+ * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:
2818
2818
  *
2819
- * 1. Previous captured video track from the same device is not stopped .
2820
- * 2. Previous createCameraTrack() call for the same device is in progress.
2819
+ * 1. Previous captured video stream from the same device is not stopped.
2820
+ * 2. Previous createCameraStream() call for the same device is in progress.
2821
2821
  *
2822
- * @param constructor - Constructor for the local camera track.
2822
+ * @param constructor - Constructor for the local camera stream.
2823
2823
  * @param constraints - Video device constraints.
2824
- * @returns A LocalTrack object or an error.
2825
- */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);});}/**
2826
- * Creates a microphone audio track.
2824
+ * @returns A LocalCameraStream object or an error.
2825
+ */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);});}/**
2826
+ * Creates a LocalMicrophoneStream with the given constraints.
2827
2827
  *
2828
- * @param constructor - Constructor for the local microphone track.
2828
+ * @param constructor - Constructor for the local microphone stream.
2829
2829
  * @param constraints - Audio device constraints.
2830
- * @returns A LocalTrack object or an error.
2831
- */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);});}/**
2832
- * Creates a display video track.
2830
+ * @returns A LocalMicrophoneStream object or an error.
2831
+ */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);});}/**
2832
+ * Creates a LocalDisplayStream with the given parameters.
2833
2833
  *
2834
- * @param constructor - Constructor for the local display track.
2835
- * @param videoContentHint - An optional parameters to give a hint for the content of the track.
2836
- * @returns A Promise that resolves to a LocalDisplayTrack.
2837
- */function createDisplayTrack(constructor,videoContentHint){return __awaiter$1(this,void 0,void 0,function*(){var stream=yield getDisplayMedia({video:true});return new constructor(stream,videoContentHint);});}/**
2834
+ * @param constructor - Constructor for the local display stream.
2835
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
2836
+ * @returns A Promise that resolves to a LocalDisplayStream or an error.
2837
+ */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;});}/**
2838
+ * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.
2839
+ *
2840
+ * @param displayStreamConstructor - Constructor for the local display stream.
2841
+ * @param systemAudioStreamConstructor - Constructor for the local system audio stream.
2842
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
2843
+ * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an
2844
+ * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null
2845
+ * instead.
2846
+ */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
2847
+ 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
2848
+ localSystemAudioStream=new systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**
2838
2849
  * Enumerates the media input and output devices available.
2839
2850
  *
2840
2851
  * @param deviceKind - Optional filter to return a specific device kind.
@@ -2853,18 +2864,18 @@ stream.getTracks().forEach(track=>track.stop());return callbackRes;}return callb
2853
2864
  * @returns List of camera devices in an array of MediaDeviceInfo objects.
2854
2865
  */function getVideoInputDevices(){return __awaiter$1(this,void 0,void 0,function*(){return getDevices(DeviceKind.VideoInput);});}/**
2855
2866
  * Export the setOnDeviceChangeHandler method directly from the core lib.
2856
- */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
2867
+ */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
2857
2868
  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
2858
2869
  // added to it. This is a useful default which helps finding memory leaks.
2859
- 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
2870
+ 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
2860
2871
  // that to be increased. Set to zero for unlimited.
2861
- 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.
2872
+ 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.
2862
2873
  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
2863
2874
  // up in Node's output if this results in an unhandled exception.
2864
2875
  throw er;// Unhandled 'error' event
2865
2876
  }// At least give some kind of context to the user
2866
2877
  var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
2867
- }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
2878
+ }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
2868
2879
  // adding it to the listeners, first emit "newListener".
2869
2880
  if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
2870
2881
  // this._events to be assigned to a new object
@@ -2872,151 +2883,187 @@ events=target._events;}existing=events[type];}if(existing===undefined){// Optimi
2872
2883
  existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
2873
2884
  existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
2874
2885
  }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
2875
- 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
2886
+ 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
2876
2887
  // eslint-disable-next-line no-restricted-syntax
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(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.
2878
- 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
2888
+ 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.
2889
+ 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
2879
2890
  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
2880
2891
  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
2881
- 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
2892
+ 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
2882
2893
  // EventEmitters, we do not listen for `error` events here.
2883
2894
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
2884
2895
  // have to do it manually.
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);}}/**
2886
- * Typed event emitter class.
2887
- */class EventEmitter$2 extends events$1.exports.EventEmitter{}exports.LocalTrackEvents = void 0;(function(LocalTrackEvents){LocalTrackEvents["Ended"]="ended";LocalTrackEvents["Muted"]="muted";/**
2888
- * Fires when the published state of a LocalTrack changes. A value of 'true' indicates the
2889
- * track has been published, and 'false' indicates that it is no longer published. Tracks are
2890
- * unpublished by default, and must be published explicitly (no event will be fired to indicate
2891
- * the initial state of 'unpublished').
2892
- */LocalTrackEvents["PublishedStateUpdate"]="published-state-update";/**
2893
- * Fires when there has been a change in the underlying track.
2894
- */LocalTrackEvents["UnderlyingTrackChange"]="underlying-track-change";/**
2895
- * Fires when the applyConstraints() has been called for the track.
2896
- */LocalTrackEvents["TrackConstraintsChange"]="track-constraints-change";})(exports.LocalTrackEvents||(exports.LocalTrackEvents={}));// TBD: Fix this once types are published separately
2897
- // export type TrackEffect = BaseMicrophoneEffect | BaseCameraEffect;
2898
- /**
2899
- * Basic Track class. Wrapper for LocalTrack from 'webrtc-core'.
2900
- */class LocalTrack extends EventEmitter$2{/**
2901
- * Constructor for the Track class. Creates an empty CoreLocalTrack or uses an existing one.
2902
- *
2903
- * @param stream - The MediaStream for this LocalTrack.
2904
- */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.
2905
- this.label=this.underlyingStream.getTracks()[0].label;/**
2906
- * Emit ended event when the underlying track ends.
2907
- */this.underlyingTrack.onended=()=>{this.emit(exports.LocalTrackEvents.Ended,{trackState:this.trackState});};}/**
2908
- * Get the kind of this track.
2909
- * NOTE(brian): the need for this will likely go away once we get the rest of the track hierarchy
2910
- * done, as we can use something like instanceof instead.
2896
+ 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;exports.StreamEventNames = void 0;(function(StreamEventNames){StreamEventNames["MuteStateChange"]="mute-state-change";StreamEventNames["Ended"]="stream-ended";})(exports.StreamEventNames||(exports.StreamEventNames={}));/**
2897
+ * Base stream class.
2898
+ */class _Stream{/**
2899
+ * Create a Stream from the given values.
2911
2900
  *
2912
- * @returns - The kind of this track, as a MediaStreamTrackKind.
2913
- */get kind(){return this.underlyingTrack.kind;}/**
2914
- * Get id of this track.
2901
+ * @param stream - The initial output MediaStream for this Stream.
2902
+ */constructor(stream){// TODO: these should be protected, but we need the helper type in ts-events
2903
+ // to hide the 'emit' method from TypedEvent.
2904
+ 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);}/**
2905
+ * Handler which is called when a track's mute event fires.
2906
+ */handleTrackMuted(){this[exports.StreamEventNames.MuteStateChange].emit(true);}/**
2907
+ * Handler which is called when a track's unmute event fires.
2908
+ */handleTrackUnmuted(){this[exports.StreamEventNames.MuteStateChange].emit(false);}/**
2909
+ * Handler which is called when a track's ended event fires.
2910
+ */handleTrackEnded(){this[exports.StreamEventNames.Ended].emit();}/**
2911
+ * Add event handlers to a MediaStreamTrack.
2915
2912
  *
2916
- * @returns The id of this track.
2917
- */get id(){return this.underlyingTrack.id;}/**
2918
- * Get muted state of this track.
2913
+ * @param track - The MediaStreamTrack.
2914
+ */addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);track.addEventListener('ended',this.handleTrackEnded);}/**
2915
+ * Remove event handlers from a MediaStreamTrack.
2919
2916
  *
2920
- * @returns The muted state of this track.
2921
- */get muted(){return !this.underlyingTrack.enabled;}/**
2922
- * Get published state of this track.
2917
+ * @param track - The MediaStreamTrack.
2918
+ */removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);track.removeEventListener('ended',this.handleTrackEnded);}/**
2919
+ * Get the track of the output stream.
2923
2920
  *
2924
- * @returns The published state of this track.
2925
- */get published(){return this.isPublished;}/**
2926
- * Get the underlying MediaStream.
2921
+ * @returns The output track.
2922
+ */get outputTrack(){return this.outputStream.getTracks()[0];}}_a$1$1=exports.StreamEventNames.MuteStateChange,_b$1=exports.StreamEventNames.Ended;var Stream=AddEvents(_Stream);var _a$6$1,_b;exports.LocalStreamEventNames = void 0;(function(LocalStreamEventNames){LocalStreamEventNames["ConstraintsChange"]="constraints-change";LocalStreamEventNames["OutputTrackChange"]="output-track-change";})(exports.LocalStreamEventNames||(exports.LocalStreamEventNames={}));/**
2923
+ * A stream which originates on the local device.
2924
+ */class _LocalStream extends Stream{/**
2925
+ * Create a LocalStream from the given values.
2927
2926
  *
2928
- * @returns The underlying MediaStream.
2929
- */get underlyingStream(){return this._underlyingStream;}/**
2930
- * Set the underlying MediaStream.
2931
- */set underlyingStream(stream){this._underlyingStream=stream;}/**
2932
- * Get current state of this track.
2927
+ * @param stream - The initial output MediaStream for this Stream.
2928
+ */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;}/**
2929
+ * Get the track within the MediaStream with which this LocalStream was created.
2933
2930
  *
2934
- * @returns Current state of this track.
2935
- */get trackState(){return {id:this.id,label:this.label,type:this.kind,muted:this.muted};}/**
2936
- * Get the underlying MediaStreamTrack.
2931
+ * @returns The track within the MediaStream with which this LocalStream
2932
+ * was created.
2933
+ */get inputTrack(){return this.inputStream.getTracks()[0];}/**
2934
+ * @inheritdoc
2935
+ */get muted(){return !this.inputTrack.enabled;}/**
2936
+ * Set the mute state of this stream.
2937
2937
  *
2938
- * @returns The underlying MediaStreamTrack.
2939
- */get underlyingTrack(){return this._underlyingStream.getTracks()[0];}/**
2940
- * Get the original MediaStreamTrack. We retain a reference to the stream obtained through
2941
- * `getUserMedia()` to ensure it's updated alongside the `underlyingStream`. These two streams may
2942
- * be different if effects have been added to the original stream.
2938
+ * @param isMuted - True to mute, false to unmute.
2939
+ */setMuted(isMuted){if(this.inputTrack.enabled===isMuted){this.inputTrack.enabled=!isMuted;// setting `enabled` will not automatically emit MuteStateChange, so we emit it here
2940
+ this[exports.StreamEventNames.MuteStateChange].emit(isMuted);}}/**
2941
+ * @inheritdoc
2942
+ */getSettings(){return this.inputTrack.getSettings();}/**
2943
+ * Get the label of the input track on this stream.
2943
2944
  *
2944
- * @returns The original MediaStreamTrack.
2945
- */get originalTrack(){return this.originalStream.getTracks()[0];}/**
2946
- * Set the mute state of this track.
2945
+ * @returns The label of the track.
2946
+ */get label(){return this.inputTrack.label;}/**
2947
+ * Change the track of the output stream to a different track.
2947
2948
  *
2948
- * @param muted - True to mute, false to unmute.
2949
- * @fires LocalTrackEvents.Muted
2950
- */setMuted(muted){// Only change state if it's different, where "enabled" means "unmuted."
2951
- if(this.underlyingTrack.enabled===muted){this.originalTrack.enabled=!muted;this.underlyingTrack.enabled=!muted;this.emit(exports.LocalTrackEvents.Muted,{trackState:this.trackState});logger$3.log("Local track ".concat(muted?'muted':'unmuted',":"),{trackState:this.trackState});}}/**
2952
- * Set the published state of this LocalTrack.
2949
+ * Note: this method assumes and enforces that if both input and output streams have the same
2950
+ * track, then they must also be the same stream.
2953
2951
  *
2954
- * @param isPublished - True if this track has been published, false otherwise.
2955
- * @fires LocalTrackEvents.PublishedStateUpdate
2956
- */setPublished(isPublished){if(this.isPublished!==isPublished){this.isPublished=isPublished;this.emit(exports.LocalTrackEvents.PublishedStateUpdate,{trackState:this.trackState,isPublished});logger$3.log("Local track ".concat(isPublished?'published':'unpublished',":"),{trackState:this.trackState});}}/**
2957
- * Stop this track.
2958
- *
2959
- * @fires LocalTrackEvents.Ended
2960
- */stop(){this.originalTrack.stop();this.underlyingTrack.stop();this.emit(exports.LocalTrackEvents.Ended,{trackState:this.trackState});logger$3.log("Local track stopped:",{trackState:this.trackState});}/**
2961
- * Adds an effect to a local track.
2952
+ * @param newTrack - The track to be used in the output stream.
2953
+ */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
2954
+ // be the same too. We want to apply the new track to the output stream without affecting the
2955
+ // input stream, so we separate them by setting the input stream to be its own stream.
2956
+ 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
2957
+ // be the same too.
2958
+ if(this.inputTrack.id===this.outputTrack.id){this.inputStream=this.outputStream;}this[exports.LocalStreamEventNames.OutputTrackChange].emit(newTrack);}}/**
2959
+ * @inheritdoc
2960
+ */stop(){this.inputTrack.stop();this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here
2961
+ this[exports.StreamEventNames.Ended].emit();}/**
2962
+ * Adds an effect to a local stream.
2962
2963
  *
2963
2964
  * @param name - The name of the effect.
2964
2965
  * @param effect - The effect to add.
2965
2966
  */addEffect(name,effect){return __awaiter$1(this,void 0,void 0,function*(){// Load the effect
2966
- this.loadingEffects.set(name,effect);yield effect.load(this.underlyingStream);// Check that the loaded effect is the latest one and dispose if not
2967
- if(effect!==this.loadingEffects.get(name)){yield effect.dispose();throw new Error("Effect \"".concat(name,"\" not required after loading"));}// Use the loaded effect
2968
- this.underlyingStream=effect.getUnderlyingStream();this.effects.set(name,effect);this.loadingEffects.delete(name);this.emit(exports.LocalTrackEvents.UnderlyingTrackChange);});}/**
2969
- * Get an effect by name.
2967
+ 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
2968
+ if(effect!==this.loadingEffects.get(name)){yield effect.dispose();throw new Error("Effect \"".concat(name,"\" not required after loading"));}// Use the effect
2969
+ 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.
2970
+ // TODO: using EffectEvent.TrackUpdated will cause the entire web-media-effects lib to be built
2971
+ // and makes the size of the webrtc-core build much larger, so we use type assertion here as a
2972
+ // temporary workaround.
2973
+ 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);}});});}/**
2974
+ * Get an effect from the effects list.
2970
2975
  *
2971
- * @param name - The effect name.
2972
- * @returns A MicrophoneEffect.
2973
- */getEffect(name){var effect=this.effects.get(name);if(!effect){logger$3.log("No effect found with name '".concat(name,"'"));}return effect;}/**
2974
- * Get a copy of the effects Map.
2976
+ * @param name - The name of the effect you want to get.
2977
+ * @returns The effect or undefined.
2978
+ */getEffect(name){var _c;return (_c=this.effects.find(e=>e.name===name))===null||_c===void 0?void 0:_c.effect;}/**
2979
+ * Cleanup the local effects.
2980
+ */disposeEffects(){return __awaiter$1(this,void 0,void 0,function*(){this.loadingEffects.clear();// Dispose of any effects currently in use
2981
+ if(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(item=>item.effect.dispose()));this.effects=[];}});}}_a$6$1=exports.LocalStreamEventNames.ConstraintsChange,_b=exports.LocalStreamEventNames.OutputTrackChange;var LocalStream=AddEvents(_LocalStream);/**
2982
+ * An audio LocalStream.
2983
+ */class LocalAudioStream extends LocalStream{/**
2984
+ * Apply constraints to the stream.
2975
2985
  *
2976
- * @returns A copy of the effects map.
2977
- */getEffects(){return new Map(this.effects);}/**
2978
- * Cleanup the local microphone track.
2979
- */disposeEffects(){return __awaiter$1(this,void 0,void 0,function*(){// Clear effects that are loading to indicate that they are not needed
2980
- this.loadingEffects.clear();// Dispose of any effects currently in use
2981
- 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(exports.LocalTrackEvents.UnderlyingTrackChange);}});}/**
2982
- * Apply constraints to the track.
2986
+ * @param constraints - The constraints to apply.
2987
+ * @returns A promise which resolves when the constraints have been successfully applied.
2988
+ */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[exports.LocalStreamEventNames.ConstraintsChange].emit();});});}}/**
2989
+ * A video LocalStream.
2990
+ */class LocalVideoStream extends LocalStream{/**
2991
+ * Apply constraints to the stream.
2983
2992
  *
2984
- * @param constraints - The constraints to apply to the track.
2993
+ * @param constraints - The constraints to apply.
2985
2994
  * @returns A promise which resolves when the constraints have been successfully applied.
2986
- */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(exports.LocalTrackEvents.TrackConstraintsChange);});return ret;});}/**
2987
- * Get the current constraints of the track.
2995
+ */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[exports.LocalStreamEventNames.ConstraintsChange].emit();});});}/**
2996
+ * Get the content hint for this stream.
2988
2997
  *
2989
- * @returns The constraints of the track.
2990
- */getConstraints(){return this.underlyingTrack.getConstraints();}/**
2991
- * Get the current settings of the track.
2998
+ * @returns The content hint setting for this stream, or undefined if none has been set.
2999
+ */get contentHint(){return this.inputTrack.contentHint;}/**
3000
+ * Set the content hint for this stream.
2992
3001
  *
2993
- * @returns The settings of the track.
2994
- */getSettings(){return this.underlyingTrack.getSettings();}/**
3002
+ * @param hint - The content hint to set.
3003
+ */set contentHint(hint){this.inputTrack.contentHint=hint;}/**
2995
3004
  * Check the resolution and then return how many layers will be active.
2996
3005
  *
2997
3006
  * @returns The active layers count.
2998
- */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=exports.LocalTrackEvents;/**
2999
- * Represents a local track for a camera source.
3000
- */class LocalCameraTrack extends LocalTrack{}/**
3001
- * Represents a local track for a display source.
3002
- */class LocalDisplayTrack extends LocalTrack{/**
3003
- * Create a LocalDisplayTrack from the given values.
3007
+ */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;}}/**
3008
+ * A local camera stream.
3009
+ */class LocalCameraStream extends LocalVideoStream{}/**
3010
+ * A local display stream.
3011
+ */class LocalDisplayStream extends LocalVideoStream{}/**
3012
+ * A local microphone stream.
3013
+ */class LocalMicrophoneStream extends LocalAudioStream{}/**
3014
+ * A local system audio stream.
3015
+ */class LocalSystemAudioStream extends LocalAudioStream{}/**
3016
+ * A stream originating from a remote peer.
3017
+ */class RemoteStream extends Stream{/**
3018
+ * @inheritdoc
3019
+ */get muted(){return !this.outputTrack.enabled;}/**
3020
+ * @inheritdoc
3021
+ */getSettings(){return this.outputTrack.getSettings();}/**
3022
+ * Replace the existing track on the output stream for a new track.
3004
3023
  *
3005
- * @param stream - The MediaStream for this track.
3006
- * @param videoContentHint - An optional content hint, describing the content of the track.
3007
- */constructor(stream,videoContentHint){super(stream);this._videoContentHint=videoContentHint;this.underlyingTrack.contentHint=videoContentHint||'';}/**
3008
- * Get the VideoContentHint for this track.
3009
- *
3010
- * @returns The VideoContentHint for this track.
3011
- */get videoContentHint(){return this._videoContentHint;}}/**
3012
- * Represents a local track for a microphone source.
3013
- */class LocalMicrophoneTrack extends LocalTrack{}/**
3014
- * Represents a local track for system audio.
3015
- */class LocalSystemAudioTrack extends LocalTrack{}// Overall connection state (based on the ICE and DTLS connection states)
3024
+ * @param newTrack - The track to add to the stream.
3025
+ */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
3026
+ // the output track has changed, so we may need to emit an event here if this is the case.
3027
+ // this[StreamEventNames.OutputTrackChange].emit(newTrack);
3028
+ }/**
3029
+ * @inheritdoc
3030
+ */stop(){this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here
3031
+ this[exports.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
3032
+ 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
3033
+ // added to it. This is a useful default which helps finding memory leaks.
3034
+ 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
3035
+ // that to be increased. Set to zero for unlimited.
3036
+ 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.
3037
+ 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
3038
+ // up in Node's output if this results in an unhandled exception.
3039
+ throw er;// Unhandled 'error' event
3040
+ }// At least give some kind of context to the user
3041
+ var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
3042
+ }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
3043
+ // adding it to the listeners, first emit "newListener".
3044
+ if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
3045
+ // this._events to be assigned to a new object
3046
+ events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
3047
+ existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
3048
+ existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
3049
+ }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
3050
+ 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
3051
+ // eslint-disable-next-line no-restricted-syntax
3052
+ 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.
3053
+ 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
3054
+ 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
3055
+ 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
3056
+ 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
3057
+ // EventEmitters, we do not listen for `error` events here.
3058
+ emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3059
+ // have to do it manually.
3060
+ 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);}}/**
3061
+ * Typed event emitter class.
3062
+ */class EventEmitter$4 extends events$2.exports.EventEmitter{}// Overall connection state (based on the ICE and DTLS connection states)
3016
3063
  exports.ConnectionState = void 0;(function(ConnectionState){ConnectionState["New"]="New";ConnectionState["Closed"]="Closed";ConnectionState["Connected"]="Connected";ConnectionState["Connecting"]="Connecting";ConnectionState["Disconnected"]="Disconnected";ConnectionState["Failed"]="Failed";})(exports.ConnectionState||(exports.ConnectionState={}));var ConnectionStateEvents;(function(ConnectionStateEvents){ConnectionStateEvents["ConnectionStateChanged"]="ConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
3017
3064
  * Listens on the connection's ICE and DTLS state changes and emits a single
3018
3065
  * event that summarizes all the internal states into a single overall connection state.
3019
- */class ConnectionStateHandler extends EventEmitter$2{/**
3066
+ */class ConnectionStateHandler extends EventEmitter$4{/**
3020
3067
  * Creates an instance of ConnectionStateHandler.
3021
3068
  *
3022
3069
  * @param getCurrentStatesCallback - Callback for getting the connection state information
@@ -3209,7 +3256,7 @@ if(!(typeof window==='object'&&window.RTCPeerConnection)){return;}var origCreate
3209
3256
  * tree.
3210
3257
  */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.
3211
3258
  // Safari orders by track id.
3212
- 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
3259
+ 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
3213
3260
  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
3214
3261
  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.
3215
3262
  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
@@ -3434,7 +3481,7 @@ shimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLoca
3434
3481
  * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.
3435
3482
  */exports.MediaStreamTrackKind = void 0;(function(MediaStreamTrackKind){MediaStreamTrackKind["Audio"]="audio";MediaStreamTrackKind["Video"]="video";})(exports.MediaStreamTrackKind||(exports.MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents["IceGatheringStateChange"]="icegatheringstatechange";PeerConnectionEvents["ConnectionStateChange"]="connectionstatechange";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**
3436
3483
  * Manages a single RTCPeerConnection with the server.
3437
- */class PeerConnection extends EventEmitter$2{/**
3484
+ */class PeerConnection extends EventEmitter$4{/**
3438
3485
  * Creates an instance of the RTCPeerConnection.
3439
3486
  *
3440
3487
  * @param configuration - Config to the RTCPeerConnection constructor.
@@ -3458,7 +3505,7 @@ this.pc.onconnectionstatechange=()=>this.connectionStateHandler.onConnectionStat
3458
3505
  * added.
3459
3506
  * @returns The RTCRtpSender object which will be used to transmit the media data, or null if
3460
3507
  * there is no underlying track when a track is added.
3461
- */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);}/**
3508
+ */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);}/**
3462
3509
  * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the
3463
3510
  * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender
3464
3511
  * and an RTCRtpReceiver associated with it.
@@ -3562,20 +3609,7 @@ var isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnecti
3562
3609
  var localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.
3563
3610
  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.
3564
3611
  if(report.type==='local-candidate'){localCandidateStatsReports.push(report);}});// find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.
3565
- 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;exports.RecommendedOpusBitrates = void 0;(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";})(exports.RecommendedOpusBitrates||(exports.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);}/******************************************************************************
3566
- Copyright (c) Microsoft Corporation.
3567
-
3568
- Permission to use, copy, modify, and/or distribute this software for any
3569
- purpose with or without fee is hereby granted.
3570
-
3571
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
3572
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3573
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
3574
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
3575
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3576
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3577
- PERFORMANCE OF THIS SOFTWARE.
3578
- ***************************************************************************** */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:{}};/*!
3612
+ 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:{}};/*!
3579
3613
  * js-logger - http://github.com/jonnyreeves/js-logger
3580
3614
  * Jonny Reeves, http://jonnyreeves.co.uk/
3581
3615
  * js-logger may be freely distributed under the MIT license.
@@ -3624,7 +3658,20 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
3624
3658
  // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
3625
3659
  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.
3626
3660
  Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
3627
- 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;(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$1(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$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;/**
3661
+ 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;}exports.MediaFamily = void 0;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(exports.MediaFamily||(exports.MediaFamily={}));exports.MediaContent = void 0;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(exports.MediaContent||(exports.MediaContent={}));exports.Policy = void 0;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(exports.Policy||(exports.Policy={}));exports.MediaType = void 0;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(exports.MediaType||(exports.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===exports.MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Main){return exports.MediaType.VideoMain;}if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Slides){return exports.MediaType.VideoSlides;}if(mediaFamily===exports.MediaFamily.Audio&&mediaContent===exports.MediaContent.Main){return exports.MediaType.AudioMain;}return exports.MediaType.AudioSlides;}function getMediaFamily(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaFamily.Video:exports.MediaFamily.Audio;}function getMediaContent(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.AudioMain].includes(mediaType)?exports.MediaContent.Main:exports.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;exports.RecommendedOpusBitrates = void 0;(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";})(exports.RecommendedOpusBitrates||(exports.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);}/******************************************************************************
3662
+ Copyright (c) Microsoft Corporation.
3663
+
3664
+ Permission to use, copy, modify, and/or distribute this software for any
3665
+ purpose with or without fee is hereby granted.
3666
+
3667
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
3668
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
3669
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
3670
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
3671
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
3672
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
3673
+ PERFORMANCE OF THIS SOFTWARE.
3674
+ ***************************************************************************** */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;/**
3628
3675
  * Copies values of any nested depth.
3629
3676
  *
3630
3677
  * @param value - The value to be copied.
@@ -3688,7 +3735,85 @@ Object.keys(updatedStats).forEach(function(id){var report=updatedStats[id];if(re
3688
3735
  * @param timestamp - Time the event happened in milliseconds.
3689
3736
  */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`
3690
3737
  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
3691
- 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
3738
+ 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:{}};/*!
3739
+ * js-logger - http://github.com/jonnyreeves/js-logger
3740
+ * Jonny Reeves, http://jonnyreeves.co.uk/
3741
+ * js-logger may be freely distributed under the MIT license.
3742
+ */(function(module){(function(global){// Top level module for the global, static logger instance.
3743
+ var Logger={};// For those that are at home that are keeping score.
3744
+ Logger.VERSION="1.6.1";// Function which handles all incoming log messages.
3745
+ var logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
3746
+ var contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.
3747
+ 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.
3748
+ 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.
3749
+ var defineLogLevel=function defineLogLevel(value,name){return {value:value,name:name};};// Predefined logging levels.
3750
+ 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
3751
+ // of each other.
3752
+ var ContextualLogger=function ContextualLogger(defaultContext){this.context=defaultContext;this.setLevel(defaultContext.filterLevel);this.log=this.info;// Convenience alias.
3753
+ };ContextualLogger.prototype={// Changes the current logging level for the logging instance.
3754
+ setLevel:function setLevel(newLevel){// Ensure the supplied Level object looks valid.
3755
+ if(newLevel&&"value"in newLevel){this.context.filterLevel=newLevel;}},// Gets the current logging level for the logging instance
3756
+ getLevel:function getLevel(){return this.context.filterLevel;},// Is the logger configured to output messages at the supplied level?
3757
+ 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.
3758
+ 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.
3759
+ var globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.
3760
+ (function(){// Shortcut for optimisers.
3761
+ 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!
3762
+ L.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
3763
+ // object with the supplied log messages and the second being a context object which contains a hash of stateful
3764
+ // parameters which the logging function can consume.
3765
+ Logger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
3766
+ // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
3767
+ Logger.setLevel=function(level){// Set the globalLogger's level.
3768
+ globalLogger.setLevel(level);// Apply this level to all registered contextual loggers.
3769
+ for(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level
3770
+ Logger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
3771
+ // default context and log handler.
3772
+ Logger.get=function(name){// All logger instances are cached so they can be configured ahead of use.
3773
+ 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
3774
+ // write to the window's console object (if present); the optional options object can be used to customise the
3775
+ // formatter used to format each log message.
3776
+ 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.
3777
+ if(context.name){messages.unshift("["+context.name+"]");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
3778
+ // that don't offer a native console method.
3779
+ var timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)
3780
+ var invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.
3781
+ if(typeof console==="undefined"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.
3782
+ 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.
3783
+ 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
3784
+ // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
3785
+ 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.
3786
+ Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
3787
+ 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(exports.MediaType.AudioMain);var videoMainMids=midMap.get(exports.MediaType.VideoMain);var audioContentMids=midMap.get(exports.MediaType.AudioSlides);var videoContentMids=midMap.get(exports.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===exports.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
3788
+ 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
3789
+ // added to it. This is a useful default which helps finding memory leaks.
3790
+ 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
3791
+ // that to be increased. Set to zero for unlimited.
3792
+ 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.
3793
+ 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
3794
+ // up in Node's output if this results in an unhandled exception.
3795
+ throw er;// Unhandled 'error' event
3796
+ }// At least give some kind of context to the user
3797
+ var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
3798
+ }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
3799
+ // adding it to the listeners, first emit "newListener".
3800
+ if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
3801
+ // this._events to be assigned to a new object
3802
+ events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
3803
+ existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
3804
+ existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
3805
+ }else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
3806
+ 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
3807
+ // eslint-disable-next-line no-restricted-syntax
3808
+ 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.
3809
+ 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
3810
+ 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
3811
+ 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
3812
+ 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
3813
+ // EventEmitters, we do not listen for `error` events here.
3814
+ emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3815
+ // have to do it manually.
3816
+ 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);}}}exports.ReceiveSlotEvents = void 0;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["MediaEnded"]="media-ended";ReceiveSlotEvents["SourceUpdate"]="source-update";})(exports.ReceiveSlotEvents||(exports.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(exports.StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);this._stream.on(exports.StreamEventNames.Ended,this.handleStreamEnded);}handleStreamMuteStateChange(muted){if(muted){this.emit(exports.ReceiveSlotEvents.MediaStopped);}else {this.emit(exports.ReceiveSlotEvents.MediaStarted);}}handleStreamEnded(){this.emit(exports.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(exports.ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.off(exports.StreamEventNames.MuteStateChange,this.handleStreamMuteStateChange);this._stream.off(exports.StreamEventNames.Ended,this.handleStreamEnded);}get id(){return this._idGetter();}get stream(){return this._stream.outputStream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=exports.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
3692
3817
  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
3693
3818
  // added to it. This is a useful default which helps finding memory leaks.
3694
3819
  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
@@ -3717,7 +3842,7 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
3717
3842
  // EventEmitters, we do not listen for `error` events here.
3718
3843
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
3719
3844
  // have to do it manually.
3720
- 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);}}}exports.ReceiveSlotEvents = void 0;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(exports.ReceiveSlotEvents||(exports.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(exports.ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(exports.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(exports.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=exports.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.Audio.toLowerCase()){mediaFamily=MediaFamily.Audio;}else if(mLine.type.toLowerCase()===MediaFamily.Video.toLowerCase()){mediaFamily=MediaFamily.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.Slides;}else {mediaContent=MediaContent.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.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 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.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(exports.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(exports.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.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(_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.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$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();}/**
3845
+ 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(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.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(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.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)===exports.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===exports.MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===exports.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===exports.MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===exports.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();}/**
3721
3846
  * Creates a continuation function with some arguments already applied.
3722
3847
  *
3723
3848
  * Useful as a shorthand when combined with other control flow functions. Any
@@ -3761,7 +3886,7 @@ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});
3761
3886
  * one
3762
3887
  * two
3763
3888
  * three
3764
- */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);/**
3889
+ */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);/**
3765
3890
  * Take a sync function and make it async, passing its return value to a
3766
3891
  * callback. This is useful for plugging sync functions into a waterfall,
3767
3892
  * series, or other async functions. Any arguments passed to the generated
@@ -3816,15 +3941,15 @@ if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});
3816
3941
  * }));
3817
3942
  *
3818
3943
  * q.push(files);
3819
- */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
3944
+ */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
3820
3945
  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.
3821
3946
  // only return a promise if a callback is omitted
3822
- 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.
3947
+ 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.
3823
3948
  // See #1064, #1293
3824
- 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
3949
+ 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
3825
3950
  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')
3826
3951
  if(running>=limit||awaiting||done)return;//console.log('replenish awaiting')
3827
- awaiting=true;generator.next().then(_ref6=>{var{value,done:iterDone}=_ref6;//console.log('got value', value)
3952
+ awaiting=true;generator.next().then(_ref7=>{var{value,done:iterDone}=_ref7;//console.log('got value', value)
3828
3953
  if(canceled||done)return;awaiting=false;if(iterDone){done=true;if(running<=0){//console.log('done nextCb')
3829
3954
  callback(null);}return;}running++;iteratee(value,idx,iterateeCallback);idx++;replenish();}).catch(handleError);}function iterateeCallback(err,result){//console.log('iterateeCallback')
3830
3955
  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')
@@ -4113,9 +4238,9 @@ function eachOfGeneric(coll,iteratee,callback){return eachOfLimit$2(coll,Infinit
4113
4238
  // used for queues. This implementation assumes that the node provided by the user can be modified
4114
4239
  // to adjust the next and last properties. We implement only the minimal functionality
4115
4240
  // for queue support.
4116
- 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
4241
+ 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
4117
4242
  // deal with it
4118
- 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
4243
+ 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
4119
4244
  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
4120
4245
  // when callbacks resolve synchronously (#1267).
4121
4246
  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
@@ -4273,7 +4398,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4273
4398
  * containing the concatenated results of the `iteratee` function. Invoked with
4274
4399
  * (err, results).
4275
4400
  * @returns A Promise, if no callback is passed
4276
- */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);/**
4401
+ */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);/**
4277
4402
  * Applies `iteratee` to each item in `coll`, concatenating the results. Returns
4278
4403
  * the concatenated list. The `iteratee`s are called in parallel, and the
4279
4404
  * results are concatenated as they return. The results array will be returned in
@@ -4519,7 +4644,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4519
4644
  * `callback` will be passed an error and any arguments passed to the final
4520
4645
  * `iteratee`'s callback. Invoked with (err, [results]);
4521
4646
  * @returns {Promise} a promise, if no callback is passed
4522
- */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);}/**
4647
+ */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);}/**
4523
4648
  * Applies the function `iteratee` to each item in `coll`, in parallel.
4524
4649
  * The `iteratee` is called with an item from the list, and a callback for when
4525
4650
  * it has finished. If the `iteratee` passes an error to its `callback`, the
@@ -4693,7 +4818,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
4693
4818
  * // this will defer sometimesAsync's callback if necessary,
4694
4819
  * // preventing stack overflows
4695
4820
  * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);
4696
- */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;};}/**
4821
+ */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;};}/**
4697
4822
  * Returns `true` if every element in `coll` satisfies an async test. If any
4698
4823
  * iteratee call returns `false`, the main `callback` is immediately called.
4699
4824
  *
@@ -4999,7 +5124,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
4999
5124
  * of each key from `obj`, with each transformed value on the right-hand side.
5000
5125
  * Invoked with (err, result).
5001
5126
  * @returns {Promise} a promise, if no callback is passed
5002
- */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);/**
5127
+ */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);/**
5003
5128
  * A queue of tasks for the worker function to complete.
5004
5129
  * @typedef {Iterable} QueueObject
5005
5130
  * @memberOf module:ControlFlow
@@ -5593,7 +5718,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5593
5718
  * Now do something with the data.
5594
5719
  * });
5595
5720
  *
5596
- */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);/**
5721
+ */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);/**
5597
5722
  * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when
5598
5723
  * stopped, or an error occurs.
5599
5724
  *
@@ -5626,7 +5751,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5626
5751
  * // 5 seconds have passed, n = 5
5627
5752
  * }
5628
5753
  * );
5629
- */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);/**
5754
+ */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);/**
5630
5755
  * Runs the `tasks` array of functions in series, each passing their results to
5631
5756
  * the next in the array. However, if any of the `tasks` pass an error to their
5632
5757
  * own callback, the next function is not executed, and the main `callback` is
@@ -5682,56 +5807,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5682
5807
  * // arg1 now equals 'three'
5683
5808
  * callback(null, 'done');
5684
5809
  * }
5685
- */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:{}};/*!
5686
- * js-logger - http://github.com/jonnyreeves/js-logger
5687
- * Jonny Reeves, http://jonnyreeves.co.uk/
5688
- * js-logger may be freely distributed under the MIT license.
5689
- */(function(module){(function(global){// Top level module for the global, static logger instance.
5690
- var Logger={};// For those that are at home that are keeping score.
5691
- Logger.VERSION="1.6.1";// Function which handles all incoming log messages.
5692
- var logHandler;// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
5693
- var contextualLoggersByNameMap={};// Polyfill for ES5's Function.bind.
5694
- 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.
5695
- 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.
5696
- var defineLogLevel=function defineLogLevel(value,name){return {value:value,name:name};};// Predefined logging levels.
5697
- 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
5698
- // of each other.
5699
- var ContextualLogger=function ContextualLogger(defaultContext){this.context=defaultContext;this.setLevel(defaultContext.filterLevel);this.log=this.info;// Convenience alias.
5700
- };ContextualLogger.prototype={// Changes the current logging level for the logging instance.
5701
- setLevel:function setLevel(newLevel){// Ensure the supplied Level object looks valid.
5702
- if(newLevel&&"value"in newLevel){this.context.filterLevel=newLevel;}},// Gets the current logging level for the logging instance
5703
- getLevel:function getLevel(){return this.context.filterLevel;},// Is the logger configured to output messages at the supplied level?
5704
- 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.
5705
- 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.
5706
- var globalLogger=new ContextualLogger({filterLevel:Logger.OFF});// Configure the global Logger instance.
5707
- (function(){// Shortcut for optimisers.
5708
- 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!
5709
- L.log=L.info;})();// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
5710
- // object with the supplied log messages and the second being a context object which contains a hash of stateful
5711
- // parameters which the logging function can consume.
5712
- Logger.setHandler=function(func){logHandler=func;};// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
5713
- // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
5714
- Logger.setLevel=function(level){// Set the globalLogger's level.
5715
- globalLogger.setLevel(level);// Apply this level to all registered contextual loggers.
5716
- for(var key in contextualLoggersByNameMap){if(contextualLoggersByNameMap.hasOwnProperty(key)){contextualLoggersByNameMap[key].setLevel(level);}}};// Gets the global logging filter level
5717
- Logger.getLevel=function(){return globalLogger.getLevel();};// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
5718
- // default context and log handler.
5719
- Logger.get=function(name){// All logger instances are cached so they can be configured ahead of use.
5720
- 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
5721
- // write to the window's console object (if present); the optional options object can be used to customise the
5722
- // formatter used to format each log message.
5723
- 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.
5724
- if(context.name){messages.unshift("["+context.name+"]");}};// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
5725
- // that don't offer a native console method.
5726
- var timerStartTimeByLabelMap={};// Support for IE8+ (and other, slightly more sane environments)
5727
- var invokeConsoleMethod=function invokeConsoleMethod(hdlr,messages){Function.prototype.apply.call(hdlr,console,messages);};// Check for the presence of a logger.
5728
- if(typeof console==="undefined"){return function(){/* no console */};}return function(messages,context){// Convert arguments object to Array.
5729
- 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.
5730
- 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
5731
- // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
5732
- 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.
5733
- Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
5734
- 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.VideoMain,MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.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===exports.MediaStreamTrackKind.Video){return MediaFamily.Video;}return MediaFamily.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.Main);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType.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.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.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.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.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.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.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.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.Slides;}else {mediaContent=MediaContent.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.Slides;}else {mediaContent=MediaContent.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.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.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.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily.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.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);}}
5810
+ */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 [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.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(exports.MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Slides);this.createSendTransceiver(exports.MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioMain,mainSceneId);this.createSendTransceiver(exports.MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(exports.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===exports.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)===exports.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)===exports.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)===exports.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===exports.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)!==exports.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)===exports.MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===exports.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===exports.MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===exports.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(exports.MediaType.AudioMain),audioSlides:this.getCsiByMediaType(exports.MediaType.AudioSlides),videoMain:this.getCsiByMediaType(exports.MediaType.VideoMain),videoSlides:this.getCsiByMediaType(exports.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);}}
5735
5811
 
5736
5812
  var defaultLogger = {
5737
5813
  info: function info() {
@@ -6697,7 +6773,7 @@ class ApplicationMediaDescription extends MediaDescription {
6697
6773
  return true;
6698
6774
  }
6699
6775
  }
6700
- class CodecInfo$1 {
6776
+ class CodecInfo {
6701
6777
  constructor(pt) {
6702
6778
  this.fmtParams = new Map();
6703
6779
  this.feedback = [];
@@ -6751,7 +6827,7 @@ class AvMediaDescription extends MediaDescription {
6751
6827
  this.pts = mediaLine.formats.map(fmt => {
6752
6828
  return parseInt(fmt, 10);
6753
6829
  });
6754
- this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo$1(pt)));
6830
+ this.pts.forEach(pt => this.codecs.set(pt, new CodecInfo(pt)));
6755
6831
  }
6756
6832
  toLines() {
6757
6833
  var lines = [];
@@ -7290,364 +7366,6 @@ function mungeRemoteSdp(config, sdp) {
7290
7366
  return parsedSdp.toString();
7291
7367
  }
7292
7368
 
7293
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
7294
- var logger = {
7295
- exports: {}
7296
- };
7297
-
7298
- /*!
7299
- * js-logger - http://github.com/jonnyreeves/js-logger
7300
- * Jonny Reeves, http://jonnyreeves.co.uk/
7301
- * js-logger may be freely distributed under the MIT license.
7302
- */
7303
-
7304
- (function (module) {
7305
- (function (global) {
7306
- // Top level module for the global, static logger instance.
7307
- var Logger = {};
7308
-
7309
- // For those that are at home that are keeping score.
7310
- Logger.VERSION = "1.6.1";
7311
-
7312
- // Function which handles all incoming log messages.
7313
- var logHandler;
7314
-
7315
- // Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.
7316
- var contextualLoggersByNameMap = {};
7317
-
7318
- // Polyfill for ES5's Function.bind.
7319
- var bind = function bind(scope, func) {
7320
- return function () {
7321
- return func.apply(scope, arguments);
7322
- };
7323
- };
7324
-
7325
- // Super exciting object merger-matron 9000 adding another 100 bytes to your download.
7326
- var merge = function merge() {
7327
- var args = arguments,
7328
- target = args[0],
7329
- key,
7330
- i;
7331
- for (i = 1; i < args.length; i++) {
7332
- for (key in args[i]) {
7333
- if (!(key in target) && args[i].hasOwnProperty(key)) {
7334
- target[key] = args[i][key];
7335
- }
7336
- }
7337
- }
7338
- return target;
7339
- };
7340
-
7341
- // Helper to define a logging level object; helps with optimisation.
7342
- var defineLogLevel = function defineLogLevel(value, name) {
7343
- return {
7344
- value: value,
7345
- name: name
7346
- };
7347
- };
7348
-
7349
- // Predefined logging levels.
7350
- Logger.TRACE = defineLogLevel(1, 'TRACE');
7351
- Logger.DEBUG = defineLogLevel(2, 'DEBUG');
7352
- Logger.INFO = defineLogLevel(3, 'INFO');
7353
- Logger.TIME = defineLogLevel(4, 'TIME');
7354
- Logger.WARN = defineLogLevel(5, 'WARN');
7355
- Logger.ERROR = defineLogLevel(8, 'ERROR');
7356
- Logger.OFF = defineLogLevel(99, 'OFF');
7357
-
7358
- // Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently
7359
- // of each other.
7360
- var ContextualLogger = function ContextualLogger(defaultContext) {
7361
- this.context = defaultContext;
7362
- this.setLevel(defaultContext.filterLevel);
7363
- this.log = this.info; // Convenience alias.
7364
- };
7365
-
7366
- ContextualLogger.prototype = {
7367
- // Changes the current logging level for the logging instance.
7368
- setLevel: function setLevel(newLevel) {
7369
- // Ensure the supplied Level object looks valid.
7370
- if (newLevel && "value" in newLevel) {
7371
- this.context.filterLevel = newLevel;
7372
- }
7373
- },
7374
- // Gets the current logging level for the logging instance
7375
- getLevel: function getLevel() {
7376
- return this.context.filterLevel;
7377
- },
7378
- // Is the logger configured to output messages at the supplied level?
7379
- enabledFor: function enabledFor(lvl) {
7380
- var filterLevel = this.context.filterLevel;
7381
- return lvl.value >= filterLevel.value;
7382
- },
7383
- trace: function trace() {
7384
- this.invoke(Logger.TRACE, arguments);
7385
- },
7386
- debug: function debug() {
7387
- this.invoke(Logger.DEBUG, arguments);
7388
- },
7389
- info: function info() {
7390
- this.invoke(Logger.INFO, arguments);
7391
- },
7392
- warn: function warn() {
7393
- this.invoke(Logger.WARN, arguments);
7394
- },
7395
- error: function error() {
7396
- this.invoke(Logger.ERROR, arguments);
7397
- },
7398
- time: function time(label) {
7399
- if (typeof label === 'string' && label.length > 0) {
7400
- this.invoke(Logger.TIME, [label, 'start']);
7401
- }
7402
- },
7403
- timeEnd: function timeEnd(label) {
7404
- if (typeof label === 'string' && label.length > 0) {
7405
- this.invoke(Logger.TIME, [label, 'end']);
7406
- }
7407
- },
7408
- // Invokes the logger callback if it's not being filtered.
7409
- invoke: function invoke(level, msgArgs) {
7410
- if (logHandler && this.enabledFor(level)) {
7411
- logHandler(msgArgs, merge({
7412
- level: level
7413
- }, this.context));
7414
- }
7415
- }
7416
- };
7417
-
7418
- // Protected instance which all calls to the to level `Logger` module will be routed through.
7419
- var globalLogger = new ContextualLogger({
7420
- filterLevel: Logger.OFF
7421
- });
7422
-
7423
- // Configure the global Logger instance.
7424
- (function () {
7425
- // Shortcut for optimisers.
7426
- var L = Logger;
7427
- L.enabledFor = bind(globalLogger, globalLogger.enabledFor);
7428
- L.trace = bind(globalLogger, globalLogger.trace);
7429
- L.debug = bind(globalLogger, globalLogger.debug);
7430
- L.time = bind(globalLogger, globalLogger.time);
7431
- L.timeEnd = bind(globalLogger, globalLogger.timeEnd);
7432
- L.info = bind(globalLogger, globalLogger.info);
7433
- L.warn = bind(globalLogger, globalLogger.warn);
7434
- L.error = bind(globalLogger, globalLogger.error);
7435
-
7436
- // Don't forget the convenience alias!
7437
- L.log = L.info;
7438
- })();
7439
-
7440
- // Set the global logging handler. The supplied function should expect two arguments, the first being an arguments
7441
- // object with the supplied log messages and the second being a context object which contains a hash of stateful
7442
- // parameters which the logging function can consume.
7443
- Logger.setHandler = function (func) {
7444
- logHandler = func;
7445
- };
7446
-
7447
- // Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.
7448
- // (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).
7449
- Logger.setLevel = function (level) {
7450
- // Set the globalLogger's level.
7451
- globalLogger.setLevel(level);
7452
-
7453
- // Apply this level to all registered contextual loggers.
7454
- for (var key in contextualLoggersByNameMap) {
7455
- if (contextualLoggersByNameMap.hasOwnProperty(key)) {
7456
- contextualLoggersByNameMap[key].setLevel(level);
7457
- }
7458
- }
7459
- };
7460
-
7461
- // Gets the global logging filter level
7462
- Logger.getLevel = function () {
7463
- return globalLogger.getLevel();
7464
- };
7465
-
7466
- // Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,
7467
- // default context and log handler.
7468
- Logger.get = function (name) {
7469
- // All logger instances are cached so they can be configured ahead of use.
7470
- return contextualLoggersByNameMap[name] || (contextualLoggersByNameMap[name] = new ContextualLogger(merge({
7471
- name: name
7472
- }, globalLogger.context)));
7473
- };
7474
-
7475
- // CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will
7476
- // write to the window's console object (if present); the optional options object can be used to customise the
7477
- // formatter used to format each log message.
7478
- Logger.createDefaultHandler = function (options) {
7479
- options = options || {};
7480
- options.formatter = options.formatter || function defaultMessageFormatter(messages, context) {
7481
- // Prepend the logger's name to the log message for easy identification.
7482
- if (context.name) {
7483
- messages.unshift("[" + context.name + "]");
7484
- }
7485
- };
7486
-
7487
- // Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments
7488
- // that don't offer a native console method.
7489
- var timerStartTimeByLabelMap = {};
7490
-
7491
- // Support for IE8+ (and other, slightly more sane environments)
7492
- var invokeConsoleMethod = function invokeConsoleMethod(hdlr, messages) {
7493
- Function.prototype.apply.call(hdlr, console, messages);
7494
- };
7495
-
7496
- // Check for the presence of a logger.
7497
- if (typeof console === "undefined") {
7498
- return function () {/* no console */};
7499
- }
7500
- return function (messages, context) {
7501
- // Convert arguments object to Array.
7502
- messages = Array.prototype.slice.call(messages);
7503
- var hdlr = console.log;
7504
- var timerLabel;
7505
- if (context.level === Logger.TIME) {
7506
- timerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];
7507
- if (messages[1] === 'start') {
7508
- if (console.time) {
7509
- console.time(timerLabel);
7510
- } else {
7511
- timerStartTimeByLabelMap[timerLabel] = new Date().getTime();
7512
- }
7513
- } else {
7514
- if (console.timeEnd) {
7515
- console.timeEnd(timerLabel);
7516
- } else {
7517
- invokeConsoleMethod(hdlr, [timerLabel + ': ' + (new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms']);
7518
- }
7519
- }
7520
- } else {
7521
- // Delegate through to custom warn/error loggers if present on the console.
7522
- if (context.level === Logger.WARN && console.warn) {
7523
- hdlr = console.warn;
7524
- } else if (context.level === Logger.ERROR && console.error) {
7525
- hdlr = console.error;
7526
- } else if (context.level === Logger.INFO && console.info) {
7527
- hdlr = console.info;
7528
- } else if (context.level === Logger.DEBUG && console.debug) {
7529
- hdlr = console.debug;
7530
- } else if (context.level === Logger.TRACE && console.trace) {
7531
- hdlr = console.trace;
7532
- }
7533
- options.formatter(messages, context);
7534
- invokeConsoleMethod(hdlr, messages);
7535
- }
7536
- };
7537
- };
7538
-
7539
- // Configure and example a Default implementation which writes to the `window.console` (if present). The
7540
- // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
7541
- Logger.useDefaults = function (options) {
7542
- Logger.setLevel(options && options.defaultLevel || Logger.DEBUG);
7543
- Logger.setHandler(Logger.createDefaultHandler(options));
7544
- };
7545
-
7546
- // Createa an alias to useDefaults to avoid reaking a react-hooks rule.
7547
- Logger.setDefaults = Logger.useDefaults;
7548
-
7549
- // Export to popular environments boilerplate.
7550
- if (module.exports) {
7551
- module.exports = Logger;
7552
- } else {
7553
- Logger._prevLogger = global.Logger;
7554
- Logger.noConflict = function () {
7555
- global.Logger = Logger._prevLogger;
7556
- return Logger;
7557
- };
7558
- global.Logger = Logger;
7559
- }
7560
- })(commonjsGlobal);
7561
- })(logger);
7562
- var Logger = logger.exports;
7563
- Logger.useDefaults({
7564
- defaultLevel: Logger.DEBUG,
7565
- formatter: (messages, context) => {
7566
- messages.unshift("[".concat(context.name, "] "));
7567
- }
7568
- });
7569
- class ActiveSpeakerInfo {
7570
- constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo, namedMediaGroups) {
7571
- this.priority = priority;
7572
- this.crossPriorityDuplication = crossPriorityDuplication;
7573
- this.crossPolicyDuplication = crossPolicyDuplication;
7574
- this.preferLiveVideo = preferLiveVideo;
7575
- this.namedMediaGroups = namedMediaGroups;
7576
- }
7577
- toString() {
7578
- return "ActiveSpeakerInfo(priority=".concat(this.priority, ", crossPriorityDuplication=").concat(this.crossPriorityDuplication, ", crossPolicyDuplication=").concat(this.crossPolicyDuplication, ", preferLiveVideo=").concat(this.preferLiveVideo, "), namedMediaGroups=").concat(this.namedMediaGroups);
7579
- }
7580
- }
7581
- var HomerMsgType;
7582
- (function (HomerMsgType) {
7583
- HomerMsgType["Multistream"] = "multistream";
7584
- })(HomerMsgType || (HomerMsgType = {}));
7585
- var JmpMsgType;
7586
- (function (JmpMsgType) {
7587
- JmpMsgType["MediaRequest"] = "mediaRequest";
7588
- JmpMsgType["MediaRequestAck"] = "mediaRequestAck";
7589
- JmpMsgType["MediaRequestStatus"] = "mediaRequestStatus";
7590
- JmpMsgType["MediaRequestStatusAck"] = "mediaRequestStatusAck";
7591
- JmpMsgType["SourceAdvertisement"] = "sourceAdvertisement";
7592
- JmpMsgType["SourceAdvertisementAck"] = "sourceAdvertisementAck";
7593
- JmpMsgType["ActiveSpeakerNotification"] = "activeSpeakerNotification";
7594
- })(JmpMsgType || (JmpMsgType = {}));
7595
- class CodecInfo {
7596
- constructor(payloadType, h264) {
7597
- this.payloadType = payloadType;
7598
- this.h264 = h264;
7599
- }
7600
- }
7601
- class H264Codec {
7602
- constructor(maxFs, maxFps, maxMbps, maxWidth, maxHeight) {
7603
- this.maxFs = maxFs;
7604
- this.maxFps = maxFps;
7605
- this.maxMbps = maxMbps;
7606
- this.maxWidth = maxWidth;
7607
- this.maxHeight = maxHeight;
7608
- }
7609
- }
7610
- class ReceiverSelectedInfo {
7611
- constructor(csi) {
7612
- this.csi = csi;
7613
- }
7614
- toString() {
7615
- return "ReceiverSelectedInfo(csi=".concat(this.csi, ")");
7616
- }
7617
- }
7618
- exports.MediaFamily = void 0;
7619
- (function (MediaFamily) {
7620
- MediaFamily["Audio"] = "AUDIO";
7621
- MediaFamily["Video"] = "VIDEO";
7622
- })(exports.MediaFamily || (exports.MediaFamily = {}));
7623
- exports.MediaContent = void 0;
7624
- (function (MediaContent) {
7625
- MediaContent["Main"] = "MAIN";
7626
- MediaContent["Slides"] = "SLIDES";
7627
- })(exports.MediaContent || (exports.MediaContent = {}));
7628
- exports.Policy = void 0;
7629
- (function (Policy) {
7630
- Policy["ActiveSpeaker"] = "active-speaker";
7631
- Policy["ReceiverSelected"] = "receiver-selected";
7632
- })(exports.Policy || (exports.Policy = {}));
7633
- exports.MediaType = void 0;
7634
- (function (MediaType) {
7635
- MediaType["VideoMain"] = "VIDEO-MAIN";
7636
- MediaType["VideoSlides"] = "VIDEO-SLIDES";
7637
- MediaType["AudioMain"] = "AUDIO-MAIN";
7638
- MediaType["AudioSlides"] = "AUDIO-SLIDES";
7639
- })(exports.MediaType || (exports.MediaType = {}));
7640
- function getMediaFamily(mediaType) {
7641
- return [exports.MediaType.VideoMain, exports.MediaType.VideoSlides].includes(mediaType) ? exports.MediaFamily.Video : exports.MediaFamily.Audio;
7642
- }
7643
- var JmpSessionEvents;
7644
- (function (JmpSessionEvents) {
7645
- JmpSessionEvents["ActiveSpeaker"] = "active-speaker";
7646
- JmpSessionEvents["MediaRequestReceived"] = "media-request-received";
7647
- JmpSessionEvents["MediaRequestStatusReceived"] = "media-request-status-received";
7648
- JmpSessionEvents["SourceAdvertisementReceived"] = "source-advertisement-received";
7649
- })(JmpSessionEvents || (JmpSessionEvents = {}));
7650
-
7651
7369
  exports.Event = void 0;
7652
7370
  (function (Event) {
7653
7371
  Event["CONNECTION_STATE_CHANGED"] = "connectionState:changed";
@@ -7692,7 +7410,7 @@ var localTrackTypes = [{
7692
7410
  type: 'screenShareVideo',
7693
7411
  kind: 'video'
7694
7412
  }];
7695
- class MediaConnection extends EventEmitter$3 {
7413
+ class MediaConnection extends EventEmitter$5 {
7696
7414
  constructor(mediaConnectionConfig, options, debugId) {
7697
7415
  super();
7698
7416
  _defineProperty__default["default"](this, "id", void 0);
@@ -15568,7 +15286,7 @@ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if
15568
15286
  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__default["default"](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; }
15569
15287
  var WEB_TIEBREAKER_VALUE = 0xfffffffe;
15570
15288
  var MAX_RETRIES = 2;
15571
- class Roap extends EventEmitter$3 {
15289
+ class Roap extends EventEmitter$5 {
15572
15290
  constructor(createLocalOfferCallback, handleRemoteOfferCallback, handleRemoteAnswerCallback, debugId, initialSeq) {
15573
15291
  super();
15574
15292
  _defineProperty__default["default"](this, "id", void 0);
@@ -16084,7 +15802,7 @@ class Roap extends EventEmitter$3 {
16084
15802
 
16085
15803
  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; }
16086
15804
  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__default["default"](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; }
16087
- class RoapMediaConnection extends EventEmitter$3 {
15805
+ class RoapMediaConnection extends EventEmitter$5 {
16088
15806
  constructor(mediaConnectionConfig, options, debugId) {
16089
15807
  super();
16090
15808
  _defineProperty__default["default"](this, "id", void 0);
@@ -16247,7 +15965,7 @@ class RoapMediaConnection extends EventEmitter$3 {
16247
15965
 
16248
15966
  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; }
16249
15967
  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__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
16250
- class MultistreamRoapMediaConnection extends EventEmitter$4 {
15968
+ class MultistreamRoapMediaConnection extends EventEmitter$6 {
16251
15969
  constructor(mediaConnectionConfig, debugId) {
16252
15970
  var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
16253
15971
  var closeCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
@@ -16273,14 +15991,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16273
15991
  getLogger().error("".concat(this.id, ":").concat(action, " ").concat(description, " ").concat(getErrorDescription(error)));
16274
15992
  }
16275
15993
  createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
16276
- this.log('createMultistreamConnection()', 'creating MultistreamConnection with floorControlledPresentation: true');
16277
- var multistreamConnection = new MultistreamConnection(_objectSpread(_objectSpread({}, mediaConnectionConfig), {}, {
16278
- floorControlledPresentation: true
16279
- }));
16280
- multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, data => {
16281
- this.emit(exports.Event.ACTIVE_SPEAKERS_CHANGED, {
16282
- csis: data.csis
16283
- });
15994
+ this.log('createMultistreamConnection()', 'called');
15995
+ var multistreamConnection = new MultistreamConnection(_objectSpread({}, mediaConnectionConfig));
15996
+ multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
15997
+ this.emit(exports.Event.ACTIVE_SPEAKERS_CHANGED, csis);
16284
15998
  });
16285
15999
  multistreamConnection.on(MultistreamConnectionEventNames.AudioSourceCountUpdate, (numTotalSources, numLiveSources, mediaContent) => {
16286
16000
  this.emit(exports.Event.AUDIO_SOURCES_COUNT_CHANGED, numTotalSources, numLiveSources, mediaContent);
@@ -16360,21 +16074,10 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16360
16074
  }
16361
16075
  this.roap.roapMessageReceived(roapMessage);
16362
16076
  }
16363
- enableMultistreamAudio(enabled) {
16364
- this.log('enableMultistreamAudio()', 'called');
16365
- var sdpNegotiationNeeded = this.multistreamConnection.enableMultistreamAudio(enabled);
16366
- if (sdpNegotiationNeeded) {
16367
- return this.roap.initiateOffer();
16368
- }
16369
- return Promise.resolve();
16370
- }
16371
- publishTrack(track) {
16372
- this.log('publishTrack()', 'called');
16373
- return this.multistreamConnection.publishTrack(track);
16374
- }
16375
- unpublishTrack(track) {
16376
- this.log('unpublishTrack()', 'called');
16377
- return this.multistreamConnection.unpublishTrack(track);
16077
+ createSendSlot(mediaType) {
16078
+ var active = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
16079
+ this.log('createSendSlot()', "called with mediaType=".concat(mediaType, ", active=").concat(active));
16080
+ return this.multistreamConnection.createSendSlot(mediaType, active);
16378
16081
  }
16379
16082
  createReceiveSlot(mediaType) {
16380
16083
  this.log('createReceiveSlot()', "called");
@@ -16384,14 +16087,6 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
16384
16087
  this.log('requestMedia()', "called");
16385
16088
  return this.multistreamConnection.requestMedia(mediaType, streamRequests);
16386
16089
  }
16387
- setCodecParameters(mediaType, parameters) {
16388
- this.log('setCodecParameters()', "called: mediaType=".concat(mediaType, ", parameters=").concat(JSON.stringify(parameters)));
16389
- return this.multistreamConnection.setCodecParameters(mediaType, parameters);
16390
- }
16391
- deleteCodecParameters(mediaType, parameters) {
16392
- this.log('deleteCodecParameters()', "called: mediaType=".concat(mediaType, ", parameters=").concat(JSON.stringify(parameters)));
16393
- return this.multistreamConnection.deleteCodecParameters(mediaType, parameters);
16394
- }
16395
16090
  createLocalOffer() {
16396
16091
  return this.multistreamConnection.createOffer().then(result => {
16397
16092
  if (result.sdp) {
@@ -16432,7 +16127,7 @@ var Errors = Error$1;
16432
16127
 
16433
16128
  function isBrowserSupported() {
16434
16129
  var isSupported = false;
16435
- logger$5.info({
16130
+ logger$4.info({
16436
16131
  mediaType: MEDIA,
16437
16132
  action: 'isBrowserSupported()',
16438
16133
  description: 'Checking is current browser supported by webrtc'
@@ -16461,25 +16156,29 @@ var Media = {
16461
16156
  };
16462
16157
 
16463
16158
  exports.ActiveSpeakerInfo = ActiveSpeakerInfo;
16464
- exports.CodecInfo = CodecInfo;
16159
+ exports.CodecInfo = CodecInfo$1;
16465
16160
  exports.Errors = Errors;
16466
16161
  exports.H264Codec = H264Codec;
16467
- exports.LocalCameraTrack = LocalCameraTrack;
16468
- exports.LocalDisplayTrack = LocalDisplayTrack;
16469
- exports.LocalMicrophoneTrack = LocalMicrophoneTrack;
16470
- exports.LocalTrack = LocalTrack;
16162
+ exports.LocalCameraStream = LocalCameraStream;
16163
+ exports.LocalDisplayStream = LocalDisplayStream;
16164
+ exports.LocalMicrophoneStream = LocalMicrophoneStream;
16165
+ exports.LocalStream = LocalStream;
16166
+ exports.LocalSystemAudioStream = LocalSystemAudioStream;
16471
16167
  exports.Media = Media;
16472
16168
  exports.MultistreamRoapMediaConnection = MultistreamRoapMediaConnection;
16473
16169
  exports.PeerConnection = PeerConnection;
16474
16170
  exports.ReceiveSlot = ReceiveSlot;
16475
16171
  exports.ReceiverSelectedInfo = ReceiverSelectedInfo;
16172
+ exports.RemoteStream = RemoteStream;
16476
16173
  exports.RoapMediaConnection = RoapMediaConnection;
16174
+ exports.SendSlot = SendSlot;
16477
16175
  exports.StreamRequest = StreamRequest;
16478
16176
  exports.WcmeError = WcmeError;
16479
16177
  exports.configureWcmeLogger = configureWcmeLogger;
16480
- exports.createCameraTrack = createCameraTrack;
16481
- exports.createDisplayTrack = createDisplayTrack;
16482
- exports.createMicrophoneTrack = createMicrophoneTrack;
16178
+ exports.createCameraStream = createCameraStream;
16179
+ exports.createDisplayStream = createDisplayStream;
16180
+ exports.createDisplayStreamWithAudio = createDisplayStreamWithAudio;
16181
+ exports.createMicrophoneStream = createMicrophoneStream;
16483
16182
  exports.getAudioInputDevices = getAudioInputDevices;
16484
16183
  exports.getAudioOutputDevices = getAudioOutputDevices;
16485
16184
  exports.getDevices = getDevices;