@vindral/web-sdk 4.0.0-105-g107caaa1 → 4.0.0-107-gcc4e82db

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/legacy.umd.js CHANGED
@@ -46,7 +46,7 @@ void main() {
46
46
  gl_Position = model * vec4(position, 0.0, 1.0);
47
47
  }
48
48
  `,El={width:256,codedWidth:256,height:144,codedHeight:144},gl={preserveDrawingBuffer:!1,alpha:!1,depth:!1,stencil:!1,antialias:!1,premultipliedAlpha:!1},BU=class BU extends $A{constructor(){super();i(this,"canvas",document.createElement("canvas"));i(this,"context",ol(this.canvas,gl));i(this,"pixelShader",OQ(this.context,this.context.FRAGMENT_SHADER,rl));i(this,"vertexShader",OQ(this.context,this.context.VERTEX_SHADER,dl));i(this,"buffer",ll(this.context,BU.SQUARE_VERTICES));i(this,"program",qs(this.context,this.vertexShader,this.pixelShader));i(this,"textures",{y:Mt(this.context),u:Mt(this.context),v:Mt(this.context)});i(this,"textRenderer");i(this,"size",El);i(this,"onContextLost",e=>{this.textRenderer=void 0;const t=new Error(e instanceof WebGLContextEvent?e.statusMessage:"webgl context lost");this.emit("context lost",nE(t)),e.preventDefault()});i(this,"onContextRestored",()=>{this.emit("context restored"),this.context=ol(this.canvas,gl),this.pixelShader=OQ(this.context,this.context.FRAGMENT_SHADER,rl),this.vertexShader=OQ(this.context,this.context.VERTEX_SHADER,dl),this.buffer=ll(this.context,BU.SQUARE_VERTICES),this.program=qs(this.context,this.vertexShader,this.pixelShader),this.textures={y:Mt(this.context),u:Mt(this.context),v:Mt(this.context)},this.load()});i(this,"load",()=>{this.context.useProgram(this.program),this.setupPositionVertexAttributes(),this.setSize(El),this.context.uniform1i(this.context.getUniformLocation(this.program,"y_texture"),0),this.context.uniform1i(this.context.getUniformLocation(this.program,"u_texture"),1),this.context.uniform1i(this.context.getUniformLocation(this.program,"v_texture"),2),this.setConversionMatrix(this.rec709())});i(this,"unload",()=>{var t;this.setSize({width:1,height:1,codedHeight:1,codedWidth:1}),[this.textures.y,this.textures.u,this.textures.v].forEach(B=>this.context.deleteTexture(B)),this.context.deleteShader(this.pixelShader),this.context.deleteShader(this.vertexShader),this.context.deleteProgram(this.program),this.context.deleteBuffer(this.buffer),this.canvas.removeEventListener("webglcontextlost",this.onContextLost),this.canvas.removeEventListener("webglcontextrestored",this.onContextRestored),(t=this.context.getExtension("WEBGL_lose_context"))==null||t.loseContext()});i(this,"resetSize",()=>{this.setSize({width:this.size.width/2,height:this.size.height/2,codedHeight:this.size.codedHeight/2,codedWidth:this.size.codedWidth/2})});i(this,"render",(e,t)=>{var B;this.context.useProgram(this.program),this.setSize({width:e.width,height:e.height,codedWidth:e.codedWidth,codedHeight:e.codedHeight}),this.setConversionMatrix(this.rec709()),this.setModelMatrix(this.size.width/this.size.codedWidth,this.size.height/this.size.codedHeight),this.context.activeTexture(this.context.TEXTURE0),this.updateTexture(this.textures.y,this.size.codedWidth,this.size.codedHeight,e.data[0]),this.context.activeTexture(this.context.TEXTURE1),this.updateTexture(this.textures.u,this.size.codedWidth/2,this.size.codedHeight/2,e.data[1]),this.context.activeTexture(this.context.TEXTURE2),this.updateTexture(this.textures.v,this.size.codedWidth/2,this.size.codedHeight/2,e.data[2]),this.context.drawArrays(this.context.TRIANGLE_STRIP,0,4),this.textRenderer&&this.textRenderer.render({width:Math.max(t.clientWidth,960)*window.devicePixelRatio,height:Math.max(t.clientHeight,540)*window.devicePixelRatio,padding:-parseInt((B=t.style.getPropertyValue("--vindral-control-bar-offset"))!=null?B:"0",10)})});i(this,"updateTexture",(e,t,B,F)=>{const s=this.context.LUMINANCE,a=this.context.UNSIGNED_BYTE;this.context.bindTexture(this.context.TEXTURE_2D,e),this.context.texImage2D(this.context.TEXTURE_2D,0,s,t,B,0,s,a,F)});i(this,"setupPositionVertexAttributes",()=>{const e=this.context.getAttribLocation(this.program,"position");this.context.enableVertexAttribArray(e),this.context.vertexAttribPointer(e,2,this.context.FLOAT,!1,0,0)});i(this,"setSize",e=>{Zt(e,this.size)||(this.size=e,this.canvas.setAttribute("width",e.width.toString()),this.canvas.setAttribute("height",e.height.toString()),this.context.viewport(0,0,e.width,e.height),this.setModelMatrix(e.width/e.codedWidth,e.height/e.codedHeight))});i(this,"setModelMatrix",(e,t)=>{const B=this.context.getUniformLocation(this.program,"model");this.context.uniformMatrix4fv(B,!1,this.transformMatrix(e,t))});i(this,"setConversionMatrix",e=>{const t=this.context.getUniformLocation(this.program,"conversion");this.context.uniformMatrix4fv(t,!1,e)});i(this,"transformMatrix",(e,t)=>[2/e,0,0,0,0,-2/t,0,0,0,0,2/1,0,-1,1,0,1]);i(this,"rec709",()=>[1.16438,0,1.79274,-.97295,1.16438,-.21325,-.53291,.30148,1.16438,2.1124,0,-1.1334,0,0,0,1]);i(this,"rec601",()=>[1.16438,0,1.59603,-.87079,1.16438,-.39176,-.81297,.52959,1.16438,2.01723,0,-1.08139,0,0,0,1]);this.canvas.addEventListener("webglcontextlost",this.onContextLost),this.canvas.addEventListener("webglcontextrestored",this.onContextRestored,!1),this.canvas.style.width="100%",this.canvas.style.position="relative"}getTextRenderer(){return this.textRenderer||(this.textRenderer=new kI(this.context)),this.textRenderer}};i(BU,"SQUARE_VERTICES",new Float32Array([0,0,0,1,1,0,1,1]));let _s=BU;const mn=class mn{constructor(A,e,t,B){i(this,"oldTimestampLimit",400);i(this,"pool");i(this,"logger");i(this,"videoRenderer",new _s);i(this,"renderQueue",[]);i(this,"clockSource");i(this,"isFirstFrame",!0);i(this,"animationFrameRequest");i(this,"renderedFrameCount",0);i(this,"rendererDroppedFrameCount",0);i(this,"renderTargetSize");i(this,"load",()=>{this.videoRenderer.load()});i(this,"unload",()=>(this.stopRender(),this.videoRenderer.unload(),Promise.resolve()));i(this,"suspend",()=>{this.renderQueue=[],this.stopRender()});i(this,"unsuspend",()=>{this.animationFrameRequest=requestAnimationFrame(this.render)});i(this,"element",()=>this.videoRenderer.canvas);i(this,"getStatistics",()=>({renderedFrameCount:this.renderedFrameCount,rendererDroppedFrameCount:this.rendererDroppedFrameCount,contextLostCount:0,contextRestoredCount:0}));i(this,"resetSize",()=>{this.videoRenderer.resetSize()});i(this,"setActiveCues",(A,e)=>{this.videoRenderer.getTextRenderer().setActiveCues(A,e)});i(this,"onDecodedFrame",A=>{if(A.type==="video")if(this.isFirstFrame)this.isFirstFrame=!1,requestAnimationFrame(()=>{this.renderSample(A)});else{const e=(this.clockSource.currentTime-this.oldTimestampLimit)/1e3;this.renderQueue=this.renderQueue.filter(t=>{const B=t.timestamp/t.timescale,F=A.timestamp/A.timescale,n=B>e&&B<=F;return n||this.pool.reclaim(t.buffer),n}),this.renderQueue.push(A)}});i(this,"render",()=>{const A=this.clockSource.currentTime;let e=this.renderQueue[0],t,B=0;for(;e&&e.timestamp/e.timescale*1e3<=A;)e=this.renderQueue.shift(),e&&(B++,t&&this.pool.reclaim(t.buffer),t=e),e=this.renderQueue[0];t&&this.renderSample(t),this.rendererDroppedFrameCount+=Math.max(B-1,0),this.animationFrameRequest=requestAnimationFrame(this.render)});i(this,"renderSample",A=>{this.renderedFrameCount++,this.videoRenderer.render(A,this.renderTargetSize),this.pool.reclaim(A.buffer)});i(this,"stopRender",()=>{this.animationFrameRequest&&cancelAnimationFrame(this.animationFrameRequest)});this.logger=A,this.clockSource=e,this.pool=t,this.renderTargetSize=B||this.videoRenderer.canvas}};i(mn,"create",(A,e,t,B)=>new mn(A,e,t,B));let KF=mn;const Wn=class Wn{constructor(A,e,t,B,F){i(this,"logger");i(this,"emitter");i(this,"audioPlayer");i(this,"videoPlayer");i(this,"pool");i(this,"unmuter",new SI);i(this,"_isPaused",!1);i(this,"isDisconnected",!1);i(this,"timers",new mA);i(this,"textTracks",new al);i(this,"playbackRate");i(this,"reset",()=>{});i(this,"load",()=>{this.audioPlayer.useDefaultDestination(),this.emitter.on("decoded frame",this.onDecodedFrame),this.emitter.on("flush buffers",this.flushBuffers),this.videoPlayer.load(),this.timers.setInterval(()=>{if(!this.textTracks.language)return;const A=this.textTracks.getActiveCues(this.currentTime/1e3);this.videoPlayer.setActiveCues(A,{width:this.videoPlayer.element().clientWidth,height:this.videoPlayer.element().clientHeight})},100)});i(this,"unload",()=>{this.emitter.off("decoded frame",this.onDecodedFrame),this.emitter.off("flush buffers",this.flushBuffers),this.audioPlayer.unload(),this.videoPlayer.unload(),this.timers.unload()});i(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});i(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});i(this,"element",()=>this.videoPlayer.element());i(this,"getStatistics",()=>this.videoPlayer.getStatistics());i(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});i(this,"activateAudioPlayer",()=>(this.isDisconnected&&(this.isDisconnected=!1,this.audioPlayer.useDefaultDestination()),this._isPaused=!1,this.unmuter.unmute(),this.audioPlayer.play()));i(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",fo(!1,e))}this.videoPlayer.onDecodedFrame(A)});this.logger=e,this.emitter=A,this.pool=t,this.audioPlayer=XF.create(this.logger.createContext("AudioPlayerModule"),B,{muted:F,reInitWhenStuck:!0}),this.audioPlayer.on("stuck",()=>{this.isDisconnected=!0}),this.audioPlayer.on("state change",()=>{this.emitter.emit("volume state",{volume:this.volume,isMuted:this.muted})}),this.videoPlayer=KF.create(this.logger.createContext("VideoPlayerModule"),this.audioPlayer,this.pool)}get volume(){return this.audioPlayer.volume}set volume(A){this.audioPlayer.volume=A}get muted(){return this.audioPlayer.muted}set muted(A){const e=this.muted;this.audioPlayer.muted=A,!A&&e&&this.activateAudioPlayer().catch(V)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.audioPlayer.isActivated}set isActivated(A){this.audioPlayer.isActivated=A}get seekTime(){return this.audioPlayer.seekTime}get isPaused(){return this._isPaused}get isSeeking(){return this.audioPlayer.isSeeking}get audioNode(){return this.audioPlayer.audioNode}play(){this.activateAudioPlayer().then(()=>{this.emitter.emit("media element state","playing")}).catch(()=>{this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})})}pause(){this._isPaused=!0,this.audioPlayer.pause(),this.emitter.emit("media element state","paused")}};i(Wn,"create",(A,e,t,B,F)=>new Wn(A,e,t,B,F));let $s=Wn;const pn=class pn{constructor(A,e,t,B,{muted:F,type:n,poster:s}){i(this,"logger");i(this,"emitter");i(this,"mediaElement");i(this,"audioPlayer");i(this,"videoPlayer");i(this,"pool");i(this,"isDisconnected",!0);i(this,"_userProvidedMuted",!1);i(this,"timers",new mA);i(this,"volumeState");i(this,"textTracks",new al);i(this,"reset",()=>{});i(this,"load",()=>{this.mediaElement.load(),this.emitter.on("decoded frame",this.onDecodedFrame),this.emitter.on("flush buffers",this.flushBuffers),this.emitter.on("ios-hack: reset size",this.resetCanvasSize),this.emitter.on("enter picture in picture",this.onEnterIOSHack),this.emitter.on("exit picture in picture",this.onExitIOSHack),this.element().element.addEventListener("webkitendfullscreen",this.onExitIOSHack),this.element().element.addEventListener("webkitbeginfullscreen",this.onEnterIOSHack),this.videoPlayer.load(),this.timers.setInterval(()=>{if(!this.textTracks.language)return;const A=this.textTracks.getActiveCues(this.currentTime/1e3);this.videoPlayer.setActiveCues(A,{width:this.mediaElement.element.clientWidth,height:this.mediaElement.element.clientHeight})},100)});i(this,"unload",()=>{this.emitter.off("decoded frame",this.onDecodedFrame),this.emitter.off("flush buffers",this.flushBuffers),this.emitter.off("ios-hack: reset size",this.resetCanvasSize),this.emitter.off("enter picture in picture",this.onEnterIOSHack),this.emitter.off("exit picture in picture",this.onExitIOSHack),this.element().element.removeEventListener("webkitendfullscreen",this.onExitIOSHack),this.element().element.removeEventListener("webkitbeginfullscreen",this.onEnterIOSHack),this.mediaElement.unload(),this.timers.unload(),this.audioPlayer.unload(),this.videoPlayer.unload()});i(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});i(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});i(this,"element",()=>this.mediaElement);i(this,"getStatistics",()=>this.videoPlayer.getStatistics());i(this,"activateAudioPlayer",()=>(this.isDisconnected&&this.connectStreams(),this.audioPlayer.play()));i(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});i(this,"resetCanvasSize",()=>{this.videoPlayer.resetSize()});i(this,"onEnterIOSHack",()=>{this.mediaElement._iosHackEnterPiPMode()});i(this,"onExitIOSHack",()=>{this.mediaElement._iosHackExitPiPMode()});i(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",fo(!1,e))}this.videoPlayer.onDecodedFrame(A)});i(this,"connectStreams",()=>{const A=this.videoPlayer.element().captureStream(),e=this.audioPlayer.useMediaStreamDestination().stream,t=[];t.push(...A.getTracks(),...e.getTracks()),this.mediaElement.element.srcObject=new MediaStream(t),this.isDisconnected=!1});i(this,"updateVolumeState",()=>{const A={isMuted:this.muted,volume:this.volume};Zt(A,this.volumeState)||(this.volumeState=A,this.emitter.emit("volume state",this.volumeState))});this.logger=e,this.emitter=A,this.pool=t,this._userProvidedMuted=F,this.mediaElement=new bs({poster:s,type:n,muted:F,autoplay:!1,logger:this.logger.createContext("MediaElement")}),this.mediaElement.on("volume state",a=>{this.updateVolumeState(),!a.isMuted&&!this.audioPlayer.isContextRunning&&this.activateAudioPlayer().catch(V),a.isMuted||(this._userProvidedMuted=!1)}),this.mediaElement.on("media element state",a=>{a==="paused"&&this.audioPlayer.flushBuffer(),this.emitter.emit("media element state",a)}),this.audioPlayer=XF.create(this.logger.createContext("AudioPlayerModule"),B,{muted:!1,reInitWhenStuck:!1}),this.audioPlayer.on("stuck",()=>{this.isDisconnected=!0}),this.audioPlayer.on("state change",a=>{a==="suspended"||a==="interrupted"?this.mediaElement.muted=!0:a==="running"&&(this.mediaElement.muted=this._userProvidedMuted||document.visibilityState==="hidden"),this.updateVolumeState()}),this.videoPlayer=KF.create(this.logger.createContext("VideoPlayerModule"),this.audioPlayer,this.pool,this.mediaElement.element),this.volumeState={volume:this.volume,isMuted:this.muted}}get volume(){return this.mediaElement.volume}set volume(A){this.mediaElement.volume=A}get muted(){return this.mediaElement.muted||this.audioPlayer.muted}set muted(A){const e=this.muted;this._userProvidedMuted=A,this.mediaElement.muted=A,!A&&e&&this.activateAudioPlayer().catch(V)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.mediaElement.isActivated}set isActivated(A){this.mediaElement.isActivated=A}get seekTime(){return this.mediaElement.seekTime}get isPaused(){return this.mediaElement.isPaused}get isSeeking(){return this.mediaElement.isSeeking}get audioNode(){return this.audioPlayer.audioNode}play(){const A=this._userProvidedMuted;return this.activateAudioPlayer().catch(()=>{A||this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})}),this.mediaElement.play()}pause(){this.mediaElement.pause()}};i(pn,"create",(A,e,t,B,F)=>new pn(A,e,t,B,F));let Aa=pn;const NI=()=>Q=>Il(Q.buffered.start(0),Q.buffered.end(Q.buffered.length-1)),Il=(Q,A)=>e=>e.remove(Math.max(0,Q),Math.min(Number.POSITIVE_INFINITY,A)),cl=Q=>A=>A.appendBuffer(Q),mI=Q=>A=>A.changeType(Q),WI=Q=>A=>Q(A);class pI{constructor(A){i(this,"commandQueue",[]);i(this,"sourceBuffer");i(this,"currentInit");i(this,"handleQueue",()=>{var A;this.sourceBuffer.updating||(A=this.commandQueue.shift())==null||A.execute(this.sourceBuffer)});i(this,"appendBuffer",(A,e)=>new Promise((t,B)=>{if(e&&this.currentInit!==e){const n=new HQ(cl(e),t,B);this.commandQueue.push(n),this.currentInit=e}const F=new HQ(cl(A),t,B);this.commandQueue.push(F),this.handleQueue()}));i(this,"execute",A=>new Promise((e,t)=>{const B=new HQ(WI(A),e,t);this.commandQueue.push(B),this.handleQueue()}));i(this,"buffered",()=>this.sourceBuffer.buffered);i(this,"removeFromMediaSource",A=>{A.removeSourceBuffer(this.sourceBuffer)});i(this,"changeType",A=>new Promise((e,t)=>{const B=new HQ(mI(A),e,t);this.commandQueue.push(B),this.handleQueue()}));i(this,"removeBuffer",(A,e)=>new Promise((t,B)=>{const F=new HQ(Il(A,e),t,B);this.commandQueue.push(F),this.handleQueue()}));i(this,"flush",()=>new Promise((A,e)=>{const t=new HQ(NI,A,e);this.commandQueue.push(t),this.handleQueue()}));this.sourceBuffer=A,this.sourceBuffer.addEventListener("updateend",this.handleQueue)}}class Cl extends $A{constructor(){super();i(this,"MediaSource",se());i(this,"mediaSource",new this.MediaSource);i(this,"isOpen",()=>this.mediaSource.readyState==="open");i(this,"isClosed",()=>this.mediaSource.readyState==="closed");i(this,"isEnded",()=>this.mediaSource.readyState==="ended");i(this,"createObjectURL",()=>URL.createObjectURL(this.mediaSource));i(this,"attach",e=>{const t=e;if("srcObject"in t)try{t.srcObject=this.mediaSource}catch(B){if(B instanceof Error&&B.name!=="TypeError")throw B;t.src=this.createObjectURL()}else e.src=this.createObjectURL()});i(this,"detach",e=>{if(this.mediaSource&&this.mediaSource.readyState==="open")try{this.mediaSource.endOfStream()}catch(t){}e.srcObject&&(e.srcObject=null),e.src!==""&&(URL.revokeObjectURL(e.src),e.removeAttribute("src")),e.load()});i(this,"addSourceBuffer",e=>{const t=this.mediaSource.addSourceBuffer(e);return new pI(t)});i(this,"removeSourceBuffer",e=>{e.removeFromMediaSource(this.mediaSource)});i(this,"endOfStream",e=>{this.mediaSource.endOfStream(e)});i(this,"onSourceOpen",()=>{this.setDurationIfNeeded(),this.emit("source open")});i(this,"onSourceEnded",()=>this.emit("source ended"));i(this,"onSourceClosed",()=>this.emit("source close"));i(this,"setDurationIfNeeded",()=>{if(Number.isNaN(this.mediaSource.duration)&&this.mediaSource.readyState==="open"){for(let e=0;e<this.mediaSource.sourceBuffers.length;e++){const t=this.mediaSource.sourceBuffers[e];if(t!=null&&t.updating)return}this.mediaSource.duration=Number.POSITIVE_INFINITY}});this.mediaSource.addEventListener("sourceopen",this.onSourceOpen),this.mediaSource.addEventListener("sourceclose",this.onSourceClosed),this.mediaSource.addEventListener("sourceended",this.onSourceEnded)}}i(Cl,"isTypeSupported",e=>{var t,B;return(B=(t=se())==null?void 0:t.isTypeSupported(e))!=null?B:!1});class Rl{constructor(){i(this,"initSegments",new Map);i(this,"set",(A,e,t)=>{var F;const B=(F=this.initSegments.get(A))!=null?F:new Map;B.set(e,t),this.initSegments.set(A,B)});i(this,"get",(A,e)=>{var t;return(t=this.initSegments.get(A))==null?void 0:t.get(e)})}}function DI(Q,{mediaSource:A,mimeType:e}){return K(h({},Q),{state:"initialized",mimeType:e,sourceBuffer:A.addSourceBuffer(e),isWorkingOnPendingSamples:!1,sequenceNumber:0,lastBufferCleanupTime:Date.now()})}function hl({initSegments:Q,pendingSamples:A}){return{state:"uninitialized",initSegments:Q!=null?Q:new Rl,sequenceNumber:0,isWorkingOnPendingSamples:!1,hasFirstSync:!!A,pendingSamples:A!=null?A:[],consecutiveQuotaExceededErrorCount:0,successfulAppendCalls:0}}const Dn=class Dn{constructor(A,e,t){i(this,"maxChunkSize",20);i(this,"minConsecutiveErrorsBeforeEmit",5);i(this,"maxSecondsInBuffer",60);i(this,"logger");i(this,"timers",mA.create());i(this,"emitter");i(this,"mediaElement");i(this,"mediaSource",new Cl);i(this,"trackContexts",new Map);i(this,"autoRecoverFromMediaErrors",!0);i(this,"quotaErrorCount",0);i(this,"recoveredFromErrorCount",0);i(this,"sourceOpenStartTime",Date.now());i(this,"sourceOpenEndTime",Date.now());i(this,"pendingTracksToAddSourceBuffers");i(this,"hasAddedInitialPosterFrame",!0);i(this,"load",()=>{this.emitter.on("init segment",this.init),this.emitter.on("coded sample",this.onCodedSample),this.emitter.on("flush buffers",this.flushBuffers),this.emitter.on("fragment",this.onFragment)});i(this,"unload",()=>{this.logger.debug("Unloading module..."),this.emitter.off("init segment",this.init),this.emitter.off("coded sample",this.onCodedSample),this.emitter.off("flush buffers",this.flushBuffers),this.emitter.off("fragment",this.onFragment),this.mediaSource.off("source ended",this.onSourceEnded),this.mediaSource.off("source open",this.onSourceOpen),this.mediaSource.detach(this.mediaElement),this.trackContexts.forEach(A=>A.pendingSamples=[]),this.timers.unload(),this.logger.debug("Unloaded module")});i(this,"getStatistics",()=>{var e,t,B,F;const A={quotaErrorCount:this.quotaErrorCount,mediaSourceOpenTime:this.sourceOpenEndTime-this.sourceOpenStartTime,successfulAudioAppendsCalls:(e=this.trackContexts.get("audio"))==null?void 0:e.successfulAppendCalls,successfulVideoAppendCalls:(t=this.trackContexts.get("video"))==null?void 0:t.successfulAppendCalls};if(this.mediaElement instanceof HTMLVideoElement){const n=(F=(B=this.mediaElement).getVideoPlaybackQuality)==null?void 0:F.call(B);A.totalVideoFrames=n==null?void 0:n.totalVideoFrames,A.droppedVideoFrames=n==null?void 0:n.droppedVideoFrames}return A});i(this,"flushBuffers",()=>{this.trackContexts.forEach(A=>{A.pendingSamples=[],A.hasFirstSync=!1,A.state!=="uninitialized"&&this.mediaSource.isOpen()&&A.sourceBuffer.removeBuffer(0,Number.POSITIVE_INFINITY).catch(e=>{this.logger.error("Failed to remove buffer",e)})})});i(this,"setTrackContexts",(A=new Map)=>{this.logger.debug("setTrackContexts"),["audio","video"].forEach(t=>{var n,s,a,d;const B=(s=(n=A.get(t))==null?void 0:n.pendingSamples)!=null?s:[],F=(a=A.get(t))==null?void 0:a.initSegments;for(;B.length>0&&!((d=B[0])!=null&&d.isSync);)B.shift();this.trackContexts.set(t,hl({pendingSamples:B,initSegments:F}))})});i(this,"setSourceBuffers",A=>r(this,null,function*(){if(this.mediaSource.isClosed()){this.pendingTracksToAddSourceBuffers=A;return}let e=!0;for(const t of A){const B=this.trackContexts.get(t.type);if(!B||B.state==="uninitialized"||B.mimeType!==t.mimeType){e=!1;break}}if(e){this.logger.debug("Already setup with the correct mime types");return}for(const t of A){let B=this.trackContexts.get(t.type);B||(B=hl({pendingSamples:[],initSegments:new Rl}),this.trackContexts.set(t.type,B)),B.state==="initialized"?t.mimeType!==B.mimeType&&(yield B.sourceBuffer.changeType(t.mimeType)):this.trackContexts.set(t.type,DI(B,{mimeType:t.mimeType,mediaSource:this.mediaSource}))}}));i(this,"getBuffer",A=>{const e=[];if(this.mediaSource.isClosed())return[];const t=this.trackContexts.get(A);if(!t||t.state==="uninitialized")return[];try{const B=t.sourceBuffer.buffered();if(!B)return[];for(let F=0;F<B.length;F++)e.push({start:B.start(F)*1e3,end:B.end(F)*1e3});return e}catch(B){return[]}});i(this,"init",({initSegment:A,mimeType:e})=>{this.logger.debug("Added init segment",{channel:A.channelId,renditionId:A.renditionId});const t=this.trackContexts.get(A.type);if(!t)throw SF(A.type,A.renditionId);t.state==="initialized"&&(t.mimeType=e);const B=Mg(A.codec,A.data,A.timescale);B&&t.initSegments.set(A.channelId,A.renditionId,B)});i(this,"append",(A,e)=>r(this,null,function*(){var s;const t=A[0];if(!t)return;const B=this.trackContexts.get(t.type),F=B==null?void 0:B.initSegments.get(t.channelId,t.renditionId);if(this.mediaSource.isClosed())return;if(!F)throw tE(t.renditionId,t.channelId);if(!B)throw SF(t.type,t.renditionId);if(B.state==="uninitialized")throw Mo(t.type,t.renditionId);if(e){const a=(t.timestamp+((s=t.compositionTimeOffset)!=null?s:0))/t.timescale;yield B.sourceBuffer.removeBuffer(a,Number.POSITIVE_INFINITY);const d=B.previousSample;if(d&&d.codec!==t.codec&&B.sourceBuffer.changeType)try{yield B.sourceBuffer.changeType(B.mimeType)}catch(E){}yield B.sourceBuffer.appendBuffer(F)}const n=Math.max(0,t.timestamp/t.timescale-this.maxSecondsInBuffer);n>0&&Date.now()-B.lastBufferCleanupTime>1e4&&(B.lastBufferCleanupTime=Date.now(),yield B.sourceBuffer.removeBuffer(0,n+10));try{let a=B.sequenceNumber;const d=Xg(A,a++);yield B.sourceBuffer.appendBuffer(d),B.sequenceNumber=a,B.consecutiveQuotaExceededErrorCount=0,B.successfulAppendCalls++}catch(a){throw a instanceof DOMException&&(a.code===DOMException.QUOTA_EXCEEDED_ERR?(this.quotaErrorCount++,B.consecutiveQuotaExceededErrorCount++,this.logger.error("quota exceeded error",{error:a}),B.pendingSamples.unshift(...A)):this.mediaElement.error&&B.pendingSamples.unshift(...A)),a}}));i(this,"onFragment",({fragment:A})=>{const e=A.mediaType();if(!e)return;const t=this.trackContexts.get(e);if(!t)throw SF(e);if(!this.mediaSource.isClosed()){if(t.state==="uninitialized")throw Mo(e);t.sourceBuffer.appendBuffer(A.rawBytes(),A.header().rawBytes()).catch(B=>console.log(B))}});i(this,"onCodedSample",A=>{if(A.duration===0)return;const e=this.trackContexts.get(A.type);if(!e)throw SF(A.type,A.renditionId);if(!(!e.hasFirstSync&&!A.isSync)){if(this.hasAddedInitialPosterFrame&&A.isSync&&A.type==="video"){this.hasAddedInitialPosterFrame=!1;const t=h({},A);t.timestamp=0,e.pendingSamples.push(t)}e.hasFirstSync=!0,e.pendingSamples.push(A),e.state!=="uninitialized"&&(e.isWorkingOnPendingSamples||ZI(e,this.append,this.maxChunkSize).catch(t=>{if(e.isWorkingOnPendingSamples=!1,t instanceof Error){if(this.logger.error("append failed",{message:t.message,name:t.name}),t instanceof DOMException&&t.code===DOMException.QUOTA_EXCEEDED_ERR){if(e.consecutiveQuotaExceededErrorCount>=this.minConsecutiveErrorsBeforeEmit){const B=Go(!1,t,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",B)}}else{const B=Go(!1,t,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",B)}this.mediaElement.error&&this.onSourceEnded()}}))}});i(this,"onSourceOpen",()=>{this.logger.debug("source opened"),this.sourceOpenEndTime=Date.now(),this.pendingTracksToAddSourceBuffers&&(this.setSourceBuffers(this.pendingTracksToAddSourceBuffers),this.pendingTracksToAddSourceBuffers=void 0)});i(this,"onSourceEnded",()=>{const{error:A}=this.mediaElement;if(A){const e=/AUDIO_RENDERER/.test(A.message)||!this.autoRecoverFromMediaErrors,t=eE(e,A);if(this.logger.error("MediaElement error",{error:t}),this.emitter.emit("error",t),!t.isFatal()){this.logger.info("Re-opening MediaSource"),this.emitter.emit("recovered from media error",{error:t,count:this.recoveredFromErrorCount}),this.recoveredFromErrorCount++;const B=!this.mediaElement.paused,F=[];this.trackContexts.forEach((n,s)=>{n.state==="initialized"&&F.push({type:s,mimeType:n.mimeType})}),this.sourceOpenStartTime=Date.now(),this.pendingTracksToAddSourceBuffers=F,this.mediaElement.src="",this.setTrackContexts(this.trackContexts),this.mediaSource.attach(this.mediaElement),B&&this.mediaElement.play().catch(V)}}this.logger.debug("source ended")});this.logger=A,this.mediaElement=t,this.emitter=e}};i(Dn,"create",(A,e,t)=>{const B=new Dn(A,e,t);return B.setTrackContexts(),B.mediaSource.on("source ended",B.onSourceEnded),B.mediaSource.on("source open",B.onSourceOpen),B.mediaSource.attach(t),B});let ea=Dn;const Sl=(Q,A)=>{var s;const e=Q.renditionId!==A.renditionId,t=Q.channelId!==A.channelId,B=((s=Q.timestamp)!=null?s:0)>A.timestamp,F=Q.type==="video"&&A.type==="video"&&Q.levelIdc!==A.levelIdc;let n=!1;return Q.type==="video"&&A.type==="video"&&(n=A.width!==Q.width||A.height!==Q.height),t||e||B||n||F},ZI=(Q,A,e)=>r(this,null,function*(){for(Q.isWorkingOnPendingSamples=!0;Q.pendingSamples.length>0;){const t=[];let B=0;for(let s=0;s<Q.pendingSamples.length;s++){B=s;const a=Q.pendingSamples[s],d=Q.pendingSamples[s+1];if(a&&(t.push(a),d)){if(Sl(a,d))break;const E=(a.timestamp+a.duration)/a.timescale;if(d.timestamp/d.timescale-E>.1)break}if(s===e-1)break}const F=t[0];if(!F)break;const n=Q.previousSample?Sl(Q.previousSample,F):!0;yield A(t,n),Q.pendingSamples=Q.pendingSamples.slice(B+1),Q.previousSample=t[t.length-1]}Q.isWorkingOnPendingSamples=!1}),Zn=class Zn{constructor(A,e){i(this,"logger");i(this,"emitter");i(this,"element");i(this,"pictureInPictureWindow");i(this,"unload",()=>{this.emitter.off("add picture in picture listener",this.onEnablePictureInPicture)});i(this,"onEnablePictureInPicture",A=>{this.element=A.element,A.element.addEventListener("leavepictureinpicture",()=>{this.pictureInPictureWindow=void 0,this.logger.debug("Leave picture in picture"),this.emitter.emit("exit picture in picture")}),A.element.addEventListener("enterpictureinpicture",e=>{this.pictureInPictureWindow=e.pictureInPictureWindow,this.logger.debug("Enter picture in picture"),this.emitter.emit("enter picture in picture",this)}),A.element.autopictureinpicture=!0});i(this,"getPictureInPictureSize",()=>this.pictureInPictureWindow);i(this,"isPictureInPictureActive",()=>this.isWebkitPresentationModeActive()||this.isStandardPictureInPictureActive());i(this,"isPictureInPictureSupported",()=>this.isWebkitPresentationModeSupported()||this.isStandardPictureInPictureSupported());i(this,"requestPictureInPicture",()=>(this.emitter.emit("ios-hack: reset size"),this.isStandardPictureInPictureSupported()?this.requestStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("picture-in-picture"):Promise.reject(new Error("Picture in picture is not supported"))));i(this,"exitPictureInPicture",()=>this.isStandardPictureInPictureSupported()?this.exitStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("inline"):Promise.reject(new Error("Picture in picture is not supported")));i(this,"getStatistics",()=>({isPictureInPictureActive:this.isPictureInPictureActive()}));i(this,"requestStandardPictureInPicture",()=>r(this,null,function*(){return yield this.element.requestPictureInPicture()}));i(this,"exitStandardPictureInPicture",()=>r(this,null,function*(){return yield document.exitPictureInPicture()}));i(this,"isStandardPictureInPictureSupported",()=>!!this.element&&!!this.element.requestPictureInPicture&&!!document.pictureInPictureEnabled);i(this,"isStandardPictureInPictureActive",()=>!!this.element&&!!document.pictureInPictureElement);i(this,"isWebkitPresentationModeActive",()=>!!this.element&&this.element.webkitPresentationMode==="picture-in-picture");i(this,"requestWebkitPresentationMode",A=>r(this,null,function*(){return this.element.webkitSetPresentationMode(A),Promise.resolve()}));i(this,"isWebkitPresentationModeSupported",()=>!!this.element&&!!this.element.webkitSetPresentationMode);this.emitter=A,this.logger=e,this.emitter.on("add picture in picture listener",this.onEnablePictureInPicture)}};i(Zn,"create",(A,e)=>new Zn(A,e));let ta=Zn;const wn=class wn{constructor(A,e,t,B){i(this,"emitter");i(this,"logger");i(this,"clockSource");i(this,"state","buffering");i(this,"bufferFullness",0);i(this,"targetBufferTime");i(this,"lastBufferStateEvent","drained");i(this,"firstFrameTime");i(this,"currentTimeIsInRange",!1);i(this,"needsInputForAudioCount",0);i(this,"needsInputForVideoCount",0);i(this,"unload",()=>{this.emitter.off("buffer state",this.onBufferedStateChanged),this.emitter.off("needs user input",this.onNeedsUserInput)});i(this,"setTargetBufferTime",A=>void(this.targetBufferTime=A));i(this,"getTargetBufferTime",()=>this.targetBufferTime);i(this,"getBufferFullness",()=>this.bufferFullness);i(this,"getLastBufferStateEvent",()=>this.lastBufferStateEvent);i(this,"getState",()=>this.state);i(this,"getFirstFrameTime",()=>this.firstFrameTime);i(this,"getStatistics",()=>({bufferTime:this.targetBufferTime,needsInputForAudioCount:this.needsInputForAudioCount,needsInputForVideoCount:this.needsInputForVideoCount}));i(this,"onBufferedStateChanged",({buffered:A,isPaused:e})=>{const t=this.clockSource.currentTime,B=A.some(E=>E.start<t&&t<E.end),F=A[A.length-1],n=F?F.end-F.start>=this.targetBufferTime:!1,s=F?Math.max(0,F.end-t)/this.targetBufferTime:0,a=e?"paused":B?"playing":"buffering",d=this.state;this.currentTimeIsInRange!==B&&!B?(this.lastBufferStateEvent="drained",this.emitter.emit("buffer state event",this.lastBufferStateEvent)):B&&n&&this.lastBufferStateEvent==="drained"&&(this.lastBufferStateEvent="filled",this.emitter.emit("buffer state event",this.lastBufferStateEvent)),a==="playing"&&!this.firstFrameTime&&(this.firstFrameTime=Date.now()),this.currentTimeIsInRange=B,this.state=a,this.bufferFullness=B?s:0,d!==a&&this.emitter.emit("playback state",a),this.emitter.emit("buffer fullness",this.bufferFullness)});i(this,"onNeedsUserInput",({forAudio:A,forVideo:e})=>{A&&this.needsInputForAudioCount++,e&&this.needsInputForVideoCount++});this.emitter=A,this.logger=e,this.clockSource=t,this.targetBufferTime=B,this.emitter.on("buffer state",this.onBufferedStateChanged),this.emitter.on("needs user input",this.onNeedsUserInput)}};i(wn,"create",(A,e,t,B)=>new wn(A,e,t,B));let Qa=wn;const ia=()=>({upgradesFromLevel:[],downgradesFromLevel:[],bufferingRanges:[],activeRanges:[],decodeRate:Number.MAX_SAFE_INTEGER}),wI=()=>({levels:{},levelDowngrades:[],levelUpgrades:[],bufferFullness:0,general:ia()}),Tn=class Tn{constructor(A,e){i(this,"minBufferFullnessLengthForRegression",6);i(this,"logger");i(this,"emitter");i(this,"timers",mA.create());i(this,"metrics",wI());i(this,"bufferFullness",new D(30));i(this,"bufferFullnessRegression");i(this,"currentLevel");i(this,"isSuspended",!1);i(this,"_fatalQosCount",0);i(this,"hasAsserted",!1);i(this,"load",()=>{this.emitter.on("playback state",this.onPlaybackState),this.emitter.on("buffer fullness",this.onBufferFullness),this.emitter.on("rendition level changed",this.onRenditionLevelChanged),this.emitter.on("video decode rate",this.onVideoDecodeRate)});i(this,"unload",()=>{this.emitter.off("playback state",this.onPlaybackState),this.emitter.off("buffer fullness",this.onBufferFullness),this.emitter.off("rendition level changed",this.onRenditionLevelChanged),this.emitter.off("video decode rate",this.onVideoDecodeRate),this.suspend()});i(this,"suspend",()=>{this.isSuspended=!0,this.timers.unload(),this.stopBuffering(),this.unsetActive()});i(this,"unsuspend",()=>{this.isSuspended=!1,this.currentLevel&&this.setActive()});i(this,"fatalQosGraceTime",()=>1e4*(this.fatalQosCount+1));i(this,"incrementFatalQosCount",()=>{this._fatalQosCount++});i(this,"getMetrics",()=>this.metrics);i(this,"getLevelStats",A=>{var t,B,F,n;const e=((B=(t=A.video)==null?void 0:t.bitRate)!=null?B:0)+((n=(F=A.audio)==null?void 0:F.bitRate)!=null?n:0);return this.metrics.levels[e]});i(this,"getBufferFullnessRegression",()=>this.bufferFullnessRegression);i(this,"activeRatios",()=>{const A=new Map,e=XQ(this.metrics.general.activeRanges);if(Object.entries(this.metrics.levels).forEach(([t,B])=>{A.set(t,e?XQ(B.activeRanges)/e:0)}),!this.hasAsserted){const t=A.size?Math.abs(Array.from(A.values()).reduce((B,F)=>B+F,0)-1)<=.02:!0;t||(this.hasAsserted=!0,console.assert(t,`Active ratios should be close to 1 - actual: ${Array.from(A.values()).reduce((B,F)=>B+F,0)}`))}return A});i(this,"bufferingRatios",()=>{const A=new Map,e=XQ(this.metrics.general.bufferingRanges);if(Object.entries(this.metrics.levels).forEach(([t,B])=>{A.set(t,e?XQ(B.bufferingRanges)/e:0)}),!this.hasAsserted){const t=Array.from(A.values()).reduce((B,F)=>B+F,0)<=1;t||(this.hasAsserted=!0,console.assert(t,`Buffering ratios should be less than 1 - actual: ${Array.from(A.values()).reduce((B,F)=>B+F,0)}`))}return A});i(this,"bufferingEventsLast",A=>this.metrics.general.bufferingRanges.filter(e=>e.start>=Date.now()-A).length);i(this,"timeSpentBufferingLast",A=>Eo(this.metrics.general.bufferingRanges,A));i(this,"timeSpentActiveLast",A=>Eo(this.metrics.general.activeRanges,A));i(this,"timeSpentPlayingInAtLeastLevelRatio",A=>{var a,d,E,g;const e=this.timeSpentBuffering(),t=this.timeActive(),B=this.bufferingRatios(),F=this.activeRatios(),n=((d=(a=A.video)==null?void 0:a.bitRate)!=null?d:0)+((g=(E=A.audio)==null?void 0:E.bitRate)!=null?g:0),s=e/t;return Object.keys(this.metrics.levels).map(c=>parseInt(c,10)).filter(c=>c>=n).reduce((c,S)=>{var u,p;return((u=F.get(S.toString()))!=null?u:0)-((p=B.get(S.toString()))!=null?p:0)*s+c},0)});i(this,"timeSpentBuffering",()=>XQ(this.metrics.general.bufferingRanges));i(this,"timeActive",()=>XQ(this.metrics.general.activeRanges));i(this,"getStatistics",()=>({timeSpentBuffering:this.timeSpentBuffering(),bufferingEventsCount:this.metrics.general.bufferingRanges.length,timeSpentRatio:[...this.activeRatios()].reduce((A,[e,t])=>(A[e]=t,A),{}),fatalQosCount:this.fatalQosCount}));i(this,"onRenditionLevelChanged",A=>{var F,n,s,a,d,E,g,c,S,u,p,G,y,Z;const e=((s=(n=(F=A.from)==null?void 0:F.video)==null?void 0:n.bitRate)!=null?s:0)+((E=(d=(a=A.from)==null?void 0:a.audio)==null?void 0:d.bitRate)!=null?E:0),t=((S=(c=(g=A.to)==null?void 0:g.video)==null?void 0:c.bitRate)!=null?S:0)+((G=(p=(u=A.to)==null?void 0:u.audio)==null?void 0:p.bitRate)!=null?G:0);this.logger.info("rendition level changed",{fromLevel:e,toLevel:t}),this.metrics.general.activeRanges.length===0&&this.setActive(),A.from&&A.to&&(e<t?this.metrics.general.upgradesFromLevel.push(Date.now()):this.metrics.general.downgradesFromLevel.push(Date.now()));let B=!1;if(A.from){const M=(y=this.metrics.levels[e])!=null?y:ia();e<t?M.upgradesFromLevel.push(Date.now()):M.downgradesFromLevel.push(Date.now()),wt(M.activeRanges);const v=M.bufferingRanges[M.bufferingRanges.length-1];B=!!v&&!v.end,wt(M.bufferingRanges),this.metrics.levels[e]=M}if(A.to){const M=(Z=this.metrics.levels[t])!=null?Z:ia();xQ(M.activeRanges),B&&xQ(M.bufferingRanges),this.metrics.levels[t]=M,this.currentLevel=t}});i(this,"onBufferFullness",A=>{this.bufferFullness.push(A),this.metrics.bufferFullness=A,this.bufferFullness.items().length>=this.minBufferFullnessLengthForRegression&&(this.bufferFullnessRegression=this.calculateLinearRegression())});i(this,"onPlaybackState",A=>{switch(this.logger.info("Playback state",{state:A,currentLevel:this.currentLevel}),A){case"playing":this.stopBuffering();break;case"buffering":this.isSuspended||this.startBuffering();break}});i(this,"onVideoDecodeRate",A=>{var t;if(this.metrics.general.decodeRate=A,!this.currentLevel)return;const e=this.metrics.levels[(t=this.currentLevel)!=null?t:0];e&&(e.decodeRate=A)});i(this,"calculateLinearRegression",()=>Wd(this.bufferFullness.items().map((A,e)=>({x:e,y:A}))));i(this,"stopBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&wt(A.bufferingRanges)}wt(this.metrics.general.bufferingRanges)});i(this,"startBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&xQ(A.bufferingRanges)}xQ(this.metrics.general.bufferingRanges)});i(this,"unsetActive",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&wt(A.activeRanges)}wt(this.metrics.general.activeRanges)});this.logger=e,this.emitter=A}get fatalQosCount(){return this._fatalQosCount}setActive(){if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&xQ(A.activeRanges)}xQ(this.metrics.general.activeRanges)}};i(Tn,"create",(A,e)=>new Tn(A,e));let Ba=Tn;const yn=class yn{constructor(A,e){i(this,"renditions",new Map);i(this,"renditionLevels",[]);i(this,"languages",[]);i(this,"emitter");i(this,"subscriptionSource");i(this,"renditionLevelChangeCount",0);i(this,"unload",()=>{this.emitter.off("renditions",this.onRenditions),this.emitter.off("subscription changed",this.onSubscriptionChanged)});i(this,"getRenditionLevels",A=>A?this.createRenditionLevels(A):this.renditionLevels);i(this,"getRenditionLevel",A=>{var s;const e=A!=null?A:this.getCurrentSubscription(),t=A?this.createRenditionLevels(A):this.renditionLevels;if(!e.video)return t.length?t[0]:void 0;const B=e.video.bitRate||Number.MAX_SAFE_INTEGER,F=e.video.width||Number.MAX_SAFE_INTEGER,n=e.video.height||Number.MAX_SAFE_INTEGER;return(s=t.filter(a=>a.video&&e.video?a.video.bitRate<=B&&a.video.width<=F&&a.video.height<=n:!0).pop())!=null?s:t[0]});i(this,"setRenditions",(A,e)=>{this.renditions.set(A,e)});i(this,"getLanguages",()=>this.languages);i(this,"getVideoRendition",(A,e=this.getCurrentSubscription().channelId)=>{const t=this.getRendition(A,e);if(t&&yt(t))return t});i(this,"getAudioRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(B=>bt(B))});i(this,"getVideoRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(B=>yt(B))});i(this,"getAudioRendition",(A,e=this.getCurrentSubscription().channelId)=>{const t=this.getRendition(A,e);if(t&&bt(t))return t});i(this,"getRendition",(A,e=this.getCurrentSubscription().channelId)=>{var t;return(t=this.renditions.get(e))==null?void 0:t.find(B=>B.id===A)});i(this,"getStatistics",()=>{var e,t,B,F,n,s,a,d,E,g;const A=this.getRenditionLevel();return{videoCodec:(e=A==null?void 0:A.video)==null?void 0:e.codec,audioCodec:(t=A==null?void 0:A.audio)==null?void 0:t.codec,videoRenditionId:(B=A==null?void 0:A.video)==null?void 0:B.id,audioRenditionId:(F=A==null?void 0:A.audio)==null?void 0:F.id,videoWidth:(n=A==null?void 0:A.video)==null?void 0:n.width,videoHeight:(s=A==null?void 0:A.video)==null?void 0:s.height,expectedVideoBitRate:(a=A==null?void 0:A.video)==null?void 0:a.bitRate,expectedAudioBitRate:(d=A==null?void 0:A.audio)==null?void 0:d.bitRate,frameRate:(E=A==null?void 0:A.video)==null?void 0:E.frameRate,language:(g=A==null?void 0:A.audio)==null?void 0:g.language,renditionLevelChangeCount:this.renditionLevelChangeCount}});i(this,"onRenditions",A=>{const e=this.subscriptionSource.getCurrentSubscription();this.renditions.set(A.channelId,A.renditions),this.updateRenditionLevels({to:e,from:e})});i(this,"onSubscriptionChanged",A=>{this.updateRenditionLevels(A)});i(this,"updateRenditionLevels",({to:A,from:e})=>{var d;const{channelId:t,initiator:B}=A,F=this.getRenditionLevel(e),n=new Set;((d=this.renditions.get(t))!=null?d:[]).filter(E=>E.codec!=="webvtt").forEach(E=>E.language?n.add(E.language):void 0),this.languages=Array.from(n),this.renditionLevels=this.createRenditionLevels(A);const a=this.getRenditionLevel(A);Zt(F,a)||(this.renditionLevelChangeCount++,this.emitter.emit("rendition level changed",{to:a,from:F,reason:B?"manual":"abr"}))});i(this,"createRenditionLevels",A=>{var E;const{video:e,audio:t,channelId:B}=A,F=(E=this.renditions.get(B))!=null?E:[],n=F.filter(yt).filter(g=>e&&g.codec===e.codec),s=F.filter(bt).filter(g=>t&&g.codec===t.codec&&g.language===t.language),a=Math.max(n.length,s.length),d=[];for(let g=0;g<a;g++){const c=n[Math.min(n.length-1,g)],S=s[Math.min(s.length-1,g)];d.push({audio:S,video:c})}return d});i(this,"getCurrentSubscription",()=>this.subscriptionSource.getCurrentSubscription());this.subscriptionSource=e,this.emitter=A,this.emitter.on("renditions",this.onRenditions),this.emitter.on("subscription changed",this.onSubscriptionChanged)}};i(yn,"create",(A,e)=>new yn(A,e));let Ua=yn;const RB=Q=>JSON.parse(JSON.stringify(Q)),TI=1e4,bn=class bn{constructor(A,e,t){i(this,"logger");i(this,"timers",new mA);i(this,"emitter");i(this,"targetSubscription");i(this,"currentSubscription");i(this,"_isSwitchingSubscription",!1);i(this,"pendingSubscriptionTimeoutId");i(this,"burstMs",0);i(this,"unload",()=>{this.logger.debug("Unloading module..."),this.timers.unload(),this.emitter.off("subscription changed",this.onSubscriptionChanged),this.logger.debug("Unloaded module")});i(this,"isSwitchingSubscription",()=>this._isSwitchingSubscription);i(this,"getTargetSubscription",()=>this.targetSubscription);i(this,"getCurrentSubscription",()=>this.currentSubscription);i(this,"enableBurst",A=>{this.burstMs=A});i(this,"setSize",A=>{this.targetSubscription.video.width=A.width,this.targetSubscription.video.height=A.height,this.scheduleSubscriptionChange()});i(this,"setVideoConstraint",A=>{this.targetSubscription.video=A,this.scheduleSubscriptionChange()});i(this,"setAudioConstraint",A=>{this.targetSubscription.audio=A,this.scheduleSubscriptionChange()});i(this,"setVideoBitRate",A=>{this.targetSubscription.video.bitRate=A,this.scheduleSubscriptionChange()});i(this,"setAudioBitRate",A=>{this.targetSubscription.audio.bitRate=A,this.scheduleSubscriptionChange()});i(this,"setChannelId",A=>{this.targetSubscription.channelId=A,this.scheduleSubscriptionChange()});i(this,"setLanguage",A=>{this.targetSubscription.audio.language=A,this.scheduleSubscriptionChange()});i(this,"setVideoCodec",A=>{this.targetSubscription.video.codec=A,this.scheduleSubscriptionChange()});i(this,"setAudioCodec",A=>{this.targetSubscription.audio.codec=A,this.scheduleSubscriptionChange()});i(this,"setBurst",A=>{A?this.targetSubscription.burstMs=A:delete this.targetSubscription.burstMs});i(this,"isNewSubscription",()=>{const A=["burstMs","meta","initiator","channelGroupId"];return!Zt(ro(this.currentSubscription,A),ro(this.targetSubscription,A))});i(this,"onSubscriptionChanged",({to:A,reset:e})=>{this.logger.debug("onSubscriptionChanged",{to:A,reset:e}),e?this.targetSubscription=RB(this.currentSubscription):this.currentSubscription=RB(A),this._isSwitchingSubscription=this.isNewSubscription()});i(this,"scheduleSubscriptionChange",()=>{this.targetSubscription=RB(this.targetSubscription),this._isSwitchingSubscription=this.isNewSubscription();const A=this.currentSubscription.channelId,e=this.targetSubscription.channelId,t=A!==e;this._isSwitchingSubscription&&(t&&this.burstMs?this.setBurst(this.burstMs):this.setBurst(0),this.pendingSubscriptionTimeoutId&&(this.timers.clearTimeout(this.pendingSubscriptionTimeoutId),this.pendingSubscriptionTimeoutId=void 0),t&&this.timers.setTimeout(()=>{this.currentSubscription.channelId===A&&this.targetSubscription.channelId===e&&(this.logger.warn("Channel switch timeout",e),this.targetSubscription=RB(this.currentSubscription),this.emitter.emit("channel switch timeout",e))},TI),this.pendingSubscriptionTimeoutId=this.timers.setTimeout(()=>this.emitter.emit("send signal",{type:"subscribe",subscription:this.getTargetSubscription()}),0))});this.logger=A,this.targetSubscription=e,this.currentSubscription=RB(e),this.emitter=t,this.emitter.on("subscription changed",this.onSubscriptionChanged)}};i(bn,"create",(A,e,t)=>new bn(A,t,e));let Fa=bn;const Jl=5e3,yI=()=>vQ()||hA()||XA(),Vl=()=>yI()?100:0,ul=Q=>A=>A>Q,fn=class fn{constructor(A,e,t,B,F){i(this,"emitter");i(this,"logger");i(this,"playbackSource");i(this,"bufferSource");i(this,"keyframeTimestamps",new D(10));i(this,"lastSeekTime",Date.now());i(this,"seekCooldownTime",1e3);i(this,"seekTimeoutTime",5e3);i(this,"seekKeyframeOvershoot",50);i(this,"syncMaxBehind");i(this,"syncMaxBehindMultiplierStep",1);i(this,"syncMaxBehindIncreaseEvery",2);i(this,"syncMaxBehindMaximumAllowed",2e3);i(this,"syncMaxBehindMultiplier",1);i(this,"timeshiftOnAudio",!1);i(this,"syncMaxAhead",150);i(this,"timeshiftSync",{enabled:!1,maxBehind:50,multiplier:1,maxBehindAllowed:600,overshoot:Vl(),minOvershootAllowed:Vl(),maxOvershootAllowed:500});i(this,"maxTimeSyncDifferenceTolerance",150);i(this,"timers",mA.create());i(this,"rtt",0);i(this,"channelSyncInfo",new Map);i(this,"driftAdjustmentsCount",0);i(this,"timeshiftDriftAdjustmentCount",0);i(this,"driftAdjustments",[]);i(this,"timeShiftAdjustments",[]);i(this,"timestampOffset");i(this,"currentChannelId");i(this,"highestSeenTimestamps",new Map);i(this,"isSuspended",!1);i(this,"isSyncAdjustmentActivated",!1);i(this,"load",()=>{this.timers.setInterval(this.onSync,100)});i(this,"unload",()=>{this.logger.debug("Unloading module..."),this.emitter.off("rtt",this.updateRtt),this.timers.unload(),this.logger.debug("Unloaded module")});i(this,"suspend",()=>{this.isSuspended=!0});i(this,"unsuspend",()=>{this.resetSyncState(),this.isSuspended=!1});i(this,"deactivateSyncAdjustments",()=>{this.isSyncAdjustmentActivated=!1});i(this,"activateSyncAdjustments",()=>{this.tryApplySyncInfo(0),this.lastSeekTime=Date.now(),this.isSyncAdjustmentActivated=!0});i(this,"reset",()=>{this.logger.info("Reset sync state"),this.currentChannelId=void 0,this.timestampOffset=void 0,this.resetSyncState(),this.highestSeenTimestamps.clear()});i(this,"getTimeshiftOffset",()=>{var A;return(A=this.timestampOffset)!=null?A:0});i(this,"getCurrentChannelId",()=>this.currentChannelId);i(this,"resetSyncState",()=>{this.timeshiftSync.multiplier=1,this.syncMaxBehindMultiplier=1,this.driftAdjustments=[],this.timeShiftAdjustments=[]});i(this,"getLiveEdgeTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const t=Date.now()-e.localTimestamp;return e.timestamp+t});i(this,"getLiveEdgeTimeLatencyAdjusted",A=>{const e=this.getLiveEdgeTime(A);if(e)return e+this.rtt/2});i(this,"getWallclockTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const t=Date.now()-e.localTimestamp;return e.wallclockTime+t});i(this,"getWallclockTimeLatencyAdjusted",A=>{const e=this.getWallclockTime(A);if(e)return e+this.rtt/2});i(this,"processSample",A=>{var B;if(!A.channelId)throw new Error("Sample must be assigned to a channel");this.currentChannelId||(this.currentChannelId=A.channelId),this.timestampOffset||(this.timestampOffset=A.timestamp/A.timescale*1e3-Jl);const e=A.type==="video"&&A.isSync;if(this.currentChannelId!==A.channelId){let F=Number.MAX_SAFE_INTEGER;console.assert(this.highestSeenTimestamps.size!==0,"no known timestamps"),this.highestSeenTimestamps.forEach(s=>{F=Math.min(F,s)});const n=A.timestamp/A.timescale*1e3;this.currentChannelId=A.channelId,this.timestampOffset=n-F}else(e||this.timeshiftOnAudio)&&this.tryTimeshiftSync();const t=this.timestampOffset*A.timescale/1e3;return A.timestamp-=t,e&&this.keyframeTimestamps.push(A.timestamp/A.timescale*1e3),this.highestSeenTimestamps.set(A.type,Math.max((B=this.highestSeenTimestamps.get(A.type))!=null?B:0,A.timestamp/A.timescale*1e3)),A});i(this,"processFragment",(A,e)=>{var n;this.currentChannelId||(this.currentChannelId=A);const t=e.mediaType();if(!t)throw new Error("Fragment must have a media type");this.timestampOffset||(this.timestampOffset=e.baseMediaDecodeTime()/e.timescale()*1e3-Jl);const B=e.mediaType()==="video"&&e.startsWithKeyframe();this.currentChannelId!==A?(console.assert(this.highestSeenTimestamps.size!==0,"no known timestamps"),this.highestSeenTimestamps.forEach(s=>{}),this.currentChannelId=A):(B||this.timeshiftOnAudio)&&this.tryTimeshiftSync();const F=this.timestampOffset*e.timescale()/1e3;return e.updateBaseMediaDecodeTime(e.baseMediaDecodeTime()-F),B&&this.keyframeTimestamps.push(e.baseMediaDecodeTime()/e.timescale()*1e3),this.highestSeenTimestamps.set(t,Math.max((n=this.highestSeenTimestamps.get(t))!=null?n:0,e.baseMediaDecodeTime()/e.timescale()*1e3)),e});i(this,"getStatistics",()=>({drift:this.drift,driftAdjustmentCount:this.driftAdjustmentsCount,timeshiftDriftAdjustmentCount:this.timeshiftDriftAdjustmentCount,seekTime:this.playbackSource.seekTime}));i(this,"updateRtt",A=>void(this.rtt=A));i(this,"isPlaybackSourceReadyToSeek",()=>!this.isSeeking()&&this.isSeekCooldownExpired()&&this.isSyncAdjustmentActivated);i(this,"isSeeking",()=>this.playbackSource.isSeeking?!this.isSeekTimeoutExpired():!1);i(this,"isAllowedToSync",()=>this.isPlaybackSourceReadyToSeek()&&!!this.currentChannelId&&!this.isSuspended&&!this.playbackSource.isPaused);i(this,"isSeekCooldownExpired",()=>Date.now()-this.lastSeekTime>this.seekCooldownTime);i(this,"isSeekTimeoutExpired",()=>Date.now()-this.lastSeekTime>this.seekTimeoutTime);i(this,"currentTimeshiftMaxBehind",()=>Math.min(this.timeshiftSync.maxBehind*this.timeshiftSync.multiplier,this.timeshiftSync.maxBehindAllowed));i(this,"currentSyncMaxBehind",()=>Math.min(this.syncMaxBehindMultiplier*this.syncMaxBehind,this.syncMaxBehindMaximumAllowed));i(this,"currentSyncMaxAhead",()=>this.playbackSource.seekTime>500?Math.max(this.syncMaxAhead*this.syncMaxBehindMultiplier,300):this.syncMaxAhead);i(this,"tryTimeshiftSync",()=>{var F;if(!this.timeshiftSync.enabled||!this.isAllowedToSync())return;const A=(F=this.drift)!=null?F:0;if(A>=this.syncMaxBehind)return;if(A<this.currentTimeshiftMaxBehind()){this.timeshiftSync.overshoot=0;return}if(!this.timestampOffset)return;const e=Date.now()-this.seekTimeoutTime*this.timeshiftSync.multiplier,t=this.timeShiftAdjustments.filter(ul(e)).length;if(t&&this.timeshiftSync.multiplier>2)return this.logger.debug("Too many diff timeShifts within sliding window",{timeShiftsCooldownMs:e,timeShiftsWithinCooldownTime:t}),!1;const B=A+this.timeshiftSync.overshoot;this.logger.info("Adjusting for drift using timeshift",{drift:A,syncAmount:B,currentTime:this.playbackSource.currentTime,rtt:this.rtt,overshoot:this.timeshiftSync.overshoot}),this.timestampOffset+=B,this.lastSeekTime=Date.now(),!this.playbackSource.isPaused&&(this.timeShiftAdjustments.push(this.lastSeekTime),this.timeshiftDriftAdjustmentCount++,this.timeshiftSync.multiplier++,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,Math.min(this.timeshiftSync.multiplier*A/2,this.timeshiftSync.maxOvershootAllowed)))});i(this,"onSync",()=>{var s;if(!this.isAllowedToSync())return;const A=(s=this.drift)!=null?s:0;if(A<0&&-A<this.currentSyncMaxAhead()||A>0&&A<this.currentSyncMaxBehind()||Math.abs(A)<1||!this.isSeekCooldownExpired())return;const e=Date.now()-this.seekTimeoutTime*this.syncMaxBehindMultiplier,t=this.driftAdjustments.filter(ul(e)).length;if(t&&this.syncMaxBehindMultiplier>2)return this.logger.debug("Too many diff adjustments within sliding window",{adjustmentsCooldownMs:e,adjustmentsWithinCooldownTime:t}),!1;const B=this.playbackSource.seekTime,F=this.playbackSource.currentTime+A,n=this.findKeyframeCloseToTimestamp(F);if(n||this.keyframeTimestamps.isEmpty()){const a=n?n+this.seekKeyframeOvershoot:F;if(this.logger.info("Adjusting for drift using seek",{drift:A,currentTime:this.playbackSource.currentTime,targetCurrentTime:a,seekTime:B,rtt:this.rtt}),this.lastSeekTime=Date.now(),this.driftAdjustments.push(this.lastSeekTime),this.driftAdjustmentsCount++,this.playbackSource.currentTime=a+B,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,this.timeshiftSync.overshoot/2),this.driftAdjustmentsCount%this.syncMaxBehindIncreaseEvery===0&&!this.playbackSource.isPaused){const d=this.currentSyncMaxBehind;this.syncMaxBehindMultiplier+=this.syncMaxBehindMultiplierStep,d!==this.currentSyncMaxBehind&&this.logger.info("Increasing max drift behind allowed",{from:d,to:this.currentSyncMaxBehind})}}});i(this,"findKeyframeCloseToTimestamp",A=>{const e=this.keyframeTimestamps.items();for(const t of e)if(t>=A&&t<=A+200)return t});this.logger=e,this.emitter=A,this.playbackSource=t,this.bufferSource=B,this.timeshiftSync.enabled=F,this.syncMaxBehind=this.timeshiftSync.enabled?1e3:200,this.emitter.on("rtt",this.updateRtt)}updateChannelSyncInfo(A,e){const t=Date.now(),B=this.channelSyncInfo.get(A),F=this.getLiveEdgeTime(A);if(this.isSuspended)return;if(!B||!F){this.logger.info("Initial timing info",{syncInfo:e}),this.channelSyncInfo.set(A,K(h({},e),{localTimestamp:t,timeDifferences:new D(12)}));return}const n=e.wallclockTime-B.wallclockTime,s=e.timestamp-B.timestamp,a=t-B.localTimestamp,d=s-a;if(B.timeDifferences.push(d),this.logger.debug("Timing info",{rtt:this.rtt,channelId:A,syncInfo:e,localTimestamp:t,diffFromEstimated:d,timestampDelta:s,wallclockDelta:n,localWallclockDelta:a}),Math.abs(d)>=this.bufferSource.getTargetBufferTime()*2){this.logger.info("Resetting sync info",{diffFromEstimated:d}),this.channelSyncInfo.set(A,K(h({},e),{localTimestamp:t,timeDifferences:new D(B.timeDifferences.maxSize+1)})),this.currentChannelId&&this.currentChannelId===A&&(this.reset(),this.emitter.emit("channel reset"));return}B.timeDifferences.isFull()&&this.tryApplySyncInfo(this.maxTimeSyncDifferenceTolerance)}tryApplySyncInfo(A){const e=this.getCurrentChannelId();if(!e)return;const t=this.channelSyncInfo.get(e);if(!t)return;const B=YQ(t.timeDifferences.items());Math.abs(B)>A&&(this.logger.info("Adjusting sync info",{averageDifference:B}),t.timestamp+=B,t.timeDifferences.clear())}get serverCurrentTime(){return this.channelCurrentTime-this.getTimeshiftOffset()}get channelCurrentTime(){const A=this.getCurrentChannelId();if(!A)return 0;const e=this.getLiveEdgeTime(A);return e?e-this.bufferSource.getTargetBufferTime():0}get drift(){return this.serverCurrentTime-this.playbackSource.currentTime}};i(fn,"create",(A,e,t,B,F)=>new fn(A,e,t,B,F));let na=fn;const bI={enabled:!0,interval:3e4,includeErrors:!0,includeEvents:!0,includeStats:!0,maxRetries:10,maxErrorReports:50,maxEvents:50},sa=(Q,A)=>K(h({},A),{type:Q,timestamp:new Date().toISOString(),discriminator:"web"}),Gn=class Gn{constructor(A,e,t,B){i(this,"logger");i(this,"timers",new mA);i(this,"emitter");i(this,"options");i(this,"parentContext");i(this,"unsentLines",new D(100));i(this,"retries",0);i(this,"errorCount",0);i(this,"eventCount",0);i(this,"statsCount",0);i(this,"unload",()=>{this.logger.debug("Unloading module..."),window.removeEventListener("error",this.onError),window.removeEventListener("unhandledrejection",this.onRejection),this.timers.unload(),this.emitter.off("error",this.addError),this.emitter.off("visibilitystate",this.onVisibilityChange),this.emitter.off("pagehide",this.onPageHide),this.emitter.off("telemetry event",this.addEvent),this.addStats({isFinal:!0,initiator:"unload"}),this.send("beacon"),this.logger.debug("Unloaded module")});i(this,"load",()=>{window.addEventListener("error",this.onError),window.addEventListener("unhandledrejection",this.onRejection),this.emitter.on("error",this.addError),this.emitter.on("visibilitystate",this.onVisibilityChange),this.emitter.on("pagehide",this.onPageHide),this.emitter.on("telemetry event",this.addEvent),this.timers.setInterval(()=>{this.addStats(),this.send("fetch")},this.options.interval)});i(this,"addStats",({isFinal:A,initiator:e}={isFinal:!1,initiator:"interval"},t={})=>{if(!this.options.includeStats)return;const B=this.parentContext.getStatistics(),F=sa("stats",K(h(h({},t),B),{isFinal:A,initiator:e,count:this.statsCount++}));this.unsentLines.push(F)});i(this,"addEvent",A=>{if(!this.options.includeEvents||this.eventCount>this.options.maxEvents)return;const e=this.parentContext.getStatistics(),t=sa("event",h(h({},e),A));this.eventCount++,this.unsentLines.push(t)});i(this,"getStatistics",()=>({errorCount:this.errorCount}));i(this,"send",A=>r(this,null,function*(){if(this.options.enabled&&!(this.retries>=this.options.maxRetries)&&!this.unsentLines.isEmpty()){this.logger.debug("Sending telemetry",{lines:this.unsentLines.items()});try{const e=this.unsentLines.items().map(t=>JSON.stringify(t)).reverse().join(`
