@webex/internal-media-core 2.16.0 → 2.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -3456,7 +3456,7 @@ if(context.level===Logger.WARN&&console.warn){hdlr=console.warn;}else if(context
3456
3456
  // `options` hash can be used to configure the default logLevel and provide a custom message formatter.
3457
3457
  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.
3458
3458
  Logger.setDefaults=Logger.useDefaults;// Export to popular environments boilerplate.
3459
- if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$2);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});function areNamedMediaGroupsEqual(left,right){return left.type===right.type&&left.value===right.value;}exports.MediaFamily = void 0;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(exports.MediaFamily||(exports.MediaFamily={}));exports.MediaContent = void 0;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(exports.MediaContent||(exports.MediaContent={}));exports.Policy = void 0;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(exports.Policy||(exports.Policy={}));exports.MediaType = void 0;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(exports.MediaType||(exports.MediaType={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===exports.MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Main){return exports.MediaType.VideoMain;}if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Slides){return exports.MediaType.VideoSlides;}if(mediaFamily===exports.MediaFamily.Audio&&mediaContent===exports.MediaContent.Main){return exports.MediaType.AudioMain;}return exports.MediaType.AudioSlides;}function getMediaFamily(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaFamily.Video:exports.MediaFamily.Audio;}function getMediaContent(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.AudioMain].includes(mediaType)?exports.MediaContent.Main:exports.MediaContent.Slides;}var isTruthyOrZero=value=>value===0||Boolean(value);function areArraysEqual(left,right,predicate){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!predicate(left[i],right[i])){return false;}}return true;}class ActiveSpeakerInfo{constructor(priority,crossPriorityDuplication,crossPolicyDuplication,preferLiveVideo,namedMediaGroups){this.priority=priority;this.crossPriorityDuplication=crossPriorityDuplication;this.crossPolicyDuplication=crossPolicyDuplication;this.preferLiveVideo=preferLiveVideo;this.namedMediaGroups=namedMediaGroups;}toString(){return "ActiveSpeakerInfo(priority=".concat(this.priority,", crossPriorityDuplication=").concat(this.crossPriorityDuplication,", crossPolicyDuplication=").concat(this.crossPolicyDuplication,", preferLiveVideo=").concat(this.preferLiveVideo,"), namedMediaGroups=").concat(this.namedMediaGroups);}}function isValidActiveSpeakerInfo(msg){var maybeActiveSpeakerInfo=msg;return Boolean('priority'in maybeActiveSpeakerInfo&&'crossPriorityDuplication'in maybeActiveSpeakerInfo&&'crossPolicyDuplication'in maybeActiveSpeakerInfo&&'preferLiveVideo'in maybeActiveSpeakerInfo);}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areArraysEqual(left.namedMediaGroups||[],right.namedMediaGroups||[],areNamedMediaGroupsEqual);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}class H264Codec{constructor(maxFs,maxFps,maxMbps,maxWidth,maxHeight){this.maxFs=maxFs;this.maxFps=maxFps;this.maxMbps=maxMbps;this.maxWidth=maxWidth;this.maxHeight=maxHeight;}}function areH264CodecsEqual(left,right){if(left===undefined||right===undefined){return left===right;}return left.maxFs===right.maxFs&&left.maxFps===right.maxFps&&left.maxMbps===right.maxMbps&&left.maxWidth===right.maxWidth&&left.maxHeight===right.maxHeight;}class CodecInfo$1{constructor(payloadType,h264){this.payloadType=payloadType;this.h264=h264;}}function areCodecInfosEqual(left,right){return left.payloadType===right.payloadType&&areH264CodecsEqual(left.h264,right.h264);}var JmpMsgType;(function(JmpMsgType){JmpMsgType["MediaRequest"]="mediaRequest";JmpMsgType["MediaRequestAck"]="mediaRequestAck";JmpMsgType["MediaRequestStatus"]="mediaRequestStatus";JmpMsgType["MediaRequestStatusAck"]="mediaRequestStatusAck";JmpMsgType["SourceAdvertisement"]="sourceAdvertisement";JmpMsgType["SourceAdvertisementAck"]="sourceAdvertisementAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";})(JmpMsgType||(JmpMsgType={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return "MediaRequestAckMsg(seqNum=".concat(this.mediaRequestSeqNum,")");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}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 MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return "MediaRequestStatusAckMsg(seqNum=".concat(this.mediaRequestStatusSeqNum,")");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}function isValidMidRidStreamId(obj){if(typeof obj!=='object'||obj===null)return false;var maybeMidRidStreamId=obj;return typeof maybeMidRidStreamId.mid==='string'&&(maybeMidRidStreamId.rid===undefined||typeof maybeMidRidStreamId.rid==='string')&&!('ssrc'in maybeMidRidStreamId);}function isValidSsrcStreamId(obj){if(typeof obj!=='object'||obj===null)return false;var maybeSsrcStreamId=obj;return typeof maybeSsrcStreamId.ssrc==='number'&&(maybeSsrcStreamId.rtxSsrc===undefined||typeof maybeSsrcStreamId.rtxSsrc==='number')&&!('mid'in maybeSsrcStreamId);}function isValidStreamId(obj){return isValidMidRidStreamId(obj)||isValidSsrcStreamId(obj);}function areStreamIdsEqual(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','away'].includes(maybeStreamInfo.state));}function areStreamInfosEqual(left,right){return areStreamIdsEqual(left.id,right.id)&&left.state===right.state&&left.csi===right.csi;}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));}class ReceiverSelectedInfo{constructor(csi){this.csi=csi;}toString(){return "ReceiverSelectedInfo(csi=".concat(this.csi,")");}}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}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');}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 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&&isTruthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&isTruthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}function areSourceAdvertisementMsgsEqual(sourceAdvertisementMsg1,sourceAdvertisementMsg2){return sourceAdvertisementMsg1.numLiveSources===sourceAdvertisementMsg2.numLiveSources&&sourceAdvertisementMsg1.numTotalSources===sourceAdvertisementMsg2.numTotalSources&&areArraysEqual(sourceAdvertisementMsg1.namedMediaGroups||[],sourceAdvertisementMsg2.namedMediaGroups||[],areNamedMediaGroupsEqual)&&sourceAdvertisementMsg1.videoContentHint===sourceAdvertisementMsg2.videoContentHint;}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 areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areArraysEqual(left.ids,right.ids,areStreamIdsEqual)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}return areArraysEqual(left.codecInfos,right.codecInfos,areCodecInfosEqual);}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents;(function(JmpSessionEvents){JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["MediaRequestReceived"]="media-request-received";JmpSessionEvents["MediaRequestStatusReceived"]="media-request-status-received";JmpSessionEvents["SourceAdvertisementReceived"]="source-advertisement-received";})(JmpSessionEvents||(JmpSessionEvents={}));class JmpSession extends EventEmitter$6{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:200;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||!areArraysEqual(this.lastSentMediaRequest.msg.requests,requests,areStreamRequestsEqual)){this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent MediaRequest...");this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);},expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}else {this.logger.info("Duplicate MediaRequest detected and will not be sent: ".concat(mediaRequestMsg));}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var _a;var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);if(!this.lastSentSourceAdvertisement||!areSourceAdvertisementMsgsEqual(this.lastSentSourceAdvertisement.msg,sourceAdvertisementMsg)){this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.cancel();this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent SourceAdvertisement...");this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);},expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currSourceAdvertisementSeqNum++;}else {this.logger.info("Duplicate SourceAdvertisement detected and will not be sent: ",sourceAdvertisementMsg);}}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=>areStreamIdsEqual(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!areArraysEqual(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates,areStreamInfosEqual)){this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent MediaRequestStatus...");this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);},expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currMediaRequestStatusSeqNum++;}else {this.logger.info("Duplicate MediaRequestStatus detected and will not be sent: ",mediaRequestStatus);}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(JSON.stringify(jmpMsg)," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",JSON.stringify(jmpMsg));var{payload}=jmpMsg;if(payload.msgType===JmpMsgType.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error("Received invalid MediaRequest:",JSON.stringify(mediaRequestMsg));return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error("Received invalid MediaRequest ACK:",JSON.stringify(mediaRequestAckMsg));return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",JSON.stringify(activeSpeakerNotification));return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error("Received invalid SourceAdvertisementMsg:",JSON.stringify(sourceAdvertisement));return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error("Received invalid SourceAdvertisementAckMsg:",JSON.stringify(sourceAdvertisementAck));return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error("Received invalid MediaRequestStatusMsg:",JSON.stringify(mediaRequestStatus));return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error("Received invalid MediaRequestStatusAckMsg:",JSON.stringify(mediaRequestStatusAck));return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a,_b,_c;this.logger.info("closing");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,jmpMsg);}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old MediaRequest, ignoring");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info("Received duplicate MediaRequest, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn("Received duplicate MediaRequest, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequest, sending ACK");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequest");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequest");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum<this.lastReceivedSourceAdvertisement.seqNum){this.logger.info("Received old SourceAdvertisement, ignoring");}else if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum===this.lastReceivedSourceAdvertisement.seqNum){if(this.lastSentSourceAdvertisementAck){this.logger.info("Received duplicate SourceAdvertisement, re-sending ACK");this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,this.lastSentSourceAdvertisementAck);}else {this.logger.warn("Received duplicate SourceAdvertisement, but there was no ACK previously sent");}}else {this.logger.info("Received new SourceAdvertisement, sending ACK");var sourceAdvertisementAck=new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);this.lastReceivedSourceAdvertisement=sourceAdvertisement;this.lastSentSourceAdvertisementAck=sourceAdvertisementAck;this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,sourceAdvertisementAck);this.emit(JmpSessionEvents.SourceAdvertisementReceived,sourceAdvertisement);}}handleIncomingSourceAdvertisementAck(sourceAdvertisementAck){var _a,_b,_c;if(sourceAdvertisementAck.sourceAdvertisementSeqNum===((_b=(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent SourceAdvertisement");(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old SourceAdvertisement");}}handleIncomingMediaRequestStatus(mediaRequestStatus){if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum<this.lastReceivedMediaRequestStatus.seqNum){this.logger.info("Received old MediaRequestStatus, ignoring");}else if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum===this.lastReceivedMediaRequestStatus.seqNum){if(this.lastSentMediaRequestStatusAck){this.logger.info("Received duplicate MediaRequestStatus, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,this.lastSentMediaRequestStatusAck);}else {this.logger.warn("Received duplicate MediaRequestStatus, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequestStatus, sending ACK");var mediaRequestStatusAck=new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);this.lastReceivedMediaRequestStatus=mediaRequestStatus;this.lastSentMediaRequestStatusAck=mediaRequestStatusAck;this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,mediaRequestStatusAck);this.emit(JmpSessionEvents.MediaRequestStatusReceived,mediaRequestStatus);}}handleIncomingMediaRequestStatusAck(mediaRequestStatusAck){var _a,_b,_c;if(mediaRequestStatusAck.mediaRequestStatusSeqNum===((_b=(_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequestStatus");(_c=this.lastSentMediaRequestStatus)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequestStatus");}}}exports.WcmeErrorType = void 0;(function(WcmeErrorType){WcmeErrorType["CREATE_OFFER_FAILED"]="CREATE_OFFER_FAILED";WcmeErrorType["SET_ANSWER_FAILED"]="SET_ANSWER_FAILED";WcmeErrorType["OFFER_ANSWER_MISMATCH"]="OFFER_ANSWER_MISMATCH";WcmeErrorType["SDP_MUNGE_FAILED"]="SDP_MUNGE_FAILED";WcmeErrorType["SDP_MUNGE_MISSING_CODECS"]="SDP_MUNGE_MISSING_CODECS";WcmeErrorType["INVALID_STREAM_REQUEST"]="INVALID_STREAM_REQUEST";WcmeErrorType["GET_TRANSCEIVER_FAILED"]="GET_TRANSCEIVER_FAILED";WcmeErrorType["GET_MAX_BITRATE_FAILED"]="GET_MAX_BITRATE_FAILED";WcmeErrorType["GET_PAYLOAD_TYPE_FAILED"]="GET_PAYLOAD_TYPE_FAILED";WcmeErrorType["SET_NMG_FAILED"]="SET_NMG_FAILED";WcmeErrorType["DATA_CHANNEL_SEND_FAILED"]="DATA_CHANNEL_SEND_FAILED";})(exports.WcmeErrorType||(exports.WcmeErrorType={}));class WcmeError{constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1={exports:{}};/*!
3459
+ if(module.exports){module.exports=Logger;}else {Logger._prevLogger=global.Logger;Logger.noConflict=function(){global.Logger=Logger._prevLogger;return Logger;};global.Logger=Logger;}})(commonjsGlobal$2);})(logger$2);var Logger$1=logger$2.exports;Logger$1.useDefaults({defaultLevel:Logger$1.DEBUG,formatter:(messages,context)=>{messages.unshift("[".concat(context.name,"] "));}});function areNamedMediaGroupsEqual(left,right){return left.type===right.type&&left.value===right.value;}exports.MediaFamily = void 0;(function(MediaFamily){MediaFamily["Audio"]="AUDIO";MediaFamily["Video"]="VIDEO";})(exports.MediaFamily||(exports.MediaFamily={}));exports.MediaContent = void 0;(function(MediaContent){MediaContent["Main"]="MAIN";MediaContent["Slides"]="SLIDES";})(exports.MediaContent||(exports.MediaContent={}));exports.Policy = void 0;(function(Policy){Policy["ActiveSpeaker"]="active-speaker";Policy["ReceiverSelected"]="receiver-selected";})(exports.Policy||(exports.Policy={}));exports.MediaType = void 0;(function(MediaType){MediaType["VideoMain"]="VIDEO-MAIN";MediaType["VideoSlides"]="VIDEO-SLIDES";MediaType["AudioMain"]="AUDIO-MAIN";MediaType["AudioSlides"]="AUDIO-SLIDES";})(exports.MediaType||(exports.MediaType={}));function randomInteger(min,max){return Math.floor(Math.random()*(max-min+1))+min;}function generateSceneId(){return randomInteger(0,0x7fffff);}function generateCsi(mediaFamily,sceneId){var av;if(mediaFamily===exports.MediaFamily.Audio){av=0;}else {av=1;}return sceneId<<8|av;}function getMediaType(mediaFamily,mediaContent){if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Main){return exports.MediaType.VideoMain;}if(mediaFamily===exports.MediaFamily.Video&&mediaContent===exports.MediaContent.Slides){return exports.MediaType.VideoSlides;}if(mediaFamily===exports.MediaFamily.Audio&&mediaContent===exports.MediaContent.Main){return exports.MediaType.AudioMain;}return exports.MediaType.AudioSlides;}function getMediaFamily(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaFamily.Video:exports.MediaFamily.Audio;}function getMediaContent(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.AudioMain].includes(mediaType)?exports.MediaContent.Main:exports.MediaContent.Slides;}var isTruthyOrZero=value=>value===0||Boolean(value);function areArraysEqual(left,right,predicate){if(left.length!==right.length){return false;}for(var i=0;i<left.length;i+=1){if(!predicate(left[i],right[i])){return false;}}return true;}class ActiveSpeakerInfo{constructor(priority,crossPriorityDuplication,crossPolicyDuplication,preferLiveVideo,namedMediaGroups){this.priority=priority;this.crossPriorityDuplication=crossPriorityDuplication;this.crossPolicyDuplication=crossPolicyDuplication;this.preferLiveVideo=preferLiveVideo;this.namedMediaGroups=namedMediaGroups;}toString(){return "ActiveSpeakerInfo(priority=".concat(this.priority,", crossPriorityDuplication=").concat(this.crossPriorityDuplication,", crossPolicyDuplication=").concat(this.crossPolicyDuplication,", preferLiveVideo=").concat(this.preferLiveVideo,"), namedMediaGroups=").concat(this.namedMediaGroups);}}function isValidActiveSpeakerInfo(msg){var maybeActiveSpeakerInfo=msg;return Boolean('priority'in maybeActiveSpeakerInfo&&'crossPriorityDuplication'in maybeActiveSpeakerInfo&&'crossPolicyDuplication'in maybeActiveSpeakerInfo&&'preferLiveVideo'in maybeActiveSpeakerInfo);}function areActiveSpeakerInfosEqual(left,right){return left.priority===right.priority&&left.crossPriorityDuplication===right.crossPriorityDuplication&&left.crossPolicyDuplication===right.crossPolicyDuplication&&left.preferLiveVideo===right.preferLiveVideo&&areArraysEqual(left.namedMediaGroups||[],right.namedMediaGroups||[],areNamedMediaGroupsEqual);}function isValidActiveSpeakerNotificationMsg(msg){var maybeActiveSpeakerNotificationMsg=msg;return Boolean(maybeActiveSpeakerNotificationMsg.seqNum&&maybeActiveSpeakerNotificationMsg.csis);}class H264Codec{constructor(maxFs,maxFps,maxMbps,maxWidth,maxHeight){this.maxFs=maxFs;this.maxFps=maxFps;this.maxMbps=maxMbps;this.maxWidth=maxWidth;this.maxHeight=maxHeight;}}function areH264CodecsEqual(left,right){if(left===undefined||right===undefined){return left===right;}return left.maxFs===right.maxFs&&left.maxFps===right.maxFps&&left.maxMbps===right.maxMbps&&left.maxWidth===right.maxWidth&&left.maxHeight===right.maxHeight;}class CodecInfo$1{constructor(payloadType,h264){this.payloadType=payloadType;this.h264=h264;}}function areCodecInfosEqual(left,right){return left.payloadType===right.payloadType&&areH264CodecsEqual(left.h264,right.h264);}var JmpMsgType;(function(JmpMsgType){JmpMsgType["MediaRequest"]="mediaRequest";JmpMsgType["MediaRequestAck"]="mediaRequestAck";JmpMsgType["MediaRequestStatus"]="mediaRequestStatus";JmpMsgType["MediaRequestStatusAck"]="mediaRequestStatusAck";JmpMsgType["SourceAdvertisement"]="sourceAdvertisement";JmpMsgType["SourceAdvertisementAck"]="sourceAdvertisementAck";JmpMsgType["ActiveSpeakerNotification"]="activeSpeakerNotification";})(JmpMsgType||(JmpMsgType={}));class JmpMsg{constructor(mediaFamily,mediaContent,payload){this.mediaFamily=mediaFamily;this.mediaContent=mediaContent;this.payload=payload;}toString(){return "JmpMsg(mediaFamily=".concat(this.mediaFamily,", mediaContent=").concat(this.mediaContent,", payload=").concat(this.payload,")");}}function isValidJmpMsgPayload(msg){var maybeJmpMsgPayload=msg;return Boolean(maybeJmpMsgPayload.msgType&&maybeJmpMsgPayload.payload);}function isValidJmpMsg(msg){var maybeJmpMsg=msg;return Boolean(maybeJmpMsg.mediaContent&&maybeJmpMsg.mediaFamily&&maybeJmpMsg.payload&&isValidJmpMsgPayload(maybeJmpMsg.payload));}class MediaRequestAckMsg{constructor(mediaRequestSeqNum){this.mediaRequestSeqNum=mediaRequestSeqNum;}toString(){return "MediaRequestAckMsg(seqNum=".concat(this.mediaRequestSeqNum,")");}}function isValidMediaRequestAckMsg(msg){var maybeMediaRequestAckMsg=msg;return Boolean(maybeMediaRequestAckMsg.mediaRequestSeqNum);}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 MediaRequestStatusAckMsg{constructor(mediaRequestStatusSeqNum){this.mediaRequestStatusSeqNum=mediaRequestStatusSeqNum;}toString(){return "MediaRequestStatusAckMsg(seqNum=".concat(this.mediaRequestStatusSeqNum,")");}}function isValidMediaRequestStatusAckMsg(msg){var maybeMediaRequestStatusAckMsg=msg;return Boolean(maybeMediaRequestStatusAckMsg.mediaRequestStatusSeqNum);}function isValidMidRidStreamId(obj){if(typeof obj!=='object'||obj===null)return false;var maybeMidRidStreamId=obj;return typeof maybeMidRidStreamId.mid==='string'&&(maybeMidRidStreamId.rid===undefined||typeof maybeMidRidStreamId.rid==='string')&&!('ssrc'in maybeMidRidStreamId);}function isValidSsrcStreamId(obj){if(typeof obj!=='object'||obj===null)return false;var maybeSsrcStreamId=obj;return typeof maybeSsrcStreamId.ssrc==='number'&&(maybeSsrcStreamId.rtxSsrc===undefined||typeof maybeSsrcStreamId.rtxSsrc==='number')&&!('mid'in maybeSsrcStreamId);}function isValidStreamId(obj){return isValidMidRidStreamId(obj)||isValidSsrcStreamId(obj);}function areStreamIdsEqual(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','away'].includes(maybeStreamInfo.state));}function areStreamInfosEqual(left,right){return areStreamIdsEqual(left.id,right.id)&&left.state===right.state&&left.csi===right.csi;}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));}class ReceiverSelectedInfo{constructor(csi){this.csi=csi;}toString(){return "ReceiverSelectedInfo(csi=".concat(this.csi,")");}}function isValidReceiverSelectedInfo(msg){var maybeReceiverSelectedInfo=msg;return Boolean(maybeReceiverSelectedInfo.csi);}function areReceiverSelectedInfosEqual(left,right){return left.csi===right.csi;}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');}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 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&&isTruthyOrZero(maybeSourceAdvertisementMsg.numTotalSources)&&isTruthyOrZero(maybeSourceAdvertisementMsg.numLiveSources));}function areSourceAdvertisementMsgsEqual(sourceAdvertisementMsg1,sourceAdvertisementMsg2){return sourceAdvertisementMsg1.numLiveSources===sourceAdvertisementMsg2.numLiveSources&&sourceAdvertisementMsg1.numTotalSources===sourceAdvertisementMsg2.numTotalSources&&areArraysEqual(sourceAdvertisementMsg1.namedMediaGroups||[],sourceAdvertisementMsg2.namedMediaGroups||[],areNamedMediaGroupsEqual)&&sourceAdvertisementMsg1.videoContentHint===sourceAdvertisementMsg2.videoContentHint;}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 areStreamRequestsEqual(left,right){if(left.policy!==right.policy){return false;}if(!arePolicySpecificInfosEqual(left.policySpecificInfo,right.policySpecificInfo)){return false;}if(!areArraysEqual(left.ids,right.ids,areStreamIdsEqual)){return false;}if(left.maxPayloadBitsPerSecond!==right.maxPayloadBitsPerSecond){return false;}return areArraysEqual(left.codecInfos,right.codecInfos,areCodecInfosEqual);}class RetransmitHandler{constructor(msg,maxNumRetransmits,retransmitIntervalMs,transmitCallback,expirationCallback){this.timerHandle=undefined;this.msg=msg;this.numRetransmitsLeft=maxNumRetransmits;this.retransmitIntervalMs=retransmitIntervalMs;this.transmitCallback=transmitCallback;this.expirationCallback=expirationCallback;this.scheduleTimer();}onTimer(){var _a;if(this.numRetransmitsLeft>0){--this.numRetransmitsLeft;this.transmitCallback(this.msg);this.scheduleTimer();}else {(_a=this.expirationCallback)===null||_a===void 0?void 0:_a.call(this,this.msg);}}scheduleTimer(){this.timerHandle=window.setTimeout(()=>this.onTimer(),this.retransmitIntervalMs);}cancel(){if(this.timerHandle){clearTimeout(this.timerHandle);}this.timerHandle=undefined;}}var JmpSessionEvents;(function(JmpSessionEvents){JmpSessionEvents["ActiveSpeaker"]="active-speaker";JmpSessionEvents["MediaRequestReceived"]="media-request-received";JmpSessionEvents["MediaRequestStatusReceived"]="media-request-status-received";JmpSessionEvents["SourceAdvertisementReceived"]="source-advertisement-received";})(JmpSessionEvents||(JmpSessionEvents={}));class JmpSession extends EventEmitter$6{constructor(mediaFamily,mediaContent){var maxNumRetransmits=arguments.length>2&&arguments[2]!==undefined?arguments[2]:200;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||!areArraysEqual(this.lastSentMediaRequest.msg.requests,requests,areStreamRequestsEqual)){this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();this.lastSentMediaRequest=new RetransmitHandler(mediaRequestMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent MediaRequest...");this.sendJmpMsg(JmpMsgType.MediaRequest,mediaRequestMsg);},expiredJmpMsg=>{this.logger.warn("Retransmits for message expired: ".concat(expiredJmpMsg));});this.currMediaRequestSeqNum++;}else {this.logger.info("Duplicate MediaRequest detected and will not be sent: ".concat(mediaRequestMsg));}}sendSourceAdvertisement(numTotalSources,numLiveSources,namedMediaGroups,videoContentHint){var _a;var sourceAdvertisementMsg=new SourceAdvertisementMsg(this.currSourceAdvertisementSeqNum,numTotalSources,numLiveSources,namedMediaGroups,videoContentHint);if(!this.lastSentSourceAdvertisement||!areSourceAdvertisementMsgsEqual(this.lastSentSourceAdvertisement.msg,sourceAdvertisementMsg)){this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.cancel();this.lastSentSourceAdvertisement=new RetransmitHandler(sourceAdvertisementMsg,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent SourceAdvertisement...");this.sendJmpMsg(JmpMsgType.SourceAdvertisement,sourceAdvertisementMsg);},expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currSourceAdvertisementSeqNum++;}else {this.logger.info("Duplicate SourceAdvertisement detected and will not be sent: ",sourceAdvertisementMsg);}}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=>areStreamIdsEqual(streamId,streamState.id)));});var mediaRequestStatus=new MediaRequestStatusMsg(this.currMediaRequestStatusSeqNum,filteredStreamStates);if(!((_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg.streamStates)||!areArraysEqual(filteredStreamStates,this.lastSentMediaRequestStatus.msg.streamStates,areStreamInfosEqual)){this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();this.lastSentMediaRequestStatus=new RetransmitHandler(mediaRequestStatus,this.maxNumRetransmits,this.retransmitIntervalMs,()=>{this.logger.info("Retransmitting previously sent MediaRequestStatus...");this.sendJmpMsg(JmpMsgType.MediaRequestStatus,mediaRequestStatus);},expiredMsg=>{this.logger.warn("Retransmits for message expired: ",expiredMsg);});this.currMediaRequestStatusSeqNum++;}else {this.logger.info("Duplicate MediaRequestStatus detected and will not be sent: ",mediaRequestStatus);}}receive(jmpMsg){if(jmpMsg.mediaContent!==this.mediaContent||jmpMsg.mediaFamily!==this.mediaFamily){this.logger.error("JmpMsg ".concat(JSON.stringify(jmpMsg)," sent to incorrect JmpSession"));return;}this.logger.debug("Received JmpMsg",JSON.stringify(jmpMsg));var{payload}=jmpMsg;if(payload.msgType===JmpMsgType.MediaRequest){var mediaRequestMsg=payload.payload;if(!isValidMediaRequestMsg(mediaRequestMsg)){this.logger.error("Received invalid MediaRequest:",JSON.stringify(mediaRequestMsg));return;}this.handleIncomingMediaRequest(mediaRequestMsg);}else if(payload.msgType===JmpMsgType.MediaRequestAck){var mediaRequestAckMsg=payload.payload;if(!isValidMediaRequestAckMsg(mediaRequestAckMsg)){this.logger.error("Received invalid MediaRequest ACK:",JSON.stringify(mediaRequestAckMsg));return;}this.handleIncomingMediaRequestAck(mediaRequestAckMsg);}else if(payload.msgType===JmpMsgType.ActiveSpeakerNotification){var activeSpeakerNotification=payload.payload;if(!isValidActiveSpeakerNotificationMsg(activeSpeakerNotification)){this.logger.info("Received invalid Active Speaker Notification:",JSON.stringify(activeSpeakerNotification));return;}this.handleIncomingActiveSpeakerNotification(activeSpeakerNotification);}else if(payload.msgType===JmpMsgType.SourceAdvertisement){var sourceAdvertisement=payload.payload;if(!isValidSourceAdvertisementMsg(sourceAdvertisement)){this.logger.error("Received invalid SourceAdvertisementMsg:",JSON.stringify(sourceAdvertisement));return;}this.handleIncomingSourceAdvertisement(sourceAdvertisement);}else if(payload.msgType===JmpMsgType.SourceAdvertisementAck){var sourceAdvertisementAck=payload.payload;if(!isValidSourceAdvertisementAckMsg(sourceAdvertisementAck)){this.logger.error("Received invalid SourceAdvertisementAckMsg:",JSON.stringify(sourceAdvertisementAck));return;}this.handleIncomingSourceAdvertisementAck(sourceAdvertisementAck);}else if(payload.msgType===JmpMsgType.MediaRequestStatus){var mediaRequestStatus=payload.payload;if(!isValidMediaRequestStatusMsg(mediaRequestStatus)){this.logger.error("Received invalid MediaRequestStatusMsg:",JSON.stringify(mediaRequestStatus));return;}this.handleIncomingMediaRequestStatus(mediaRequestStatus);}else if(payload.msgType===JmpMsgType.MediaRequestStatusAck){var mediaRequestStatusAck=payload.payload;if(!isValidMediaRequestStatusAckMsg(mediaRequestStatusAck)){this.logger.error("Received invalid MediaRequestStatusAckMsg:",JSON.stringify(mediaRequestStatusAck));return;}this.handleIncomingMediaRequestStatusAck(mediaRequestStatusAck);}else {this.logger.error("Received unknown JmpMsg");}}setTxCallback(callback){this.txCallback=callback;}close(){var _a,_b,_c;this.logger.info("closing");(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.cancel();(_b=this.lastSentMediaRequestStatus)===null||_b===void 0?void 0:_b.cancel();(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}sendJmpMsg(msgType,payload){var _a;var jmpMsg=new JmpMsg(this.mediaFamily,this.mediaContent,{msgType,payload});(_a=this.txCallback)===null||_a===void 0?void 0:_a.call(this,jmpMsg);}handleIncomingMediaRequest(mediaRequestMsg){var _a;if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum<((_a=this.lastReceivedMediaRequest)===null||_a===void 0?void 0:_a.seqNum)){this.logger.info("Received old MediaRequest, ignoring");}else if(this.lastReceivedMediaRequest&&mediaRequestMsg.seqNum===this.lastReceivedMediaRequest.seqNum){if(this.lastSentMediaRequestAck){this.logger.info("Received duplicate MediaRequest, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestAck,this.lastSentMediaRequestAck);}else {this.logger.warn("Received duplicate MediaRequest, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequest, sending ACK");var mediaRequestAck=new MediaRequestAckMsg(mediaRequestMsg.seqNum);this.lastReceivedMediaRequest=mediaRequestMsg;this.lastSentMediaRequestAck=mediaRequestAck;this.sendJmpMsg(JmpMsgType.MediaRequestAck,mediaRequestAck);this.emit(JmpSessionEvents.MediaRequestReceived,mediaRequestMsg);}}handleIncomingMediaRequestAck(mediaRequestAckMsg){var _a,_b,_c;if(mediaRequestAckMsg.mediaRequestSeqNum===((_b=(_a=this.lastSentMediaRequest)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequest");(_c=this.lastSentMediaRequest)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequest");}}handleIncomingActiveSpeakerNotification(activeSpeakerNotification){this.logger.debug("Received Active Speaker Notification:",activeSpeakerNotification);this.emit(JmpSessionEvents.ActiveSpeaker,activeSpeakerNotification);}handleIncomingSourceAdvertisement(sourceAdvertisement){if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum<this.lastReceivedSourceAdvertisement.seqNum){this.logger.info("Received old SourceAdvertisement, ignoring");}else if(this.lastReceivedSourceAdvertisement&&sourceAdvertisement.seqNum===this.lastReceivedSourceAdvertisement.seqNum){if(this.lastSentSourceAdvertisementAck){this.logger.info("Received duplicate SourceAdvertisement, re-sending ACK");this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,this.lastSentSourceAdvertisementAck);}else {this.logger.warn("Received duplicate SourceAdvertisement, but there was no ACK previously sent");}}else {this.logger.info("Received new SourceAdvertisement, sending ACK");var sourceAdvertisementAck=new SourceAdvertisementAckMsg(sourceAdvertisement.seqNum);this.lastReceivedSourceAdvertisement=sourceAdvertisement;this.lastSentSourceAdvertisementAck=sourceAdvertisementAck;this.sendJmpMsg(JmpMsgType.SourceAdvertisementAck,sourceAdvertisementAck);this.emit(JmpSessionEvents.SourceAdvertisementReceived,sourceAdvertisement);}}handleIncomingSourceAdvertisementAck(sourceAdvertisementAck){var _a,_b,_c;if(sourceAdvertisementAck.sourceAdvertisementSeqNum===((_b=(_a=this.lastSentSourceAdvertisement)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent SourceAdvertisement");(_c=this.lastSentSourceAdvertisement)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old SourceAdvertisement");}}handleIncomingMediaRequestStatus(mediaRequestStatus){if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum<this.lastReceivedMediaRequestStatus.seqNum){this.logger.info("Received old MediaRequestStatus, ignoring");}else if(this.lastReceivedMediaRequestStatus&&mediaRequestStatus.seqNum===this.lastReceivedMediaRequestStatus.seqNum){if(this.lastSentMediaRequestStatusAck){this.logger.info("Received duplicate MediaRequestStatus, re-sending ACK");this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,this.lastSentMediaRequestStatusAck);}else {this.logger.warn("Received duplicate MediaRequestStatus, but there was no ACK previously sent");}}else {this.logger.info("Received new MediaRequestStatus, sending ACK");var mediaRequestStatusAck=new MediaRequestStatusAckMsg(mediaRequestStatus.seqNum);this.lastReceivedMediaRequestStatus=mediaRequestStatus;this.lastSentMediaRequestStatusAck=mediaRequestStatusAck;this.sendJmpMsg(JmpMsgType.MediaRequestStatusAck,mediaRequestStatusAck);this.emit(JmpSessionEvents.MediaRequestStatusReceived,mediaRequestStatus);}}handleIncomingMediaRequestStatusAck(mediaRequestStatusAck){var _a,_b,_c;if(mediaRequestStatusAck.mediaRequestStatusSeqNum===((_b=(_a=this.lastSentMediaRequestStatus)===null||_a===void 0?void 0:_a.msg)===null||_b===void 0?void 0:_b.seqNum)){this.logger.info("Received ACK for last sent MediaRequestStatus");(_c=this.lastSentMediaRequestStatus)===null||_c===void 0?void 0:_c.cancel();}else {this.logger.info("Received ACK for old MediaRequestStatus");}}}exports.WcmeErrorType = void 0;(function(WcmeErrorType){WcmeErrorType["CREATE_OFFER_FAILED"]="CREATE_OFFER_FAILED";WcmeErrorType["SET_ANSWER_FAILED"]="SET_ANSWER_FAILED";WcmeErrorType["OFFER_ANSWER_MISMATCH"]="OFFER_ANSWER_MISMATCH";WcmeErrorType["SDP_MUNGE_FAILED"]="SDP_MUNGE_FAILED";WcmeErrorType["SDP_MUNGE_MISSING_CODECS"]="SDP_MUNGE_MISSING_CODECS";WcmeErrorType["INVALID_STREAM_REQUEST"]="INVALID_STREAM_REQUEST";WcmeErrorType["GET_TRANSCEIVER_FAILED"]="GET_TRANSCEIVER_FAILED";WcmeErrorType["GET_MAX_BITRATE_FAILED"]="GET_MAX_BITRATE_FAILED";WcmeErrorType["GET_PAYLOAD_TYPE_FAILED"]="GET_PAYLOAD_TYPE_FAILED";WcmeErrorType["SET_NMG_FAILED"]="SET_NMG_FAILED";WcmeErrorType["DATA_CHANNEL_SEND_FAILED"]="DATA_CHANNEL_SEND_FAILED";WcmeErrorType["RENEW_PEER_CONNECTION_FAILED"]="RENEW_PEER_CONNECTION_FAILED";})(exports.WcmeErrorType||(exports.WcmeErrorType={}));class WcmeError{constructor(type){var message=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';this.type=type;this.message=message;}}var commonjsGlobal$1=typeof globalThis!=='undefined'?globalThis:typeof window!=='undefined'?window:typeof global$1!=='undefined'?global$1:typeof self!=='undefined'?self:{};var logger$1={exports:{}};/*!
3460
3460
  * js-logger - http://github.com/jonnyreeves/js-logger
3461
3461
  * Jonny Reeves, http://jonnyreeves.co.uk/
3462
3462
  * js-logger may be freely distributed under the MIT license.
@@ -5608,7 +5608,7 @@ var{hasOwnProperty}=Object.prototype;for(var i=0;i<mapResults.length;i++){if(map
5608
5608
  * // arg1 now equals 'three'
5609
5609
  * callback(null, 'done');
5610
5610
  * }
5611
- */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType["LocalOnly"]=0]="LocalOnly";OfferAnswerType[OfferAnswerType["Remote"]=1]="Remote";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(config){super(config);this.rtxEnabled=false;this.dtxDisabled=true;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.sourceStateOverrideChange=new TypedEvent();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.munger=config.munger;this.csi=config.csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d,_e;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;stats.trackLabel=(_e=this.publishedStream)===null||_e===void 0?void 0:_e.label;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===exports.MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{injectDummyCandidates:true};this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi,mungeOptions);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription,{dtxDisabled:this.dtxDisabled});}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===exports.MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}setSourceStateOverride(state){this.sourceStateOverride=state;this.sourceStateOverrideChange.emit();}get currentSourceState(){if(this.sourceStateOverride){return this.sourceStateOverride;}if(!this.publishedStream){return 'no source';}if(this.publishedStream.muted){return 'avatar';}return 'live';}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}setSourceStateOverride(state){this.sendTransceiver.setSourceStateOverride(state);}clearSourceStateOverride(){this.sendTransceiver.setSourceStateOverride(undefined);}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref7=>{var[mediaType,transceiver]=_ref7;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(mediaType===exports.MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref8=>{var[mediaType,transceivers]=_ref8;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b;var item={report:yield t.getStats(),csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_b=t.receiveSlot.stream.getTracks()[0])===null||_b===void 0?void 0:_b.label};if(mediaType===exports.MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";MultistreamConnectionEventNames["IceCandidate"]="icecandidate";MultistreamConnectionEventNames["IceCandidateError"]="icecandidateerror";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,iceTransportPolicy:'all',disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox(),stopIceGatheringAfterFirstRelayCandidate:false,disableAudioMainDtx:true,metricsCallback:()=>{}};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.iceCandidates=[];this.metadata={isMediaBypassEdge:false};this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.metricsCallback=this.options.metricsCallback;this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Slides);this.createSendTransceiver(exports.MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioMain,mainSceneId);this.createSendTransceiver(exports.MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){var _a;(_a=this.pc)===null||_a===void 0?void 0:_a.close();this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy,iceTransportPolicy:this.options.iceTransportPolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{if(candidate.candidate){this.iceCandidates.push(candidate.candidate);}this.emit(MultistreamConnectionEventNames.IceCandidate,candidate);});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===exports.MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcRtpTransceiver;try{rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger();var transceiver=new SendOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger,csi});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.dtxDisabled=mediaType!==exports.MediaType.AudioMain||this.options.disableAudioMainDtx;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});transceiver.sourceStateOverrideChange.on(()=>{this.sendMediaRequestStatus(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(jmpMessage=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error("DataChannel not created or not connected. Unable to send JMP message.");return;}var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMessage);var serializedHomerMsg=JSON.stringify(homerMsg);try{logger.info("Sending JMP message: ".concat(serializedHomerMsg));this.dataChannel.send(serializedHomerMsg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(serializedHomerMsg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===exports.MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{if(!isValidSsrcStreamId(s.id)){logger.error("Received MediaRequestStatus with non-SSRC based stream ID, which is currently not supported: ".concat(JSON.stringify(s.id)));return;}var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}if(!receiveSlot._isRequested){logger.info("MediaRequestStatus ignored due to transceiver's receive slot unrequested: ".concat(JSON.stringify(s.id)," csi ").concat(s.csi));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref9=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref9;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];if(!isValidSsrcStreamId(id)){logger.warn("".concat(mediaType,": The stream ID is not a valid SsrcStreamId: ").concat(JSON.stringify(id)));return;}var streamIdsMatched=sendTransceiver.senderIds.some(validId=>areStreamIdsEqual(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===exports.MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error("Error parsing datachannel JSON: ".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error("Received invalid JMP msg: ".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===exports.MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===exports.MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.senderIds.map(id=>({id,state:sendTransceiver.currentSourceState,csi:sendTransceiver.csi}));}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var mid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){recvOnlyTransceiver.setCodecParameters({'sps-pps-idr-in-keyframe':'1'});recvOnlyTransceiver.setRtxCodecParameters({'rtx-time':mediaType===exports.MediaType.VideoMain?defaultVideoMainRtxTime:defaultVideoSlidesRtxTime});}recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Sender codecs or receiver codecs is undefined or empty.");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{if(candidate.candidate===null||this.options.stopIceGatheringAfterFirstRelayCandidate&&candidate.candidate.type==='relay'){resolve();}});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);var shouldInjectDummyCandidates=()=>{if(!this.options.doFullIce){return true;}return !hasIceCandidates(parsedOffer);};var mungeOptions={injectDummyCandidates:shouldInjectDummyCandidates()};parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av,mungeOptions);});if(mungeOptions.injectDummyCandidates){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){parsedOffer.media.forEach(media=>{media.iceInfo.candidates=[];this.iceCandidates.forEach(iceCandidate=>{var candidateLine=CandidateLine$1.fromSdpLine(iceCandidate.candidate.toString());if(candidateLine){media.addLine(candidateLine);}});});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a,_b;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}if((_b=parsedAnswer.session.information)===null||_b===void 0?void 0:_b.info){this.metadata.isMediaBypassEdge=!parsedAnswer.session.information.info.includes('linus');}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver with MID ".concat(mid,"."));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find recv transceiver with MID ".concat(mid,"."));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>areStreamIdsEqual(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){if(userOptions){this.options=Object.assign(Object.assign({},this.options),userOptions);}logger.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===exports.MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===exports.MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){stats.forEach(stat=>{if(stat.type==='peer-connection'){stat.isMediaBypassEdge=this.metadata.isMediaBypassEdge;}});yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(exports.MediaType.AudioMain),audioSlides:this.getCsiByMediaType(exports.MediaType.AudioSlides),videoMain:this.getCsiByMediaType(exports.MediaType.VideoMain),videoSlides:this.getCsiByMediaType(exports.MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
5611
+ */function waterfall(tasks,callback){callback=once(callback);if(!Array.isArray(tasks))return callback(new Error('First argument to waterfall must be an array of functions'));if(!tasks.length)return callback();var taskIndex=0;function nextTask(args){var task=wrapAsync(tasks[taskIndex++]);task(...args,onlyOnce(next));}function next(err){if(err===false)return;for(var _len22=arguments.length,args=new Array(_len22>1?_len22-1:0),_key22=1;_key22<_len22;_key22++){args[_key22-1]=arguments[_key22];}if(err||taskIndex===tasks.length){return callback(err,...args);}nextTask(args);}nextTask([]);}awaitify(waterfall);function processTasks(task,finishedCallback){return __awaiter$1(this,void 0,void 0,function*(){try{yield task();finishedCallback();}catch(e){finishedCallback(e);}});}class AsyncQueue{constructor(){this.queue=queue$1(processTasks,1);}push(task){return this.queue.pushAsync(task);}empty(){return this.queue.empty();}}var NOISE_REDUCTION_KIND='noise-reduction-effect';var VIRTUAL_BACKGROUND_KIND='virtual-background-effect';var isNoiseReductionEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===NOISE_REDUCTION_KIND;};var isVirtualBackgroundEffect=effect=>{return (effect===null||effect===void 0?void 0:effect.kind)===VIRTUAL_BACKGROUND_KIND;};var OfferAnswerType;(function(OfferAnswerType){OfferAnswerType[OfferAnswerType["LocalOnly"]=0]="LocalOnly";OfferAnswerType[OfferAnswerType["Remote"]=1]="Remote";})(OfferAnswerType||(OfferAnswerType={}));class SendOnlyTransceiver extends Transceiver{constructor(config){super(config);this.rtxEnabled=false;this.dtxDisabled=true;this.streamMuteStateChange=new TypedEvent();this.streamPublishStateChange=new TypedEvent();this.negotiationNeeded=new TypedEvent();this.namedMediaGroupsChange=new TypedEvent();this.requestedIdEncodingParamsMap=new Map();this.updateSendParametersQueue=new AsyncQueue();this.sourceStateOverrideChange=new TypedEvent();this.metadata={lastRequestedUpdateTimestampsMap:new Map()};this.munger=config.munger;this.csi=config.csi;this.direction='sendrecv';this.handleTrackChange=this.handleTrackChange.bind(this);this.handleStreamConstraintsChange=this.handleStreamConstraintsChange.bind(this);this.handleStreamMuteStateChange=this.handleStreamMuteStateChange.bind(this);}replaceSenderSource(stream){var _a,_b;return __awaiter$1(this,void 0,void 0,function*(){var trackOrNull=(_a=stream===null||stream===void 0?void 0:stream.outputStream.getTracks()[0])!==null&&_a!==void 0?_a:null;if(((_b=this.sender.track)===null||_b===void 0?void 0:_b.id)!==(trackOrNull===null||trackOrNull===void 0?void 0:trackOrNull.id)){yield this.sender.replaceTrack(trackOrNull);if(trackOrNull){logger.log("Sender source for ".concat(this.mediaType," replaced with track ID ").concat(trackOrNull.id));}else {logger.log("Sender source for ".concat(this.mediaType," set to null, sender stopped"));}}});}handleTrackChange(){return __awaiter$1(this,void 0,void 0,function*(){if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}handleStreamConstraintsChange(){return __awaiter$1(this,void 0,void 0,function*(){yield this.updateSendParameters(this.requestedIdEncodingParamsMap);});}handleStreamMuteStateChange(){this.streamMuteStateChange.emit();}get requested(){return this.requestedIdEncodingParamsMap.size>0;}replaceTransceiver(newRtcRtpTransceiver){var _super=Object.create(null,{replaceTransceiver:{get:()=>super.replaceTransceiver}});return __awaiter$1(this,void 0,void 0,function*(){_super.replaceTransceiver.call(this,newRtcRtpTransceiver);newRtcRtpTransceiver.direction=this.direction;if(this.requested){yield this.replaceSenderSource(this.publishedStream);}});}replacePublishedStream(newStream){return __awaiter$1(this,void 0,void 0,function*(){var oldStream=this.publishedStream;oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);oldStream===null||oldStream===void 0?void 0:oldStream.off(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(this.requested){yield this.replaceSenderSource(newStream);}this.publishedStream=newStream;newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.OutputTrackChange,this.handleTrackChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.ConstraintsChange,this.handleStreamConstraintsChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.UserMuteStateChange,this.handleStreamMuteStateChange);newStream===null||newStream===void 0?void 0:newStream.on(exports.LocalStreamEventNames.SystemMuteStateChange,this.handleStreamMuteStateChange);if(!oldStream&&newStream&&!newStream.muted||oldStream&&!newStream&&!oldStream.muted){this.streamPublishStateChange.emit();}else if((oldStream===null||oldStream===void 0?void 0:oldStream.muted)!==(newStream===null||newStream===void 0?void 0:newStream.muted)){this.streamMuteStateChange.emit();}});}setNamedMediaGroups(namedMediaGroups){if(this.mediaType!==exports.MediaType.AudioMain){logErrorAndThrow(exports.WcmeErrorType.SET_NMG_FAILED,"Named media groups can only be set for audio.");}this.namedMediaGroups=namedMediaGroups;this.namedMediaGroupsChange.emit();}publishStream(stream){return this.replacePublishedStream(stream);}unpublishStream(){return this.replacePublishedStream();}get active(){return this._rtcRtpTransceiver.direction==='sendrecv';}set active(enabled){this.direction=enabled?'sendrecv':'inactive';this._rtcRtpTransceiver.direction=this.direction;if(this._rtcRtpTransceiver.direction!==this._rtcRtpTransceiver.currentDirection){this.negotiationNeeded.emit(OfferAnswerType.Remote);}}getStats(){return __awaiter$1(this,void 0,void 0,function*(){var statsMap=new Map();var statsReport=yield this.sender.getStats();statsReport.forEach((stats,key)=>{var _a,_b,_c,_d,_e;if(stats.type==='outbound-rtp'){stats.mid=this.mid;stats.csi=this.csi;stats.calliopeMediaType=this.mediaType;var senderId=this.munger.getSenderIds().find(id=>id.ssrc===stats.ssrc);if(senderId){var encodingIndex=this.getEncodingIndexForStreamId(senderId);var encodingParams=this.requestedIdEncodingParamsMap.get(encodingIndex);stats.requestedBitrate=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxPayloadBitsPerSecond;stats.requestedFrameSize=encodingParams===null||encodingParams===void 0?void 0:encodingParams.maxFs;stats.isRequested=!!encodingParams;stats.lastRequestedUpdateTimestamp=this.metadata.lastRequestedUpdateTimestampsMap.get(encodingIndex);}var effect=(_b=(_a=this.publishedStream)===null||_a===void 0?void 0:_a.getEffects())===null||_b===void 0?void 0:_b[0];if(effect===null||effect===void 0?void 0:effect.isEnabled){if(isNoiseReductionEffect(effect)){stats.effect={kind:effect.kind,noiseReductionMode:'LOW_POWER'};}else if(isVirtualBackgroundEffect(effect)){stats.effect={kind:effect.kind,virtualBackgroundMode:(_c=effect.options)===null||_c===void 0?void 0:_c.mode};}else {stats.effect={kind:effect.kind};}}var trackSettings=(_d=this.publishedStream)===null||_d===void 0?void 0:_d.getSettings();if(trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate){stats.targetFrameRate=trackSettings===null||trackSettings===void 0?void 0:trackSettings.frameRate;}}else if(stats.type==='media-source'){stats.calliopeMediaType=this.mediaType;stats.trackLabel=(_e=this.publishedStream)===null||_e===void 0?void 0:_e.label;}statsMap.set(key,stats);});return statsMap;});}updateSendParameters(requestedIdEncodingParamsMap){return __awaiter$1(this,void 0,void 0,function*(){return this.updateSendParametersQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var sendParameters=this.sender.getParameters();sendParameters.encodings.forEach((encoding,index)=>{var _a,_b;var encodingParams=requestedIdEncodingParamsMap.get(index);encoding.active=!!encodingParams;if(encodingParams){var{maxPayloadBitsPerSecond,maxFs,maxWidth,maxHeight}=encodingParams;var scaleDownRatio=getScaleDownRatio((_a=this.publishedStream)===null||_a===void 0?void 0:_a.getSettings().width,(_b=this.publishedStream)===null||_b===void 0?void 0:_b.getSettings().height,maxFs,maxWidth,maxHeight);if(maxPayloadBitsPerSecond!==undefined&&maxPayloadBitsPerSecond>=0){encoding.maxBitrate=maxPayloadBitsPerSecond;}if(scaleDownRatio!==undefined&&scaleDownRatio>=1.0){encoding.scaleResolutionDownBy=scaleDownRatio;}}});yield this.sender.setParameters(sendParameters);logger.log("Sender parameters for ".concat(this.mediaType," set to ").concat(JSON.stringify(sendParameters)));var timestamp=getCurrentTimestamp();requestedIdEncodingParamsMap.forEach((_,index)=>{if(!this.requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});this.requestedIdEncodingParamsMap.forEach((_,index)=>{if(!requestedIdEncodingParamsMap.has(index)){this.metadata.lastRequestedUpdateTimestampsMap.set(index,timestamp);}});var oldRequested=this.requested;var newRequested=requestedIdEncodingParamsMap.size>0;this.requestedIdEncodingParamsMap=requestedIdEncodingParamsMap;if(oldRequested!==newRequested){yield this.replaceSenderSource(newRequested?this.publishedStream:null);}}));});}isSimulcastEnabled(){var params=this.sender.getParameters();return params.encodings.length>1;}mungeLocalDescription(mediaDescription){this.munger.mungeLocalDescription(mediaDescription,{simulcastEnabled:this.isSimulcastEnabled(),rtxEnabled:this.rtxEnabled,twccDisabled:this.twccDisabled,forceSoftwareEncoder:this.mediaType===exports.MediaType.VideoSlides&&(BrowserInfo.isWindows()||BrowserInfo.isMac())&&(BrowserInfo.isChrome()||BrowserInfo.isEdge())});}mungeLocalDescriptionForRemoteServer(mediaDescription){var mungeOptions=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{injectDummyCandidates:true};this.munger.mungeLocalDescriptionForRemoteServer(mediaDescription,getMediaContent(this.mediaType),this.csi,mungeOptions);}mungeRemoteDescription(mediaDescription){this.munger.mungeRemoteDescription(mediaDescription,{dtxDisabled:this.dtxDisabled});}get senderIds(){return this.munger.getSenderIds();}get numActiveSimulcastLayers(){var _a;if(getMediaFamily(this.mediaType)===exports.MediaFamily.Video){return (_a=this.publishedStream)===null||_a===void 0?void 0:_a.getNumActiveSimulcastLayers();}return this.publishedStream?0:undefined;}getEncodingIndexForStreamId(id){return this.munger.getEncodingIndexForStreamId(id);}resetSdpMunger(){this.munger.reset();}setCodecParameters(parameters){this.munger.setCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}deleteCodecParameters(parameters){this.munger.deleteCodecParameters(parameters);this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);}setSourceStateOverride(state){this.sourceStateOverride=state;this.sourceStateOverrideChange.emit();}get currentSourceState(){if(this.sourceStateOverride){return this.sourceStateOverride;}if(!this.publishedStream){return 'no source';}if(this.publishedStream.muted){return 'avatar';}return 'live';}}class SendSlot{constructor(sendTransceiver){this.sendTransceiver=sendTransceiver;}publishStream(stream){return __awaiter$1(this,void 0,void 0,function*(){if(stream===this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.publishStream(stream);});}unpublishStream(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.sendTransceiver.publishedStream){return Promise.resolve();}return this.sendTransceiver.unpublishStream();});}setNamedMediaGroups(namedMediaGroups){this.sendTransceiver.setNamedMediaGroups(namedMediaGroups);}clearNamedMediaGroups(){this.setNamedMediaGroups([]);}get active(){return this.sendTransceiver.active;}set active(active){this.sendTransceiver.active=active;}setCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.setCodecParameters(parameters);});}deleteCodecParameters(parameters){return __awaiter$1(this,void 0,void 0,function*(){this.sendTransceiver.deleteCodecParameters(parameters);});}setSourceStateOverride(state){this.sendTransceiver.setSourceStateOverride(state);}clearSourceStateOverride(){this.sendTransceiver.setSourceStateOverride(undefined);}}var organizeTransceiverStats=(sendTransceivers,recvTransceivers,peerConnectionStats)=>__awaiter$1(void 0,void 0,void 0,function*(){var result={audio:{senders:[],receivers:[]},video:{senders:[],receivers:[]},screenShareAudio:{senders:[],receivers:[]},screenShareVideo:{senders:[],receivers:[]}};yield Promise.all([...sendTransceivers.entries()].map(_ref7=>{var[mediaType,transceiver]=_ref7;return __awaiter$1(void 0,void 0,void 0,function*(){var _a;var item={report:yield transceiver.getStats(),mid:transceiver.mid,csi:transceiver.csi,currentDirection:'sendonly',localTrackLabel:(_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.label};if(peerConnectionStats&&peerConnectionStats.id){item.report.set(peerConnectionStats.id,peerConnectionStats);}if(mediaType===exports.MediaType.AudioMain){result.audio.senders.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.senders.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.senders.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.senders.push(item);}});}));yield Promise.all([...recvTransceivers.entries()].map(_ref8=>{var[mediaType,transceivers]=_ref8;return __awaiter$1(void 0,void 0,void 0,function*(){return Promise.all(transceivers.map(t=>__awaiter$1(void 0,void 0,void 0,function*(){var _b;var item={report:yield t.getStats(),csi:t.receiveSlot.currentRxCsi,currentDirection:'recvonly',localTrackLabel:(_b=t.receiveSlot.stream.getTracks()[0])===null||_b===void 0?void 0:_b.label};if(peerConnectionStats&&peerConnectionStats.id){item.report.set(peerConnectionStats.id,peerConnectionStats);}if(mediaType===exports.MediaType.AudioMain){result.audio.receivers.push(item);}if(mediaType===exports.MediaType.VideoMain){result.video.receivers.push(item);}if(mediaType===exports.MediaType.AudioSlides){result.screenShareAudio.receivers.push(item);}if(mediaType===exports.MediaType.VideoSlides){result.screenShareVideo.receivers.push(item);}})));});}));return result;});function toMediaStreamTrackKind(mediaType){return [exports.MediaType.VideoMain,exports.MediaType.VideoSlides].includes(mediaType)?exports.MediaStreamTrackKind.Video:exports.MediaStreamTrackKind.Audio;}function webRtcVideoContentHintToJmpVideoContentHint(hint){if(hint==='motion'){return 'motion';}if(hint==='detail'){return 'sharpness';}return undefined;}var MultistreamConnectionEventNames;(function(MultistreamConnectionEventNames){MultistreamConnectionEventNames["VideoSourceCountUpdate"]="video-source-count-update";MultistreamConnectionEventNames["AudioSourceCountUpdate"]="audio-source-count-update";MultistreamConnectionEventNames["ActiveSpeakerNotification"]="active-speaker-notification";MultistreamConnectionEventNames["PeerConnectionStateUpdate"]="peer-connection-state-update";MultistreamConnectionEventNames["IceConnectionStateUpdate"]="ice-connection-state-update";MultistreamConnectionEventNames["IceGatheringStateUpdate"]="ice-gathering-state-update";MultistreamConnectionEventNames["NegotiationNeeded"]="negotiation-needed";MultistreamConnectionEventNames["CreateOfferOnSuccess"]="createofferonsuccess";MultistreamConnectionEventNames["CreateAnswerOnSuccess"]="createansweronsuccess";MultistreamConnectionEventNames["SetLocalDescriptionOnSuccess"]="setlocaldescriptiononsuccess";MultistreamConnectionEventNames["SetRemoteDescriptionOnSuccess"]="setremotedescriptiononsuccess";MultistreamConnectionEventNames["IceCandidate"]="icecandidate";MultistreamConnectionEventNames["IceCandidateError"]="icecandidateerror";})(MultistreamConnectionEventNames||(MultistreamConnectionEventNames={}));var defaultMultistreamConnectionOptions={disableSimulcast:BrowserInfo.isFirefox(),bundlePolicy:'max-compat',iceServers:undefined,iceTransportPolicy:'all',disableContentSimulcast:true,disableAudioTwcc:true,doFullIce:BrowserInfo.isFirefox(),stopIceGatheringAfterFirstRelayCandidate:false,disableAudioMainDtx:true,metricsCallback:()=>{}};class MultistreamConnection extends EventEmitter$2{constructor(){var userOptions=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};super();this.sendTransceivers=new Map();this.recvTransceivers=new Map();this.jmpSessions=new Map();this.pendingJmpTasks=[];this.overuseUpdateCallback=()=>{};this.midPredictor=new MidPredictor();this.offerAnswerQueue=new AsyncQueue();this.currentCreateOfferId=0;this.iceCandidates=[];this.metadata={isMediaBypassEdge:false};this.options=Object.assign(Object.assign({},defaultMultistreamConnectionOptions),userOptions);logger.info("Creating multistream connection with options ".concat(JSON.stringify(this.options)));this.metricsCallback=this.options.metricsCallback;this.initializePeerConnection();this.overuseStateManager=new OveruseStateManager(overuseState=>this.overuseUpdateCallback(overuseState));this.overuseStateManager.start();this.statsManager=new StatsManager(()=>this.pc.getStats(),stats=>this.preProcessStats(stats));var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();var videoMainEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Main);var videoSlidesEncodingOptions=this.getVideoEncodingOptions(exports.MediaContent.Slides);this.createSendTransceiver(exports.MediaType.VideoMain,mainSceneId,videoMainEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioMain,mainSceneId);this.createSendTransceiver(exports.MediaType.VideoSlides,slidesSceneId,videoSlidesEncodingOptions);this.createSendTransceiver(exports.MediaType.AudioSlides,slidesSceneId);}initializePeerConnection(){this.pc=new PeerConnection({iceServers:this.options.iceServers,bundlePolicy:this.options.bundlePolicy,iceTransportPolicy:this.options.iceTransportPolicy});this.propagatePeerConnectionEvents();this.attachMetricsObserver();this.createDataChannel();}propagatePeerConnectionEvents(){this.pc.on(PeerConnection.Events.PeerConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.PeerConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.IceConnectionStateChange,state=>{this.emit(MultistreamConnectionEventNames.IceConnectionStateUpdate,state);});this.pc.on(PeerConnection.Events.CreateOfferOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateOfferOnSuccess,description);});this.pc.on(PeerConnection.Events.CreateAnswerOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.CreateAnswerOnSuccess,description);});this.pc.on(PeerConnection.Events.SetLocalDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetLocalDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.SetRemoteDescriptionOnSuccess,description=>{this.emit(MultistreamConnectionEventNames.SetRemoteDescriptionOnSuccess,description);});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{this.emit(MultistreamConnectionEventNames.IceGatheringStateUpdate,this.getIceGatheringState());});this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{if(candidate.candidate){this.iceCandidates.push(candidate.candidate);}this.emit(MultistreamConnectionEventNames.IceCandidate,candidate);});this.pc.on(PeerConnection.Events.IceCandidateError,error=>{this.emit(MultistreamConnectionEventNames.IceCandidateError,error);});}getConnectionState(){return this.pc.getConnectionState();}getPeerConnectionState(){return this.pc.getPeerConnectionState();}getIceConnectionState(){return this.pc.getIceConnectionState();}getCurrentConnectionType(){return this.pc.getCurrentConnectionType();}getIceGatheringState(){return this.pc.iceGatheringState;}getVideoEncodingOptions(content){var enabledSimulcast=content===exports.MediaContent.Main?!this.options.disableSimulcast:!this.options.disableContentSimulcast;return enabledSimulcast?[{scaleResolutionDownBy:4,active:false},{scaleResolutionDownBy:2,active:false},{active:false}]:[{active:false}];}createSendTransceiver(mediaType,sceneId,sendEncodingsOptions){var rtcRtpTransceiver;try{rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:sendEncodingsOptions});}catch(e){logger.error("addTransceiver failed due to : ".concat(e));throw e;}var mid=this.midPredictor.getNextMid(mediaType);var csi=generateCsi(getMediaFamily(mediaType),sceneId);var munger=new EgressSdpMunger();var transceiver=new SendOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger,csi});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){transceiver.rtxEnabled=true;transceiver.setCodecParameters({'max-mbps':"".concat(defaultMaxVideoEncodeMbps),'max-fs':"".concat(defaultMaxVideoEncodeFrameSize)});}transceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;transceiver.dtxDisabled=mediaType!==exports.MediaType.AudioMain||this.options.disableAudioMainDtx;transceiver.active=false;transceiver.streamMuteStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.streamPublishStateChange.on(()=>{this.sendSourceAdvertisement(mediaType);this.sendMediaRequestStatus(mediaType);});transceiver.negotiationNeeded.on(offerAnswerType=>{if(offerAnswerType===OfferAnswerType.Remote){this.emit(MultistreamConnectionEventNames.NegotiationNeeded);}else if(this.pc.getRemoteDescription()){this.queueLocalOfferAnswer();}});transceiver.namedMediaGroupsChange.on(()=>{this.sendSourceAdvertisement(mediaType);});transceiver.sourceStateOverrideChange.on(()=>{this.sendMediaRequestStatus(mediaType);});this.sendTransceivers.set(mediaType,transceiver);this.createJmpSession(mediaType);}createSendSlot(mediaType){var active=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var transceiver=this.getSendTransceiverOrThrow(mediaType);transceiver.active=active;return new SendSlot(transceiver);}createJmpSession(mediaType){var jmpSession=new JmpSession(getMediaFamily(mediaType),getMediaContent(mediaType));jmpSession.setTxCallback(jmpMessage=>{var _a;if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)!=='open'){logger.error("DataChannel not created or not connected. Unable to send JMP message.");return;}var homerMsg=new HomerMsg(HomerMsgType.Multistream,jmpMessage);var serializedHomerMsg=JSON.stringify(homerMsg);try{logger.info("Sending JMP message: ".concat(serializedHomerMsg));this.dataChannel.send(serializedHomerMsg);}catch(err){var{bufferedAmount,readyState}=this.dataChannel;var{sctp}=this.pc.getUnderlyingRTCPeerConnection();var{maxMessageSize,state}=sctp||{};logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED,"Sending JMP message failed with error: ".concat(err,",\nMessage size: ").concat(serializedHomerMsg.length,",\nData Channel State: ").concat(readyState,",\nData Channel Buffered amount: ").concat(bufferedAmount,",\nSCTP State: ").concat(state,",\nSCTP Max Message Size: ").concat(maxMessageSize));}});var prevNumTotalSources=0;var prevNumLiveSources=0;jmpSession.on(JmpSessionEvents.SourceAdvertisementReceived,data=>{logger.log("SourceAdvertisement received: ".concat(JSON.stringify(data)));if(data.numTotalSources!==prevNumTotalSources||data.numLiveSources!==prevNumLiveSources){prevNumTotalSources=data.numTotalSources;prevNumLiveSources=data.numLiveSources;var eventName=getMediaFamily(mediaType)===exports.MediaFamily.Video?MultistreamConnectionEventNames.VideoSourceCountUpdate:MultistreamConnectionEventNames.AudioSourceCountUpdate;this.emit(eventName,data.numTotalSources,data.numLiveSources,getMediaContent(mediaType));}else {logger.log('Number of sources was unchanged, ignoring message');}});jmpSession.on(JmpSessionEvents.MediaRequestStatusReceived,data=>{logger.log("MediaRequestStatus received: ".concat(JSON.stringify(data)));data.streamStates.forEach(s=>{if(!isValidSsrcStreamId(s.id)){logger.error("Received MediaRequestStatus with non-SSRC based stream ID, which is currently not supported: ".concat(JSON.stringify(s.id)));return;}var receiveSlot=this.getReceiveSlotById(s.id);if(!receiveSlot){logger.warn("Got MediaRequestStatus for unknown receive slot: ".concat(JSON.stringify(s.id)));return;}if(!receiveSlot._isRequested){logger.info("MediaRequestStatus ignored due to transceiver's receive slot unrequested: ".concat(JSON.stringify(s.id)," csi ").concat(s.csi));return;}receiveSlot._updateSource(s.state,s.csi);});});jmpSession.on(JmpSessionEvents.MediaRequestReceived,data=>{logger.log("MediaRequest received: ".concat(JSON.stringify(data)));this.updateRequestedStreams(mediaType,data.requests).then(()=>{if(getMediaFamily(mediaType)===exports.MediaFamily.Video){this.sendMediaRequestStatus(mediaType);}});});jmpSession.on(JmpSessionEvents.ActiveSpeaker,data=>{this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification,data.csis);this.recvTransceivers.forEach(transceivers=>{transceivers.forEach(t=>{var{currentRxCsi}=t.receiveSlot;if(currentRxCsi!==undefined){var isActiveSpeaker=data.csis.some(activeCsi=>(activeCsi&0xfffffffe)===(currentRxCsi&0xfffffffe));t.handleActiveSpeakerUpdate(isActiveSpeaker);}});});});this.jmpSessions.set(mediaType,jmpSession);}updateRequestedStreams(mediaType,requests){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);var mediaFamily=getMediaFamily(mediaType);var requestedIdEncodingParamsMap=new Map();var rsRequests=requests.filter(r=>isValidReceiverSelectedInfo(r.policySpecificInfo));if(rsRequests.length!==requests.length){logger.warn('Ignoring non-receiver-selected requests');}rsRequests.forEach(_ref9=>{var{ids,policySpecificInfo,codecInfos,maxPayloadBitsPerSecond}=_ref9;var _a,_b,_c;if(ids.length>1){logErrorAndThrow(exports.WcmeErrorType.INVALID_STREAM_REQUEST,"Stream request cannot have more than one ID.");}if(ids.length===0){return;}if(sendTransceiver.csi!==policySpecificInfo.csi){logger.warn('csi in the StreamRequest does not match');return;}var id=ids[0];var codecInfo=codecInfos[0];if(!isValidSsrcStreamId(id)){logger.warn("".concat(mediaType,": The stream ID is not a valid SsrcStreamId: ").concat(JSON.stringify(id)));return;}var streamIdsMatched=sendTransceiver.senderIds.some(validId=>areStreamIdsEqual(id,validId));if(streamIdsMatched){var encodingIndex=sendTransceiver.getEncodingIndexForStreamId(id);if(encodingIndex!==-1){var encodingParams={maxPayloadBitsPerSecond};if(mediaFamily===exports.MediaFamily.Video){encodingParams.maxFs=(_a=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_a===void 0?void 0:_a.maxFs;encodingParams.maxWidth=(_b=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_b===void 0?void 0:_b.maxWidth;encodingParams.maxHeight=(_c=codecInfo===null||codecInfo===void 0?void 0:codecInfo.h264)===null||_c===void 0?void 0:_c.maxHeight;}requestedIdEncodingParamsMap.set(encodingIndex,encodingParams);}else {logger.warn("".concat(mediaType,": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));}}else {logger.warn("".concat(mediaType,": Unable to find matching stream ID for requested ID: ").concat(JSON.stringify(id)));}});return sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);}createDataChannel(){var dataChannel=this.pc.createDataChannel('datachannel',{ordered:false,maxRetransmits:0});dataChannel.onopen=event=>{logger.info('DataChannel opened:',JSON.stringify(event));[...this.sendTransceivers.keys()].forEach(mediaType=>{this.sendSourceAdvertisement(mediaType);});logger.info("Flushing pending JMP task queue");this.pendingJmpTasks.forEach(t=>t());this.pendingJmpTasks=[];};dataChannel.onmessage=e=>{var parsed;try{parsed=JSON.parse(e.data);}catch(err){logger.error("Error parsing datachannel JSON: ".concat(err));return;}logger.debug('DataChannel got msg:',e.data);var homerMsg=HomerMsg.fromJson(parsed);if(!homerMsg){logger.error("Received invalid datachannel message: ".concat(e));return;}var jmpMsg=homerMsg.payload;if(!isValidJmpMsg(jmpMsg)){logger.error("Received invalid JMP msg: ".concat(JSON.stringify(jmpMsg)));return;}var mediaType=getMediaType(jmpMsg.mediaFamily,jmpMsg.mediaContent);var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find JMP session for media type ".concat(mediaType,"."));return;}jmpSession.receive(jmpMsg);};dataChannel.onclose=event=>{logger.info('DataChannel closed:',JSON.stringify(event));};dataChannel.onerror=event=>{logger.info('DataChannel error:',JSON.stringify(event));};this.dataChannel=dataChannel;}close(){this.sendTransceivers.forEach(t=>t.close());this.recvTransceivers.forEach(recvTransceivers=>{recvTransceivers.forEach(t=>t.close());});this.jmpSessions.forEach(jmpSession=>jmpSession.close());this.pc.close();}sendMediaRequestStatus(mediaType){var _a;if(getMediaFamily(mediaType)!==exports.MediaFamily.Video){return;}if(!this.getSendTransceiverOrThrow(mediaType).requested){return;}var streamStates=this.getVideoStreamStates(mediaType);var task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendMediaRequestStatus(streamStates);};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}sendSourceAdvertisement(mediaType){var _a,_b;var transceiver=this.getSendTransceiverOrThrow(mediaType);var numLiveSources=((_a=transceiver.publishedStream)===null||_a===void 0?void 0:_a.muted)===false?1:0;var task;if(getMediaFamily(mediaType)===exports.MediaFamily.Video){var sources=this.getVideoStreamStates(mediaType);if(sources===null){return;}var contentHint;if(transceiver.publishedStream&&mediaType===exports.MediaType.VideoSlides){contentHint=transceiver.publishedStream.contentHint;}task=()=>{var _a;(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,[],webRtcVideoContentHintToJmpVideoContentHint(contentHint));};}else {task=()=>{var _a;return (_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.sendSourceAdvertisement(1,numLiveSources,mediaType===exports.MediaType.AudioMain?transceiver.namedMediaGroups:[]);};}if(((_b=this.dataChannel)===null||_b===void 0?void 0:_b.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}getVideoStreamStates(mediaType){var sendTransceiver=this.getSendTransceiverOrThrow(mediaType);return sendTransceiver.senderIds.map(id=>({id,state:sendTransceiver.currentSourceState,csi:sendTransceiver.csi}));}createReceiveTransceiver(mediaType){var rtcRtpTransceiver=this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'});var mid=this.midPredictor.getNextMid(mediaType);var munger=new IngressSdpMunger();var recvOnlyTransceiver=new ReceiveOnlyTransceiver({rtcRtpTransceiver,mid,mediaType,munger});if(getMediaFamily(mediaType)===exports.MediaFamily.Video){recvOnlyTransceiver.setCodecParameters({'sps-pps-idr-in-keyframe':'1'});recvOnlyTransceiver.setRtxCodecParameters({'rtx-time':mediaType===exports.MediaType.VideoMain?defaultVideoMainRtxTime:defaultVideoSlidesRtxTime});}recvOnlyTransceiver.twccDisabled=getMediaFamily(mediaType)===exports.MediaFamily.Audio?this.options.disableAudioTwcc:false;this.recvTransceivers.set(mediaType,[...(this.recvTransceivers.get(mediaType)||[]),recvOnlyTransceiver]);return recvOnlyTransceiver;}createReceiveSlot(mediaType){return __awaiter$1(this,void 0,void 0,function*(){return (yield this.createReceiveSlots(mediaType,1))[0];});}createReceiveSlots(mediaType){var count=arguments.length>1&&arguments[1]!==undefined?arguments[1]:1;return __awaiter$1(this,void 0,void 0,function*(){return new Promise(createReceiveSlotsResolve=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var createdReceiveOnlyTransceivers=[];for(var i=0;i<count;i++){var recvOnlyTransceiver=this.createReceiveTransceiver(mediaType);createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);}if(this.pc.getRemoteDescription()){yield this.doLocalOfferAnswer();}var receiveSlots=createdReceiveOnlyTransceivers.map(transceiver=>transceiver.receiveSlot);createReceiveSlotsResolve(receiveSlots);}));});});}getIngressPayloadType(mediaType,mimeType){var _a,_b,_c;var requestedMediaCodecType=mimeType.split('/')[1];var requestedMid=(_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.mid;var parsedOffer=parse$1((_b=this.pc.getLocalDescription())===null||_b===void 0?void 0:_b.sdp);var parsedAnswer=parse$1((_c=this.pc.getRemoteDescription())===null||_c===void 0?void 0:_c.sdp);var senderCodecs=parsedAnswer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);var receiverCodecs=parsedOffer.avMedia.filter(media=>requestedMid===media.mid).map(media=>[...media.codecs.values()]).flat().filter(ci=>ci.name===requestedMediaCodecType);if(!senderCodecs||!receiverCodecs||senderCodecs.length===0||receiverCodecs.length===0){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Sender codecs or receiver codecs is undefined or empty.");}var senderCodec=senderCodecs[0];var targetCodec=receiverCodecs.find(receiverCodec=>{return areCodecsCompatible(senderCodec,receiverCodec);});if(!targetCodec||!targetCodec.pt){logErrorAndThrow(exports.WcmeErrorType.GET_PAYLOAD_TYPE_FAILED,"Cannot find matching receiver codec for the given mediaType/mimeType.");}return targetCodec.pt;}waitForIceGatheringComplete(){return __awaiter$1(this,void 0,void 0,function*(){return new Promise(resolve=>{if(this.pc.iceGatheringState==='complete'){resolve();}else {this.pc.on(PeerConnection.Events.IceCandidate,candidate=>{if(candidate.candidate===null||this.options.stopIceGatheringAfterFirstRelayCandidate&&candidate.candidate.type==='relay'){resolve();}});this.pc.on(PeerConnection.Events.IceGatheringStateChange,()=>{if(this.pc.iceGatheringState==='complete'){resolve();}});}});});}createOffer(){return __awaiter$1(this,void 0,void 0,function*(){if(!this.pc.getLocalDescription()){this.midPredictor.allocateMidForDatachannel();}if(this.setAnswerResolve){logger.info('Canceling previous offer since setAnswer was never called for it');this.setAnswerResolve();this.setAnswerResolve=undefined;}var createOfferId=++this.currentCreateOfferId;return new Promise((createOfferResolve,createOfferReject)=>{this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){var _a;try{var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});if(this.options.doFullIce){yield this.waitForIceGatheringComplete();}var sdpToSend=this.prepareLocalOfferForRemoteServer((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);createOfferResolve({type:'offer',sdp:sdpToSend});if(this.currentCreateOfferId>createOfferId){logger.log('Canceling previous offer since createOffer was called while it was being created');}else {yield new Promise(setAnswerResolve=>{this.setAnswerResolve=setAnswerResolve;});}}catch(error){createOfferReject(error);}}));});});}setAnswer(answer){return __awaiter$1(this,void 0,void 0,function*(){var sdp=this.preProcessRemoteAnswer(answer);if(!this.setAnswerResolve){logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Call to setAnswer without having previously called createOffer.");}logger.info('calling this.pc.setRemoteDescription()');return this.pc.setRemoteDescription({type:'answer',sdp}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');if(this.setAnswerResolve){this.setAnswerResolve();this.setAnswerResolve=undefined;}else {logger.debug("setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription");}})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.SET_ANSWER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}doLocalOfferAnswer(){var _a;return __awaiter$1(this,void 0,void 0,function*(){var offer=yield this.pc.createOffer();if(!offer.sdp){logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,'SDP not found in offer.');}offer.sdp=this.preProcessLocalOffer(offer.sdp);yield this.pc.setLocalDescription(offer).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setLocalDescription() resolved');})).catch(error=>{var _a;logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp((_a=offer.sdp)!==null&&_a!==void 0?_a:'')));});var answer=this.preProcessRemoteAnswer((_a=this.pc.getRemoteDescription())===null||_a===void 0?void 0:_a.sdp);return this.pc.setRemoteDescription({type:'answer',sdp:answer}).then(()=>__awaiter$1(this,void 0,void 0,function*(){logger.info('this.pc.setRemoteDescription() resolved');})).catch(error=>{logErrorAndThrow(exports.WcmeErrorType.CREATE_OFFER_FAILED,"Error: ".concat(error,". SDP: ").concat(maskIp(answer)));});});}queueLocalOfferAnswer(){return __awaiter$1(this,void 0,void 0,function*(){return this.offerAnswerQueue.push(()=>__awaiter$1(this,void 0,void 0,function*(){yield this.doLocalOfferAnswer();}));});}preProcessLocalOffer(offer){var parsedOffer=parse$1(offer);parsedOffer.avMedia.filter(av=>av.direction==='recvonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeLocalDescription(av);});parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescription(av);});if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());}return parsedOffer.toString();}prepareLocalOfferForRemoteServer(offer){var parsedOffer=parse$1(offer);var shouldInjectDummyCandidates=()=>{if(!this.options.doFullIce){return true;}return !hasIceCandidates(parsedOffer);};var mungeOptions={injectDummyCandidates:shouldInjectDummyCandidates()};parsedOffer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='inactive').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeLocalDescriptionForRemoteServer(av,mungeOptions);});if(mungeOptions.injectDummyCandidates){parsedOffer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{injectDummyCandidates(media);});}if(BrowserInfo.isFirefox()&&this.options.doFullIce){parsedOffer.media.forEach(media=>{media.iceInfo.candidates=[];this.iceCandidates.forEach(iceCandidate=>{var candidateLine=CandidateLine$1.fromSdpLine(iceCandidate.candidate.toString());if(candidateLine){media.addLine(candidateLine);}});});}if(BrowserInfo.isFirefox()){setupBundle(parsedOffer,this.options.bundlePolicy,this.midPredictor.getMidMap());if(this.options.bundlePolicy==='max-bundle'){parsedOffer.media.forEach((media,index)=>{if(index>0){media.port=parsedOffer.media[0].port;}});}}filterRecvOnlyMediaDescriptions(parsedOffer);return parsedOffer.toString();}preProcessRemoteAnswer(answer){var _a,_b;var parsedAnswer=parse$1(answer);var parsedOffer=parse$1((_a=this.pc.getLocalDescription())===null||_a===void 0?void 0:_a.sdp);matchMediaDescriptionsInAnswer(parsedOffer,parsedAnswer);parsedAnswer.avMedia.filter(av=>av.direction==='sendonly').forEach(av=>{var recvTransceiver=this.getRecvTransceiverByMidOrThrow(av.mid);recvTransceiver.mungeRemoteDescription(av);});parsedAnswer.avMedia.filter(av=>av.direction==='sendrecv'||av.direction==='recvonly').forEach(av=>{var sendTransceiver=this.getSendTransceiverByMidOrThrow(av.mid);sendTransceiver.mungeRemoteDescription(av);});parsedAnswer.media.filter(media=>media instanceof ApplicationMediaDescription$1).forEach(media=>{if(retainCandidatesByTransportType(media,['udp','tcp'])){logger.log("Some unsupported remote candidates have been removed from mid ".concat(media.mid));}});if(BrowserInfo.isFirefox()){setupBundle(parsedAnswer,this.options.bundlePolicy,this.midPredictor.getMidMap());}if((_b=parsedAnswer.session.information)===null||_b===void 0?void 0:_b.info){this.metadata.isMediaBypassEdge=!parsedAnswer.session.information.info.includes('linus');}return parsedAnswer.toString();}getSendTransceiverOrThrow(mediaType){var sendTransceiver=this.sendTransceivers.get(mediaType);if(!sendTransceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver for media type ".concat(mediaType,"."));}return sendTransceiver;}getSendTransceiverByMidOrThrow(mid){var transceiver=[...this.sendTransceivers.values()].find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find send transceiver with MID ".concat(mid,"."));}return transceiver;}getRecvTransceiverByMidOrThrow(mid){var transceiver=[...this.recvTransceivers.values()].flat().find(t=>t.mid===mid);if(!transceiver){logErrorAndThrow(exports.WcmeErrorType.GET_TRANSCEIVER_FAILED,"Unable to find recv transceiver with MID ".concat(mid,"."));}return transceiver;}requestMedia(mediaType,streamRequests){var _a;var task=()=>{var _a;var jmpSession=this.jmpSessions.get(mediaType);if(!jmpSession){logger.error("Unable to find jmp session for ".concat(mediaType));return;}var requestedReceiveSlotIds=[];streamRequests.forEach(request=>{if(request.receiveSlots.length===0){logger.error('Stream request ids cannot be empty.');return;}request.receiveSlots.forEach(slot=>{if(!slot.id){logger.error('Running stream request task, but ReceiveSlot ID is missing.');}if(!requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,slot.id))){requestedReceiveSlotIds.push(slot.id);}else {logger.error("Stream id duplicate found ".concat(JSON.stringify(slot.id),"."));}});});jmpSession.sendRequests(streamRequests.map(sr=>sr._toJmpStreamRequest()));(_a=this.recvTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.forEach(transceiver=>{if(requestedReceiveSlotIds.some(id=>areStreamIdsEqual(id,transceiver.receiveSlot.id))){var relevantRequest=streamRequests.find(request=>request.receiveSlots.some(slot=>areStreamIdsEqual(slot.id,transceiver.receiveSlot.id)));transceiver.handleRequested(relevantRequest);}else {transceiver.handleUnrequested();}});};if(((_a=this.dataChannel)===null||_a===void 0?void 0:_a.readyState)==='open'){task();}else {this.pendingJmpTasks.push(task);}}renewPeerConnection(userOptions){var _a;return __awaiter$1(this,void 0,void 0,function*(){(_a=this.pc)===null||_a===void 0?void 0:_a.close();try{if(userOptions){this.options=Object.assign(Object.assign({},this.options),yield userOptions);}}catch(error){logErrorAndThrow(exports.WcmeErrorType.RENEW_PEER_CONNECTION_FAILED,"Error while awaiting user options: ".concat(error));}logger.info("Renewing multistream connection with options ".concat(JSON.stringify(this.options)));this.midPredictor.reset();this.initializePeerConnection();var mainSceneId=generateSceneId();var slidesSceneId=generateSceneId();this.sendTransceivers.forEach((transceiver,mediaType)=>{var _a;var mediaContent=getMediaContent(mediaType);var sceneId=mediaContent===exports.MediaContent.Main?mainSceneId:slidesSceneId;var mid=this.midPredictor.getNextMid(mediaType);transceiver.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'sendrecv',sendEncodings:getMediaFamily(mediaType)===exports.MediaFamily.Video?this.getVideoEncodingOptions(mediaContent):undefined}));transceiver.mid=mid;transceiver.csi=generateCsi(getMediaFamily(mediaType),sceneId);transceiver.resetSdpMunger();(_a=this.jmpSessions.get(mediaType))===null||_a===void 0?void 0:_a.close();this.createJmpSession(mediaType);});this.recvTransceivers.forEach((transceivers,mediaType)=>{transceivers.forEach(t=>{var mid=this.midPredictor.getNextMid(mediaType);t.replaceTransceiver(this.pc.addTransceiver(toMediaStreamTrackKind(mediaType),{direction:'recvonly'}));t.mid=mid;});});});}getReceiveSlotById(id){return [...this.recvTransceivers.values()].flat().map(transceiver=>transceiver.receiveSlot).find(receiveSlot=>{var receiveSlotId=receiveSlot.id||{};return Object.keys(receiveSlotId).length===Object.keys(id).length&&Object.keys(receiveSlotId).every(key=>Object.prototype.hasOwnProperty.call(id,key)&&receiveSlotId[key]===id[key]);});}getStats(){return this.statsManager.getStats();}getTransceiverStats(){return __awaiter$1(this,void 0,void 0,function*(){var stats=yield this.getStats();var peerConnectionStats=[...stats.values()].find(stat=>stat.type==='peer-connection');return organizeTransceiverStats(this.sendTransceivers,this.recvTransceivers,peerConnectionStats);});}preProcessStats(stats){return __awaiter$1(this,void 0,void 0,function*(){stats.forEach(stat=>{if(stat.type==='peer-connection'){stat.isMediaBypassEdge=this.metadata.isMediaBypassEdge;}});yield Promise.all([...this.sendTransceivers.values()].map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(senderStats=>{if(senderStats.type==='outbound-rtp'||senderStats.type==='media-source'){stats.set(senderStats.id,senderStats);}});})));yield Promise.all([...this.recvTransceivers.values()].map(transceivers=>__awaiter$1(this,void 0,void 0,function*(){yield Promise.all(transceivers.map(transceiver=>__awaiter$1(this,void 0,void 0,function*(){(yield transceiver.getStats()).forEach(receiverStats=>{if(receiverStats.type==='inbound-rtp'){stats.set(receiverStats.id,receiverStats);}});})));})));});}attachMetricsObserver(){this.forceStatsReport=rtcStats_1(this.pc.getUnderlyingRTCPeerConnection(),data=>this.metricsCallback(data),5000,stats=>this.preProcessStats(stats)).forceStatsReport;}forceRtcMetricsCallback(){var _a;return (_a=this.forceStatsReport)===null||_a===void 0?void 0:_a.call(this);}setOveruseUpdateCallback(callback){this.overuseUpdateCallback=callback;}getCsiByMediaType(mediaType){var _a;return (_a=this.sendTransceivers.get(mediaType))===null||_a===void 0?void 0:_a.csi;}getAllCsis(){return {audioMain:this.getCsiByMediaType(exports.MediaType.AudioMain),audioSlides:this.getCsiByMediaType(exports.MediaType.AudioSlides),videoMain:this.getCsiByMediaType(exports.MediaType.VideoMain),videoSlides:this.getCsiByMediaType(exports.MediaType.VideoSlides)};}}class StreamRequest{constructor(policy,policySpecificInfo,receiveSlots,maxPayloadBitsPerSecond){var codecInfos=arguments.length>4&&arguments[4]!==undefined?arguments[4]:[];this.policy=policy;this.policySpecificInfo=policySpecificInfo;this.receiveSlots=receiveSlots;this.maxPayloadBitsPerSecond=maxPayloadBitsPerSecond;this.codecInfos=codecInfos;}_toJmpStreamRequest(){return new StreamRequest$1(this.policy,this.policySpecificInfo,this.receiveSlots.map(rs=>rs.id),this.maxPayloadBitsPerSecond,this.codecInfos);}}
5612
5612
 
