@webex/internal-media-core 2.6.0 → 2.7.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
@@ -1739,117 +1739,117 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
1739
1739
  // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
1740
1740
  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.
1741
1741
  Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
1742
- 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$1);})(logger$1$1);var Logger$2=logger$1$1.exports;var DEFAULT_LOGGER_NAME$1='webrtc-core';var logger$3=Logger$2.get(DEFAULT_LOGGER_NAME$1);Logger$2.useDefaults({defaultLevel:Logger$2.DEBUG,/* eslint-disable-next-line jsdoc/require-jsdoc */formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"]"));}});var DeviceKind$1;(function(DeviceKind){DeviceKind["AudioInput"]="audioinput";DeviceKind["AudioOutput"]="audiooutput";DeviceKind["VideoInput"]="videoinput";})(DeviceKind$1||(DeviceKind$1={}));/**
1743
- * Prompts the user for permission to use a media input which produces a MediaStream with tracks
1744
- * containing the requested types of media.
1745
- *
1746
- * @param constraints - A MediaStreamConstraints object specifying the types of media to request,
1747
- * along with any requirements for each type.
1748
- * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested
1749
- * media has successfully been obtained.
1750
- */function getUserMedia(constraints){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.getUserMedia(constraints);});}/**
1751
- * Prompts the user for permission to use a user's display media and audio. If a video track is
1752
- * absent from the constraints argument, one will still be provided.
1753
- *
1754
- * @param constraints - A MediaStreamConstraints object specifying the types of media to request,
1755
- * along with any requirements for each type.
1756
- * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested
1757
- * media has successfully been obtained.
1758
- */function getDisplayMedia(constraints){return navigator.mediaDevices.getDisplayMedia(constraints);}/**
1759
- * Requests a list of the available media input and output devices, such as microphones, cameras,
1760
- * headsets, and so forth.
1761
- *
1762
- * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is
1763
- * fulfilled.
1764
- */function enumerateDevices(){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.enumerateDevices();});}/**
1765
- * Adds the callback handler to be notified of a media device change (for example, a headset is
1766
- * unplugged from the user's computer).
1767
- *
1768
- * @param handler - The callback function to execute.
1769
- */function setOnDeviceChangeHandler$1(handler){navigator.mediaDevices.ondevicechange=handler;}/**
1770
- * Checks permissions using the navigator's permissions api.
1771
- *
1772
- * @param deviceKinds - Array of DeviceKind items.
1773
- * @throws An error if camera or microphone aren't available options for query() (Firefox), or if
1774
- * navigator.permissions is undefined (Safari and others).
1775
- * @returns Array of Permission Status objects.
1776
- */function checkNavigatorPermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){var permissionRequests=[];if(deviceKinds.includes(DeviceKind$1.VideoInput)){permissionRequests.push(navigator.permissions.query({name:'camera'}));}if(deviceKinds.includes(DeviceKind$1.AudioInput)){permissionRequests.push(navigator.permissions.query({name:'microphone'}));}return Promise.all(permissionRequests);});}/**
1777
- * Check to see if the user has granted the application permission to use their devices.
1778
- *
1779
- * @param deviceKinds - Array of DeviceKind items.
1780
- * @returns True if device permissions exist, false if otherwise.
1742
+ 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$1);})(logger$1$1);var Logger$2=logger$1$1.exports;var DEFAULT_LOGGER_NAME$1='webrtc-core';var logger$3=Logger$2.get(DEFAULT_LOGGER_NAME$1);Logger$2.useDefaults({defaultLevel:Logger$2.DEBUG,/* eslint-disable-next-line jsdoc/require-jsdoc */formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"]"));}});var DeviceKind$1;(function(DeviceKind){DeviceKind["AudioInput"]="audioinput";DeviceKind["AudioOutput"]="audiooutput";DeviceKind["VideoInput"]="videoinput";})(DeviceKind$1||(DeviceKind$1={}));/**
1743
+ * Prompts the user for permission to use a media input which produces a MediaStream with tracks
1744
+ * containing the requested types of media.
1745
+ *
1746
+ * @param constraints - A MediaStreamConstraints object specifying the types of media to request,
1747
+ * along with any requirements for each type.
1748
+ * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested
1749
+ * media has successfully been obtained.
1750
+ */function getUserMedia(constraints){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.getUserMedia(constraints);});}/**
1751
+ * Prompts the user for permission to use a user's display media and audio. If a video track is
1752
+ * absent from the constraints argument, one will still be provided.
1753
+ *
1754
+ * @param constraints - A MediaStreamConstraints object specifying the types of media to request,
1755
+ * along with any requirements for each type.
1756
+ * @returns A Promise whose fulfillment handler receives a MediaStream object when the requested
1757
+ * media has successfully been obtained.
1758
+ */function getDisplayMedia(constraints){return navigator.mediaDevices.getDisplayMedia(constraints);}/**
1759
+ * Requests a list of the available media input and output devices, such as microphones, cameras,
1760
+ * headsets, and so forth.
1761
+ *
1762
+ * @returns A Promise that receives an array of MediaDeviceInfo objects when the promise is
1763
+ * fulfilled.
1764
+ */function enumerateDevices(){return __awaiter$2(this,void 0,void 0,function*(){return navigator.mediaDevices.enumerateDevices();});}/**
1765
+ * Adds the callback handler to be notified of a media device change (for example, a headset is
1766
+ * unplugged from the user's computer).
1767
+ *
1768
+ * @param handler - The callback function to execute.
1769
+ */function setOnDeviceChangeHandler$1(handler){navigator.mediaDevices.ondevicechange=handler;}/**
1770
+ * Checks permissions using the navigator's permissions api.
1771
+ *
1772
+ * @param deviceKinds - Array of DeviceKind items.
1773
+ * @throws An error if camera or microphone aren't available options for query() (Firefox), or if
1774
+ * navigator.permissions is undefined (Safari and others).
1775
+ * @returns Array of Permission Status objects.
1776
+ */function checkNavigatorPermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){var permissionRequests=[];if(deviceKinds.includes(DeviceKind$1.VideoInput)){permissionRequests.push(navigator.permissions.query({name:'camera'}));}if(deviceKinds.includes(DeviceKind$1.AudioInput)){permissionRequests.push(navigator.permissions.query({name:'microphone'}));}return Promise.all(permissionRequests);});}/**
1777
+ * Check to see if the user has granted the application permission to use their devices.
1778
+ *
1779
+ * @param deviceKinds - Array of DeviceKind items.
1780
+ * @returns True if device permissions exist, false if otherwise.
1781
1781
  */function checkDevicePermissions(deviceKinds){return __awaiter$2(this,void 0,void 0,function*(){try{var permissions=yield checkNavigatorPermissions(deviceKinds);if(permissions.every(permission=>permission.state==='granted')){return true;}// eslint-disable-next-line no-empty
1782
1782
  }catch(e){}try{var devices=yield enumerateDevices();// If permissions are granted, the MediaDeviceInfo objects will have labels.
1783
1783
  return devices.filter(device=>deviceKinds.includes(device.kind)).every(device=>device.label);// eslint-disable-next-line no-empty
1784
- }catch(e){}return false;});}/**
1785
- * Ensures that the user has granted permissions to the microphone and camera.
1786
- *
1787
- * @param deviceKinds - Array of DeviceKind items.
1788
- * @param callback - Function that will be executed while device permissions are granted. After this
1789
- * returns, permissions (for example device labels in Firefox) may not be available anymore.
1790
- * @returns The callback's response.
1784
+ }catch(e){}return false;});}/**
1785
+ * Ensures that the user has granted permissions to the microphone and camera.
1786
+ *
1787
+ * @param deviceKinds - Array of DeviceKind items.
1788
+ * @param callback - Function that will be executed while device permissions are granted. After this
1789
+ * returns, permissions (for example device labels in Firefox) may not be available anymore.
1790
+ * @returns The callback's response.
1791
1791
  */function ensureDevicePermissions(deviceKinds,callback){return __awaiter$2(this,void 0,void 0,function*(){try{var hasDevicePermissions=yield checkDevicePermissions(deviceKinds);if(!hasDevicePermissions){var stream=yield getUserMedia({audio:deviceKinds.includes(DeviceKind$1.AudioInput),video:deviceKinds.includes(DeviceKind$1.VideoInput)});// Callback is here to call a function while an active capture exists, so that the browser
1792
1792
  // (Firefox) will allow the user to access device information.
1793
1793
  var callbackRes=yield callback();// Stop tracks in the stream so the browser (Safari) will know that there is not an active
1794
1794
  // stream running.
1795
- 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$1;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var WebrtcCoreErrorType;(function(WebrtcCoreErrorType){WebrtcCoreErrorType["DEVICE_PERMISSION_DENIED"]="DEVICE_PERMISSION_DENIED";WebrtcCoreErrorType["CREATE_STREAM_FAILED"]="CREATE_STREAM_FAILED";WebrtcCoreErrorType["ADD_EFFECT_FAILED"]="ADD_EFFECT_FAILED";})(WebrtcCoreErrorType||(WebrtcCoreErrorType={}));/**
1796
- * Represents a WebRTC core error, which contains error type and error message.
1797
- */class WebrtcCoreError{/**
1798
- * Creates new error.
1799
- *
1800
- * @param type - Error type.
1801
- * @param message - Error message.
1802
- */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**
1803
- * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:
1804
- *
1805
- * 1. Previous captured video stream from the same device is not stopped.
1806
- * 2. Previous createCameraStream() call for the same device is in progress.
1807
- *
1808
- * @param constructor - Constructor for the local camera stream.
1809
- * @param constraints - Video device constraints.
1810
- * @returns A LocalCameraStream object or an error.
1811
- */function createCameraStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create camera stream: ".concat(error));}return new constructor(stream);});}/**
1812
- * Creates a LocalMicrophoneStream with the given constraints.
1813
- *
1814
- * @param constructor - Constructor for the local microphone stream.
1815
- * @param constraints - Audio device constraints.
1816
- * @returns A LocalMicrophoneStream object or an error.
1817
- */function createMicrophoneStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create microphone stream: ".concat(error));}return new constructor(stream);});}/**
1818
- * Creates a LocalDisplayStream with the given parameters.
1819
- *
1820
- * @param constructor - Constructor for the local display stream.
1821
- * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
1822
- * @returns A Promise that resolves to a LocalDisplayStream or an error.
1823
- */function createDisplayStream(constructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create display stream: ".concat(error));}var localDisplayStream=new constructor(stream);if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}return localDisplayStream;});}/**
1824
- * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.
1825
- *
1826
- * @param displayStreamConstructor - Constructor for the local display stream.
1827
- * @param systemAudioStreamConstructor - Constructor for the local system audio stream.
1828
- * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
1829
- * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an
1830
- * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null
1831
- * instead.
1795
+ 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$1;},getUserMedia:getUserMedia,getDisplayMedia:getDisplayMedia,enumerateDevices:enumerateDevices,setOnDeviceChangeHandler:setOnDeviceChangeHandler$1,checkDevicePermissions:checkDevicePermissions,ensureDevicePermissions:ensureDevicePermissions});var WebrtcCoreErrorType;(function(WebrtcCoreErrorType){WebrtcCoreErrorType["DEVICE_PERMISSION_DENIED"]="DEVICE_PERMISSION_DENIED";WebrtcCoreErrorType["CREATE_STREAM_FAILED"]="CREATE_STREAM_FAILED";WebrtcCoreErrorType["ADD_EFFECT_FAILED"]="ADD_EFFECT_FAILED";})(WebrtcCoreErrorType||(WebrtcCoreErrorType={}));/**
1796
+ * Represents a WebRTC core error, which contains error type and error message.
1797
+ */class WebrtcCoreError{/**
1798
+ * Creates new error.
1799
+ *
1800
+ * @param type - Error type.
1801
+ * @param message - Error message.
1802
+ */constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}/**
1803
+ * Creates a camera stream. Please note that the constraint params in second getUserMedia call would NOT take effect when:
1804
+ *
1805
+ * 1. Previous captured video stream from the same device is not stopped.
1806
+ * 2. Previous createCameraStream() call for the same device is in progress.
1807
+ *
1808
+ * @param constructor - Constructor for the local camera stream.
1809
+ * @param constraints - Video device constraints.
1810
+ * @returns A LocalCameraStream object or an error.
1811
+ */function createCameraStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({video:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create camera stream: ".concat(error));}return new constructor(stream);});}/**
1812
+ * Creates a LocalMicrophoneStream with the given constraints.
1813
+ *
1814
+ * @param constructor - Constructor for the local microphone stream.
1815
+ * @param constraints - Audio device constraints.
1816
+ * @returns A LocalMicrophoneStream object or an error.
1817
+ */function createMicrophoneStream(constructor,constraints){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getUserMedia({audio:Object.assign({},constraints)});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create microphone stream: ".concat(error));}return new constructor(stream);});}/**
1818
+ * Creates a LocalDisplayStream with the given parameters.
1819
+ *
1820
+ * @param constructor - Constructor for the local display stream.
1821
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
1822
+ * @returns A Promise that resolves to a LocalDisplayStream or an error.
1823
+ */function createDisplayStream(constructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create display stream: ".concat(error));}var localDisplayStream=new constructor(stream);if(videoContentHint){localDisplayStream.contentHint=videoContentHint;}return localDisplayStream;});}/**
1824
+ * Creates a LocalDisplayStream and a LocalSystemAudioStream with the given parameters.
1825
+ *
1826
+ * @param displayStreamConstructor - Constructor for the local display stream.
1827
+ * @param systemAudioStreamConstructor - Constructor for the local system audio stream.
1828
+ * @param videoContentHint - An optional parameter to give a hint for the content of the stream.
1829
+ * @returns A Promise that resolves to a LocalDisplayStream and a LocalSystemAudioStream or an
1830
+ * error. If no system audio is available, the LocalSystemAudioStream will be resolved as null
1831
+ * instead.
1832
1832
  */function createDisplayStreamWithAudio(displayStreamConstructor,systemAudioStreamConstructor,videoContentHint){return __awaiter$2(this,void 0,void 0,function*(){var stream;try{stream=yield getDisplayMedia({video:true,audio:true});}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.CREATE_STREAM_FAILED,"Failed to create display and system audio streams: ".concat(error));}// eslint-disable-next-line new-cap
1833
1833
  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
1834
- localSystemAudioStream=new systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**
1835
- * Enumerates the media input and output devices available.
1836
- *
1837
- * @param deviceKind - Optional filter to return a specific device kind.
1838
- * @returns List of media devices in an array of MediaDeviceInfo objects.
1839
- */function getDevices(deviceKind){return __awaiter$2(this,void 0,void 0,function*(){var devices;try{devices=yield ensureDevicePermissions([DeviceKind$1.AudioInput,DeviceKind$1.VideoInput],enumerateDevices);}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.DEVICE_PERMISSION_DENIED,'Failed to ensure device permissions');}return devices.filter(v=>deviceKind?v.kind===deviceKind:true);});}/**
1840
- * Helper function to get a list of microphone devices.
1841
- *
1842
- * @returns List of microphone devices in an array of MediaDeviceInfo objects.
1843
- */function getAudioInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioInput);});}/**
1844
- * Helper function to get a list of speaker devices.
1845
- *
1846
- * @returns List of speaker devices in an array of MediaDeviceInfo objects.
1847
- */function getAudioOutputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioOutput);});}/**
1848
- * Helper function to get a list of camera devices.
1849
- *
1850
- * @returns List of camera devices in an array of MediaDeviceInfo objects.
1851
- */function getVideoInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.VideoInput);});}/**
1852
- * Export the setOnDeviceChangeHandler method directly from the core lib.
1834
+ localSystemAudioStream=new systemAudioStreamConstructor(new MediaStream(stream.getAudioTracks()));}return [localDisplayStream,localSystemAudioStream];});}/**
1835
+ * Enumerates the media input and output devices available.
1836
+ *
1837
+ * @param deviceKind - Optional filter to return a specific device kind.
1838
+ * @returns List of media devices in an array of MediaDeviceInfo objects.
1839
+ */function getDevices(deviceKind){return __awaiter$2(this,void 0,void 0,function*(){var devices;try{devices=yield ensureDevicePermissions([DeviceKind$1.AudioInput,DeviceKind$1.VideoInput],enumerateDevices);}catch(error){throw new WebrtcCoreError(WebrtcCoreErrorType.DEVICE_PERMISSION_DENIED,'Failed to ensure device permissions');}return devices.filter(v=>deviceKind?v.kind===deviceKind:true);});}/**
1840
+ * Helper function to get a list of microphone devices.
1841
+ *
1842
+ * @returns List of microphone devices in an array of MediaDeviceInfo objects.
1843
+ */function getAudioInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioInput);});}/**
1844
+ * Helper function to get a list of speaker devices.
1845
+ *
1846
+ * @returns List of speaker devices in an array of MediaDeviceInfo objects.
1847
+ */function getAudioOutputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.AudioOutput);});}/**
1848
+ * Helper function to get a list of camera devices.
1849
+ *
1850
+ * @returns List of camera devices in an array of MediaDeviceInfo objects.
1851
+ */function getVideoInputDevices(){return __awaiter$2(this,void 0,void 0,function*(){return getDevices(DeviceKind$1.VideoInput);});}/**
1852
+ * Export the setOnDeviceChangeHandler method directly from the core lib.
1853
1853
  */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
