@webex/internal-media-core 1.37.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js
CHANGED
|
@@ -5059,18 +5059,20 @@ var isIceConnected=this.pc.iceConnectionState==='connected'||this.pc.iceConnecti
|
|
|
5059
5059
|
var localCandidateStatsReports=[];(yield this.pc.getStats()).forEach(report=>{var _a;// collect all local candidate ids from `candidate-pair` stats reports with `succeeded` state.
|
|
5060
5060
|
if(report.type==='candidate-pair'&&((_a=report.state)===null||_a===void 0?void 0:_a.toLowerCase())==='succeeded'){succeededLocalCandidateIds.add(report.localCandidateId);}// collect all `local-candidate` stats.
|
|
5061
5061
|
if(report.type==='local-candidate'){localCandidateStatsReports.push(report);}});// find the `local-candidate` stats which report id contains in `succeededLocalCandidateIds`.
|
|
5062
|
-
var localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return "TURN-".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents
|
|
5063
|
-
|
|
5064
|
-
|
|
5065
|
-
|
|
5066
|
-
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
|
|
5071
|
-
|
|
5072
|
-
|
|
5073
|
-
|
|
5062
|
+
var localCandidate=localCandidateStatsReports.find(report=>succeededLocalCandidateIds.has(report.id));if(!localCandidate){return 'unknown';}if(localCandidate.relayProtocol){return "TURN-".concat(localCandidate.relayProtocol.toUpperCase());}return (_a=localCandidate.protocol)===null||_a===void 0?void 0:_a.toUpperCase();});}}PeerConnection.Events=PeerConnectionEvents;var MediaCodecMimeType;(function(MediaCodecMimeType){MediaCodecMimeType["H264"]="video/H264";MediaCodecMimeType["AV1"]="video/AV1";MediaCodecMimeType["OPUS"]="audio/opus";})(MediaCodecMimeType||(MediaCodecMimeType={}));var defaultMaxVideoEncodeFrameSize=8160;var defaultMaxVideoEncodeMbps=244800;var RecommendedOpusBitrates;(function(RecommendedOpusBitrates){RecommendedOpusBitrates[RecommendedOpusBitrates["NB"]=12000]="NB";RecommendedOpusBitrates[RecommendedOpusBitrates["WB"]=20000]="WB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB"]=40000]="FB";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"]=64000]="FB_MONO_MUSIC";RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"]=128000]="FB_STEREO_MUSIC";})(RecommendedOpusBitrates||(RecommendedOpusBitrates={}));var maxFrameSizeToMaxBitrateMap=new Map([[60,99000],[240,199000],[576,300000],[920,640000],[1296,720000],[2304,880000],[3600,2500000],[8160,4000000]]);function areProfileLevelIdsCompatible(senderProfileLevelId,receiverProfileLevelId,levelAsymmetryAllowed){var senderProfile=Number.parseInt("0x".concat(senderProfileLevelId),16);var recvProfile=Number.parseInt("0x".concat(receiverProfileLevelId),16);var senderProfileIdc=senderProfile>>16;var recvProfileIdc=recvProfile>>16;var senderProfileIop=(senderProfile&0x00ff00)>>8;var recvProfileIop=(recvProfile&0x00ff00)>>8;var senderLevelIdc=senderProfile&0x0000ff;var recvLevelIdc=recvProfile&0x0000ff;var areProfileCompatible=senderProfileIdc===recvProfileIdc&&senderProfileIop===recvProfileIop||senderProfileIdc===0x42&&recvProfileIdc===0x42&&(senderProfileIop&0x40)===(recvProfileIop&0x40);var isLevelIdcCompatible=levelAsymmetryAllowed?true:senderLevelIdc<=recvLevelIdc;return areProfileCompatible&&isLevelIdcCompatible;}function areCodecsCompatible(senderCodec,receiverCodec){return Object.keys(receiverCodec).every(key=>{if(key==='clockRate'||key==='name'){return senderCodec[key]===receiverCodec[key];}if(key==='fmtParams'){var fmtpForSender=senderCodec[key];var fmtpForReceiver=receiverCodec[key];var levelAsymmetryAllowed=[...fmtpForSender.keys()].some(senderFmtpParamKey=>{return senderFmtpParamKey==='level-asymmetry-allowed'&&fmtpForReceiver.get(senderFmtpParamKey)==='1'&&fmtpForSender.get(senderFmtpParamKey)==='1';});return [...fmtpForSender.keys()].every(senderFmtpParamKey=>{if(fmtpForReceiver.get(senderFmtpParamKey)){if(senderFmtpParamKey==='profile-level-id'){return areProfileLevelIdsCompatible(fmtpForSender.get(senderFmtpParamKey),fmtpForReceiver.get(senderFmtpParamKey),levelAsymmetryAllowed);}}if(senderFmtpParamKey==='packetization-mode'){return fmtpForSender.get(senderFmtpParamKey)===fmtpForReceiver.get(senderFmtpParamKey);}return true;});}return true;});}function gcd(a,b){return b===0?a:gcd(b,a%b);}function getFrameHeightByMaxFs(sourceAspectRatio,requestedMaxFs){var _gcd=gcd(sourceAspectRatio[0],sourceAspectRatio[1]);var minNumberRatiosForWidth=sourceAspectRatio[0]/_gcd;var minNumberRatiosForHeight=sourceAspectRatio[1]/_gcd;return Math.floor(Math.sqrt(requestedMaxFs*16*16/(minNumberRatiosForWidth*minNumberRatiosForHeight)))*minNumberRatiosForHeight;}function getScaleDownRatio(sourceWidth,sourceHeight,maxFs,maxWidth,maxHeight){if(!sourceWidth||!sourceHeight||!maxFs){return undefined;}var scaleDownRatio=Math.max(sourceHeight/getFrameHeightByMaxFs([sourceWidth,sourceHeight],maxFs),1.0);if(maxWidth&&maxHeight){scaleDownRatio=Math.max(sourceWidth/maxWidth,sourceHeight/maxHeight,scaleDownRatio);}return scaleDownRatio;}function getRecommendedMaxBitrateForFrameSize(requestedMaxFs){if(requestedMaxFs<60){throw new Error("requested video max frame size can not less than 60");}var expectedHeight=[...maxFrameSizeToMaxBitrateMap.keys()].sort((a,b)=>b-a).find(h=>requestedMaxFs>=h);return maxFrameSizeToMaxBitrateMap.get(expectedHeight);}/******************************************************************************
|
|
5063
|
+
Copyright (c) Microsoft Corporation.
|
|
5064
|
+
|
|
5065
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
5066
|
+
purpose with or without fee is hereby granted.
|
|
5067
|
+
|
|
5068
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
5069
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
5070
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
5071
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
5072
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
5073
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
5074
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
5075
|
+
***************************************************************************** */function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator["throw"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$2={exports:{}};/*!
|
|
5074
5076
|
* js-logger - http://github.com/jonnyreeves/js-logger
|
|
5075
5077
|
* Jonny Reeves, http://jonnyreeves.co.uk/
|
|
5076
5078
|
* js-logger may be freely distributed under the MIT license.
|
|
@@ -5119,20 +5121,7 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
|
|
|
5119
5121
|
// `options` hash can be used to configure the default logLevel and provide a custom message formatter.
|
|
5120
5122
|
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.
|
|
5121
5123
|
Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
|
|
5122
|
-
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}var HomerMsgType$1;(function(HomerMsgType){HomerMsgType["Multistream"]="multistream";})(HomerMsgType$1||(HomerMsgType$1={}));class HomerMsg{constructor(msgType,payload){this.msgType=msgType;this.payload=payload;}static fromJson(data){if(!data.msgType||!data.payload){return null;}return new HomerMsg(data.msgType,data.payload);}}var JmpMsgType$1;(function(JmpMsgType){JmpMsgType["Scr"]="scr";JmpMsgType["ScrAck"]="scrAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";JmpMsgType["SourceIndication"]="sourceIndication";JmpMsgType["SourceIndicationAck"]="sourceIndicationAck";})(JmpMsgType$1||(JmpMsgType$1={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class JmpScrAckMsg{constructor(scrSeqNum){this.scrSeqNum=scrSeqNum;}toString(){return "JmpScrAckMsg(seqNum=".concat(this.scrSeqNum,")");}}function isValidJmpScrAckMsg(msg){var maybeJmpScrAckMsg=msg;return Boolean(maybeJmpScrAckMsg.scrSeqNum);}class JmpScrMsg{constructor(seqNum,requests){this.seqNum=seqNum;this.requests=requests;}toString(){return "JmpScrMsg(seqNum=".concat(this.seqNum,", requests=[").concat(this.requests,"])");}}function isValidJmpScrMsg(msg){var maybeJmpScrMsg=msg;return Boolean(maybeJmpScrMsg.seqNum&&maybeJmpScrMsg.requests);}class JmpScrRequest{constructor(policy,policySpecificInfo,ids,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return "Request(policy=".concat(this.policy,", info=").concat(this.policySpecificInfo,", ids=[").concat(this.ids,"], maxPayloadBitsPerSecond=[").concat(this.maxPayloadBitsPerSecond,"], codecInfos=[").concat(this.codecInfos,"])");}}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}class SourceIndicationAckMsg{constructor(sourceIndicationSeqNum){this.sourceIndicationSeqNum=sourceIndicationSeqNum;}toString(){return "SourceIndicationAckMsg(sourceIndicationSeqNum=".concat(this.sourceIndicationSeqNum,")");}}function isValidSourceIndicationAckMsg(msg){var maybeSourceIndicationAckMsg=msg;return Boolean(maybeSourceIndicationAckMsg.sourceIndicationSeqNum);}var MediaFamily$1;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(MediaFamily$1||(MediaFamily$1={}));var MediaContent$1;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(MediaContent$1||(MediaContent$1={}));var Policy$1;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(Policy$1||(Policy$1={}));var MediaType$1;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(MediaType$1||(MediaType$1={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily$1.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Main){return MediaType$1.VideoMain;}if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Slides){return MediaType$1.VideoSlides;}if(mediaFamily===MediaFamily$1.Audio&&mediaContent===MediaContent$1.Main){return MediaType$1.AudioMain;}return MediaType$1.AudioSlides;}function getMediaFamily$1(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaFamily$1.Video:MediaFamily$1.Audio;}function getMediaContent(mediaType){return [MediaType$1.VideoMain,MediaType$1.AudioMain].includes(mediaType)?MediaContent$1.Main:MediaContent$1.Slides;}var truthyOrZero=value=>value===0||value;function isValidStreamId(obj){var maybeSourceId=obj;if(maybeSourceId.mid&&maybeSourceId.ssrc){return false;}return Boolean(maybeSourceId.mid)||Boolean(maybeSourceId.ssrc);}function compareStreamIds(id1,id2){var keys1=Object.keys(id1);var keys2=Object.keys(id2);if(keys1.length!==keys2.length){return false;}return keys1.every(key=>id1[key]===id2[key]);}class SourceIndicationMsg{constructor(seqNum,numTotalSources,numLiveSources,sources,videoContentHint){this.seqNum=seqNum;this.numTotalSources=numTotalSources;this.numLiveSources=numLiveSources;this.sources=sources;this.videoContentHint=videoContentHint;}sourcesToString(){return this.sources.map(source=>"Source(id=".concat(source.id," state=").concat(source.state," ").concat(source.csi?"csi=".concat(source.csi):'',")")).join(', ');}toString(){return "SourceIndication(seqNum=".concat(this.seqNum," numTotalSources=").concat(this.numTotalSources," numLiveSources=").concat(this.numLiveSources," sources=[").concat(this.sourcesToString(),"])");}}function isValidSource(obj){var maybeSource=obj;return Boolean(maybeSource.id&&isValidStreamId(maybeSource.id)&&['no source','invalid source','live','avatar','bandwidth disabled'].includes(maybeSource.state));}function isValidSourceIndicationMsg(msg){var _a;var maybeSourceIndicationMsg=msg;return Boolean(maybeSourceIndicationMsg.seqNum&&truthyOrZero(maybeSourceIndicationMsg.numTotalSources)&&truthyOrZero(maybeSourceIndicationMsg.numLiveSources)&&maybeSourceIndicationMsg.sources&&((_a=maybeSourceIndicationMsg.sources)===null||_a===void 0?void 0:_a.every(source=>isValidSource(source))));}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents$1;(function(JmpSessionEvents){JmpSessionEvents["SourceIndication"]="source-indication";JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["ScrRequestReceived"]="scr-request-received";})(JmpSessionEvents$1||(JmpSessionEvents$1={}));class JmpSession extends EventEmitter$4{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currScrSeqNum=1;this.currSourceIndicationSeqNum=1;this.txCallback=undefined;this.lastSentScr=undefined;this.lastSentScrAck=undefined;this.lastReceivedScr=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get("JmpSession ".concat(this.mediaFamily,"-").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var jmpScr=new JmpScrMsg(this.currScrSeqNum++,requests);var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.Scr,payload:jmpScr});this.sendJmpMsg(jmpMsg);(_a=this.lastSentScr)===null||_a===void 0?void 0:_a.cancel();this.lastSentScr=new RetransmitHandler(jmpScr,this.maxNumRetransmits,this.retransmitIntervalMs,msg=>this.sendJmpScr(msg),expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});}updateSourceIndication(numTotalSources,numLiveSources,sources,videoContentHint){var _a;var filteredSources=sources.filter(source=>{var _a;return (_a=this.lastReceivedScr)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>compareStreamIds(streamId,source.id)));});var sourceIndicationMsg=new SourceIndicationMsg(this.currSourceIndicationSeqNum++,numTotalSources,numLiveSources,filteredSources,videoContentHint);var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.SourceIndication,payload:sourceIndicationMsg});this.sendJmpMsg(jmpMsg);(_a=this.lastSentSourceIndication)===null||_a===void 0?void 0:_a.cancel();this.lastSentSourceIndication=new RetransmitHandler(sourceIndicationMsg,this.maxNumRetransmits,this.retransmitIntervalMs,msg=>this.sendSourceIndication(msg),expiredMsg=>{this.logger.warn("Retransmits for message expired:",expiredMsg);});}receive(jmpMsg){var _a,_b,_c,_d,_e,_f,_g,_h;if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(jmpMsg," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",jmpMsg);var{payload}=jmpMsg;if(payload.msgType===JmpMsgType$1.Scr){var jmpScr=payload.payload;if(!isValidJmpScrMsg(jmpScr)){this.logger.error("Received invalid SCR:",jmpScr);return;}if(this.lastReceivedScr&&jmpScr.seqNum<((_a=this.lastReceivedScr)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old SCR, ignoring");}else if(this.lastReceivedScr&&jmpScr.seqNum===this.lastReceivedScr.seqNum){if(this.lastSentScrAck){this.logger.info("Received duplicate SCR, re-sending ACK");this.sendJmpScrAck(this.lastSentScrAck);}else {this.logger.warn("Received duplicate SCR, but there was no ACK previously sent");}}else {this.logger.info("Received new SCR, sending ACK");var jmpScrAck=new JmpScrAckMsg(jmpScr.seqNum);this.lastReceivedScr=jmpScr;this.lastSentScrAck=jmpScrAck;this.sendJmpScrAck(jmpScrAck);this.emit(JmpSessionEvents$1.ScrRequestReceived,jmpScr);}}else if(payload.msgType===JmpMsgType$1.ScrAck){var _jmpScrAck=payload.payload;if(!isValidJmpScrAckMsg(_jmpScrAck)){this.logger.error("Received invalid SCR ACK:",_jmpScrAck);return;}if(_jmpScrAck.scrSeqNum===((_c=(_b=this.lastSentScr)===null||_b===void 0?void 0:_b.msg)===null||_c===void 0?void 0:_c.seqNum)){this.logger.info("Received ACK for last sent SCR");(_d=this.lastSentScr)===null||_d===void 0?void 0:_d.cancel();}else {this.logger.info("Received ACK for old SCR");}}else if(payload.msgType===JmpMsgType$1.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",activeSpeakerNotification);return;}this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents$1.ActiveSpeaker,activeSpeakerNotification);}else if(payload.msgType===JmpMsgType$1.SourceIndication){var sourceIndication=payload.payload;if(!isValidSourceIndicationMsg(sourceIndication)){this.logger.error("Received invalid Source Indication:",sourceIndication);return;}if(this.lastReceivedSourceIndication&&sourceIndication.seqNum<((_e=this.lastReceivedSourceIndication)===null||_e===void 0?void 0:_e.seqNum)){this.logger.info("Received old Source Indication, ignoring");}else if(this.lastReceivedSourceIndication&&sourceIndication.seqNum===this.lastReceivedSourceIndication.seqNum){if(this.lastSentSourceIndicationAck){this.logger.info("Received duplicate Source Indication, re-sending ACK");this.sendSourceIndicationAck(this.lastSentSourceIndicationAck);}else {this.logger.warn("Received duplicate Source Indication, but there was no ACK previously sent");}}else {this.logger.info("Received new Source Indication, sending ACK");var sourceIndicationAck=new SourceIndicationAckMsg(sourceIndication.seqNum);this.lastReceivedSourceIndication=sourceIndication;this.lastSentSourceIndicationAck=sourceIndicationAck;this.sendSourceIndicationAck(sourceIndicationAck);this.emit(JmpSessionEvents$1.SourceIndication,sourceIndication);}}else if(payload.msgType===JmpMsgType$1.SourceIndicationAck){var _sourceIndicationAck=payload.payload;if(!isValidSourceIndicationAckMsg(_sourceIndicationAck)){this.logger.error("Received invalid SCR ACK:",_sourceIndicationAck);return;}if(_sourceIndicationAck.sourceIndicationSeqNum===((_g=(_f=this.lastSentSourceIndication)===null||_f===void 0?void 0:_f.msg)===null||_g===void 0?void 0:_g.seqNum)){this.logger.info("Received ACK for last sent SCR");(_h=this.lastSentSourceIndication)===null||_h===void 0?void 0:_h.cancel();}else {this.logger.info("Received ACK for old SCR");}}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a;this.logger.info("closing");(_a=this.lastSentScr)===null||_a===void 0?void 0:_a.cancel();}sendSourceIndicationAck(sourceIndicationAck){var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.SourceIndicationAck,payload:sourceIndicationAck});this.sendJmpMsg(jmpMsg);}sendSourceIndication(sourceIndication){var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.SourceIndication,payload:sourceIndication});this.sendJmpMsg(jmpMsg);}sendJmpScrAck(jmpScrAck){var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.ScrAck,payload:jmpScrAck});this.sendJmpMsg(jmpMsg);}sendJmpScr(jmpScr){var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType:JmpMsgType$1.Scr,payload:jmpScr});this.sendJmpMsg(jmpMsg);}sendJmpMsg(msg){var _a;var homerMsg=new HomerMsg(HomerMsgType$1.Multistream,msg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}}class MediaRequest{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;}_toJmpScrRequest(){return new JmpScrRequest(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}/******************************************************************************
|
|
5123
|
-
Copyright (c) Microsoft Corporation.
|
|
5124
|
-
|
|
5125
|
-
Permission to use, copy, modify, and/or distribute this software for any
|
|
5126
|
-
purpose with or without fee is hereby granted.
|
|
5127
|
-
|
|
5128
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
5129
|
-
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
5130
|
-
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
5131
|
-
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
5132
|
-
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
5133
|
-
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
5134
|
-
PERFORMANCE OF THIS SOFTWARE.
|
|
5135
|
-
***************************************************************************** */function __awaiter(thisArg,_arguments,P,generator){function adopt(value){return value instanceof P?value:new P(function(resolve){resolve(value);});}return new(P||(P=Promise))(function(resolve,reject){function fulfilled(value){try{step(generator.next(value));}catch(e){reject(e);}}function rejected(value){try{step(generator["throw"](value));}catch(e){reject(e);}}function step(result){result.done?resolve(result.value):adopt(result.value).then(fulfilled,rejected);}step((generator=generator.apply(thisArg,_arguments||[])).next());});}var commonjsGlobal$3=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}function getAugmentedNamespace(n){if(n.__esModule)return n;var a=Object.defineProperty({},'__esModule',{value:true});Object.keys(n).forEach(function(k){var d=Object.getOwnPropertyDescriptor(n,k);Object.defineProperty(a,k,d.get?d:{enumerable:true,get:function get(){return n[k];}});});return a;}// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
5124
|
+
if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$1);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});function isValidActiveSpeakerInfo(msg){var maybeActiveSpeakerInfo=msg;return Boolean('priority'in maybeActiveSpeakerInfo&&'crossPriorityDuplication'in maybeActiveSpeakerInfo&&'crossPolicyDuplication'in maybeActiveSpeakerInfo&&'preferLiveVideo'in maybeActiveSpeakerInfo);}function areNamedMediaGroupArraysEqual(left,right){if(left===undefined||right===undefined){return left===right;}if(left.length!==right.length){return false;}for(var _i8=0;_i8<left.length;_i8+=1){if(left[_i8]!==right[_i8]){return false;}}return true;}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areNamedMediaGroupArraysEqual(left.namedMediaGroups,right.namedMediaGroups);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}var HomerMsgType$1;(function(HomerMsgType){HomerMsgType["Multistream"]="multistream";})(HomerMsgType$1||(HomerMsgType$1={}));class HomerMsg{constructor(msgType,payload){this.msgType=msgType;this.payload=payload;}static fromJson(data){if(!data.msgType||!data.payload){return null;}return new HomerMsg(data.msgType,data.payload);}}var JmpMsgType$1;(function(JmpMsgType){JmpMsgType["MediaRequest"]="mediaRequest";JmpMsgType["MediaRequestAck"]="mediaRequestAck";JmpMsgType["MediaRequestStatus"]="mediaRequestStatus";JmpMsgType["MediaRequestStatusAck"]="mediaRequestStatusAck";JmpMsgType["SourceAdvertisement"]="sourceAdvertisement";JmpMsgType["SourceAdvertisementAck"]="sourceAdvertisementAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";})(JmpMsgType$1||(JmpMsgType$1={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestMsg{constructor(seqNum,requests){this.seqNum=seqNum;this.requests=requests;}toString(){return "JmpMediaMsg(seqNum=".concat(this.seqNum,", requests=[").concat(this.requests,"])");}}function isValidMediaRequestMsg(msg){var maybeMediaRequestMsg=msg;return Boolean(maybeMediaRequestMsg.seqNum&&maybeMediaRequestMsg.requests);}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return "MediaRequestAckMsg(seqNum=".concat(this.mediaRequestSeqNum,")");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}function isValidStreamId(obj){var maybeStreamId=obj;if(maybeStreamId.mid&&maybeStreamId.ssrc){return false;}return Boolean(maybeStreamId.mid)||Boolean(maybeStreamId.ssrc);}function compareStreamIds(id1,id2){var keys1=Object.keys(id1);var keys2=Object.keys(id2);if(keys1.length!==keys2.length){return false;}return keys1.every(key=>id1[key]===id2[key]);}function isValidStreamInfo(obj){var maybeStreamInfo=obj;return Boolean(maybeStreamInfo.id&&isValidStreamId(maybeStreamInfo.id)&&['no source','invalid source','live','avatar','bandwidth disabled'].includes(maybeStreamInfo.state));}class MediaRequestStatusMsg{constructor(seqNum,streamStates){this.seqNum=seqNum;this.streamStates=streamStates;}}function isValidMediaRequestStatusMsg(msg){var maybeMediaRequestStatusMsg=msg;return Boolean(maybeMediaRequestStatusMsg.seqNum)&&maybeMediaRequestStatusMsg.streamStates&&maybeMediaRequestStatusMsg.streamStates.every(streamInfo=>isValidStreamInfo(streamInfo));}function compareStreamStateArrays(streamStates1,streamStates2){var _a,_b;if(streamStates1.length!==streamStates2.length){return false;}for(var _i9=0;_i9<streamStates1.length;_i9+=1){if(!compareStreamIds(streamStates1[_i9].id,streamStates2[_i9].id)){return false;}if(streamStates1[_i9].state!==streamStates2[_i9].state){return false;}if(((_a=streamStates1[_i9])===null||_a===void 0?void 0:_a.csi)!==((_b=streamStates2[_i9])===null||_b===void 0?void 0:_b.csi)){return false;}}return true;}class MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return "MediaRequestStatusAckMsg(seqNum=".concat(this.mediaRequestStatusSeqNum,")");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}function areH264CodecsEqual(left,right){if(left===undefined||right===undefined){return left===right;}return left.maxFs===right.maxFs&&left.maxFps===right.maxFps&&left.maxMbps===right.maxMbps&&left.maxWidth===right.maxWidth&&left.maxHeight===right.maxHeight;}function areCodecInfosEqual(left,right){return left.payloadType===right.payloadType&&areH264CodecsEqual(left.h264,right.h264);}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}var MediaFamily$1;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(MediaFamily$1||(MediaFamily$1={}));var MediaContent$1;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(MediaContent$1||(MediaContent$1={}));var Policy$1;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(Policy$1||(Policy$1={}));var MediaType$1;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(MediaType$1||(MediaType$1={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===MediaFamily$1.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Main){return MediaType$1.VideoMain;}if(mediaFamily===MediaFamily$1.Video&&mediaContent===MediaContent$1.Slides){return MediaType$1.VideoSlides;}if(mediaFamily===MediaFamily$1.Audio&&mediaContent===MediaContent$1.Main){return MediaType$1.AudioMain;}return MediaType$1.AudioSlides;}function getMediaFamily$1(mediaType){return [MediaType$1.VideoMain,MediaType$1.VideoSlides].includes(mediaType)?MediaFamily$1.Video:MediaFamily$1.Audio;}function getMediaContent(mediaType){return [MediaType$1.VideoMain,MediaType$1.AudioMain].includes(mediaType)?MediaContent$1.Main:MediaContent$1.Slides;}var truthyOrZero=value=>value===0||value;class SourceAdvertisementMsg{constructor(seqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){this.seqNum=seqNum;this.numTotalSources=numTotalSources;this.numLiveSources=numLiveSources;this.namedMediaGroups=namedMediaGroups;this.videoContentHint=videoContentHint;}toString(){return "SourceAdvertisement(seqNum=".concat(this.seqNum,", numTotalSources=").concat(this.numTotalSources,", numLiveSources=").concat(this.numLiveSources,", namedMediaGroups=").concat(this.namedMediaGroups,", videoContentHint=").concat(this.videoContentHint);}}function isValidSourceAdvertisementMsg(msg){var maybeSourceAdvertisementMsg=msg;return Boolean(maybeSourceAdvertisementMsg.seqNum&&truthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&truthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}class SourceAdvertisementAckMsg{constructor(sourceAdvertisementSeqNum){this.sourceAdvertisementSeqNum=sourceAdvertisementSeqNum;}toString(){return "SourceAdvertisementAckMsg(sourceAdvertisementSeqNum=".concat(this.sourceAdvertisementSeqNum,")");}}function isValidSourceAdvertisementAckMsg(msg){var maybeSourceAdvertisementAckMsg=msg;return Boolean(maybeSourceAdvertisementAckMsg.sourceAdvertisementSeqNum);}class StreamRequest$1{constructor(policy,policySpecificInfo,ids,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.ids=ids;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}toString(){return "Request(policy=".concat(this.policy,", info=").concat(this.policySpecificInfo,", ids=[").concat(this.ids,"], maxPayloadBitsPerSecond=[").concat(this.maxPayloadBitsPerSecond,"], codecInfos=[").concat(this.codecInfos,"])");}}function arePolicySpecificInfosEqual(left,right){if(isValidActiveSpeakerInfo(left)){if(!isValidActiveSpeakerInfo(right)){return false;}return areActiveSpeakerInfosEqual(left,right);}if(isValidReceiverSelectedInfo(left)){if(!isValidReceiverSelectedInfo(right)){return false;}return areReceiverSelectedInfosEqual(left,right);}throw new Error('Invalid PolicySpecificInfo');}function areCodecInfoArraysEqual(left,right){if(left.length!==right.length){return false;}for(var _i10=0;_i10<left.length;_i10+=1){if(!areCodecInfosEqual(left[_i10],right[_i10])){return false;}}return true;}function areStreamIdArraysEqual(left,right){if(left.length!==right.length){return false;}for(var _i11=0;_i11<left.length;_i11+=1){if(!compareStreamIds(left[_i11],right[_i11])){return false;}}return true;}function areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areStreamIdArraysEqual(left.ids,right.ids)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}if(!areCodecInfoArraysEqual(left.codecInfos,right.codecInfos)){return false;}return true;}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents$1;(function(JmpSessionEvents){JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["MediaRequestReceived"]="media-request-received";JmpSessionEvents["MediaRequestStatusReceived"]="media-request-status-received";JmpSessionEvents["SourceAdvertisementReceived"]="source-advertisement-received";})(JmpSessionEvents$1||(JmpSessionEvents$1={}));function areStreamRequestArraysEqual(left,right){if(left.length!==right.length){return false;}for(var _i12=0;_i12<left.length;_i12+=1){if(!areStreamRequestsEqual(left[_i12],right[_i12])){return false;}}return true;}class JmpSession extends EventEmitter$4{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3;var retransmitIntervalMs=arguments.length>3&&arguments[3]!==undefined?arguments[3]:250;super();this.currMediaRequestSeqNum=1;this.currSourceAdvertisementSeqNum=1;this.currMediaRequestStatusSeqNum=1;this.txCallback=undefined;this.lastSentMediaRequest=undefined;this.lastSentMediaRequestAck=undefined;this.lastReceivedMediaRequest=undefined;this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.logger=Logger$1.get("JmpSession ".concat(this.mediaFamily,"-").concat(this.mediaContent));this.maxNumRetransmits=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;}getLogger(){return this.logger;}sendRequests(requests){var _a;var mediaRequestMsg=new MediaRequestMsg(this.currMediaRequestSeqNum,requests);if(!this.lastSentMediaRequest||!areStreamRequestArraysEqual(this.lastSentMediaRequest.msg.requests,requests)){this.sendJmpMsg(JmpMsgType$1.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.MediaRequest,mediaRequestMsg),expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum++,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);this.sendJmpMsg(JmpMsgType$1.SourceAdvertisement,sourceAdvertisementMsg);this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.SourceAdvertisement,sourceAdvertisementMsg),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});}sendMediaRequestStatus(streamStates){var _a,_b;var filteredStreamStates=streamStates.filter(streamState=>{var _a;return (_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.requests.some(req=>req.ids.find(streamId=>compareStreamIds(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!compareStreamStateArrays(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates)){this.sendJmpMsg(JmpMsgType$1.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>this.sendJmpMsg(JmpMsgType$1.MediaRequestStatus,mediaRequestStatus),expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currMediaRequestStatusSeqNum++;}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(jmpMsg," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",jmpMsg);var{payload}=jmpMsg;if(payload.msgType===JmpMsgType$1.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error("Received invalid MediaRequest:",mediaRequestMsg);return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType$1.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error("Received invalid MediaRequest ACK:",mediaRequestAckMsg);return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType$1.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",activeSpeakerNotification);return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType$1.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error("Received invalid SourceAdvertisementMsg: ",sourceAdvertisement);return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType$1.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error("Received invalid SourceAdvertisementAckMsg: ",sourceAdvertisementAck);return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType$1.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error("Received invalid MediaRequestStatusMsg: ",mediaRequestStatus);return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType$1.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error("Received invalid MediaRequestStatusAckMsg: ",mediaRequestStatusAck);return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a;this.logger.info("closing");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});var homerMsg=new HomerMsg(HomerMsgType$1.Multistream,jmpMsg);(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,JSON.stringify(homerMsg));}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old MediaRequest, ignoring");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info("Received duplicate MediaRequest, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn("Received duplicate MediaRequest, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequest, sending ACK");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType$1.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents$1.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequest");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequest");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents$1.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum<this.lastReceivedSourceAdvertisement.seqNum){this.logger.info("Received old SourceAdvertisement, ignoring");}else if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum===this.lastReceivedSourceAdvertisement.seqNum){if(this.lastSentSourceAdvertisementAck){this.logger.info("Received duplicate SourceAdvertisement, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.SourceAdvertisementAck,this.lastSentSourceAdvertisementAck);}else {this.logger.warn("Received duplicate SourceAdvertisement, but there was no ACK previously sent");}}else {this.logger.info("Received new SourceAdvertisement, sending ACK");var sourceAdvertisementAck=new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);this.lastReceivedSourceAdvertisement=sourceAdvertisement;this.lastSentSourceAdvertisementAck=sourceAdvertisementAck;this.sendJmpMsg(JmpMsgType$1.SourceAdvertisementAck,sourceAdvertisementAck);this.emit(JmpSessionEvents$1.SourceAdvertisementReceived,sourceAdvertisement);}}handleIncomingSourceAdvertisementAck(sourceAdvertisementAck){var _a,_b,_c;if(sourceAdvertisementAck.sourceAdvertisementSeqNum===((_b=(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent SourceAdvertisement");(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old SourceAdvertisement");}}handleIncomingMediaRequestStatus(mediaRequestStatus){if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum<this.lastReceivedMediaRequestStatus.seqNum){this.logger.info("Received old MediaRequestStatus, ignoring");}else if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum===this.lastReceivedMediaRequestStatus.seqNum){if(this.lastSentMediaRequestStatusAck){this.logger.info("Received duplicate MediaRequestStatus, re-sending ACK");this.sendJmpMsg(JmpMsgType$1.MediaRequestStatusAck,this.lastSentMediaRequestStatusAck);}else {this.logger.warn("Received duplicate MediaRequestStatus, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequestStatus, sending ACK");var mediaRequestStatusAck=new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);this.lastReceivedMediaRequestStatus=mediaRequestStatus;this.lastSentMediaRequestStatusAck=mediaRequestStatusAck;this.sendJmpMsg(JmpMsgType$1.MediaRequestStatusAck,mediaRequestStatusAck);this.emit(JmpSessionEvents$1.MediaRequestStatusReceived,mediaRequestStatus);}}handleIncomingMediaRequestStatusAck(mediaRequestStatusAck){var _a,_b,_c;if(mediaRequestStatusAck.mediaRequestStatusSeqNum===((_b=(_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequestStatus");(_c=this.lastSentMediaRequestStatus)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequestStatus");}}}var commonjsGlobal$3=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,'default')?x['default']:x;}function getAugmentedNamespace(n){if(n.__esModule)return n;var a=Object.defineProperty({},'__esModule',{value:true});Object.keys(n).forEach(function(k){var d=Object.getOwnPropertyDescriptor(n,k);Object.defineProperty(a,k,d.get?d:{enumerable:true,get:function get(){return n[k];}});});return a;}// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
5136
5125
|
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
5137
5126
|
// generators (like Math.random()).
|
|
5138
5127
|
var getRandomValues;var rnds8=new Uint8Array(16);function rng(){// lazy load so that environments that need to polyfill have a chance to do so
|
|
@@ -5294,7 +5283,36 @@ Object.keys(updatedStats).forEach(function(id){var report=updatedStats[id];if(re
|
|
|
5294
5283
|
* @param name - Name of the event to log.
|
|
5295
5284
|
* @param payload - Log data pertaining to the event.
|
|
5296
5285
|
*/var trace=function trace(name,payload,timestamp){logger({id:id,timestamp:timestamp?Math.round(timestamp):Date.now(),name:name,payload:payload});};pc.addEventListener('icecandidate',function(e){if(e.candidate){trace('onicecandidate',makeEvent(JSON.stringify(e.candidate)));}});pc.addEventListener('icecandidateerror',function(event){var _a=event,errorCode=_a.errorCode,errorText=_a.errorText;trace('onicecandidateerror',makeEvent("".concat(errorCode,": ").concat(errorText)));});pc.addEventListener('track',function(e){trace('ontrack',makeEvent("".concat(e.track.kind,":").concat(e.track.id," ").concat(e.streams.map(function(stream){return "stream:".concat(stream.id);}).join(' '))));});pc.addEventListener('signalingstatechange',function(){trace('onsignalingstatechange',makeEvent(pc.signalingState));});pc.addEventListener('iceconnectionstatechange',function(){trace('oniceconnectionstatechange',makeEvent(pc.iceConnectionState));});pc.addEventListener('icegatheringstatechange',function(){trace('onicegatheringstatechange',makeEvent(pc.iceGatheringState));});pc.addEventListener('connectionstatechange',function(){trace('onconnectionstatechange',makeEvent(pc.connectionState));});pc.addEventListener('negotiationneeded',function(){trace('onnegotiationneeded',makeEvent('negotiationneeded'));});pc.addEventListener('datachannel',function(event){trace('ondatachannel',makeEvent("".concat(event.channel.id,": ").concat(event.channel.label)));});var interval=window.setInterval(function(){if(pc.signalingState==='closed'){window.clearInterval(interval);return;}pc.getStats(null).then(function(res){var now=map2obj(res);statsPreProcessor(now).then(function(){var base=deepCopy$1(now);// our new prev
|
|
5297
|
-
var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;});});},intervalTime);};rtcStats_1=rtcStats;var NUM='\\d+';var SDP_TOKEN="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS='\\S+';var SP='\\s';var REST='.+';class Line{}var _a$5;class BandwidthLine extends Line{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5=BandwidthLine;BandwidthLine.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine.regex=new RegExp("^(".concat(_a$5.BW_TYPE_REGEX,"):(").concat(NUM,")"));class BundleGroupLine extends Line{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine.regex);var mids=tokens[1].split(' ');return new BundleGroupLine(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine.regex=new RegExp("^group:BUNDLE (".concat(REST,")"));var _a$4;class CandidateLine extends Line{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4=CandidateLine;CandidateLine.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine.regex=new RegExp("^candidate:(".concat(_a$4.ICE_CHARS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(NUM,") typ (").concat(ANY_NON_WS,")(?: raddr (").concat(ANY_NON_WS,"))?(?: rport (").concat(NUM,"))?(?: (").concat(REST,"))?"));class ConnectionLine extends Line{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine.regex=new RegExp("^(".concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,")"));class ContentLine extends Line{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine.regex.test(line)){return undefined;}var tokens=line.match(ContentLine.regex);var values=tokens[1].split(',');return new ContentLine(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine.regex=new RegExp("^content:(".concat(REST,")$"));class DirectionLine extends Line{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine.regex);var direction=tokens[1];return new DirectionLine(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3;class ExtMapLine extends Line{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3=ExtMapLine;ExtMapLine.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine.regex=new RegExp("^extmap:(".concat(NUM,")(?:/(").concat(_a$3.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS,")(?: (").concat(REST,"))?"));class FingerprintLine extends Line{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine.regex);var fingerprint=tokens[1];return new FingerprintLine(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine.regex=new RegExp("^fingerprint:(".concat(REST,")"));function parseFmtpParams(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine extends Line{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine(payloadType,parseFmtpParams(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine.regex=new RegExp("^fmtp:(".concat(NUM,") (").concat(REST,")"));class IceOptionsLine extends Line{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine.regex);var options=tokens[1].split(' ');return new IceOptionsLine(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine.regex=new RegExp("^ice-options:(".concat(REST,")$"));class IcePwdLine extends Line{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine.regex);var pwd=tokens[1];return new IcePwdLine(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS,")$"));class IceUfragLine extends Line{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine.regex);var ufrag=tokens[1];return new IceUfragLine(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS,")$"));class MaxMessageSizeLine extends Line{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine.regex=new RegExp("^max-message-size:(".concat(NUM,")"));var _a$2;class MediaLine extends Line{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine.regex.test(line)){return undefined;}var tokens=line.match(MediaLine.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2=MediaLine;MediaLine.MEDIA_TYPE='audio|video|application';MediaLine.regex=new RegExp("^(".concat(_a$2.MEDIA_TYPE,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(REST,")"));class MidLine extends Line{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine.regex.test(line)){return undefined;}var tokens=line.match(MidLine.regex);var mid=tokens[1];return new MidLine(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine.regex=new RegExp("^mid:(".concat(ANY_NON_WS,")$"));class OriginLine extends Line{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine.regex.test(line)){return undefined;}var tokens=line.match(OriginLine.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine.regex=new RegExp("^(".concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,")"));var _a$1;class RidLine extends Line{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine.regex.test(line)){return undefined;}var tokens=line.match(RidLine.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1=RidLine;RidLine.RID_ID="[\\w-]+";RidLine.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine.regex=new RegExp("^rid:(".concat(_a$1.RID_ID,") (").concat(_a$1.RID_DIRECTION,")(?:").concat(SP,"(").concat(REST,"))?"));class RtcpMuxLine extends Line{static fromSdpLine(line){if(!RtcpMuxLine.regex.test(line)){return undefined;}return new RtcpMuxLine();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine.regex=/^rtcp-mux$/;class RtcpFbLine extends Line{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine.regex=new RegExp("^rtcp-fb:(".concat(NUM,") (").concat(REST,")"));var _a$6;class RtpMapLine extends Line{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$6=RtpMapLine;RtpMapLine.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine.regex=new RegExp("^rtpmap:(".concat(NUM,") (").concat(_a$6.NON_SLASH_TOKEN,")/(").concat(_a$6.NON_SLASH_TOKEN,")(?:/(").concat(_a$6.NON_SLASH_TOKEN,"))?"));class SctpPortLine extends Line{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine.regex);var port=parseInt(tokens[1],10);return new SctpPortLine(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine.regex=new RegExp("^sctp-port:(".concat(NUM,")"));class SessionInformationLine extends Line{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine.regex);var info=tokens[1];return new SessionInformationLine(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine.regex=new RegExp("(".concat(REST,")"));class SessionNameLine extends Line{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine.regex);var name=tokens[1];return new SessionNameLine(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine.regex=new RegExp("^(".concat(REST,")"));class SetupLine extends Line{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine.regex.test(line)){return undefined;}var tokens=line.match(SetupLine.regex);var setup=tokens[1];return new SetupLine(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine extends Line{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList.fromString(tokens[2]);var layerList2=new SimulcastLayerList();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS,")(?: (send|recv) (").concat(ANY_NON_WS,"))?"));class SsrcLine extends Line{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine.regex=new RegExp("^ssrc:(".concat(NUM,") (").concat(SDP_TOKEN,")(?::(").concat(SDP_TOKEN,")?(?: (").concat(ANY_NON_WS,"))?)?$"));class SsrcGroupLine extends Line{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM).concat(SP,"*)+)"));class TimingLine extends Line{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine.regex.test(line)){return undefined;}var tokens=line.match(TimingLine.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine.regex=new RegExp("^(".concat(NUM,") (").concat(NUM,")"));class VersionLine extends Line{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine.regex.test(line)){return undefined;}var tokens=line.match(VersionLine.regex);var version=parseInt(tokens[1],10);return new VersionLine(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine.regex=new RegExp("^(".concat(NUM,")$"));class UnknownLine extends Line{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine.regex);var value=tokens[1];return new UnknownLine(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine.regex=new RegExp("(".concat(REST,")"));class IceInfo{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine){this.ufrag=line;return true;}if(line instanceof IcePwdLine){this.pwd=line;return true;}if(line instanceof IceOptionsLine){this.options=line;return true;}if(line instanceof CandidateLine){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription{constructor(type,port,protocol){this.iceInfo=new IceInfo();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine){this.bandwidth=line;return true;}if(line instanceof MidLine){this.mid=line.mid;return true;}if(line instanceof FingerprintLine){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine){this.setup=line.setup;return true;}if(line instanceof ConnectionLine){this.connection=line;return true;}if(line instanceof ContentLine){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription extends MediaDescription{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine(this.fingerprint));}if(this.setup){lines.push(new SetupLine(this.setup));}if(this.mid){lines.push(new MidLine(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$1{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];lines.push(new RtpMapLine(this.pt,this.name,this.clockRate,this.encodingParams));this.feedback.forEach(fb=>{lines.push(new RtcpFbLine(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription extends MediaDescription{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=[];this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$1(pt)));}toLines(){var lines=[];lines.push(new MediaLine(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine(this.fingerprint));}if(this.setup){lines.push(new SetupLine(this.setup));}if(this.mid){lines.push(new MidLine(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine){this.direction=line.direction;return true;}if(line instanceof ExtMapLine){this.extMaps.push(line);return true;}if(line instanceof RidLine){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine){this.simulcast=line;return true;}if(line instanceof RtpMapLine||line instanceof FmtpLine||line instanceof RtcpFbLine){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}}class SessionDescription{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine){this.version=line;return true;}if(line instanceof OriginLine){this.origin=line;return true;}if(line instanceof SessionNameLine){this.sessionName=line;return true;}if(line instanceof SessionInformationLine){this.information=line;return true;}if(line instanceof TimingLine){this.timing=line;return true;}if(line instanceof ConnectionLine){this.connection=line;return true;}if(line instanceof BandwidthLine){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp{constructor(){this.session=new SessionDescription();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar extends Grammar{constructor(){super();this.addParser('v',VersionLine.fromSdpLine);this.addParser('o',OriginLine.fromSdpLine);this.addParser('c',ConnectionLine.fromSdpLine);this.addParser('i',SessionInformationLine.fromSdpLine);this.addParser('m',MediaLine.fromSdpLine);this.addParser('s',SessionNameLine.fromSdpLine);this.addParser('t',TimingLine.fromSdpLine);this.addParser('b',BandwidthLine.fromSdpLine);this.addParser('a',RtpMapLine.fromSdpLine);this.addParser('a',RtcpFbLine.fromSdpLine);this.addParser('a',FmtpLine.fromSdpLine);this.addParser('a',DirectionLine.fromSdpLine);this.addParser('a',ExtMapLine.fromSdpLine);this.addParser('a',MidLine.fromSdpLine);this.addParser('a',IceUfragLine.fromSdpLine);this.addParser('a',IcePwdLine.fromSdpLine);this.addParser('a',IceOptionsLine.fromSdpLine);this.addParser('a',FingerprintLine.fromSdpLine);this.addParser('a',SetupLine.fromSdpLine);this.addParser('a',SctpPortLine.fromSdpLine);this.addParser('a',MaxMessageSizeLine.fromSdpLine);this.addParser('a',RtcpMuxLine.fromSdpLine);this.addParser('a',BundleGroupLine.fromSdpLine);this.addParser('a',ContentLine.fromSdpLine);this.addParser('a',RidLine.fromSdpLine);this.addParser('a',CandidateLine.fromSdpLine);this.addParser('a',SimulcastLine.fromSdpLine);this.addParser('a',SsrcLine.fromSdpLine);this.addParser('a',SsrcGroupLine.fromSdpLine);}}var DefaultSdpGrammar=new SdpGrammar();function isValidLine(line){return line.length>2;}function parseToModel(lines){var sdp=new Sdp();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine.fromSdpLine(l);lines.push(result);});return lines;}function parse(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar;var lines=parseToLines(sdp,grammar);var parsed=parseToModel(lines);return parsed;}function removeCodec(sdp,codecName){sdp.avMedia.forEach(media=>{var codecInfos=[...media.codecs.entries()].filter(_ref=>{var[,ci]=_ref;var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});codecInfos.forEach(_ref2=>{var[pt]=_ref2;return media.removePt(pt);});});}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}/**
|
|
5286
|
+
var compressed=deltaCompression(prev,now);trace('stats-report',formatStatsReport(compressed),compressed.timestamp!==-Infinity?compressed.timestamp:undefined);prev=base;});});},intervalTime);};rtcStats_1=rtcStats;var NUM='\\d+';var SDP_TOKEN="[!#$%&'*+\\-.^_`{|}~a-zA-Z0-9]+";var ANY_NON_WS='\\S+';var SP='\\s';var REST='.+';class Line{}var _a$5;class BandwidthLine extends Line{constructor(bandwidthType,bandwidth){super();this.bandwidthType=bandwidthType;this.bandwidth=bandwidth;}static fromSdpLine(line){if(!BandwidthLine.regex.test(line)){return undefined;}var tokens=line.match(BandwidthLine.regex);var bandwidthType=tokens[1];var bandwidth=parseInt(tokens[2],10);return new BandwidthLine(bandwidthType,bandwidth);}toSdpLine(){return "b=".concat(this.bandwidthType,":").concat(this.bandwidth);}}_a$5=BandwidthLine;BandwidthLine.BW_TYPE_REGEX='CT|AS|TIAS';BandwidthLine.regex=new RegExp("^(".concat(_a$5.BW_TYPE_REGEX,"):(").concat(NUM,")"));class BundleGroupLine extends Line{constructor(mids){super();this.mids=mids;}static fromSdpLine(line){if(!BundleGroupLine.regex.test(line)){return undefined;}var tokens=line.match(BundleGroupLine.regex);var mids=tokens[1].split(' ');return new BundleGroupLine(mids);}toSdpLine(){return "a=group:BUNDLE ".concat(this.mids.join(' '));}}BundleGroupLine.regex=new RegExp("^group:BUNDLE (".concat(REST,")"));var _a$4;class CandidateLine extends Line{constructor(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions){super();this.foundation=foundation;this.componentId=componentId;this.transport=transport;this.priority=priority;this.connectionAddress=connectionAddress;this.port=port;this.candidateType=candidateType;this.relAddr=relAddr;this.relPort=relPort;this.candidateExtensions=candidateExtensions;}static fromSdpLine(line){if(!CandidateLine.regex.test(line)){return undefined;}var tokens=line.match(CandidateLine.regex);var foundation=tokens[1];var componentId=parseInt(tokens[2],10);var transport=tokens[3];var priority=parseInt(tokens[4],10);var connectionAddress=tokens[5];var port=parseInt(tokens[6],10);var candidateType=tokens[7];var relAddr=tokens[8];var relPort=tokens[9]?parseInt(tokens[9],10):undefined;var candidateExtensions=tokens[10];return new CandidateLine(foundation,componentId,transport,priority,connectionAddress,port,candidateType,relAddr,relPort,candidateExtensions);}toSdpLine(){var str='';str+="a=candidate:".concat(this.foundation," ").concat(this.componentId," ").concat(this.transport," ").concat(this.priority," ").concat(this.connectionAddress," ").concat(this.port," typ ").concat(this.candidateType);if(this.relAddr){str+=" raddr ".concat(this.relAddr);}if(this.relPort){str+=" rport ".concat(this.relPort);}if(this.candidateExtensions){str+=" ".concat(this.candidateExtensions);}return str;}}_a$4=CandidateLine;CandidateLine.ICE_CHARS="[a-zA-Z0-9+/]+";CandidateLine.regex=new RegExp("^candidate:(".concat(_a$4.ICE_CHARS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(NUM,") typ (").concat(ANY_NON_WS,")(?: raddr (").concat(ANY_NON_WS,"))?(?: rport (").concat(NUM,"))?(?: (").concat(REST,"))?"));class ConnectionLine extends Line{constructor(netType,addrType,ipAddr){super();this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!ConnectionLine.regex.test(line)){return undefined;}var tokens=line.match(ConnectionLine.regex);var netType=tokens[1];var addrType=tokens[2];var ipAddr=tokens[3];return new ConnectionLine(netType,addrType,ipAddr);}toSdpLine(){return "c=".concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}ConnectionLine.regex=new RegExp("^(".concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,")"));class ContentLine extends Line{constructor(values){super();this.values=values;}static fromSdpLine(line){if(!ContentLine.regex.test(line)){return undefined;}var tokens=line.match(ContentLine.regex);var values=tokens[1].split(',');return new ContentLine(values);}toSdpLine(){return "a=content:".concat(this.values.join(','));}}ContentLine.regex=new RegExp("^content:(".concat(REST,")$"));class DirectionLine extends Line{constructor(direction){super();this.direction=direction;}static fromSdpLine(line){if(!DirectionLine.regex.test(line)){return undefined;}var tokens=line.match(DirectionLine.regex);var direction=tokens[1];return new DirectionLine(direction);}toSdpLine(){return "a=".concat(this.direction);}}DirectionLine.regex=/^(sendrecv|sendonly|recvonly|inactive)$/;var _a$3;class ExtMapLine extends Line{constructor(id,uri,direction,extensionAttributes){super();this.id=id;this.uri=uri;this.direction=direction;this.extensionAttributes=extensionAttributes;}static fromSdpLine(line){if(!ExtMapLine.regex.test(line)){return undefined;}var tokens=line.match(ExtMapLine.regex);var id=parseInt(tokens[1],10);var direction=tokens[2];var uri=tokens[3];var extensionAttributes=tokens[4];return new ExtMapLine(id,uri,direction,extensionAttributes);}toSdpLine(){var str='';str+="a=extmap:".concat(this.id);if(this.direction){str+="/".concat(this.direction);}str+=" ".concat(this.uri);if(this.extensionAttributes){str+=" ".concat(this.extensionAttributes);}return str;}}_a$3=ExtMapLine;ExtMapLine.EXTMAP_DIRECTION="sendonly|recvonly|sendrecv|inactive";ExtMapLine.regex=new RegExp("^extmap:(".concat(NUM,")(?:/(").concat(_a$3.EXTMAP_DIRECTION,"))? (").concat(ANY_NON_WS,")(?: (").concat(REST,"))?"));class FingerprintLine extends Line{constructor(fingerprint){super();this.fingerprint=fingerprint;}static fromSdpLine(line){if(!FingerprintLine.regex.test(line)){return undefined;}var tokens=line.match(FingerprintLine.regex);var fingerprint=tokens[1];return new FingerprintLine(fingerprint);}toSdpLine(){return "a=fingerprint:".concat(this.fingerprint);}}FingerprintLine.regex=new RegExp("^fingerprint:(".concat(REST,")"));function parseFmtpParams(fmtpParams){fmtpParams=fmtpParams.replace(/^a=fmtp:\d+\x20/,'');var fmtpObj=new Map();if(/^\d+([/-]\d+)+$/.test(fmtpParams)){fmtpObj.set(fmtpParams,undefined);return fmtpObj;}fmtpParams.split(';').forEach(param=>{var paramArr=param&¶m.split('=');if(paramArr.length!==2||!paramArr[0]||!paramArr[1]){throw new Error("Fmtp params is invalid with ".concat(fmtpParams));}fmtpObj.set(paramArr[0],paramArr[1]);});return fmtpObj;}class FmtpLine extends Line{constructor(payloadType,params){super();this.payloadType=payloadType;this.params=params;}static fromSdpLine(line){if(!FmtpLine.regex.test(line)){return undefined;}var tokens=line.match(FmtpLine.regex);var payloadType=parseInt(tokens[1],10);var params=tokens[2];return new FmtpLine(payloadType,parseFmtpParams(params));}toSdpLine(){var fmtParams=Array.from(this.params.keys()).map(key=>{if(this.params.get(key)!==undefined){return "".concat(key,"=").concat(this.params.get(key));}return "".concat(key);}).join(';');return "a=fmtp:".concat(this.payloadType," ").concat(fmtParams);}}FmtpLine.regex=new RegExp("^fmtp:(".concat(NUM,") (").concat(REST,")"));class IceOptionsLine extends Line{constructor(options){super();this.options=options;}static fromSdpLine(line){if(!IceOptionsLine.regex.test(line)){return undefined;}var tokens=line.match(IceOptionsLine.regex);var options=tokens[1].split(' ');return new IceOptionsLine(options);}toSdpLine(){return "a=ice-options:".concat(this.options.join(' '));}}IceOptionsLine.regex=new RegExp("^ice-options:(".concat(REST,")$"));class IcePwdLine extends Line{constructor(pwd){super();this.pwd=pwd;}static fromSdpLine(line){if(!IcePwdLine.regex.test(line)){return undefined;}var tokens=line.match(IcePwdLine.regex);var pwd=tokens[1];return new IcePwdLine(pwd);}toSdpLine(){return "a=ice-pwd:".concat(this.pwd);}}IcePwdLine.regex=new RegExp("^ice-pwd:(".concat(ANY_NON_WS,")$"));class IceUfragLine extends Line{constructor(ufrag){super();this.ufrag=ufrag;}static fromSdpLine(line){if(!IceUfragLine.regex.test(line)){return undefined;}var tokens=line.match(IceUfragLine.regex);var ufrag=tokens[1];return new IceUfragLine(ufrag);}toSdpLine(){return "a=ice-ufrag:".concat(this.ufrag);}}IceUfragLine.regex=new RegExp("^ice-ufrag:(".concat(ANY_NON_WS,")$"));class MaxMessageSizeLine extends Line{constructor(maxMessageSize){super();this.maxMessageSize=maxMessageSize;}static fromSdpLine(line){if(!MaxMessageSizeLine.regex.test(line)){return undefined;}var tokens=line.match(MaxMessageSizeLine.regex);var maxMessageSize=parseInt(tokens[1],10);return new MaxMessageSizeLine(maxMessageSize);}toSdpLine(){return "a=max-message-size:".concat(this.maxMessageSize);}}MaxMessageSizeLine.regex=new RegExp("^max-message-size:(".concat(NUM,")"));var _a$2;class MediaLine extends Line{constructor(type,port,protocol,formats){super();this.type=type;this.port=port;this.protocol=protocol;this.formats=formats;}static fromSdpLine(line){if(!MediaLine.regex.test(line)){return undefined;}var tokens=line.match(MediaLine.regex);var type=tokens[1];var port=parseInt(tokens[2],10);var protocol=tokens[3];var formats=tokens[4].split(' ');return new MediaLine(type,port,protocol,formats);}toSdpLine(){return "m=".concat(this.type," ").concat(this.port," ").concat(this.protocol," ").concat(this.formats.join(' '));}}_a$2=MediaLine;MediaLine.MEDIA_TYPE='audio|video|application';MediaLine.regex=new RegExp("^(".concat(_a$2.MEDIA_TYPE,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(REST,")"));class MidLine extends Line{constructor(mid){super();this.mid=mid;}static fromSdpLine(line){if(!MidLine.regex.test(line)){return undefined;}var tokens=line.match(MidLine.regex);var mid=tokens[1];return new MidLine(mid);}toSdpLine(){return "a=mid:".concat(this.mid);}}MidLine.regex=new RegExp("^mid:(".concat(ANY_NON_WS,")$"));class OriginLine extends Line{constructor(username,sessionId,sessionVersion,netType,addrType,ipAddr){super();this.username=username;this.sessionId=sessionId;this.sessionVersion=sessionVersion;this.netType=netType;this.addrType=addrType;this.ipAddr=ipAddr;}static fromSdpLine(line){if(!OriginLine.regex.test(line)){return undefined;}var tokens=line.match(OriginLine.regex);var username=tokens[1];var sessionId=tokens[2];var sessionVersion=parseInt(tokens[3],10);var netType=tokens[4];var addrType=tokens[5];var ipAddr=tokens[6];return new OriginLine(username,sessionId,sessionVersion,netType,addrType,ipAddr);}toSdpLine(){return "o=".concat(this.username," ").concat(this.sessionId," ").concat(this.sessionVersion," ").concat(this.netType," ").concat(this.addrType," ").concat(this.ipAddr);}}OriginLine.regex=new RegExp("^(".concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(NUM,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,") (").concat(ANY_NON_WS,")"));var _a$1;class RidLine extends Line{constructor(id,direction,params){super();this.id=id;this.direction=direction;this.params=params;}static fromSdpLine(line){if(!RidLine.regex.test(line)){return undefined;}var tokens=line.match(RidLine.regex);var id=tokens[1];var direction=tokens[2];var params=tokens[3];return new RidLine(id,direction,params);}toSdpLine(){var str='';str+="a=rid:".concat(this.id," ").concat(this.direction);if(this.params){str+=" ".concat(this.params);}return str;}}_a$1=RidLine;RidLine.RID_ID="[\\w-]+";RidLine.RID_DIRECTION="\\bsend\\b|\\brecv\\b";RidLine.regex=new RegExp("^rid:(".concat(_a$1.RID_ID,") (").concat(_a$1.RID_DIRECTION,")(?:").concat(SP,"(").concat(REST,"))?"));class RtcpMuxLine extends Line{static fromSdpLine(line){if(!RtcpMuxLine.regex.test(line)){return undefined;}return new RtcpMuxLine();}toSdpLine(){return "a=rtcp-mux";}}RtcpMuxLine.regex=/^rtcp-mux$/;class RtcpFbLine extends Line{constructor(payloadType,feedback){super();this.payloadType=payloadType;this.feedback=feedback;}static fromSdpLine(line){if(!RtcpFbLine.regex.test(line)){return undefined;}var tokens=line.match(RtcpFbLine.regex);var payloadType=parseInt(tokens[1],10);var feedback=tokens[2];return new RtcpFbLine(payloadType,feedback);}toSdpLine(){return "a=rtcp-fb:".concat(this.payloadType," ").concat(this.feedback);}}RtcpFbLine.regex=new RegExp("^rtcp-fb:(".concat(NUM,") (").concat(REST,")"));var _a$6;class RtpMapLine extends Line{constructor(payloadType,encodingName,clockRate,encodingParams){super();this.payloadType=payloadType;this.encodingName=encodingName;this.clockRate=clockRate;this.encodingParams=encodingParams;}static fromSdpLine(line){if(!RtpMapLine.regex.test(line)){return undefined;}var tokens=line.match(RtpMapLine.regex);var payloadType=parseInt(tokens[1],10);var encodingName=tokens[2];var clockRate=parseInt(tokens[3],10);var encodingParams=tokens[4];return new RtpMapLine(payloadType,encodingName,clockRate,encodingParams);}toSdpLine(){var str='';str+="a=rtpmap:".concat(this.payloadType," ").concat(this.encodingName,"/").concat(this.clockRate);if(this.encodingParams){str+="/".concat(this.encodingParams);}return str;}}_a$6=RtpMapLine;RtpMapLine.NON_SLASH_TOKEN='[^\\s/]+';RtpMapLine.regex=new RegExp("^rtpmap:(".concat(NUM,") (").concat(_a$6.NON_SLASH_TOKEN,")/(").concat(_a$6.NON_SLASH_TOKEN,")(?:/(").concat(_a$6.NON_SLASH_TOKEN,"))?"));class SctpPortLine extends Line{constructor(port){super();this.port=port;}static fromSdpLine(line){if(!SctpPortLine.regex.test(line)){return undefined;}var tokens=line.match(SctpPortLine.regex);var port=parseInt(tokens[1],10);return new SctpPortLine(port);}toSdpLine(){return "a=sctp-port:".concat(this.port);}}SctpPortLine.regex=new RegExp("^sctp-port:(".concat(NUM,")"));class SessionInformationLine extends Line{constructor(info){super();this.info=info;}static fromSdpLine(line){if(!SessionInformationLine.regex.test(line)){return undefined;}var tokens=line.match(SessionInformationLine.regex);var info=tokens[1];return new SessionInformationLine(info);}toSdpLine(){return "i=".concat(this.info);}}SessionInformationLine.regex=new RegExp("(".concat(REST,")"));class SessionNameLine extends Line{constructor(name){super();this.name=name;}static fromSdpLine(line){if(!SessionNameLine.regex.test(line)){return undefined;}var tokens=line.match(SessionNameLine.regex);var name=tokens[1];return new SessionNameLine(name);}toSdpLine(){return "s=".concat(this.name);}}SessionNameLine.regex=new RegExp("^(".concat(REST,")"));class SetupLine extends Line{constructor(setup){super();this.setup=setup;}static fromSdpLine(line){if(!SetupLine.regex.test(line)){return undefined;}var tokens=line.match(SetupLine.regex);var setup=tokens[1];return new SetupLine(setup);}toSdpLine(){return "a=setup:".concat(this.setup);}}SetupLine.regex=/^setup:(actpass|active|passive)$/;class SimulcastLayer{constructor(id,paused){this.id=id;this.paused=paused;}toString(){return this.paused?"~".concat(this.id):this.id;}}class SimulcastLayerList{constructor(){this.layers=[];}addLayer(layer){this.layers.push([layer]);}addLayerWithAlternatives(alternatives){this.layers.push(alternatives);}get length(){return this.layers.length;}get(index){return this.layers[index];}static fromString(str){var layerList=new SimulcastLayerList();var tokens=str.split(';');if(tokens.length===1&&!tokens[0].trim()){throw new Error('simulcast stream list empty');}tokens.forEach(token=>{if(!token){throw new Error('simulcast layer list empty');}var ridTokens=token.split(',');var layers=[];ridTokens.forEach(ridToken=>{if(!ridToken||ridToken==='~'){throw new Error('rid empty');}var paused=ridToken[0]==='~';var rid=paused?ridToken.substring(1):ridToken;layers.push(new SimulcastLayer(rid,paused));});layerList.addLayerWithAlternatives(layers);});return layerList;}toString(){return this.layers.map(altArray=>altArray.map(v=>v.toString()).join(',')).join(';');}}class SimulcastLine extends Line{constructor(sendLayers,recvLayers){super();this.sendLayers=sendLayers;this.recvLayers=recvLayers;}static fromSdpLine(line){if(!SimulcastLine.regex.test(line)){return undefined;}var tokens=line.match(SimulcastLine.regex);var bidirectional=tokens[3]&&tokens[4];var firstDirection=tokens[1];var layerList1=SimulcastLayerList.fromString(tokens[2]);var layerList2=new SimulcastLayerList();if(bidirectional){var secondDirection=tokens[3];if(firstDirection===secondDirection){return undefined;}layerList2=SimulcastLayerList.fromString(tokens[4]);}var sendLayerList;var recvLayerList;if(firstDirection==='send'){sendLayerList=layerList1;recvLayerList=layerList2;}else {sendLayerList=layerList2;recvLayerList=layerList1;}return new SimulcastLine(sendLayerList,recvLayerList);}toSdpLine(){var str='a=simulcast:';if(this.sendLayers.length){str+="send ".concat(this.sendLayers.toString());if(this.recvLayers.length){str+=" ";}}if(this.recvLayers.length){str+="recv ".concat(this.recvLayers.toString());}return str;}}SimulcastLine.regex=new RegExp("^simulcast:(send|recv) (".concat(ANY_NON_WS,")(?: (send|recv) (").concat(ANY_NON_WS,"))?"));class SsrcLine extends Line{constructor(ssrcId,attribute){var attributeValue=arguments.length>2&&arguments[2]!==undefined?arguments[2]:undefined;var attributeData=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;super();this.ssrcId=ssrcId;this.attribute=attribute;this.attributeValue=attributeValue;this.attributeData=attributeData;}static fromSdpLine(line){if(!SsrcLine.regex.test(line)){return undefined;}var tokens=line.match(SsrcLine.regex);var ssrcId=parseInt(tokens[1],10);var attribute=tokens[2];var attributeValue=tokens[3];var attributeData=tokens[4];return new SsrcLine(ssrcId,attribute,attributeValue,attributeData);}toSdpLine(){var str="a=ssrc:".concat(this.ssrcId," ").concat(this.attribute);if(this.attributeValue){str+=":".concat(this.attributeValue);}if(this.attributeData){str+=" ".concat(this.attributeData);}return str;}}SsrcLine.regex=new RegExp("^ssrc:(".concat(NUM,") (").concat(SDP_TOKEN,")(?::(").concat(SDP_TOKEN,")?(?: (").concat(ANY_NON_WS,"))?)?$"));class SsrcGroupLine extends Line{constructor(semantics,ssrcs){super();this.semantics=semantics;this.ssrcs=ssrcs;}static fromSdpLine(line){if(!SsrcGroupLine.regex.test(line)){return undefined;}var tokens=line.match(SsrcGroupLine.regex);var semantics=tokens[1];var ssrcs=tokens[2].split(' ').map(ssrcStr=>parseInt(ssrcStr,10));return new SsrcGroupLine(semantics,ssrcs);}toSdpLine(){return "a=ssrc-group:".concat(this.semantics," ").concat(this.ssrcs.join(' '));}}SsrcGroupLine.regex=new RegExp("^ssrc-group:(SIM|FID|FEC) ((?:".concat(NUM).concat(SP,"*)+)"));class TimingLine extends Line{constructor(startTime,stopTime){super();this.startTime=startTime;this.stopTime=stopTime;}static fromSdpLine(line){if(!TimingLine.regex.test(line)){return undefined;}var tokens=line.match(TimingLine.regex);var startTime=parseInt(tokens[1],10);var stopTime=parseInt(tokens[2],10);return new TimingLine(startTime,stopTime);}toSdpLine(){return "t=".concat(this.startTime," ").concat(this.stopTime);}}TimingLine.regex=new RegExp("^(".concat(NUM,") (").concat(NUM,")"));class VersionLine extends Line{constructor(version){super();this.version=version;}static fromSdpLine(line){if(!VersionLine.regex.test(line)){return undefined;}var tokens=line.match(VersionLine.regex);var version=parseInt(tokens[1],10);return new VersionLine(version);}toSdpLine(){return "v=".concat(this.version);}}VersionLine.regex=new RegExp("^(".concat(NUM,")$"));class UnknownLine extends Line{constructor(value){super();this.value=value;}static fromSdpLine(line){var tokens=line.match(UnknownLine.regex);var value=tokens[1];return new UnknownLine(value);}toSdpLine(){return "".concat(this.value);}}UnknownLine.regex=new RegExp("(".concat(REST,")"));class IceInfo{constructor(){this.candidates=[];}addLine(line){if(line instanceof IceUfragLine){this.ufrag=line;return true;}if(line instanceof IcePwdLine){this.pwd=line;return true;}if(line instanceof IceOptionsLine){this.options=line;return true;}if(line instanceof CandidateLine){this.candidates.push(line);return true;}return false;}toLines(){var lines=[];if(this.ufrag){lines.push(this.ufrag);}if(this.pwd){lines.push(this.pwd);}if(this.options){lines.push(this.options);}this.candidates.forEach(candidate=>lines.push(candidate));return lines;}}class MediaDescription{constructor(type,port,protocol){this.iceInfo=new IceInfo();this.otherLines=[];this.type=type;this.port=port;this.protocol=protocol;}findOtherLine(ty){return this.otherLines.find(line=>line instanceof ty);}addLine(line){if(line instanceof BundleGroupLine){throw new Error("Error: bundle group line not allowed in media description");}if(line instanceof BandwidthLine){this.bandwidth=line;return true;}if(line instanceof MidLine){this.mid=line.mid;return true;}if(line instanceof FingerprintLine){this.fingerprint=line.fingerprint;return true;}if(line instanceof SetupLine){this.setup=line.setup;return true;}if(line instanceof ConnectionLine){this.connection=line;return true;}if(line instanceof ContentLine){this.content=line;return true;}return this.iceInfo.addLine(line);}}class ApplicationMediaDescription extends MediaDescription{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.fmts=[];this.fmts=mediaLine.formats;}toLines(){var lines=[];lines.push(new MediaLine(this.type,this.port,this.protocol,this.fmts));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine(this.fingerprint));}if(this.setup){lines.push(new SetupLine(this.setup));}if(this.mid){lines.push(new MidLine(this.mid));}if(this.content){lines.push(this.content);}if(this.sctpPort){lines.push(new SctpPortLine(this.sctpPort));}if(this.maxMessageSize){lines.push(new MaxMessageSizeLine(this.maxMessageSize));}lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof SctpPortLine){this.sctpPort=line.port;return true;}if(line instanceof MaxMessageSizeLine){this.maxMessageSize=line.maxMessageSize;return true;}this.otherLines.push(line);return true;}}class CodecInfo$1{constructor(pt){this.fmtParams=new Map();this.feedback=[];this.pt=pt;}addLine(line){if(line instanceof RtpMapLine){this.name=line.encodingName;this.clockRate=line.clockRate;this.encodingParams=line.encodingParams;return true;}if(line instanceof FmtpLine){this.fmtParams=new Map([...Array.from(this.fmtParams.entries()),...Array.from(line.params.entries())]);if(line.params.has('apt')){var apt=line.params.get('apt');this.primaryCodecPt=parseInt(apt,10);}return true;}if(line instanceof RtcpFbLine){this.feedback.push(line.feedback);return true;}return false;}toLines(){var lines=[];lines.push(new RtpMapLine(this.pt,this.name,this.clockRate,this.encodingParams));this.feedback.forEach(fb=>{lines.push(new RtcpFbLine(this.pt,fb));});if(this.fmtParams.size>0){lines.push(new FmtpLine(this.pt,this.fmtParams));}return lines;}}class AvMediaDescription extends MediaDescription{constructor(mediaLine){super(mediaLine.type,mediaLine.port,mediaLine.protocol);this.pts=[];this.extMaps=[];this.rids=[];this.codecs=new Map();this.rtcpMux=false;this.ssrcs=[];this.ssrcGroups=[];this.pts=mediaLine.formats.map(fmt=>{return parseInt(fmt,10);});this.pts.forEach(pt=>this.codecs.set(pt,new CodecInfo$1(pt)));}toLines(){var lines=[];lines.push(new MediaLine(this.type,this.port,this.protocol,this.pts.map(pt=>"".concat(pt))));if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}lines.push(...this.iceInfo.toLines());if(this.fingerprint){lines.push(new FingerprintLine(this.fingerprint));}if(this.setup){lines.push(new SetupLine(this.setup));}if(this.mid){lines.push(new MidLine(this.mid));}if(this.rtcpMux){lines.push(new RtcpMuxLine());}if(this.content){lines.push(this.content);}this.extMaps.forEach(extMap=>lines.push(extMap));this.rids.forEach(rid=>lines.push(rid));if(this.simulcast){lines.push(this.simulcast);}if(this.direction){lines.push(new DirectionLine(this.direction));}this.codecs.forEach(codec=>lines.push(...codec.toLines()));lines.push(...this.ssrcs);lines.push(...this.ssrcGroups);lines.push(...this.otherLines);return lines;}addLine(line){if(super.addLine(line)){return true;}if(line instanceof MediaLine){throw new Error('Error: tried passing a MediaLine to an existing MediaInfo');}if(line instanceof DirectionLine){this.direction=line.direction;return true;}if(line instanceof ExtMapLine){this.extMaps.push(line);return true;}if(line instanceof RidLine){this.rids.push(line);return true;}if(line instanceof RtcpMuxLine){this.rtcpMux=true;return true;}if(line instanceof SimulcastLine){this.simulcast=line;return true;}if(line instanceof RtpMapLine||line instanceof FmtpLine||line instanceof RtcpFbLine){var codec=this.codecs.get(line.payloadType);if(!codec){throw new Error("Error: got line for unknown codec: ".concat(line.toSdpLine()));}codec.addLine(line);return true;}if(line instanceof SsrcLine){this.ssrcs.push(line);return true;}if(line instanceof SsrcGroupLine){this.ssrcGroups.push(line);return true;}this.otherLines.push(line);return true;}getCodecByPt(pt){return this.codecs.get(pt);}removePt(pt){var associatedPts=[...this.codecs.values()].filter(ci=>ci.primaryCodecPt===pt).map(ci=>ci.pt);var allPtsToRemove=[pt,...associatedPts];allPtsToRemove.forEach(ptToRemove=>{this.codecs.delete(ptToRemove);});this.pts=this.pts.filter(existingPt=>allPtsToRemove.indexOf(existingPt)===-1);}}class SessionDescription{constructor(){this.groups=[];this.otherLines=[];}addLine(line){if(line instanceof VersionLine){this.version=line;return true;}if(line instanceof OriginLine){this.origin=line;return true;}if(line instanceof SessionNameLine){this.sessionName=line;return true;}if(line instanceof SessionInformationLine){this.information=line;return true;}if(line instanceof TimingLine){this.timing=line;return true;}if(line instanceof ConnectionLine){this.connection=line;return true;}if(line instanceof BandwidthLine){this.bandwidth=line;return true;}if(line instanceof BundleGroupLine){this.groups.push(line);return true;}this.otherLines.push(line);return true;}toLines(){var lines=[];if(this.version){lines.push(this.version);}if(this.origin){lines.push(this.origin);}if(this.sessionName){lines.push(this.sessionName);}if(this.information){lines.push(this.information);}if(this.connection){lines.push(this.connection);}if(this.bandwidth){lines.push(this.bandwidth);}if(this.timing){lines.push(this.timing);}if(this.groups){lines.push(...this.groups);}lines.push(...this.otherLines);return lines;}}class Sdp{constructor(){this.session=new SessionDescription();this.media=[];}get avMedia(){return this.media.filter(mi=>mi instanceof AvMediaDescription);}toString(){var lines=[];lines.push(...this.session.toLines());this.media.forEach(m=>lines.push(...m.toLines()));return "".concat(lines.map(l=>l.toSdpLine()).join('\r\n'),"\r\n");}}class Grammar{constructor(){this.parsers=new Map();}addParser(lineType,parser){var parsers=this.parsers.get(lineType)||[];parsers.push(parser);this.parsers.set(lineType,parsers);}getParsers(lineType){return this.parsers.get(lineType)||[];}}class SdpGrammar extends Grammar{constructor(){super();this.addParser('v',VersionLine.fromSdpLine);this.addParser('o',OriginLine.fromSdpLine);this.addParser('c',ConnectionLine.fromSdpLine);this.addParser('i',SessionInformationLine.fromSdpLine);this.addParser('m',MediaLine.fromSdpLine);this.addParser('s',SessionNameLine.fromSdpLine);this.addParser('t',TimingLine.fromSdpLine);this.addParser('b',BandwidthLine.fromSdpLine);this.addParser('a',RtpMapLine.fromSdpLine);this.addParser('a',RtcpFbLine.fromSdpLine);this.addParser('a',FmtpLine.fromSdpLine);this.addParser('a',DirectionLine.fromSdpLine);this.addParser('a',ExtMapLine.fromSdpLine);this.addParser('a',MidLine.fromSdpLine);this.addParser('a',IceUfragLine.fromSdpLine);this.addParser('a',IcePwdLine.fromSdpLine);this.addParser('a',IceOptionsLine.fromSdpLine);this.addParser('a',FingerprintLine.fromSdpLine);this.addParser('a',SetupLine.fromSdpLine);this.addParser('a',SctpPortLine.fromSdpLine);this.addParser('a',MaxMessageSizeLine.fromSdpLine);this.addParser('a',RtcpMuxLine.fromSdpLine);this.addParser('a',BundleGroupLine.fromSdpLine);this.addParser('a',ContentLine.fromSdpLine);this.addParser('a',RidLine.fromSdpLine);this.addParser('a',CandidateLine.fromSdpLine);this.addParser('a',SimulcastLine.fromSdpLine);this.addParser('a',SsrcLine.fromSdpLine);this.addParser('a',SsrcGroupLine.fromSdpLine);}}var DefaultSdpGrammar=new SdpGrammar();function isValidLine(line){return line.length>2;}function parseToModel(lines){var sdp=new Sdp();var currBlock=sdp.session;lines.forEach(l=>{if(l instanceof MediaLine){var mediaInfo;if(l.type==='audio'||l.type==='video'){mediaInfo=new AvMediaDescription(l);}else if(l.type==='application'){mediaInfo=new ApplicationMediaDescription(l);}else {throw new Error("Unhandled media type: ".concat(l.type));}sdp.media.push(mediaInfo);currBlock=mediaInfo;}else {currBlock.addLine(l);}});return sdp;}function parseToLines(sdp,grammar){var lines=[];sdp.split(/(\r\n|\r|\n)/).filter(isValidLine).forEach(l=>{var lineType=l[0];var lineValue=l.slice(2);var parsers=grammar.getParsers(lineType);for(var parser of parsers){var _result=parser(lineValue);if(_result){lines.push(_result);return;}}var result=UnknownLine.fromSdpLine(l);lines.push(result);});return lines;}function parse(sdp){var grammar=arguments.length>1&&arguments[1]!==undefined?arguments[1]:DefaultSdpGrammar;var lines=parseToLines(sdp,grammar);var parsed=parseToModel(lines);return parsed;}function removeCodec(sdp,codecName){sdp.avMedia.forEach(media=>{var codecInfos=[...media.codecs.entries()].filter(_ref=>{var[,ci]=_ref;var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});codecInfos.forEach(_ref2=>{var[pt]=_ref2;return media.removePt(pt);});});}function hasCodec(codecName,mLine){return [...mLine.codecs.values()].some(ci=>{var _a;return ((_a=ci.name)===null||_a===void 0?void 0:_a.toLowerCase())===codecName.toLowerCase();});}var events={exports:{}};var R=typeof Reflect==='object'?Reflect:null;var ReflectApply=R&&typeof R.apply==='function'?R.apply:function ReflectApply(target,receiver,args){return Function.prototype.apply.call(target,receiver,args);};var ReflectOwnKeys;if(R&&typeof R.ownKeys==='function'){ReflectOwnKeys=R.ownKeys;}else if(Object.getOwnPropertySymbols){ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));};}else {ReflectOwnKeys=function ReflectOwnKeys(target){return Object.getOwnPropertyNames(target);};}function ProcessEmitWarning(warning){if(console&&console.warn)console.warn(warning);}var NumberIsNaN=Number.isNaN||function NumberIsNaN(value){return value!==value;};function EventEmitter$1(){EventEmitter$1.init.call(this);}events.exports=EventEmitter$1;events.exports.once=once$1;// Backwards-compat with node 0.10.x
|
|
5287
|
+
EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=undefined;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
|
|
5288
|
+
// added to it. This is a useful default which helps finding memory leaks.
|
|
5289
|
+
var defaultMaxListeners=10;function checkListener(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners=arg;}});EventEmitter$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows
|
|
5290
|
+
// that to be increased. Set to zero for unlimited.
|
|
5291
|
+
EventEmitter$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners(this);};EventEmitter$1.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
|
|
5292
|
+
if(doError){var er;if(args.length>0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show
|
|
5293
|
+
// up in Node's output if this results in an unhandled exception.
|
|
5294
|
+
throw er;// Unhandled 'error' event
|
|
5295
|
+
}// At least give some kind of context to the user
|
|
5296
|
+
var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
|
|
5297
|
+
}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply(handler,this,args);}else {var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){ReflectApply(listeners[i],this,args);}}return true;};function _addListener(target,type,listener,prepend){var m;var events;var existing;checkListener(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
|
|
5298
|
+
// adding it to the listeners, first emit "newListener".
|
|
5299
|
+
if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
|
|
5300
|
+
// this._events to be assigned to a new object
|
|
5301
|
+
events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
|
|
5302
|
+
existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
|
|
5303
|
+
existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
|
|
5304
|
+
}else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
|
|
5305
|
+
m=_getMaxListeners(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
|
|
5306
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
5307
|
+
var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning(w);}}return target;}EventEmitter$1.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1.prototype.once=function once(type,listener){checkListener(listener);this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener(listener);this.prependListener(type,_onceWrap(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
|
|
5308
|
+
EventEmitter$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
|
|
5309
|
+
if(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events
|
|
5310
|
+
if(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=Object.create(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners!==undefined){// LIFO order
|
|
5311
|
+
for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length);}EventEmitter$1.prototype.listeners=function listeners(type){return _listeners(this,type,true);};EventEmitter$1.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false);};EventEmitter$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount.call(emitter,type);}};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys(this._events):[];};function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once$1(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
|
|
5312
|
+
// EventEmitters, we do not listen for `error` events here.
|
|
5313
|
+
emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
|
|
5314
|
+
// 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();}/**
|
|
5298
5316
|
* Creates a continuation function with some arguments already applied.
|
|
5299
5317
|
*
|
|
5300
5318
|
* Useful as a shorthand when combined with other control flow functions. Any
|
|
@@ -5398,14 +5416,14 @@ if(result&&typeof result.then==='function'){return handlePromise(result,callback
|
|
|
5398
5416
|
// only return a promise if a callback is omitted
|
|
5399
5417
|
function awaitify(asyncFn){var arity=arguments.length>1&&arguments[1]!==undefined?arguments[1]:asyncFn.length;if(!arity)throw new Error('arity is undefined');function awaitable(){for(var _len6=arguments.length,args=new Array(_len6),_key6=0;_key6<_len6;_key6++){args[_key6]=arguments[_key6];}if(typeof args[arity-1]==='function'){return asyncFn.apply(this,args);}return new Promise((resolve,reject)=>{args[arity-1]=function(err){if(err)return reject(err);for(var _len7=arguments.length,cbArgs=new Array(_len7>1?_len7-1:0),_key7=1;_key7<_len7;_key7++){cbArgs[_key7-1]=arguments[_key7];}resolve(cbArgs.length>1?cbArgs:cbArgs[0]);};asyncFn.apply(this,args);});}return awaitable;}function _asyncMap(eachfn,arr,iteratee,callback){arr=arr||[];var results=[];var counter=0;var _iteratee=wrapAsync(iteratee);return eachfn(arr,(value,_,iterCb)=>{var index=counter++;_iteratee(value,(err,v)=>{results[index]=v;iterCb(err);});},err=>{callback(err,results);});}function isArrayLike(value){return value&&typeof value.length==='number'&&value.length>=0&&value.length%1===0;}// A temporary value used to identify if the loop should be broken.
|
|
5400
5418
|
// See #1064, #1293
|
|
5401
|
-
var breakLoop={};function once
|
|
5419
|
+
var breakLoop={};function once(fn){function wrapper(){if(fn===null)return;var callFn=fn;fn=null;for(var _len8=arguments.length,args=new Array(_len8),_key8=0;_key8<_len8;_key8++){args[_key8]=arguments[_key8];}callFn.apply(this,args);}Object.assign(wrapper,fn);return wrapper;}function getIterator(coll){return coll[Symbol.iterator]&&coll[Symbol.iterator]();}function createArrayIterator(coll){var i=-1;var len=coll.length;return function next(){return ++i<len?{value:coll[i],key:i}:null;};}function createES2015Iterator(iterator){var i=-1;return function next(){var item=iterator.next();if(item.done)return null;i++;return {value:item.value,key:i};};}function createObjectIterator(obj){var okeys=obj?Object.keys(obj):[];var i=-1;var len=okeys.length;return function next(){var key=okeys[++i];if(key==='__proto__'){return next();}return i<len?{value:obj[key],key}:null;};}function createIterator(coll){if(isArrayLike(coll)){return createArrayIterator(coll);}var iterator=getIterator(coll);return iterator?createES2015Iterator(iterator):createObjectIterator(coll);}function onlyOnce(fn){return function(){if(fn===null)throw new Error("Callback was already called.");var callFn=fn;fn=null;for(var _len9=arguments.length,args=new Array(_len9),_key9=0;_key9<_len9;_key9++){args[_key9]=arguments[_key9];}callFn.apply(this,args);};}// for async generators
|
|
5402
5420
|
function asyncEachOfLimit(generator,limit,iteratee,callback){var done=false;var canceled=false;var awaiting=false;var running=0;var idx=0;function replenish(){//console.log('replenish')
|
|
5403
5421
|
if(running>=limit||awaiting||done)return;//console.log('replenish awaiting')
|
|
5404
|
-
awaiting=true;generator.next().then(
|
|
5422
|
+
awaiting=true;generator.next().then(_ref5=>{var{value,done:iterDone}=_ref5;//console.log('got value', value)
|
|
5405
5423
|
if(canceled||done)return;awaiting=false;if(iterDone){done=true;if(running<=0){//console.log('done nextCb')
|
|
5406
5424
|
callback(null);}return;}running++;iteratee(value,idx,iterateeCallback);idx++;replenish();}).catch(handleError);}function iterateeCallback(err,result){//console.log('iterateeCallback')
|
|
5407
5425
|
running-=1;if(canceled)return;if(err)return handleError(err);if(err===false){done=true;canceled=true;return;}if(result===breakLoop||done&&running<=0){done=true;//console.log('done iterCb')
|
|
5408
|
-
return callback(null);}replenish();}function handleError(err){if(canceled)return;awaiting=false;done=true;callback(err);}replenish();}var eachOfLimit=limit=>{return (obj,iteratee,callback)=>{callback=once
|
|
5426
|
+
return callback(null);}replenish();}function handleError(err){if(canceled)return;awaiting=false;done=true;callback(err);}replenish();}var eachOfLimit=limit=>{return (obj,iteratee,callback)=>{callback=once(callback);if(limit<=0){throw new RangeError('concurrency limit cannot be less than 1');}if(!obj){return callback(null);}if(isAsyncGenerator(obj)){return asyncEachOfLimit(obj,limit,iteratee,callback);}if(isAsyncIterable(obj)){return asyncEachOfLimit(obj[Symbol.asyncIterator](),limit,iteratee,callback);}var nextElem=createIterator(obj);var done=false;var canceled=false;var running=0;var looping=false;function iterateeCallback(err,value){if(canceled)return;running-=1;if(err){done=true;callback(err);}else if(err===false){done=true;canceled=true;}else if(value===breakLoop||done&&running<=0){done=true;return callback(null);}else if(!looping){replenish();}}function replenish(){looping=true;while(running<limit&&!done){var elem=nextElem();if(elem===null){done=true;if(running<=0){callback(null);}return;}running+=1;iteratee(elem.value,elem.key,onlyOnce(iterateeCallback));}looping=false;}replenish();};};/**
|
|
5409
5427
|
* The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a
|
|
5410
5428
|
* time.
|
|
5411
5429
|
*
|
|
@@ -5426,7 +5444,7 @@ return callback(null);}replenish();}function handleError(err){if(canceled)return
|
|
|
5426
5444
|
* `iteratee` functions have finished, or an error occurs. Invoked with (err).
|
|
5427
5445
|
* @returns {Promise} a promise, if a callback is omitted
|
|
5428
5446
|
*/function eachOfLimit$1(coll,limit,iteratee,callback){return eachOfLimit(limit)(coll,wrapAsync(iteratee),callback);}var eachOfLimit$2=awaitify(eachOfLimit$1,4);// eachOf implementation optimized for array-likes
|
|
5429
|
-
function eachOfArrayLike(coll,iteratee,callback){callback=once
|
|
5447
|
+
function eachOfArrayLike(coll,iteratee,callback){callback=once(callback);var index=0,completed=0,{length}=coll,canceled=false;if(length===0){callback(null);}function iteratorCallback(err,value){if(err===false){canceled=true;}if(canceled===true)return;if(err){callback(err);}else if(++completed===length||value===breakLoop){callback(null);}}for(;index<length;index++){iteratee(coll[index],index,onlyOnce(iteratorCallback));}}// a generic version of eachOf which can handle array, object, and iterator cases.
|
|
5430
5448
|
function eachOfGeneric(coll,iteratee,callback){return eachOfLimit$2(coll,Infinity,iteratee,callback);}/**
|
|
5431
5449
|
* Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument
|
|
5432
5450
|
* to the iteratee.
|
|
@@ -5812,7 +5830,7 @@ Object.defineProperties(q,{saturated:{writable:false,value:eventMethod('saturate
|
|
|
5812
5830
|
* }
|
|
5813
5831
|
* }
|
|
5814
5832
|
*
|
|
5815
|
-
*/function reduce(coll,memo,iteratee,callback){callback=once
|
|
5833
|
+
*/function reduce(coll,memo,iteratee,callback){callback=once(callback);var _iteratee=wrapAsync(iteratee);return eachOfSeries$1(coll,(x,i,iterCb)=>{_iteratee(memo,x,(err,v)=>{memo=v;iterCb(err);});},err=>callback(err,memo));}awaitify(reduce,4);/**
|
|
5816
5834
|
* The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.
|
|
5817
5835
|
*
|
|
5818
5836
|
* @name mapLimit
|
|
@@ -6576,7 +6594,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
|
|
|
6576
6594
|
* of each key from `obj`, with each transformed value on the right-hand side.
|
|
6577
6595
|
* Invoked with (err, result).
|
|
6578
6596
|
* @returns {Promise} a promise, if no callback is passed
|
|
6579
|
-
*/function mapValuesLimit(obj,limit,iteratee,callback){callback=once
|
|
6597
|
+
*/function mapValuesLimit(obj,limit,iteratee,callback){callback=once(callback);var newObj={};var _iteratee=wrapAsync(iteratee);return eachOfLimit(limit)(obj,(val,key,next)=>{_iteratee(val,key,(err,result)=>{if(err)return next(err);newObj[key]=result;next(err);});},err=>callback(err,newObj));}awaitify(mapValuesLimit,4);if(hasNextTick){browser$1.nextTick;}else if(hasSetImmediate){setImmediate;}else;awaitify((eachfn,tasks,callback)=>{var results=isArrayLike(tasks)?[]:{};eachfn(tasks,(task,key,taskCb)=>{wrapAsync(task)(function(err){for(var _len17=arguments.length,result=new Array(_len17>1?_len17-1:0),_key17=1;_key17<_len17;_key17++){result[_key17-1]=arguments[_key17];}if(result.length<2){[result]=result;}results[key]=result;taskCb(err);});},err=>callback(err,results));},3);/**
|
|
6580
6598
|
* A queue of tasks for the worker function to complete.
|
|
6581
6599
|
* @typedef {Iterable} QueueObject
|
|
6582
6600
|
* @memberOf module:ControlFlow
|
|
@@ -6750,7 +6768,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
|
|
|
6750
6768
|
* function(err, result) {
|
|
6751
6769
|
* // the result will be equal to 'two' as it finishes earlier
|
|
6752
6770
|
* });
|
|
6753
|
-
*/function race(tasks,callback){callback=once
|
|
6771
|
+
*/function race(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new TypeError('First argument to race must be an array of functions'));if(!tasks.length)return callback();for(var i=0,l=tasks.length;i<l;i++){wrapAsync(tasks[i])(callback);}}awaitify(race,2);function reject(eachfn,arr,_iteratee,callback){var iteratee=wrapAsync(_iteratee);return _filter(eachfn,arr,(value,cb)=>{iteratee(value,(err,v)=>{cb(err,!v);});},callback);}/**
|
|
6754
6772
|
* The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.
|
|
6755
6773
|
*
|
|
6756
6774
|
* @name reject
|
|
@@ -7259,36 +7277,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
|
|
|
7259
7277
|
* // arg1 now equals 'three'
|
|
7260
7278
|
* callback(null, 'done');
|
|
7261
7279
|
* }
|
|
7262
|
-
*/function waterfall(tasks,callback){callback=once
|
|
7263
|
-
EventEmitter$1.EventEmitter=EventEmitter$1;EventEmitter$1.prototype._events=undefined;EventEmitter$1.prototype._eventsCount=0;EventEmitter$1.prototype._maxListeners=undefined;// By default EventEmitters will print a warning if more than 10 listeners are
|
|
7264
|
-
// added to it. This is a useful default which helps finding memory leaks.
|
|
7265
|
-
var defaultMaxListeners=10;function checkListener(listener){if(typeof listener!=='function'){throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof listener);}}Object.defineProperty(EventEmitter$1,'defaultMaxListeners',{enumerable:true,get:function get(){return defaultMaxListeners;},set:function set(arg){if(typeof arg!=='number'||arg<0||NumberIsNaN(arg)){throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+arg+'.');}defaultMaxListeners=arg;}});EventEmitter$1.init=function(){if(this._events===undefined||this._events===Object.getPrototypeOf(this)._events){this._events=Object.create(null);this._eventsCount=0;}this._maxListeners=this._maxListeners||undefined;};// Obviously not all Emitters should be limited to 10. This function allows
|
|
7266
|
-
// that to be increased. Set to zero for unlimited.
|
|
7267
|
-
EventEmitter$1.prototype.setMaxListeners=function setMaxListeners(n){if(typeof n!=='number'||n<0||NumberIsNaN(n)){throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+n+'.');}this._maxListeners=n;return this;};function _getMaxListeners(that){if(that._maxListeners===undefined)return EventEmitter$1.defaultMaxListeners;return that._maxListeners;}EventEmitter$1.prototype.getMaxListeners=function getMaxListeners(){return _getMaxListeners(this);};EventEmitter$1.prototype.emit=function emit(type){var args=[];for(var i=1;i<arguments.length;i++){args.push(arguments[i]);}var doError=type==='error';var events=this._events;if(events!==undefined)doError=doError&&events.error===undefined;else if(!doError)return false;// If there is no 'error' event listener then throw.
|
|
7268
|
-
if(doError){var er;if(args.length>0)er=args[0];if(er instanceof Error){// Note: The comments on the `throw` lines are intentional, they show
|
|
7269
|
-
// up in Node's output if this results in an unhandled exception.
|
|
7270
|
-
throw er;// Unhandled 'error' event
|
|
7271
|
-
}// At least give some kind of context to the user
|
|
7272
|
-
var err=new Error('Unhandled error.'+(er?' ('+er.message+')':''));err.context=er;throw err;// Unhandled 'error' event
|
|
7273
|
-
}var handler=events[type];if(handler===undefined)return false;if(typeof handler==='function'){ReflectApply(handler,this,args);}else {var len=handler.length;var listeners=arrayClone(handler,len);for(var i=0;i<len;++i){ReflectApply(listeners[i],this,args);}}return true;};function _addListener(target,type,listener,prepend){var m;var events;var existing;checkListener(listener);events=target._events;if(events===undefined){events=target._events=Object.create(null);target._eventsCount=0;}else {// To avoid recursion in the case that type === "newListener"! Before
|
|
7274
|
-
// adding it to the listeners, first emit "newListener".
|
|
7275
|
-
if(events.newListener!==undefined){target.emit('newListener',type,listener.listener?listener.listener:listener);// Re-assign `events` because a newListener handler could have caused the
|
|
7276
|
-
// this._events to be assigned to a new object
|
|
7277
|
-
events=target._events;}existing=events[type];}if(existing===undefined){// Optimize the case of one listener. Don't need the extra array object.
|
|
7278
|
-
existing=events[type]=listener;++target._eventsCount;}else {if(typeof existing==='function'){// Adding the second element, need to change to array.
|
|
7279
|
-
existing=events[type]=prepend?[listener,existing]:[existing,listener];// If we've already got an array, just append.
|
|
7280
|
-
}else if(prepend){existing.unshift(listener);}else {existing.push(listener);}// Check for listener leak
|
|
7281
|
-
m=_getMaxListeners(target);if(m>0&&existing.length>m&&!existing.warned){existing.warned=true;// No error code for this since it is a Warning
|
|
7282
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
7283
|
-
var w=new Error('Possible EventEmitter memory leak detected. '+existing.length+' '+String(type)+' listeners '+'added. Use emitter.setMaxListeners() to '+'increase limit');w.name='MaxListenersExceededWarning';w.emitter=target;w.type=type;w.count=existing.length;ProcessEmitWarning(w);}}return target;}EventEmitter$1.prototype.addListener=function addListener(type,listener){return _addListener(this,type,listener,false);};EventEmitter$1.prototype.on=EventEmitter$1.prototype.addListener;EventEmitter$1.prototype.prependListener=function prependListener(type,listener){return _addListener(this,type,listener,true);};function onceWrapper(){if(!this.fired){this.target.removeListener(this.type,this.wrapFn);this.fired=true;if(arguments.length===0)return this.listener.call(this.target);return this.listener.apply(this.target,arguments);}}function _onceWrap(target,type,listener){var state={fired:false,wrapFn:undefined,target:target,type:type,listener:listener};var wrapped=onceWrapper.bind(state);wrapped.listener=listener;state.wrapFn=wrapped;return wrapped;}EventEmitter$1.prototype.once=function once(type,listener){checkListener(listener);this.on(type,_onceWrap(this,type,listener));return this;};EventEmitter$1.prototype.prependOnceListener=function prependOnceListener(type,listener){checkListener(listener);this.prependListener(type,_onceWrap(this,type,listener));return this;};// Emits a 'removeListener' event if and only if the listener was removed.
|
|
7284
|
-
EventEmitter$1.prototype.removeListener=function removeListener(type,listener){var list,events,position,i,originalListener;checkListener(listener);events=this._events;if(events===undefined)return this;list=events[type];if(list===undefined)return this;if(list===listener||list.listener===listener){if(--this._eventsCount===0)this._events=Object.create(null);else {delete events[type];if(events.removeListener)this.emit('removeListener',type,list.listener||listener);}}else if(typeof list!=='function'){position=-1;for(i=list.length-1;i>=0;i--){if(list[i]===listener||list[i].listener===listener){originalListener=list[i].listener;position=i;break;}}if(position<0)return this;if(position===0)list.shift();else {spliceOne(list,position);}if(list.length===1)events[type]=list[0];if(events.removeListener!==undefined)this.emit('removeListener',type,originalListener||listener);}return this;};EventEmitter$1.prototype.off=EventEmitter$1.prototype.removeListener;EventEmitter$1.prototype.removeAllListeners=function removeAllListeners(type){var listeners,events,i;events=this._events;if(events===undefined)return this;// not listening for removeListener, no need to emit
|
|
7285
|
-
if(events.removeListener===undefined){if(arguments.length===0){this._events=Object.create(null);this._eventsCount=0;}else if(events[type]!==undefined){if(--this._eventsCount===0)this._events=Object.create(null);else delete events[type];}return this;}// emit removeListener for all listeners on all events
|
|
7286
|
-
if(arguments.length===0){var keys=Object.keys(events);var key;for(i=0;i<keys.length;++i){key=keys[i];if(key==='removeListener')continue;this.removeAllListeners(key);}this.removeAllListeners('removeListener');this._events=Object.create(null);this._eventsCount=0;return this;}listeners=events[type];if(typeof listeners==='function'){this.removeListener(type,listeners);}else if(listeners!==undefined){// LIFO order
|
|
7287
|
-
for(i=listeners.length-1;i>=0;i--){this.removeListener(type,listeners[i]);}}return this;};function _listeners(target,type,unwrap){var events=target._events;if(events===undefined)return [];var evlistener=events[type];if(evlistener===undefined)return [];if(typeof evlistener==='function')return unwrap?[evlistener.listener||evlistener]:[evlistener];return unwrap?unwrapListeners(evlistener):arrayClone(evlistener,evlistener.length);}EventEmitter$1.prototype.listeners=function listeners(type){return _listeners(this,type,true);};EventEmitter$1.prototype.rawListeners=function rawListeners(type){return _listeners(this,type,false);};EventEmitter$1.listenerCount=function(emitter,type){if(typeof emitter.listenerCount==='function'){return emitter.listenerCount(type);}else {return listenerCount.call(emitter,type);}};EventEmitter$1.prototype.listenerCount=listenerCount;function listenerCount(type){var events=this._events;if(events!==undefined){var evlistener=events[type];if(typeof evlistener==='function'){return 1;}else if(evlistener!==undefined){return evlistener.length;}}return 0;}EventEmitter$1.prototype.eventNames=function eventNames(){return this._eventsCount>0?ReflectOwnKeys(this._events):[];};function arrayClone(arr,n){var copy=new Array(n);for(var i=0;i<n;++i){copy[i]=arr[i];}return copy;}function spliceOne(list,index){for(;index+1<list.length;index++){list[index]=list[index+1];}list.pop();}function unwrapListeners(arr){var ret=new Array(arr.length);for(var i=0;i<ret.length;++i){ret[i]=arr[i].listener||arr[i];}return ret;}function once(emitter,name){return new Promise(function(resolve,reject){function errorListener(err){emitter.removeListener(name,resolver);reject(err);}function resolver(){if(typeof emitter.removeListener==='function'){emitter.removeListener('error',errorListener);}resolve([].slice.call(arguments));}eventTargetAgnosticAddListener(emitter,name,resolver,{once:true});if(name!=='error'){addErrorHandlerIfEventEmitter(emitter,errorListener,{once:true});}});}function addErrorHandlerIfEventEmitter(emitter,handler,flags){if(typeof emitter.on==='function'){eventTargetAgnosticAddListener(emitter,'error',handler,flags);}}function eventTargetAgnosticAddListener(emitter,name,listener,flags){if(typeof emitter.on==='function'){if(flags.once){emitter.once(name,listener);}else {emitter.on(name,listener);}}else if(typeof emitter.addEventListener==='function'){// EventTarget does not have `error` event semantics like Node
|
|
7288
|
-
// EventEmitters, we do not listen for `error` events here.
|
|
7289
|
-
emitter.addEventListener(name,function wrapListener(arg){// IE does not have builtin `{ once: true }` support so we
|
|
7290
|
-
// have to do it manually.
|
|
7291
|
-
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';class JmpLine extends Line{static fromSdpLine(line){if(!JmpLine.regex.test(line)){return undefined;}return new JmpLine();}toSdpLine(){return "a=jmp";}}JmpLine.regex=/^jmp$/;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 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 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 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;});}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());}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 hasSimulcast(av){return !!av.simulcast||av.ssrcGroups.map(sg=>sg.semantics).some(sem=>sem==='SIM');}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());}}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)));}}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(_ref4=>{var[mediaType,transceiver]=_ref4;return __awaiter(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.label};if(mediaType===MediaType$1.AudioMain){result.audio.senders.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.senders.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref5=>{var[mediaType,transceivers]=_ref5;return __awaiter(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter(void 0,void 0,void 0,function*(){var _b,_c;var item={report:yield t.getStats(),mid:(_b=t.receiveSlot.id)===null||_b===void 0?void 0:_b.mid,csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_c=t.receiveSlot.stream.getTracks()[0])===null||_c===void 0?void 0:_c.label};if(mediaType===MediaType$1.AudioMain){result.audio.receivers.push(item);}if(mediaType===MediaType$1.VideoMain){result.video.receivers.push(item);}if(mediaType===MediaType$1.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===MediaType$1.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});var es5={exports:{}};(function(module,exports){!function(e,t){module.exports=t();}(commonjsGlobal$3,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports;}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e){r.d(n,i,function(t){return e[t];}.bind(null,i));}return n;},r.n=function(e){var t=e&&e.__esModule?function(){return e.default;}:function(){return e;};return r.d(t,"a",t),t;},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t);},r.p="",r(r.s=90);}({17:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||"";},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||"";},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r;},e.getWindowsVersionName=function(e){switch(e){case"NT":return "NT";case"XP":return "XP";case"NT 5.0":return "2000";case"NT 5.1":return "XP";case"NT 5.2":return "2003";case"NT 6.0":return "Vista";case"NT 6.1":return "7";case"NT 6.2":return "8";case"NT 6.3":return "8.1";case"NT 10.0":return "10";default:return;}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),10===t[0])switch(t[1]){case 5:return "Leopard";case 6:return "Snow Leopard";case 7:return "Lion";case 8:return "Mountain Lion";case 9:return "Mavericks";case 10:return "Yosemite";case 11:return "El Capitan";case 12:return "Sierra";case 13:return "High Sierra";case 14:return "Mojave";case 15:return "Catalina";default:return;}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0;});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0;},e.getVersionPrecision=function(e){return e.split(".").length;},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(".0");return e.map(n.split("."),function(e){return new Array(20-e.length).join("0")+e;}).reverse();});for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1;}else if(u[0][a]<u[1][a])return -1;}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1){n.push(t(e[r]));}return n;},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i;}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++){s[a-1]=arguments[a];}if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function o(){var e=s[t];"object"==typeof e&&null!==e&&Object.keys(e).forEach(function(t){n[t]=e[t];});};for(t=0,r=s.length;t<r;t+=1){o();}return e;},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e];},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||"";},e;}();t.default=i,e.exports=t.default;},18:function _(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"};t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"};t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"};t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"};t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"};},90:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n);}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw new Error("UserAgent should be a string");return new i.default(e,t);},e.parse=function(e){return new i.default(e).getResult();},t=e,n=[{key:"BROWSER_MAP",get:function get(){return s.BROWSER_MAP;}},{key:"ENGINE_MAP",get:function get(){return s.ENGINE_MAP;}},{key:"OS_MAP",get:function get(){return s.OS_MAP;}},{key:"PLATFORMS_MAP",get:function get(){return s.PLATFORMS_MAP;}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e;}();t.default=o,e.exports=t.default;},91:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e};}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw new Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse();}var t=e.prototype;return t.getUA=function(){return this._ua;},t.test=function(e){return e.test(this._ua);},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser;},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser();},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||"";},t.getBrowserVersion=function(){return this.getBrowser().version;},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS();},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os;},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||"";},t.getOSVersion=function(){return this.getOS().version;},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform();},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||"";},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform;},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine();},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||"";},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t);});throw new Error("Browser's test function is not valid");});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine;},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this;},t.getResult=function(){return o.default.assign({},this.parsedResult);},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach(function(t){var a=e[t];"string"==typeof a?(i[t]=a,s+=1):"object"==typeof a&&(r[t]=a,n+=1);}),n>0){var a=Object.keys(r),u=o.default.find(a,function(e){return t.isOS(e);});if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d;}var c=o.default.find(a,function(e){return t.isPlatform(e);});if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f;}}if(s>0){var l=Object.keys(i),h=o.default.find(l,function(e){return t.isBrowser(e,!0);});if(void 0!==h)return this.compareVersion(i[h]);}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r;},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if("string"==typeof i)return ">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(n=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1;},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase();},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase();},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase();},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e);},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e);});},e;}();t.default=d,e.exports=t.default;},92:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\/(\d+(\.?_?\d+)+)/i,a=[{test:[/googlebot/i],describe:function describe(e){var t={name:"Googlebot"},r=i.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/opera/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opr\/|opios/i],describe:function describe(e){var t={name:"Opera"},r=i.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/SamsungBrowser/i],describe:function describe(e){var t={name:"Samsung Internet for Android"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Whale/i],describe:function describe(e){var t={name:"NAVER Whale Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MZBrowser/i],describe:function describe(e){var t={name:"MZ Browser"},r=i.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/focus/i],describe:function describe(e){var t={name:"Focus"},r=i.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/swing/i],describe:function describe(e){var t={name:"Swing"},r=i.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/coast/i],describe:function describe(e){var t={name:"Opera Coast"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function describe(e){var t={name:"Opera Touch"},r=i.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/yabrowser/i],describe:function describe(e){var t={name:"Yandex Browser"},r=i.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/ucbrowser/i],describe:function describe(e){var t={name:"UC Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/Maxthon|mxios/i],describe:function describe(e){var t={name:"Maxthon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/epiphany/i],describe:function describe(e){var t={name:"Epiphany"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/puffin/i],describe:function describe(e){var t={name:"Puffin"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sleipnir/i],describe:function describe(e){var t={name:"Sleipnir"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/k-meleon/i],describe:function describe(e){var t={name:"K-Meleon"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/micromessenger/i],describe:function describe(e){var t={name:"WeChat"},r=i.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qqbrowser/i],describe:function describe(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/msie|trident/i],describe:function describe(e){var t={name:"Internet Explorer"},r=i.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/\sedg\//i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/edg([ea]|ios)/i],describe:function describe(e){var t={name:"Microsoft Edge"},r=i.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/vivaldi/i],describe:function describe(e){var t={name:"Vivaldi"},r=i.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/seamonkey/i],describe:function describe(e){var t={name:"SeaMonkey"},r=i.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/sailfish/i],describe:function describe(e){var t={name:"Sailfish"},r=i.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t;}},{test:[/silk/i],describe:function describe(e){var t={name:"Amazon Silk"},r=i.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/phantom/i],describe:function describe(e){var t={name:"PhantomJS"},r=i.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/slimerjs/i],describe:function describe(e){var t={name:"SlimerJS"},r=i.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t={name:"BlackBerry"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t={name:"WebOS Browser"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/bada/i],describe:function describe(e){var t={name:"Bada"},r=i.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/tizen/i],describe:function describe(e){var t={name:"Tizen"},r=i.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/qupzilla/i],describe:function describe(e){var t={name:"QupZilla"},r=i.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/firefox|iceweasel|fxios/i],describe:function describe(e){var t={name:"Firefox"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/electron/i],describe:function describe(e){var t={name:"Electron"},r=i.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/MiuiBrowser/i],describe:function describe(e){var t={name:"Miui"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/chromium/i],describe:function describe(e){var t={name:"Chromium"},r=i.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/chrome|crios|crmo/i],describe:function describe(e){var t={name:"Chrome"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/GSA/i],describe:function describe(e){var t={name:"Google Search"},r=i.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t={name:"Android Browser"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/playstation 4/i],describe:function describe(e){var t={name:"PlayStation 4"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/safari|applewebkit/i],describe:function describe(e){var t={name:"Safari"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t;}},{test:[/.*/i],describe:function describe(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return {name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)};}}];t.default=a,e.exports=t.default;},93:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\/DVP/],describe:function describe(e){var t=i.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return {name:s.OS_MAP.Roku,version:t};}},{test:[/windows phone/i],describe:function describe(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.WindowsPhone,version:t};}},{test:[/windows /i],describe:function describe(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=i.default.getWindowsVersionName(t);return {name:s.OS_MAP.Windows,version:t,versionName:r};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t;}},{test:[/macintosh/i],describe:function describe(e){var t=i.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n;}},{test:[/(ipod|iphone|ipad)/i],describe:function describe(e){var t=i.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return {name:s.OS_MAP.iOS,version:t};}},{test:function test(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r;},describe:function describe(e){var t=i.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n;}},{test:[/(web|hpw)[o0]s/i],describe:function describe(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r;}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function describe(e){var t=i.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||i.default.getFirstMatch(/\bbb(\d+)/i,e);return {name:s.OS_MAP.BlackBerry,version:t};}},{test:[/bada/i],describe:function describe(e){var t=i.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Bada,version:t};}},{test:[/tizen/i],describe:function describe(e){var t=i.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.Tizen,version:t};}},{test:[/linux/i],describe:function describe(){return {name:s.OS_MAP.Linux};}},{test:[/CrOS/],describe:function describe(){return {name:s.OS_MAP.ChromeOS};}},{test:[/PlayStation 4/],describe:function describe(e){var t=i.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return {name:s.OS_MAP.PlayStation4,version:t};}}];t.default=a,e.exports=t.default;},94:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function describe(){return {type:"bot",vendor:"Google"};}},{test:[/huawei/i],describe:function describe(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:s.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r;}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Nexus"};}},{test:[/ipad/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"};}},{test:[/kftt build/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"};}},{test:[/silk/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet,vendor:"Amazon"};}},{test:[/tablet(?! pc)/i],describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r;},describe:function describe(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return {type:s.PLATFORMS_MAP.mobile,vendor:"Apple",model:t};}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Nexus"};}},{test:[/[^-]mobi/i],describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "blackberry"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"BlackBerry"};}},{test:function test(e){return "bada"===e.getBrowserName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "windows phone"===e.getBrowserName();},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile,vendor:"Microsoft"};}},{test:function test(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return "android"===e.getOSName(!0)&&t>=3;},describe:function describe(){return {type:s.PLATFORMS_MAP.tablet};}},{test:function test(e){return "android"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.mobile};}},{test:function test(e){return "macos"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop,vendor:"Apple"};}},{test:function test(e){return "windows"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "linux"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.desktop};}},{test:function test(e){return "playstation 4"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}},{test:function test(e){return "roku"===e.getOSName(!0);},describe:function describe(){return {type:s.PLATFORMS_MAP.tv};}}];t.default=a,e.exports=t.default;},95:function _(e,t,r){t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function test(e){return "microsoft edge"===e.getBrowserName(!0);},describe:function describe(e){if(/\sedg\//i.test(e))return {name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return {name:s.ENGINE_MAP.EdgeHTML,version:t};}},{test:[/trident/i],describe:function describe(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){return e.test(/presto/i);},describe:function describe(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:function test(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r;},describe:function describe(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}},{test:[/(apple)?webkit\/537\.36/i],describe:function describe(){return {name:s.ENGINE_MAP.Blink};}},{test:[/(apple)?webkit/i],describe:function describe(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t;}}];t.default=a,e.exports=t.default;}});});})(es5);var Bowser=/*@__PURE__*/getDefaultExportFromCjs(es5.exports);function getBrowserDetails(){var browser=Bowser.getParser(window.navigator.userAgent);return browser.getBrowser();}var logger$1={exports:{}};/*!
|
|
7280
|
+
*/function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len20=arguments.length,args=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){args[_key20-1]=arguments[_key20];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var logger$1={exports:{}};/*!
|
|
7292
7281
|
* js-logger - http://github.com/jonnyreeves/js-logger
|
|
7293
7282
|
* Jonny Reeves, http://jonnyreeves.co.uk/
|
|
7294
7283
|
* js-logger may be freely distributed under the MIT license.
|
|
@@ -7337,7 +7326,7 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
|
|
|
7337
7326
|
// `options` hash can be used to configure the default logLevel and provide a custom message formatter.
|
|
7338
7327
|
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
7328
|
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$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);});if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceIndication,data=>{data.sources.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got source indication for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;this.emit(MultistreamConnectionEventNames.VideoSourceCountUpdate,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.ScrRequestReceived,data=>{this.sendSourceWarnings(mediaType,data.requests);this.updateRequestedStreams(mediaType,data.requests);});}if(getMediaFamily$1(mediaType)===MediaFamily$1.Audio){var _prevNumTotalSources=0;var _prevNumLiveSources=0;jmpSession.on(JmpSessionEvents$1.SourceIndication,data=>{data.sources.forEach(s=>{var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger$4.warn("Got source indication for unknown receive slot: ".concat(s.id));return;}receiveSlot._updateSource(s.state,s.csi);});if(data.numTotalSources!==_prevNumTotalSources||data.numLiveSources!==_prevNumLiveSources){_prevNumTotalSources=data.numTotalSources;_prevNumLiveSources=data.numLiveSources;this.emit(MultistreamConnectionEventNames.AudioSourceCountUpdate,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}});jmpSession.on(JmpSessionEvents$1.ActiveSpeaker,data=>this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data));jmpSession.on(JmpSessionEvents$1.ScrRequestReceived,data=>{this.updateRequestedStreams(mediaType,data.requests);});}this.jmpSessions.set(mediaType,jmpSession);}sendSourceWarnings(mediaType,requests){var _a;if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var signaler=this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);var activeSimulcastLayerNumber=((_a=sendTransceiver.publishedTrack)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers())||0;var sourceWarnings=[];requests.forEach(_ref6=>{var{ids,policySpecificInfo}=_ref6;ids.forEach(id=>{if(isValidReceiverSelectedInfo(policySpecificInfo)&&sendTransceiver.csi!==policySpecificInfo.csi){sourceWarnings.push({id,state:'invalid source',csi:policySpecificInfo.csi});}else if(!signaler.getSenderIds().some(validId=>compareStreamIds(id,validId))){sourceWarnings.push({id,state:'invalid source',csi:sendTransceiver.csi});}else if(signaler.getEncodingIndexForStreamId(id)>=activeSimulcastLayerNumber){sourceWarnings.push({id,state:'no source',csi:sendTransceiver.csi});}});});if(sourceWarnings.length>0){var{publishedTrack}=sendTransceiver;var live=!!publishedTrack&&publishedTrack.published&&!publishedTrack.muted;this.sendSourceIndication(mediaType,+live,sourceWarnings);}}}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(_ref7=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref7;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 scr request 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.maybeSendSourceIndication(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();}maybeSendSourceIndication(mediaType){var _a;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedTrack)===null||_a===void 0?void 0:_a.muted)===false?1:0;if(getMediaFamily$1(mediaType)===MediaFamily$1.Video){var sources=this.getVideoSources(mediaType);if(sources===null){return;}var webRtcVideoContentHint;if(transceiver.publishedTrack instanceof LocalDisplayTrack){webRtcVideoContentHint=transceiver.publishedTrack.videoContentHint;}this.sendSourceIndication(mediaType,numLiveSources,sources,webRtcVideoContentHintToJmpVideoContentHint(webRtcVideoContentHint));}else {this.sendSourceIndication(mediaType,numLiveSources);}}sendSourceIndication(mediaType,numLiveSources){var sources=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];var videoContentHint=arguments.length>3&&arguments[3]!==undefined?arguments[3]:undefined;var _a;var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.updateSourceIndication(1,numLiveSources,sources,videoContentHint);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.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.maybeSendSourceIndication(mediaType);track.on(LocalTrack.Events.TrackConstraintsChange,onTrackResolutionChange);var onTrackMute=()=>this.maybeSendSourceIndication(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.maybeSendSourceIndication(mediaType);}};track.on(LocalTrack.Events.PublishedStateUpdate,onTrackPublish);}getVideoSources(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*(){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 offerWithCandidates=yield getLocalDescriptionWithIceCandidates(this.pc);var sdpToSend=this.prepareLocalOfferForRemoteServer(offerWithCandidates.sdp);createOfferResolve({sdp:sdpToSend,type:offerWithCandidates.type});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);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])));});}});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);}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(_ref8=>{var[param,value]=_ref8;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,mediaRequests){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=[];mediaRequests.forEach(mr=>mr.receiveSlots.forEach(rs=>{if(!rs.id){logger$4.error("Running subscribe 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(mediaRequests.map(mr=>mr._toJmpScrRequest()));};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(_ref9=>{var[mediaType,transceiver]=_ref9;return __awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{var _a;if(senderStats.type==='outbound-rtp'){var statsToModify=stats.get(senderStats.id);statsToModify.mid=transceiver.mid;statsToModify.csi=transceiver.csi;statsToModify.mediaType=mediaType;var trackSettings=(_a=transceiver.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(_ref10=>{var[mediaType,transceivers]=_ref10;return __awaiter(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{var _a;if(receiverStats.type==='inbound-rtp'){var statsToModify=stats.get(receiverStats.id);statsToModify.mid=(_a=transceiver.receiveSlot.id)===null||_a===void 0?void 0:_a.mid;statsToModify.csi=transceiver.receiveSlot.currentRxCsi;statsToModify.mediaType=mediaType;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)};}}
|
|
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);}}
|
|
7341
7330
|
|
|
7342
7331
|
var Event$1;
|
|
7343
7332
|
(function (Event) {
|
|
@@ -16207,14 +16196,15 @@ Logger.useDefaults({
|
|
|
16207
16196
|
}
|
|
16208
16197
|
});
|
|
16209
16198
|
class ActiveSpeakerInfo {
|
|
16210
|
-
constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo) {
|
|
16199
|
+
constructor(priority, crossPriorityDuplication, crossPolicyDuplication, preferLiveVideo, namedMediaGroups) {
|
|
16211
16200
|
this.priority = priority;
|
|
16212
16201
|
this.crossPriorityDuplication = crossPriorityDuplication;
|
|
16213
16202
|
this.crossPolicyDuplication = crossPolicyDuplication;
|
|
16214
16203
|
this.preferLiveVideo = preferLiveVideo;
|
|
16204
|
+
this.namedMediaGroups = namedMediaGroups;
|
|
16215
16205
|
}
|
|
16216
16206
|
toString() {
|
|
16217
|
-
return "ActiveSpeakerInfo(priority=".concat(this.priority, ", crossPriorityDuplication=").concat(this.crossPriorityDuplication, ", crossPolicyDuplication=").concat(this.crossPolicyDuplication, ", preferLiveVideo=").concat(this.preferLiveVideo, ")");
|
|
16207
|
+
return "ActiveSpeakerInfo(priority=".concat(this.priority, ", crossPriorityDuplication=").concat(this.crossPriorityDuplication, ", crossPolicyDuplication=").concat(this.crossPolicyDuplication, ", preferLiveVideo=").concat(this.preferLiveVideo, "), namedMediaGroups=").concat(this.namedMediaGroups);
|
|
16218
16208
|
}
|
|
16219
16209
|
}
|
|
16220
16210
|
var HomerMsgType;
|
|
@@ -16223,11 +16213,13 @@ var HomerMsgType;
|
|
|
16223
16213
|
})(HomerMsgType || (HomerMsgType = {}));
|
|
16224
16214
|
var JmpMsgType;
|
|
16225
16215
|
(function (JmpMsgType) {
|
|
16226
|
-
JmpMsgType["
|
|
16227
|
-
JmpMsgType["
|
|
16216
|
+
JmpMsgType["MediaRequest"] = "mediaRequest";
|
|
16217
|
+
JmpMsgType["MediaRequestAck"] = "mediaRequestAck";
|
|
16218
|
+
JmpMsgType["MediaRequestStatus"] = "mediaRequestStatus";
|
|
16219
|
+
JmpMsgType["MediaRequestStatusAck"] = "mediaRequestStatusAck";
|
|
16220
|
+
JmpMsgType["SourceAdvertisement"] = "sourceAdvertisement";
|
|
16221
|
+
JmpMsgType["SourceAdvertisementAck"] = "sourceAdvertisementAck";
|
|
16228
16222
|
JmpMsgType["ActiveSpeakerNotification"] = "activeSpeakerNotification";
|
|
16229
|
-
JmpMsgType["SourceIndication"] = "sourceIndication";
|
|
16230
|
-
JmpMsgType["SourceIndicationAck"] = "sourceIndicationAck";
|
|
16231
16223
|
})(JmpMsgType || (JmpMsgType = {}));
|
|
16232
16224
|
class CodecInfo {
|
|
16233
16225
|
constructor(payloadType, h264) {
|
|
@@ -16279,9 +16271,10 @@ function getMediaFamily(mediaType) {
|
|
|
16279
16271
|
}
|
|
16280
16272
|
var JmpSessionEvents;
|
|
16281
16273
|
(function (JmpSessionEvents) {
|
|
16282
|
-
JmpSessionEvents["SourceIndication"] = "source-indication";
|
|
16283
16274
|
JmpSessionEvents["ActiveSpeaker"] = "active-speaker";
|
|
16284
|
-
JmpSessionEvents["
|
|
16275
|
+
JmpSessionEvents["MediaRequestReceived"] = "media-request-received";
|
|
16276
|
+
JmpSessionEvents["MediaRequestStatusReceived"] = "media-request-status-received";
|
|
16277
|
+
JmpSessionEvents["SourceAdvertisementReceived"] = "source-advertisement-received";
|
|
16285
16278
|
})(JmpSessionEvents || (JmpSessionEvents = {}));
|
|
16286
16279
|
|
|
16287
16280
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -16437,9 +16430,9 @@ class MultistreamRoapMediaConnection extends EventEmitter$4 {
|
|
|
16437
16430
|
this.log('createReceiveSlot()', "called");
|
|
16438
16431
|
return this.multistreamConnection.createReceiveSlot(mediaType);
|
|
16439
16432
|
}
|
|
16440
|
-
requestMedia(mediaType,
|
|
16433
|
+
requestMedia(mediaType, streamRequests) {
|
|
16441
16434
|
this.log('requestMedia()', "called");
|
|
16442
|
-
return this.multistreamConnection.requestMedia(mediaType,
|
|
16435
|
+
return this.multistreamConnection.requestMedia(mediaType, streamRequests);
|
|
16443
16436
|
}
|
|
16444
16437
|
setCodecParameters(mediaType, parameters) {
|
|
16445
16438
|
return this.multistreamConnection.setCodecParameters(mediaType, parameters);
|
|
@@ -16510,4 +16503,4 @@ var Media = {
|
|
|
16510
16503
|
isBrowserSupported
|
|
16511
16504
|
};
|
|
16512
16505
|
|
|
16513
|
-
export { ActiveSpeakerInfo, CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, LocalTrackEvents, Media, MediaFamily,
|
|
16506
|
+
export { ActiveSpeakerInfo, CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, LocalTrackEvents, Media, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteTrackType, RoapMediaConnection, StreamRequest, WcmeError, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, isBrowserSupported, setLogger, setOnDeviceChangeHandler };
|