5613
5613
  var defaultLogger = {
5614
5614
  info: function info() {
@@ -17785,7 +17785,6 @@ var CapabilityState;
17785
17785
  var MQE_INTERVAL = 60000;
17786
17786
  var DEFAULT_IP = '0.0.0.0';
17787
17787
  var UNKNOWN = 'unknown';
17788
- var VIDEO_FRAME_RATE_MULTIPLIER = 100;
17789
17788
  var NOISE_REDUCTION_MODE;
17790
17789
  (function (NOISE_REDUCTION_MODE) {
17791
17790
  NOISE_REDUCTION_MODE["NONE"] = "AUDIO_BACKGROUND_NOISE_REDUCTION_NONE";
@@ -17918,6 +17917,9 @@ var mean = array => {
17918
17917
  return array.reduce((a, b) => a + b) / array.length;
17919
17918
  };
17920
17919
  var bytesToBitrate = (bytes, timeElapsed) => {
17920
+ if (timeElapsed === 0) {
17921
+ return 0;
17922
+ }
17921
17923
  return bytes * 8 / (timeElapsed / 1000);
17922
17924
  };
17923
17925
  var samplesToMilliseconds = (samples, clockRate) => {
@@ -17929,6 +17931,12 @@ var samplesToMilliseconds = (samples, clockRate) => {
17929
17931
  }
17930
17932
  return samples / clockRate * 1000;
17931
17933
  };
17934
+ var framesToFrameRate = (frames, timeElapsed) => {
17935
+ if (timeElapsed === 0) {
17936
+ return 0;
17937
+ }
17938
+ return frames * 100 / (timeElapsed / 1000);
17939
+ };
17932
17940
  var convertToStatsMap = statsItems => {
17933
17941
  var statsMap = new Map();
17934
17942
  statsItems.forEach(statsItem => {
@@ -18009,11 +18017,11 @@ var getTransportTypeFromStats = intervalStats => {
18009
18017
  }
18010
18018
  return undefined;
18011
18019
  };
18012
- var getAvailableOutgoingBitrateFromStats = intervalStats => {
18020
+ var getAvailableOutgoingBitrateArrayFromStats = intervalStats => {
18013
18021
  var selectedCandidatePairId = getSelectedCandidatePairIdFromStats(intervalStats);
18014
18022
  if (selectedCandidatePairId) {
18015
- var availableOutgoingBitrate = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, 'availableOutgoingBitrate');
18016
- return availableOutgoingBitrate;
18023
+ var availableOutgoingBitrateArray = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, 'availableOutgoingBitrateArray');
18024
+ return availableOutgoingBitrateArray;
18017
18025
  }
18018
18026
  return undefined;
18019
18027
  };
@@ -18089,11 +18097,21 @@ class MqeBuilder {
18089
18097
  }
18090
18098
  newStats.forEach((stats, key) => {
18091
18099
  var current = this.currentIntervalStats.get(key);
18100
+ var storeValueInArray = (arrayProperty, valueToStore) => {
18101
+ var _current$arrayPropert;
18102
+ var array = (_current$arrayPropert = current === null || current === void 0 ? void 0 : current[arrayProperty]) !== null && _current$arrayPropert !== void 0 ? _current$arrayPropert : [];
18103
+ if (valueToStore !== undefined) {
18104
+ array.push(valueToStore);
18105
+ }
18106
+ if (array.length > 0) {
18107
+ stats[arrayProperty] = array;
18108
+ }
18109
+ };
18092
18110
  if (stats.type === 'inbound-rtp') {
18093
- var _current$jitterArray, _stats$jitter, _current$rtpPacketSiz, _stats$bytesReceived, _stats$packetsReceive;
18094
- var jitterArray = (_current$jitterArray = current === null || current === void 0 ? void 0 : current.jitterArray) !== null && _current$jitterArray !== void 0 ? _current$jitterArray : [];
18095
- jitterArray.push((_stats$jitter = stats.jitter) !== null && _stats$jitter !== void 0 ? _stats$jitter : 0);
18096
- stats.jitterArray = jitterArray;
18111
+ var _current$rtpPacketSiz, _stats$bytesReceived, _stats$packetsReceive;
18112
+ storeValueInArray('jitterArray', stats.jitter);
18113
+ storeValueInArray('requestedBitrateArray', stats.requestedBitrate);
18114
+ storeValueInArray('csiArray', stats.csi);
18097
18115
  var rtpPacketSizeArray = (_current$rtpPacketSiz = current === null || current === void 0 ? void 0 : current.rtpPacketSizeArray) !== null && _current$rtpPacketSiz !== void 0 ? _current$rtpPacketSiz : [];
18098
18116
  var bytesReceived = (_stats$bytesReceived = stats.bytesReceived) !== null && _stats$bytesReceived !== void 0 ? _stats$bytesReceived : 0;
18099
18117
  var packetsReceived = (_stats$packetsReceive = stats.packetsReceived) !== null && _stats$packetsReceive !== void 0 ? _stats$packetsReceive : 0;
@@ -18102,8 +18120,39 @@ class MqeBuilder {
18102
18120
  rtpPacketSizeArray.push(rtpPacketSize);
18103
18121
  }
18104
18122
  stats.rtpPacketSizeArray = rtpPacketSizeArray;
18123
+ if (this.mediaKind === 'video') {
18124
+ var _stats$requestedFrame, _current$maxRequested, _stats$requestedBitra, _current$maxRequested2, _current$bytesReceive, _current$maxBitrateFo, _stats$requestedFrame2, _current$maxRequested3, _stats$framesReceived, _current$framesReceiv, _current$maxReceivedF, _stats$framesDecoded, _current$framesDecode, _current$maxDecodedFr, _stats$frameHeight, _stats$frameWidth, _current$maxFrameSize, _current$maxFrameSize2;
18125
+ var requestedFrameSize = (_stats$requestedFrame = stats.requestedFrameSize) !== null && _stats$requestedFrame !== void 0 ? _stats$requestedFrame : 0;
18126
+ var maxRequestedFrameSize = (_current$maxRequested = current === null || current === void 0 ? void 0 : current.maxRequestedFrameSize) !== null && _current$maxRequested !== void 0 ? _current$maxRequested : 0;
18127
+ var isRequestedFrameSizeGreaterOrEqual = requestedFrameSize >= maxRequestedFrameSize;
18128
+ stats.maxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? requestedFrameSize : maxRequestedFrameSize;
18129
+ stats.maxRequestedBitrateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedBitra = stats.requestedBitrate) !== null && _stats$requestedBitra !== void 0 ? _stats$requestedBitra : 0, (_current$maxRequested2 = current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize) !== null && _current$maxRequested2 !== void 0 ? _current$maxRequested2 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize;
18130
+ var lastBytesReceived = (_current$bytesReceive = current === null || current === void 0 ? void 0 : current.bytesReceived) !== null && _current$bytesReceive !== void 0 ? _current$bytesReceive : 0;
18131
+ stats.maxBitrateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(bytesToBitrate(bytesReceived - lastBytesReceived, 5000), (_current$maxBitrateFo = current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize) !== null && _current$maxBitrateFo !== void 0 ? _current$maxBitrateFo : 0) : current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize;
18132
+ stats.maxRequestedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedFrame2 = stats.requestedFrameRate) !== null && _stats$requestedFrame2 !== void 0 ? _stats$requestedFrame2 : 0, (_current$maxRequested3 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize) !== null && _current$maxRequested3 !== void 0 ? _current$maxRequested3 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize;
18133
+ var framesReceived = (_stats$framesReceived = stats.framesReceived) !== null && _stats$framesReceived !== void 0 ? _stats$framesReceived : 0;
18134
+ var lastFramesReceived = (_current$framesReceiv = current === null || current === void 0 ? void 0 : current.framesReceived) !== null && _current$framesReceiv !== void 0 ? _current$framesReceiv : 0;
18135
+ stats.maxReceivedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesReceived - lastFramesReceived, 5000), (_current$maxReceivedF = current === null || current === void 0 ? void 0 : current.maxReceivedFrameRateForMaxRequestedFrameSize) !== null && _current$maxReceivedF !== void 0 ? _current$maxReceivedF : 0) : current === null || current === void 0 ? void 0 : current.maxReceivedFrameRateForMaxRequestedFrameSize;
18136
+ var framesDecoded = (_stats$framesDecoded = stats.framesDecoded) !== null && _stats$framesDecoded !== void 0 ? _stats$framesDecoded : 0;
18137
+ var lastFramesDecoded = (_current$framesDecode = current === null || current === void 0 ? void 0 : current.framesDecoded) !== null && _current$framesDecode !== void 0 ? _current$framesDecode : 0;
18138
+ stats.maxDecodedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesDecoded - lastFramesDecoded, 5000), (_current$maxDecodedFr = current === null || current === void 0 ? void 0 : current.maxDecodedFrameRateForMaxRequestedFrameSize) !== null && _current$maxDecodedFr !== void 0 ? _current$maxDecodedFr : 0) : current === null || current === void 0 ? void 0 : current.maxDecodedFrameRateForMaxRequestedFrameSize;
18139
+ var frameHeight = (_stats$frameHeight = stats.frameHeight) !== null && _stats$frameHeight !== void 0 ? _stats$frameHeight : 0;
18140
+ var frameWidth = (_stats$frameWidth = stats.frameWidth) !== null && _stats$frameWidth !== void 0 ? _stats$frameWidth : 0;
18141
+ var frameSize = pixelsToFrameSize(frameWidth, frameHeight);
18142
+ var maxFrameHeight = (_current$maxFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize) !== null && _current$maxFrameSize !== void 0 ? _current$maxFrameSize : 0;
18143
+ var maxFrameWidth = (_current$maxFrameSize2 = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize) !== null && _current$maxFrameSize2 !== void 0 ? _current$maxFrameSize2 : 0;
18144
+ var maxFrameSize = pixelsToFrameSize(maxFrameWidth, maxFrameHeight);
18145
+ if (isRequestedFrameSizeGreaterOrEqual && frameSize >= maxFrameSize) {
18146
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = frameHeight;
18147
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = frameWidth;
18148
+ } else {
18149
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize;
18150
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize;
18151
+ }
18152
+ }
18105
18153
  } else if (stats.type === 'outbound-rtp') {
18106
18154
  var _current$rtpPacketSiz2, _stats$bytesSent, _stats$packetsSent;
18155
+ storeValueInArray('requestedBitrateArray', stats.requestedBitrate);
18107
18156
  var lastUsedEffect = current === null || current === void 0 ? void 0 : current.lastUsedEffect;
18108
18157
  var effect = stats === null || stats === void 0 ? void 0 : stats.effect;
18109
18158
  stats.lastUsedEffect = effect !== null && effect !== void 0 ? effect : lastUsedEffect;
@@ -18115,17 +18164,39 @@ class MqeBuilder {
18115
18164
  _rtpPacketSizeArray.push(_rtpPacketSize);
18116
18165
  }
18117
18166
  stats.rtpPacketSizeArray = _rtpPacketSizeArray;
18167
+ if (this.mediaKind === 'video') {
18168
+ var _stats$requestedFrame3, _current$maxRequested4, _stats$requestedBitra2, _current$maxRequested5, _current$bytesSent, _current$maxBitrateFo2, _stats$requestedFrame4, _current$maxRequested6, _stats$framesSent, _current$framesSent, _current$maxTransmitt, _stats$frameHeight2, _stats$frameWidth2, _current$maxFrameSize3, _current$maxFrameSize4;
18169
+ var _requestedFrameSize = (_stats$requestedFrame3 = stats.requestedFrameSize) !== null && _stats$requestedFrame3 !== void 0 ? _stats$requestedFrame3 : 0;
18170
+ var _maxRequestedFrameSize = (_current$maxRequested4 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameSize) !== null && _current$maxRequested4 !== void 0 ? _current$maxRequested4 : 0;
18171
+ var _isRequestedFrameSizeGreaterOrEqual = _requestedFrameSize >= _maxRequestedFrameSize;
18172
+ stats.maxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? _requestedFrameSize : _maxRequestedFrameSize;
18173
+ stats.maxRequestedBitrateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedBitra2 = stats.requestedBitrate) !== null && _stats$requestedBitra2 !== void 0 ? _stats$requestedBitra2 : 0, (_current$maxRequested5 = current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize) !== null && _current$maxRequested5 !== void 0 ? _current$maxRequested5 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize;
18174
+ var lastBytesSent = (_current$bytesSent = current === null || current === void 0 ? void 0 : current.bytesSent) !== null && _current$bytesSent !== void 0 ? _current$bytesSent : 0;
18175
+ stats.maxBitrateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max(bytesToBitrate(bytesSent - lastBytesSent, 5000), (_current$maxBitrateFo2 = current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize) !== null && _current$maxBitrateFo2 !== void 0 ? _current$maxBitrateFo2 : 0) : current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize;
18176
+ stats.maxRequestedFrameRateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedFrame4 = stats.requestedFrameRate) !== null && _stats$requestedFrame4 !== void 0 ? _stats$requestedFrame4 : 0, (_current$maxRequested6 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize) !== null && _current$maxRequested6 !== void 0 ? _current$maxRequested6 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize;
18177
+ var framesSent = (_stats$framesSent = stats.framesSent) !== null && _stats$framesSent !== void 0 ? _stats$framesSent : 0;
18178
+ var lastFramesSent = (_current$framesSent = current === null || current === void 0 ? void 0 : current.framesSent) !== null && _current$framesSent !== void 0 ? _current$framesSent : 0;
18179
+ stats.maxTransmittedFrameRateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesSent - lastFramesSent, 5000), (_current$maxTransmitt = current === null || current === void 0 ? void 0 : current.maxTransmittedFrameRateForMaxRequestedFrameSize) !== null && _current$maxTransmitt !== void 0 ? _current$maxTransmitt : 0) : current === null || current === void 0 ? void 0 : current.maxTransmittedFrameRateForMaxRequestedFrameSize;
18180
+ var _frameHeight = (_stats$frameHeight2 = stats.frameHeight) !== null && _stats$frameHeight2 !== void 0 ? _stats$frameHeight2 : 0;
18181
+ var _frameWidth = (_stats$frameWidth2 = stats.frameWidth) !== null && _stats$frameWidth2 !== void 0 ? _stats$frameWidth2 : 0;
18182
+ var _frameSize = pixelsToFrameSize(_frameWidth, _frameHeight);
18183
+ var _maxFrameHeight = (_current$maxFrameSize3 = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize) !== null && _current$maxFrameSize3 !== void 0 ? _current$maxFrameSize3 : 0;
18184
+ var _maxFrameWidth = (_current$maxFrameSize4 = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize) !== null && _current$maxFrameSize4 !== void 0 ? _current$maxFrameSize4 : 0;
18185
+ var _maxFrameSize = pixelsToFrameSize(_maxFrameWidth, _maxFrameHeight);
18186
+ if (_isRequestedFrameSizeGreaterOrEqual && _frameSize >= _maxFrameSize) {
18187
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = _frameHeight;
18188
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = _frameWidth;
18189
+ } else {
18190
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize;
18191
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize;
18192
+ }
18193
+ }
18118
18194
  } else if (stats.type === 'remote-inbound-rtp') {
18119
- var _current$roundTripTim, _stats$roundTripTime, _current$fractionLost, _stats$fractionLost, _current$jitterArray2, _stats$jitter2;
18120
- var roundTripTimeArray = (_current$roundTripTim = current === null || current === void 0 ? void 0 : current.roundTripTimeArray) !== null && _current$roundTripTim !== void 0 ? _current$roundTripTim : [];
18121
- roundTripTimeArray.push((_stats$roundTripTime = stats.roundTripTime) !== null && _stats$roundTripTime !== void 0 ? _stats$roundTripTime : 0);
18122
- stats.roundTripTimeArray = roundTripTimeArray;
18123
- var fractionLostArray = (_current$fractionLost = current === null || current === void 0 ? void 0 : current.fractionLostArray) !== null && _current$fractionLost !== void 0 ? _current$fractionLost : [];
18124
- fractionLostArray.push((_stats$fractionLost = stats.fractionLost) !== null && _stats$fractionLost !== void 0 ? _stats$fractionLost : 0);
18125
- stats.fractionLostArray = fractionLostArray;
18126
- var _jitterArray = (_current$jitterArray2 = current === null || current === void 0 ? void 0 : current.jitterArray) !== null && _current$jitterArray2 !== void 0 ? _current$jitterArray2 : [];
18127
- _jitterArray.push((_stats$jitter2 = stats.jitter) !== null && _stats$jitter2 !== void 0 ? _stats$jitter2 : 0);
18128
- stats.jitterArray = _jitterArray;
18195
+ storeValueInArray('roundTripTimeArray', stats.roundTripTime);
18196
+ storeValueInArray('fractionLostArray', stats.fractionLost);
18197
+ storeValueInArray('jitterArray', stats.jitter);
18198
+ } else if (stats.type === 'candidate-pair') {
18199
+ storeValueInArray('availableOutgoingBitrateArray', stats.availableOutgoingBitrate);
18129
18200
  }