1854
1854
  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
1855
1855
  // added to it. This is a useful default which helps finding memory leaks.
@@ -1879,130 +1879,130 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
1879
1879
  // EventEmitters, we do not listen for `error` events here.
1880
1880
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
1881
1881
  // have to do it manually.
1882
- 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$2$1;exports.StreamEventNames = void 0;(function(StreamEventNames){StreamEventNames["Ended"]="stream-ended";})(exports.StreamEventNames||(exports.StreamEventNames={}));/**
1883
- * Base stream class.
1884
- */class _Stream{/**
1885
- * Create a Stream from the given values.
1886
- *
1887
- * @param stream - The initial output MediaStream for this Stream.
1882
+ 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$2$1;exports.StreamEventNames = void 0;(function(StreamEventNames){StreamEventNames["Ended"]="stream-ended";})(exports.StreamEventNames||(exports.StreamEventNames={}));/**
1883
+ * Base stream class.
1884
+ */class _Stream{/**
1885
+ * Create a Stream from the given values.
1886
+ *
1887
+ * @param stream - The initial output MediaStream for this Stream.
1888
1888
  */constructor(stream){// TODO: these should be protected, but we need the helper type in ts-events
1889
1889
  // to hide the 'emit' method from TypedEvent.
1890
- this[_a$2$1]=new TypedEvent$1();this.outputStream=stream;this.handleTrackEnded=this.handleTrackEnded.bind(this);this.addTrackHandlersForStreamEvents(this.outputTrack);}/**
1891
- * Handler which is called when a track's ended event fires.
1892
- */handleTrackEnded(){this[exports.StreamEventNames.Ended].emit();}/**
1893
- * Helper function to add event handlers to a MediaStreamTrack. Unlike the virtual
1894
- * {@link addTrackHandlers} function, which can be overridden, this function is internal to this
1895
- * class and will only add the event handlers relevant to this class. It prevents, for example,
1896
- * accidentally adding the same event handlers multiple times, which could happen if the virtual
1897
- * `addTrackHandlers` method was called from a subclass's constructor.
1898
- *
1899
- * @param track - The MediaStreamTrack.
1900
- */addTrackHandlersForStreamEvents(track){track.addEventListener('ended',this.handleTrackEnded);}/**
1901
- * Add event handlers to a MediaStreamTrack.
1902
- *
1903
- * @param track - The MediaStreamTrack.
1904
- */addTrackHandlers(track){this.addTrackHandlersForStreamEvents(track);}/**
1905
- * Remove event handlers from a MediaStreamTrack.
1906
- *
1907
- * @param track - The MediaStreamTrack.
1908
- */removeTrackHandlers(track){track.removeEventListener('ended',this.handleTrackEnded);}/**
1909
- * Get the ID of the output stream.
1910
- *
1911
- * @returns The ID of the output stream.
1912
- */get id(){return this.outputStream.id;}/**
1913
- * Get the track of the output stream.
1914
- *
1915
- * @returns The output track.
1916
- */get outputTrack(){return this.outputStream.getTracks()[0];}}_a$2$1=exports.StreamEventNames.Ended;var Stream=AddEvents(_Stream);var _a$1$1,_b,_c,_d,_e;exports.LocalStreamEventNames = void 0;(function(LocalStreamEventNames){LocalStreamEventNames["UserMuteStateChange"]="user-mute-state-change";LocalStreamEventNames["SystemMuteStateChange"]="system-mute-state-change";LocalStreamEventNames["ConstraintsChange"]="constraints-change";LocalStreamEventNames["OutputTrackChange"]="output-track-change";LocalStreamEventNames["EffectAdded"]="effect-added";})(exports.LocalStreamEventNames||(exports.LocalStreamEventNames={}));/**
1917
- * A stream which originates on the local device.
1918
- */class _LocalStream extends Stream{/**
1919
- * Create a LocalStream from the given values.
1920
- *
1921
- * @param stream - The initial output MediaStream for this Stream.
1922
- */constructor(stream){super(stream);this[_a$1$1]=new TypedEvent$1();this[_b]=new TypedEvent$1();this[_c]=new TypedEvent$1();this[_d]=new TypedEvent$1();this[_e]=new TypedEvent$1();this.effects=[];this.loadingEffects=new Map();this.inputStream=stream;this.handleTrackMutedBySystem=this.handleTrackMutedBySystem.bind(this);this.handleTrackUnmutedBySystem=this.handleTrackUnmutedBySystem.bind(this);this.addTrackHandlersForLocalStreamEvents(this.inputTrack);}/**
1923
- * Handler which is called when a track's mute event fires.
1924
- */handleTrackMutedBySystem(){this[exports.LocalStreamEventNames.SystemMuteStateChange].emit(true);}/**
1925
- * Handler which is called when a track's unmute event fires.
1926
- */handleTrackUnmutedBySystem(){this[exports.LocalStreamEventNames.SystemMuteStateChange].emit(false);}/**
1927
- * Helper function to add event handlers to a MediaStreamTrack. See
1928
- * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.
1929
- *
1930
- * @param track - The MediaStreamTrack.
1931
- */addTrackHandlersForLocalStreamEvents(track){track.addEventListener('mute',this.handleTrackMutedBySystem);track.addEventListener('unmute',this.handleTrackUnmutedBySystem);}/**
1932
- * @inheritdoc
1933
- */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForLocalStreamEvents(track);}/**
1934
- * @inheritdoc
1935
- */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleTrackMutedBySystem);track.removeEventListener('unmute',this.handleTrackUnmutedBySystem);}/**
1936
- * Get the track within the MediaStream with which this LocalStream was created.
1937
- *
1938
- * @returns The track within the MediaStream with which this LocalStream
1939
- * was created.
1940
- */get inputTrack(){return this.inputStream.getTracks()[0];}/**
1941
- * Check whether or not this stream is muted. This considers both whether the stream has been
1942
- * muted by the user (see {@link userMuted}) and whether the stream has been muted by the system
1943
- * (see {@link systemMuted}).
1944
- *
1945
- * @returns True if the stream is muted, false otherwise.
1946
- */get muted(){return this.userMuted||this.systemMuted;}/**
1947
- * Check whether or not this stream has been muted by the user. This is equivalent to checking the
1948
- * MediaStreamTrack "enabled" state.
1949
- *
1950
- * @returns True if the stream has been muted by the user, false otherwise.
1951
- */get userMuted(){return !this.inputTrack.enabled;}/**
1952
- * Check whether or not this stream has been muted by the user. This is equivalent to checking the
1953
- * MediaStreamTrack "muted" state.
1954
- *
1955
- * @returns True if the stream has been muted by the system, false otherwise.
1956
- */get systemMuted(){return this.inputTrack.muted;}/**
1957
- * Set the user mute state of this stream.
1958
- *
1959
- * Note: This sets the user-toggled mute state, equivalent to changing the "enabled" state of the
1960
- * track. It is separate from the system-toggled mute state.
1961
- *
1962
- * @param isMuted - True to mute, false to unmute.
1963
- */setUserMuted(isMuted){if(this.inputTrack.enabled===isMuted){this.inputTrack.enabled=!isMuted;this[exports.LocalStreamEventNames.UserMuteStateChange].emit(isMuted);}}/**
1964
- * @inheritdoc
1965
- */getSettings(){return this.inputTrack.getSettings();}/**
1966
- * Get the label of the input track on this stream.
1967
- *
1968
- * @returns The label of the track.
1969
- */get label(){return this.inputTrack.label;}/**
1970
- * Get the readyState of the input track on this stream.
1971
- *
1972
- * @returns The readyState of the track.
1973
- */get readyState(){return this.inputTrack.readyState;}/**
1974
- * Change the track of the output stream to a different track.
1975
- *
1976
- * Note: this method assumes and enforces that if both input and output streams have the same
1977
- * track, then they must also be the same stream.
1978
- *
1979
- * @param newTrack - The track to be used in the output stream.
1890
+ this[_a$2$1]=new TypedEvent$1();this.outputStream=stream;this.handleTrackEnded=this.handleTrackEnded.bind(this);this.addTrackHandlersForStreamEvents(this.outputTrack);}/**
1891
+ * Handler which is called when a track's ended event fires.
1892
+ */handleTrackEnded(){this[exports.StreamEventNames.Ended].emit();}/**
1893
+ * Helper function to add event handlers to a MediaStreamTrack. Unlike the virtual
1894
+ * {@link addTrackHandlers} function, which can be overridden, this function is internal to this
1895
+ * class and will only add the event handlers relevant to this class. It prevents, for example,
1896
+ * accidentally adding the same event handlers multiple times, which could happen if the virtual
1897
+ * `addTrackHandlers` method was called from a subclass's constructor.
1898
+ *
1899
+ * @param track - The MediaStreamTrack.
1900
+ */addTrackHandlersForStreamEvents(track){track.addEventListener('ended',this.handleTrackEnded);}/**
1901
+ * Add event handlers to a MediaStreamTrack.
1902
+ *
1903
+ * @param track - The MediaStreamTrack.
1904
+ */addTrackHandlers(track){this.addTrackHandlersForStreamEvents(track);}/**
1905
+ * Remove event handlers from a MediaStreamTrack.
1906
+ *
1907
+ * @param track - The MediaStreamTrack.
1908
+ */removeTrackHandlers(track){track.removeEventListener('ended',this.handleTrackEnded);}/**
1909
+ * Get the ID of the output stream.
1910
+ *
1911
+ * @returns The ID of the output stream.
1912
+ */get id(){return this.outputStream.id;}/**
1913
+ * Get the track of the output stream.
1914
+ *
1915
+ * @returns The output track.
1916
+ */get outputTrack(){return this.outputStream.getTracks()[0];}}_a$2$1=exports.StreamEventNames.Ended;var Stream=AddEvents(_Stream);var _a$1$1,_b,_c,_d,_e;exports.LocalStreamEventNames = void 0;(function(LocalStreamEventNames){LocalStreamEventNames["UserMuteStateChange"]="user-mute-state-change";LocalStreamEventNames["SystemMuteStateChange"]="system-mute-state-change";LocalStreamEventNames["ConstraintsChange"]="constraints-change";LocalStreamEventNames["OutputTrackChange"]="output-track-change";LocalStreamEventNames["EffectAdded"]="effect-added";})(exports.LocalStreamEventNames||(exports.LocalStreamEventNames={}));/**
1917
+ * A stream which originates on the local device.
1918
+ */class _LocalStream extends Stream{/**
1919
+ * Create a LocalStream from the given values.
1920
+ *
1921
+ * @param stream - The initial output MediaStream for this Stream.
1922
+ */constructor(stream){super(stream);this[_a$1$1]=new TypedEvent$1();this[_b]=new TypedEvent$1();this[_c]=new TypedEvent$1();this[_d]=new TypedEvent$1();this[_e]=new TypedEvent$1();this.effects=[];this.loadingEffects=new Map();this.inputStream=stream;this.handleTrackMutedBySystem=this.handleTrackMutedBySystem.bind(this);this.handleTrackUnmutedBySystem=this.handleTrackUnmutedBySystem.bind(this);this.addTrackHandlersForLocalStreamEvents(this.inputTrack);}/**
1923
+ * Handler which is called when a track's mute event fires.
1924
+ */handleTrackMutedBySystem(){this[exports.LocalStreamEventNames.SystemMuteStateChange].emit(true);}/**
1925
+ * Handler which is called when a track's unmute event fires.
1926
+ */handleTrackUnmutedBySystem(){this[exports.LocalStreamEventNames.SystemMuteStateChange].emit(false);}/**
1927
+ * Helper function to add event handlers to a MediaStreamTrack. See
1928
+ * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.
1929
+ *
1930
+ * @param track - The MediaStreamTrack.
1931
+ */addTrackHandlersForLocalStreamEvents(track){track.addEventListener('mute',this.handleTrackMutedBySystem);track.addEventListener('unmute',this.handleTrackUnmutedBySystem);}/**
1932
+ * @inheritdoc
1933
+ */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForLocalStreamEvents(track);}/**
1934
+ * @inheritdoc
1935
+ */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleTrackMutedBySystem);track.removeEventListener('unmute',this.handleTrackUnmutedBySystem);}/**
1936
+ * Get the track within the MediaStream with which this LocalStream was created.
1937
+ *
1938
+ * @returns The track within the MediaStream with which this LocalStream
1939
+ * was created.
1940
+ */get inputTrack(){return this.inputStream.getTracks()[0];}/**
1941
+ * Check whether or not this stream is muted. This considers both whether the stream has been
1942
+ * muted by the user (see {@link userMuted}) and whether the stream has been muted by the system
1943
+ * (see {@link systemMuted}).
1944
+ *
1945
+ * @returns True if the stream is muted, false otherwise.
1946
+ */get muted(){return this.userMuted||this.systemMuted;}/**
1947
+ * Check whether or not this stream has been muted by the user. This is equivalent to checking the
1948
+ * MediaStreamTrack "enabled" state.
1949
+ *
1950
+ * @returns True if the stream has been muted by the user, false otherwise.
1951
+ */get userMuted(){return !this.inputTrack.enabled;}/**
1952
+ * Check whether or not this stream has been muted by the user. This is equivalent to checking the
1953
+ * MediaStreamTrack "muted" state.
1954
+ *
1955
+ * @returns True if the stream has been muted by the system, false otherwise.
1956
+ */get systemMuted(){return this.inputTrack.muted;}/**
1957
+ * Set the user mute state of this stream.
1958
+ *
1959
+ * Note: This sets the user-toggled mute state, equivalent to changing the "enabled" state of the
1960
+ * track. It is separate from the system-toggled mute state.
1961
+ *
1962
+ * @param isMuted - True to mute, false to unmute.
1963
+ */setUserMuted(isMuted){if(this.inputTrack.enabled===isMuted){this.inputTrack.enabled=!isMuted;this[exports.LocalStreamEventNames.UserMuteStateChange].emit(isMuted);}}/**
1964
+ * @inheritdoc
1965
+ */getSettings(){return this.inputTrack.getSettings();}/**
1966
+ * Get the label of the input track on this stream.
1967
+ *
1968
+ * @returns The label of the track.
1969
+ */get label(){return this.inputTrack.label;}/**
1970
+ * Get the readyState of the input track on this stream.
1971
+ *
1972
+ * @returns The readyState of the track.
1973
+ */get readyState(){return this.inputTrack.readyState;}/**
1974
+ * Change the track of the output stream to a different track.
1975
+ *
1976
+ * Note: this method assumes and enforces that if both input and output streams have the same
1977
+ * track, then they must also be the same stream.
1978
+ *
1979
+ * @param newTrack - The track to be used in the output stream.
1980
1980
  */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