49
- `);switch(A){case"beacon":navigator.sendBeacon(this.options.url,e);break;case"fetch":default:this.parentContext.connectionState==="connected"?this.emitter.emit("send signal",{type:"telemetry",body:e}):yield Vo(new URL(this.options.url),{body:e,headers:{"Content-Type":"text/plain"}});break}this.retries=0,this.unsentLines.clear()}catch(e){this.retries++}}}));i(this,"onVisibilityChange",A=>{A==="hidden"&&(this.addStats({isFinal:!0,initiator:"visibilitychange"}),this.send("beacon"))});i(this,"onPageHide",A=>{this.addStats({isFinal:!0,initiator:"pagehide"},{persisted:A.persisted}),this.send("beacon")});i(this,"onRejection",A=>this.addError(A.reason));i(this,"onError",A=>this.addError(A.error));i(this,"addError",A=>{const{includeErrors:e,maxErrorReports:t}=this.options;if(e&&A instanceof H){if(this.errorCount++,this.errorCount>t)return;const B=this.parentContext.getStatistics();this.unsentLines.push(sa("error",h(h({},B),A.toStringifiable())))}});this.logger=A,this.emitter=e,this.options=h(h({},bI),t),this.parentContext=B}};i(Gn,"create",(A,e,t,B)=>new Gn(A,e,t,B));let OF=Gn;const Mn=class Mn{constructor(A,e,t){i(this,"logger");i(this,"element");i(this,"documentState");i(this,"timers",new mA);i(this,"unload",()=>{this.timers.unload()});i(this,"unpause",()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug("Unpause video"),this.element.tryPlay())});this.logger=A,this.element=e,this.documentState=t,this.timers.setInterval(this.unpause,100)}};i(Mn,"create",(A,e,t)=>new Mn(A,e,t));let zF=Mn;const fI=6,GI=Q=>{let A=[Q],e=0,t=0,B=!1;const F=(s,a)=>{var G,y,Z;s.flags&&CB(s.flags)&&(e=(G=s.compositionTimeOffset)!=null?G:0),s.timestamp+=e,s.compositionTimeOffset=((y=s.compositionTimeOffset)!=null?y:0)-e;const d=s.timestamp/s.timescale,g=a.flags&&CB(a.flags)?(Z=a.compositionTimeOffset)!=null?Z:0:e,S=(a.timestamp+g)/a.timescale,u=Math.max(0,Math.round((S-d)*s.timescale));return u>0&&(t=u),K(h({},s),{duration:u>0?u:t})};return(s,a=!1)=>{if(s.flags&&CB(s.flags)&&a&&(B=!B),!(a&&A.length<fI&&B)&&A.length>0){B=!1;let E=s;for(let c=A.length-1;c>0;c--){const S=A[c];if(!S||!E)break;S.timestamp>=E.timestamp?A.splice(c,1):E=S}const g=A.map((c,S)=>F(c,A[S+1]||s));return A=[s],g}return A.push(s),[]}},MI=(Q,A,e)=>{if(yt(A))return h(K(h({},Q),{type:"video",codec:A.codec,isSync:CB(Q.flags),data:Q.payload,duration:0,width:A.width,height:A.height}),e);if(A.codec==="webvtt")throw new Error("WebVTT is not supported");return K(h({},Q),{type:"audio",channels:A.channels,sampleRate:A.sampleRate,codec:A.codec,language:A.language,isSync:CB(Q.flags),data:Q.payload,duration:0})};class vI{constructor(){i(this,"highEntropyValues");var A;(A=self.navigator.userAgentData)==null||A.getHighEntropyValues(["architecture","model","platformVersion","fullVersionList"]).then(e=>{this.highEntropyValues=e})}getUserAgentInformation(){var F,n,s,a,d,E;const A=window.location.origin,t=!A||A=="null"?"":`${window.location.pathname}${window.location.search}`.substring(0,1e3),B={locationOrigin:window.location.origin,locationPath:t,ancestorOrigins:((F=window.location.ancestorOrigins)==null?void 0:F.length)>0?Array.from(window.location.ancestorOrigins):void 0,hardwareConcurrency:navigator.hardwareConcurrency,deviceMemory:navigator.deviceMemory};if(self.navigator.userAgentData&&this.highEntropyValues){const g="1",c=[...(n=this.highEntropyValues.brands)!=null?n:[]];c.sort((Z,M)=>Z.brand.localeCompare(M.brand));const S=[...(s=this.highEntropyValues.fullVersionList)!=null?s:[]];S.sort((Z,M)=>Z.brand.localeCompare(M.brand));const u=S.map(Z=>Z.version),p=c.map(Z=>Z.brand),G=c.map(Z=>Z.version),y=parseInt((d=(a=this.highEntropyValues.platformVersion)==null?void 0:a.split(".")[0])!=null?d:g);return h({userAgentLegacy:window.navigator.userAgent,ua:{browser:{brands:p,fullVersionBrands:u,majorVersions:G},device:this.highEntropyValues.model||"Other",os:{family:this.highEntropyValues.platform||"Other",version:(E=this.highEntropyValues.platformVersion)!=null?E:g,major_version:Number.isFinite(y)?y:0}}},B)}else return h({userAgent:window.navigator.userAgent},B)}}const LI=Q=>{if(typeof Q!="object"||Q===null)throw new Error("not an object");if(!("video"in Q))throw new Error("missing video in subscription");if(!("audio"in Q))throw new Error("missing audio in subscription");if(!("channelId"in Q))throw new Error("missing channelId");return!0},Qe=class Qe extends $A{constructor(e){var qA,MA;super();i(this,"pictureInPicture");i(this,"browser",so());i(this,"options");i(this,"element");i(this,"playbackSource");i(this,"emitter",new $A);i(this,"logger");i(this,"modules");i(this,"clientIp");i(this,"sessionId");i(this,"clientId",co());i(this,"_channels",[]);i(this,"createdAt",Date.now());i(this,"hasCalledConnect",!1);i(this,"latestEmittedLanguages",[]);i(this,"wakeLock");i(this,"pool",new k(Qe.MAX_POOL_SIZE));i(this,"userAgentInformation",new vI);i(this,"encryptedMediaExtensions");o(this,_t,0);o(this,OA,[]);i(this,"sampleProcessingSesssions",new Map);i(this,"sizes",new Map);i(this,"isSuspended",!0);i(this,"disconnectTimeout");o(this,$t);i(this,"attach",e=>{var t;(t=this.wakeLock)==null||t.attach(e),e.appendChild(this.element)});i(this,"getOptions",()=>this.options.getOptions());i(this,"getThumbnailUrl",()=>{let e=this.options.get("edgeUrl")||this.options.get("url");e=e.replace("wss://","https://"),e=e.replace("ws://","http://"),e=e.endsWith("/")?e.slice(0,-1):e;const t=window.devicePixelRatio||1,B=Math.round(window.innerWidth*t),F=Math.round(window.innerHeight*t),n=this.options.get("authenticationToken"),s=n?`&auth.token=${n}`:"";return`${e}/api/thumbnail?channelId=${this.channelId}${s}&width=${B}&height=${F}`});i(this,"updateAuthenticationToken",e=>{this.logger.debug("Got new auth token",{token:e}),this.options.set("authenticationToken",e),this.emitter.emit("send signal",{type:"refresh auth",token:e})});i(this,"connect",()=>{this.hasCalledConnect||(this.play(),this._connect())});i(this,"_connect",()=>{var e,t;this.hasCalledConnect||(this.hasCalledConnect=!0,Object.values(this.modules).forEach(B=>{B&&"load"in B&&B.load()}),this.unsuspend(),this.playbackSource instanceof bs&&((t=(e=this.playbackSource).load)==null||t.call(e)),this.modules.connection.connect())});i(this,"getCastOptions",()=>({url:this.options.get("url"),channelId:this.options.get("channelId"),channelGroupId:this.options.get("channelGroupId"),authenticationToken:this.options.get("authenticationToken"),language:this.options.get("language"),logLevel:this.options.get("logLevel"),minBufferTime:this.options.get("minBufferTime"),tags:this.options.get("tags"),ownerSessionId:this.sessionId,edgeUrl:this.options.get("edgeUrl"),media:this.options.get("media"),drm:this.options.get("drm")}));i(this,"onConnectInfo",e=>r(this,null,function*(){var d;this.sessionId=co();const t=this.modules.subscription.getTargetSubscription(),B=e.channels.find(E=>E.channelId===t.channelId);if(this.emitter.emit("connect info",e),this._channels=e.channels,this.updateTextTracks((d=B==null?void 0:B.renditions)!=null?d:[]),!this.textTrack&&this.options.get("textTrack")&&(this.textTrack=this.options.get("textTrack")),yield Promise.all(e.channels.map(E=>r(this,null,function*(){E.overrides&&this.options.addOverrides(E.channelId,E.overrides),E.renditions=yield this.filterRenditions(E.renditions),this.modules.renditions.setRenditions(E.channelId,E.renditions)}))),!B)throw vo("external");const F=this.options.getOverride("sizeBasedResolutionCapEnabled",this.channelId);F!==void 0&&(this.modules.constraintCap.sizeBasedResolutionCapEnabled=F);const n=this.options.getOverride("minBufferTime",this.channelId),s=this.options.getOverride("maxBufferTime",this.channelId);if((n||s)&&(this.modules.bufferTime.updateConfig({minBufferTime:this.options.get("minBufferTime",this.channelId),maxBufferTime:this.options.get("maxBufferTime",this.channelId)}),this.targetBufferTime=this.options.get("minBufferTime",this.channelId)),this.options.get("burstEnabled",this.channelId)&&this.modules.subscription.enableBurst(this.targetBufferTime),this.emit("is live",B.isLive),!B.isLive)throw new Error("Waiting for channel to go live");this.patchSubscription(B,this.modules.connection.estimatedBandwidth),yield this.initializeDecodingModule(),this.resetModules(),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emit("channels",this.channels),this.emitLanguagesIfChanged(),this.sampleProcessingSesssions.clear();const a=this.options.get("burstEnabled",this.channelId);return{video:this.targetSubscription.video,audio:this.targetSubscription.audio,burstMs:a?this.targetBufferTime:void 0,sessionId:this.sessionId,clientId:this.clientId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),authToken:this.options.get("authenticationToken"),textTrack:this.textTrack}}));i(this,"emitLanguagesIfChanged",()=>{const e=this.modules.renditions.getLanguages(),t=this.latestEmittedLanguages;e.length==t.length&&e.every(F=>t.includes(F))||(this.logger.debug("Emitting new languages",{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit("languages",this.latestEmittedLanguages))});i(this,"updateTextTracks",e=>{const t=e.filter(B=>B.codec==="webvtt");t.forEach(B=>{if(!U(this,OA).find(n=>n.language===B.language)){if(this.modules.canvasModule){const n=this.modules.canvasModule.textTracks.addTextTrack(B.kind,B.label||B.language||"",B.language||"");U(this,OA).push(n)}else if(this.mediaElement instanceof HTMLVideoElement){const n=this.mediaElement.addTextTrack(B.kind,B.label||B.language,B.language);U(this,OA).push(n)}}});for(const B of U(this,OA))t.find(n=>n.language===B.language)?B.mode==="disabled"&&(B.mode="hidden"):B.mode="disabled";this.emit("text tracks",this.textTracks)});i(this,"cleanupTextTracks",(e=this.currentTime-2e4)=>{U(this,OA).forEach(t=>{if(t.cues)for(const B of t.cues)B.endTime*1e3<e-2e3&&t.removeCue(B)})});i(this,"filterRenditions",e=>r(this,null,function*(){const t=yield Promise.all(e.map(s=>r(this,null,function*(){var E,g,c;if(bt(s))return!0;if(!yt(s)||!this.isSupportedVideoCodecProfile(s.codec,s.codecString))return!1;if(!this.willUseMediaSource()){const S=this.options.get("advanced"),u=(E=S.wasmDecodingConstraint.bitRate)!=null?E:Number.MAX_SAFE_INTEGER,p=(g=S.wasmDecodingConstraint.width)!=null?g:Number.MAX_SAFE_INTEGER,G=(c=S.wasmDecodingConstraint.height)!=null?c:Number.MAX_SAFE_INTEGER;return s.bitRate<=u&&s.width<=p&&s.height<=G}const a=yield iI(s);if(!a.supported||s.codec=="av1"&&!a.smooth&&!a.powerEfficient)return!1;const d=this.options.getOverride("maxVideoBitRate",this.channelId);return d?d>=s.bitRate:!0})));let B=e.filter((s,a)=>t[a]);const F=B.filter(s=>s.codec==="h264").reverse()[0],n=B.filter(s=>s.codec==="av1").reverse()[0];return F&&n&&F.width>n.width&&F.height>n.height&&(B=B.filter(s=>s.codec!=="av1")),B}));i(this,"patchSubscription",(e,t)=>{const B=Math.min(this.options.get("maxVideoBitRate"),Qe.INITIAL_MAX_BIT_RATE,t,this.targetSubscription.video.bitRate),F=Math.min(this.options.get("maxAudioBitRate"),Qe.INITIAL_MAX_BIT_RATE,t,this.targetSubscription.audio.bitRate),n=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs",this.channelId),s=this.supportedAudioCodecs(),a=e.renditions.filter(bt),d=e.renditions.filter(yt),E=s.find(u=>a.find(p=>p.codec===u)!==void 0),g=n.find(u=>d.find(p=>p.codec===u)!==void 0),c=a.map(u=>u.language);if(this.logger.debug("supported and selected codecs",{audioCodecs:s,videoCodecs:n,audioCodec:E,videoCodec:g}),g){const u=this.options.get("maxSize");this.modules.subscription.setVideoConstraint(h({codec:g,bitRate:this.abrEnabled?B:this.options.get("maxVideoBitRate")},u))}E&&(this.modules.subscription.setAudioConstraint({codec:E,bitRate:this.abrEnabled?F:this.options.get("maxAudioBitRate"),language:this.options.get("language")}),(!c.includes(this.options.get("language"))||this.language===void 0)&&this.modules.subscription.setLanguage(c[0])),this.alignSizeAndBitRate(this.targetSubscription);const S=this.modules.subscription.getTargetSubscription();this.emitter.emit("subscription changed",{to:S,from:this.modules.subscription.getCurrentSubscription()})});i(this,"isSupportedVideoCodecProfile",(e,t)=>{if(this.willUseMediaSource()){const B=se();return B?B.isTypeSupported(KQ({codec:e,codecString:t})):!0}if(e==="h264"){const B=!!(t!=null&&t.startsWith("avc1.42")),F=!!(t!=null&&t.startsWith("avc1.66."));return B||F}return e!=="av1"});i(this,"supportedAudioCodecs",()=>{if(this.options.get("media")==="video")return[];const e=[];return(this.browser.supportsMp4Opus&&this.options.get("mseOpusEnabled")||!this.willUseMediaSource())&&e.push("opus"),this.willUseMediaSource()&&e.push("aac"),e});i(this,"initializeDecodingModule",()=>r(this,null,function*(){var B,F;const e=this.currentRenditionLevel,t=[];if(!e)throw new H("No currentRenditionLevel",{code:"no_current_rendition_level",isFatal:!1});if(e!=null&&e.video&&t.push({type:"video",mimeType:KQ(e.video)}),e!=null&&e.audio&&t.push({type:"audio",mimeType:KQ(e.audio)}),t.length===0)throw new H("Can't initialize decoding module without tracks",{code:"no_tracks",isFatal:!1});if(this.willUseMediaSource()&&this.element instanceof HTMLMediaElement)this.emitter.emit("flush buffers"),yield(B=this.modules.mseModule)==null?void 0:B.setSourceBuffers(t);else{const n=yield Ks.create(this.emitter,this.logger.createContext("DecoderModule"),t,this.playbackSource,this.pool);(F=this.modules.decoder)==null||F.unload(),this.modules.decoder=n,this.modules.decoder.load()}}));i(this,"unload",()=>r(this,null,function*(){var e,t,B;this.logger.debug("Unloading modules..."),yield Promise.all(Object.values(this.modules).map(F=>F==null?void 0:F.unload())),(e=this.wakeLock)==null||e.unload(),this.pool=new k(Qe.MAX_POOL_SIZE),(B=(t=this.playbackSource).unload)==null||B.call(t),this.element.remove(),this.emitter.reset(),this.encryptedMediaExtensions.unload(),this.reset(),this.logger.debug("Unloaded modules")}));i(this,"userInput",()=>{this.play()});i(this,"pause",()=>{this.options.get("pauseSupportEnabled")&&this.playbackState!=="paused"&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())});i(this,"registerDebugInstance",()=>{QI(this)});i(this,"play",()=>{var e;this.hasCalledConnect?this.unsuspend():this.playbackState!=="playing"&&(this._connect(),self.addEventListener("__vindral_register_debug__",this.registerDebugInstance),this.modules.timer.setInterval(()=>this.cleanupTextTracks(),Qe.REMOVE_CUE_THRESHOLD)),(e=this.wakeLock)==null||e.enable(),this.playbackState==="paused"&&(this.resetModules(),this.emitter.emit("flush buffers"),this.cleanupTextTracks(Number.MAX_SAFE_INTEGER)),this.playbackSource.play()});i(this,"getStatistics",()=>Object.values(this.modules).reduce((e,t)=>t&&"getStatistics"in t?h(h({},e),t.getStatistics()):e,this.getRuntimeInfo()));i(this,"resetModules",()=>{Object.values(this.modules).forEach(e=>{e&&"reset"in e&&e.reset()}),this.sampleProcessingSesssions.clear(),this.playbackSource.currentTime=0,this.playbackSource.isActivated=!1});i(this,"getRuntimeInfo",()=>{const e=this.modules.canvasModule?this.options.get("iosMediaElementEnabled"):void 0;return h({uptime:Date.now()-this.createdAt,version:"4.0.0-105-g107caaa1",clientId:this.clientId,sessionId:this.sessionId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),ip:this.clientIp,url:this.options.get("url"),timeToFirstFrame:this.timeToFirstFrame(),iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())});i(this,"onMediaElementState",e=>{this.logger.info("media element state",{state:e}),this.options.get("pauseSupportEnabled")&&(e==="paused"?this.modules.documentState.isVisible&&(this.suspend(),this.modules.connection.disconnect()):(this.unsuspend(),this.modules.connection.getState()==="disconnected"&&this.modules.connection.unsuspend()))});i(this,"onBufferEvent",e=>{var B,F,n,s;this.emit("buffer state event",e);const t=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e==="filled"&&t){const a=Math.max(this.currentTime,(F=(B=this.videoBufferedRanges[0])==null?void 0:B.start)!=null?F:0,(s=(n=this.audioBufferedRanges[0])==null?void 0:n.start)!=null?s:0);this.logger.info("Buffer filled - starting playback",{currentTime:a}),this.playbackSource.currentTime=a,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e==="drained"&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())});i(this,"timeToFirstFrame",()=>{const e=this.modules.playback.getFirstFrameTime(),t=this.modules.connection.firstConnectionTime;if(t&&e)return e-t});this.options=new tI(h(h({},Xd),sE(e)));const t=["localhost","127.0.0.1"];e.telemetryEnabled===void 0&&t.includes(location.hostname)&&this.options.set("telemetryEnabled",!1);const B={channelId:this.options.get("channelId"),audio:{language:this.options.get("language"),bitRate:this.options.get("maxAudioBitRate")},video:{bitRate:this.options.get("maxVideoBitRate"),width:this.options.get("maxSize").width,height:this.options.get("maxSize").height}},F=NA.get();F.setLevel(this.options.get("logLevel")),F.setDebug(!1),this.logger=F;const n=ta.create(this.emitter,this.logger.createContext("PictureInPictureModule")),s=mA.create(),a=Ys.create(this.emitter,this.logger.createContext("ConnectionModule"),{reconnectHandler:this.options.get("reconnectHandler"),options:this.options,onConnectInfo:this.onConnectInfo}),d=Fa.create(this.logger.createContext("SubscriptionModule"),this.emitter,B),E=Ua.create(this.emitter,d),g=Ba.create(this.emitter,this.logger.createContext("QualityOfServiceModule")),c=Qa.create(this.emitter,this.logger.createContext("PlaybackModule"),this,this.options.get("minBufferTime"));this.encryptedMediaExtensions=new Po(this.emitter,this.logger.createContext("EncryptedMediaExtensions"),(qA=e.drm)==null?void 0:qA.headers,(MA=e.drm)==null?void 0:MA.queryParams);const S=Os.create(this.emitter),u=this.options.get("poster"),p=u===!0?this.getThumbnailUrl():u||void 0;let G,y,Z;if(this.willUseMediaSource()){const J=new bs({type:this.options.get("media")=="audio"?"audio":"video",autoplay:!1,muted:this.options.get("muted")||this.options.get("media")==="video",logger:this.logger.createContext("MediaElement"),poster:p});J.on("buffer state",w=>this.emitter.emit("buffer state",w)),J.on("needs user input",w=>this.emitter.emit("needs user input",w)),J.on("volume state",w=>this.emit("volume state",w)),J.on("media element state",w=>this.onMediaElementState(w)),this.element=J.element,this.playbackSource=J,Po.isSupported()&&this.encryptedMediaExtensions.attach(J.element),G=ea.create(this.logger.createContext("MseModule"),this.emitter,this.element),this.options.get("pauseSupportEnabled")||(y=zF.create(this.logger.createContext("UnpauseModule"),J,S)),this.options.get("pictureInPictureEnabled")&&this.emitter.emit("add picture in picture listener",{element:J.element})}else if(this.browser.platform.iosVersion>=15&&this.options.get("iosMediaElementEnabled")){const J=Aa.create(this.emitter,this.logger.createContext("ModernCanvasModule"),this.pool,this,{type:this.options.get("media")=="audio"?"audio":"video",muted:this.options.get("muted")||this.options.get("media")==="video",poster:p}),w=J.element();this.element=w.element,this.playbackSource=J,Z=J,this.options.get("pictureInPictureEnabled")&&this.browser.platform.iosVersion>15&&this.emitter.emit("add picture in picture listener",{element:this.element}),this.options.get("pauseSupportEnabled")||(y=zF.create(this.logger.createContext("UnpauseModule"),w,S))}else{const J=$s.create(this.emitter,this.logger.createContext("LegacyCanvasModule"),this.pool,this,this.options.get("muted")||this.options.get("media")==="video");this.element=J.element(),this.playbackSource=J,Z=J,this.options.get("iosWakeLockEnabled")&&(this.wakeLock=new _g)}this.emitter.on("channel reset",this.resetModules),this.emitter.on("no data timeout",this.resetModules),this.emitter.on("media element state",J=>this.onMediaElementState(J)),this.emitter.on("volume state",J=>this.emit("volume state",J)),this.options.get("pauseSupportEnabled")||this.emitter.on("exit picture in picture",()=>s.setTimeout(()=>this.play(),0)),this.emitter.on("constraint cap changed",J=>{this.logger.info("new cap set",{cap:J}),this.alignSizeAndBitRate(this.targetSubscription)}),this.pictureInPicture={enter:()=>n.requestPictureInPicture(),exit:()=>n.exitPictureInPicture(),isActive:()=>n.isPictureInPictureActive(),isSupported:()=>n.isPictureInPictureSupported()},this.emitter.on("error",J=>{if(J.type()==="external"&&this.emit("error",J),J.isFatal())return()=>void this.unload()});const M=this.browser.platform.isIOS&&!this.browser.platform.isIpadOS,v=na.create(this.emitter,this.logger.createContext("SyncModule"),this.playbackSource,c,this.willUseMediaSource()&&!M),Y=(this.options.get("edgeUrl")||this.options.get("url")).replace("wss://","https://").replace("ws://","http://").replace("//lb.","//errors."),$=new URL("/telemetry",Y).toString(),TA=OF.create(this.logger.createContext("TelemetryModule"),this.emitter,{url:$,enabled:this.options.get("telemetryEnabled"),includeStats:!1,interval:5e3},this);this.modules={telemetry:TA,bufferTime:vs.create(this.emitter,this.logger.createContext("BufferTimeModule"),g,this,{maxBufferTime:this.options.get("maxBufferTime"),minBufferTime:this.options.get("minBufferTime")}),incomingData:Ps.create(this.emitter),adaptivity:Ms.create(this.emitter,this.logger.createContext("AdaptivityModule"),g,{cooldownTime:Math.max(this.options.get("minBufferTime"),2e3)}),constraintCap:Xs.create(this.emitter,this.element,E,this.options.get("abrEnabled")?this.options.get("sizeBasedResolutionCapEnabled"):!1),event:zs.create(this.emitter,this.logger.createContext("EventModule"),v),sync:v,documentState:S,connection:a,playback:c,pictureInPicture:n,timer:s,subscription:d,renditions:E,qualityOfService:g,mseModule:G,unpause:y,canvasModule:Z},this.modules.adaptivity.isEnabled=this.options.get("abrEnabled"),this.emitter.on("page active",J=>{var w;J&&typeof this.disconnectTimeout=="number"&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),J?this.playbackSource.isPaused||(this.logger.debug("Unsuspending"),this.unsuspend()):(this.logger.debug("Suspending"),this.suspend(),this.modules.decoder?this.options.get("iosBackgroundPlayEnabled")?(this.modules.decoder.unsuspend(),(w=this.modules.canvasModule)==null||w.unsuspend()):this.modules.connection.disconnect():(this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{const BA=this.playbackState==="paused"||this.muted;this.connectionState==="connected"&&BA&&(this.emitter.emit("flush buffers"),this.modules.connection.disconnect("Page inactive timeout"))},Qe.DISCONNECT_TIMEOUT)))});let uA;this.emitter.on("context switch complete",()=>{uA||(uA=window.setTimeout(()=>{window.clearTimeout(uA),uA=void 0,this.emit("context switch","completed"),this.emitLanguagesIfChanged()},this.targetBufferTime))}),this.emitter.on("context switch started",()=>this.emit("context switch","started")),this.emitter.on("needs user input",J=>this.emit("needs user input",J)),this.emitter.on("event",J=>{switch(J.type){case"metadata":this.emit("metadata",J);break;case"channel switch":this.emit("channel switch",{channelId:J.channelId});break;case"language switch":this.emit("language switch",{language:J.language});break}}),this.emitter.on("buffer state event",this.onBufferEvent),this.emitter.on("playback state",J=>this.emit("playback state",J)),this.emitter.on("rendition level changed",({to:J})=>{J&&this.emit("rendition level",J)}),this.emitter.on("connection state",J=>{this.emit("connection state",J)}),this.emitter.on("recovered from media error",()=>{this.modules.adaptivity.reset(this.targetBufferTime*2)}),this.emitter.once("connect info",J=>{var tA,z,O;const BA=((z=(tA=J.telemetry)==null?void 0:tA.probability)!=null?z:1)>=Math.random();J.telemetry&&((O=this.modules.telemetry)==null||O.unload(),this.modules.telemetry=OF.create(this.logger.createContext("TelemetryModule"),this.emitter,K(h({},J.telemetry),{enabled:this.options.get("telemetryEnabled")&&BA}),this),this.modules.telemetry.load())}),this.emitter.on("adapt level",J=>{var x,L,AA,X,UA;this.logger.debug("adapt level",{direction:J});const w=this.modules.renditions.getRenditionLevels(),BA=this.modules.renditions.getRenditionLevel(),tA=w.findIndex(sA=>sA===BA),z=w.length-1;let O=tA;switch(J){case"upgrade":{const sA=Math.min(tA+1,z),vA=w[sA],lF=(x=this.modules.connection.estimatedBandwidth)!=null?x:tt(),ZQ=((AA=(L=vA==null?void 0:vA.audio)==null?void 0:L.bitRate)!=null?AA:0)+((UA=(X=vA==null?void 0:vA.video)==null?void 0:X.bitRate)!=null?UA:0),rF=lF*2>ZQ;vA&&rF&&this.modules.adaptivity.isQoSOk(vA)&&(O=sA)}break;case"downgrade":O=Math.max(tA-1,0);break;case"double downgrade":O=Math.max(tA-2,0);break;case"reconnect":if(tA===0||this.modules.qualityOfService.timeSpentBufferingLast(6e3)>5e3){if(!this.modules.connection.lastConnectionTime||Date.now()-this.modules.connection.lastConnectionTime<this.modules.qualityOfService.fatalQosGraceTime()||this.modules.connection.getState()!=="connected")return;this.modules.qualityOfService.incrementFatalQosCount(),this.logger.info("Reconnecting due to poor qos"),this.modules.connection.reconnect("Fatal QOS"),this.emitter.emit("adapted level");return}else O=0}if(O===tA)return;const N=w[O];this.alignSizeAndBitRate(K(h({},this.targetSubscription),{video:h(h({},this.targetSubscription.video),N==null?void 0:N.video),audio:h(h({},this.targetSubscription.audio),N==null?void 0:N.audio)})),this.emitter.emit("adapted level")}),this.emitter.on("text track data",J=>{const w=U(this,OA).find(O=>O.language===J.language),tA=this.modules.sync.getTimeshiftOffset()/1e3,z=tA-U(this,_t);if(l(this,_t,tA),w){if(w.cues)for(const O of w.cues)O.startTime-=z,O.endTime-=z;for(const O of J.cues){const N=new VTTCue(O.startTime-tA,O.endTime-tA,O.text);w.addCue(N)}}}),this.emitter.on("received signal",J=>{var tA;const w=J,BA=this.modules.subscription.getCurrentSubscription();switch(this.logger.debug("received",h({},w)),w.type){case"client ip":this.clientIp=w.ip;break;case"renditions":this.updateTextTracks(w.renditions),l(this,$t,this.filterRenditions(w.renditions).then(z=>{this.emitter.emit("renditions",{renditions:z,channelId:this.currentSubscription.channelId}),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()}).finally(()=>{l(this,$t,void 0)}));break;case"subscription changed":try{LI(w.subscription)}catch(z){this.emitter.emit("error",new H("Subscription failed validation",{source:z instanceof Error?z:void 0,isFatal:!1,code:"subscription_failed_validation"}))}this.emitter.emit("subscription changed",{reset:w.reset,to:w.subscription,from:this.modules.subscription.getCurrentSubscription()}),w.reset&&BA.channelId!==w.subscription.channelId&&(this.emit("error",Yo(w.subscription.channelId)),this.emit("channel switch failed",{channelId:BA.channelId})),this.modules.sync.timeshiftOnAudio=!((tA=w.subscription.video)!=null&&tA.codec),this.modules.adaptivity.reset();break;case"timing info":this.modules.sync.updateChannelSyncInfo(w.timingInfo.channelId,w.timingInfo),this.emit("server wallclock time",w.timingInfo.wallclockTime);break}}),this.emitter.on("channel switch timeout",J=>{this.emit("error",Yo(J)),this.emit("channel switch failed",{channelId:this.currentSubscription.channelId})}),this.emitter.on("received data",J=>{const w=this.modules.subscription.getCurrentSubscription(),BA=jg(J);if(!w){this.logger.warn("Received unwanted message",h({},BA));return}fe(K(h({},BA),{channelId:w.channelId}))}),this.emitter.on("received moq data",J=>{var O,N,x;const w=J.payload.mediaType(),BA=J.channelId,tA=J.renditionId,z=this.modules.sync.processFragment(BA,J.payload);if(this.modules.incomingData.add(w,J.payload.rawBytes().byteLength),z.fragment().emsgs.forEach(L=>{if(!L.presentationTime)return;const AA=pE(L.data);AA&&this.modules.event.addEvent({id:L.id,timestamp:L.presentationTime/L.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:AA.txx.value,type:"metadata"})}),this.modules.decoder){const L=(O=z.header().init().moov.traks[0])==null?void 0:O.mdia.minf.stbl.stsd,AA=(N=L==null?void 0:L.avc1)==null?void 0:N.avcC.bytes,X=(x=L==null?void 0:L.codec)!=null?x:"h264";if(AA){const UA=AA.buffer.slice(AA.byteOffset,AA.byteOffset+AA.byteLength);if(w==="text")throw new Error("Subtitles are not supported");this.emitter.emit("init segment",{initSegment:{channelId:BA,renditionId:tA,data:UA,timescale:1e3,type:w,codec:X},mimeType:w})}for(let UA=0;UA<z.samplesCount();UA++){const sA=z.sample(UA);sA&&this.emitter.emit("coded sample",K(h({},sA),{renditionId:tA,channelId:BA,data:sA.data.buffer.slice(sA.data.byteOffset,sA.data.byteOffset+sA.data.byteLength)}))}}else this.emitter.emit("fragment",{fragment:z,channelId:BA})});const kA=this.options.get("container");kA&&this.attach(kA),this.logger.info("Created Vindral instance",{options:this.options});const fe=J=>r(this,null,function*(){const w=J.channelId;U(this,$t)&&(yield U(this,$t));const BA=this.modules.renditions.getRendition(J.renditionId,w);if(!Og(J.flags)){if(zg(J.flags)){const z=new TextDecoder().decode(J.payload),O=this.modules.sync.getTimeshiftOffset();if(J.renditionId!==0){const N=Io(z);if(N&&N.language!==void 0){const L=new nl().parse(N.content||""),AA=O/1e3,X=U(this,OA).find(sA=>sA.language===N.language),UA=AA-U(this,_t);if(l(this,_t,AA),X){if(X.cues)for(const sA of X.cues)sA.startTime-=UA,sA.endTime-=UA;for(const sA of L){const vA=new VTTCue(sA.startTime-AA,sA.endTime-AA,sA.text);X.addCue(vA)}}}}else this.modules.event.addEvent({timestamp:J.timestamp/J.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:z,type:"metadata"})}else if(BA!=null&&BA.codec){const tA=R(BA.codec);if(tA==="text")throw new Error("Subtitles are not supported");if(this.modules.incomingData.add(tA,J.payload.byteLength),Kg(J.flags)){const z=K(h({type:tA,data:J.payload,codec:BA.codec},J),{channelId:w}),O=vg(z.codec,z.payload);O&&this.sizes.set(z.renditionId,O);const N=KQ({codec:BA.codec,codecString:BA.codecString});this.emitter.emit("init segment",{initSegment:z,mimeType:N}),this.emit("initialized media")}else{const z=MI(J,BA,this.sizes.get(J.renditionId));let O=this.sampleProcessingSesssions.get(tA);if(!O)O=GI(this.modules.sync.processSample(z)),this.sampleProcessingSesssions.set(tA,O);else{const N=O(this.modules.sync.processSample(z),this.isSwitchingRenditionLevel&&z.type==="video");let x=z;N.forEach(L=>{this.modules.event.extractEvent(L,x),this.emitter.emit("coded sample",L),x=L})}}}}});this.options.get("maxVideoBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxVideoBitRate=this.options.get("maxVideoBitRate")),this.options.get("maxAudioBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxAudioBitRate=this.options.get("maxAudioBitRate")),Zt(this.options.get("maxSize"),hF())||(this.maxSize=this.options.get("maxSize")),this.options.get("burstEnabled")&&d.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){if(e===this.muted)return;const t=this.playbackSource.muted;this.playbackSource.muted=e,!e&&t&&!this.playbackSource.isPaused&&this.playbackSource.play()}get muted(){return this.playbackSource.muted}get media(){return this.options.get("media")}get videoBitRate(){return this.modules.incomingData.averageBitRate("video")}get audioBitRate(){return this.modules.incomingData.averageBitRate("audio")}get connectionState(){return this.modules.connection.getState()}get playbackState(){return this.modules.playback.getState()}get bufferFullness(){return this.modules.playback.getBufferFullness()}get sizeBasedResolutionCapEnabled(){return this.modules.constraintCap.sizeBasedResolutionCapEnabled}set sizeBasedResolutionCapEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e}get abrEnabled(){return this.modules.adaptivity.isEnabled}set abrEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e?this.options.get("sizeBasedResolutionCapEnabled"):!1,this.modules.adaptivity.isEnabled=e,this.alignSizeAndBitRate(this.targetSubscription)}get serverEdgeTime(){return this.modules.sync.getLiveEdgeTimeLatencyAdjusted(this.currentSubscription.channelId)}get serverWallclockTime(){return this.modules.sync.getWallclockTimeLatencyAdjusted(this.currentSubscription.channelId)}get currentTime(){return this.modules.sync.serverCurrentTime}get channelCurrentTime(){return this.modules.sync.channelCurrentTime}get targetBufferTime(){return this.modules.playback.getTargetBufferTime()}set targetBufferTime(e){this.modules.playback.getTargetBufferTime()!==e&&(this.modules.playback.setTargetBufferTime(e),this.playbackSource.currentTime=this.modules.sync.serverCurrentTime,this.options.get("burstEnabled",this.channelId)?this.modules.subscription.enableBurst(this.targetBufferTime):this.modules.subscription.enableBurst(0))}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)!=null?e:0)+this.modules.connection.rtt/2}get playbackWallclockTime(){if(!(!this.serverWallclockTime||!this.playbackLatency))return this.serverWallclockTime-this.playbackLatency}get channels(){return this._channels}get languages(){return this.modules.renditions.getLanguages()}get language(){return this.modules.subscription.getTargetSubscription().audio.language}set language(e){this.modules.subscription.setLanguage(e)}set textTrack(e){U(this,OA).forEach(t=>{t.label===e?t.mode="showing":t.mode="hidden"}),this.emitter.emit("text track",e)}get textTracks(){return U(this,OA).filter(e=>e.mode!=="disabled").map(e=>e.label)}get textTrack(){var e;return(e=U(this,OA).find(t=>t.mode==="showing"))==null?void 0:e.label}get channelId(){var e,t;return(t=(e=this.modules)==null?void 0:e.subscription.getTargetSubscription().channelId)!=null?t:this.options.get("channelId")}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);const t=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs"),B=this.modules.renditions.getAudioRenditions(e),F=this.modules.renditions.getVideoRenditions(e),n=this.targetSubscription.audio.language,s=B==null?void 0:B.some(d=>d.language===n),a=t.find(d=>(F==null?void 0:F.find(E=>E.codec===d))!==void 0);a&&this.modules.subscription.setVideoCodec(a),this.logger.debug("Channel switch - started",{audioRenditions:B,targetSubscriptionLanguage:n,targetHasCurrentLanguage:s}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var B,F;const{width:e,height:t}=(F=(B=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:B.video)!=null?F:hF();return{width:e,height:t}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,t;return(t=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.video.bitRate)!=null?t:tt()}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,t;return(t=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.audio.bitRate)!=null?t:tt()}set maxAudioBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({audio:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get renditionLevels(){return this.modules.renditions.getRenditionLevels()}get currentRenditionLevel(){return this.modules.renditions.getRenditionLevel()}get targetRenditionLevel(){return this.modules.renditions.getRenditionLevel(this.modules.subscription.getTargetSubscription())}get isSwitchingRenditionLevel(){return this.modules.subscription.isSwitchingSubscription()}get videoBufferedRanges(){var e,t,B,F;return(F=(B=(e=this.modules.mseModule)==null?void 0:e.getBuffer("video"))!=null?B:(t=this.modules.decoder)==null?void 0:t.getBuffer("video"))!=null?F:[]}get audioBufferedRanges(){var e,t,B,F;return(F=(B=(e=this.modules.mseModule)==null?void 0:e.getBuffer("audio"))!=null?B:(t=this.modules.decoder)==null?void 0:t.getBuffer("audio"))!=null?F:[]}getApiClient(){return this.modules.connection.apiClient}get lastBufferEvent(){return this.modules.playback.getLastBufferStateEvent()}get activeRatios(){return this.modules.qualityOfService.activeRatios()}get bufferingRatios(){return this.modules.qualityOfService.bufferingRatios()}get timeSpentBuffering(){return this.modules.qualityOfService.timeSpentBuffering()}get timeActive(){return this.modules.qualityOfService.timeActive()}get mediaElement(){return this.element}get audioNode(){var e;return(e=this.modules)!=null&&e.canvasModule?this.modules.canvasModule.audioNode:void 0}get drmStatistics(){var e;return(e=this.encryptedMediaExtensions)==null?void 0:e.getStatistics()}get uptime(){return Date.now()-this.createdAt}suspend(){this.isSuspended||(Object.values(this.modules).forEach(e=>{e&&"suspend"in e&&e.suspend()}),this.isSuspended=!0)}unsuspend(){this.isSuspended&&(Object.values(this.modules).forEach(e=>{e&&"unsuspend"in e&&e.unsuspend()}),this.isSuspended=!1)}alignSizeAndBitRate(e){const t=this.modules.constraintCap.constrainSubscription(K(h({},e),{video:h({},e.video),audio:h({},e.audio)})),B=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&B&&(t.audio.bitRate=B.audio.bitRate,t.video.bitRate=B.video.bitRate,t.video.width=B.video.width,t.video.height=B.video.height);const F=this.modules.renditions.getRenditionLevel(t);if(F){if(F.video&&(this.modules.subscription.setVideoBitRate(F.video.bitRate),this.modules.subscription.setSize(F.video)),F.audio)this.modules.subscription.setAudioBitRate(F.audio.bitRate),this.modules.subscription.setLanguage(F.audio.language);else if(t.audio.language){let n=this.modules.renditions.getAudioRenditions(t.channelId);!this.abrEnabled&&B&&(n=n==null?void 0:n.filter(g=>g.bitRate<B.audio.bitRate));const s=t.audio.language,a=n==null?void 0:n.some(g=>g.language===s),d=n==null?void 0:n.find(g=>g.language),E=(n==null?void 0:n.length)&&n[0]||void 0;a||(d?(this.logger.debug("Randomizing language since target did not have current language"),this.modules.subscription.setAudioBitRate(d.bitRate),this.modules.subscription.setLanguage(d.language)):(this.logger.debug("Randomizing audio rendition since target did not have current language"),E!=null&&E.bitRate&&this.modules.subscription.setAudioBitRate(E.bitRate),this.modules.subscription.setLanguage(E==null?void 0:E.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}willUseMediaSource(){return this.browser.supportsMediaSource&&this.options.get("mseEnabled")}};_t=new WeakMap,OA=new WeakMap,$t=new WeakMap,i(Qe,"MAX_POOL_SIZE",10),i(Qe,"INITIAL_MAX_BIT_RATE",2.5*1e3*1e3),i(Qe,"DISCONNECT_TIMEOUT",15*1e3),i(Qe,"REMOVE_CUE_THRESHOLD",1e3*10);let PF=Qe;const jF={buffering:"_buffering_1ccif_1","buffering-fullscreen":"_buffering-fullscreen_1ccif_16",hidden:"_hidden_1ccif_25","buffering-indicator":"_buffering-indicator_1ccif_31",scaleout:"_scaleout_1ccif_1"};class Ae{constructor(A){i(this,"attach",A=>{this.detach(),A.appendChild(this.element)});i(this,"attachBefore",(A,e)=>{this.detach(),A.insertBefore(this.element,e)});i(this,"detach",()=>this.element.remove());this.element=A}}const aa=jF.hidden,HI=jF.buffering,kl=jF["buffering-fullscreen"],YI=jF["buffering-indicator"];class Nl extends Ae{constructor(){super(document.createElement("div"));i(this,"indicator",document.createElement("div"));i(this,"isHidden",()=>this.element.classList.contains(aa));i(this,"setHidden",e=>e?this.hide():this.show());i(this,"hide",()=>this.element.classList.add(aa));i(this,"show",()=>this.element.classList.remove(aa));i(this,"fullscreen",e=>{e?this.element.classList.add(kl):this.element.classList.remove(kl)});this.element.className=HI,this.indicator.className=YI,this.element.appendChild(this.indicator)}}class ml extends $A{constructor(e){super();i(this,"config");i(this,"hlsUrl");i(this,"element");i(this,"connectingTimeout");i(this,"updateAuthenticationToken",e=>{});i(this,"unload",()=>{this.element&&(this.element.removeEventListener("webkitplaybacktargetavailabilitychanged",this.onAirPlayAvailable),this.element.removeEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onAirPlayPlaybackChanged),this.element.remove())});i(this,"onAirPlayAvailable",e=>{switch(e.availability){case"available":{this.element.src!==this.hlsUrl&&this.checkHlsUrl(this.hlsUrl).then(B=>{B&&(this.element.src=this.hlsUrl,this.emit("available"))});break}}});i(this,"onAirPlayPlaybackChanged",()=>{window.clearTimeout(this.connectingTimeout),this.element.webkitCurrentPlaybackTargetIsWireless?(this.emit("connected"),this.element.style.display="block",this.element.paused&&this.element.play()):(this.emit("disconnected"),this.element.pause(),this.element.src="",this.element.src=this.hlsUrl,this.element.style.display="none")});this.hlsUrl=new URL(`/api/hls?channelId=${e.channelId}`,e.url).toString(),this.config=e,this.element=document.createElement("video"),this.element.style.position="absolute",this.element.style.top="0",this.element.style.bottom="0",this.element.style.left="0",this.element.style.right="0",this.element.style.width="100%",this.element.style.height="100%",this.element.style.zIndex="1001",this.element.style.display="none",this.element.id="vindral-airplay-element",this.element.playsInline=!0,this.element.controls=!0,this.element.preload="metadata",this.element.addEventListener("webkitplaybacktargetavailabilitychanged",this.onAirPlayAvailable),this.element.addEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onAirPlayPlaybackChanged),this.config.container.appendChild(this.element)}get casting(){return this.element.webkitCurrentPlaybackTargetIsWireless}set channelId(e){}showPlaybackTargetPicker(){this.element.paused&&(this.element.play(),this.connectingTimeout=window.setTimeout(()=>{this.element.webkitCurrentPlaybackTargetIsWireless||(this.element.pause(),this.element.src="",this.element.src=this.hlsUrl)},3e4)),this.element.webkitShowPlaybackTargetPicker()}static isAirPlaySupported(){return!!window.WebKitPlaybackTargetAvailabilityEvent}checkHlsUrl(e){return r(this,null,function*(){try{return(yield fetch(e,{method:"HEAD"})).ok}catch(t){return!1}})}}const Wl={bar:"_bar_zames_1",hidden:"_hidden_zames_45"},hB={"channel-selection-item":"_channel-selection-item_suenn_1","channel-selection-item-selected":"_channel-selection-item-selected_suenn_8","channel-selection-item-image":"_channel-selection-item-image_suenn_13",withThumbnails:"_withThumbnails_suenn_19","hide-on-small":"_hide-on-small_suenn_27"},xI={"icon-button":"_icon-button_5fg7v_1"},pl={enter:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
49
+ `);switch(A){case"beacon":navigator.sendBeacon(this.options.url,e);break;case"fetch":default:this.parentContext.connectionState==="connected"?this.emitter.emit("send signal",{type:"telemetry",body:e}):yield Vo(new URL(this.options.url),{body:e,headers:{"Content-Type":"text/plain"}});break}this.retries=0,this.unsentLines.clear()}catch(e){this.retries++}}}));i(this,"onVisibilityChange",A=>{A==="hidden"&&(this.addStats({isFinal:!0,initiator:"visibilitychange"}),this.send("beacon"))});i(this,"onPageHide",A=>{this.addStats({isFinal:!0,initiator:"pagehide"},{persisted:A.persisted}),this.send("beacon")});i(this,"onRejection",A=>this.addError(A.reason));i(this,"onError",A=>this.addError(A.error));i(this,"addError",A=>{const{includeErrors:e,maxErrorReports:t}=this.options;if(e&&A instanceof H){if(this.errorCount++,this.errorCount>t)return;const B=this.parentContext.getStatistics();this.unsentLines.push(sa("error",h(h({},B),A.toStringifiable())))}});this.logger=A,this.emitter=e,this.options=h(h({},bI),t),this.parentContext=B}};i(Gn,"create",(A,e,t,B)=>new Gn(A,e,t,B));let OF=Gn;const Mn=class Mn{constructor(A,e,t){i(this,"logger");i(this,"element");i(this,"documentState");i(this,"timers",new mA);i(this,"unload",()=>{this.timers.unload()});i(this,"unpause",()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug("Unpause video"),this.element.tryPlay())});this.logger=A,this.element=e,this.documentState=t,this.timers.setInterval(this.unpause,100)}};i(Mn,"create",(A,e,t)=>new Mn(A,e,t));let zF=Mn;const fI=6,GI=Q=>{let A=[Q],e=0,t=0,B=!1;const F=(s,a)=>{var G,y,Z;s.flags&&CB(s.flags)&&(e=(G=s.compositionTimeOffset)!=null?G:0),s.timestamp+=e,s.compositionTimeOffset=((y=s.compositionTimeOffset)!=null?y:0)-e;const d=s.timestamp/s.timescale,g=a.flags&&CB(a.flags)?(Z=a.compositionTimeOffset)!=null?Z:0:e,S=(a.timestamp+g)/a.timescale,u=Math.max(0,Math.round((S-d)*s.timescale));return u>0&&(t=u),K(h({},s),{duration:u>0?u:t})};return(s,a=!1)=>{if(s.flags&&CB(s.flags)&&a&&(B=!B),!(a&&A.length<fI&&B)&&A.length>0){B=!1;let E=s;for(let c=A.length-1;c>0;c--){const S=A[c];if(!S||!E)break;S.timestamp>=E.timestamp?A.splice(c,1):E=S}const g=A.map((c,S)=>F(c,A[S+1]||s));return A=[s],g}return A.push(s),[]}},MI=(Q,A,e)=>{if(yt(A))return h(K(h({},Q),{type:"video",codec:A.codec,isSync:CB(Q.flags),data:Q.payload,duration:0,width:A.width,height:A.height}),e);if(A.codec==="webvtt")throw new Error("WebVTT is not supported");return K(h({},Q),{type:"audio",channels:A.channels,sampleRate:A.sampleRate,codec:A.codec,language:A.language,isSync:CB(Q.flags),data:Q.payload,duration:0})};class vI{constructor(){i(this,"highEntropyValues");var A;(A=self.navigator.userAgentData)==null||A.getHighEntropyValues(["architecture","model","platformVersion","fullVersionList"]).then(e=>{this.highEntropyValues=e})}getUserAgentInformation(){var F,n,s,a,d,E;const A=window.location.origin,t=!A||A=="null"?"":`${window.location.pathname}${window.location.search}`.substring(0,1e3),B={locationOrigin:window.location.origin,locationPath:t,ancestorOrigins:((F=window.location.ancestorOrigins)==null?void 0:F.length)>0?Array.from(window.location.ancestorOrigins):void 0,hardwareConcurrency:navigator.hardwareConcurrency,deviceMemory:navigator.deviceMemory};if(self.navigator.userAgentData&&this.highEntropyValues){const g="1",c=[...(n=this.highEntropyValues.brands)!=null?n:[]];c.sort((Z,M)=>Z.brand.localeCompare(M.brand));const S=[...(s=this.highEntropyValues.fullVersionList)!=null?s:[]];S.sort((Z,M)=>Z.brand.localeCompare(M.brand));const u=S.map(Z=>Z.version),p=c.map(Z=>Z.brand),G=c.map(Z=>Z.version),y=parseInt((d=(a=this.highEntropyValues.platformVersion)==null?void 0:a.split(".")[0])!=null?d:g);return h({userAgentLegacy:window.navigator.userAgent,ua:{browser:{brands:p,fullVersionBrands:u,majorVersions:G},device:this.highEntropyValues.model||"Other",os:{family:this.highEntropyValues.platform||"Other",version:(E=this.highEntropyValues.platformVersion)!=null?E:g,major_version:Number.isFinite(y)?y:0}}},B)}else return h({userAgent:window.navigator.userAgent},B)}}const LI=Q=>{if(typeof Q!="object"||Q===null)throw new Error("not an object");if(!("video"in Q))throw new Error("missing video in subscription");if(!("audio"in Q))throw new Error("missing audio in subscription");if(!("channelId"in Q))throw new Error("missing channelId");return!0},Qe=class Qe extends $A{constructor(e){var qA,MA;super();i(this,"pictureInPicture");i(this,"browser",so());i(this,"options");i(this,"element");i(this,"playbackSource");i(this,"emitter",new $A);i(this,"logger");i(this,"modules");i(this,"clientIp");i(this,"sessionId");i(this,"clientId",co());i(this,"_channels",[]);i(this,"createdAt",Date.now());i(this,"hasCalledConnect",!1);i(this,"latestEmittedLanguages",[]);i(this,"wakeLock");i(this,"pool",new k(Qe.MAX_POOL_SIZE));i(this,"userAgentInformation",new vI);i(this,"encryptedMediaExtensions");o(this,_t,0);o(this,OA,[]);i(this,"sampleProcessingSesssions",new Map);i(this,"sizes",new Map);i(this,"isSuspended",!0);i(this,"disconnectTimeout");o(this,$t);i(this,"attach",e=>{var t;(t=this.wakeLock)==null||t.attach(e),e.appendChild(this.element)});i(this,"getOptions",()=>this.options.getOptions());i(this,"getThumbnailUrl",()=>{let e=this.options.get("edgeUrl")||this.options.get("url");e=e.replace("wss://","https://"),e=e.replace("ws://","http://"),e=e.endsWith("/")?e.slice(0,-1):e;const t=window.devicePixelRatio||1,B=Math.round(window.innerWidth*t),F=Math.round(window.innerHeight*t),n=this.options.get("authenticationToken"),s=n?`&auth.token=${n}`:"";return`${e}/api/thumbnail?channelId=${this.channelId}${s}&width=${B}&height=${F}`});i(this,"updateAuthenticationToken",e=>{this.logger.debug("Got new auth token",{token:e}),this.options.set("authenticationToken",e),this.emitter.emit("send signal",{type:"refresh auth",token:e})});i(this,"connect",()=>{this.hasCalledConnect||(this.play(),this._connect())});i(this,"_connect",()=>{var e,t;this.hasCalledConnect||(this.hasCalledConnect=!0,Object.values(this.modules).forEach(B=>{B&&"load"in B&&B.load()}),this.unsuspend(),this.playbackSource instanceof bs&&((t=(e=this.playbackSource).load)==null||t.call(e)),this.modules.connection.connect())});i(this,"getCastOptions",()=>({url:this.options.get("url"),channelId:this.options.get("channelId"),channelGroupId:this.options.get("channelGroupId"),authenticationToken:this.options.get("authenticationToken"),language:this.options.get("language"),logLevel:this.options.get("logLevel"),minBufferTime:this.options.get("minBufferTime"),tags:this.options.get("tags"),ownerSessionId:this.sessionId,edgeUrl:this.options.get("edgeUrl"),media:this.options.get("media"),drm:this.options.get("drm")}));i(this,"onConnectInfo",e=>r(this,null,function*(){var d;this.sessionId=co();const t=this.modules.subscription.getTargetSubscription(),B=e.channels.find(E=>E.channelId===t.channelId);if(this.emitter.emit("connect info",e),this._channels=e.channels,this.updateTextTracks((d=B==null?void 0:B.renditions)!=null?d:[]),!this.textTrack&&this.options.get("textTrack")&&(this.textTrack=this.options.get("textTrack")),yield Promise.all(e.channels.map(E=>r(this,null,function*(){E.overrides&&this.options.addOverrides(E.channelId,E.overrides),E.renditions=yield this.filterRenditions(E.renditions),this.modules.renditions.setRenditions(E.channelId,E.renditions)}))),!B)throw vo("external");const F=this.options.getOverride("sizeBasedResolutionCapEnabled",this.channelId);F!==void 0&&(this.modules.constraintCap.sizeBasedResolutionCapEnabled=F);const n=this.options.getOverride("minBufferTime",this.channelId),s=this.options.getOverride("maxBufferTime",this.channelId);if((n||s)&&(this.modules.bufferTime.updateConfig({minBufferTime:this.options.get("minBufferTime",this.channelId),maxBufferTime:this.options.get("maxBufferTime",this.channelId)}),this.targetBufferTime=this.options.get("minBufferTime",this.channelId)),this.options.get("burstEnabled",this.channelId)&&this.modules.subscription.enableBurst(this.targetBufferTime),this.emit("is live",B.isLive),!B.isLive)throw new Error("Waiting for channel to go live");this.patchSubscription(B,this.modules.connection.estimatedBandwidth),yield this.initializeDecodingModule(),this.resetModules(),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emit("channels",this.channels),this.emitLanguagesIfChanged(),this.sampleProcessingSesssions.clear();const a=this.options.get("burstEnabled",this.channelId);return{video:this.targetSubscription.video,audio:this.targetSubscription.audio,burstMs:a?this.targetBufferTime:void 0,sessionId:this.sessionId,clientId:this.clientId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),authToken:this.options.get("authenticationToken"),textTrack:this.textTrack}}));i(this,"emitLanguagesIfChanged",()=>{const e=this.modules.renditions.getLanguages(),t=this.latestEmittedLanguages;e.length==t.length&&e.every(F=>t.includes(F))||(this.logger.debug("Emitting new languages",{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit("languages",this.latestEmittedLanguages))});i(this,"updateTextTracks",e=>{const t=e.filter(B=>B.codec==="webvtt");t.forEach(B=>{if(!U(this,OA).find(n=>n.language===B.language)){if(this.modules.canvasModule){const n=this.modules.canvasModule.textTracks.addTextTrack(B.kind,B.label||B.language||"",B.language||"");U(this,OA).push(n)}else if(this.mediaElement instanceof HTMLVideoElement){const n=this.mediaElement.addTextTrack(B.kind,B.label||B.language,B.language);U(this,OA).push(n)}}});for(const B of U(this,OA))t.find(n=>n.language===B.language)?B.mode==="disabled"&&(B.mode="hidden"):B.mode="disabled";this.emit("text tracks",this.textTracks)});i(this,"cleanupTextTracks",(e=this.currentTime-2e4)=>{U(this,OA).forEach(t=>{if(t.cues)for(const B of t.cues)B.endTime*1e3<e-2e3&&t.removeCue(B)})});i(this,"filterRenditions",e=>r(this,null,function*(){const t=yield Promise.all(e.map(s=>r(this,null,function*(){var E,g,c;if(bt(s))return!0;if(!yt(s)||!this.isSupportedVideoCodecProfile(s.codec,s.codecString))return!1;if(!this.willUseMediaSource()){const S=this.options.get("advanced"),u=(E=S.wasmDecodingConstraint.bitRate)!=null?E:Number.MAX_SAFE_INTEGER,p=(g=S.wasmDecodingConstraint.width)!=null?g:Number.MAX_SAFE_INTEGER,G=(c=S.wasmDecodingConstraint.height)!=null?c:Number.MAX_SAFE_INTEGER;return s.bitRate<=u&&s.width<=p&&s.height<=G}const a=yield iI(s);if(!a.supported||s.codec=="av1"&&!a.smooth&&!a.powerEfficient)return!1;const d=this.options.getOverride("maxVideoBitRate",this.channelId);return d?d>=s.bitRate:!0})));let B=e.filter((s,a)=>t[a]);const F=B.filter(s=>s.codec==="h264").reverse()[0],n=B.filter(s=>s.codec==="av1").reverse()[0];return F&&n&&F.width>n.width&&F.height>n.height&&(B=B.filter(s=>s.codec!=="av1")),B}));i(this,"patchSubscription",(e,t)=>{const B=Math.min(this.options.get("maxVideoBitRate"),Qe.INITIAL_MAX_BIT_RATE,t,this.targetSubscription.video.bitRate),F=Math.min(this.options.get("maxAudioBitRate"),Qe.INITIAL_MAX_BIT_RATE,t,this.targetSubscription.audio.bitRate),n=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs",this.channelId),s=this.supportedAudioCodecs(),a=e.renditions.filter(bt),d=e.renditions.filter(yt),E=s.find(u=>a.find(p=>p.codec===u)!==void 0),g=n.find(u=>d.find(p=>p.codec===u)!==void 0),c=a.map(u=>u.language);if(this.logger.debug("supported and selected codecs",{audioCodecs:s,videoCodecs:n,audioCodec:E,videoCodec:g}),g){const u=this.options.get("maxSize");this.modules.subscription.setVideoConstraint(h({codec:g,bitRate:this.abrEnabled?B:this.options.get("maxVideoBitRate")},u))}E&&(this.modules.subscription.setAudioConstraint({codec:E,bitRate:this.abrEnabled?F:this.options.get("maxAudioBitRate"),language:this.options.get("language")}),(!c.includes(this.options.get("language"))||this.language===void 0)&&this.modules.subscription.setLanguage(c[0])),this.alignSizeAndBitRate(this.targetSubscription);const S=this.modules.subscription.getTargetSubscription();this.emitter.emit("subscription changed",{to:S,from:this.modules.subscription.getCurrentSubscription()})});i(this,"isSupportedVideoCodecProfile",(e,t)=>{if(this.willUseMediaSource()){const B=se();return B?B.isTypeSupported(KQ({codec:e,codecString:t})):!0}if(e==="h264"){const B=!!(t!=null&&t.startsWith("avc1.42")),F=!!(t!=null&&t.startsWith("avc1.66."));return B||F}return e!=="av1"});i(this,"supportedAudioCodecs",()=>{if(this.options.get("media")==="video")return[];const e=[];return(this.browser.supportsMp4Opus&&this.options.get("mseOpusEnabled")||!this.willUseMediaSource())&&e.push("opus"),this.willUseMediaSource()&&e.push("aac"),e});i(this,"initializeDecodingModule",()=>r(this,null,function*(){var B,F;const e=this.currentRenditionLevel,t=[];if(!e)throw new H("No currentRenditionLevel",{code:"no_current_rendition_level",isFatal:!1});if(e!=null&&e.video&&t.push({type:"video",mimeType:KQ(e.video)}),e!=null&&e.audio&&t.push({type:"audio",mimeType:KQ(e.audio)}),t.length===0)throw new H("Can't initialize decoding module without tracks",{code:"no_tracks",isFatal:!1});if(this.willUseMediaSource()&&this.element instanceof HTMLMediaElement)this.emitter.emit("flush buffers"),yield(B=this.modules.mseModule)==null?void 0:B.setSourceBuffers(t);else{const n=yield Ks.create(this.emitter,this.logger.createContext("DecoderModule"),t,this.playbackSource,this.pool);(F=this.modules.decoder)==null||F.unload(),this.modules.decoder=n,this.modules.decoder.load()}}));i(this,"unload",()=>r(this,null,function*(){var e,t,B;this.logger.debug("Unloading modules..."),yield Promise.all(Object.values(this.modules).map(F=>F==null?void 0:F.unload())),(e=this.wakeLock)==null||e.unload(),this.pool=new k(Qe.MAX_POOL_SIZE),(B=(t=this.playbackSource).unload)==null||B.call(t),this.element.remove(),this.emitter.reset(),this.encryptedMediaExtensions.unload(),this.reset(),this.logger.debug("Unloaded modules")}));i(this,"userInput",()=>{this.play()});i(this,"pause",()=>{this.options.get("pauseSupportEnabled")&&this.playbackState!=="paused"&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())});i(this,"registerDebugInstance",()=>{QI(this)});i(this,"play",()=>{var e;this.hasCalledConnect?this.unsuspend():this.playbackState!=="playing"&&(this._connect(),self.addEventListener("__vindral_register_debug__",this.registerDebugInstance),this.modules.timer.setInterval(()=>this.cleanupTextTracks(),Qe.REMOVE_CUE_THRESHOLD)),(e=this.wakeLock)==null||e.enable(),this.playbackState==="paused"&&(this.resetModules(),this.emitter.emit("flush buffers"),this.cleanupTextTracks(Number.MAX_SAFE_INTEGER)),this.playbackSource.play()});i(this,"getStatistics",()=>Object.values(this.modules).reduce((e,t)=>t&&"getStatistics"in t?h(h({},e),t.getStatistics()):e,this.getRuntimeInfo()));i(this,"resetModules",()=>{Object.values(this.modules).forEach(e=>{e&&"reset"in e&&e.reset()}),this.sampleProcessingSesssions.clear(),this.playbackSource.currentTime=0,this.playbackSource.isActivated=!1});i(this,"getRuntimeInfo",()=>{const e=this.modules.canvasModule?this.options.get("iosMediaElementEnabled"):void 0;return h({uptime:Date.now()-this.createdAt,version:"4.0.0-107-gcc4e82db",clientId:this.clientId,sessionId:this.sessionId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),ip:this.clientIp,url:this.options.get("url"),timeToFirstFrame:this.timeToFirstFrame(),iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())});i(this,"onMediaElementState",e=>{this.logger.info("media element state",{state:e}),this.options.get("pauseSupportEnabled")&&(e==="paused"?this.modules.documentState.isVisible&&(this.suspend(),this.modules.connection.disconnect()):(this.unsuspend(),this.modules.connection.getState()==="disconnected"&&this.modules.connection.unsuspend()))});i(this,"onBufferEvent",e=>{var B,F,n,s;this.emit("buffer state event",e);const t=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e==="filled"&&t){const a=Math.max(this.currentTime,(F=(B=this.videoBufferedRanges[0])==null?void 0:B.start)!=null?F:0,(s=(n=this.audioBufferedRanges[0])==null?void 0:n.start)!=null?s:0);this.logger.info("Buffer filled - starting playback",{currentTime:a}),this.playbackSource.currentTime=a,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e==="drained"&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())});i(this,"timeToFirstFrame",()=>{const e=this.modules.playback.getFirstFrameTime(),t=this.modules.connection.firstConnectionTime;if(t&&e)return e-t});this.options=new tI(h(h({},Xd),sE(e)));const t=["localhost","127.0.0.1"];e.telemetryEnabled===void 0&&t.includes(location.hostname)&&this.options.set("telemetryEnabled",!1);const B={channelId:this.options.get("channelId"),audio:{language:this.options.get("language"),bitRate:this.options.get("maxAudioBitRate")},video:{bitRate:this.options.get("maxVideoBitRate"),width:this.options.get("maxSize").width,height:this.options.get("maxSize").height}},F=NA.get();F.setLevel(this.options.get("logLevel")),F.setDebug(!1),this.logger=F;const n=ta.create(this.emitter,this.logger.createContext("PictureInPictureModule")),s=mA.create(),a=Ys.create(this.emitter,this.logger.createContext("ConnectionModule"),{reconnectHandler:this.options.get("reconnectHandler"),options:this.options,onConnectInfo:this.onConnectInfo}),d=Fa.create(this.logger.createContext("SubscriptionModule"),this.emitter,B),E=Ua.create(this.emitter,d),g=Ba.create(this.emitter,this.logger.createContext("QualityOfServiceModule")),c=Qa.create(this.emitter,this.logger.createContext("PlaybackModule"),this,this.options.get("minBufferTime"));this.encryptedMediaExtensions=new Po(this.emitter,this.logger.createContext("EncryptedMediaExtensions"),(qA=e.drm)==null?void 0:qA.headers,(MA=e.drm)==null?void 0:MA.queryParams);const S=Os.create(this.emitter),u=this.options.get("poster"),p=u===!0?this.getThumbnailUrl():u||void 0;let G,y,Z;if(this.willUseMediaSource()){const J=new bs({type:this.options.get("media")=="audio"?"audio":"video",autoplay:!1,muted:this.options.get("muted")||this.options.get("media")==="video",logger:this.logger.createContext("MediaElement"),poster:p});J.on("buffer state",w=>this.emitter.emit("buffer state",w)),J.on("needs user input",w=>this.emitter.emit("needs user input",w)),J.on("volume state",w=>this.emit("volume state",w)),J.on("media element state",w=>this.onMediaElementState(w)),this.element=J.element,this.playbackSource=J,Po.isSupported()&&this.encryptedMediaExtensions.attach(J.element),G=ea.create(this.logger.createContext("MseModule"),this.emitter,this.element),this.options.get("pauseSupportEnabled")||(y=zF.create(this.logger.createContext("UnpauseModule"),J,S)),this.options.get("pictureInPictureEnabled")&&this.emitter.emit("add picture in picture listener",{element:J.element})}else if(this.browser.platform.iosVersion>=15&&this.options.get("iosMediaElementEnabled")){const J=Aa.create(this.emitter,this.logger.createContext("ModernCanvasModule"),this.pool,this,{type:this.options.get("media")=="audio"?"audio":"video",muted:this.options.get("muted")||this.options.get("media")==="video",poster:p}),w=J.element();this.element=w.element,this.playbackSource=J,Z=J,this.options.get("pictureInPictureEnabled")&&this.browser.platform.iosVersion>15&&this.emitter.emit("add picture in picture listener",{element:this.element}),this.options.get("pauseSupportEnabled")||(y=zF.create(this.logger.createContext("UnpauseModule"),w,S))}else{const J=$s.create(this.emitter,this.logger.createContext("LegacyCanvasModule"),this.pool,this,this.options.get("muted")||this.options.get("media")==="video");this.element=J.element(),this.playbackSource=J,Z=J,this.options.get("iosWakeLockEnabled")&&(this.wakeLock=new _g)}this.emitter.on("channel reset",this.resetModules),this.emitter.on("no data timeout",this.resetModules),this.emitter.on("media element state",J=>this.onMediaElementState(J)),this.emitter.on("volume state",J=>this.emit("volume state",J)),this.options.get("pauseSupportEnabled")||this.emitter.on("exit picture in picture",()=>s.setTimeout(()=>this.play(),0)),this.emitter.on("constraint cap changed",J=>{this.logger.info("new cap set",{cap:J}),this.alignSizeAndBitRate(this.targetSubscription)}),this.pictureInPicture={enter:()=>n.requestPictureInPicture(),exit:()=>n.exitPictureInPicture(),isActive:()=>n.isPictureInPictureActive(),isSupported:()=>n.isPictureInPictureSupported()},this.emitter.on("error",J=>{if(J.type()==="external"&&this.emit("error",J),J.isFatal())return()=>void this.unload()});const M=this.browser.platform.isIOS&&!this.browser.platform.isIpadOS,v=na.create(this.emitter,this.logger.createContext("SyncModule"),this.playbackSource,c,this.willUseMediaSource()&&!M),Y=(this.options.get("edgeUrl")||this.options.get("url")).replace("wss://","https://").replace("ws://","http://").replace("//lb.","//errors."),$=new URL("/telemetry",Y).toString(),TA=OF.create(this.logger.createContext("TelemetryModule"),this.emitter,{url:$,enabled:this.options.get("telemetryEnabled"),includeStats:!1,interval:5e3},this);this.modules={telemetry:TA,bufferTime:vs.create(this.emitter,this.logger.createContext("BufferTimeModule"),g,this,{maxBufferTime:this.options.get("maxBufferTime"),minBufferTime:this.options.get("minBufferTime")}),incomingData:Ps.create(this.emitter),adaptivity:Ms.create(this.emitter,this.logger.createContext("AdaptivityModule"),g,{cooldownTime:Math.max(this.options.get("minBufferTime"),2e3)}),constraintCap:Xs.create(this.emitter,this.element,E,this.options.get("abrEnabled")?this.options.get("sizeBasedResolutionCapEnabled"):!1),event:zs.create(this.emitter,this.logger.createContext("EventModule"),v),sync:v,documentState:S,connection:a,playback:c,pictureInPicture:n,timer:s,subscription:d,renditions:E,qualityOfService:g,mseModule:G,unpause:y,canvasModule:Z},this.modules.adaptivity.isEnabled=this.options.get("abrEnabled"),this.emitter.on("page active",J=>{var w;J&&typeof this.disconnectTimeout=="number"&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),J?this.playbackSource.isPaused||(this.logger.debug("Unsuspending"),this.unsuspend()):(this.logger.debug("Suspending"),this.suspend(),this.modules.decoder?this.options.get("iosBackgroundPlayEnabled")?(this.modules.decoder.unsuspend(),(w=this.modules.canvasModule)==null||w.unsuspend()):this.modules.connection.disconnect():(this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{const BA=this.playbackState==="paused"||this.muted;this.connectionState==="connected"&&BA&&(this.emitter.emit("flush buffers"),this.modules.connection.disconnect("Page inactive timeout"))},Qe.DISCONNECT_TIMEOUT)))});let uA;this.emitter.on("context switch complete",()=>{uA||(uA=window.setTimeout(()=>{window.clearTimeout(uA),uA=void 0,this.emit("context switch","completed"),this.emitLanguagesIfChanged()},this.targetBufferTime))}),this.emitter.on("context switch started",()=>this.emit("context switch","started")),this.emitter.on("needs user input",J=>this.emit("needs user input",J)),this.emitter.on("event",J=>{switch(J.type){case"metadata":this.emit("metadata",J);break;case"channel switch":this.emit("channel switch",{channelId:J.channelId});break;case"language switch":this.emit("language switch",{language:J.language});break}}),this.emitter.on("buffer state event",this.onBufferEvent),this.emitter.on("playback state",J=>this.emit("playback state",J)),this.emitter.on("rendition level changed",({to:J})=>{J&&this.emit("rendition level",J)}),this.emitter.on("connection state",J=>{this.emit("connection state",J)}),this.emitter.on("recovered from media error",()=>{this.modules.adaptivity.reset(this.targetBufferTime*2)}),this.emitter.once("connect info",J=>{var tA,z,O;const BA=((z=(tA=J.telemetry)==null?void 0:tA.probability)!=null?z:1)>=Math.random();J.telemetry&&((O=this.modules.telemetry)==null||O.unload(),this.modules.telemetry=OF.create(this.logger.createContext("TelemetryModule"),this.emitter,K(h({},J.telemetry),{enabled:this.options.get("telemetryEnabled")&&BA}),this),this.modules.telemetry.load())}),this.emitter.on("adapt level",J=>{var x,L,AA,X,UA;this.logger.debug("adapt level",{direction:J});const w=this.modules.renditions.getRenditionLevels(),BA=this.modules.renditions.getRenditionLevel(),tA=w.findIndex(sA=>sA===BA),z=w.length-1;let O=tA;switch(J){case"upgrade":{const sA=Math.min(tA+1,z),vA=w[sA],lF=(x=this.modules.connection.estimatedBandwidth)!=null?x:tt(),ZQ=((AA=(L=vA==null?void 0:vA.audio)==null?void 0:L.bitRate)!=null?AA:0)+((UA=(X=vA==null?void 0:vA.video)==null?void 0:X.bitRate)!=null?UA:0),rF=lF*2>ZQ;vA&&rF&&this.modules.adaptivity.isQoSOk(vA)&&(O=sA)}break;case"downgrade":O=Math.max(tA-1,0);break;case"double downgrade":O=Math.max(tA-2,0);break;case"reconnect":if(tA===0||this.modules.qualityOfService.timeSpentBufferingLast(6e3)>5e3){if(!this.modules.connection.lastConnectionTime||Date.now()-this.modules.connection.lastConnectionTime<this.modules.qualityOfService.fatalQosGraceTime()||this.modules.connection.getState()!=="connected")return;this.modules.qualityOfService.incrementFatalQosCount(),this.logger.info("Reconnecting due to poor qos"),this.modules.connection.reconnect("Fatal QOS"),this.emitter.emit("adapted level");return}else O=0}if(O===tA)return;const N=w[O];this.alignSizeAndBitRate(K(h({},this.targetSubscription),{video:h(h({},this.targetSubscription.video),N==null?void 0:N.video),audio:h(h({},this.targetSubscription.audio),N==null?void 0:N.audio)})),this.emitter.emit("adapted level")}),this.emitter.on("text track data",J=>{const w=U(this,OA).find(O=>O.language===J.language),tA=this.modules.sync.getTimeshiftOffset()/1e3,z=tA-U(this,_t);if(l(this,_t,tA),w){if(w.cues)for(const O of w.cues)O.startTime-=z,O.endTime-=z;for(const O of J.cues){const N=new VTTCue(O.startTime-tA,O.endTime-tA,O.text);w.addCue(N)}}}),this.emitter.on("received signal",J=>{var tA;const w=J,BA=this.modules.subscription.getCurrentSubscription();switch(this.logger.debug("received",h({},w)),w.type){case"client ip":this.clientIp=w.ip;break;case"renditions":this.updateTextTracks(w.renditions),l(this,$t,this.filterRenditions(w.renditions).then(z=>{this.emitter.emit("renditions",{renditions:z,channelId:this.currentSubscription.channelId}),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()}).finally(()=>{l(this,$t,void 0)}));break;case"subscription changed":try{LI(w.subscription)}catch(z){this.emitter.emit("error",new H("Subscription failed validation",{source:z instanceof Error?z:void 0,isFatal:!1,code:"subscription_failed_validation"}))}this.emitter.emit("subscription changed",{reset:w.reset,to:w.subscription,from:this.modules.subscription.getCurrentSubscription()}),w.reset&&BA.channelId!==w.subscription.channelId&&(this.emit("error",Yo(w.subscription.channelId)),this.emit("channel switch failed",{channelId:BA.channelId})),this.modules.sync.timeshiftOnAudio=!((tA=w.subscription.video)!=null&&tA.codec),this.modules.adaptivity.reset();break;case"timing info":this.modules.sync.updateChannelSyncInfo(w.timingInfo.channelId,w.timingInfo),this.emit("server wallclock time",w.timingInfo.wallclockTime);break}}),this.emitter.on("channel switch timeout",J=>{this.emit("error",Yo(J)),this.emit("channel switch failed",{channelId:this.currentSubscription.channelId})}),this.emitter.on("received data",J=>{const w=this.modules.subscription.getCurrentSubscription(),BA=jg(J);if(!w){this.logger.warn("Received unwanted message",h({},BA));return}fe(K(h({},BA),{channelId:w.channelId}))}),this.emitter.on("received moq data",J=>{var O,N,x;const w=J.payload.mediaType(),BA=J.channelId,tA=J.renditionId,z=this.modules.sync.processFragment(BA,J.payload);if(this.modules.incomingData.add(w,J.payload.rawBytes().byteLength),z.fragment().emsgs.forEach(L=>{if(!L.presentationTime)return;const AA=pE(L.data);AA&&this.modules.event.addEvent({id:L.id,timestamp:L.presentationTime/L.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:AA.txx.value,type:"metadata"})}),this.modules.decoder){const L=(O=z.header().init().moov.traks[0])==null?void 0:O.mdia.minf.stbl.stsd,AA=(N=L==null?void 0:L.avc1)==null?void 0:N.avcC.bytes,X=(x=L==null?void 0:L.codec)!=null?x:"h264";if(AA){const UA=AA.buffer.slice(AA.byteOffset,AA.byteOffset+AA.byteLength);if(w==="text")throw new Error("Subtitles are not supported");this.emitter.emit("init segment",{initSegment:{channelId:BA,renditionId:tA,data:UA,timescale:1e3,type:w,codec:X},mimeType:w})}for(let UA=0;UA<z.samplesCount();UA++){const sA=z.sample(UA);sA&&this.emitter.emit("coded sample",K(h({},sA),{renditionId:tA,channelId:BA,data:sA.data.buffer.slice(sA.data.byteOffset,sA.data.byteOffset+sA.data.byteLength)}))}}else this.emitter.emit("fragment",{fragment:z,channelId:BA})});const kA=this.options.get("container");kA&&this.attach(kA),this.logger.info("Created Vindral instance",{options:this.options});const fe=J=>r(this,null,function*(){const w=J.channelId;U(this,$t)&&(yield U(this,$t));const BA=this.modules.renditions.getRendition(J.renditionId,w);if(!Og(J.flags)){if(zg(J.flags)){const z=new TextDecoder().decode(J.payload),O=this.modules.sync.getTimeshiftOffset();if(J.renditionId!==0){const N=Io(z);if(N&&N.language!==void 0){const L=new nl().parse(N.content||""),AA=O/1e3,X=U(this,OA).find(sA=>sA.language===N.language),UA=AA-U(this,_t);if(l(this,_t,AA),X){if(X.cues)for(const sA of X.cues)sA.startTime-=UA,sA.endTime-=UA;for(const sA of L){const vA=new VTTCue(sA.startTime-AA,sA.endTime-AA,sA.text);X.addCue(vA)}}}}else this.modules.event.addEvent({timestamp:J.timestamp/J.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:z,type:"metadata"})}else if(BA!=null&&BA.codec){const tA=R(BA.codec);if(tA==="text")throw new Error("Subtitles are not supported");if(this.modules.incomingData.add(tA,J.payload.byteLength),Kg(J.flags)){const z=K(h({type:tA,data:J.payload,codec:BA.codec},J),{channelId:w}),O=vg(z.codec,z.payload);O&&this.sizes.set(z.renditionId,O);const N=KQ({codec:BA.codec,codecString:BA.codecString});this.emitter.emit("init segment",{initSegment:z,mimeType:N}),this.emit("initialized media")}else{const z=MI(J,BA,this.sizes.get(J.renditionId));let O=this.sampleProcessingSesssions.get(tA);if(!O)O=GI(this.modules.sync.processSample(z)),this.sampleProcessingSesssions.set(tA,O);else{const N=O(this.modules.sync.processSample(z),this.isSwitchingRenditionLevel&&z.type==="video");let x=z;N.forEach(L=>{this.modules.event.extractEvent(L,x),this.emitter.emit("coded sample",L),x=L})}}}}});this.options.get("maxVideoBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxVideoBitRate=this.options.get("maxVideoBitRate")),this.options.get("maxAudioBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxAudioBitRate=this.options.get("maxAudioBitRate")),Zt(this.options.get("maxSize"),hF())||(this.maxSize=this.options.get("maxSize")),this.options.get("burstEnabled")&&d.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){if(e===this.muted)return;const t=this.playbackSource.muted;this.playbackSource.muted=e,!e&&t&&!this.playbackSource.isPaused&&this.playbackSource.play()}get muted(){return this.playbackSource.muted}get media(){return this.options.get("media")}get videoBitRate(){return this.modules.incomingData.averageBitRate("video")}get audioBitRate(){return this.modules.incomingData.averageBitRate("audio")}get connectionState(){return this.modules.connection.getState()}get playbackState(){return this.modules.playback.getState()}get bufferFullness(){return this.modules.playback.getBufferFullness()}get sizeBasedResolutionCapEnabled(){return this.modules.constraintCap.sizeBasedResolutionCapEnabled}set sizeBasedResolutionCapEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e}get abrEnabled(){return this.modules.adaptivity.isEnabled}set abrEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e?this.options.get("sizeBasedResolutionCapEnabled"):!1,this.modules.adaptivity.isEnabled=e,this.alignSizeAndBitRate(this.targetSubscription)}get serverEdgeTime(){return this.modules.sync.getLiveEdgeTimeLatencyAdjusted(this.currentSubscription.channelId)}get serverWallclockTime(){return this.modules.sync.getWallclockTimeLatencyAdjusted(this.currentSubscription.channelId)}get currentTime(){return this.modules.sync.serverCurrentTime}get channelCurrentTime(){return this.modules.sync.channelCurrentTime}get targetBufferTime(){return this.modules.playback.getTargetBufferTime()}set targetBufferTime(e){this.modules.playback.getTargetBufferTime()!==e&&(this.modules.playback.setTargetBufferTime(e),this.playbackSource.currentTime=this.modules.sync.serverCurrentTime,this.options.get("burstEnabled",this.channelId)?this.modules.subscription.enableBurst(this.targetBufferTime):this.modules.subscription.enableBurst(0))}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)!=null?e:0)+this.modules.connection.rtt/2}get playbackWallclockTime(){if(!(!this.serverWallclockTime||!this.playbackLatency))return this.serverWallclockTime-this.playbackLatency}get channels(){return this._channels}get languages(){return this.modules.renditions.getLanguages()}get language(){return this.modules.subscription.getTargetSubscription().audio.language}set language(e){this.modules.subscription.setLanguage(e)}set textTrack(e){U(this,OA).forEach(t=>{t.label===e?t.mode="showing":t.mode="hidden"}),this.emitter.emit("text track",e)}get textTracks(){return U(this,OA).filter(e=>e.mode!=="disabled").map(e=>e.label)}get textTrack(){var e;return(e=U(this,OA).find(t=>t.mode==="showing"))==null?void 0:e.label}get channelId(){var e,t;return(t=(e=this.modules)==null?void 0:e.subscription.getTargetSubscription().channelId)!=null?t:this.options.get("channelId")}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);const t=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs"),B=this.modules.renditions.getAudioRenditions(e),F=this.modules.renditions.getVideoRenditions(e),n=this.targetSubscription.audio.language,s=B==null?void 0:B.some(d=>d.language===n),a=t.find(d=>(F==null?void 0:F.find(E=>E.codec===d))!==void 0);a&&this.modules.subscription.setVideoCodec(a),this.logger.debug("Channel switch - started",{audioRenditions:B,targetSubscriptionLanguage:n,targetHasCurrentLanguage:s}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var B,F;const{width:e,height:t}=(F=(B=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:B.video)!=null?F:hF();return{width:e,height:t}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,t;return(t=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.video.bitRate)!=null?t:tt()}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,t;return(t=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.audio.bitRate)!=null?t:tt()}set maxAudioBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({audio:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get renditionLevels(){return this.modules.renditions.getRenditionLevels()}get currentRenditionLevel(){return this.modules.renditions.getRenditionLevel()}get targetRenditionLevel(){return this.modules.renditions.getRenditionLevel(this.modules.subscription.getTargetSubscription())}get isSwitchingRenditionLevel(){return this.modules.subscription.isSwitchingSubscription()}get videoBufferedRanges(){var e,t,B,F;return(F=(B=(e=this.modules.mseModule)==null?void 0:e.getBuffer("video"))!=null?B:(t=this.modules.decoder)==null?void 0:t.getBuffer("video"))!=null?F:[]}get audioBufferedRanges(){var e,t,B,F;return(F=(B=(e=this.modules.mseModule)==null?void 0:e.getBuffer("audio"))!=null?B:(t=this.modules.decoder)==null?void 0:t.getBuffer("audio"))!=null?F:[]}getApiClient(){return this.modules.connection.apiClient}get lastBufferEvent(){return this.modules.playback.getLastBufferStateEvent()}get activeRatios(){return this.modules.qualityOfService.activeRatios()}get bufferingRatios(){return this.modules.qualityOfService.bufferingRatios()}get timeSpentBuffering(){return this.modules.qualityOfService.timeSpentBuffering()}get timeActive(){return this.modules.qualityOfService.timeActive()}get mediaElement(){return this.element}get audioNode(){var e;return(e=this.modules)!=null&&e.canvasModule?this.modules.canvasModule.audioNode:void 0}get drmStatistics(){var e;return(e=this.encryptedMediaExtensions)==null?void 0:e.getStatistics()}get uptime(){return Date.now()-this.createdAt}suspend(){this.isSuspended||(Object.values(this.modules).forEach(e=>{e&&"suspend"in e&&e.suspend()}),this.isSuspended=!0)}unsuspend(){this.isSuspended&&(Object.values(this.modules).forEach(e=>{e&&"unsuspend"in e&&e.unsuspend()}),this.isSuspended=!1)}alignSizeAndBitRate(e){const t=this.modules.constraintCap.constrainSubscription(K(h({},e),{video:h({},e.video),audio:h({},e.audio)})),B=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&B&&(t.audio.bitRate=B.audio.bitRate,t.video.bitRate=B.video.bitRate,t.video.width=B.video.width,t.video.height=B.video.height);const F=this.modules.renditions.getRenditionLevel(t);if(F){if(F.video&&(this.modules.subscription.setVideoBitRate(F.video.bitRate),this.modules.subscription.setSize(F.video)),F.audio)this.modules.subscription.setAudioBitRate(F.audio.bitRate),this.modules.subscription.setLanguage(F.audio.language);else if(t.audio.language){let n=this.modules.renditions.getAudioRenditions(t.channelId);!this.abrEnabled&&B&&(n=n==null?void 0:n.filter(g=>g.bitRate<B.audio.bitRate));const s=t.audio.language,a=n==null?void 0:n.some(g=>g.language===s),d=n==null?void 0:n.find(g=>g.language),E=(n==null?void 0:n.length)&&n[0]||void 0;a||(d?(this.logger.debug("Randomizing language since target did not have current language"),this.modules.subscription.setAudioBitRate(d.bitRate),this.modules.subscription.setLanguage(d.language)):(this.logger.debug("Randomizing audio rendition since target did not have current language"),E!=null&&E.bitRate&&this.modules.subscription.setAudioBitRate(E.bitRate),this.modules.subscription.setLanguage(E==null?void 0:E.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}willUseMediaSource(){return this.browser.supportsMediaSource&&this.options.get("mseEnabled")}};_t=new WeakMap,OA=new WeakMap,$t=new WeakMap,i(Qe,"MAX_POOL_SIZE",10),i(Qe,"INITIAL_MAX_BIT_RATE",2.5*1e3*1e3),i(Qe,"DISCONNECT_TIMEOUT",15*1e3),i(Qe,"REMOVE_CUE_THRESHOLD",1e3*10);let PF=Qe;const jF={buffering:"_buffering_1ccif_1","buffering-fullscreen":"_buffering-fullscreen_1ccif_16",hidden:"_hidden_1ccif_25","buffering-indicator":"_buffering-indicator_1ccif_31",scaleout:"_scaleout_1ccif_1"};class Ae{constructor(A){i(this,"attach",A=>{this.detach(),A.appendChild(this.element)});i(this,"attachBefore",(A,e)=>{this.detach(),A.insertBefore(this.element,e)});i(this,"detach",()=>this.element.remove());this.element=A}}const aa=jF.hidden,HI=jF.buffering,kl=jF["buffering-fullscreen"],YI=jF["buffering-indicator"];class Nl extends Ae{constructor(){super(document.createElement("div"));i(this,"indicator",document.createElement("div"));i(this,"isHidden",()=>this.element.classList.contains(aa));i(this,"setHidden",e=>e?this.hide():this.show());i(this,"hide",()=>this.element.classList.add(aa));i(this,"show",()=>this.element.classList.remove(aa));i(this,"fullscreen",e=>{e?this.element.classList.add(kl):this.element.classList.remove(kl)});this.element.className=HI,this.indicator.className=YI,this.element.appendChild(this.indicator)}}class ml extends $A{constructor(e){super();i(this,"config");i(this,"hlsUrl");i(this,"element");i(this,"connectingTimeout");i(this,"updateAuthenticationToken",e=>{});i(this,"unload",()=>{this.element&&(this.element.removeEventListener("webkitplaybacktargetavailabilitychanged",this.onAirPlayAvailable),this.element.removeEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onAirPlayPlaybackChanged),this.element.remove())});i(this,"onAirPlayAvailable",e=>{switch(e.availability){case"available":{this.element.src!==this.hlsUrl&&this.checkHlsUrl(this.hlsUrl).then(B=>{B&&(this.element.src=this.hlsUrl,this.emit("available"))});break}}});i(this,"onAirPlayPlaybackChanged",()=>{window.clearTimeout(this.connectingTimeout),this.element.webkitCurrentPlaybackTargetIsWireless?(this.emit("connected"),this.element.style.display="block",this.element.paused&&this.element.play()):(this.emit("disconnected"),this.element.pause(),this.element.src="",this.element.src=this.hlsUrl,this.element.style.display="none")});this.hlsUrl=new URL(`/api/hls?channelId=${e.channelId}`,e.url).toString(),this.config=e,this.element=document.createElement("video"),this.element.style.position="absolute",this.element.style.top="0",this.element.style.bottom="0",this.element.style.left="0",this.element.style.right="0",this.element.style.width="100%",this.element.style.height="100%",this.element.style.zIndex="1001",this.element.style.display="none",this.element.id="vindral-airplay-element",this.element.playsInline=!0,this.element.controls=!0,this.element.preload="metadata",this.element.addEventListener("webkitplaybacktargetavailabilitychanged",this.onAirPlayAvailable),this.element.addEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onAirPlayPlaybackChanged),this.config.container.appendChild(this.element)}get casting(){return this.element.webkitCurrentPlaybackTargetIsWireless}set channelId(e){}showPlaybackTargetPicker(){this.element.paused&&(this.element.play(),this.connectingTimeout=window.setTimeout(()=>{this.element.webkitCurrentPlaybackTargetIsWireless||(this.element.pause(),this.element.src="",this.element.src=this.hlsUrl)},3e4)),this.element.webkitShowPlaybackTargetPicker()}static isAirPlaySupported(){return!!window.WebKitPlaybackTargetAvailabilityEvent}checkHlsUrl(e){return r(this,null,function*(){try{return(yield fetch(e,{method:"HEAD"})).ok}catch(t){return!1}})}}const Wl={bar:"_bar_zames_1",hidden:"_hidden_zames_45"},hB={"channel-selection-item":"_channel-selection-item_suenn_1","channel-selection-item-selected":"_channel-selection-item-selected_suenn_8","channel-selection-item-image":"_channel-selection-item-image_suenn_13",withThumbnails:"_withThumbnails_suenn_19","hide-on-small":"_hide-on-small_suenn_27"},xI={"icon-button":"_icon-button_5fg7v_1"},pl={enter:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
50
50
  <path d="M6,14 C5.45,14 5,14.45 5,15 L5,18 C5,18.55 5.45,19 6,19 L9,19 C9.55,19 10,18.55 10,18 C10,17.45 9.55,17 9,17 L7,17 L7,15 C7,14.45 6.55,14 6,14 Z M6,10 C6.55,10 7,9.55 7,9 L7,7 L9,7 C9.55,7 10,6.55 10,6 C10,5.45 9.55,5 9,5 L6,5 C5.45,5 5,5.45 5,6 L5,9 C5,9.55 5.45,10 6,10 Z M17,17 L15,17 C14.45,17 14,17.45 14,18 C14,18.55 14.45,19 15,19 L18,19 C18.55,19 19,18.55 19,18 L19,15 C19,14.45 18.55,14 18,14 C17.45,14 17,14.45 17,15 L17,17 Z M14,6 C14,6.55 14.45,7 15,7 L17,7 L17,9 C17,9.55 17.45,10 18,10 C18.55,10 19,9.55 19,9 L19,6 C19,5.45 18.55,5 18,5 L15,5 C14.45,5 14,5.45 14,6 Z" fill="white"></path>
51
51
  </g>`},exit:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
52
52
  <path d="M6,16 L8,16 L8,18 C8,18.55 8.45,19 9,19 C9.55,19 10,18.55 10,18 L10,15 C10,14.45 9.55,14 9,14 L6,14 C5.45,14 5,14.45 5,15 C5,15.55 5.45,16 6,16 Z M8,8 L6,8 C5.45,8 5,8.45 5,9 C5,9.55 5.45,10 6,10 L9,10 C9.55,10 10,9.55 10,9 L10,6 C10,5.45 9.55,5 9,5 C8.45,5 8,5.45 8,6 L8,8 Z M15,19 C15.55,19 16,18.55 16,18 L16,16 L18,16 C18.55,16 19,15.55 19,15 C19,14.45 18.55,14 18,14 L15,14 C14.45,14 14,14.45 14,15 L14,18 C14,18.55 14.45,19 15,19 Z M16,8 L16,6 C16,5.45 15.55,5 15,5 C14.45,5 14,5.45 14,6 L14,9 C14,9.55 14.45,10 15,10 L18,10 C18.55,10 19,9.55 19,9 C19,8.45 18.55,8 18,8 L16,8 Z" fill="white"></path>
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "4.0.0-105-g107caaa1",
2
+ "version": "4.0.0-107-gcc4e82db",
3
3
  "name": "@vindral/web-sdk",
4
4
  "main": "./legacy.umd.js",
5
5
  "module": "./legacy.es.js",
@@ -26,6 +26,10 @@
26
26
  "types": "./cast-sender.d.ts",
27
27
  "default": "./cast-sender.js"
28
28
  },
29
+ "./react": {
30
+ "types": "./react.d.ts",
31
+ "default": "./react.js"
32
+ },
29
33
  "./style.css": "./style.css"
30
34
  },
31
35
  "homepage": "https://vindral.com",
package/player.d.ts CHANGED
@@ -1395,13 +1395,22 @@ export declare class AirPlayButton extends VindralButton {
1395
1395
  get isAirPlaying(): boolean;
1396
1396
  protected handleClick(_: Event): void;
1397
1397
  }
1398
- export declare class BufferingOverlay extends HTMLElement {
1398
+ declare class BufferingIcon extends HTMLElement {
1399
1399
  #private;
1400
1400
  static observedAttributes: "buffering"[];
1401
1401
  constructor();
1402
1402
  connectedCallback(): void;
1403
1403
  disconnectedCallback(): void;
1404
1404
  }
1405
+ export declare class BufferingOverlay extends HTMLElement {
1406
+ #private;
1407
+ static observedAttributes: readonly [
1408
+ "buffering"
1409
+ ];
1410
+ constructor();
1411
+ connectedCallback(): void;
1412
+ disconnectedCallback(): void;
1413
+ }
1405
1414
  export declare class CastButton extends VindralButton {
1406
1415
  #private;
1407
1416
  static observedAttributes: string[];
@@ -1416,7 +1425,10 @@ export declare class CastButton extends VindralButton {
1416
1425
  type CastOverlayAttributes = (typeof CastOverlay.observedAttributes)[number];
1417
1426
  export declare class CastOverlay extends HTMLElement {
1418
1427
  #private;
1419
- static observedAttributes: ("is-casting" | "cast-receiver-name")[];
1428
+ static observedAttributes: readonly [
1429
+ "is-casting",
1430
+ "cast-receiver-name"
1431
+ ];
1420
1432
  constructor();
1421
1433
  connectedCallback(): void;
1422
1434
  disconnectedCallback(): void;
@@ -1424,7 +1436,13 @@ export declare class CastOverlay extends HTMLElement {
1424
1436
  }
1425
1437
  export declare class ChannelGrid extends HTMLElement {
1426
1438
  #private;
1427
- static observedAttributes: string[];
1439
+ static observedAttributes: readonly [
1440
+ "channels",
1441
+ "channel-id",
1442
+ "authentication-token",
1443
+ "mode",
1444
+ "hidden"
1445
+ ];
1428
1446
  constructor();
1429
1447
  connectedCallback(): void;
1430
1448
  disconnectedCallback(): void;
@@ -1447,7 +1465,13 @@ export declare class ChannelGridButton extends VindralButton {
1447
1465
  export declare class ChannelGridItem extends HTMLElement {
1448
1466
  #private;
1449
1467
  lastThumbnailUpdate?: number;
1450
- static observedAttributes: string[];
1468
+ static observedAttributes: readonly [
1469
+ "url",
1470
+ "title",
1471
+ "offline",
1472
+ "authentication-token",
1473
+ "visible"
1474
+ ];
1451
1475
  constructor();
1452
1476
  attributeChangedCallback(name: string, old: string, value: string): void;
1453
1477
  updateThumbnail(): void;
@@ -1576,7 +1600,7 @@ export declare class PlayButton extends VindralButton {
1576
1600
  }
1577
1601
  export declare class Player extends HTMLElement {
1578
1602
  #private;
1579
- static observedAttributes: ("title" | "poster" | "language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "poster-src" | "url" | "advanced" | "offline" | "edge-url" | "target-buffer-time" | "cast-receiver-id" | "cast-background" | "log-level" | "max-size" | "min-buffer-time" | "max-buffer-time" | "max-audio-bit-rate" | "burst-enabled" | "mse-enabled" | "mse-opus-enabled" | "ios-background-play-enabled" | "ios-wake-lock-enabled" | "ios-media-element-enabled" | "abr-enabled" | "size-based-resolution-cap-enabled" | "telemetry-enabled" | "video-codecs" | "drm-headers" | "drm-queryparams" | "webtransport-enabled" | "reconnect-retries" | "auto-instance-enabled" | "refresh-poster-enabled" | "stream-poll-enabled")[];
1603
+ static observedAttributes: readonly ("title" | "poster" | "language" | "channels" | "buffering" | "paused" | "volume" | "muted" | "user-interacting" | "is-casting" | "cast-available" | "cast-receiver-name" | "ui-locked" | "hide-ui-on-pause" | "is-fullscreen" | "is-fullscreen-fallback" | "rendition-levels" | "rendition-level" | "max-video-bit-rate" | "channel-id" | "channel-group-id" | "pip-available" | "is-pip" | "airplay-available" | "is-airplaying" | "media" | "languages" | "text-tracks" | "text-track" | "needs-user-input" | "authentication-token" | "volume-level" | "cast" | "airplay" | "pip" | "fullscreen" | "vu-meter" | "poster-src" | "url" | "advanced" | "offline" | "edge-url" | "target-buffer-time" | "cast-receiver-id" | "cast-background" | "log-level" | "max-size" | "min-buffer-time" | "max-buffer-time" | "max-audio-bit-rate" | "burst-enabled" | "mse-enabled" | "mse-opus-enabled" | "ios-background-play-enabled" | "ios-wake-lock-enabled" | "ios-media-element-enabled" | "abr-enabled" | "size-based-resolution-cap-enabled" | "telemetry-enabled" | "video-codecs" | "drm-headers" | "drm-queryparams" | "webtransport-enabled" | "reconnect-retries" | "auto-instance-enabled" | "refresh-poster-enabled" | "stream-poll-enabled")[];
1580
1604
  constructor();
1581
1605
  connectedCallback(): void;
1582
1606
  disconnectedCallback(): void;
@@ -1586,7 +1610,12 @@ export declare class Player extends HTMLElement {
1586
1610
  type PosterOverlayAttributes = (typeof PosterOverlay.observedAttributes)[number];
1587
1611
  export declare class PosterOverlay extends HTMLElement {
1588
1612
  #private;
1589
- static observedAttributes: string[];
1613
+ static observedAttributes: readonly [
1614
+ "poster-src",
1615
+ "paused",
1616
+ "disabled",
1617
+ "intersecting"
1618
+ ];
1590
1619
  constructor();
1591
1620
  connectedCallback(): void;
1592
1621
  disconnectedCallback(): void;
@@ -1618,7 +1647,11 @@ export declare class RenditionLevelsMenuList extends HTMLElement {
1618
1647
  }
1619
1648
  export declare class ScrollOverlay extends HTMLElement {
1620
1649
  #private;
1621
- static observedAttributes: string[];
1650
+ static observedAttributes: readonly [
1651
+ "user-interacting",
1652
+ "open",
1653
+ "touch-enabled"
1654
+ ];
1622
1655
  constructor();
1623
1656
  connectedCallback(): void;
1624
1657
  disconnectedCallback(): void;
@@ -1629,58 +1662,51 @@ export declare class ScrollOverlay extends HTMLElement {
1629
1662
  set visible(value: boolean);
1630
1663
  get visible(): boolean;
1631
1664
  }
1632
- declare class VindralRange extends HTMLElement {
1665
+ declare class VindralPlayOverlay extends HTMLElement {
1633
1666
  #private;
1634
1667
  static observedAttributes: string[];
1635
- range: HTMLInputElement;
1636
1668
  constructor();
1637
1669
  connectedCallback(): void;
1638
1670
  disconnectedCallback(): void;
1639
- attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
1640
- enable(): void;
1641
- disable(): void;
1642
- handleEvent(event: Event): void;
1643
- updateBar(): void;
1644
- get keysUsed(): string[];
1645
1671
  }
1646
- export declare class VolumeRange extends VindralRange {
1672
+ declare class VindralUserInputPlayOverlay extends VindralPlayOverlay {
1647
1673
  #private;
1648
1674
  static observedAttributes: string[];
1649
1675
  constructor();
1650
1676
  connectedCallback(): void;
1651
1677
  disconnectedCallback(): void;
1652
- attributeChangedCallback(name: string, old: string, value: string): void;
1653
- get volume(): string;
1654
- get muted(): boolean;
1655
- }
1656
- declare class BufferingIcon extends HTMLElement {
1657
- #private;
1658
- static observedAttributes: "buffering"[];
1659
- constructor();
1660
- connectedCallback(): void;
1661
- disconnectedCallback(): void;
1662
1678
  }
1663
- declare class VindralPlayOverlay extends HTMLElement {
1679
+ declare class VindralMessage extends HTMLElement {
1664
1680
  #private;
1665
1681
  static observedAttributes: string[];
1666
1682
  constructor();
1667
1683
  connectedCallback(): void;
1668
1684
  disconnectedCallback(): void;
1685
+ attributeChangedCallback(name: string, old: string, value: string): void;
1669
1686
  }
1670
- declare class VindralUserInputPlayOverlay extends VindralPlayOverlay {
1687
+ declare class VindralRange extends HTMLElement {
1671
1688
  #private;
1672
1689
  static observedAttributes: string[];
1690
+ range: HTMLInputElement;
1673
1691
  constructor();
1674
1692
  connectedCallback(): void;
1675
1693
  disconnectedCallback(): void;
1694
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
1695
+ enable(): void;
1696
+ disable(): void;
1697
+ handleEvent(event: Event): void;
1698
+ updateBar(): void;
1699
+ get keysUsed(): string[];
1676
1700
  }
1677
- declare class VindralMessage extends HTMLElement {
1701
+ export declare class VolumeRange extends VindralRange {
1678
1702
  #private;
1679
1703
  static observedAttributes: string[];
1680
1704
  constructor();
1681
1705
  connectedCallback(): void;
1682
1706
  disconnectedCallback(): void;
1683
1707
  attributeChangedCallback(name: string, old: string, value: string): void;
1708
+ get volume(): string;
1709
+ get muted(): boolean;
1684
1710
  }
1685
1711
  /**
1686
1712
  * Register custom elements for the Vindral player