18130
18201
  });
18131
18202
  this.currentIntervalStats = newStats;
@@ -18139,21 +18210,43 @@ class MqeBuilder {
18139
18210
  this.currentIntervalStats.forEach(stats => {
18140
18211
  if (stats.type === 'inbound-rtp') {
18141
18212
  delete stats.jitterArray;
18213
+ delete stats.requestedBitrateArray;
18214
+ delete stats.csiArray;
18215
+ delete stats.maxRequestedFrameSize;
18216
+ delete stats.maxRequestedBitrateForMaxRequestedFrameSize;
18217
+ delete stats.maxBitrateForMaxRequestedFrameSize;
18218
+ delete stats.maxRequestedFrameRateForMaxRequestedFrameSize;
18219
+ delete stats.maxReceivedFrameRateForMaxRequestedFrameSize;
18220
+ delete stats.maxDecodedFrameRateForMaxRequestedFrameSize;
18221
+ delete stats.maxFrameSizeHeightForMaxRequestedFrameSize;
18222
+ delete stats.maxFrameSizeWidthForMaxRequestedFrameSize;
18142
18223
  delete stats.isRequested;
18143
18224
  delete stats.rtpPacketSizeArray;
18144
18225
  } else if (stats.type === 'outbound-rtp') {
18226
+ delete stats.requestedBitrateArray;
18145
18227
  delete stats.lastUsedEffect;
18228
+ delete stats.maxRequestedFrameSize;
18229
+ delete stats.maxRequestedBitrateForMaxRequestedFrameSize;
18230
+ delete stats.maxBitrateForMaxRequestedFrameSize;
18231
+ delete stats.maxRequestedFrameRateForMaxRequestedFrameSize;
18232
+ delete stats.maxTransmittedFrameRateForMaxRequestedFrameSize;
18233
+ delete stats.maxFrameSizeHeightForMaxRequestedFrameSize;
18234
+ delete stats.maxFrameSizeWidthForMaxRequestedFrameSize;
18146
18235
  delete stats.isRequested;
18147
18236
  delete stats.rtpPacketSizeArray;
18148
18237
  } else if (stats.type === 'remote-inbound-rtp') {
18149
18238
  delete stats.roundTripTimeArray;
18150
18239
  delete stats.fractionLostArray;
18151
18240
  delete stats.jitterArray;
18241
+ } else if (stats.type === 'candidate-pair') {
18242
+ delete stats.availableOutgoingBitrateArray;
18152
18243
  }
18153
18244
  });
18154
18245
  }