1981
1981
  // be the same too. We want to apply the new track to the output stream without affecting the
1982
1982
  // input stream, so we separate them by setting the input stream to be its own stream.
1983
1983
  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
1984
1984
  // be the same too.
1985
- if(this.inputTrack.id===this.outputTrack.id){this.inputStream=this.outputStream;}this[exports.LocalStreamEventNames.OutputTrackChange].emit(newTrack);}}/**
1986
- * @inheritdoc
1985
+ if(this.inputTrack.id===this.outputTrack.id){this.inputStream=this.outputStream;}this[exports.LocalStreamEventNames.OutputTrackChange].emit(newTrack);}}/**
1986
+ * @inheritdoc
1987
1987
  */stop(){this.inputTrack.stop();this.outputTrack.stop();this.disposeEffects();// calling stop() will not automatically emit Ended, so we emit it here
1988
- this[exports.StreamEventNames.Ended].emit();}/**
1989
- * Adds an effect to a local stream.
1990
- *
1991
- * @param effect - The effect to add.
1988
+ this[exports.StreamEventNames.Ended].emit();}/**
1989
+ * Adds an effect to a local stream.
1990
+ *
1991
+ * @param effect - The effect to add.
1992
1992
  */addEffect(effect){return __awaiter$2(this,void 0,void 0,function*(){// Check if the effect has already been added.
1993
1993
  if(this.effects.some(e=>e.id===effect.id)){return;}// Load the effect. Because loading is asynchronous, keep track of the loading effects.
1994
1994
  this.loadingEffects.set(effect.kind,effect);yield effect.load(this.outputTrack);// After loading, check whether or not we still want to use this effect. If another effect of
1995
1995
  // the same kind was added while this effect was loading, we only want to use the latest effect,
1996
1996
  // so dispose this one. If the effects list was cleared while this effect was loading, also
1997
1997
  // dispose it.
1998
- if(effect!==this.loadingEffects.get(effect.kind)){yield effect.dispose();throw new WebrtcCoreError(WebrtcCoreErrorType.ADD_EFFECT_FAILED,"Another effect with kind ".concat(effect.kind," was added while effect ").concat(effect.id," was loading, or the effects list was cleared."));}this.loadingEffects.delete(effect.kind);/**
1999
- * Handle when the effect's output track has been changed. This will update the input of the
2000
- * next effect in the effects list of the output of the stream.
2001
- *
2002
- * @param track - The new output track of the effect.
2003
- */var handleEffectTrackUpdated=track=>{var _f;var effectIndex=this.effects.findIndex(e=>e.id===effect.id);if(effectIndex===this.effects.length-1){this.changeOutputTrack(track);}else if(effectIndex>=0){(_f=this.effects[effectIndex+1])===null||_f===void 0?void 0:_f.replaceInputTrack(track);}else {logger$3.error("Effect with ID ".concat(effect.id," not found in effects list."));}};/**
2004
- * Handle when the effect has been disposed. This will remove all event listeners from the
2005
- * effect.
1998
+ if(effect!==this.loadingEffects.get(effect.kind)){yield effect.dispose();throw new WebrtcCoreError(WebrtcCoreErrorType.ADD_EFFECT_FAILED,"Another effect with kind ".concat(effect.kind," was added while effect ").concat(effect.id," was loading, or the effects list was cleared."));}this.loadingEffects.delete(effect.kind);/**
1999
+ * Handle when the effect's output track has been changed. This will update the input of the
2000
+ * next effect in the effects list of the output of the stream.
2001
+ *
2002
+ * @param track - The new output track of the effect.
2003
+ */var handleEffectTrackUpdated=track=>{var _f;var effectIndex=this.effects.findIndex(e=>e.id===effect.id);if(effectIndex===this.effects.length-1){this.changeOutputTrack(track);}else if(effectIndex>=0){(_f=this.effects[effectIndex+1])===null||_f===void 0?void 0:_f.replaceInputTrack(track);}else {logger$3.error("Effect with ID ".concat(effect.id," not found in effects list."));}};/**
2004
+ * Handle when the effect has been disposed. This will remove all event listeners from the
2005
+ * effect.
2006
2006
  */var handleEffectDisposed=()=>{effect.off('track-updated',handleEffectTrackUpdated);effect.off('disposed',handleEffectDisposed);};// TODO: using EffectEvent.TrackUpdated or EffectEvent.Disposed will cause the entire
2007
2007
  // web-media-effects lib to be rebuilt and inflates the size of the webrtc-core build, so
2008
2008
  // we use type assertion here as a temporary workaround.
@@ -2016,96 +2016,96 @@ var existingEffectIndex=this.effects.findIndex(e=>e.kind===effect.kind);if(exist
2016
2016
  var inputTrack=existingEffectIndex===0?this.inputTrack:this.effects[existingEffectIndex-1].getOutputTrack();yield effect.replaceInputTrack(inputTrack);// Enabling the new effect will trigger the track-updated event, which will handle the new
2017
2017
  // effect's updated output track.
2018
2018
  yield effect.enable();}yield existingEffect.dispose();}else {this.effects.push(effect);}// Emit an event with the effect so others can listen to the effect events.
2019
- this[exports.LocalStreamEventNames.EffectAdded].emit(effect);});}/**
2020
- * Get an effect from the effects list by ID.
2021
- *
2022
- * @param id - The id of the effect you want to get.
2023
- * @returns The effect or undefined.
2024
- */getEffectById(id){return this.effects.find(effect=>effect.id===id);}/**
2025
- * Get an effect from the effects list by kind.
2026
- *
2027
- * @param kind - The kind of the effect you want to get.
2028
- * @returns The effect or undefined.
2029
- */getEffectByKind(kind){return this.effects.find(effect=>effect.kind===kind);}/**
2030
- * Get all the effects from the effects list.
2031
- *
2032
- * @returns A list of effects.
2033
- */getEffects(){return this.effects;}/**
2034
- * Method to serialize data about input, output streams
2035
- * and also effects from LocalStream.
2036
- *
2037
- * @returns - A JSON-compatible object representation with data from LocalStream.
2038
- */toJSON(){return {muted:this.muted,label:this.label,readyState:this.readyState,inputStream:{active:this.inputStream.active,id:this.inputStream.id,enabled:this.inputTrack.enabled,muted:this.inputTrack.muted},outputStream:{active:this.outputStream.active,id:this.outputStream.id},effects:this.effects.map(effect=>{return {id:effect.id,kind:effect.kind,isEnabled:effect.isEnabled};})};}/**
2039
- * Cleanup the local effects.
2019
+ this[exports.LocalStreamEventNames.EffectAdded].emit(effect);});}/**
2020
+ * Get an effect from the effects list by ID.
2021
+ *
2022
+ * @param id - The id of the effect you want to get.
2023
+ * @returns The effect or undefined.
2024
+ */getEffectById(id){return this.effects.find(effect=>effect.id===id);}/**
2025
+ * Get an effect from the effects list by kind.
2026
+ *
2027
+ * @param kind - The kind of the effect you want to get.
2028
+ * @returns The effect or undefined.
2029
+ */getEffectByKind(kind){return this.effects.find(effect=>effect.kind===kind);}/**
2030
+ * Get all the effects from the effects list.
2031
+ *
2032
+ * @returns A list of effects.
2033
+ */getEffects(){return this.effects;}/**
2034
+ * Method to serialize data about input, output streams
2035
+ * and also effects from LocalStream.
2036
+ *
2037
+ * @returns - A JSON-compatible object representation with data from LocalStream.
2038
+ */toJSON(){return {muted:this.muted,label:this.label,readyState:this.readyState,inputStream:{active:this.inputStream.active,id:this.inputStream.id,enabled:this.inputTrack.enabled,muted:this.inputTrack.muted},outputStream:{active:this.outputStream.active,id:this.outputStream.id},effects:this.effects.map(effect=>{return {id:effect.id,kind:effect.kind,isEnabled:effect.isEnabled};})};}/**
2039
+ * Cleanup the local effects.
2040
2040
  */disposeEffects(){return __awaiter$2(this,void 0,void 0,function*(){this.loadingEffects.clear();// Dispose of any effects currently in use
2041
- if(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(effect=>effect.dispose()));this.effects=[];}});}}_a$1$1=exports.LocalStreamEventNames.UserMuteStateChange,_b=exports.LocalStreamEventNames.SystemMuteStateChange,_c=exports.LocalStreamEventNames.ConstraintsChange,_d=exports.LocalStreamEventNames.OutputTrackChange,_e=exports.LocalStreamEventNames.EffectAdded;var LocalStream=AddEvents(_LocalStream);/**
2042
- * An audio LocalStream.
2043
- */class LocalAudioStream extends LocalStream{/**
2044
- * Apply constraints to the stream.
2045
- *
2046
- * @param constraints - The constraints to apply.
2047
- * @returns A promise which resolves when the constraints have been successfully applied.
2048
- */applyConstraints(constraints){return __awaiter$2(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();});});}}/**
2049
- * A video LocalStream.
2050
- */class LocalVideoStream extends LocalStream{/**
2051
- * Apply constraints to the stream.
2052
- *
2053
- * @param constraints - The constraints to apply.
2054
- * @returns A promise which resolves when the constraints have been successfully applied.
2055
- */applyConstraints(constraints){return __awaiter$2(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();});});}/**
2056
- * Get the content hint for this stream.
2057
- *
2058
- * @returns The content hint setting for this stream, or undefined if none has been set.
2059
- */get contentHint(){return this.inputTrack.contentHint;}/**
2060
- * Set the content hint for this stream.
2061
- *
2062
- * @param hint - The content hint to set.
2063
- */set contentHint(hint){this.inputTrack.contentHint=hint;}/**
2064
- * Check the resolution and then return how many layers will be active.
2065
- *
2066
- * @returns The active layers count.
2067
- */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;}}/**
2068
- * A local camera stream.
2069
- */class LocalCameraStream extends LocalVideoStream{}/**
2070
- * A local display stream.
2071
- */class LocalDisplayStream extends LocalVideoStream{}/**
2072
- * A local microphone stream.
2073
- */class LocalMicrophoneStream extends LocalAudioStream{}/**
2074
- * A local system audio stream.
2075
- */class LocalSystemAudioStream extends LocalAudioStream{}var _a$6$1;var RemoteMediaState;(function(RemoteMediaState){RemoteMediaState["Started"]="started";RemoteMediaState["Stopped"]="stopped";})(RemoteMediaState||(RemoteMediaState={}));exports.RemoteStreamEventNames = void 0;(function(RemoteStreamEventNames){RemoteStreamEventNames["MediaStateChange"]="media-state-change";})(exports.RemoteStreamEventNames||(exports.RemoteStreamEventNames={}));/**
2076
- * A stream originating from a remote peer.
2077
- */class _RemoteStream extends Stream{/**
2078
- * Create a RemoteStream from the given values.
2079
- *
2080
- * @param stream - The initial output MediaStream for this Stream.
2081
- */constructor(stream){super(stream);this[_a$6$1]=new TypedEvent$1();this.handleMediaStarted=this.handleMediaStarted.bind(this);this.handleMediaStopped=this.handleMediaStopped.bind(this);this.outputTrack.addEventListener('mute',this.handleMediaStopped);this.outputTrack.addEventListener('unmute',this.handleMediaStarted);}/**
2082
- * @inheritdoc
2083
- */handleMediaStarted(){this[exports.RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Started);}/**
2084
- * @inheritdoc
2085
- */handleMediaStopped(){this[exports.RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Stopped);}/**
2086
- * Helper function to add event handlers to a MediaStreamTrack. See
2087
- * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.
2088
- *
2089
- * @param track - The MediaStreamTrack.
2090
- */addTrackHandlersForRemoteStreamEvents(track){track.addEventListener('mute',this.handleMediaStopped);track.addEventListener('unmute',this.handleMediaStarted);}/**
2091
- * @inheritdoc
2092
- */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForRemoteStreamEvents(track);}/**
2093
- * @inheritdoc
2094
- */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleMediaStopped);track.removeEventListener('unmute',this.handleMediaStarted);}/**
2095
- * Get whether the media on this stream has started or stopped.
2096
- *
2097
- * @returns The state of the media.
2098
- */get mediaState(){return this.outputTrack.muted?RemoteMediaState.Stopped:RemoteMediaState.Started;}/**
2099
- * @inheritdoc
2100
- */getSettings(){return this.outputTrack.getSettings();}/**
2101
- * Replace the existing track on the output stream for a new track.
2102
- *
2103
- * @param newTrack - The track to add to the stream.
2041
+ if(this.effects.length>0){this.changeOutputTrack(this.inputTrack);yield Promise.all(this.effects.map(effect=>effect.dispose()));this.effects=[];}});}}_a$1$1=exports.LocalStreamEventNames.UserMuteStateChange,_b=exports.LocalStreamEventNames.SystemMuteStateChange,_c=exports.LocalStreamEventNames.ConstraintsChange,_d=exports.LocalStreamEventNames.OutputTrackChange,_e=exports.LocalStreamEventNames.EffectAdded;var LocalStream=AddEvents(_LocalStream);/**
2042
+ * An audio LocalStream.
2043
+ */class LocalAudioStream extends LocalStream{/**
2044
+ * Apply constraints to the stream.
2045
+ *
2046
+ * @param constraints - The constraints to apply.
2047
+ * @returns A promise which resolves when the constraints have been successfully applied.
2048
+ */applyConstraints(constraints){return __awaiter$2(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();});});}}/**
2049
+ * A video LocalStream.
2050
+ */class LocalVideoStream extends LocalStream{/**
2051
+ * Apply constraints to the stream.
2052
+ *
2053
+ * @param constraints - The constraints to apply.
2054
+ * @returns A promise which resolves when the constraints have been successfully applied.
2055
+ */applyConstraints(constraints){return __awaiter$2(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();});});}/**
2056
+ * Get the content hint for this stream.
2057
+ *
2058
+ * @returns The content hint setting for this stream, or undefined if none has been set.
2059
+ */get contentHint(){return this.inputTrack.contentHint;}/**
2060
+ * Set the content hint for this stream.
2061
+ *
2062
+ * @param hint - The content hint to set.
2063
+ */set contentHint(hint){this.inputTrack.contentHint=hint;}/**
2064
+ * Check the resolution and then return how many layers will be active.
2065
+ *
2066
+ * @returns The active layers count.
2067
+ */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;}}/**
2068
+ * A local camera stream.
2069
+ */class LocalCameraStream extends LocalVideoStream{}/**
2070
+ * A local display stream.
2071
+ */class LocalDisplayStream extends LocalVideoStream{}/**
2072
+ * A local microphone stream.
2073
+ */class LocalMicrophoneStream extends LocalAudioStream{}/**
2074
+ * A local system audio stream.
2075
+ */class LocalSystemAudioStream extends LocalAudioStream{}var _a$6$1;var RemoteMediaState;(function(RemoteMediaState){RemoteMediaState["Started"]="started";RemoteMediaState["Stopped"]="stopped";})(RemoteMediaState||(RemoteMediaState={}));exports.RemoteStreamEventNames = void 0;(function(RemoteStreamEventNames){RemoteStreamEventNames["MediaStateChange"]="media-state-change";})(exports.RemoteStreamEventNames||(exports.RemoteStreamEventNames={}));/**
2076
+ * A stream originating from a remote peer.
2077
+ */class _RemoteStream extends Stream{/**
2078
+ * Create a RemoteStream from the given values.
2079
+ *
2080
+ * @param stream - The initial output MediaStream for this Stream.
2081
+ */constructor(stream){super(stream);this[_a$6$1]=new TypedEvent$1();this.handleMediaStarted=this.handleMediaStarted.bind(this);this.handleMediaStopped=this.handleMediaStopped.bind(this);this.outputTrack.addEventListener('mute',this.handleMediaStopped);this.outputTrack.addEventListener('unmute',this.handleMediaStarted);}/**
2082
+ * @inheritdoc
2083
+ */handleMediaStarted(){this[exports.RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Started);}/**
2084
+ * @inheritdoc
2085
+ */handleMediaStopped(){this[exports.RemoteStreamEventNames.MediaStateChange].emit(RemoteMediaState.Stopped);}/**
2086
+ * Helper function to add event handlers to a MediaStreamTrack. See
2087
+ * {@link Stream.addTrackHandlersForStreamEvents} for why this is useful.
2088
+ *
2089
+ * @param track - The MediaStreamTrack.
2090
+ */addTrackHandlersForRemoteStreamEvents(track){track.addEventListener('mute',this.handleMediaStopped);track.addEventListener('unmute',this.handleMediaStarted);}/**
2091
+ * @inheritdoc
2092
+ */addTrackHandlers(track){super.addTrackHandlers(track);this.addTrackHandlersForRemoteStreamEvents(track);}/**
2093
+ * @inheritdoc
2094
+ */removeTrackHandlers(track){super.removeTrackHandlers(track);track.removeEventListener('mute',this.handleMediaStopped);track.removeEventListener('unmute',this.handleMediaStarted);}/**
2095
+ * Get whether the media on this stream has started or stopped.
2096
+ *
2097
+ * @returns The state of the media.
2098
+ */get mediaState(){return this.outputTrack.muted?RemoteMediaState.Stopped:RemoteMediaState.Started;}/**
2099
+ * @inheritdoc
2100
+ */getSettings(){return this.outputTrack.getSettings();}/**
2101
+ * Replace the existing track on the output stream for a new track.
2102
+ *
2103
+ * @param newTrack - The track to add to the stream.
2104
2104
  */replaceTrack(newTrack){var oldTrack=this.outputTrack;this.removeTrackHandlers(oldTrack);this.outputStream.removeTrack(oldTrack);this.outputStream.addTrack(newTrack);this.addTrackHandlers(newTrack);if(oldTrack.muted!==newTrack.muted){if(newTrack.muted){this.handleMediaStopped();}else {this.handleMediaStarted();}}// TODO: Chrome/React may not automatically refresh the media element with the new track when
2105
2105
  // the output track has changed, so we may need to emit an event here if this is the case.
2106
2106
  // this[StreamEventNames.OutputTrackChange].emit(newTrack);
2107
- }/**
2108
- * @inheritdoc
2107
+ }/**
2108
+ * @inheritdoc
2109
2109
  */stop(){this.outputTrack.stop();// calling stop() will not automatically emit Ended, so we emit it here
2110
2110
  this[exports.StreamEventNames.Ended].emit();}}_a$6$1=exports.RemoteStreamEventNames.MediaStateChange;var RemoteStream=AddEvents(_RemoteStream);var commonjsGlobal$3=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs$1(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5$1={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$1);var Bowser$1=/*@__PURE__*/getDefaultExportFromCjs$1(es5$1.exports);var BrowserName$1;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName$1||(BrowserName$1={}));class BrowserInfo$1{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName$1.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName$1.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName$1.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName$1.SAFARI;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo$1.browser=Bowser$1.getParser(window.navigator.userAgent);var CapabilityState$1;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState$1||(CapabilityState$1={}));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
