@webex/internal-media-core 1.38.0 → 1.38.1
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 +5 -3
- package/dist/esm/index.js +5 -3
- package/package.json +2 -2
package/dist/cjs/index.js
CHANGED
|
@@ -4520,7 +4520,9 @@ if(this.effects.size>0){yield Promise.all(Array.from(this.effects.values(),effec
|
|
|
4520
4520
|
* @returns The VideoContentHint for this track.
|
|
4521
4521
|
*/get videoContentHint(){return this._videoContentHint;}}/**
|
|
4522
4522
|
* Represents a local track for a microphone source.
|
|
4523
|
-
*/class LocalMicrophoneTrack extends LocalTrack{}
|
|
4523
|
+
*/class LocalMicrophoneTrack extends LocalTrack{}/**
|
|
4524
|
+
* Represents a local track for system audio.
|
|
4525
|
+
*/class LocalSystemAudioTrack extends LocalTrack{}// Overall connection state (based on the ICE and DTLS connection states)
|
|
4524
4526
|
exports.ConnectionState = void 0;(function(ConnectionState){ConnectionState["New"]="New";ConnectionState["Closed"]="Closed";ConnectionState["Connected"]="Connected";ConnectionState["Connecting"]="Connecting";ConnectionState["Disconnected"]="Disconnected";ConnectionState["Failed"]="Failed";})(exports.ConnectionState||(exports.ConnectionState={}));var ConnectionStateEvents;(function(ConnectionStateEvents){ConnectionStateEvents["ConnectionStateChanged"]="ConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
|
|
4525
4527
|
* Listens on the connection's ICE and DTLS state changes and emits a single
|
|
4526
4528
|
* event that summarizes all the internal states into a single overall connection state.
|
|
@@ -5323,7 +5325,7 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
|
|
|
5323
5325
|
// EventEmitters, we do not listen for `error` events here.
|
|
5324
5326
|
emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
|
|
5325
5327
|
// have to do it manually.
|
|
5326
|
-
if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}exports.ReceiveSlotEvents = void 0;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(exports.ReceiveSlotEvents||(exports.ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this._stream=new MediaStream([track]);this._sourceState='no source';this.addTrackHandlers(track);}addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);}handleTrackMuted(){this.emit(exports.ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(exports.ReceiveSlotEvents.MediaStarted);}removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);}replaceTrack(newTrack){var _a;var trackToRemove=(_a=this._stream.getTracks())===null||_a===void 0?void 0:_a[0];if(trackToRemove){this._stream.removeTrack(trackToRemove);this.removeTrackHandlers(trackToRemove);}this.addTrackHandlers(newTrack);this._stream.addTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(exports.ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.getTracks().forEach(t=>{this.removeTrackHandlers(t);});}get id(){return this._idGetter();}get stream(){return this._stream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=exports.ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver){this._rtcRtpTransceiver=rtcRtpTransceiver;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}get mid(){return this._rtcRtpTransceiver.mid;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,idGetter){super(rtcRtpTransceiver);this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return idGetter(this._rtcRtpTransceiver.mid);},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}}ReceiveOnlyTransceiver.rid='1';function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}function matchMlinesInAnswer(parsedOffer,parsedAnswer,streamSignalerManager){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMline=>{if(!offerMline.mid){throw new Error("Offer mline is missing MID");}var answerMline=parsedAnswer.media.find(m=>m.mid===offerMline.mid);if(answerMline){if(answerMline instanceof AvMediaDescription){[...answerMline.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}return answerMline;}if(!(offerMline instanceof AvMediaDescription)){throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));}var startingMline=parsedAnswer.avMedia.find(m=>m.type===offerMline.type);if(!startingMline){throw new Error("Answer has no mline of type ".concat(offerMline.type,", can't generate synthetic answer mline for mid ").concat(offerMline.mid));}var fakeCorrespondingMline=deepCopy(startingMline);fakeCorrespondingMline.mid=offerMline.mid;fakeCorrespondingMline.simulcast=undefined;if(offerMline.direction==='sendrecv'||offerMline.direction==='sendonly'){fakeCorrespondingMline.direction='recvonly';}if(offerMline.direction==='recvonly'){fakeCorrespondingMline.direction='sendonly';var ingressSignaler=streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);}return fakeCorrespondingMline;});}class JmpLine extends Line{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{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{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,") (?:csi=(").concat(ANY_NON_WS,"))"));DefaultSdpGrammar.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpStreamIdModeLine.fromSdpLine);function getMediaTypeForMline(mLine){var _a,_b;var mediaFamily;if(mLine.type.toLowerCase()===MediaFamily.Audio.toLowerCase()){mediaFamily=MediaFamily.Audio;}else if(mLine.type.toLowerCase()===MediaFamily.Video.toLowerCase()){mediaFamily=MediaFamily.Video;}else {throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));}var mediaContent;if((_b=(_a=mLine.content)===null||_a===void 0?void 0:_a.values)===null||_b===void 0?void 0:_b.some(v=>v.toLowerCase()==='slides')){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}return getMediaType(mediaFamily,mediaContent);}function filterCodecs(parsedSdp,allowedCodecs){var allowedLowerCase=allowedCodecs.map(s=>s.toLowerCase());parsedSdp.avMedia.map(m=>[...m.codecs.values()].map(c=>c.name)).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(c=>removeCodec(parsedSdp,c));}function setMaxBandwidth(parsedSdp,maxBandwidth){parsedSdp.avMedia.forEach(mline=>{mline.bandwidth=new BandwidthLine('TIAS',maxBandwidth);});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine(videoContentMids));}}}function filterRecvOnlyMlines(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(mLine=>{if(mLine instanceof ApplicationMediaDescription||mLine instanceof AvMediaDescription&&mLine.direction!=='recvonly'){filteredMids.push(mLine.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentTypes(sdp,contentTypeMap){contentTypeMap.forEach((mediaContent,mid)=>{var mline=sdp.media.find(m=>m.mid===mid);if(!mline){throw new Error("Error trying to set content type for mid ".concat(mid,": not found in SDP"));}if(mediaContent===MediaContent$1.Slides){mline.addLine(new ContentLine(['slides']));}});}function injectJmpAttributes(parsedSdp,csiMap,streamSignalingMode){parsedSdp.avMedia.filter(mLine=>mLine.direction==='sendrecv'||mLine.direction==='inactive').forEach(mLine=>{if(!mLine.otherLines.find(line=>line instanceof JmpLine)){mLine.addLine(new JmpLine(['v1']));}if(!mLine.otherLines.find(line=>line instanceof JmpSourceLine)){var mediaType=getMediaTypeForMline(mLine);var csi=csiMap.get(mediaType);if(!csi){throw new Error("Unable to find CSI for MediaType ".concat(mediaType));}mLine.addLine(new JmpSourceLine(mLine.mid,csi.toString()));}if(!mLine.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));}});}function injectDummyCandidates(parsedSdp){parsedSdp.media.forEach(mLine=>{if(mLine.iceInfo.candidates.length===0){mLine.addLine(new CandidateLine('dummy1',1,'udp',1,'0.0.0.0',1,'host'));mLine.addLine(new CandidateLine('dummy2',2,'tcp',2,'0.0.0.0',2,'host'));mLine.addLine(new CandidateLine('dummy3',3,'udp',3,'0.0.0.0',3,'relay'));}});}function hasSimulcast(av){return !!av.simulcast||av.ssrcGroups.map(sg=>sg.semantics).some(sem=>sem==='SIM');}function addVlaExtension(mLine){var vlaUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(mLine.extMaps.findIndex(extMapLine=>extMapLine.uri===vlaUri)===-1){var maxIdValue=Math.max(...mLine.extMaps.map(extMapLine=>extMapLine.id),0);var videoLayersAllocationLine=new ExtMapLine(maxIdValue+1,vlaUri,undefined);mLine.extMaps.push(videoLayersAllocationLine);}}class SendOnlyTransceiver extends Transceiver{constructor(rtcpRtpTransceiver,csi){super(rtcpRtpTransceiver);this.requested=false;this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replacePublishedTrack(newTrack){var _a,_b;return __awaiter(this,void 0,void 0,function*(){(_a=this.publishedTrack)===null||_a===void 0?void 0:_a.off(exports.LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.setPublished(false);if(this.requested){yield this.sender.replaceTrack((newTrack===null||newTrack===void 0?void 0:newTrack.underlyingTrack)||null);}this.publishedTrack=newTrack;newTrack===null||newTrack===void 0?void 0:newTrack.on(exports.LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);newTrack===null||newTrack===void 0?void 0:newTrack.setPublished(true);});}setTrackRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null:null;yield this.sender.replaceTrack(newTrack);}});}publishTrack(track){return this.replacePublishedTrack(track);}unpublishTrack(){return this.replacePublishedTrack();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;return this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection;}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,scaleDownRatio}=encodingParams;if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class RidIngressStreamSignaler{constructor(mid){this.mid=mid;}getReceiverId(){return {mid:this.mid,rid:'1'};}signalLocalStreams(mLine){}signalRemoteStreams(mLine){}}class RidEgressStreamSignaler{constructor(mid){this.streamIds=[];this.mid=mid;}signalStreams(simulcastEnabled,_rtxEnabled,mLine){mLine.ssrcGroups=[];if(this.streamIds.length===0){if(simulcastEnabled){this.streamIds=[{mid:this.mid,rid:'low'},{mid:this.mid,rid:'medium'},{mid:this.mid,rid:'high'}];}else {this.streamIds=[{mid:this.mid}];}}if(simulcastEnabled){mLine.rids=this.streamIds.map((streamId,index)=>new RidLine(streamId.rid,'send',"max-fs=".concat(simulcastMaxFrameSizes[index])));mLine.simulcast=new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'),new SimulcastLayerList());addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class SsrcIngressStreamSignaler{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}signalLocalStreams(_mLine){}signalRemoteStreams(mLine){mLine.addLine(new SsrcLine(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mLine)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mLine.addLine(new SsrcLine(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[this.ssrc,this.rtxSsrc]));}}}class SsrcEgressStreamSignaler{constructor(){this.streamIds=[];}signalStreams(simulcastEnabled,rtxEnabled,mLine){var _a;mLine.rids=[];mLine.simulcast=undefined;mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));var numStreams=simulcastEnabled?3:1;if(!this.streamIds.length){if(mLine.ssrcs.length){var ssrcs=[...new Set(mLine.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mLine.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){throw new Error('SSRC present in SSRC groups is missing from SSRC lines');}});var rtxSsrcGroups=mLine.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){throw new Error("Expect ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mLine.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){throw new Error('SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){throw new Error('Multiple RTX SSRC groups but no simulcast SSRC group found');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mLine.ssrcs=[];mLine.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mLine.addLine(new SsrcLine(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtpSsrc,'msid','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mLine.addLine(new SsrcLine(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mLine.addLine(new SsrcGroupLine('SIM',this.streamIds.map(streamId=>streamId.ssrc)));addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}class StreamSignalerManager{constructor(streamSignalingMode){this.egressStreamSignalersByMid=new Map();this.ingressStreamsSignalersByMid=new Map();this.ingressStreamSignalingMode=streamSignalingMode;this.egressStreamSignalingMode=streamSignalingMode;}getOrCreateEgressStreamSignaler(mid){var existing=this.getEgressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.egressStreamSignalingMode==='MID-RID'){newSignaler=new RidEgressStreamSignaler(mid);}else {newSignaler=new SsrcEgressStreamSignaler();}this.egressStreamSignalersByMid.set(mid,newSignaler);return newSignaler;}getEgressStreamSignalerOrThrow(mid){var existing=this.getEgressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));}return existing;}getEgressStreamSignaler(mid){return this.egressStreamSignalersByMid.get(mid);}getOrCreateIngressStreamSignaler(mid){var existing=this.getIngressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.ingressStreamSignalingMode==='MID-RID'){newSignaler=new RidIngressStreamSignaler(mid);}else {newSignaler=new SsrcIngressStreamSignaler();}this.ingressStreamsSignalersByMid.set(mid,newSignaler);return newSignaler;}getIngressStreamSignaler(mid){return this.ingressStreamsSignalersByMid.get(mid);}getIngressStreamSignalerOrThrow(mid){var existing=this.getIngressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));}return existing;}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref3=>{var[mediaType,transceiver]=_ref3;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref4=>{var[mediaType,transceivers]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
|
|
5328
|
+
if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}exports.ReceiveSlotEvents = void 0;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(exports.ReceiveSlotEvents||(exports.ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this._stream=new MediaStream([track]);this._sourceState='no source';this.addTrackHandlers(track);}addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);}handleTrackMuted(){this.emit(exports.ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(exports.ReceiveSlotEvents.MediaStarted);}removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);}replaceTrack(newTrack){var _a;var trackToRemove=(_a=this._stream.getTracks())===null||_a===void 0?void 0:_a[0];if(trackToRemove){this._stream.removeTrack(trackToRemove);this.removeTrackHandlers(trackToRemove);}this.addTrackHandlers(newTrack);this._stream.addTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(exports.ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.getTracks().forEach(t=>{this.removeTrackHandlers(t);});}get id(){return this._idGetter();}get stream(){return this._stream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=exports.ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver){this._rtcRtpTransceiver=rtcRtpTransceiver;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}get mid(){return this._rtcRtpTransceiver.mid;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,idGetter){super(rtcRtpTransceiver);this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return idGetter(this._rtcRtpTransceiver.mid);},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}}ReceiveOnlyTransceiver.rid='1';function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}function matchMlinesInAnswer(parsedOffer,parsedAnswer,streamSignalerManager){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMline=>{if(!offerMline.mid){throw new Error("Offer mline is missing MID");}var answerMline=parsedAnswer.media.find(m=>m.mid===offerMline.mid);if(answerMline){if(answerMline instanceof AvMediaDescription){[...answerMline.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}return answerMline;}if(!(offerMline instanceof AvMediaDescription)){throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));}var startingMline=parsedAnswer.avMedia.find(m=>m.type===offerMline.type);if(!startingMline){throw new Error("Answer has no mline of type ".concat(offerMline.type,", can't generate synthetic answer mline for mid ").concat(offerMline.mid));}var fakeCorrespondingMline=deepCopy(startingMline);fakeCorrespondingMline.mid=offerMline.mid;fakeCorrespondingMline.simulcast=undefined;if(offerMline.direction==='sendrecv'||offerMline.direction==='sendonly'){fakeCorrespondingMline.direction='recvonly';}if(offerMline.direction==='recvonly'){fakeCorrespondingMline.direction='sendonly';var ingressSignaler=streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);}return fakeCorrespondingMline;});}class JmpLine extends Line{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{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{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,") (?:csi=(").concat(ANY_NON_WS,"))"));DefaultSdpGrammar.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpStreamIdModeLine.fromSdpLine);function getMediaTypeForMline(mLine){var _a,_b;var mediaFamily;if(mLine.type.toLowerCase()===MediaFamily.Audio.toLowerCase()){mediaFamily=MediaFamily.Audio;}else if(mLine.type.toLowerCase()===MediaFamily.Video.toLowerCase()){mediaFamily=MediaFamily.Video;}else {throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));}var mediaContent;if((_b=(_a=mLine.content)===null||_a===void 0?void 0:_a.values)===null||_b===void 0?void 0:_b.some(v=>v.toLowerCase()==='slides')){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}return getMediaType(mediaFamily,mediaContent);}function filterCodecs(parsedSdp,allowedCodecs){var allowedLowerCase=allowedCodecs.map(s=>s.toLowerCase());parsedSdp.avMedia.map(m=>[...m.codecs.values()].map(c=>c.name)).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(c=>removeCodec(parsedSdp,c));}function setMaxBandwidth(parsedSdp,maxBandwidth){parsedSdp.avMedia.forEach(mline=>{mline.bandwidth=new BandwidthLine('TIAS',maxBandwidth);});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType.AudioMain);var videoMainMids=midMap.get(MediaType.VideoMain);var audioContentMids=midMap.get(MediaType.AudioSlides);var videoContentMids=midMap.get(MediaType.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine(videoContentMids));}}}function filterRecvOnlyMlines(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(mLine=>{if(mLine instanceof ApplicationMediaDescription||mLine instanceof AvMediaDescription&&mLine.direction!=='recvonly'){filteredMids.push(mLine.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentTypes(sdp,contentTypeMap){contentTypeMap.forEach((mediaContent,mid)=>{var mline=sdp.media.find(m=>m.mid===mid);if(!mline){throw new Error("Error trying to set content type for mid ".concat(mid,": not found in SDP"));}if(mediaContent===MediaContent$1.Slides){mline.addLine(new ContentLine(['slides']));}});}function injectJmpAttributes(parsedSdp,csiMap,streamSignalingMode){parsedSdp.avMedia.filter(mLine=>mLine.direction==='sendrecv'||mLine.direction==='inactive').forEach(mLine=>{if(!mLine.otherLines.find(line=>line instanceof JmpLine)){mLine.addLine(new JmpLine(['v1']));}if(!mLine.otherLines.find(line=>line instanceof JmpSourceLine)){var mediaType=getMediaTypeForMline(mLine);var csi=csiMap.get(mediaType);if(!csi){throw new Error("Unable to find CSI for MediaType ".concat(mediaType));}mLine.addLine(new JmpSourceLine(mLine.mid,csi.toString()));}if(!mLine.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));}});}function injectDummyCandidates(parsedSdp){parsedSdp.media.forEach(mLine=>{if(mLine.iceInfo.candidates.length===0){mLine.addLine(new CandidateLine('dummy1',1,'udp',1,'0.0.0.0',1,'host'));mLine.addLine(new CandidateLine('dummy2',2,'tcp',2,'0.0.0.0',2,'host'));mLine.addLine(new CandidateLine('dummy3',3,'udp',3,'0.0.0.0',3,'relay'));}});}function hasSimulcast(av){return !!av.simulcast||av.ssrcGroups.map(sg=>sg.semantics).some(sem=>sem==='SIM');}function addVlaExtension(mLine){var vlaUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(mLine.extMaps.findIndex(extMapLine=>extMapLine.uri===vlaUri)===-1){var maxIdValue=Math.max(...mLine.extMaps.map(extMapLine=>extMapLine.id),0);var videoLayersAllocationLine=new ExtMapLine(maxIdValue+1,vlaUri,undefined);mLine.extMaps.push(videoLayersAllocationLine);}}class SendOnlyTransceiver extends Transceiver{constructor(rtcpRtpTransceiver,csi){super(rtcpRtpTransceiver);this.requested=false;this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replacePublishedTrack(newTrack){var _a,_b;return __awaiter(this,void 0,void 0,function*(){(_a=this.publishedTrack)===null||_a===void 0?void 0:_a.off(exports.LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.setPublished(false);if(this.requested){yield this.sender.replaceTrack((newTrack===null||newTrack===void 0?void 0:newTrack.underlyingTrack)||null);}this.publishedTrack=newTrack;newTrack===null||newTrack===void 0?void 0:newTrack.on(exports.LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);newTrack===null||newTrack===void 0?void 0:newTrack.setPublished(true);});}setTrackRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null:null;yield this.sender.replaceTrack(newTrack);}});}publishTrack(track){return this.replacePublishedTrack(track);}unpublishTrack(){return this.replacePublishedTrack();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;return this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection;}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,scaleDownRatio}=encodingParams;if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class RidIngressStreamSignaler{constructor(mid){this.mid=mid;}getReceiverId(){return {mid:this.mid,rid:'1'};}signalLocalStreams(mLine){}signalRemoteStreams(mLine){}}class RidEgressStreamSignaler{constructor(mid){this.streamIds=[];this.mid=mid;}signalStreams(simulcastEnabled,_rtxEnabled,mLine){mLine.ssrcGroups=[];if(this.streamIds.length===0){if(simulcastEnabled){this.streamIds=[{mid:this.mid,rid:'low'},{mid:this.mid,rid:'medium'},{mid:this.mid,rid:'high'}];}else {this.streamIds=[{mid:this.mid}];}}if(simulcastEnabled){mLine.rids=this.streamIds.map((streamId,index)=>new RidLine(streamId.rid,'send',"max-fs=".concat(simulcastMaxFrameSizes[index])));mLine.simulcast=new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'),new SimulcastLayerList());addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class SsrcIngressStreamSignaler{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}signalLocalStreams(mLine){mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));}signalRemoteStreams(mLine){mLine.addLine(new SsrcLine(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mLine)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mLine.addLine(new SsrcLine(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[this.ssrc,this.rtxSsrc]));}}}class SsrcEgressStreamSignaler{constructor(){this.streamIds=[];}signalStreams(simulcastEnabled,rtxEnabled,mLine){var _a;mLine.rids=[];mLine.simulcast=undefined;mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));var numStreams=simulcastEnabled?3:1;if(!this.streamIds.length){if(mLine.ssrcs.length){var ssrcs=[...new Set(mLine.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mLine.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){throw new Error('SSRC present in SSRC groups is missing from SSRC lines');}});var rtxSsrcGroups=mLine.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){throw new Error("Expect ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mLine.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){throw new Error('SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){throw new Error('Multiple RTX SSRC groups but no simulcast SSRC group found');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mLine.ssrcs=[];mLine.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mLine.addLine(new SsrcLine(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtpSsrc,'msid','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mLine.addLine(new SsrcLine(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mLine.addLine(new SsrcGroupLine('SIM',this.streamIds.map(streamId=>streamId.ssrc)));addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}class StreamSignalerManager{constructor(streamSignalingMode){this.egressStreamSignalersByMid=new Map();this.ingressStreamsSignalersByMid=new Map();this.ingressStreamSignalingMode=streamSignalingMode;this.egressStreamSignalingMode=streamSignalingMode;}getOrCreateEgressStreamSignaler(mid){var existing=this.getEgressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.egressStreamSignalingMode==='MID-RID'){newSignaler=new RidEgressStreamSignaler(mid);}else {newSignaler=new SsrcEgressStreamSignaler();}this.egressStreamSignalersByMid.set(mid,newSignaler);return newSignaler;}getEgressStreamSignalerOrThrow(mid){var existing=this.getEgressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));}return existing;}getEgressStreamSignaler(mid){return this.egressStreamSignalersByMid.get(mid);}getOrCreateIngressStreamSignaler(mid){var existing=this.getIngressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.ingressStreamSignalingMode==='MID-RID'){newSignaler=new RidIngressStreamSignaler(mid);}else {newSignaler=new SsrcIngressStreamSignaler();}this.ingressStreamsSignalersByMid.set(mid,newSignaler);return newSignaler;}getIngressStreamSignaler(mid){return this.ingressStreamsSignalersByMid.get(mid);}getIngressStreamSignalerOrThrow(mid){var existing=this.getIngressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));}return existing;}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref3=>{var[mediaType,transceiver]=_ref3;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref4=>{var[mediaType,transceivers]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
|
|
5327
5329
|
* Creates a continuation function with some arguments already applied.
|
|
5328
5330
|
*
|
|
5329
5331
|
* Useful as a shorthand when combined with other control flow functions. Any
|
|
@@ -7337,7 +7339,7 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
|
|
|
7337
7339
|
// `options` hash can be used to configure the default logLevel and provide a custom message formatter.
|
|
7338
7340
|
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.
|
|
7339
7341
|
Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
|
|
7340
|
-
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$3);})(logger$1);var Logger$3=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger$4=Logger$3.get(DEFAULT_LOGGER_NAME);logger$4.setLevel(Logger$3.DEBUG);function setLogHandler(logHandler){Logger$3.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}function toMediaStreamTrackKind(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}function toMediaFamily(kind){if(kind===exports.MediaStreamTrackKind.Video){return MediaFamily.Video;}return MediaFamily.Audio;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={floorControlledPresentation:false,disableSimulcast:getBrowserDetails().name==='Firefox',streamSignalingMode:'SSRC',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,enableMainAudio:true,enableMainVideo:true};class MultistreamConnection extends EventEmitter{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _a,_b;super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.customCodecParameters=new Map();this.midMap=new Map();this.currentMid=0;this.offerAnswerQueue=new AsyncQueue();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Main);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType.AudioSlides,contentSceneId);}}addMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);}clearMids(){this.midMap=new Map();this.currentMid=0;}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent$1.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger$4.error("addTransceiver failed due to : ".concat(e));throw e;}this.addMid(mediaType);var csi=generateCsi(getMediaFamily$1(mediaType),sceneId);this.sendTransceivers.set(mediaType,new SendOnlyTransceiver(rtcTransceiver,csi));this.createJmpSession(mediaType);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily$1(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger$4.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger$4.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily$1(mediaType)===MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents$1.MediaRequestReceived,data=>{if(getMediaFamily$1(mediaType)===MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);var mediaFamily=getMediaFamily$1(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger$4.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c,_d;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger$4.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=signaler.getSenderIds().some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=signaler.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily.Video){var trackSettings=(_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getSettings();if(trackSettings){encodingParams.scaleDownRatio=getScaleDownRatio(trackSettings.width,trackSettings.height,(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxFs,(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxWidth,(_d=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_d===void 0?void 0:_d.maxHeight);}}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger$4.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger$4.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size>0);sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger$4.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger$4.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger$4.error("Error parsing datachannel JSON: ".concat(err));return;}logger$4.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger$4.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger$4.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger$4.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger$4.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily$1(mediaType)!==MediaFamily.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);if(streamStates===null){logger$4.debug("Empty streamStates, not sending MediaRequestStatus");return;}var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily$1(mediaType)===MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){contentHint=transceiver.publishedTrack.videoContentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}publishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if(track instanceof LocalDisplayTrack&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);if(track===sendTransceiver.publishedTrack){logger$4.warn("This track has already been published on the transceiver.");return Promise.resolve();}this.addTrackListeners(mediaType,track);return sendTransceiver.publishTrack(track);});}unpublishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if(track instanceof LocalDisplayTrack&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.unpublishTrack();});}addTrackListeners(mediaType,track){var onTrackResolutionChange=()=>{this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.Muted,onTrackMute);var onTrackPublish=event=>{if(!event.isPublished){track.off(LocalTrack.Events.Muted,onTrackMute);track.off(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);track.off(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);if(!track.muted){this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);}}else if(!track.muted){this.sendSourceAdvertisement(mediaType);}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoStreamStates(mediaType){var _a,_b,_c;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignaler(sendTransceiver.mid);if(!signaler){return null;}var activeSimulcastLayerNumber=((_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers())||0;var published=(_b=sendTransceiver.publishedTrack)===null||_b===void 0?void 0:_b.published;var muted=((_c=sendTransceiver.publishedTrack)===null||_c===void 0?void 0:_c.muted)===true;return signaler.getSenderIds().map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else if(activeSimulcastLayerNumber<signaler.getEncodingIndexForStreamId(id)){state='no source';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});this.addMid(mediaType);var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,mid=>{var ingressSignaler=this.streamSignalerManager.getIngressStreamSignaler(mid);if(!ingressSignaler){return null;}return ingressSignaler.getReceiverId();});if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver.receiveSlot;});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.currentMid++;}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var isInitialAnswer=!this.pc.getRemoteDescription();var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger$4.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}if(isInitialAnswer&&this.customCodecParameters.size>0){yield this.doLocalOfferAnswer();}}));});}doLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});}));});}enableMultistreamAudio(enabled){var sendTransceiver=this.sendTransceivers.get(MediaType.AudioMain);if(sendTransceiver){return sendTransceiver.setActive(enabled);}return false;}preProcessLocalOffer(offer){var parsed=parse(offer);filterCodecs(parsed,['h264','opus','rtx']);setMaxBandwidth(parsed,20000000);parsed.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var ingressSignaler=this.streamSignalerManager.getOrCreateIngressStreamSignaler(av.mid);ingressSignaler.signalLocalStreams(av);});parsed.avMedia.filter(av=>av.direction==='sendrecv').forEach(av=>{var egressSignaler=this.streamSignalerManager.getOrCreateEgressStreamSignaler(av.mid);var simulcastEnabled=hasSimulcast(av);var rtxEnabled=av.type==='video';egressSignaler.signalStreams(simulcastEnabled,rtxEnabled,av);if(av.type==='video'){[...av.codecs.values()].filter(ci=>ci.name==='H264').forEach(ci=>{ci.fmtParams.set('max-mbps',"".concat(defaultMaxVideoEncodeMbps));ci.fmtParams.set('max-fs',"".concat(defaultMaxVideoEncodeFrameSize));});}var mediaType=[...this.sendTransceivers.keys()].find(key=>{var _a;return ((_a=this.sendTransceivers.get(key))===null||_a===void 0?void 0:_a.mid)===av.mid;});if(mediaType&&this.customCodecParameters.has(mediaType)){[...av.codecs.values()].filter(ci=>ci.name===(av.type==='audio'?'opus':'H264')).forEach(ci=>{var _a;(_a=this.customCodecParameters.get(mediaType))===null||_a===void 0?void 0:_a.forEach((value,param)=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);}return parsed.toString();}prepareLocalOfferForRemoteServer(offer){var parsed=parse(offer);var midContentMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{midContentMap.set(transceiver.mid,getMediaContent(mediaType));});injectContentTypes(parsed,midContentMap);var csiMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{csiMap.set(mediaType,transceiver.csi);});injectJmpAttributes(parsed,csiMap,this.options.streamSignalingMode);filterRecvOnlyMlines(parsed);injectDummyCandidates(parsed);parsed.avMedia.filter(av=>av.direction==='sendrecv'&&av.type==='video').forEach(av=>{var ssrcGroup=av.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{av.addLine(new SsrcLine(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){parsed.media.forEach((mline,index)=>{if(index>0){mline.port=parsed.media[0].port;}});}}return parsed.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse(answer);var parsedOffer=parse((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMlinesInAnswer(parsedOffer,parsedAnswer,this.streamSignalerManager);if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){var{ufrag,pwd}=parsedAnswer.media[0].iceInfo;parsedAnswer.media.forEach((mline,index)=>{if(index>0){mline.iceInfo.ufrag=ufrag;mline.iceInfo.pwd=pwd;}});}}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getPublishedTracks(){return [...this.sendTransceivers.values()].map(transceiver=>transceiver.publishedTrack).filter(Boolean);}setCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();Object.entries(parameters).forEach(_ref7=>{var[param,value]=_ref7;currentParams.set(param,value);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}});}deleteCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();parameters.forEach(param=>{currentParams.set(param,null);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}});}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.clearMids();this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);var mainSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;this.addMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily.Video?this.getVideoEncodingOptions(getMediaContent(mediaType)):undefined}));transceiver.csi=generateCsi(getMediaFamily$1(mediaType),mainSceneId);(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{this.addMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref8=>{var[mediaType,transceiver]=_ref8;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref9=>{var[mediaType,transceivers]=_ref9;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;var signaler=this.streamSignalerManager.getIngressStreamSignaler(statsToModify.mid);if(signaler){Object.assign(statsToModify,signaler.getReceiverId());}stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType.AudioMain),audioSlides:this.getCsiByMediaType(MediaType.AudioSlides),videoMain:this.getCsiByMediaType(MediaType.VideoMain),videoSlides:this.getCsiByMediaType(MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
7342
|
+
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$3);})(logger$1);var Logger$3=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger$4=Logger$3.get(DEFAULT_LOGGER_NAME);logger$4.setLevel(Logger$3.DEBUG);function setLogHandler(logHandler){Logger$3.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}function toMediaStreamTrackKind(mediaType){return [MediaType.VideoMain,MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}function toMediaFamily(kind){if(kind===exports.MediaStreamTrackKind.Video){return MediaFamily.Video;}return MediaFamily.Audio;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={floorControlledPresentation:false,disableSimulcast:getBrowserDetails().name==='Firefox',streamSignalingMode:'SSRC',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,enableMainAudio:true,enableMainVideo:true};class MultistreamConnection extends EventEmitter{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _a,_b;super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.customCodecParameters=new Map();this.midMap=new Map();this.currentMid=0;this.offerAnswerQueue=new AsyncQueue();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Main);this.createSendTransceiver(MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType.AudioSlides,contentSceneId);}}addMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);}clearMids(){this.midMap=new Map();this.currentMid=0;}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent$1.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger$4.error("addTransceiver failed due to : ".concat(e));throw e;}this.addMid(mediaType);var csi=generateCsi(getMediaFamily$1(mediaType),sceneId);this.sendTransceivers.set(mediaType,new SendOnlyTransceiver(rtcTransceiver,csi));this.createJmpSession(mediaType);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily$1(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger$4.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger$4.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily$1(mediaType)===MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents$1.MediaRequestReceived,data=>{if(getMediaFamily$1(mediaType)===MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);var mediaFamily=getMediaFamily$1(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger$4.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c,_d;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger$4.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=signaler.getSenderIds().some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=signaler.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily.Video){var trackSettings=(_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getSettings();if(trackSettings){encodingParams.scaleDownRatio=getScaleDownRatio(trackSettings.width,trackSettings.height,(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxFs,(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxWidth,(_d=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_d===void 0?void 0:_d.maxHeight);}}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger$4.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger$4.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size>0);sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger$4.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger$4.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger$4.error("Error parsing datachannel JSON: ".concat(err));return;}logger$4.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger$4.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger$4.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger$4.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger$4.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily$1(mediaType)!==MediaFamily.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);if(streamStates===null){logger$4.debug("Empty streamStates, not sending MediaRequestStatus");return;}var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily$1(mediaType)===MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){contentHint=transceiver.publishedTrack.videoContentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}publishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);if(track===sendTransceiver.publishedTrack){logger$4.warn("This track has already been published on the transceiver.");return Promise.resolve();}this.addTrackListeners(mediaType,track);return sendTransceiver.publishTrack(track);});}unpublishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.unpublishTrack();});}addTrackListeners(mediaType,track){var onTrackResolutionChange=()=>{this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.Muted,onTrackMute);var onTrackPublish=event=>{if(!event.isPublished){track.off(LocalTrack.Events.Muted,onTrackMute);track.off(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);track.off(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);}if(!track.muted){this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoStreamStates(mediaType){var _a,_b,_c;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignaler(sendTransceiver.mid);if(!signaler){return null;}var activeSimulcastLayerNumber=((_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers())||0;var published=(_b=sendTransceiver.publishedTrack)===null||_b===void 0?void 0:_b.published;var muted=((_c=sendTransceiver.publishedTrack)===null||_c===void 0?void 0:_c.muted)===true;return signaler.getSenderIds().map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else if(activeSimulcastLayerNumber<signaler.getEncodingIndexForStreamId(id)){state='no source';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){return new Promise(createReceiveSlotResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});this.addMid(mediaType);var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,mid=>{var ingressSignaler=this.streamSignalerManager.getIngressStreamSignaler(mid);if(!ingressSignaler){return null;}return ingressSignaler.getReceiverId();});if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.currentMid++;}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var isInitialAnswer=!this.pc.getRemoteDescription();var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger$4.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}if(isInitialAnswer&&this.customCodecParameters.size>0){yield this.queueLocalOfferAnswer();}}));});}doLocalOfferAnswer(){var _a;return __awaiter(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});});}queueLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}enableMultistreamAudio(enabled){var sendTransceiver=this.sendTransceivers.get(MediaType.AudioMain);if(sendTransceiver){return sendTransceiver.setActive(enabled);}return false;}preProcessLocalOffer(offer){var parsed=parse(offer);filterCodecs(parsed,['h264','opus','rtx']);setMaxBandwidth(parsed,20000000);parsed.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var ingressSignaler=this.streamSignalerManager.getOrCreateIngressStreamSignaler(av.mid);ingressSignaler.signalLocalStreams(av);});parsed.avMedia.filter(av=>av.direction==='sendrecv').forEach(av=>{var egressSignaler=this.streamSignalerManager.getOrCreateEgressStreamSignaler(av.mid);var simulcastEnabled=hasSimulcast(av);var rtxEnabled=av.type==='video';egressSignaler.signalStreams(simulcastEnabled,rtxEnabled,av);if(av.type==='video'){[...av.codecs.values()].filter(ci=>ci.name==='H264').forEach(ci=>{ci.fmtParams.set('max-mbps',"".concat(defaultMaxVideoEncodeMbps));ci.fmtParams.set('max-fs',"".concat(defaultMaxVideoEncodeFrameSize));});}var mediaType=[...this.sendTransceivers.keys()].find(key=>{var _a;return ((_a=this.sendTransceivers.get(key))===null||_a===void 0?void 0:_a.mid)===av.mid;});if(mediaType&&this.customCodecParameters.has(mediaType)){[...av.codecs.values()].filter(ci=>ci.name===(av.type==='audio'?'opus':'H264')).forEach(ci=>{var _a;(_a=this.customCodecParameters.get(mediaType))===null||_a===void 0?void 0:_a.forEach((value,param)=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);}return parsed.toString();}prepareLocalOfferForRemoteServer(offer){var parsed=parse(offer);var midContentMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{midContentMap.set(transceiver.mid,getMediaContent(mediaType));});injectContentTypes(parsed,midContentMap);var csiMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{csiMap.set(mediaType,transceiver.csi);});injectJmpAttributes(parsed,csiMap,this.options.streamSignalingMode);filterRecvOnlyMlines(parsed);injectDummyCandidates(parsed);parsed.avMedia.filter(av=>av.direction==='sendrecv'&&av.type==='video').forEach(av=>{var ssrcGroup=av.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{av.addLine(new SsrcLine(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){parsed.media.forEach((mline,index)=>{if(index>0){mline.port=parsed.media[0].port;}});}}return parsed.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse(answer);var parsedOffer=parse((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMlinesInAnswer(parsedOffer,parsedAnswer,this.streamSignalerManager);if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){var{ufrag,pwd}=parsedAnswer.media[0].iceInfo;parsedAnswer.media.forEach((mline,index)=>{if(index>0){mline.iceInfo.ufrag=ufrag;mline.iceInfo.pwd=pwd;}});}}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getPublishedTracks(){return [...this.sendTransceivers.values()].map(transceiver=>transceiver.publishedTrack).filter(Boolean);}setCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();Object.entries(parameters).forEach(_ref7=>{var[param,value]=_ref7;currentParams.set(param,value);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}deleteCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();parameters.forEach(param=>{currentParams.set(param,null);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.clearMids();this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent$1.Main?mainSceneId:slidesSceneId;this.addMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.csi=generateCsi(getMediaFamily$1(mediaType),sceneId);(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{this.addMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref8=>{var[mediaType,transceiver]=_ref8;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref9=>{var[mediaType,transceivers]=_ref9;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;var signaler=this.streamSignalerManager.getIngressStreamSignaler(statsToModify.mid);if(signaler){Object.assign(statsToModify,signaler.getReceiverId());}stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType.AudioMain),audioSlides:this.getCsiByMediaType(MediaType.AudioSlides),videoMain:this.getCsiByMediaType(MediaType.VideoMain),videoSlides:this.getCsiByMediaType(MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
7341
7343
|
|
|
7342
7344
|
exports.Event = void 0;
|
|
7343
7345
|
(function (Event) {
|
package/dist/esm/index.js
CHANGED
|
@@ -4509,7 +4509,9 @@ if(this.effects.size>0){yield Promise.all(Array.from(this.effects.values(),effec
|
|
|
4509
4509
|
* @returns The VideoContentHint for this track.
|
|
4510
4510
|
*/get videoContentHint(){return this._videoContentHint;}}/**
|
|
4511
4511
|
* Represents a local track for a microphone source.
|
|
4512
|
-
*/class LocalMicrophoneTrack extends LocalTrack{}
|
|
4512
|
+
*/class LocalMicrophoneTrack extends LocalTrack{}/**
|
|
4513
|
+
* Represents a local track for system audio.
|
|
4514
|
+
*/class LocalSystemAudioTrack extends LocalTrack{}// Overall connection state (based on the ICE and DTLS connection states)
|
|
4513
4515
|
var ConnectionState;(function(ConnectionState){ConnectionState["New"]="New";ConnectionState["Closed"]="Closed";ConnectionState["Connected"]="Connected";ConnectionState["Connecting"]="Connecting";ConnectionState["Disconnected"]="Disconnected";ConnectionState["Failed"]="Failed";})(ConnectionState||(ConnectionState={}));var ConnectionStateEvents;(function(ConnectionStateEvents){ConnectionStateEvents["ConnectionStateChanged"]="ConnectionStateChanged";})(ConnectionStateEvents||(ConnectionStateEvents={}));/**
|
|
4514
4516
|
* Listens on the connection's ICE and DTLS state changes and emits a single
|
|
4515
4517
|
* event that summarizes all the internal states into a single overall connection state.
|
|
@@ -5312,7 +5314,7 @@ for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}retu
|
|
|
5312
5314
|
// EventEmitters, we do not listen for `error` events here.
|
|
5313
5315
|
emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
|
|
5314
5316
|
// have to do it manually.
|
|
5315
|
-
if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this._stream=new MediaStream([track]);this._sourceState='no source';this.addTrackHandlers(track);}addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);}handleTrackMuted(){this.emit(ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(ReceiveSlotEvents.MediaStarted);}removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);}replaceTrack(newTrack){var _a;var trackToRemove=(_a=this._stream.getTracks())===null||_a===void 0?void 0:_a[0];if(trackToRemove){this._stream.removeTrack(trackToRemove);this.removeTrackHandlers(trackToRemove);}this.addTrackHandlers(newTrack);this._stream.addTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.getTracks().forEach(t=>{this.removeTrackHandlers(t);});}get id(){return this._idGetter();}get stream(){return this._stream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver){this._rtcRtpTransceiver=rtcRtpTransceiver;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}get mid(){return this._rtcRtpTransceiver.mid;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,idGetter){super(rtcRtpTransceiver);this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return idGetter(this._rtcRtpTransceiver.mid);},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}}ReceiveOnlyTransceiver.rid='1';function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}function matchMlinesInAnswer(parsedOffer,parsedAnswer,streamSignalerManager){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMline=>{if(!offerMline.mid){throw new Error("Offer mline is missing MID");}var answerMline=parsedAnswer.media.find(m=>m.mid===offerMline.mid);if(answerMline){if(answerMline instanceof AvMediaDescription){[...answerMline.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}return answerMline;}if(!(offerMline instanceof AvMediaDescription)){throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));}var startingMline=parsedAnswer.avMedia.find(m=>m.type===offerMline.type);if(!startingMline){throw new Error("Answer has no mline of type ".concat(offerMline.type,", can't generate synthetic answer mline for mid ").concat(offerMline.mid));}var fakeCorrespondingMline=deepCopy(startingMline);fakeCorrespondingMline.mid=offerMline.mid;fakeCorrespondingMline.simulcast=undefined;if(offerMline.direction==='sendrecv'||offerMline.direction==='sendonly'){fakeCorrespondingMline.direction='recvonly';}if(offerMline.direction==='recvonly'){fakeCorrespondingMline.direction='sendonly';var ingressSignaler=streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);}return fakeCorrespondingMline;});}class JmpLine extends Line{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{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{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,") (?:csi=(").concat(ANY_NON_WS,"))"));DefaultSdpGrammar.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpStreamIdModeLine.fromSdpLine);function getMediaTypeForMline(mLine){var _a,_b;var mediaFamily;if(mLine.type.toLowerCase()===MediaFamily$1.Audio.toLowerCase()){mediaFamily=MediaFamily$1.Audio;}else if(mLine.type.toLowerCase()===MediaFamily$1.Video.toLowerCase()){mediaFamily=MediaFamily$1.Video;}else {throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));}var mediaContent;if((_b=(_a=mLine.content)===null||_a===void 0?void 0:_a.values)===null||_b===void 0?void 0:_b.some(v=>v.toLowerCase()==='slides')){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}return getMediaType(mediaFamily,mediaContent);}function filterCodecs(parsedSdp,allowedCodecs){var allowedLowerCase=allowedCodecs.map(s=>s.toLowerCase());parsedSdp.avMedia.map(m=>[...m.codecs.values()].map(c=>c.name)).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(c=>removeCodec(parsedSdp,c));}function setMaxBandwidth(parsedSdp,maxBandwidth){parsedSdp.avMedia.forEach(mline=>{mline.bandwidth=new BandwidthLine('TIAS',maxBandwidth);});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType$1.AudioMain);var videoMainMids=midMap.get(MediaType$1.VideoMain);var audioContentMids=midMap.get(MediaType$1.AudioSlides);var videoContentMids=midMap.get(MediaType$1.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine(videoContentMids));}}}function filterRecvOnlyMlines(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(mLine=>{if(mLine instanceof ApplicationMediaDescription||mLine instanceof AvMediaDescription&&mLine.direction!=='recvonly'){filteredMids.push(mLine.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentTypes(sdp,contentTypeMap){contentTypeMap.forEach((mediaContent,mid)=>{var mline=sdp.media.find(m=>m.mid===mid);if(!mline){throw new Error("Error trying to set content type for mid ".concat(mid,": not found in SDP"));}if(mediaContent===MediaContent$1.Slides){mline.addLine(new ContentLine(['slides']));}});}function injectJmpAttributes(parsedSdp,csiMap,streamSignalingMode){parsedSdp.avMedia.filter(mLine=>mLine.direction==='sendrecv'||mLine.direction==='inactive').forEach(mLine=>{if(!mLine.otherLines.find(line=>line instanceof JmpLine)){mLine.addLine(new JmpLine(['v1']));}if(!mLine.otherLines.find(line=>line instanceof JmpSourceLine)){var mediaType=getMediaTypeForMline(mLine);var csi=csiMap.get(mediaType);if(!csi){throw new Error("Unable to find CSI for MediaType ".concat(mediaType));}mLine.addLine(new JmpSourceLine(mLine.mid,csi.toString()));}if(!mLine.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));}});}function injectDummyCandidates(parsedSdp){parsedSdp.media.forEach(mLine=>{if(mLine.iceInfo.candidates.length===0){mLine.addLine(new CandidateLine('dummy1',1,'udp',1,'0.0.0.0',1,'host'));mLine.addLine(new CandidateLine('dummy2',2,'tcp',2,'0.0.0.0',2,'host'));mLine.addLine(new CandidateLine('dummy3',3,'udp',3,'0.0.0.0',3,'relay'));}});}function hasSimulcast(av){return !!av.simulcast||av.ssrcGroups.map(sg=>sg.semantics).some(sem=>sem==='SIM');}function addVlaExtension(mLine){var vlaUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(mLine.extMaps.findIndex(extMapLine=>extMapLine.uri===vlaUri)===-1){var maxIdValue=Math.max(...mLine.extMaps.map(extMapLine=>extMapLine.id),0);var videoLayersAllocationLine=new ExtMapLine(maxIdValue+1,vlaUri,undefined);mLine.extMaps.push(videoLayersAllocationLine);}}class SendOnlyTransceiver extends Transceiver{constructor(rtcpRtpTransceiver,csi){super(rtcpRtpTransceiver);this.requested=false;this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replacePublishedTrack(newTrack){var _a,_b;return __awaiter(this,void 0,void 0,function*(){(_a=this.publishedTrack)===null||_a===void 0?void 0:_a.off(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.setPublished(false);if(this.requested){yield this.sender.replaceTrack((newTrack===null||newTrack===void 0?void 0:newTrack.underlyingTrack)||null);}this.publishedTrack=newTrack;newTrack===null||newTrack===void 0?void 0:newTrack.on(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);newTrack===null||newTrack===void 0?void 0:newTrack.setPublished(true);});}setTrackRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null:null;yield this.sender.replaceTrack(newTrack);}});}publishTrack(track){return this.replacePublishedTrack(track);}unpublishTrack(){return this.replacePublishedTrack();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;return this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection;}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,scaleDownRatio}=encodingParams;if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class RidIngressStreamSignaler{constructor(mid){this.mid=mid;}getReceiverId(){return {mid:this.mid,rid:'1'};}signalLocalStreams(mLine){}signalRemoteStreams(mLine){}}class RidEgressStreamSignaler{constructor(mid){this.streamIds=[];this.mid=mid;}signalStreams(simulcastEnabled,_rtxEnabled,mLine){mLine.ssrcGroups=[];if(this.streamIds.length===0){if(simulcastEnabled){this.streamIds=[{mid:this.mid,rid:'low'},{mid:this.mid,rid:'medium'},{mid:this.mid,rid:'high'}];}else {this.streamIds=[{mid:this.mid}];}}if(simulcastEnabled){mLine.rids=this.streamIds.map((streamId,index)=>new RidLine(streamId.rid,'send',"max-fs=".concat(simulcastMaxFrameSizes[index])));mLine.simulcast=new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'),new SimulcastLayerList());addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class SsrcIngressStreamSignaler{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}signalLocalStreams(_mLine){}signalRemoteStreams(mLine){mLine.addLine(new SsrcLine(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mLine)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mLine.addLine(new SsrcLine(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[this.ssrc,this.rtxSsrc]));}}}class SsrcEgressStreamSignaler{constructor(){this.streamIds=[];}signalStreams(simulcastEnabled,rtxEnabled,mLine){var _a;mLine.rids=[];mLine.simulcast=undefined;mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));var numStreams=simulcastEnabled?3:1;if(!this.streamIds.length){if(mLine.ssrcs.length){var ssrcs=[...new Set(mLine.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mLine.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){throw new Error('SSRC present in SSRC groups is missing from SSRC lines');}});var rtxSsrcGroups=mLine.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){throw new Error("Expect ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mLine.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){throw new Error('SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){throw new Error('Multiple RTX SSRC groups but no simulcast SSRC group found');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mLine.ssrcs=[];mLine.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mLine.addLine(new SsrcLine(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtpSsrc,'msid','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mLine.addLine(new SsrcLine(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mLine.addLine(new SsrcGroupLine('SIM',this.streamIds.map(streamId=>streamId.ssrc)));addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}class StreamSignalerManager{constructor(streamSignalingMode){this.egressStreamSignalersByMid=new Map();this.ingressStreamsSignalersByMid=new Map();this.ingressStreamSignalingMode=streamSignalingMode;this.egressStreamSignalingMode=streamSignalingMode;}getOrCreateEgressStreamSignaler(mid){var existing=this.getEgressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.egressStreamSignalingMode==='MID-RID'){newSignaler=new RidEgressStreamSignaler(mid);}else {newSignaler=new SsrcEgressStreamSignaler();}this.egressStreamSignalersByMid.set(mid,newSignaler);return newSignaler;}getEgressStreamSignalerOrThrow(mid){var existing=this.getEgressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));}return existing;}getEgressStreamSignaler(mid){return this.egressStreamSignalersByMid.get(mid);}getOrCreateIngressStreamSignaler(mid){var existing=this.getIngressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.ingressStreamSignalingMode==='MID-RID'){newSignaler=new RidIngressStreamSignaler(mid);}else {newSignaler=new SsrcIngressStreamSignaler();}this.ingressStreamsSignalersByMid.set(mid,newSignaler);return newSignaler;}getIngressStreamSignaler(mid){return this.ingressStreamsSignalersByMid.get(mid);}getIngressStreamSignalerOrThrow(mid){var existing=this.getIngressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));}return existing;}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref3=>{var[mediaType,transceiver]=_ref3;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType$1.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref4=>{var[mediaType,transceivers]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType$1.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
|
|
5317
|
+
if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else {throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof emitter);}}class EventEmitter extends events.exports.EventEmitter{}var OveruseState;(function(OveruseState){OveruseState[OveruseState["NOT_OVERUSED"]=0]="NOT_OVERUSED";OveruseState[OveruseState["OVERUSED"]=1]="OVERUSED";})(OveruseState||(OveruseState={}));class OveruseStateManager{constructor(callback){this.monitors=[];this.lastOverallOveruseState=OveruseState.NOT_OVERUSED;this.isRunning=false;this.overuseUpdateCallback=callback;}addMonitor(monitor){this.monitors.push(monitor);if(this.isRunning){monitor.startMonitoring(()=>this.onMonitorOveruseUpdate());}}start(){this.isRunning=true;this.monitors.forEach(monitor=>monitor.startMonitoring(()=>this.onMonitorOveruseUpdate()));}stop(){this.isRunning=false;this.monitors.forEach(monitor=>monitor.stopMonitoring());}onMonitorOveruseUpdate(){var overuseStates=this.monitors.map(monitor=>monitor.getLastOveruseState());var overallOveruseState=overuseStates.some(overuseState=>overuseState===OveruseState.OVERUSED)?OveruseState.OVERUSED:OveruseState.NOT_OVERUSED;if(overallOveruseState!==this.lastOverallOveruseState){this.lastOverallOveruseState=overallOveruseState;this.overuseUpdateCallback(overallOveruseState);}}}var ReceiveSlotEvents;(function(ReceiveSlotEvents){ReceiveSlotEvents["MediaStarted"]="media-started";ReceiveSlotEvents["MediaStopped"]="media-stopped";ReceiveSlotEvents["SourceUpdate"]="source-update";})(ReceiveSlotEvents||(ReceiveSlotEvents={}));class ReceiveSlot extends EventEmitter{constructor(idGetter,track){super();this._idGetter=idGetter;this.handleTrackMuted=this.handleTrackMuted.bind(this);this.handleTrackUnmuted=this.handleTrackUnmuted.bind(this);this._stream=new MediaStream([track]);this._sourceState='no source';this.addTrackHandlers(track);}addTrackHandlers(track){track.addEventListener('mute',this.handleTrackMuted);track.addEventListener('unmute',this.handleTrackUnmuted);}handleTrackMuted(){this.emit(ReceiveSlotEvents.MediaStopped);}handleTrackUnmuted(){this.emit(ReceiveSlotEvents.MediaStarted);}removeTrackHandlers(track){track.removeEventListener('mute',this.handleTrackMuted);track.removeEventListener('unmute',this.handleTrackUnmuted);}replaceTrack(newTrack){var _a;var trackToRemove=(_a=this._stream.getTracks())===null||_a===void 0?void 0:_a[0];if(trackToRemove){this._stream.removeTrack(trackToRemove);this.removeTrackHandlers(trackToRemove);}this.addTrackHandlers(newTrack);this._stream.addTrack(newTrack);}_updateSource(state,csi){if(state!==this._sourceState||csi!==this._currentRxCsi){this._sourceState=state;this._currentRxCsi=csi;this.emit(ReceiveSlotEvents.SourceUpdate,state,csi);}}close(){this._stream.getTracks().forEach(t=>{this.removeTrackHandlers(t);});}get id(){return this._idGetter();}get stream(){return this._stream;}get currentRxCsi(){return this._currentRxCsi;}}ReceiveSlot.Events=ReceiveSlotEvents;class Transceiver{constructor(rtcRtpTransceiver){this._rtcRtpTransceiver=rtcRtpTransceiver;}replaceTransceiver(newRtcRtpTransceiver){this._rtcRtpTransceiver=newRtcRtpTransceiver;}get receiver(){return this._rtcRtpTransceiver.receiver;}get sender(){return this._rtcRtpTransceiver.sender;}get mid(){return this._rtcRtpTransceiver.mid;}close(){this._rtcRtpTransceiver.stop();}}class ReceiveOnlyTransceiver extends Transceiver{constructor(rtcRtpTransceiver,idGetter){super(rtcRtpTransceiver);this._receiveSlot=new ReceiveSlot(()=>{if(!this._rtcRtpTransceiver.mid){return null;}return idGetter(this._rtcRtpTransceiver.mid);},this._rtcRtpTransceiver.receiver.track);}replaceTransceiver(newRtcRtpTransceiver){super.replaceTransceiver(newRtcRtpTransceiver);this._receiveSlot.replaceTrack(newRtcRtpTransceiver.receiver.track);}close(){super.close();this._receiveSlot.close();}get receiveSlot(){return this._receiveSlot;}getStats(){return this.receiver.getStats();}}ReceiveOnlyTransceiver.rid='1';function deepCopy(source){return Array.isArray(source)?source.map(item=>deepCopy(item)):source instanceof Map?new Map(source):source instanceof Date?new Date(source.getTime()):source&&typeof source==='object'?Object.getOwnPropertyNames(source).reduce((o,prop)=>{Object.defineProperty(o,prop,Object.getOwnPropertyDescriptor(source,prop));o[prop]=deepCopy(source[prop]);return o;},Object.create(Object.getPrototypeOf(source))):source;}function matchMlinesInAnswer(parsedOffer,parsedAnswer,streamSignalerManager){parsedAnswer.session.groups=parsedOffer.session.groups;parsedAnswer.media=parsedOffer.media.map(offerMline=>{if(!offerMline.mid){throw new Error("Offer mline is missing MID");}var answerMline=parsedAnswer.media.find(m=>m.mid===offerMline.mid);if(answerMline){if(answerMline instanceof AvMediaDescription){[...answerMline.codecs.values()].forEach(ci=>{ci.fmtParams.set('x-google-start-bitrate','60000');});}return answerMline;}if(!(offerMline instanceof AvMediaDescription)){throw new Error("Answer is missing a non-media mline: ".concat(offerMline.mid));}var startingMline=parsedAnswer.avMedia.find(m=>m.type===offerMline.type);if(!startingMline){throw new Error("Answer has no mline of type ".concat(offerMline.type,", can't generate synthetic answer mline for mid ").concat(offerMline.mid));}var fakeCorrespondingMline=deepCopy(startingMline);fakeCorrespondingMline.mid=offerMline.mid;fakeCorrespondingMline.simulcast=undefined;if(offerMline.direction==='sendrecv'||offerMline.direction==='sendonly'){fakeCorrespondingMline.direction='recvonly';}if(offerMline.direction==='recvonly'){fakeCorrespondingMline.direction='sendonly';var ingressSignaler=streamSignalerManager.getIngressStreamSignalerOrThrow(offerMline.mid);ingressSignaler.signalRemoteStreams(fakeCorrespondingMline);}return fakeCorrespondingMline;});}class JmpLine extends Line{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{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{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,") (?:csi=(").concat(ANY_NON_WS,"))"));DefaultSdpGrammar.addParser('a',JmpLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpSourceLine.fromSdpLine);DefaultSdpGrammar.addParser('a',JmpStreamIdModeLine.fromSdpLine);function getMediaTypeForMline(mLine){var _a,_b;var mediaFamily;if(mLine.type.toLowerCase()===MediaFamily$1.Audio.toLowerCase()){mediaFamily=MediaFamily$1.Audio;}else if(mLine.type.toLowerCase()===MediaFamily$1.Video.toLowerCase()){mediaFamily=MediaFamily$1.Video;}else {throw Error("Mline type doesn't match any known MediaFamily: ".concat(mLine.type));}var mediaContent;if((_b=(_a=mLine.content)===null||_a===void 0?void 0:_a.values)===null||_b===void 0?void 0:_b.some(v=>v.toLowerCase()==='slides')){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}return getMediaType(mediaFamily,mediaContent);}function filterCodecs(parsedSdp,allowedCodecs){var allowedLowerCase=allowedCodecs.map(s=>s.toLowerCase());parsedSdp.avMedia.map(m=>[...m.codecs.values()].map(c=>c.name)).flat().filter(codecName=>!allowedLowerCase.includes(codecName.toLowerCase())).forEach(c=>removeCodec(parsedSdp,c));}function setMaxBandwidth(parsedSdp,maxBandwidth){parsedSdp.avMedia.forEach(mline=>{mline.bandwidth=new BandwidthLine('TIAS',maxBandwidth);});}function setupBundle(parsedSdp,bundlePolicy,midMap){if(bundlePolicy==='max-compat'){var audioMainMids=midMap.get(MediaType$1.AudioMain);var videoMainMids=midMap.get(MediaType$1.VideoMain);var audioContentMids=midMap.get(MediaType$1.AudioSlides);var videoContentMids=midMap.get(MediaType$1.VideoSlides);parsedSdp.session.groups.splice(0,parsedSdp.session.groups.length);if(audioMainMids){parsedSdp.session.groups.push(new BundleGroupLine(audioMainMids));}if(videoMainMids){parsedSdp.session.groups.push(new BundleGroupLine(videoMainMids));}if(audioContentMids){parsedSdp.session.groups.push(new BundleGroupLine(audioContentMids));}if(videoContentMids){parsedSdp.session.groups.push(new BundleGroupLine(videoContentMids));}}}function filterRecvOnlyMlines(parsedSdp){var filteredMids=[];parsedSdp.media=parsedSdp.media.filter(mLine=>{if(mLine instanceof ApplicationMediaDescription||mLine instanceof AvMediaDescription&&mLine.direction!=='recvonly'){filteredMids.push(mLine.mid);return true;}return false;});parsedSdp.session.groups.forEach(g=>{g.mids=g.mids.filter(m=>filteredMids.includes(m));});}function injectContentTypes(sdp,contentTypeMap){contentTypeMap.forEach((mediaContent,mid)=>{var mline=sdp.media.find(m=>m.mid===mid);if(!mline){throw new Error("Error trying to set content type for mid ".concat(mid,": not found in SDP"));}if(mediaContent===MediaContent$1.Slides){mline.addLine(new ContentLine(['slides']));}});}function injectJmpAttributes(parsedSdp,csiMap,streamSignalingMode){parsedSdp.avMedia.filter(mLine=>mLine.direction==='sendrecv'||mLine.direction==='inactive').forEach(mLine=>{if(!mLine.otherLines.find(line=>line instanceof JmpLine)){mLine.addLine(new JmpLine(['v1']));}if(!mLine.otherLines.find(line=>line instanceof JmpSourceLine)){var mediaType=getMediaTypeForMline(mLine);var csi=csiMap.get(mediaType);if(!csi){throw new Error("Unable to find CSI for MediaType ".concat(mediaType));}mLine.addLine(new JmpSourceLine(mLine.mid,csi.toString()));}if(!mLine.otherLines.find(line=>line instanceof JmpStreamIdModeLine)){mLine.addLine(new JmpStreamIdModeLine(streamSignalingMode));}});}function injectDummyCandidates(parsedSdp){parsedSdp.media.forEach(mLine=>{if(mLine.iceInfo.candidates.length===0){mLine.addLine(new CandidateLine('dummy1',1,'udp',1,'0.0.0.0',1,'host'));mLine.addLine(new CandidateLine('dummy2',2,'tcp',2,'0.0.0.0',2,'host'));mLine.addLine(new CandidateLine('dummy3',3,'udp',3,'0.0.0.0',3,'relay'));}});}function hasSimulcast(av){return !!av.simulcast||av.ssrcGroups.map(sg=>sg.semantics).some(sem=>sem==='SIM');}function addVlaExtension(mLine){var vlaUri='http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00';if(mLine.extMaps.findIndex(extMapLine=>extMapLine.uri===vlaUri)===-1){var maxIdValue=Math.max(...mLine.extMaps.map(extMapLine=>extMapLine.id),0);var videoLayersAllocationLine=new ExtMapLine(maxIdValue+1,vlaUri,undefined);mLine.extMaps.push(videoLayersAllocationLine);}}class SendOnlyTransceiver extends Transceiver{constructor(rtcpRtpTransceiver,csi){super(rtcpRtpTransceiver);this.requested=false;this.csi=csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);}handleTrackChange(){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});var _a;return __awaiter(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.sender.replaceTrack(((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null);}});}replacePublishedTrack(newTrack){var _a,_b;return __awaiter(this,void 0,void 0,function*(){(_a=this.publishedTrack)===null||_a===void 0?void 0:_a.off(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);(_b=this.publishedTrack)===null||_b===void 0?void 0:_b.setPublished(false);if(this.requested){yield this.sender.replaceTrack((newTrack===null||newTrack===void 0?void 0:newTrack.underlyingTrack)||null);}this.publishedTrack=newTrack;newTrack===null||newTrack===void 0?void 0:newTrack.on(LocalTrackEvents.UnderlyingTrackChange,this.handleTrackChange);newTrack===null||newTrack===void 0?void 0:newTrack.setPublished(true);});}setTrackRequested(requested){var _a;return __awaiter(this,void 0,void 0,function*(){if(this.requested!==requested){this.requested=requested;var newTrack=requested?((_a=this.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack)||null:null;yield this.sender.replaceTrack(newTrack);}});}publishTrack(track){return this.replacePublishedTrack(track);}unpublishTrack(){return this.replacePublishedTrack();}setActive(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;return this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection;}getStats(){return this.sender.getStats();}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,scaleDownRatio}=encodingParams;if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);});}}class StatsManager{constructor(statsGetter){var statsPreprocessor=arguments.length>1&&arguments[1]!==undefined?arguments[1]:()=>__awaiter(this,void 0,void 0,function*(){});this.statsGetter=statsGetter;this.statsPreProcessor=statsPreprocessor;}getStats(){return __awaiter(this,void 0,void 0,function*(){var statsReport=yield this.statsGetter();var statsMap=new Map();statsReport.forEach((stats,key)=>statsMap.set(key,stats));yield this.statsPreProcessor(statsMap);return statsMap;});}}var simulcastMaxFrameSizes={0:'240',1:'2304',2:'8160'};class RidIngressStreamSignaler{constructor(mid){this.mid=mid;}getReceiverId(){return {mid:this.mid,rid:'1'};}signalLocalStreams(mLine){}signalRemoteStreams(mLine){}}class RidEgressStreamSignaler{constructor(mid){this.streamIds=[];this.mid=mid;}signalStreams(simulcastEnabled,_rtxEnabled,mLine){mLine.ssrcGroups=[];if(this.streamIds.length===0){if(simulcastEnabled){this.streamIds=[{mid:this.mid,rid:'low'},{mid:this.mid,rid:'medium'},{mid:this.mid,rid:'high'}];}else {this.streamIds=[{mid:this.mid}];}}if(simulcastEnabled){mLine.rids=this.streamIds.map((streamId,index)=>new RidLine(streamId.rid,'send',"max-fs=".concat(simulcastMaxFrameSizes[index])));mLine.simulcast=new SimulcastLine(SimulcastLayerList.fromString('low;medium;high'),new SimulcastLayerList());addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}function generateSsrc(){return Math.floor(Math.random()*0xffffffff)+1;}class SsrcIngressStreamSignaler{constructor(){this.ssrc=generateSsrc();}getReceiverId(){return Object.assign({ssrc:this.ssrc},this.rtxSsrc?{rtxSsrc:this.rtxSsrc}:{});}signalLocalStreams(mLine){mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));}signalRemoteStreams(mLine){mLine.addLine(new SsrcLine(this.ssrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.ssrc,'msid','-','1'));if(hasCodec('rtx',mLine)){if(!this.rtxSsrc){this.rtxSsrc=generateSsrc();}mLine.addLine(new SsrcLine(this.rtxSsrc,'cname',"".concat(this.ssrc,"-cname")));mLine.addLine(new SsrcLine(this.rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[this.ssrc,this.rtxSsrc]));}}}class SsrcEgressStreamSignaler{constructor(){this.streamIds=[];}signalStreams(simulcastEnabled,rtxEnabled,mLine){var _a;mLine.rids=[];mLine.simulcast=undefined;mLine.extMaps=mLine.extMaps.filter(extMapLine=>!/^urn:ietf:params:rtp-hdrext:sdes:(?:mid|rtp-stream-id|repaired-rtp-stream-id)$/.test(extMapLine.uri));var numStreams=simulcastEnabled?3:1;if(!this.streamIds.length){if(mLine.ssrcs.length){var ssrcs=[...new Set(mLine.ssrcs.map(ssrcLine=>ssrcLine.ssrcId))];mLine.ssrcGroups.forEach(sg=>{if(!sg.ssrcs.every(ssrc=>ssrcs.includes(ssrc))){throw new Error('SSRC present in SSRC groups is missing from SSRC lines');}});var rtxSsrcGroups=mLine.ssrcGroups.filter(sg=>sg.semantics==='FID');if(rtxSsrcGroups.length&&rtxSsrcGroups.length!==numStreams){throw new Error("Expect ".concat(numStreams," RTX SSRC groups, got ").concat(rtxSsrcGroups.length));}rtxSsrcGroups.forEach(sg=>{this.streamIds.push({ssrc:sg.ssrcs[0],rtxSsrc:sg.ssrcs[1]});});var simulcastSsrcs=(_a=mLine.ssrcGroups.find(sg=>sg.semantics==='SIM'))===null||_a===void 0?void 0:_a.ssrcs;if(simulcastSsrcs){if(simulcastSsrcs.length!==numStreams||!this.streamIds.every(streamId=>simulcastSsrcs.includes(streamId.ssrc))){throw new Error('SSRCs in simulcast SSRC group do not match primary SSRCs in RTX SSRC groups');}this.streamIds.sort((a,b)=>simulcastSsrcs.indexOf(a.ssrc)-simulcastSsrcs.indexOf(b.ssrc));}else if(rtxSsrcGroups.length>1){throw new Error('Multiple RTX SSRC groups but no simulcast SSRC group found');}if(!this.streamIds.length){this.streamIds.push({ssrc:ssrcs[0]});}}else {[...Array(numStreams).keys()].forEach(()=>{var newStreamId={ssrc:generateSsrc()};if(rtxEnabled){newStreamId.rtxSsrc=generateSsrc();}this.streamIds.push(newStreamId);});}}mLine.ssrcs=[];mLine.ssrcGroups=[];this.streamIds.forEach(streamId=>{var rtpSsrc=streamId.ssrc;mLine.addLine(new SsrcLine(rtpSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtpSsrc,'msid','-','1'));if(rtxEnabled){var rtxSsrc=streamId.rtxSsrc;mLine.addLine(new SsrcLine(rtxSsrc,'cname',"".concat(rtpSsrc,"-cname")));mLine.addLine(new SsrcLine(rtxSsrc,'msid','-','1'));mLine.addLine(new SsrcGroupLine('FID',[rtpSsrc,rtxSsrc]));}});if(simulcastEnabled){mLine.addLine(new SsrcGroupLine('SIM',this.streamIds.map(streamId=>streamId.ssrc)));addVlaExtension(mLine);}}getSenderIds(){return this.streamIds;}getEncodingIndexForStreamId(streamId){return this.streamIds.findIndex(currStreamId=>compareStreamIds(currStreamId,streamId));}}class StreamSignalerManager{constructor(streamSignalingMode){this.egressStreamSignalersByMid=new Map();this.ingressStreamsSignalersByMid=new Map();this.ingressStreamSignalingMode=streamSignalingMode;this.egressStreamSignalingMode=streamSignalingMode;}getOrCreateEgressStreamSignaler(mid){var existing=this.getEgressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.egressStreamSignalingMode==='MID-RID'){newSignaler=new RidEgressStreamSignaler(mid);}else {newSignaler=new SsrcEgressStreamSignaler();}this.egressStreamSignalersByMid.set(mid,newSignaler);return newSignaler;}getEgressStreamSignalerOrThrow(mid){var existing=this.getEgressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find EgressStreamSignaler for mid ".concat(mid));}return existing;}getEgressStreamSignaler(mid){return this.egressStreamSignalersByMid.get(mid);}getOrCreateIngressStreamSignaler(mid){var existing=this.getIngressStreamSignaler(mid);if(existing){return existing;}var newSignaler;if(this.ingressStreamSignalingMode==='MID-RID'){newSignaler=new RidIngressStreamSignaler(mid);}else {newSignaler=new SsrcIngressStreamSignaler();}this.ingressStreamsSignalersByMid.set(mid,newSignaler);return newSignaler;}getIngressStreamSignaler(mid){return this.ingressStreamsSignalersByMid.get(mid);}getIngressStreamSignalerOrThrow(mid){var existing=this.getIngressStreamSignaler(mid);if(!existing){throw new Error("Couldn't find IngressStreamSignaler for mid ".concat(mid));}return existing;}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref3=>{var[mediaType,transceiver]=_ref3;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType$1.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref4=>{var[mediaType,transceivers]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType$1.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}/**
|
|
5316
5318
|
* Creates a continuation function with some arguments already applied.
|
|
5317
5319
|
*
|
|
5318
5320
|
* Useful as a shorthand when combined with other control flow functions. Any
|
|
@@ -7326,7 +7328,7 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
|
|
|
7326
7328
|
// `options` hash can be used to configure the default logLevel and provide a custom message formatter.
|
|
7327
7329
|
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.
|
|
7328
7330
|
Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
|
|
7329
|
-
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$3);})(logger$1);var Logger$3=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger$4=Logger$3.get(DEFAULT_LOGGER_NAME);logger$4.setLevel(Logger$3.DEBUG);function setLogHandler(logHandler){Logger$3.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}function toMediaStreamTrackKind(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}function toMediaFamily(kind){if(kind===MediaStreamTrackKind.Video){return MediaFamily$1.Video;}return MediaFamily$1.Audio;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={floorControlledPresentation:false,disableSimulcast:getBrowserDetails().name==='Firefox',streamSignalingMode:'SSRC',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,enableMainAudio:true,enableMainVideo:true};class MultistreamConnection extends EventEmitter{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _a,_b;super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.customCodecParameters=new Map();this.midMap=new Map();this.currentMid=0;this.offerAnswerQueue=new AsyncQueue();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Main);this.createSendTransceiver(MediaType$1.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType$1.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType$1.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType$1.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType$1.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType$1.AudioSlides,contentSceneId);}}addMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);}clearMids(){this.midMap=new Map();this.currentMid=0;}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent$1.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger$4.error("addTransceiver failed due to : ".concat(e));throw e;}this.addMid(mediaType);var csi=generateCsi(getMediaFamily$1(mediaType),sceneId);this.sendTransceivers.set(mediaType,new SendOnlyTransceiver(rtcTransceiver,csi));this.createJmpSession(mediaType);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily$1(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger$4.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger$4.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily$1(mediaType)===MediaFamily$1.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents$1.MediaRequestReceived,data=>{if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);var mediaFamily=getMediaFamily$1(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger$4.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c,_d;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger$4.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=signaler.getSenderIds().some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=signaler.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily$1.Video){var trackSettings=(_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getSettings();if(trackSettings){encodingParams.scaleDownRatio=getScaleDownRatio(trackSettings.width,trackSettings.height,(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxFs,(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxWidth,(_d=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_d===void 0?void 0:_d.maxHeight);}}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger$4.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger$4.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size>0);sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger$4.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger$4.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger$4.error("Error parsing datachannel JSON: ".concat(err));return;}logger$4.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger$4.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger$4.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger$4.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger$4.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily$1(mediaType)!==MediaFamily$1.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);if(streamStates===null){logger$4.debug("Empty streamStates, not sending MediaRequestStatus");return;}var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){contentHint=transceiver.publishedTrack.videoContentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}publishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if(track instanceof LocalDisplayTrack&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);if(track===sendTransceiver.publishedTrack){logger$4.warn("This track has already been published on the transceiver.");return Promise.resolve();}this.addTrackListeners(mediaType,track);return sendTransceiver.publishTrack(track);});}unpublishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if(track instanceof LocalDisplayTrack&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.unpublishTrack();});}addTrackListeners(mediaType,track){var onTrackResolutionChange=()=>{this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.Muted,onTrackMute);var onTrackPublish=event=>{if(!event.isPublished){track.off(LocalTrack.Events.Muted,onTrackMute);track.off(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);track.off(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);if(!track.muted){this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);}}else if(!track.muted){this.sendSourceAdvertisement(mediaType);}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoStreamStates(mediaType){var _a,_b,_c;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignaler(sendTransceiver.mid);if(!signaler){return null;}var activeSimulcastLayerNumber=((_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers())||0;var published=(_b=sendTransceiver.publishedTrack)===null||_b===void 0?void 0:_b.published;var muted=((_c=sendTransceiver.publishedTrack)===null||_c===void 0?void 0:_c.muted)===true;return signaler.getSenderIds().map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else if(activeSimulcastLayerNumber<signaler.getEncodingIndexForStreamId(id)){state='no source';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});this.addMid(mediaType);var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,mid=>{var ingressSignaler=this.streamSignalerManager.getIngressStreamSignaler(mid);if(!ingressSignaler){return null;}return ingressSignaler.getReceiverId();});if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver.receiveSlot;});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.currentMid++;}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var isInitialAnswer=!this.pc.getRemoteDescription();var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger$4.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}if(isInitialAnswer&&this.customCodecParameters.size>0){yield this.doLocalOfferAnswer();}}));});}doLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});}));});}enableMultistreamAudio(enabled){var sendTransceiver=this.sendTransceivers.get(MediaType$1.AudioMain);if(sendTransceiver){return sendTransceiver.setActive(enabled);}return false;}preProcessLocalOffer(offer){var parsed=parse(offer);filterCodecs(parsed,['h264','opus','rtx']);setMaxBandwidth(parsed,20000000);parsed.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var ingressSignaler=this.streamSignalerManager.getOrCreateIngressStreamSignaler(av.mid);ingressSignaler.signalLocalStreams(av);});parsed.avMedia.filter(av=>av.direction==='sendrecv').forEach(av=>{var egressSignaler=this.streamSignalerManager.getOrCreateEgressStreamSignaler(av.mid);var simulcastEnabled=hasSimulcast(av);var rtxEnabled=av.type==='video';egressSignaler.signalStreams(simulcastEnabled,rtxEnabled,av);if(av.type==='video'){[...av.codecs.values()].filter(ci=>ci.name==='H264').forEach(ci=>{ci.fmtParams.set('max-mbps',"".concat(defaultMaxVideoEncodeMbps));ci.fmtParams.set('max-fs',"".concat(defaultMaxVideoEncodeFrameSize));});}var mediaType=[...this.sendTransceivers.keys()].find(key=>{var _a;return ((_a=this.sendTransceivers.get(key))===null||_a===void 0?void 0:_a.mid)===av.mid;});if(mediaType&&this.customCodecParameters.has(mediaType)){[...av.codecs.values()].filter(ci=>ci.name===(av.type==='audio'?'opus':'H264')).forEach(ci=>{var _a;(_a=this.customCodecParameters.get(mediaType))===null||_a===void 0?void 0:_a.forEach((value,param)=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);}return parsed.toString();}prepareLocalOfferForRemoteServer(offer){var parsed=parse(offer);var midContentMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{midContentMap.set(transceiver.mid,getMediaContent(mediaType));});injectContentTypes(parsed,midContentMap);var csiMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{csiMap.set(mediaType,transceiver.csi);});injectJmpAttributes(parsed,csiMap,this.options.streamSignalingMode);filterRecvOnlyMlines(parsed);injectDummyCandidates(parsed);parsed.avMedia.filter(av=>av.direction==='sendrecv'&&av.type==='video').forEach(av=>{var ssrcGroup=av.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{av.addLine(new SsrcLine(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){parsed.media.forEach((mline,index)=>{if(index>0){mline.port=parsed.media[0].port;}});}}return parsed.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse(answer);var parsedOffer=parse((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMlinesInAnswer(parsedOffer,parsedAnswer,this.streamSignalerManager);if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){var{ufrag,pwd}=parsedAnswer.media[0].iceInfo;parsedAnswer.media.forEach((mline,index)=>{if(index>0){mline.iceInfo.ufrag=ufrag;mline.iceInfo.pwd=pwd;}});}}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getPublishedTracks(){return [...this.sendTransceivers.values()].map(transceiver=>transceiver.publishedTrack).filter(Boolean);}setCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();Object.entries(parameters).forEach(_ref7=>{var[param,value]=_ref7;currentParams.set(param,value);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}});}deleteCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();parameters.forEach(param=>{currentParams.set(param,null);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}});}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.clearMids();this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);var mainSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;this.addMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily$1.Video?this.getVideoEncodingOptions(getMediaContent(mediaType)):undefined}));transceiver.csi=generateCsi(getMediaFamily$1(mediaType),mainSceneId);(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{this.addMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref8=>{var[mediaType,transceiver]=_ref8;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref9=>{var[mediaType,transceivers]=_ref9;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;var signaler=this.streamSignalerManager.getIngressStreamSignaler(statsToModify.mid);if(signaler){Object.assign(statsToModify,signaler.getReceiverId());}stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType$1.AudioMain),audioSlides:this.getCsiByMediaType(MediaType$1.AudioSlides),videoMain:this.getCsiByMediaType(MediaType$1.VideoMain),videoSlides:this.getCsiByMediaType(MediaType$1.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
7331
|
+
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$3);})(logger$1);var Logger$3=logger$1.exports;var DEFAULT_LOGGER_NAME='web-client-media-engine';var logger$4=Logger$3.get(DEFAULT_LOGGER_NAME);logger$4.setLevel(Logger$3.DEBUG);function setLogHandler(logHandler){Logger$3.setHandler(logHandler);Logger$1.setHandler(logHandler);Logger$2.setHandler(logHandler);}function toMediaStreamTrackKind(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaStreamTrackKind.Video:MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}function toMediaFamily(kind){if(kind===MediaStreamTrackKind.Video){return MediaFamily$1.Video;}return MediaFamily$1.Audio;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["ConnectionStateUpdate"]="connection-state-update";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={floorControlledPresentation:false,disableSimulcast:getBrowserDetails().name==='Firefox',streamSignalingMode:'SSRC',bundlePolicy:'max-compat',iceServers:undefined,disableContentSimulcast:true,enableMainAudio:true,enableMainVideo:true};class MultistreamConnection extends EventEmitter{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var _a,_b;super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.metricsCallback=()=>{};this.overuseUpdateCallback=()=>{};this.customCodecParameters=new Map();this.midMap=new Map();this.currentMid=0;this.offerAnswerQueue=new AsyncQueue();this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger$4.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Main);this.createSendTransceiver(MediaType$1.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(MediaType$1.AudioMain,mainSceneId);(_a=this.sendTransceivers.get(MediaType$1.VideoMain))===null||_a===void 0?void 0:_a.setActive(this.options.enableMainVideo);(_b=this.sendTransceivers.get(MediaType$1.AudioMain))===null||_b===void 0?void 0:_b.setActive(this.options.enableMainAudio);if(this.options.floorControlledPresentation){var videoPresentationEncodingOptions=this.getVideoEncodingOptions(MediaContent$1.Slides);var contentSceneId=generateSceneId();this.createSendTransceiver(MediaType$1.VideoSlides,contentSceneId,videoPresentationEncodingOptions);this.createSendTransceiver(MediaType$1.AudioSlides,contentSceneId);}}addMid(mediaType){var mid=this.currentMid++;var mids=this.midMap.get(mediaType)||[];mids.push("".concat(mid));this.midMap.set(mediaType,mids);}clearMids(){this.midMap=new Map();this.currentMid=0;}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy});this.pc.on(PeerConnection.Events.ConnectionStateChange,state=>this.emit(MultistreamConnectionEventNames.ConnectionStateUpdate,state));this.attachMetricsObserver();this.createDataChannel();}getConnectionState(){return this.pc.getConnectionState();}getVideoEncodingOptions(content){var enabledSimulcast=content===MediaContent$1.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcTransceiver;try{rtcTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger$4.error("addTransceiver failed due to : ".concat(e));throw e;}this.addMid(mediaType);var csi=generateCsi(getMediaFamily$1(mediaType),sceneId);this.sendTransceivers.set(mediaType,new SendOnlyTransceiver(rtcTransceiver,csi));this.createJmpSession(mediaType);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily$1(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(msg=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger$4.error("DataChannel not created or not connected. Unable to send JMP message.");return;}logger$4.info("Sending JMP message: ".concat(msg));this.dataChannel.send(msg);});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceAdvertisementReceived,data=>{if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily$1(mediaType)===MediaFamily$1.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.MediaRequestStatusReceived,data=>{data.streamStates.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got MediaRequestStatus for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents$1.MediaRequestReceived,data=>{if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){this.sendMediaRequestStatus(mediaType);}this.updateRequestedStreams(mediaType,data.requests);});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);var mediaFamily=getMediaFamily$1(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger$4.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref6=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref6;var _a,_b,_c,_d;if(ids.length>1){throw new Error("More than a single ID being unexpected/invalid ".concat(ids));}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger$4.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];var streamIdsMatched=signaler.getSenderIds().some(validId=>compareStreamIds(id,validId));if(streamIdsMatched){var encodingIndex=signaler.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===MediaFamily$1.Video){var trackSettings=(_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getSettings();if(trackSettings){encodingParams.scaleDownRatio=getScaleDownRatio(trackSettings.width,trackSettings.height,(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxFs,(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxWidth,(_d=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_d===void 0?void 0:_d.maxHeight);}}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger$4.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger$4.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size>0);sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{});dataChannel.onopen=e=>{logger$4.info('DataChannel opened: ',e);[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger$4.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger$4.error("Error parsing datachannel JSON: ".concat(err));return;}logger$4.debug('DataChannel got msg: ',parsed);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger$4.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger$4.error("Received invalid JMP msg: ".concat(jmpMsg));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=e=>{logger$4.info('DataChannel closed: ',e);};dataChannel.onerror=e=>{logger$4.info('DataChannel error: ',e);};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily$1(mediaType)!==MediaFamily$1.Video){return;}var streamStates=this.getVideoStreamStates(mediaType);if(streamStates===null){logger$4.debug("Empty streamStates, not sending MediaRequestStatus");return;}var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){contentHint=transceiver.publishedTrack.videoContentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}publishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);if(track===sendTransceiver.publishedTrack){logger$4.warn("This track has already been published on the transceiver.");return Promise.resolve();}this.addTrackListeners(mediaType,track);return sendTransceiver.publishTrack(track);});}unpublishTrack(track){return __awaiter(this,void 0,void 0,function*(){var mediaContent;if((track instanceof LocalDisplayTrack||track instanceof LocalSystemAudioTrack)&&this.options.floorControlledPresentation){mediaContent=MediaContent$1.Slides;}else {mediaContent=MediaContent$1.Main;}var mediaFamily=toMediaFamily(track.kind);var mediaType=getMediaType(mediaFamily,mediaContent);var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.unpublishTrack();});}addTrackListeners(mediaType,track){var onTrackResolutionChange=()=>{this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);};track.on(LocalTrack.Events.Muted,onTrackMute);var onTrackPublish=event=>{if(!event.isPublished){track.off(LocalTrack.Events.Muted,onTrackMute);track.off(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);track.off(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);}if(!track.muted){this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoStreamStates(mediaType){var _a,_b,_c;var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignaler(sendTransceiver.mid);if(!signaler){return null;}var activeSimulcastLayerNumber=((_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers())||0;var published=(_b=sendTransceiver.publishedTrack)===null||_b===void 0?void 0:_b.published;var muted=((_c=sendTransceiver.publishedTrack)===null||_c===void 0?void 0:_c.muted)===true;return signaler.getSenderIds().map(id=>{var state;if(!published){state='no source';}else if(muted){state='avatar';}else if(activeSimulcastLayerNumber<signaler.getEncodingIndexForStreamId(id)){state='no source';}else {state='live';}return {id,state,csi:sendTransceiver.csi};});}createReceiveSlot(mediaType){return __awaiter(this,void 0,void 0,function*(){return new Promise(createReceiveSlotResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});this.addMid(mediaType);var recvOnlyTransceiver=new ReceiveOnlyTransceiver(rtcRtpTransceiver,mid=>{var ingressSignaler=this.streamSignalerManager.getIngressStreamSignaler(mid);if(!ingressSignaler){return null;}return ingressSignaler.getReceiverId();});if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){throw new Error("sender codecs or receiver codecs is undefined or empty");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){throw new Error("ingress payload type is not well defined in receiver codecs");}return targetCodec.pt;}createOffer(){return __awaiter(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.currentMid++;}return new Promise(createOfferResolve=>{this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){var _a;if(this.setAnswerResolve!==undefined){throw new Error("Tried to start a new createOffer flow before the old one had finished");}var setAnswerPromise=new Promise(resolve=>{this.setAnswerResolve=resolve;});var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});yield setAnswerPromise;}));});});}setAnswer(answer){return __awaiter(this,void 0,void 0,function*(){var isInitialAnswer=!this.pc.getRemoteDescription();var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){throw new Error("Call to setAnswer without having previously called createOffer");}return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter(this,void 0,void 0,function*(){if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger$4.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}if(isInitialAnswer&&this.customCodecParameters.size>0){yield this.queueLocalOfferAnswer();}}));});}doLocalOfferAnswer(){var _a;return __awaiter(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){throw new Error('No SDP offer');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer);var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer});});}queueLocalOfferAnswer(){return __awaiter(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}enableMultistreamAudio(enabled){var sendTransceiver=this.sendTransceivers.get(MediaType$1.AudioMain);if(sendTransceiver){return sendTransceiver.setActive(enabled);}return false;}preProcessLocalOffer(offer){var parsed=parse(offer);filterCodecs(parsed,['h264','opus','rtx']);setMaxBandwidth(parsed,20000000);parsed.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var ingressSignaler=this.streamSignalerManager.getOrCreateIngressStreamSignaler(av.mid);ingressSignaler.signalLocalStreams(av);});parsed.avMedia.filter(av=>av.direction==='sendrecv').forEach(av=>{var egressSignaler=this.streamSignalerManager.getOrCreateEgressStreamSignaler(av.mid);var simulcastEnabled=hasSimulcast(av);var rtxEnabled=av.type==='video';egressSignaler.signalStreams(simulcastEnabled,rtxEnabled,av);if(av.type==='video'){[...av.codecs.values()].filter(ci=>ci.name==='H264').forEach(ci=>{ci.fmtParams.set('max-mbps',"".concat(defaultMaxVideoEncodeMbps));ci.fmtParams.set('max-fs',"".concat(defaultMaxVideoEncodeFrameSize));});}var mediaType=[...this.sendTransceivers.keys()].find(key=>{var _a;return ((_a=this.sendTransceivers.get(key))===null||_a===void 0?void 0:_a.mid)===av.mid;});if(mediaType&&this.customCodecParameters.has(mediaType)){[...av.codecs.values()].filter(ci=>ci.name===(av.type==='audio'?'opus':'H264')).forEach(ci=>{var _a;(_a=this.customCodecParameters.get(mediaType))===null||_a===void 0?void 0:_a.forEach((value,param)=>{if(value===null){ci.fmtParams.delete(param);}else {ci.fmtParams.set(param,"".concat(value));}});});}});if(getBrowserDetails().name!=='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);}return parsed.toString();}prepareLocalOfferForRemoteServer(offer){var parsed=parse(offer);var midContentMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{midContentMap.set(transceiver.mid,getMediaContent(mediaType));});injectContentTypes(parsed,midContentMap);var csiMap=new Map();this.sendTransceivers.forEach((transceiver,mediaType)=>{csiMap.set(mediaType,transceiver.csi);});injectJmpAttributes(parsed,csiMap,this.options.streamSignalingMode);filterRecvOnlyMlines(parsed);injectDummyCandidates(parsed);parsed.avMedia.filter(av=>av.direction==='sendrecv'&&av.type==='video').forEach(av=>{var ssrcGroup=av.ssrcGroups.find(sg=>sg.semantics==='SIM');if(ssrcGroup){ssrcGroup.ssrcs.forEach((ssrc,index)=>{av.addLine(new SsrcLine(ssrc,'fmtp',"* max-fs=".concat(simulcastMaxFrameSizes[index])));});}});if(getBrowserDetails().name==='Firefox'){setupBundle(parsed,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){parsed.media.forEach((mline,index)=>{if(index>0){mline.port=parsed.media[0].port;}});}}return parsed.toString();}preProcessRemoteAnswer(answer){var _a;var parsedAnswer=parse(answer);var parsedOffer=parse((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMlinesInAnswer(parsedOffer,parsedAnswer,this.streamSignalerManager);if(getBrowserDetails().name==='Firefox'){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midMap);if(this.options.bundlePolicy==='max-bundle'){var{ufrag,pwd}=parsedAnswer.media[0].iceInfo;parsedAnswer.media.forEach((mline,index)=>{if(index>0){mline.iceInfo.ufrag=ufrag;mline.iceInfo.pwd=pwd;}});}}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){throw new Error("Unable to find matching transceiver for media type ".concat(mediaType));}return sendTransceiver;}getPublishedTracks(){return [...this.sendTransceivers.values()].map(transceiver=>transceiver.publishedTrack).filter(Boolean);}setCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();Object.entries(parameters).forEach(_ref7=>{var[param,value]=_ref7;currentParams.set(param,value);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}deleteCodecParameters(mediaType,parameters){return __awaiter(this,void 0,void 0,function*(){var currentParams=this.customCodecParameters.get(mediaType)||new Map();parameters.forEach(param=>{currentParams.set(param,null);});this.customCodecParameters.set(mediaType,currentParams);if(this.pc.getRemoteDescription()){yield this.queueLocalOfferAnswer();}});}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger$4.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(sr=>{sr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running stream request task, but ReceiveSlot ID is missing!");return;}requestedReceiveSlotIds.push(rs.id);});});(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(!requestedReceiveSlotIds.some(id=>compareStreamIds(id,transceiver.receiveSlot.id))){transceiver.receiveSlot._updateSource('no source',undefined);}});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger$4.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.clearMids();this.initializePeerConnection();this.streamSignalerManager=new StreamSignalerManager(this.options.streamSignalingMode);var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===MediaContent$1.Main?mainSceneId:slidesSceneId;this.addMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily$1(mediaType)===MediaFamily$1.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.csi=generateCsi(getMediaFamily$1(mediaType),sceneId);(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{this.addMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter(this,void 0,void 0,function*(){yield Promise.all([...this.sendTransceivers.entries()].map(_ref8=>{var[mediaType,transceiver]=_ref8;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.underlyingTrack.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){statsToModify.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}stats.set(senderStats.id,statsToModify);}});});}));yield Promise.all([...this.recvTransceivers.entries()].map(_ref9=>{var[mediaType,transceivers]=_ref9;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;var signaler=this.streamSignalerManager.getIngressStreamSignaler(statsToModify.mid);if(signaler){Object.assign(statsToModify,signaler.getReceiverId());}stats.set(receiverStats.id,statsToModify);}});})));});}));});}attachMetricsObserver(){rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000);}setMetricsCallback(callback){this.metricsCallback=callback;}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(MediaType$1.AudioMain),audioSlides:this.getCsiByMediaType(MediaType$1.AudioSlides),videoMain:this.getCsiByMediaType(MediaType$1.VideoMain),videoSlides:this.getCsiByMediaType(MediaType$1.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
|
|
7330
7332
|
|
|
7331
7333
|
var Event$1;
|
|
7332
7334
|
(function (Event) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/internal-media-core",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.1",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist/cjs",
|
|
6
6
|
"dist/esm",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"@babel/runtime": "^7.18.9",
|
|
48
48
|
"@webex/json-multistream": "2.0.1",
|
|
49
49
|
"@webex/ts-sdp": "1.3.2",
|
|
50
|
-
"@webex/web-client-media-engine": "2.
|
|
50
|
+
"@webex/web-client-media-engine": "2.1.2",
|
|
51
51
|
"detectrtc": "^1.4.1",
|
|
52
52
|
"events": "^3.3.0",
|
|
53
53
|
"typed-emitter": "^2.1.0",
|