18155
18246
  buildMqeIntervalSessionCommon() {
18247
+ var _getPropertyFromStats;
18156
18248
  var result = structuredClone(initialMqeIntervalSessionCommon);
18249
+ var current = this.currentIntervalStats;
18157
18250
  result.isMain = this.isMain;
18158
18251
  result.mariFecEnabled = false;
18159
18252
  result.mariRtxEnabled = false;
@@ -18161,6 +18254,7 @@ class MqeBuilder {
18161
18254
  result.mariLiteEnabled = false;
18162
18255
  result.multistreamEnabled = this.multistreamEnabled;
18163
18256
  result.direction = this.direction;
18257
+ result.isMediaBypassEdge = (_getPropertyFromStats = getPropertyFromStatsByType(current, 'peer-connection', 'isMediaBypassEdge')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : false;
18164
18258
  return result;
18165
18259
  }
18166
18260
  buildMqeIntervalSessionReceive() {
@@ -18207,31 +18301,31 @@ class MqeBuilder {
18207
18301
  return result;
18208
18302
  }
18209
18303
  buildMqeIntervalStreamReceiveVideo(id) {
18210
- var _getPropertyFromStats, _getPropertyFromStats2, _getPropertyFromStats3, _getPropertyFromStats4, _getPropertyFromStats5, _getPropertyFromStats6, _getPropertyFromStats7, _getPropertyFromStats8, _getPropertyFromStats9, _getH264ProfileFromSt;
18304
+ var _getPropertyFromStats2, _getPropertyFromStats3, _getPropertyFromStats4, _getPropertyFromStats5, _getPropertyFromStats6, _getPropertyFromStats7, _getPropertyFromStats8, _getPropertyFromStats9, _getPropertyFromStats10, _getH264ProfileFromSt;
18211
18305
  var result = structuredClone(initialMqeIntervalStreamReceiveVideo);
18212
18306
  result.common = this.buildMqeIntervalStreamReceiveCommon(id);
18213
18307
  var current = this.currentIntervalStats;
18214
18308
  var previous = this.previousIntervalStats;
18215
- var currentFrameHeight = (_getPropertyFromStats = getPropertyFromStatsById(current, id, 'frameHeight')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : 0;
18216
- var currentFrameWidth = (_getPropertyFromStats2 = getPropertyFromStatsById(current, id, 'frameWidth')) !== null && _getPropertyFromStats2 !== void 0 ? _getPropertyFromStats2 : 0;
18217
- result.receivedFrameSize = pixelsToFrameSize(currentFrameWidth, currentFrameHeight);
18218
- var currentRequestedFrameSize = (_getPropertyFromStats3 = getPropertyFromStatsById(current, id, 'requestedFrameSize')) !== null && _getPropertyFromStats3 !== void 0 ? _getPropertyFromStats3 : 0;
18219
- result.requestedFrameSize = currentRequestedFrameSize;
18220
- result.optimalFrameSize = currentRequestedFrameSize;
18221
- result.receivedHeight = currentFrameHeight;
18222
- result.receivedWidth = currentFrameWidth;
18223
- var currentKeyFramesDecoded = (_getPropertyFromStats4 = getPropertyFromStatsById(current, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats4 !== void 0 ? _getPropertyFromStats4 : 0;
18224
- var previousKeyFramesDecoded = (_getPropertyFromStats5 = getPropertyFromStatsById(previous, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats5 !== void 0 ? _getPropertyFromStats5 : 0;
18309
+ var currentMaxFrameSizeHeightForMaxRequestedFrameSize = (_getPropertyFromStats2 = getPropertyFromStatsById(current, id, 'maxFrameSizeHeightForMaxRequestedFrameSize')) !== null && _getPropertyFromStats2 !== void 0 ? _getPropertyFromStats2 : 0;
18310
+ var currentMaxFrameSizeWidthForMaxRequestedFrameSize = (_getPropertyFromStats3 = getPropertyFromStatsById(current, id, 'maxFrameSizeWidthForMaxRequestedFrameSize')) !== null && _getPropertyFromStats3 !== void 0 ? _getPropertyFromStats3 : 0;
18311
+ result.receivedFrameSize = pixelsToFrameSize(currentMaxFrameSizeWidthForMaxRequestedFrameSize, currentMaxFrameSizeHeightForMaxRequestedFrameSize);
18312
+ var currentMaxRequestedFrameSize = (_getPropertyFromStats4 = getPropertyFromStatsById(current, id, 'maxRequestedFrameSize')) !== null && _getPropertyFromStats4 !== void 0 ? _getPropertyFromStats4 : 0;
18313
+ result.requestedFrameSize = currentMaxRequestedFrameSize;
18314
+ result.optimalFrameSize = currentMaxRequestedFrameSize;
18315
+ result.receivedHeight = currentMaxFrameSizeHeightForMaxRequestedFrameSize;
18316
+ result.receivedWidth = currentMaxFrameSizeWidthForMaxRequestedFrameSize;
18317
+ var currentKeyFramesDecoded = (_getPropertyFromStats5 = getPropertyFromStatsById(current, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats5 !== void 0 ? _getPropertyFromStats5 : 0;
18318
+ var previousKeyFramesDecoded = (_getPropertyFromStats6 = getPropertyFromStatsById(previous, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats6 !== void 0 ? _getPropertyFromStats6 : 0;
18225
18319
  result.receivedKeyFrames = currentKeyFramesDecoded - previousKeyFramesDecoded;
18226
- var currentFirCount = (_getPropertyFromStats6 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats6 !== void 0 ? _getPropertyFromStats6 : 0;
18227
- var previousFirCount = (_getPropertyFromStats7 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats7 !== void 0 ? _getPropertyFromStats7 : 0;
18228
- var currentPliCount = (_getPropertyFromStats8 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats8 !== void 0 ? _getPropertyFromStats8 : 0;
18229
- var previousPliCount = (_getPropertyFromStats9 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats9 !== void 0 ? _getPropertyFromStats9 : 0;
18320
+ var currentFirCount = (_getPropertyFromStats7 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats7 !== void 0 ? _getPropertyFromStats7 : 0;
18321
+ var previousFirCount = (_getPropertyFromStats8 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats8 !== void 0 ? _getPropertyFromStats8 : 0;
18322
+ var currentPliCount = (_getPropertyFromStats9 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats9 !== void 0 ? _getPropertyFromStats9 : 0;
18323
+ var previousPliCount = (_getPropertyFromStats10 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats10 !== void 0 ? _getPropertyFromStats10 : 0;
18230
18324
  result.requestedKeyFrames = currentFirCount - previousFirCount + (currentPliCount - previousPliCount);
18231
18325
  if (this.multistreamEnabled) {
18232
- var _getPropertyFromStats10, _getPropertyFromStats11;
18233
- var currentIsActiveSpeaker = (_getPropertyFromStats10 = getPropertyFromStatsById(current, id, 'isActiveSpeaker')) !== null && _getPropertyFromStats10 !== void 0 ? _getPropertyFromStats10 : false;
18234
- var currentLastActiveSpeakerUpdateTimestamp = (_getPropertyFromStats11 = getPropertyFromStatsById(current, id, 'lastActiveSpeakerUpdateTimestamp')) !== null && _getPropertyFromStats11 !== void 0 ? _getPropertyFromStats11 : 0;
18326
+ var _getPropertyFromStats11, _getPropertyFromStats12;
18327
+ var currentIsActiveSpeaker = (_getPropertyFromStats11 = getPropertyFromStatsById(current, id, 'isActiveSpeaker')) !== null && _getPropertyFromStats11 !== void 0 ? _getPropertyFromStats11 : false;
18328
+ var currentLastActiveSpeakerUpdateTimestamp = (_getPropertyFromStats12 = getPropertyFromStatsById(current, id, 'lastActiveSpeakerUpdateTimestamp')) !== null && _getPropertyFromStats12 !== void 0 ? _getPropertyFromStats12 : 0;
18235
18329
  result.isActiveSpeaker = currentIsActiveSpeaker || currentLastActiveSpeakerUpdateTimestamp > performance.timeOrigin + performance.now() - MQE_INTERVAL;
18236
18330
  }
18237
18331
  var currentH264CodecProfile = (_getH264ProfileFromSt = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt !== void 0 ? _getH264ProfileFromSt : 'BP';
@@ -18239,56 +18333,62 @@ class MqeBuilder {
18239
18333
  return result;
18240
18334
  }
18241
18335
  buildMqeIntervalStreamReceiveCommon(id) {
18242
- var _getPropertyFromStats12, _getPropertyFromStats13, _getPropertyFromStats14, _getPropertyFromStats15, _getPropertyFromStats16, _getPropertyFromStats17, _getPropertyFromStats30, _getPropertyFromStats31, _getPropertyFromStats32, _getPropertyFromStats33, _getPropertyFromStats34, _getPropertyFromStats35, _getCodecFromStatsByS;
18336
+ var _getPropertyFromStats13, _getPropertyFromStats14, _getPropertyFromStats15, _getPropertyFromStats16, _getPropertyFromStats17, _getPropertyFromStats18, _getPropertyFromStats29, _getPropertyFromStats30, _getPropertyFromStats31, _getPropertyFromStats32, _getPropertyFromStats33, _getCodecFromStatsByS;
18243
18337
  var result = structuredClone(initialMqeIntervalStreamReceiveCommon);
18244
18338
  var current = this.currentIntervalStats;
18245
18339
  var previous = this.previousIntervalStats;
18246
- var currentPacketsReceived = (_getPropertyFromStats12 = getPropertyFromStatsById(current, id, 'packetsReceived')) !== null && _getPropertyFromStats12 !== void 0 ? _getPropertyFromStats12 : 0;
18247
- var previousPacketsReceived = (_getPropertyFromStats13 = getPropertyFromStatsById(previous, id, 'packetsReceived')) !== null && _getPropertyFromStats13 !== void 0 ? _getPropertyFromStats13 : 0;
18248
- var currentRetransmittedPacketsReceived = (_getPropertyFromStats14 = getPropertyFromStatsById(current, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats14 !== void 0 ? _getPropertyFromStats14 : 0;
18249
- var previousRetransmittedPacketsReceived = (_getPropertyFromStats15 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats15 !== void 0 ? _getPropertyFromStats15 : 0;
18340
+ var currentPacketsReceived = (_getPropertyFromStats13 = getPropertyFromStatsById(current, id, 'packetsReceived')) !== null && _getPropertyFromStats13 !== void 0 ? _getPropertyFromStats13 : 0;
18341
+ var previousPacketsReceived = (_getPropertyFromStats14 = getPropertyFromStatsById(previous, id, 'packetsReceived')) !== null && _getPropertyFromStats14 !== void 0 ? _getPropertyFromStats14 : 0;
18342
+ var currentRetransmittedPacketsReceived = (_getPropertyFromStats15 = getPropertyFromStatsById(current, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats15 !== void 0 ? _getPropertyFromStats15 : 0;
18343
+ var previousRetransmittedPacketsReceived = (_getPropertyFromStats16 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats16 !== void 0 ? _getPropertyFromStats16 : 0;
18250
18344
  result.rtpPackets = currentPacketsReceived - previousPacketsReceived - (currentRetransmittedPacketsReceived - previousRetransmittedPacketsReceived);
18251
- var currentPacketsLost = (_getPropertyFromStats16 = getPropertyFromStatsById(current, id, 'packetsLost')) !== null && _getPropertyFromStats16 !== void 0 ? _getPropertyFromStats16 : 0;
18252
- var previousPacketsLost = (_getPropertyFromStats17 = getPropertyFromStatsById(previous, id, 'packetsLost')) !== null && _getPropertyFromStats17 !== void 0 ? _getPropertyFromStats17 : 0;
18345
+ var currentPacketsLost = (_getPropertyFromStats17 = getPropertyFromStatsById(current, id, 'packetsLost')) !== null && _getPropertyFromStats17 !== void 0 ? _getPropertyFromStats17 : 0;
18346
+ var previousPacketsLost = (_getPropertyFromStats18 = getPropertyFromStatsById(previous, id, 'packetsLost')) !== null && _getPropertyFromStats18 !== void 0 ? _getPropertyFromStats18 : 0;
18253
18347
  result.rtpEndToEndLost = currentPacketsLost - previousPacketsLost;
18254
18348
  if (this.mediaKind === 'audio') {
18255
- var _getPropertyFromStats18, _getPropertyFromStats19, _getPropertyFromStats20, _getPropertyFromStats21, _getPropertyFromStats22;
18256
- var currentConcealedSamples = (_getPropertyFromStats18 = getPropertyFromStatsById(current, id, 'concealedSamples')) !== null && _getPropertyFromStats18 !== void 0 ? _getPropertyFromStats18 : 0;
18257
- var previousConcealedSamples = (_getPropertyFromStats19 = getPropertyFromStatsById(previous, id, 'concealedSamples')) !== null && _getPropertyFromStats19 !== void 0 ? _getPropertyFromStats19 : 0;
18258
- var currentSilentConcealedSamples = (_getPropertyFromStats20 = getPropertyFromStatsById(current, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats20 !== void 0 ? _getPropertyFromStats20 : 0;
18259
- var previousSilentConcealedSamples = (_getPropertyFromStats21 = getPropertyFromStatsById(previous, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats21 !== void 0 ? _getPropertyFromStats21 : 0;
18260
- var currentClockRate = (_getPropertyFromStats22 = getPropertyFromStatsByType(current, 'codec', 'clockRate')) !== null && _getPropertyFromStats22 !== void 0 ? _getPropertyFromStats22 : 0;
18349
+ var _getPropertyFromStats19, _getPropertyFromStats20, _getPropertyFromStats21, _getPropertyFromStats22, _getPropertyFromStats23;
18350
+ var currentConcealedSamples = (_getPropertyFromStats19 = getPropertyFromStatsById(current, id, 'concealedSamples')) !== null && _getPropertyFromStats19 !== void 0 ? _getPropertyFromStats19 : 0;
18351
+ var previousConcealedSamples = (_getPropertyFromStats20 = getPropertyFromStatsById(previous, id, 'concealedSamples')) !== null && _getPropertyFromStats20 !== void 0 ? _getPropertyFromStats20 : 0;
18352
+ var currentSilentConcealedSamples = (_getPropertyFromStats21 = getPropertyFromStatsById(current, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats21 !== void 0 ? _getPropertyFromStats21 : 0;
18353
+ var previousSilentConcealedSamples = (_getPropertyFromStats22 = getPropertyFromStatsById(previous, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats22 !== void 0 ? _getPropertyFromStats22 : 0;
18354
+ var currentClockRate = (_getPropertyFromStats23 = getPropertyFromStatsByType(current, 'codec', 'clockRate')) !== null && _getPropertyFromStats23 !== void 0 ? _getPropertyFromStats23 : 0;
18261
18355
  result.concealedFrames = samplesToMilliseconds(currentConcealedSamples - previousConcealedSamples - (currentSilentConcealedSamples - previousSilentConcealedSamples), currentClockRate);
18262
18356
  }
18263
18357
  if (this.mediaKind === 'video') {
18264
- var _getPropertyFromStats23, _getPropertyFromStats24, _getPropertyFromStats25, _getPropertyFromStats26, _getPropertyFromStats27, _getPropertyFromStats28, _getPropertyFromStats29;
18265
- var currentTotalFreezesDuration = (_getPropertyFromStats23 = getPropertyFromStatsById(current, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats23 !== void 0 ? _getPropertyFromStats23 : 0;
18266
- var previousTotalFreezesDuration = (_getPropertyFromStats24 = getPropertyFromStatsById(previous, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats24 !== void 0 ? _getPropertyFromStats24 : 0;
18358
+ var _getPropertyFromStats24, _getPropertyFromStats25, _getPropertyFromStats26, _getPropertyFromStats27, _getPropertyFromStats28;
18359
+ var currentTotalFreezesDuration = (_getPropertyFromStats24 = getPropertyFromStatsById(current, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats24 !== void 0 ? _getPropertyFromStats24 : 0;
18360
+ var previousTotalFreezesDuration = (_getPropertyFromStats25 = getPropertyFromStatsById(previous, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats25 !== void 0 ? _getPropertyFromStats25 : 0;
18267
18361
  result.concealedFrames = (currentTotalFreezesDuration - previousTotalFreezesDuration) * 1000;
18268
- var currentFramesReceived = (_getPropertyFromStats25 = getPropertyFromStatsById(current, id, 'framesReceived')) !== null && _getPropertyFromStats25 !== void 0 ? _getPropertyFromStats25 : 0;
18269
- var previousFramesReceived = (_getPropertyFromStats26 = getPropertyFromStatsById(previous, id, 'framesReceived')) !== null && _getPropertyFromStats26 !== void 0 ? _getPropertyFromStats26 : 0;
18270
- result.receivedFrameRate = (currentFramesReceived - previousFramesReceived) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
18271
- var currentFramesDecoded = (_getPropertyFromStats27 = getPropertyFromStatsById(current, id, 'framesDecoded')) !== null && _getPropertyFromStats27 !== void 0 ? _getPropertyFromStats27 : 0;
18272
- var previousFramesDecoded = (_getPropertyFromStats28 = getPropertyFromStatsById(previous, id, 'framesDecoded')) !== null && _getPropertyFromStats28 !== void 0 ? _getPropertyFromStats28 : 0;
18273
- result.renderedFrameRate = (currentFramesDecoded - previousFramesDecoded) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
18274
- var currentRequestedFrameRate = (_getPropertyFromStats29 = getPropertyFromStatsById(current, id, 'requestedFrameRate')) !== null && _getPropertyFromStats29 !== void 0 ? _getPropertyFromStats29 : 0;
18275
- result.requestedFrameRate = currentRequestedFrameRate;
18276
- result.optimalFrameRate = currentRequestedFrameRate;
18277
- }
18278
- var currentJitterArray = (_getPropertyFromStats30 = getPropertyFromStatsById(current, id, 'jitterArray')) !== null && _getPropertyFromStats30 !== void 0 ? _getPropertyFromStats30 : [];
18362
+ var currentMaxReceivedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats26 = getPropertyFromStatsById(current, id, 'maxReceivedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats26 !== void 0 ? _getPropertyFromStats26 : 0;
18363
+ result.receivedFrameRate = currentMaxReceivedFrameRateForMaxRequestedFrameSize;
18364
+ var currentMaxDecodedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats27 = getPropertyFromStatsById(current, id, 'maxDecodedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats27 !== void 0 ? _getPropertyFromStats27 : 0;
18365
+ result.renderedFrameRate = currentMaxDecodedFrameRateForMaxRequestedFrameSize;
18366
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats28 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats28 !== void 0 ? _getPropertyFromStats28 : 0;
18367
+ result.requestedFrameRate = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18368
+ result.optimalFrameRate = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18369
+ }
18370
+ var currentJitterArray = (_getPropertyFromStats29 = getPropertyFromStatsById(current, id, 'jitterArray')) !== null && _getPropertyFromStats29 !== void 0 ? _getPropertyFromStats29 : [];
18279
18371
  result.meanRtpJitter = mean(currentJitterArray) * 1000;
18280
18372
  result.maxRtpJitter = max(currentJitterArray) * 1000;
18281
- var currentBytesReceived = (_getPropertyFromStats31 = getPropertyFromStatsById(current, id, 'bytesReceived')) !== null && _getPropertyFromStats31 !== void 0 ? _getPropertyFromStats31 : 0;
18282
- var previousBytesReceived = (_getPropertyFromStats32 = getPropertyFromStatsById(previous, id, 'bytesReceived')) !== null && _getPropertyFromStats32 !== void 0 ? _getPropertyFromStats32 : 0;
18283
- var currentRetransmittedBytesReceived = (_getPropertyFromStats33 = getPropertyFromStatsById(current, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats33 !== void 0 ? _getPropertyFromStats33 : 0;
18284
- var previousRetransmittedBytesReceived = (_getPropertyFromStats34 = getPropertyFromStatsById(previous, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats34 !== void 0 ? _getPropertyFromStats34 : 0;
18373
+ var currentBytesReceived = (_getPropertyFromStats30 = getPropertyFromStatsById(current, id, 'bytesReceived')) !== null && _getPropertyFromStats30 !== void 0 ? _getPropertyFromStats30 : 0;
18374
+ var previousBytesReceived = (_getPropertyFromStats31 = getPropertyFromStatsById(previous, id, 'bytesReceived')) !== null && _getPropertyFromStats31 !== void 0 ? _getPropertyFromStats31 : 0;
18375
+ var currentRetransmittedBytesReceived = (_getPropertyFromStats32 = getPropertyFromStatsById(current, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats32 !== void 0 ? _getPropertyFromStats32 : 0;
18376
+ var previousRetransmittedBytesReceived = (_getPropertyFromStats33 = getPropertyFromStatsById(previous, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats33 !== void 0 ? _getPropertyFromStats33 : 0;
18285
18377
  result.receivedBitrate = bytesToBitrate(currentBytesReceived - previousBytesReceived - (currentRetransmittedBytesReceived - previousRetransmittedBytesReceived), MQE_INTERVAL);
18286
- var currentRequestedBitrate = (_getPropertyFromStats35 = getPropertyFromStatsById(current, id, 'requestedBitrate')) !== null && _getPropertyFromStats35 !== void 0 ? _getPropertyFromStats35 : 0;
18287
- result.requestedBitrate = currentRequestedBitrate;
18288
- result.optimalBitrate = currentRequestedBitrate;
18289
- var currentCsi = getPropertyFromStatsById(current, id, 'csi');
18290
- if (currentCsi) {
18291
- result.csi = [currentCsi];
18378
+ if (this.mediaKind === 'audio') {
18379
+ var _getPropertyFromStats34;
18380
+ var currentRequestedBitrateArray = (_getPropertyFromStats34 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats34 !== void 0 ? _getPropertyFromStats34 : [];
18381
+ result.requestedBitrate = max(currentRequestedBitrateArray);
18382
+ result.optimalBitrate = max(currentRequestedBitrateArray);
18383
+ } else {
18384
+ var _getPropertyFromStats35;
18385
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats35 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats35 !== void 0 ? _getPropertyFromStats35 : 0;
18386
+ result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18387
+ result.optimalBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18388
+ }
18389
+ var currentCsiArray = getPropertyFromStatsById(current, id, 'csiArray');
18390
+ if (currentCsiArray && currentCsiArray.length > 0) {
18391
+ result.csi = currentCsiArray.filter((csi, index) => currentCsiArray.indexOf(csi) === index);
18292
18392
  }
18293
18393
  var currentCodec = (_getCodecFromStatsByS = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS !== void 0 ? _getCodecFromStatsByS : this.mediaKind === 'audio' ? 'opus' : 'H264';
18294
18394
  result.codec = currentCodec;
@@ -18314,8 +18414,8 @@ class MqeBuilder {
18314
18414
  result.rtpBitrate = bytesToBitrate(currentBytesSent - previousBytesSent, MQE_INTERVAL) - result.rtxBitrate;
18315
18415
  var currentTransportType = (_getTransportTypeFrom2 = getTransportTypeFromStats(current)) !== null && _getTransportTypeFrom2 !== void 0 ? _getTransportTypeFrom2 : 'UDP';
18316
18416
  result.transportType = currentTransportType;
18317
- var currentAvailableOutgoingBitrate = (_getAvailableOutgoing = getAvailableOutgoingBitrateFromStats(current)) !== null && _getAvailableOutgoing !== void 0 ? _getAvailableOutgoing : 0;
18318
- result.availableBitrate = currentAvailableOutgoingBitrate;
18417
+ var currentAvailableOutgoingBitrate = (_getAvailableOutgoing = getAvailableOutgoingBitrateArrayFromStats(current)) !== null && _getAvailableOutgoing !== void 0 ? _getAvailableOutgoing : [];
18418
+ result.availableBitrate = min(currentAvailableOutgoingBitrate);
18319
18419
  result.queueDelay = 0;
18320
18420
  var currentRoundTripTimeArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'roundTripTimeArray').flat();
18321
18421
  result.meanRoundTripTime = mean(currentRoundTripTimeArray) * 1000;
@@ -18352,13 +18452,13 @@ class MqeBuilder {
18352
18452
  result.common = this.buildMqeIntervalStreamTransmitCommon(id);
18353
18453
  var current = this.currentIntervalStats;
18354
18454
  var previous = this.previousIntervalStats;
18355
- var currentFrameHeight = (_getPropertyFromStats36 = getPropertyFromStatsById(current, id, 'frameHeight')) !== null && _getPropertyFromStats36 !== void 0 ? _getPropertyFromStats36 : 0;
18356
- var currentFrameWidth = (_getPropertyFromStats37 = getPropertyFromStatsById(current, id, 'frameWidth')) !== null && _getPropertyFromStats37 !== void 0 ? _getPropertyFromStats37 : 0;
18357
- result.transmittedFrameSize = pixelsToFrameSize(currentFrameWidth, currentFrameHeight);
18358
- var currentRequestedFrameSize = (_getPropertyFromStats38 = getPropertyFromStatsById(current, id, 'requestedFrameSize')) !== null && _getPropertyFromStats38 !== void 0 ? _getPropertyFromStats38 : 0;
18359
- result.requestedFrameSize = currentRequestedFrameSize;
18360
- result.transmittedHeight = currentFrameHeight;
18361
- result.transmittedWidth = currentFrameWidth;
18455
+ var currentMaxFrameSizeHeightForMaxRequestedFrameSize = (_getPropertyFromStats36 = getPropertyFromStatsById(current, id, 'maxFrameSizeHeightForMaxRequestedFrameSize')) !== null && _getPropertyFromStats36 !== void 0 ? _getPropertyFromStats36 : 0;
18456
+ var currentMaxFrameSizeWidthForMaxRequestedFrameSize = (_getPropertyFromStats37 = getPropertyFromStatsById(current, id, 'maxFrameSizeWidthForMaxRequestedFrameSize')) !== null && _getPropertyFromStats37 !== void 0 ? _getPropertyFromStats37 : 0;
18457
+ result.transmittedFrameSize = pixelsToFrameSize(currentMaxFrameSizeWidthForMaxRequestedFrameSize, currentMaxFrameSizeHeightForMaxRequestedFrameSize);
18458
+ var currentMaxRequestedFrameSize = (_getPropertyFromStats38 = getPropertyFromStatsById(current, id, 'maxRequestedFrameSize')) !== null && _getPropertyFromStats38 !== void 0 ? _getPropertyFromStats38 : 0;
18459
+ result.requestedFrameSize = currentMaxRequestedFrameSize;
18460
+ result.transmittedHeight = currentMaxFrameSizeHeightForMaxRequestedFrameSize;
18461
+ result.transmittedWidth = currentMaxFrameSizeWidthForMaxRequestedFrameSize;
18362
18462
  var currentKeyFramesEncoded = (_getPropertyFromStats39 = getPropertyFromStatsById(current, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats39 !== void 0 ? _getPropertyFromStats39 : 0;
18363
18463
  var previousKeyFramesEncoded = (_getPropertyFromStats40 = getPropertyFromStatsById(previous, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats40 !== void 0 ? _getPropertyFromStats40 : 0;
18364
18464
  result.transmittedKeyFrames = currentKeyFramesEncoded - previousKeyFramesEncoded;
@@ -18387,7 +18487,7 @@ class MqeBuilder {
18387
18487
  return result;
18388
18488
  }
18389
18489
  buildMqeIntervalStreamTransmitCommon(id) {
18390
- var _getPropertyFromStats45, _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats52, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getPropertyFromStats56, _getCodecFromStatsByS2;
18490
+ var _getPropertyFromStats45, _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats51, _getPropertyFromStats52, _getPropertyFromStats53, _getPropertyFromStats54, _getCodecFromStatsByS2;
18391
18491
  var result = structuredClone(initialMqeIntervalStreamTransmitCommon);
18392
18492
  var current = this.currentIntervalStats;
18393
18493
  var previous = this.previousIntervalStats;
@@ -18397,20 +18497,26 @@ class MqeBuilder {
18397
18497
  var previousRetransmittedPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18398
18498
  result.rtpPackets = currentPacketsSent - previousPacketsSent - (currentRetransmittedPacketsSent - previousRetransmittedPacketsSent);
18399
18499
  if (this.mediaKind === 'video') {
18400
- var _getPropertyFromStats49, _getPropertyFromStats50, _getPropertyFromStats51;
18401
- var currentFramesSent = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'framesSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18402
- var previousFramesSent = (_getPropertyFromStats50 = getPropertyFromStatsById(previous, id, 'framesSent')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18403
- result.transmittedFrameRate = (currentFramesSent - previousFramesSent) * VIDEO_FRAME_RATE_MULTIPLIER / (MQE_INTERVAL / 1000);
18404
- var currentRequestedFrameRate = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'requestedFrameRate')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18405
- result.requestedFrames = currentRequestedFrameRate;
18406
- }
18407
- var currentBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18408
- var previousBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18409
- var currentRetransmittedBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18410
- var previousRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18500
+ var _getPropertyFromStats49, _getPropertyFromStats50;
18501
+ var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18502
+ result.transmittedFrameRate = currentMaxTransmittedFrameRateForMaxRequestedFrameSize;
18503
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats50 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18504
+ result.requestedFrames = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18505
+ }
18506
+ var currentBytesSent = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18507
+ var previousBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18508
+ var currentRetransmittedBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18509
+ var previousRetransmittedBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18411
18510
  result.transmittedBitrate = bytesToBitrate(currentBytesSent - previousBytesSent - (currentRetransmittedBytesSent - previousRetransmittedBytesSent), MQE_INTERVAL);
18412
- var currentRequestedBitrate = (_getPropertyFromStats56 = getPropertyFromStatsById(current, id, 'requestedBitrate')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : 0;
18413
- result.requestedBitrate = currentRequestedBitrate;
18511
+ if (this.mediaKind === 'audio') {
18512
+ var _getPropertyFromStats55;
18513
+ var currentRequestedBitrateArray = (_getPropertyFromStats55 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : [];
18514
+ result.requestedBitrate = max(currentRequestedBitrateArray);
18515
+ } else {
18516
+ var _getPropertyFromStats56;
18517
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats56 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : 0;
18518
+ result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18519
+ }
18414
18520
  var currentCodec = (_getCodecFromStatsByS2 = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS2 !== void 0 ? _getCodecFromStatsByS2 : this.mediaKind === 'audio' ? 'opus' : 'H264';
18415
18521
  result.codec = currentCodec;
18416
18522
  var currentCsi = getPropertyFromStatsById(current, id, 'csi');