2111
2111
  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
@@ -2136,38 +2136,38 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
2136
2136
  // EventEmitters, we do not listen for `error` events here.
2137
2137
  emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
2138
2138
  // have to do it manually.
2139
- 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);}}/**
2140
- * Typed event emitter class.
2139
+ 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);}}/**
2140
+ * Typed event emitter class.
2141
2141
  */class EventEmitter$4 extends events$2.exports.EventEmitter{}// Overall connection state (based on the ICE and DTLS connection states)
2142
- 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["PeerConnectionStateChanged"]="PeerConnectionStateChanged";ConnectionStateEvents["IceConnectionStateChanged"]="IceConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
2143
- * Listens on the connection's ICE and DTLS state changes and emits a single
2144
- * event that summarizes all the internal states into a single overall connection state.
2145
- */class ConnectionStateHandler extends EventEmitter$4{/**
2146
- * Creates an instance of ConnectionStateHandler.
2147
- *
2148
- * @param getCurrentStatesCallback - Callback for getting the connection state information
2149
- * from the peer connection.
2150
- */constructor(getCurrentStatesCallback){super();this.getCurrentStatesCallback=getCurrentStatesCallback;}/**
2151
- * Handler for connection state change.
2152
- */onPeerConnectionStateChange(){var state=this.getPeerConnectionState();this.emit(ConnectionStateEvents.PeerConnectionStateChanged,state);}/**
2153
- * Handler for ice connection state change.
2154
- */onIceConnectionStateChange(){var state=this.getIceConnectionState();this.emit(ConnectionStateEvents.IceConnectionStateChanged,state);}/**
2155
- * Evaluates the overall connection state based on peer connection's
2156
- * connectionState and iceConnectionState.
2157
- *
2158
- * @returns Current overall connection state.
2159
- */evaluateMediaConnectionState(){var{connectionState,iceState}=this.getCurrentStatesCallback();var connectionStates=[connectionState,iceState];var mediaConnectionState;if(connectionStates.every(value=>value==='new')){mediaConnectionState=exports.ConnectionState.New;}else if(connectionStates.some(value=>value==='closed')){mediaConnectionState=exports.ConnectionState.Closed;}else if(connectionStates.some(value=>value==='failed')){mediaConnectionState=exports.ConnectionState.Failed;}else if(connectionStates.some(value=>value==='disconnected')){mediaConnectionState=exports.ConnectionState.Disconnected;}else if(connectionStates.every(value=>value==='connected'||value==='completed')){mediaConnectionState=exports.ConnectionState.Connected;}else {mediaConnectionState=exports.ConnectionState.Connecting;}logger$3.log("iceConnectionState=".concat(iceState," connectionState=").concat(connectionState," => ").concat(mediaConnectionState));return mediaConnectionState;}/**
2160
- * Gets current connection state.
2161
- *
2162
- * @returns Current connection state.
2163
- */getPeerConnectionState(){var{connectionState}=this.getCurrentStatesCallback();return connectionState;}/**
2164
- * Gets current ice connection state.
2165
- *
2166
- * @returns Current ice connection state.
2167
- */getIceConnectionState(){var{iceState}=this.getCurrentStatesCallback();return iceState;}/**
2168
- * Gets current overall connection state.
2169
- *
2170
- * @returns Current overall connection state.
2142
+ 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["PeerConnectionStateChanged"]="PeerConnectionStateChanged";ConnectionStateEvents["IceConnectionStateChanged"]="IceConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
2143
+ * Listens on the connection's ICE and DTLS state changes and emits a single
2144
+ * event that summarizes all the internal states into a single overall connection state.
2145
+ */class ConnectionStateHandler extends EventEmitter$4{/**
2146
+ * Creates an instance of ConnectionStateHandler.
2147
+ *
2148
+ * @param getCurrentStatesCallback - Callback for getting the connection state information
2149
+ * from the peer connection.
2150
+ */constructor(getCurrentStatesCallback){super();this.getCurrentStatesCallback=getCurrentStatesCallback;}/**
2151
+ * Handler for connection state change.
2152
+ */onPeerConnectionStateChange(){var state=this.getPeerConnectionState();this.emit(ConnectionStateEvents.PeerConnectionStateChanged,state);}/**
2153
+ * Handler for ice connection state change.
2154
+ */onIceConnectionStateChange(){var state=this.getIceConnectionState();this.emit(ConnectionStateEvents.IceConnectionStateChanged,state);}/**
2155
+ * Evaluates the overall connection state based on peer connection's
2156
+ * connectionState and iceConnectionState.
2157
+ *
2158
+ * @returns Current overall connection state.
2159
+ */evaluateMediaConnectionState(){var{connectionState,iceState}=this.getCurrentStatesCallback();var connectionStates=[connectionState,iceState];var mediaConnectionState;if(connectionStates.every(value=>value==='new')){mediaConnectionState=exports.ConnectionState.New;}else if(connectionStates.some(value=>value==='closed')){mediaConnectionState=exports.ConnectionState.Closed;}else if(connectionStates.some(value=>value==='failed')){mediaConnectionState=exports.ConnectionState.Failed;}else if(connectionStates.some(value=>value==='disconnected')){mediaConnectionState=exports.ConnectionState.Disconnected;}else if(connectionStates.every(value=>value==='connected'||value==='completed')){mediaConnectionState=exports.ConnectionState.Connected;}else {mediaConnectionState=exports.ConnectionState.Connecting;}logger$3.log("iceConnectionState=".concat(iceState," connectionState=").concat(connectionState," => ").concat(mediaConnectionState));return mediaConnectionState;}/**
2160
+ * Gets current connection state.
2161
+ *
2162
+ * @returns Current connection state.
2163
+ */getPeerConnectionState(){var{connectionState}=this.getCurrentStatesCallback();return connectionState;}/**
2164
+ * Gets current ice connection state.
2165
+ *
2166
+ * @returns Current ice connection state.
2167
+ */getIceConnectionState(){var{iceState}=this.getCurrentStatesCallback();return iceState;}/**
2168
+ * Gets current overall connection state.
2169
+ *
2170
+ * @returns Current overall connection state.
2171
2171
  */getConnectionState(){return this.evaluateMediaConnectionState();}}ConnectionStateHandler.Events=ConnectionStateEvents;/*
2172
2172
  * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
2173
2173
  *
@@ -2557,151 +2557,151 @@ shimAddIceCandidateNullOrEmpty$1(window,browserDetails);shimParameterlessSetLoca
2557
2557
  * Use of this source code is governed by a BSD-style license
2558
2558
  * that can be found in the LICENSE file in the root of the source
2559
2559
  * tree.
2560
- */adapterFactory$1({window:typeof window==='undefined'?undefined:window});/**
2561
- * Creates an RTCPeerConnection.
2562
- *
2563
- * @param configuration - Config to the RTCPeerConnection constructor.
2564
- * @returns An RTCPeerConnection instance.
2565
- */function createRTCPeerConnection(configuration){return new RTCPeerConnection(configuration);}/**
2566
- * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.
2567
- */exports.MediaStreamTrackKind = void 0;(function(MediaStreamTrackKind){MediaStreamTrackKind["Audio"]="audio";MediaStreamTrackKind["Video"]="video";})(exports.MediaStreamTrackKind||(exports.MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents["IceGatheringStateChange"]="icegatheringstatechange";PeerConnectionEvents["IceCandidate"]="icecandidate";PeerConnectionEvents["PeerConnectionStateChange"]="peerconnectionstatechange";PeerConnectionEvents["IceConnectionStateChange"]="iceconnectionstatechange";PeerConnectionEvents["CreateOfferOnSuccess"]="createofferonsuccess";PeerConnectionEvents["CreateAnswerOnSuccess"]="createansweronsuccess";PeerConnectionEvents["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";PeerConnectionEvents["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**
2568
- * Manages a single RTCPeerConnection with the server.
2569
- */class PeerConnection extends EventEmitter$4{/**
2570
- * Creates an instance of the RTCPeerConnection.
2571
- *
2572
- * @param configuration - Config to the RTCPeerConnection constructor.
2560
+ */adapterFactory$1({window:typeof window==='undefined'?undefined:window});/**
2561
+ * Creates an RTCPeerConnection.
2562
+ *
2563
+ * @param configuration - Config to the RTCPeerConnection constructor.
2564
+ * @returns An RTCPeerConnection instance.
2565
+ */function createRTCPeerConnection(configuration){return new RTCPeerConnection(configuration);}/**
2566
+ * A type-safe form of the DOMString used in the MediaStreamTrack.kind field.
2567
+ */exports.MediaStreamTrackKind = void 0;(function(MediaStreamTrackKind){MediaStreamTrackKind["Audio"]="audio";MediaStreamTrackKind["Video"]="video";})(exports.MediaStreamTrackKind||(exports.MediaStreamTrackKind={}));var PeerConnectionEvents;(function(PeerConnectionEvents){PeerConnectionEvents["IceGatheringStateChange"]="icegatheringstatechange";PeerConnectionEvents["IceCandidate"]="icecandidate";PeerConnectionEvents["IceCandidateError"]="icecandidateerror";PeerConnectionEvents["PeerConnectionStateChange"]="peerconnectionstatechange";PeerConnectionEvents["IceConnectionStateChange"]="iceconnectionstatechange";PeerConnectionEvents["CreateOfferOnSuccess"]="createofferonsuccess";PeerConnectionEvents["CreateAnswerOnSuccess"]="createansweronsuccess";PeerConnectionEvents["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";PeerConnectionEvents["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";})(PeerConnectionEvents||(PeerConnectionEvents={}));/**
2568
+ * Manages a single RTCPeerConnection with the server.
2569
+ */class PeerConnection extends EventEmitter$4{/**
2570
+ * Creates an instance of the RTCPeerConnection.
2571
+ *
2572
+ * @param configuration - Config to the RTCPeerConnection constructor.
2573
2573
  */constructor(configuration){super();logger$3.log('PeerConnection init');this.pc=createRTCPeerConnection(configuration);this.connectionStateHandler=new ConnectionStateHandler(()=>{return {connectionState:this.pc.connectionState,iceState:this.pc.iceConnectionState};});this.connectionStateHandler.on(ConnectionStateHandler.Events.PeerConnectionStateChanged,state=>{this.emit(PeerConnection.Events.PeerConnectionStateChange,state);});this.connectionStateHandler.on(ConnectionStateHandler.Events.IceConnectionStateChanged,state=>{this.emit(PeerConnection.Events.IceConnectionStateChange,state);});// Forward the connection state related events to connection state handler
2574
2574
  // eslint-disable-next-line jsdoc/require-jsdoc
2575
2575
  this.pc.oniceconnectionstatechange=()=>this.connectionStateHandler.onIceConnectionStateChange();// eslint-disable-next-line jsdoc/require-jsdoc
2576
2576
  this.pc.onconnectionstatechange=()=>this.connectionStateHandler.onPeerConnectionStateChange();// Subscribe to underlying PeerConnection events and emit them via the EventEmitter
2577
- /* eslint-disable jsdoc/require-jsdoc */this.pc.onicegatheringstatechange=ev=>{this.emit(PeerConnection.Events.IceGatheringStateChange,ev);};/* eslint-disable jsdoc/require-jsdoc */this.pc.onicecandidate=ev=>{this.emit(PeerConnection.Events.IceCandidate,ev);};}/**
2578
- * Get the underlying RTCPeerConnection.
2579
- *
2580
- * @returns The underlying RTCPeerConnection.
2581
- */getUnderlyingRTCPeerConnection(){return this.pc;}/**
2582
- * Gets the overall connection state of the underlying RTCPeerConnection.
2583
- *
2584
- * @returns The underlying connection's overall state.
2585
- */getConnectionState(){return this.connectionStateHandler.getConnectionState();}/**
2586
- * Gets the connection state of the underlying RTCPeerConnection.
2587
- *
2588
- * @returns The underlying RTCPeerConnection connection state.
2589
- */getPeerConnectionState(){return this.connectionStateHandler.getPeerConnectionState();}/**
2590
- * Gets the ICE connection state of the underlying RTCPeerConnection.
2591
- *
2592
- * @returns The underlying RTCPeerConnection ICE connection state.
2593
- */getIceConnectionState(){return this.connectionStateHandler.getIceConnectionState();}/**
2594
- * Adds a new media track to the set of tracks which will be transmitted to the other peer.
2595
- *
2596
- * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.
2597
- * @param streams - (Optional) One or more local MediaStream objects to which the track should be
2598
- * added.
2599
- * @returns The RTCRtpSender object which will be used to transmit the media data, or null if
2600
- * there is no underlying track when a track is added.
2601
- */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);}/**
2602
- * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the
2603
- * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender
2604
- * and an RTCRtpReceiver associated with it.
2605
- *
2606
- * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used
2607
- * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.
2608
- * @param init - Options that you may wish to specify when creating the new transceiver.
2609
- * @returns - The created RTCRtpTransceiver object.
2610
- */addTransceiver(trackOrKind,init){return this.pc.addTransceiver(trackOrKind,init);}/**
2611
- * Tell the local end of the connection to stop sending media from the specified track, without
2612
- * actually removing the corresponding RTCRtpSender from the list of senders as reported by
2613
- * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's
2614
- * senders list, the method has no effect.
2615
- *
2616
- * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked
2617
- * as needing to be negotiated again; the remote peer won't experience the change until this
2618
- * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local
2619
- * end know this negotiation must occur.
2620
- *
2621
- * @param sender - An RTCRtpSender specifying the sender to remove from the connection.
2622
- */removeTrack(sender){this.pc.removeTrack(sender);}/**
2623
- * Creates a new data channel linked with the remote peer.
2624
- *
2625
- * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.
2626
- * @param options - An object providing configuration options for the data channel.
2627
- * @returns An RTCDataChannel object.
2628
- */createDataChannel(label,options){return this.pc.createDataChannel(label,options);}/**
2629
- * Creates an SDP answer to an offer received from a remote peer during the offer/answer
2630
- * negotiation of a WebRTC connection.
2631
- *
2632
- * @param options - (Optional) An object which contains options which customize the answer; this
2633
- * is based on the RTCAnswerOptions dictionary.
2634
- * @returns A Promise whose fulfillment handler is called with an object conforming to the
2635
- * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the
2636
- * other peer.
2637
- */createAnswer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createAnswer(options).then(answer=>{this.emit(PeerConnection.Events.CreateAnswerOnSuccess,answer);return answer;});});}/**
2638
- * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a
2639
- * remote peer.
2640
- *
2641
- * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the
2642
- * offer.
2643
- * @returns A Promise whose fulfillment handler will receive an object conforming to the
2644
- * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.
2645
- * That received offer should be delivered through the signaling server to a remote peer.
2646
- */createOffer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createOffer(options).then(offer=>{this.emit(PeerConnection.Events.CreateOfferOnSuccess,offer);return offer;});});}/**
2647
- * Changes the local description associated with the connection.
2648
- *
2649
- * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the
2650
- * configuration to be applied to the local end of the connection.
2651
- * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is
2652
- * successfully changed or rejected if the change cannot be applied.
2653
- */setLocalDescription(description){var _a;return __awaiter$2(this,void 0,void 0,function*(){// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even
2577
+ /* eslint-disable jsdoc/require-jsdoc */this.pc.onicegatheringstatechange=ev=>{this.emit(PeerConnection.Events.IceGatheringStateChange,ev);};/* eslint-disable jsdoc/require-jsdoc */this.pc.onicecandidate=ev=>{this.emit(PeerConnection.Events.IceCandidate,ev);};this.pc.onicecandidateerror=ev=>{this.emit(PeerConnection.Events.IceCandidateError,ev);};}/**
2578
+ * Get the underlying RTCPeerConnection.
2579
+ *
2580
+ * @returns The underlying RTCPeerConnection.
2581
+ */getUnderlyingRTCPeerConnection(){return this.pc;}/**
2582
+ * Gets the overall connection state of the underlying RTCPeerConnection.
2583
+ *
2584
+ * @returns The underlying connection's overall state.
2585
+ */getConnectionState(){return this.connectionStateHandler.getConnectionState();}/**
2586
+ * Gets the connection state of the underlying RTCPeerConnection.
2587
+ *
2588
+ * @returns The underlying RTCPeerConnection connection state.
2589
+ */getPeerConnectionState(){return this.connectionStateHandler.getPeerConnectionState();}/**
2590
+ * Gets the ICE connection state of the underlying RTCPeerConnection.
2591
+ *
2592
+ * @returns The underlying RTCPeerConnection ICE connection state.
2593
+ */getIceConnectionState(){return this.connectionStateHandler.getIceConnectionState();}/**
2594
+ * Adds a new media track to the set of tracks which will be transmitted to the other peer.
2595
+ *
2596
+ * @param track - A MediaStreamTrack object representing the media track to add to the peer connection.
2597
+ * @param streams - (Optional) One or more local MediaStream objects to which the track should be
2598
+ * added.
2599
+ * @returns The RTCRtpSender object which will be used to transmit the media data, or null if
2600
+ * there is no underlying track when a track is added.
2601
+ */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);}/**
2602
+ * Creates a new RTCRtpTransceiver and adds it to the set of transceivers associated with the
2603
+ * PeerConnection. Each transceiver represents a bidirectional stream, with both an RTCRtpSender
2604
+ * and an RTCRtpReceiver associated with it.
2605
+ *
2606
+ * @param trackOrKind - A MediaStreamTrack to associate with the transceiver, or a string which is used
2607
+ * as the kind of the receiver's track, and by extension the RTCRtpReceiver itself.
2608
+ * @param init - Options that you may wish to specify when creating the new transceiver.
2609
+ * @returns - The created RTCRtpTransceiver object.
2610
+ */addTransceiver(trackOrKind,init){return this.pc.addTransceiver(trackOrKind,init);}/**
2611
+ * Tell the local end of the connection to stop sending media from the specified track, without
2612
+ * actually removing the corresponding RTCRtpSender from the list of senders as reported by
2613
+ * RTCPeerConnection.getSenders(). If the track is already stopped, or is not in the connection's
2614
+ * senders list, the method has no effect.
2615
+ *
2616
+ * If the connection has already been negotiated (signalingState is set to 'stable'), it is marked
2617
+ * as needing to be negotiated again; the remote peer won't experience the change until this
2618
+ * negotiation occurs. A negotiatedneeded event is sent to the RTCPeerConnection to let the local
2619
+ * end know this negotiation must occur.
2620
+ *
2621
+ * @param sender - An RTCRtpSender specifying the sender to remove from the connection.
2622
+ */removeTrack(sender){this.pc.removeTrack(sender);}/**
2623
+ * Creates a new data channel linked with the remote peer.
2624
+ *
2625
+ * @param label - A human-readable name for the channel. May not be longer than 65,535 bytes.
2626
+ * @param options - An object providing configuration options for the data channel.
2627
+ * @returns An RTCDataChannel object.
2628
+ */createDataChannel(label,options){return this.pc.createDataChannel(label,options);}/**
2629
+ * Creates an SDP answer to an offer received from a remote peer during the offer/answer
2630
+ * negotiation of a WebRTC connection.
2631
+ *
2632
+ * @param options - (Optional) An object which contains options which customize the answer; this
2633
+ * is based on the RTCAnswerOptions dictionary.
2634
+ * @returns A Promise whose fulfillment handler is called with an object conforming to the
2635
+ * RTCSessionDescriptionInit dictionary which contains the SDP answer to be delivered to the
2636
+ * other peer.
2637
+ */createAnswer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createAnswer(options).then(answer=>{this.emit(PeerConnection.Events.CreateAnswerOnSuccess,answer);return answer;});});}/**
2638
+ * Initiates the creation of an SDP offer for the purpose of starting a new WebRTC connection to a
2639
+ * remote peer.
2640
+ *
2641
+ * @param options - (Optional) An RTCOfferOptions dictionary providing options requested for the
2642
+ * offer.
2643
+ * @returns A Promise whose fulfillment handler will receive an object conforming to the
2644
+ * RTCSessionDescriptionInit dictionary which contains the SDP describing the generated offer.
2645
+ * That received offer should be delivered through the signaling server to a remote peer.
2646
+ */createOffer(options){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.createOffer(options).then(offer=>{this.emit(PeerConnection.Events.CreateOfferOnSuccess,offer);return offer;});});}/**
2647
+ * Changes the local description associated with the connection.
2648
+ *
2649
+ * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the
2650
+ * configuration to be applied to the local end of the connection.
2651
+ * @returns A Promise which is fulfilled once the value of RTCPeerConnection.localDescription is
2652
+ * successfully changed or rejected if the change cannot be applied.
2653
+ */setLocalDescription(description){return __awaiter$2(this,void 0,void 0,function*(){var _a;// In Firefox, setLocalDescription will not throw an error if an m-line has no codecs, even
2654
2654
  // though it violates https://datatracker.ietf.org/doc/html/rfc8866. See
2655
2655
  // https://bugzilla.mozilla.org/show_bug.cgi?id=1857612. So, we check the media lines here to
2656
2656
  // preemptively throw an error on Firefox.
2657
- if(BrowserInfo$1.isFirefox()){(_a=description===null||description===void 0?void 0:description.sdp)===null||_a===void 0?void 0:_a.split(/(\r\n|\r|\n)/).filter(line=>line.startsWith('m')).forEach(mediaLine=>{if(mediaLine.trim().split(' ').length<4){throw new Error("Invalid media line ".concat(mediaLine,", expected at least 4 fields"));}});}return this.pc.setLocalDescription(description).then(()=>{if(description){this.emit(PeerConnection.Events.SetLocalDescriptionOnSuccess,description);}});});}/**
2658
- * Sets the specified session description as the remote peer's current offer or answer.
2659
- *
2660
- * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the
2661
- * remote peer's current offer or answer.
2662
- * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is
2663
- * successfully changed or rejected if the change cannot be applied (for example, if the
2664
- * specified description is incompatible with one or both of the peers on the connection).
2665
- */setRemoteDescription(description){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.setRemoteDescription(description).then(()=>{this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description);});});}/**
2666
- * Closes the current peer connection.
2667
- */close(){this.pc.close();}/**
2668
- * Get the local description from this PeerConnection.
2669
- *
2670
- * @returns An RTCSessionDescription representing the local description, or null if none has been set.
2671
- */getLocalDescription(){return this.pc.localDescription;}/**
2672
- * Get the remote description from this PeerConnection.
2673
- *
2674
- * @returns An RTCSessionDescription representing the remote description, or null if none has been set.
2675
- */getRemoteDescription(){return this.pc.remoteDescription;}/**
2676
- * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible
2677
- * for transmitting one track's data. A sender object provides methods and properties for
2678
- * examining and controlling the encoding and transmission of the track's data.
2679
- *
2680
- * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is
2681
- * empty if there are no RTP senders on the connection.
2682
- */getSenders(){return this.pc.getSenders();}/**
2683
- * Get the list of RTCRtpTransceiver objects being used to send and receive data on the
2684
- * connection.
2685
- *
2686
- * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling
2687
- * sending and receiving all media on the PeerConnection. The list is in the order in which the
2688
- * transceivers were added to the connection.
2689
- */getTransceivers(){return this.pc.getTransceivers();}/**
2690
- * Get statistics about either the overall connection or about the specified MediaStreamTrack.
2691
- *
2692
- * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,
2693
- * statistics will be gathered for the entire underlying RTCPeerConnection.
2694
- * @returns - A Promise which resolves with an RTCStatsReport object providing connection
2695
- * statistics.
2696
- */getStats(selector){return this.pc.getStats(selector);}/**
2697
- * Returns a string that describes the connections' ICE gathering state.
2698
- *
2699
- * @returns - The ICE gathering state.
2700
- */get iceGatheringState(){return this.pc.iceGatheringState;}/**
2701
- * Returns the type of a connection that has been established.
2702
- *
2703
- * @returns The connection type which would be `ConnectionType`.
2704
- */getCurrentConnectionType(){var _a;return __awaiter$2(this,void 0,void 0,function*(){// make sure this method only can be called when the ice connection is established;
2657
+ if(BrowserInfo$1.isFirefox()){(_a=description===null||description===void 0?void 0:description.sdp)===null||_a===void 0?void 0:_a.split(/(\r\n|\r|\n)/).filter(line=>line.startsWith('m')).forEach(mediaLine=>{if(mediaLine.trim().split(' ').length<4){throw new Error("Invalid media line ".concat(mediaLine,", expected at least 4 fields"));}});}return this.pc.setLocalDescription(description).then(()=>{if(description){this.emit(PeerConnection.Events.SetLocalDescriptionOnSuccess,description);}});});}/**
2658
+ * Sets the specified session description as the remote peer's current offer or answer.
2659
+ *
2660
+ * @param description - An RTCSessionDescriptionInit or RTCSessionDescription which specifies the
2661
+ * remote peer's current offer or answer.
2662
+ * @returns A Promise which is fulfilled once the value of the connection's remoteDescription is
2663
+ * successfully changed or rejected if the change cannot be applied (for example, if the
2664
+ * specified description is incompatible with one or both of the peers on the connection).
2665
+ */setRemoteDescription(description){return __awaiter$2(this,void 0,void 0,function*(){return this.pc.setRemoteDescription(description).then(()=>{this.emit(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description);});});}/**
2666
+ * Closes the current peer connection.
2667
+ */close(){this.pc.close();}/**
2668
+ * Get the local description from this PeerConnection.
2669
+ *
2670
+ * @returns An RTCSessionDescription representing the local description, or null if none has been set.
2671
+ */getLocalDescription(){return this.pc.localDescription;}/**
2672
+ * Get the remote description from this PeerConnection.
2673
+ *
2674
+ * @returns An RTCSessionDescription representing the remote description, or null if none has been set.
2675
+ */getRemoteDescription(){return this.pc.remoteDescription;}/**
2676
+ * Returns an array of RTCRtpSender objects, each of which represents the RTP sender responsible
2677
+ * for transmitting one track's data. A sender object provides methods and properties for
2678
+ * examining and controlling the encoding and transmission of the track's data.
2679
+ *
2680
+ * @returns An array of RTCRtpSender objects, one for each track on the connection. The array is
2681
+ * empty if there are no RTP senders on the connection.
2682
+ */getSenders(){return this.pc.getSenders();}/**
2683
+ * Get the list of RTCRtpTransceiver objects being used to send and receive data on the
2684
+ * connection.
2685
+ *
2686
+ * @returns - An array of the RTCRtpTransceiver objects representing the transceivers handling
2687
+ * sending and receiving all media on the PeerConnection. The list is in the order in which the
2688
+ * transceivers were added to the connection.
2689
+ */getTransceivers(){return this.pc.getTransceivers();}/**
2690
+ * Get statistics about either the overall connection or about the specified MediaStreamTrack.
2691
+ *
2692
+ * @param selector - An optional MediaStreamTrack for which to gather statistics. If not provided,
2693
+ * statistics will be gathered for the entire underlying RTCPeerConnection.
2694
+ * @returns - A Promise which resolves with an RTCStatsReport object providing connection
2695
+ * statistics.
2696
+ */getStats(selector){return this.pc.getStats(selector);}/**
2697
+ * Returns a string that describes the connections' ICE gathering state.
2698
+ *
2699
+ * @returns - The ICE gathering state.
2700
+ */get iceGatheringState(){return this.pc.iceGatheringState;}/**
2701
+ * Returns the type of a connection that has been established.
2702
+ *
2703
+ * @returns The connection type which would be `ConnectionType`.
2704
+ */getCurrentConnectionType(){return __awaiter$2(this,void 0,void 0,function*(){var _a;// make sure this method only can be called when the ice connection is established;
2705
2705
  var isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnectionState==='completed';if(!isIceConnected){throw new Error('Ice connection is not established');}var succeededLocalCandidateIds=new Set();// eslint-disable-next-line @typescript-eslint/no-explicit-any
2706
2706
  var localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.
2707
2707
  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.
@@ -2884,7 +2884,7 @@ opts=arguments[0];}else if(arguments.length===3&&typeof arguments[2]==='object')
2884
2884
  opts=arguments[2];}trace("on".concat(method),makeEvent(opts||''));return nativeMethod.apply(this,opts?[opts]:undefined).then(function(description){trace("on".concat(method,"OnSuccess"),makeEvent(description.sdp));if(args.length>0&&typeof args[0]==='function'){args[0].apply(null,[description]);return undefined;}return description;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>1&&typeof args[1]==='function'){args[1].apply(null,[err]);return;}throw err;});};}});['setLocalDescription','setRemoteDescription','addIceCandidate'].forEach(function(method){var nativeMethod=origPeerConnection.prototype[method];if(nativeMethod){origPeerConnection.prototype[method]=function(){var _this=this;var args=arguments;trace("on".concat(method),makeEvent(method==='addIceCandidate'?arguments[0]:arguments[0].sdp));return nativeMethod.apply(this,[arguments[0]]).then(function(){var _a;trace("on".concat(method,"OnSuccess"),makeEvent('success'));if(method.endsWith('Description')){if(!_this.transportEventsPreviouslyAdded){var senders=_this.getSenders();var _loop_1=function _loop_1(sender){if(sender.transport){sender.transport.addEventListener('statechange',function(){if(sender&&sender.transport){trace("ondtlsStateChange",makeEvent(sender.transport.state));}});sender.transport.addEventListener('error',function(error){var errorEvent=error;trace("ondtlsError",makeEvent(errorEvent.error.errorDetail));});if(sender.transport.iceTransport){sender.transport.iceTransport.addEventListener('selectedcandidatepairchange',function(){var _a,_b,_c,_d,_e,_f;if(sender.transport&&sender.transport.iceTransport){var pair=sender.transport.iceTransport.getSelectedCandidatePair();var localCandidate="".concat((_a=pair===null||pair===void 0?void 0:pair.local)===null||_a===void 0?void 0:_a.address,":").concat((_b=pair===null||pair===void 0?void 0:pair.local)===null||_b===void 0?void 0:_b.port,"/").concat((_c=pair===null||pair===void 0?void 0:pair.local)===null||_c===void 0?void 0:_c.protocol);var remoteCandidate="".concat((_d=pair===null||pair===void 0?void 0:pair.remote)===null||_d===void 0?void 0:_d.address,":").concat((_e=pair===null||pair===void 0?void 0:pair.remote)===null||_e===void 0?void 0:_e.port,"/").concat((_f=pair===null||pair===void 0?void 0:pair.remote)===null||_f===void 0?void 0:_f.protocol);var pairString="local: ".concat(localCandidate,", remote: ").concat(remoteCandidate);trace('onselectedCandidatePairChange',makeEvent(pairString));}});}_this.transportEventsPreviouslyAdded=true;if(pc.getConfiguration().bundlePolicy==='max-bundle'){return "break";}}};for(var _i=0,senders_1=senders;_i<senders_1.length;_i++){var sender=senders_1[_i];var state_1=_loop_1(sender);if(state_1==="break")break;}}if(!_this.sctpEventsPreviouslyAdded){// Some Firefox versions prior to 113 have sctp defined but not the events, so check both here.
2885
2885
  if((_a=_this.sctp)===null||_a===void 0?void 0:_a.addEventListener){_this.sctp.addEventListener('statechange',function(){trace('onsctpStateChange',makeEvent(_this.sctp.state));});_this.sctpEventsPreviouslyAdded=true;}}}if(args.length>=2&&typeof args[1]==='function'){args[1].apply(null,[]);return undefined;}return undefined;},function(err){trace("on".concat(method,"OnFailure"),makeEvent(err.toString()));if(args.length>=3&&typeof args[2]==='function'){args[2].apply(null,[err]);return undefined;}throw err;});};}});if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var origGetUserMedia_1=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);var gum=function gum(){trace('onnavigator.mediaDevices.getUserMedia',makeEvent(JSON.stringify(arguments[0])));return origGetUserMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getUserMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getUserMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getUserMedia=gum.bind(navigator.mediaDevices);}if(navigator.mediaDevices&&navigator.mediaDevices.getDisplayMedia){var origGetDisplayMedia_1=navigator.mediaDevices.getDisplayMedia.bind(navigator.mediaDevices);var gdm=function gdm(){trace('onnavigator.mediaDevices.getDisplayMedia',makeEvent(JSON.stringify(arguments[0])));return origGetDisplayMedia_1.apply(navigator.mediaDevices,arguments).then(function(stream){trace('onnavigator.mediaDevices.getDisplayMediaOnSuccess',makeEvent(JSON.stringify(dumpStream(stream))));return stream;},function(err){trace('onnavigator.mediaDevices.getDisplayMediaOnFailure',makeEvent(err.name));return Promise.reject(err);});};navigator.mediaDevices.getDisplayMedia=gdm.bind(navigator.mediaDevices);}var getStatsReport=function getStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,pc.getStats(null).then(function(res){// Convert from stats report to js Map in order to have values set in `statsPreProcessor`
2886
2886
  var statsMap=new Map();res.forEach(function(stats,key){return statsMap.set(key,stats);});return statsPreProcessor(statsMap).then(function(){var now=map2obj(statsMap);var base=deepCopy$1(now);// our new prev
2887
- var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&&param.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function 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 commonjsGlobal=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);var BrowserName;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName||(BrowserName={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName.SAFARI;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser.getParser(window.navigator.userAgent);var CapabilityState;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState||(CapabilityState={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{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;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(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){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecs(mediaDescription,['h264','opus','rtx']);if(mediaDescription.codecs.size===0){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');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.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_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
2887
+ var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;return Promise.resolve();});})];});});};var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}getStatsReport();},intervalTime);var forceStatsReport=function forceStatsReport(){return __awaiter(void 0,void 0,void 0,function(){return __generator(this,function(_a){return [2/*return*/,getStatsReport()];});});};return {forceStatsReport:forceStatsReport};};rtcStats_1=rtcstats.rtcStats=rtcStats;var NUM$1='\\d+';var SDP_TOKEN$1="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS$1='\\S+';var SP$1='\\s';var REST$1='.+';class Line$1{}var _a$5$1;class BandwidthLine$1 extends Line$1{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine$1.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine$1.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine$1(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5$1=BandwidthLine$1;BandwidthLine$1.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine$1.regex=new RegExp("^(".concat(_a$5$1.BW_TYPE_REGEX,"):(").concat(NUM$1,")"));class BundleGroupLine$1 extends Line$1{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine$1.regex);var mids=tokens[1].split(' ');return new BundleGroupLine$1(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine$1.regex=new RegExp("^group:BUNDLE (".concat(REST$1,")"));var _a$4$1;class CandidateLine$1 extends Line$1{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine$1.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine$1.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine$1(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4$1=CandidateLine$1;CandidateLine$1.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine$1.regex=new RegExp("^candidate:(".concat(_a$4$1.ICE_CHARS,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") typ (").concat(ANY_NON_WS$1,")(?: raddr (").concat(ANY_NON_WS$1,"))?(?: rport (").concat(NUM$1,"))?(?: (").concat(REST$1,"))?"));class ConnectionLine$1 extends Line$1{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine$1.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine$1(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));class ContentLine$1 extends Line$1{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine$1.regex.test(line)){return undefined;}var tokens=line.match(ContentLine$1.regex);var values=tokens[1].split(',');return new ContentLine$1(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine$1.regex=new RegExp("^content:(".concat(REST$1,")$"));class DirectionLine$1 extends Line$1{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine$1.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine$1.regex);var direction=tokens[1];return new DirectionLine$1(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine$1.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3$1;class ExtMapLine$1 extends Line$1{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine$1.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine$1(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3$1=ExtMapLine$1;ExtMapLine$1.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine$1.regex=new RegExp("^extmap:(".concat(NUM$1,")(?:/(").concat(_a$3$1.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS$1,")(?: (").concat(REST$1,"))?"));class FingerprintLine$1 extends Line$1{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine$1.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine$1.regex);var fingerprint=tokens[1];return new FingerprintLine$1(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine$1.regex=new RegExp("^fingerprint:(".concat(REST$1,")"));function parseFmtpParams$1(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([,/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&&param.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine$1 extends Line$1{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine$1.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine$1.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine$1(payloadType,parseFmtpParams$1(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine$1.regex=new RegExp("^fmtp:(".concat(NUM$1,") (").concat(REST$1,")"));class IceOptionsLine$1 extends Line$1{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine$1.regex);var options=tokens[1].split(' ');return new IceOptionsLine$1(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine$1.regex=new RegExp("^ice-options:(".concat(REST$1,")$"));class IcePwdLine$1 extends Line$1{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine$1.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine$1.regex);var pwd=tokens[1];return new IcePwdLine$1(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine$1.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS$1,")$"));class IceUfragLine$1 extends Line$1{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine$1.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine$1.regex);var ufrag=tokens[1];return new IceUfragLine$1(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine$1.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS$1,")$"));class MaxMessageSizeLine$1 extends Line$1{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine$1.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine$1.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine$1(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine$1.regex=new RegExp("^max-message-size:(".concat(NUM$1,")"));var _a$2$2;class MediaLine$1 extends Line$1{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine$1.regex.test(line)){return undefined;}var tokens=line.match(MediaLine$1.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine$1(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2$2=MediaLine$1;MediaLine$1.MEDIA_TYPE='audio|video|application';MediaLine$1.regex=new RegExp("^(".concat(_a$2$2.MEDIA_TYPE,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(REST$1,")"));class MidLine$1 extends Line$1{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine$1.regex.test(line)){return undefined;}var tokens=line.match(MidLine$1.regex);var mid=tokens[1];return new MidLine$1(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine$1.regex=new RegExp("^mid:(".concat(ANY_NON_WS$1,")$"));class OriginLine$1 extends Line$1{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine$1.regex.test(line)){return undefined;}var tokens=line.match(OriginLine$1.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine$1(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine$1.regex=new RegExp("^(".concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(NUM$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,") (").concat(ANY_NON_WS$1,")"));var _a$1$2;class RidLine$1 extends Line$1{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine$1.regex.test(line)){return undefined;}var tokens=line.match(RidLine$1.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine$1(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1$2=RidLine$1;RidLine$1.RID_ID="[\\w-]+";RidLine$1.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine$1.regex=new RegExp("^rid:(".concat(_a$1$2.RID_ID,") (").concat(_a$1$2.RID_DIRECTION,")(?:").concat(SP$1,"(").concat(REST$1,"))?"));class RtcpMuxLine$1 extends Line$1{static fromSdpLine(line){if(!RtcpMuxLine$1.regex.test(line)){return undefined;}return new RtcpMuxLine$1();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine$1.regex=/^rtcp-mux$/;class RtcpFbLine$1 extends Line$1{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine$1.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine$1(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine$1.regex=new RegExp("^rtcp-fb:(".concat(NUM$1,") (").concat(REST$1,")"));var _a$7;class RtpMapLine$1 extends Line$1{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine$1.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine$1.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine$1(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$7=RtpMapLine$1;RtpMapLine$1.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine$1.regex=new RegExp("^rtpmap:(".concat(NUM$1,") (").concat(_a$7.NON_SLASH_TOKEN,")/(").concat(_a$7.NON_SLASH_TOKEN,")(?:/(").concat(_a$7.NON_SLASH_TOKEN,"))?"));class SctpPortLine$1 extends Line$1{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine$1.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine$1.regex);var port=parseInt(tokens[1],10);return new SctpPortLine$1(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine$1.regex=new RegExp("^sctp-port:(".concat(NUM$1,")"));class SessionInformationLine$1 extends Line$1{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine$1.regex);var info=tokens[1];return new SessionInformationLine$1(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine$1.regex=new RegExp("(".concat(REST$1,")"));class SessionNameLine$1 extends Line$1{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine$1.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine$1.regex);var name=tokens[1];return new SessionNameLine$1(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine$1.regex=new RegExp("^(".concat(REST$1,")"));class SetupLine$1 extends Line$1{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SetupLine$1.regex);var setup=tokens[1];return new SetupLine$1(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine$1.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer$1{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList$1{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList$1();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer$1(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine$1 extends Line$1{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine$1.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine$1.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList$1.fromString(tokens[2]);var layerList2=new SimulcastLayerList$1();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList$1.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine$1(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine$1.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS$1,")(?: (send|recv) (").concat(ANY_NON_WS$1,"))?"));class SsrcLine$1 extends Line$1{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine$1.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine$1(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine$1.regex=new RegExp("^ssrc:(".concat(NUM$1,") (").concat(SDP_TOKEN$1,")(?::(").concat(SDP_TOKEN$1,")?(?: (").concat(ANY_NON_WS$1,"))?)?$"));class SsrcGroupLine$1 extends Line$1{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine$1.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine$1.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine$1(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine$1.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM$1).concat(SP$1,"*)+)"));class TimingLine$1 extends Line$1{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine$1.regex.test(line)){return undefined;}var tokens=line.match(TimingLine$1.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine$1(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine$1.regex=new RegExp("^(".concat(NUM$1,") (").concat(NUM$1,")"));class VersionLine$1 extends Line$1{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine$1.regex.test(line)){return undefined;}var tokens=line.match(VersionLine$1.regex);var version=parseInt(tokens[1],10);return new VersionLine$1(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine$1.regex=new RegExp("^(".concat(NUM$1,")$"));class UnknownLine$1 extends Line$1{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine$1.regex);var value=tokens[1];return new UnknownLine$1(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine$1.regex=new RegExp("(".concat(REST$1,")"));class IceInfo$1{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine$1){this.ufrag=line;return true;}if(line instanceof IcePwdLine$1){this.pwd=line;return true;}if(line instanceof IceOptionsLine$1){this.options=line;return true;}if(line instanceof CandidateLine$1){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription$1{constructor(type,port,protocol){this.iceInfo=new IceInfo$1();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine$1){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof MidLine$1){this.mid=line.mid;return true;}if(line instanceof FingerprintLine$1){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine$1){this.setup=line.setup;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof ContentLine$1){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine$1(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine$1(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine$1){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine$1){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$2{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine$1){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine$1){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine$1){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];if(this.name&&this.clockRate){lines.push(new RtpMapLine$1(this.pt,this.name,this.clockRate,this.encodingParams));}this.feedback.forEach(fb=>{lines.push(new RtcpFbLine$1(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine$1(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription$1 extends MediaDescription$1{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=new Map();this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$2(pt)));}toLines(){var lines=[];lines.push(new MediaLine$1(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine$1(this.fingerprint));}if(this.setup){lines.push(new SetupLine$1(this.setup));}if(this.mid){lines.push(new MidLine$1(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine$1());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine$1(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine$1){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine$1){this.direction=line.direction;return true;}if(line instanceof ExtMapLine$1){if(this.extMaps.has(line.id)){throw new Error("Tried to extension with duplicate ID: an extension already exists with ID ".concat(line.id));}this.extMaps.set(line.id,line);return true;}if(line instanceof RidLine$1){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine$1){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine$1){this.simulcast=line;return true;}if(line instanceof RtpMapLine$1||line instanceof FmtpLine$1||line instanceof RtcpFbLine$1){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine$1){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine$1){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}addExtension(_ref){var{uri,direction,attributes,id}=_ref;var getFirstFreeId=()=>{var freeId=1;for(;;){if(!this.extMaps.has(freeId)){break;}freeId+=1;}return freeId;};var extId=id||getFirstFreeId();if(this.extMaps.has(extId)){throw new Error("Extension with ID ".concat(id," already exists"));}if(extId===0){throw new Error("Extension ID 0 is reserved");}this.extMaps.set(extId,new ExtMapLine$1(extId,uri,direction,attributes));}}class SessionDescription$1{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine$1){this.version=line;return true;}if(line instanceof OriginLine$1){this.origin=line;return true;}if(line instanceof SessionNameLine$1){this.sessionName=line;return true;}if(line instanceof SessionInformationLine$1){this.information=line;return true;}if(line instanceof TimingLine$1){this.timing=line;return true;}if(line instanceof ConnectionLine$1){this.connection=line;return true;}if(line instanceof BandwidthLine$1){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine$1){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp$1{constructor(){this.session=new SessionDescription$1();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription$1);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar$1{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar$1 extends Grammar$1{constructor(){super();this.addParser('v',VersionLine$1.fromSdpLine);this.addParser('o',OriginLine$1.fromSdpLine);this.addParser('c',ConnectionLine$1.fromSdpLine);this.addParser('i',SessionInformationLine$1.fromSdpLine);this.addParser('m',MediaLine$1.fromSdpLine);this.addParser('s',SessionNameLine$1.fromSdpLine);this.addParser('t',TimingLine$1.fromSdpLine);this.addParser('b',BandwidthLine$1.fromSdpLine);this.addParser('a',RtpMapLine$1.fromSdpLine);this.addParser('a',RtcpFbLine$1.fromSdpLine);this.addParser('a',FmtpLine$1.fromSdpLine);this.addParser('a',DirectionLine$1.fromSdpLine);this.addParser('a',ExtMapLine$1.fromSdpLine);this.addParser('a',MidLine$1.fromSdpLine);this.addParser('a',IceUfragLine$1.fromSdpLine);this.addParser('a',IcePwdLine$1.fromSdpLine);this.addParser('a',IceOptionsLine$1.fromSdpLine);this.addParser('a',FingerprintLine$1.fromSdpLine);this.addParser('a',SetupLine$1.fromSdpLine);this.addParser('a',SctpPortLine$1.fromSdpLine);this.addParser('a',MaxMessageSizeLine$1.fromSdpLine);this.addParser('a',RtcpMuxLine$1.fromSdpLine);this.addParser('a',BundleGroupLine$1.fromSdpLine);this.addParser('a',ContentLine$1.fromSdpLine);this.addParser('a',RidLine$1.fromSdpLine);this.addParser('a',CandidateLine$1.fromSdpLine);this.addParser('a',SimulcastLine$1.fromSdpLine);this.addParser('a',SsrcLine$1.fromSdpLine);this.addParser('a',SsrcGroupLine$1.fromSdpLine);}}var DefaultSdpGrammar$1=new SdpGrammar$1();function isValidLine$1(line){return line.length>2;}function parseToModel$1(lines){var sdp=new Sdp$1();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine$1){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription$1(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription$1(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines$1(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine$1).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine$1.fromSdpLine(l);lines.push(result);});return lines;}function parse$1(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar$1;var lines=parseToLines$1(sdp,grammar);var parsed=parseToModel$1(lines);return parsed;}function disableRtcpFbValue(sdpOrAv,rtcpFbValue){var mediaDescriptions=sdpOrAv instanceof Sdp$1?sdpOrAv.avMedia:[sdpOrAv];mediaDescriptions.forEach(media=>{media.codecs.forEach(codec=>{codec.feedback=codec.feedback.filter(fb=>fb!==rtcpFbValue);});});}function disableTwcc(sdpOrAv){disableRtcpFbValue(sdpOrAv,'transport-cc');}function 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 commonjsGlobal=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);var BrowserName;(function(BrowserName){BrowserName["CHROME"]="Chrome";BrowserName["FIREFOX"]="Firefox";BrowserName["EDGE"]="Microsoft Edge";BrowserName["SAFARI"]="Safari";})(BrowserName||(BrowserName={}));class BrowserInfo{static getBrowserDetails(){return this.browser.getBrowser();}static getOSDetails(){return this.browser.getOS();}static getPlatformDetails(){return this.browser.getPlatform();}static getEngineDetails(){return this.browser.getEngine();}static isChrome(){return this.browser.getBrowserName()===BrowserName.CHROME;}static isFirefox(){return this.browser.getBrowserName()===BrowserName.FIREFOX;}static isEdge(){return this.browser.getBrowserName()===BrowserName.EDGE;}static isSafari(){return this.browser.getBrowserName()===BrowserName.SAFARI;}static isVersionGreaterThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">".concat(version)};return this.browser.satisfies(checkTree);}static isVersionGreaterThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:">=".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThan(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<".concat(version)};return this.browser.satisfies(checkTree);}static isVersionLessThanOrEqualTo(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"<=".concat(version)};return this.browser.satisfies(checkTree);}static isSubVersionOf(version){var browserName=this.browser.getBrowserName();var checkTree={[browserName]:"~".concat(version)};return this.browser.satisfies(checkTree);}}BrowserInfo.browser=Bowser.getParser(window.navigator.userAgent);var CapabilityState;(function(CapabilityState){CapabilityState["NOT_CAPABLE"]="not capable";CapabilityState["CAPABLE"]="capable";CapabilityState["UNKNOWN"]="unknown";})(CapabilityState||(CapabilityState={}));var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class JmpLine extends Line$1{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}var tokens=line.match(JmpLine.regex);var versions=tokens[1].split(',').filter(v=>v.length);return new JmpLine(versions);}constructor(versions){super();this.versions=versions;}toSdpLine(){return "a=jmp:".concat(this.versions.join(','));}}JmpLine.regex=/^jmp:((?:v\d+,?)+)/;class JmpStreamIdModeLine extends Line$1{constructor(streamIdMode){super();this.streamIdMode=streamIdMode;}static fromSdpLine(line){if(!JmpStreamIdModeLine.regex.test(line)){return undefined;}var tokens=line.match(JmpStreamIdModeLine.regex);var mode=tokens[1];return new JmpStreamIdModeLine(mode);}toSdpLine(){return "a=jmp-stream-id-mode:".concat(this.streamIdMode);}}JmpStreamIdModeLine.regex=/^jmp-stream-id-mode:(MID-RID|SSRC)$/;class JmpSourceLine extends Line$1{constructor(source,csi){super();this.source=source;this.csi=csi;}static fromSdpLine(line){if(!JmpSourceLine.regex.test(line)){return undefined;}var tokens=line.match(JmpSourceLine.regex);var source=tokens[1];var csi=tokens[2];return new JmpSourceLine(source,csi);}toSdpLine(){var line="a=jmp-source:".concat(this.source);if(this.csi){line+=" csi=".concat(this.csi);}return line;}}JmpSourceLine.regex=new RegExp("^jmp-source:(".concat(ANY_NON_WS$1,") (?:csi=(").concat(ANY_NON_WS$1,"))"));DefaultSdpGrammar$1.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar$1.addParser('a',JmpStreamIdModeLine.fromSdpLine);function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}var ipv4Regex=/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.)(\d{1,3}\b)/g;var ipv6Regex=/(\b[\da-fA-F]{1,4}(:[\da-fA-F]{1,4}){7}\b)/g;function matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMediaDescription=>{if(!offerMediaDescription.mid){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Named media groups can only be set for audio.");}var answerMediaDescription=parsedAnswer.media.find(m=>m.mid===offerMediaDescription.mid);if(answerMediaDescription){return answerMediaDescription;}if(!(offerMediaDescription instanceof AvMediaDescription$1)){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer is missing a non-AV media description for MID ".concat(offerMediaDescription.mid,"."));}var startingMediaDescription=parsedAnswer.avMedia.find(m=>m.type===offerMediaDescription.type);if(!startingMediaDescription){logErrorAndThrow(exports.WcmeErrorType.OFFER_ANSWER_MISMATCH,"Answer has no media description of type ".concat(offerMediaDescription.type,", can't generate synthetic answer media description for MID ").concat(offerMediaDescription.mid,"."));}var fakeCorrespondingDescription=deepCopy(startingMediaDescription);fakeCorrespondingDescription.mid=offerMediaDescription.mid;fakeCorrespondingDescription.simulcast=undefined;fakeCorrespondingDescription.bandwidth=undefined;if(offerMediaDescription.direction==='sendrecv'||offerMediaDescription.direction==='sendonly'){fakeCorrespondingDescription.direction='recvonly';}if(offerMediaDescription.direction==='recvonly'){fakeCorrespondingDescription.direction='sendonly';}return fakeCorrespondingDescription;});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(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){mediaDescription.iceInfo.candidates=[];mediaDescription.addLine(new CandidateLine$1('dummy1',1,'udp',3,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy2',1,'tcp',2,'0.0.0.0',9,'host'));mediaDescription.addLine(new CandidateLine$1('dummy3',1,'udp',1,'0.0.0.0',9,'relay'));}function maskIp(sdp){var maskedSdp=sdp.replace(ipv4Regex,(match,firstOctets)=>{return "".concat(firstOctets,"0");});maskedSdp=maskedSdp.replace(ipv6Regex,match=>{return match.replace(/:[\da-fA-F]{1,4}$/,':0');});return maskedSdp;}function removeMidRidExtensions(mediaDescription){mediaDescription.extMaps.forEach((extMapLine,extId,extMap)=>{if(/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri)){extMap.delete(extId);}});}function addVlaExtension(mediaDescription){var vlaExtensionUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(![...mediaDescription.extMaps.values()].some(extMapLine=>extMapLine.uri===vlaExtensionUri)){mediaDescription.addExtension({uri:vlaExtensionUri});}}function applyFormatParameters(mediaDescription,paramsMap){paramsMap.forEach((value,param)=>{[...mediaDescription.codecs.values()].filter(ci=>ci.name==='H264'||ci.name==='opus').forEach(ci=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class EgressSdpMunger{constructor(){this.streamIds=[];this.customCodecParameters=new Map();}reset(){this.streamIds=[];}mungeLocalDescription(mediaDescription,options){var _a;retainCodecs(mediaDescription,['h264','opus','rtx']);if(mediaDescription.codecs.size===0){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_MISSING_CODECS,"No codecs present in m-line with MID ".concat(mediaDescription.mid," after filtering."));}mediaDescription.rids=[];mediaDescription.simulcast=undefined;removeMidRidExtensions(mediaDescription);if(options.simulcastEnabled){addVlaExtension(mediaDescription);}var numStreams=options.simulcastEnabled?3:1;if(!this.streamIds.length){if(mediaDescription.ssrcs.length){var ssrcs=[...new Set(mediaDescription.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mediaDescription.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRC present in SSRC groups is missing from SSRC lines.');}});var rtxSsrcGroups=mediaDescription.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,"Expected ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length,"."));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mediaDescription.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups.');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){logErrorAndThrow(exports.WcmeErrorType.SDP_MUNGE_FAILED,'Multiple RTX SSRC groups but no simulcast SSRC group found.');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(options.rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mediaDescription.ssrcs=[];mediaDescription.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtpSsrc,'msid','-',"".concat(mediaDescription.mid)));if(options.rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mediaDescription.addLine(new SsrcLine$1(rtxSsrc,'msid','-',"".concat(mediaDescription.mid)));mediaDescription.addLine(new SsrcGroupLine$1('FID',[rtpSsrc,rtxSsrc]));}});if(options.simulcastEnabled){mediaDescription.addLine(new SsrcGroupLine$1('SIM',this.streamIds.map(streamId=>streamId.ssrc)));}applyFormatParameters(mediaDescription,this.customCodecParameters);if(options.twccDisabled){disableTwcc(mediaDescription);}}mungeLocalDescriptionForRemoteServer(mediaDescription,mediaContent,csi){injectContentType(mediaDescription,mediaContent);injectJmpAttributes(mediaDescription,csi,'SSRC');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.bandwidth=undefined;[...mediaDescription.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}setCodecParameters(parameters){Object.entries(parameters).forEach(_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
2888
2888
  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
2889
2889
  // added to it. This is a useful default which helps finding memory leaks.
2890
2890
  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
@@ -4907,7 +4907,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
4907
4907
  * // arg1 now equals 'three'
4908
4908
  * callback(null, 'done');
4909
4909
  * }
4910
- */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$1(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 NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};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.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.metadata={lastRequestedUpdateTimestampsMap: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;}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(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.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}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.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,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();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(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 __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){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);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled});}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$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(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(_ref6=>{var[mediaType,transceiver]=_ref6;return __awaiter$1(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(_ref7=>{var[mediaType,transceivers]=_ref7;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(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;});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["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,disableAudioTwcc: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.currentCreateOfferId=0;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.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}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.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=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();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});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.active=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;}try{logger.info("Sending JMP message (size: ".concat(msg.length,"): ").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(msg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(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));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});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){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}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)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...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:',e.data);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(JSON.stringify(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=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){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,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}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};});}createReceiveTransceiver(mediaType){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);recvOnlyTransceiver.metadata.mediaType=mediaType;recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}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){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"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){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(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");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(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(BrowserInfo.isFirefox()){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(BrowserInfo.isFirefox()){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(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"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){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"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(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>compareStreamIds(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};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$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}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);}}
4910
+ */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$1(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 NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};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.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.metadata={lastRequestedUpdateTimestampsMap: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;}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(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.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}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.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,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();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(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 __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){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);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled});}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$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(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(_ref6=>{var[mediaType,transceiver]=_ref6;return __awaiter$1(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(_ref7=>{var[mediaType,transceivers]=_ref7;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(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;});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["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";MultistreamConnectionEventNames["IceCandidateError"]="icecandidateerror";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,disableAudioTwcc: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.currentCreateOfferId=0;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.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}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.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.active=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();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});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.active=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;}try{logger.info("Sending JMP message (size: ".concat(msg.length,"): ").concat(msg));this.dataChannel.send(msg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(msg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(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));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});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){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}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)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...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:',e.data);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(JSON.stringify(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=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){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,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}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};});}createReceiveTransceiver(mediaType){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);recvOnlyTransceiver.metadata.mediaType=mediaType;recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}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){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"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){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(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");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(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(BrowserInfo.isFirefox()){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(BrowserInfo.isFirefox()){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(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"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){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"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(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>compareStreamIds(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};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$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}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);}}
4911
4911
 
4912
4912
  var defaultLogger = {
4913
4913
  info: function info() {
@@ -6484,6 +6484,7 @@ exports.Event = void 0;
6484
6484
  Event["REMOTE_SDP_OFFER_PROCESSED"] = "remoteSdpOffer:processed";
6485
6485
  Event["LOCAL_SDP_OFFER_GENERATED"] = "localSdpOffer:processed";
6486
6486
  Event["LOCAL_SDP_ANSWER_GENERATED"] = "localSdpAnswer:processed";
6487
+ Event["ICE_CANDIDATE_ERROR"] = "iceCandidate:error";
6487
6488
  })(exports.Event || (exports.Event = {}));
6488
6489
  exports.RemoteTrackType = void 0;
6489
6490
  (function (RemoteTrackType) {
@@ -6539,6 +6540,12 @@ class MediaConnection extends EventEmitter$5 {
6539
6540
  this.pc.ontrack = this.onTrack.bind(this);
6540
6541
  this.pc.oniceconnectionstatechange = this.onIceConnectionStateChange.bind(this);
6541
6542
  this.pc.onconnectionstatechange = this.onPeerConnectionStateChange.bind(this);
6543
+ this.pc.addEventListener('icecandidateerror', ev => {
6544
+ var event = ev;
6545
+ this.emit(exports.Event.ICE_CANDIDATE_ERROR, {
6546
+ error: event
6547
+ });
6548
+ });
6542
6549
  }
6543
6550
  log(action, description) {
6544
6551
  getLogger().info("".concat(this.id, ":").concat(action, " ").concat(description));
@@ -14987,6 +14994,7 @@ class RoapMediaConnection extends EventEmitter$5 {
14987
14994
  this.forwardEvent(mediaConnection, exports.Event.LOCAL_SDP_OFFER_GENERATED);
14988
14995
  this.forwardEvent(mediaConnection, exports.Event.DTMF_TONE_CHANGED);
14989
14996
  this.forwardEvent(mediaConnection, exports.Event.ICE_GATHERING_STATE_CHANGED);
14997
+ this.forwardEvent(mediaConnection, exports.Event.ICE_CANDIDATE_ERROR);
14990
14998
  return mediaConnection;
14991
14999
  }
14992
15000
  createRoap(debugId, seq) {
@@ -15184,6 +15192,11 @@ class MultistreamRoapMediaConnection extends EventEmitter$6 {
15184
15192
  multistreamConnection.on(MultistreamConnectionEventNames.NegotiationNeeded, () => {
15185
15193
  this.onNegotiationNeeded();
15186
15194
  });
15195
+ multistreamConnection.on(MultistreamConnectionEventNames.IceCandidateError, event => {
15196
+ this.emit(exports.Event.ICE_CANDIDATE_ERROR, {
15197
+ error: event
15198
+ });
15199
+ });
15187
15200
  multistreamConnection.setMetricsCallback(metricsCallback);
15188
15201
  return multistreamConnection;
15189
15202
  }