Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mux/playback-core

Package Overview
Dependencies
Maintainers
1
Versions
585
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mux/playback-core - npm Package Compare versions

Comparing version 0.25.2 to 0.26.0-canary.0-0f9d0fb

CHANGELOG.md

15

dist/index.cjs.js

@@ -1,4 +0,13 @@

"use strict";var tt=Object.create;var H=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var rt=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var st=(e,t)=>{for(var n in t)H(e,n,{get:t[n],enumerable:!0})},de=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of rt(t))!ot.call(e,r)&&r!==n&&H(e,r,{get:()=>t[r],enumerable:!(a=nt(t,r))||a.enumerable});return e};var le=(e,t,n)=>(n=e!=null?tt(at(e)):{},de(t||!e||!e.__esModule?H(n,"default",{value:e,enumerable:!0}):n,e)),it=e=>de(H({},"__esModule",{value:!0}),e);var St={};st(St,{AutoplayTypes:()=>C,CmcdTypeValues:()=>ut,CmcdTypes:()=>h,ExtensionMimeTypeMap:()=>b,Hls:()=>T,MaxResolution:()=>pt,MediaError:()=>x,MimeTypeShorthandMap:()=>A,MinResolution:()=>ft,PlaybackTypes:()=>_,RenditionOrder:()=>Tt,StreamTypes:()=>g,addChapters:()=>J,addCuePoints:()=>z,addTextTrack:()=>U,allMediaTypes:()=>lt,generatePlayerInitTime:()=>bt,generateUUID:()=>Ve,getActiveChapter:()=>Q,getActiveCuePoint:()=>X,getAppCertificate:()=>ze,getChapters:()=>Ee,getCuePoints:()=>ke,getCurrentPdt:()=>Ce,getDRMConfig:()=>Ye,getEnded:()=>We,getError:()=>Pt,getLicenseKey:()=>Xe,getLiveEdgeStart:()=>ht,getMediaPlaylistLinesFromMultivariantPlaylistSrc:()=>Ie,getSeekable:()=>W,getStartDate:()=>he,getStreamInfoFromHlsjsLevelDetails:()=>Ne,getStreamInfoFromPlaylistLines:()=>Re,getStreamInfoFromSrcAndType:()=>He,getStreamType:()=>ee,getStreamTypeConfig:()=>qe,getTargetLiveWindow:()=>Et,getTextTrack:()=>P,initialize:()=>At,isKeyOf:()=>N,isMuxVideoSrc:()=>se,isPseudoEnded:()=>Fe,isStuckOnLastFragment:()=>ae,loadMedia:()=>Je,mux:()=>D.default,muxMediaState:()=>M,removeTextTrack:()=>be,setupChapters:()=>Z,setupCuePoints:()=>G,setupHls:()=>$e,setupMux:()=>je,setupNativeFairplayDRM:()=>Ge,shorthandKeys:()=>dt,teardown:()=>Ke,toAppCertURL:()=>oe,toLicenseKeyURL:()=>w,toMuxVideoURL:()=>xt,toPlaybackIdFromSrc:()=>ne,updateStreamInfoFromHlsjsLevelDetails:()=>_e,updateStreamInfoFromSrc:()=>F});module.exports=it(St);var D=le(require("mux-embed"));var pe=le(require("hls.js")),T=pe.default;var v=class v extends Error{constructor(n,a=v.MEDIA_ERR_CUSTOM,r,o){var s;super(n);this.name="MediaError",this.code=a,this.context=o,this.fatal=r!=null?r:a>=v.MEDIA_ERR_NETWORK&&a<=v.MEDIA_ERR_ENCRYPTED,this.message||(this.message=(s=v.defaultMessages[this.code])!=null?s:"")}};v.MEDIA_ERR_ABORTED=1,v.MEDIA_ERR_NETWORK=2,v.MEDIA_ERR_DECODE=3,v.MEDIA_ERR_SRC_NOT_SUPPORTED=4,v.MEDIA_ERR_ENCRYPTED=5,v.MEDIA_ERR_CUSTOM=100,v.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail.",3:"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",4:"An unsupported error occurred. The server or network failed, or your browser does not support this format.",5:"The media is encrypted and there are no keys to decrypt it."};var x=v;var ct=e=>e==null,N=(e,t)=>ct(t)?!1:e in t,C={ANY:"any",MUTED:"muted"},g={ON_DEMAND:"on-demand",LIVE:"live",UNKNOWN:"unknown"},_={MSE:"mse",NATIVE:"native"},h={HEADER:"header",QUERY:"query",NONE:"none"},ut=Object.values(h),b={M3U8:"application/vnd.apple.mpegurl",MP4:"video/mp4"},A={HLS:b.M3U8},dt=Object.keys(A),lt=[...Object.values(b),"hls","HLS"],pt={upTo720p:"720p",upTo1080p:"1080p",upTo1440p:"1440p",upTo2160p:"2160p"},ft={noLessThan480p:"480p",noLessThan540p:"540p",noLessThan720p:"720p",noLessThan1080p:"1080p",noLessThan1440p:"1440p",noLessThan2160p:"2160p"},Tt={DESCENDING:"desc"};var y=(e,t,n,a,r=e)=>{r.addEventListener(t,n,a),e.addEventListener("teardown",()=>{r.removeEventListener(t,n)},{once:!0})};function fe(e,t,n){t&&n>t&&(n=t);for(let a=0;a<e.length;a++)if(e.start(a)<=n&&e.end(a)>=n)return!0;return!1}var Te=e=>{let t=e.indexOf("?");if(t<0)return[e];let n=e.slice(0,t),a=e.slice(t);return[n,a]},S=e=>{let t=e.type;if(t){let a=t.toUpperCase();return N(a,A)?A[a]:t}let{src:n}=e;return n?yt(n):""},K=e=>e==="VOD"?g.ON_DEMAND:g.LIVE,B=e=>e==="EVENT"?Number.POSITIVE_INFINITY:e==="VOD"?Number.NaN:0,yt=e=>{let t="";try{t=new URL(e).pathname}catch{console.error("invalid url")}let n=t.lastIndexOf(".");if(n<0)return"";let r=t.slice(n+1).toUpperCase();return N(r,b)?b[r]:""};var mt=Object.values(C),ye=e=>typeof e=="boolean"||typeof e=="string"&&mt.includes(e),me=(e,t,n)=>{let{autoplay:a}=e,r=!1,o=!1,s=ye(a)?a:!!a,i=()=>{r||y(t,"playing",()=>{r=!0},{once:!0})};if(i(),y(t,"loadstart",()=>{r=!1,i(),$(t,s)},{once:!0}),y(t,"loadstart",()=>{n||(e.streamType&&e.streamType!==g.UNKNOWN?o=e.streamType===g.LIVE:o=!Number.isFinite(t.duration)),$(t,s)},{once:!0}),n&&n.once(T.Events.LEVEL_LOADED,(u,d)=>{var c;e.streamType&&e.streamType!==g.UNKNOWN?o=e.streamType===g.LIVE:o=(c=d.details.live)!=null?c:!1}),!s){let u=()=>{!o||Number.isFinite(e.startTime)||(n!=null&&n.liveSyncPosition?t.currentTime=n.liveSyncPosition:Number.isFinite(t.seekable.end(0))&&(t.currentTime=t.seekable.end(0)))};n&&y(t,"play",()=>{t.preload==="metadata"?n.once(T.Events.LEVEL_UPDATED,u):u()},{once:!0})}return u=>{r||(s=ye(u)?u:!!u,$(t,s))}},$=(e,t)=>{if(!t)return;let n=e.muted,a=()=>e.muted=n;switch(t){case C.ANY:e.play().catch(()=>{e.muted=!0,e.play().catch(a)});break;case C.MUTED:e.muted=!0,e.play().catch(a);break;default:e.play().catch(()=>{});break}};var ge=({preload:e,src:t},n,a)=>{let r=c=>{c!=null&&["","none","metadata","auto"].includes(c)?n.setAttribute("preload",c):n.removeAttribute("preload")};if(!a)return r(e),r;let o=!1,s=!1,i=a.config.maxBufferLength,l=a.config.maxBufferSize,u=c=>{r(c);let p=c!=null?c:n.preload;s||p==="none"||(p==="metadata"?(a.config.maxBufferLength=1,a.config.maxBufferSize=1):(a.config.maxBufferLength=i,a.config.maxBufferSize=l),d())},d=()=>{!o&&t&&(o=!0,a.loadSource(t))};return y(n,"play",()=>{s=!0,a.config.maxBufferLength=i,a.config.maxBufferSize=l,d()},{once:!0}),u(e),u};function Me(e,t){var l;if(!("videoTracks"in e))return;let n=new WeakMap;t.on(T.Events.MANIFEST_PARSED,function(u,d){i();let c=e.addVideoTrack("main");c.selected=!0;for(let[p,f]of d.levels.entries()){let m=c.addRendition(f.url[0],f.width,f.height,f.videoCodec,f.bitrate);n.set(f,`${p}`),m.id=`${p}`}}),t.on(T.Events.AUDIO_TRACKS_UPDATED,function(u,d){s();for(let c of d.audioTracks){let p=c.default?"main":"alternative",f=e.addAudioTrack(p,c.name,c.lang);f.id=`${c.id}`,c.default&&(f.enabled=!0)}}),e.audioTracks.addEventListener("change",()=>{var c;let u=+((c=[...e.audioTracks].find(p=>p.enabled))==null?void 0:c.id),d=t.audioTracks.map(p=>p.id);u!=t.audioTrack&&d.includes(u)&&(t.audioTrack=u)}),t.on(T.Events.LEVELS_UPDATED,function(u,d){var f;let c=e.videoTracks[(f=e.videoTracks.selectedIndex)!=null?f:0];if(!c)return;let p=d.levels.map(m=>n.get(m));for(let m of e.videoRenditions)m.id&&!p.includes(m.id)&&c.removeRendition(m)});let a=u=>{let d=u.target.selectedIndex;d!=t.nextLevel&&r(d)},r=u=>{let d=e.currentTime,c=!1,p=(f,m)=>{c||(c=!Number.isFinite(m.endOffset))};t.on(T.Events.BUFFER_FLUSHING,p),t.nextLevel=u,t.off(T.Events.BUFFER_FLUSHING,p),c||t.trigger(T.Events.BUFFER_FLUSHING,{startOffset:d+10,endOffset:1/0,type:"video"})};(l=e.videoRenditions)==null||l.addEventListener("change",a);let o=()=>{for(let u of e.videoTracks)e.removeVideoTrack(u)},s=()=>{for(let u of e.audioTracks)e.removeAudioTrack(u)},i=()=>{o(),s()};t.once(T.Events.DESTROYING,i)}var q=e=>"time"in e?e.time:e.startTime;function ve(e,t){t.on(T.Events.NON_NATIVE_TEXT_TRACKS_FOUND,(r,{tracks:o})=>{o.forEach(s=>{var u;let i=(u=s.subtitleTrack)!=null?u:s.closedCaptions,l=t.subtitleTracks.findIndex(({lang:d,name:c,type:p})=>d==(i==null?void 0:i.lang)&&c===s.label&&p.toLowerCase()===s.kind);U(e,s.kind,s.label,i==null?void 0:i.lang,`${s.kind}${l}`)})});let n=()=>{var s;if(!t.subtitleTracks.length)return;let r=Array.from(e.textTracks).find(i=>i.id&&i.mode==="showing"&&["subtitles","captions"].includes(i.kind)),o=`${(s=t.subtitleTracks[t.subtitleTrack])==null?void 0:s.type.toLowerCase()}${t.subtitleTrack}`;if(r&&(t.subtitleTrack<0||(r==null?void 0:r.id)!==o)){let i=t.subtitleTracks.findIndex(({lang:l,name:u,type:d})=>l==r.language&&u===r.label&&d.toLowerCase()===r.kind);t.subtitleTrack=i}r&&(r==null?void 0:r.id)===o&&r.cues&&Array.from(r.cues).forEach(i=>{r.addCue(i)})};e.textTracks.addEventListener("change",n),t.on(T.Events.CUES_PARSED,(r,{track:o,cues:s})=>{let i=e.textTracks.getTrackById(o);if(!i)return;let l=i.mode==="disabled";l&&(i.mode="hidden"),s.forEach(u=>{var d;(d=i.cues)!=null&&d.getCueById(u.id)||i.addCue(u)}),l&&(i.mode="disabled")}),t.once(T.Events.DESTROYING,()=>{e.textTracks.removeEventListener("change",n),e.querySelectorAll("track[data-removeondestroy]").forEach(o=>{o.remove()})});let a=()=>{Array.from(e.textTracks).forEach(r=>{var o,s;if(!["subtitles","caption"].includes(r.kind)&&r.label==="thumbnails"){if(!((o=r.cues)!=null&&o.length)){let i=e.querySelector('track[label="thumbnails"]'),l=(s=i==null?void 0:i.getAttribute("src"))!=null?s:"";i==null||i.removeAttribute("src"),setTimeout(()=>{i==null||i.setAttribute("src",l)},0)}r.mode!=="hidden"&&(r.mode="hidden")}})};t.once(T.Events.MANIFEST_LOADED,a),t.once(T.Events.MEDIA_ATTACHED,a)}function U(e,t,n,a,r){let o=document.createElement("track");return o.kind=t,o.label=n,a&&(o.srclang=a),r&&(o.id=r),o.track.mode=["subtitles","captions"].includes(t)?"disabled":"hidden",o.setAttribute("data-removeondestroy",""),e.append(o),o.track}function be(e,t){let n=Array.prototype.find.call(e.querySelectorAll("track"),a=>a.track===t);n==null||n.remove()}function P(e,t,n){var a;return(a=Array.from(e.querySelectorAll("track")).find(r=>r.track.label===t&&r.track.kind===n))==null?void 0:a.track}async function xe(e,t,n,a){let r=P(e,n,a);return r||(r=U(e,a,n),r.mode="hidden",await new Promise(o=>setTimeout(()=>o(void 0),0))),r.mode!=="hidden"&&(r.mode="hidden"),[...t].sort((o,s)=>q(s)-q(o)).forEach(o=>{var l,u;let s=o.value,i=q(o);if("endTime"in o&&o.endTime!=null)r==null||r.addCue(new VTTCue(i,o.endTime,a==="chapters"?s:JSON.stringify(s!=null?s:null)));else{let d=Array.prototype.findIndex.call(r==null?void 0:r.cues,m=>m.startTime>=i),c=(l=r==null?void 0:r.cues)==null?void 0:l[d],p=c?c.startTime:Number.isFinite(e.duration)?e.duration:Number.MAX_SAFE_INTEGER,f=(u=r==null?void 0:r.cues)==null?void 0:u[d-1];f&&(f.endTime=i),r==null||r.addCue(new VTTCue(i,p,a==="chapters"?s:JSON.stringify(s!=null?s:null)))}}),e.textTracks.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),r}var Y="cuepoints",Le=Object.freeze({label:Y});async function z(e,t,n=Le){return xe(e,t,n.label,"metadata")}var O=e=>({time:e.startTime,value:JSON.parse(e.text)});function ke(e,t={label:Y}){let n=P(e,t.label,"metadata");return n!=null&&n.cues?Array.from(n.cues,a=>O(a)):[]}function X(e,t={label:Y}){var o,s;let n=P(e,t.label,"metadata");if(!((o=n==null?void 0:n.activeCues)!=null&&o.length))return;if(n.activeCues.length===1)return O(n.activeCues[0]);let{currentTime:a}=e,r=Array.prototype.find.call((s=n.activeCues)!=null?s:[],({startTime:i,endTime:l})=>i<=a&&l>a);return O(r||n.activeCues[0])}async function G(e,t=Le){return new Promise(n=>{y(e,"loadstart",async()=>{let a=await z(e,[],t);y(e,"cuechange",()=>{let r=X(e);if(r){let o=new CustomEvent("cuepointchange",{composed:!0,bubbles:!0,detail:r});e.dispatchEvent(o)}},{},a),n(a)})})}var j="chapters",Pe=Object.freeze({label:j}),V=e=>({startTime:e.startTime,endTime:e.endTime,value:e.text});async function J(e,t,n=Pe){return xe(e,t,n.label,"chapters")}function Ee(e,t={label:j}){var a;let n=P(e,t.label,"chapters");return(a=n==null?void 0:n.cues)!=null&&a.length?Array.from(n.cues,r=>V(r)):[]}function Q(e,t={label:j}){var o,s;let n=P(e,t.label,"chapters");if(!((o=n==null?void 0:n.activeCues)!=null&&o.length))return;if(n.activeCues.length===1)return V(n.activeCues[0]);let{currentTime:a}=e,r=Array.prototype.find.call((s=n.activeCues)!=null?s:[],({startTime:i,endTime:l})=>i<=a&&l>a);return V(r||n.activeCues[0])}async function Z(e,t=Pe){return new Promise(n=>{y(e,"loadstart",async()=>{let a=await J(e,[],t);y(e,"cuechange",()=>{let r=Q(e);if(r){let o=new CustomEvent("chapterchange",{composed:!0,bubbles:!0,detail:r});e.dispatchEvent(o)}},{},a),n(a)})})}function he(e,t){if(t){let n=t.playingDate;if(n!=null)return new Date(n.getTime()-e.currentTime*1e3)}return typeof e.getStartDate=="function"?e.getStartDate():new Date(NaN)}function Ce(e,t){if(t&&t.playingDate)return t.playingDate;if(typeof e.getStartDate=="function"){let n=e.getStartDate();return new Date(n.getTime()+e.currentTime*1e3)}return new Date(NaN)}var Ie=async e=>fetch(e).then(t=>t.text()).then(t=>{let n=t.split(`
`).find((a,r,o)=>r&&o[r-1].startsWith("#EXT-X-STREAM-INF"));return fetch(n).then(a=>a.text()).then(a=>a.split(`
`))}),Re=e=>{var s,i,l;let n=(i=((s=e.find(u=>u.startsWith("#EXT-X-PLAYLIST-TYPE")))!=null?s:"").split(":")[1])==null?void 0:i.trim(),a=K(n),r=B(n),o;if(a===g.LIVE){let u=e.find(c=>c.startsWith("#EXT-X-PART-INF"));if(!!u)o=+u.split(":")[1].split("=")[1]*2;else{let c=e.find(m=>m.startsWith("#EXT-X-TARGETDURATION")),p=(l=c==null?void 0:c.split(":"))==null?void 0:l[1];o=+(p!=null?p:6)*3}}return{streamType:a,targetLiveWindow:r,liveEdgeStartOffset:o}},He=async(e,t)=>{if(t===b.MP4)return{streamType:g.ON_DEMAND,targetLiveWindow:Number.NaN,liveEdgeStartOffset:void 0};if(t===b.M3U8){let n=await Ie(e);return Re(n)}return console.error(`Media type ${t} is an unrecognized or unsupported type for src ${e}.`),{streamType:void 0,targetLiveWindow:void 0,liveEdgeStartOffset:void 0}},F=async(e,t,n=S({src:e}))=>{var s,i,l;let{streamType:a,targetLiveWindow:r,liveEdgeStartOffset:o}=await He(e,n);((s=M.get(t))!=null?s:{}).liveEdgeStartOffset=o,((i=M.get(t))!=null?i:{}).targetLiveWindow=r,t.dispatchEvent(new CustomEvent("targetlivewindowchange",{composed:!0,bubbles:!0})),((l=M.get(t))!=null?l:{}).streamType=a,t.dispatchEvent(new CustomEvent("streamtypechange",{composed:!0,bubbles:!0}))},Ne=e=>{var s;let t=e.type,n=K(t),a=B(t),r,o=!!((s=e.partList)!=null&&s.length);return n===g.LIVE&&(r=o?e.partTarget*2:e.targetduration*3),{streamType:n,targetLiveWindow:a,liveEdgeStartOffset:r,lowLatency:o}},_e=(e,t,n)=>{var i,l,u,d,c,p,f,m;let{streamType:a,targetLiveWindow:r,liveEdgeStartOffset:o,lowLatency:s}=Ne(e);if(a===g.LIVE){s?(n.config.backBufferLength=(i=n.userConfig.backBufferLength)!=null?i:4,n.config.maxFragLookUpTolerance=(l=n.userConfig.maxFragLookUpTolerance)!=null?l:.001,n.config.abrBandWidthUpFactor=(u=n.userConfig.abrBandWidthUpFactor)!=null?u:n.config.abrBandWidthFactor):n.config.backBufferLength=(d=n.userConfig.backBufferLength)!=null?d:8;let E=Object.freeze({get length(){return t.seekable.length},start(L){return t.seekable.start(L)},end(L){var I;return L>this.length||L<0||Number.isFinite(t.duration)?t.seekable.end(L):(I=n.liveSyncPosition)!=null?I:t.seekable.end(L)}});((c=M.get(t))!=null?c:{}).seekable=E}((p=M.get(t))!=null?p:{}).liveEdgeStartOffset=o,((f=M.get(t))!=null?f:{}).targetLiveWindow=r,t.dispatchEvent(new CustomEvent("targetlivewindowchange",{composed:!0,bubbles:!0})),((m=M.get(t))!=null?m:{}).streamType=a,t.dispatchEvent(new CustomEvent("streamtypechange",{composed:!0,bubbles:!0}))},Ae,Se,gt=(Se=(Ae=globalThis==null?void 0:globalThis.navigator)==null?void 0:Ae.userAgent)!=null?Se:"",Mt=gt.toLowerCase().indexOf("android")!==-1,M=new WeakMap,k="mux.com",we,De,Oe=(De=(we=T).isSupported)==null?void 0:De.call(we),vt=Mt,bt=()=>D.default.utils.now(),Ve=D.default.utils.generateUUID,xt=({playbackId:e,customDomain:t=k,maxResolution:n,minResolution:a,renditionOrder:r,programStartTime:o,programEndTime:s,tokens:{playback:i}={},extraSourceParams:l={}}={})=>{if(!e)return;let[u,d=""]=Te(e),c=new URL(`https://stream.${t}/${u}.m3u8${d}`);return i||c.searchParams.has("token")?(c.searchParams.forEach((p,f)=>{f!="token"&&c.searchParams.delete(f)}),i&&c.searchParams.set("token",i)):(n&&c.searchParams.set("max_resolution",n),a&&(c.searchParams.set("min_resolution",a),n&&+n.slice(0,-1)<+a.slice(0,-1)&&console.error("minResolution must be <= maxResolution","minResolution",a,"maxResolution",n)),r&&c.searchParams.set("rendition_order",r),o&&c.searchParams.set("program_start_time",`${o}`),s&&c.searchParams.set("program_end_time",`${s}`),Object.entries(l).forEach(([p,f])=>{f!=null&&c.searchParams.set(p,f)})),c.toString()},Lt=e=>{if(!e)return;let[t]=e.split("?");return t||void 0},ne=e=>{if(!e||!e.startsWith("https://stream."))return;let[t]=new URL(e).pathname.slice(1).split(".m3u8");return t||void 0},kt=e=>{var t,n,a;return(t=e==null?void 0:e.metadata)!=null&&t.video_id?e.metadata.video_id:se(e)&&(a=(n=Lt(e.playbackId))!=null?n:ne(e.src))!=null?a:e.src},Pt=e=>{var t;return(t=M.get(e))==null?void 0:t.error},ee=e=>{var t,n;return(n=(t=M.get(e))==null?void 0:t.streamType)!=null?n:g.UNKNOWN},Et=e=>{var t,n;return(n=(t=M.get(e))==null?void 0:t.targetLiveWindow)!=null?n:Number.NaN},W=e=>{var t,n;return(n=(t=M.get(e))==null?void 0:t.seekable)!=null?n:e.seekable},ht=e=>{var a;let t=(a=M.get(e))==null?void 0:a.liveEdgeStartOffset;if(typeof t!="number")return Number.NaN;let n=W(e);return n.length?n.end(n.length-1)-t:Number.NaN},re=.034,Ct=(e,t,n=re)=>Math.abs(e-t)<=n,Ue=(e,t,n=re)=>e>t||Ct(e,t,n),Fe=(e,t=re)=>e.paused&&Ue(e.currentTime,e.duration,t),ae=(e,t)=>{var u,d,c;if(!t||!e.buffered.length)return;if(e.readyState>2)return!1;let n=t.currentLevel>=0?(d=(u=t.levels)==null?void 0:u[t.currentLevel])==null?void 0:d.details:(c=t.levels.find(p=>!!p.details))==null?void 0:c.details;if(!n||n.live)return;let{fragments:a}=n;if(!(a!=null&&a.length))return;if(e.currentTime<e.duration-(n.targetduration+.5))return!1;let r=a[a.length-1];if(e.currentTime<=r.start)return!1;let o=r.start+r.duration/2,s=e.buffered.start(e.buffered.length-1),i=e.buffered.end(e.buffered.length-1);return o>s&&o<i},We=(e,t)=>e.ended||e.loop?e.ended:t&&ae(e,t)?!0:Fe(e),At=(e,t,n)=>{Ke(t,n);let{metadata:a={}}=e,{view_session_id:r=Ve()}=a,o=kt(e);a.view_session_id=r,a.video_id=o,e.metadata=a,M.set(t,{});let s=$e(e,t),i=ge(e,t,s);je(e,t,s),Je(e,t,s),G(t),Z(t);let l=me(e,t,s);return{engine:s,setAutoplay:l,setPreload:i}},Ke=(e,t)=>{let n=t==null?void 0:t.engine;n&&(n.detachMedia(),n.destroy()),e!=null&&e.mux&&!e.mux.deleted&&(e.mux.destroy(),delete e.mux),e&&(e.removeAttribute("src"),e.load(),e.removeEventListener("error",Ze),e.removeEventListener("error",te),e.removeEventListener("durationchange",Qe),M.delete(e),e.dispatchEvent(new Event("teardown")))};function Be(e,t){var u;let n=S(e);if(!(n===b.M3U8))return!0;let r=!n||((u=t.canPlayType(n))!=null?u:!0),{preferPlayback:o}=e,s=o===_.MSE,i=o===_.NATIVE;return r&&(i||!(Oe&&(s||vt)))}var $e=(e,t)=>{let{debug:n,streamType:a,startTime:r=-1,metadata:o,preferCmcd:s,_hlsConfig:i={}}=e,u=S(e)===b.M3U8,d=Be(e,t);if(u&&!d&&Oe){let c={backBufferLength:30,renderTextTracksNatively:!1,liveDurationInfinity:!0,capLevelToPlayerSize:!0,capLevelOnFPSDrop:!0},p=qe(a),f=Ye(e),m=s!==h.NONE?{useHeaders:s===h.HEADER,sessionId:o==null?void 0:o.view_session_id,contentId:o==null?void 0:o.video_id}:void 0;return new T({debug:n,startPosition:r,cmcd:m,xhrSetup:(L,I)=>{var ie,ce;if(s&&s!==h.QUERY)return;let R=new URL(I);if(!R.searchParams.has("CMCD"))return;let et=((ce=(ie=R.searchParams.get("CMCD"))==null?void 0:ie.split(","))!=null?ce:[]).filter(ue=>ue.startsWith("sid")||ue.startsWith("cid")).join(",");R.searchParams.set("CMCD",et),L.open("GET",R)},...c,...p,...f,...i})}},qe=e=>e===g.LIVE?{backBufferLength:8}:{},Ye=e=>{let{drmToken:t,src:n,playbackId:a=ne(n)}=e;return!t||!a?{}:{emeEnabled:!0,drmSystems:{"com.apple.fps":{licenseUrl:w(e,"fairplay"),serverCertificateUrl:oe(e,"fairplay")},"com.widevine.alpha":{licenseUrl:w(e,"widevine")},"com.microsoft.playready":{licenseUrl:w(e,"playready")}},requestMediaKeySystemAccessFunc:(r,o)=>(r==="com.widevine.alpha"&&(o=[...o.map(s=>{var l;let i=(l=s.videoCapabilities)==null?void 0:l.map(u=>({...u,robustness:"HW_SECURE_ALL"}));return{...s,videoCapabilities:i}}),...o]),navigator.requestMediaKeySystemAccess(r,o))}},ze=async e=>await(await fetch(e)).arrayBuffer(),Xe=async(e,t)=>{let a=await(await fetch(t,{method:"POST",headers:{"Content-type":"application/octet-stream"},body:e})).arrayBuffer();return new Uint8Array(a)},Ge=(e,t)=>{y(t,"encrypted",async a=>{try{let r=a.initDataType;if(r!=="skd"){console.error(`Received unexpected initialization data type "${r}"`);return}if(!t.mediaKeys){let d=await(await navigator.requestMediaKeySystemAccess("com.apple.fps",[{initDataTypes:[r],videoCapabilities:[{contentType:"application/vnd.apple.mpegurl",robustness:""}],distinctiveIdentifier:"not-allowed",persistentState:"not-allowed",sessionTypes:["temporary"]}])).createMediaKeys(),c=await ze(oe(e,"fairplay"));await d.setServerCertificate(c),await t.setMediaKeys(d)}let o=a.initData;if(o==null){console.error(`Could not start encrypted playback due to missing initData in ${a.type} event`);return}let s=t.mediaKeys.createSession();s.generateRequest(r,o);let i=await new Promise(u=>{s.addEventListener("message",d=>{u(d.message)},{once:!0})}),l=await Xe(i,w(e,"fairplay"));return await s.update(l),s}catch(r){console.error(`Could not start encrypted playback due to exception "${r}"`)}})},w=({playbackId:e,drmToken:t,customDomain:n=k},a)=>`https://license.${n.toLocaleLowerCase().endsWith(k)?n:k}/license/${a}/${e}?token=${t}`,oe=({playbackId:e,drmToken:t,customDomain:n=k},a)=>`https://license.${n.toLocaleLowerCase().endsWith(k)?n:k}/appcert/${a}/${e}?token=${t}`,se=({playbackId:e,src:t,customDomain:n})=>{if(e)return!0;if(typeof t!="string")return!1;let a=window==null?void 0:window.location.href,r=new URL(t,a).hostname.toLocaleLowerCase();return r.includes(k)||!!n&&r.includes(n.toLocaleLowerCase())},je=(e,t,n)=>{var s;let{envKey:a,disableTracking:r}=e,o=se(e);if(!r&&(a||o)){let{playerInitTime:i,playerSoftwareName:l,playerSoftwareVersion:u,beaconCollectionDomain:d,debug:c,disableCookies:p}=e,f={...e.metadata,video_title:((s=e==null?void 0:e.metadata)==null?void 0:s.video_title)||void 0},m=E=>typeof E.player_error_code=="string"?!1:typeof e.errorTranslator=="function"?e.errorTranslator(E):E;D.default.monitor(t,{debug:c,beaconCollectionDomain:d,hlsjs:n,Hls:n?T:void 0,automaticErrorTracking:!1,errorTranslator:m,disableCookies:p,data:{...a?{env_key:a}:{},player_software_name:l,player_software:l,player_software_version:u,player_init_time:i,...f}})}},Je=(e,t,n)=>{var u;let a=Be(e,t),{src:r}=e,o=()=>{t.ended||!We(t,n)||(ae(t,n)?t.currentTime=t.buffered.end(t.buffered.length-1):t.dispatchEvent(new Event("ended")))},s,i,l=()=>{var p,f;let d=(p=W(t))==null?void 0:p.start(0),c=(f=W(t))==null?void 0:f.end(0);(i!==c||s!==d)&&t.dispatchEvent(new CustomEvent("seekablechange",{composed:!0})),s=d,i=c};if(y(t,"durationchange",l),t&&a){let d=S(e);if(typeof r=="string"){let c=()=>{if(ee(t)!==g.LIVE||Number.isFinite(t.duration))return;let p=setInterval(l,1e3);t.addEventListener("teardown",()=>{clearInterval(p)},{once:!0}),y(t,"durationchange",()=>{Number.isFinite(t.duration)&&clearInterval(p)})};if(t.preload==="none"){let p=()=>{F(r,t,d).then(c),t.removeEventListener("loadedmetadata",f)},f=()=>{F(r,t,d).then(c),t.removeEventListener("play",p)};y(t,"play",p,{once:!0}),y(t,"loadedmetadata",f,{once:!0})}else F(r,t,d).then(c);e.drmToken&&Ge(e,t),t.setAttribute("src",r),e.startTime&&(((u=M.get(t))!=null?u:{}).startTime=e.startTime,t.addEventListener("durationchange",Qe,{once:!0}))}else t.removeAttribute("src");t.addEventListener("error",Ze),t.addEventListener("error",te),t.addEventListener("emptied",()=>{t.querySelectorAll("track[data-removeondestroy]").forEach(p=>{p.remove()})},{once:!0}),y(t,"pause",o),y(t,"seeked",o),y(t,"play",()=>{t.ended||Ue(t.currentTime,t.duration)&&(t.currentTime=t.seekable.length?t.seekable.start(0):0)})}else n&&r?(n.once(T.Events.LEVEL_LOADED,(d,c)=>{_e(c.details,t,n),l(),ee(t)===g.LIVE&&!Number.isFinite(t.duration)&&(n.on(T.Events.LEVEL_UPDATED,l),y(t,"durationchange",()=>{Number.isFinite(t.duration)&&n.off(T.Events.LEVELS_UPDATED,l)}))}),n.on(T.Events.ERROR,(d,c)=>{let p={[T.ErrorTypes.NETWORK_ERROR]:x.MEDIA_ERR_NETWORK,[T.ErrorTypes.MEDIA_ERROR]:x.MEDIA_ERR_DECODE},f=new x("",p[c.type]);f.fatal=c.fatal,f.data=c,t.dispatchEvent(new CustomEvent("error",{detail:f}))}),t.addEventListener("error",te),y(t,"waiting",o),Me(e,n),ve(t,n),n.attachMedia(t)):console.error("It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.")};function Qe(e){var a;let t=e.target,n=(a=M.get(t))==null?void 0:a.startTime;if(n&&fe(t.seekable,t.duration,n)){let r=t.preload==="auto";r&&(t.preload="none"),t.currentTime=n,r&&(t.preload="auto")}}async function Ze(e){if(!e.isTrusted)return;e.stopImmediatePropagation();let t=e.target;if(!(t!=null&&t.error))return;let{message:n,code:a}=t.error,r=new x(n,a);if(t.src&&(a!==x.MEDIA_ERR_DECODE||a!==void 0))try{let{status:o}=await fetch(t.src);r.data={response:{code:o}}}catch{}t.dispatchEvent(new CustomEvent("error",{detail:r}))}function te(e){var a,r;if(!(e instanceof CustomEvent)||!(e.detail instanceof x))return;let t=e.target,n=e.detail;!n||!n.fatal||(((a=M.get(t))!=null?a:{}).error=n,(r=t.mux)==null||r.emit("error",{player_error_code:n.code,player_error_message:n.message,player_error_context:n.context}))}
"use strict";var xt=Object.create;var $=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var Pt=Object.getPrototypeOf,_t=Object.prototype.hasOwnProperty;var kt=(e,t)=>{for(var r in t)$(e,r,{get:t[r],enumerable:!0})},be=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Dt(t))!_t.call(e,o)&&o!==r&&$(e,o,{get:()=>t[o],enumerable:!(n=vt(t,o))||n.enumerable});return e};var xe=(e,t,r)=>(r=e!=null?xt(Pt(e)):{},be(t||!e||!e.__esModule?$(r,"default",{value:e,enumerable:!0}):r,e)),ht=e=>be($({},"__esModule",{value:!0}),e);var er={};kt(er,{AutoplayTypes:()=>U,CmcdTypeValues:()=>Lt,CmcdTypes:()=>w,ExtensionMimeTypeMap:()=>L,Hls:()=>R,MaxResolution:()=>St,MediaError:()=>f,MimeTypeShorthandMap:()=>H,MinResolution:()=>wt,MuxErrorCategory:()=>C,MuxErrorCode:()=>g,MuxJWTAud:()=>X,PlaybackTypes:()=>B,RenditionOrder:()=>Ot,StreamTypes:()=>D,addChapters:()=>le,addCuePoints:()=>ie,addTextTrack:()=>z,allMediaTypes:()=>At,errorCategoryToTokenNameOrPrefix:()=>O,generatePlayerInitTime:()=>Jt,generateUUID:()=>at,getActiveChapter:()=>pe,getActiveCuePoint:()=>ce,getAppCertificate:()=>Et,getChapters:()=>Ke,getCuePoints:()=>Ve,getCurrentPdt:()=>We,getDRMConfig:()=>yt,getEnded:()=>dt,getError:()=>it,getLicenseKey:()=>mt,getLiveEdgeStart:()=>zt,getMediaPlaylistLinesFromMultivariantPlaylistSrc:()=>Qe,getSeekable:()=>Z,getStartDate:()=>Ye,getStreamInfoFromHlsjsLevelDetails:()=>rt,getStreamInfoFromPlaylistLines:()=>Ze,getStreamInfoFromSrcAndType:()=>et,getStreamType:()=>Te,getStreamTypeConfig:()=>Tt,getTargetLiveWindow:()=>jt,getTextTrack:()=>A,i18n:()=>m,initialize:()=>Qt,isKeyOf:()=>S,isMuxVideoSrc:()=>Me,isPseudoEnded:()=>ut,isStuckOnLastFragment:()=>me,loadMedia:()=>Rt,mux:()=>W.default,muxMediaState:()=>P,parseJwt:()=>G,removeTextTrack:()=>Oe,setupChapters:()=>fe,setupCuePoints:()=>ue,setupHls:()=>ft,setupMux:()=>Mt,setupNativeFairplayDRM:()=>gt,shorthandKeys:()=>It,teardown:()=>lt,toAppCertURL:()=>ge,toDRMTypeFromKeySystem:()=>Xe,toLicenseKeyURL:()=>Y,toMuxVideoURL:()=>Gt,toPlaybackIdFromSrc:()=>st,toPlaybackIdParts:()=>V,updateStreamInfoFromHlsjsLevelDetails:()=>nt,updateStreamInfoFromSrc:()=>tt});module.exports=ht(er);var W=xe(require("mux-embed"));var ve=xe(require("hls.js")),R=ve.default;var C={VIDEO:"video",THUMBNAIL:"thumbnail",STORYBOARD:"storyboard",DRM:"drm"},g={NOT_AN_ERROR:0,NETWORK_OFFLINE:2000002,NETWORK_UNKNOWN_ERROR:2e6,NETWORK_NO_STATUS:2000001,NETWORK_INVALID_URL:24e5,NETWORK_NOT_FOUND:2404e3,NETWORK_NOT_READY:2412e3,NETWORK_GENERIC_SERVER_FAIL:25e5,NETWORK_TOKEN_MISSING:2403201,NETWORK_TOKEN_MALFORMED:2412202,NETWORK_TOKEN_EXPIRED:2403210,NETWORK_TOKEN_AUD_MISSING:2403221,NETWORK_TOKEN_AUD_MISMATCH:2403222,NETWORK_TOKEN_SUB_MISMATCH:2403232,ENCRYPTED_ERROR:5e6,ENCRYPTED_UNSUPPORTED_KEY_SYSTEM:5000001,ENCRYPTED_GENERATE_REQUEST_FAILED:5000002,ENCRYPTED_UPDATE_LICENSE_FAILED:5000003,ENCRYPTED_UPDATE_SERVER_CERT_FAILED:5000004,ENCRYPTED_CDM_ERROR:5000005,ENCRYPTED_OUTPUT_RESTRICTED:5000006,ENCRYPTED_MISSING_TOKEN:5000002},O=e=>e===C.VIDEO?"playback":e,_=class _ extends Error{constructor(r,n=_.MEDIA_ERR_CUSTOM,o,a){var s;super(r);this.name="MediaError",this.code=n,this.context=a,this.fatal=o!=null?o:n>=_.MEDIA_ERR_NETWORK&&n<=_.MEDIA_ERR_ENCRYPTED,this.message||(this.message=(s=_.defaultMessages[this.code])!=null?s:"")}};_.MEDIA_ERR_ABORTED=1,_.MEDIA_ERR_NETWORK=2,_.MEDIA_ERR_DECODE=3,_.MEDIA_ERR_SRC_NOT_SUPPORTED=4,_.MEDIA_ERR_ENCRYPTED=5,_.MEDIA_ERR_CUSTOM=100,_.defaultMessages={1:"You aborted the media playback",2:"A network error caused the media download to fail.",3:"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",4:"An unsupported error occurred. The server or network failed, or your browser does not support this format.",5:"The media is encrypted and there are no keys to decrypt it."};var f=_;var Nt=e=>e==null,S=(e,t)=>Nt(t)?!1:e in t,U={ANY:"any",MUTED:"muted"},D={ON_DEMAND:"on-demand",LIVE:"live",UNKNOWN:"unknown"},B={MSE:"mse",NATIVE:"native"},w={HEADER:"header",QUERY:"query",NONE:"none"},Lt=Object.values(w),L={M3U8:"application/vnd.apple.mpegurl",MP4:"video/mp4"},H={HLS:L.M3U8},It=Object.keys(H),At=[...Object.values(L),"hls","HLS"],St={upTo720p:"720p",upTo1080p:"1080p",upTo1440p:"1440p",upTo2160p:"2160p"},wt={noLessThan480p:"480p",noLessThan540p:"540p",noLessThan720p:"720p",noLessThan1080p:"1080p",noLessThan1440p:"1440p",noLessThan2160p:"2160p"},Ot={DESCENDING:"desc"};var Ut="en",J={code:Ut};var x=(e,t,r,n,o=e)=>{o.addEventListener(t,r,n),e.addEventListener("teardown",()=>{o.removeEventListener(t,r)},{once:!0})};function De(e,t,r){t&&r>t&&(r=t);for(let n=0;n<e.length;n++)if(e.start(n)<=r&&e.end(n)>=r)return!0;return!1}var V=e=>{let t=e.indexOf("?");if(t<0)return[e];let r=e.slice(0,t),n=e.slice(t);return[r,n]},F=e=>{let t=e.type;if(t){let n=t.toUpperCase();return S(n,H)?H[n]:t}let{src:r}=e;return r?Ht(r):""},re=e=>e==="VOD"?D.ON_DEMAND:D.LIVE,ne=e=>e==="EVENT"?Number.POSITIVE_INFINITY:e==="VOD"?Number.NaN:0,Ht=e=>{let t="";try{t=new URL(e).pathname}catch{console.error("invalid url")}let r=t.lastIndexOf(".");if(r<0)return"";let o=t.slice(r+1).toUpperCase();return S(o,L)?L[o]:""},G=e=>{let t=(e!=null?e:"").split(".")[1];if(t)try{let r=t.replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(atob(r).split("").map(function(o){return"%"+("00"+o.charCodeAt(0).toString(16)).slice(-2)}).join(""));return JSON.parse(n)}catch{return}},Pe=({exp:e},t=Date.now())=>!e||e*1e3<t,_e=({sub:e},t)=>e!==t,ke=({aud:e},t)=>!e,he=({aud:e},t)=>e!==t,Ne="en";function m(e,t=!0){var o,a;let r=t&&(a=(o=J)==null?void 0:o[e])!=null?a:e,n=t?J.code:Ne;return new te(r,n)}var te=class{constructor(t,r=(n=>(n=J)!=null?n:Ne)()){this.message=t,this.locale=r}format(t){return this.message.replace(/\{(\w+)\}/g,(r,n)=>{var o;return(o=t[n])!=null?o:""})}toString(){return this.message}};var Vt=Object.values(U),Le=e=>typeof e=="boolean"||typeof e=="string"&&Vt.includes(e),Ie=(e,t,r)=>{let{autoplay:n}=e,o=!1,a=!1,s=Le(n)?n:!!n,u=()=>{o||x(t,"playing",()=>{o=!0},{once:!0})};if(u(),x(t,"loadstart",()=>{o=!1,u(),oe(t,s)},{once:!0}),x(t,"loadstart",()=>{r||(e.streamType&&e.streamType!==D.UNKNOWN?a=e.streamType===D.LIVE:a=!Number.isFinite(t.duration)),oe(t,s)},{once:!0}),r&&r.once(R.Events.LEVEL_LOADED,(c,i)=>{var d;e.streamType&&e.streamType!==D.UNKNOWN?a=e.streamType===D.LIVE:a=(d=i.details.live)!=null?d:!1}),!s){let c=()=>{!a||Number.isFinite(e.startTime)||(r!=null&&r.liveSyncPosition?t.currentTime=r.liveSyncPosition:Number.isFinite(t.seekable.end(0))&&(t.currentTime=t.seekable.end(0)))};r&&x(t,"play",()=>{t.preload==="metadata"?r.once(R.Events.LEVEL_UPDATED,c):c()},{once:!0})}return c=>{o||(s=Le(c)?c:!!c,oe(t,s))}},oe=(e,t)=>{if(!t)return;let r=e.muted,n=()=>e.muted=r;switch(t){case U.ANY:e.play().catch(()=>{e.muted=!0,e.play().catch(n)});break;case U.MUTED:e.muted=!0,e.play().catch(n);break;default:e.play().catch(()=>{});break}};var Ae=({preload:e,src:t},r,n)=>{let o=d=>{d!=null&&["","none","metadata","auto"].includes(d)?r.setAttribute("preload",d):r.removeAttribute("preload")};if(!n)return o(e),o;let a=!1,s=!1,u=n.config.maxBufferLength,l=n.config.maxBufferSize,c=d=>{o(d);let p=d!=null?d:r.preload;s||p==="none"||(p==="metadata"?(n.config.maxBufferLength=1,n.config.maxBufferSize=1):(n.config.maxBufferLength=u,n.config.maxBufferSize=l),i())},i=()=>{!a&&t&&(a=!0,n.loadSource(t))};return x(r,"play",()=>{s=!0,n.config.maxBufferLength=u,n.config.maxBufferSize=l,i()},{once:!0}),c(e),c};function Se(e,t){var l;if(!("videoTracks"in e))return;let r=new WeakMap;t.on(R.Events.MANIFEST_PARSED,function(c,i){u();let d=e.addVideoTrack("main");d.selected=!0;for(let[p,T]of i.levels.entries()){let y=d.addRendition(T.url[0],T.width,T.height,T.videoCodec,T.bitrate);r.set(T,`${p}`),y.id=`${p}`}}),t.on(R.Events.AUDIO_TRACKS_UPDATED,function(c,i){s();for(let d of i.audioTracks){let p=d.default?"main":"alternative",T=e.addAudioTrack(p,d.name,d.lang);T.id=`${d.id}`,d.default&&(T.enabled=!0)}}),e.audioTracks.addEventListener("change",()=>{var d;let c=+((d=[...e.audioTracks].find(p=>p.enabled))==null?void 0:d.id),i=t.audioTracks.map(p=>p.id);c!=t.audioTrack&&i.includes(c)&&(t.audioTrack=c)}),t.on(R.Events.LEVELS_UPDATED,function(c,i){var T;let d=e.videoTracks[(T=e.videoTracks.selectedIndex)!=null?T:0];if(!d)return;let p=i.levels.map(y=>r.get(y));for(let y of e.videoRenditions)y.id&&!p.includes(y.id)&&d.removeRendition(y)});let n=c=>{let i=c.target.selectedIndex;i!=t.nextLevel&&o(i)},o=c=>{let i=e.currentTime,d=!1,p=(T,y)=>{d||(d=!Number.isFinite(y.endOffset))};t.on(R.Events.BUFFER_FLUSHING,p),t.nextLevel=c,t.off(R.Events.BUFFER_FLUSHING,p),d||t.trigger(R.Events.BUFFER_FLUSHING,{startOffset:i+10,endOffset:1/0,type:"video"})};(l=e.videoRenditions)==null||l.addEventListener("change",n);let a=()=>{for(let c of e.videoTracks)e.removeVideoTrack(c)},s=()=>{for(let c of e.audioTracks)e.removeAudioTrack(c)},u=()=>{a(),s()};t.once(R.Events.DESTROYING,u)}var ae=e=>"time"in e?e.time:e.startTime;function we(e,t){t.on(R.Events.NON_NATIVE_TEXT_TRACKS_FOUND,(o,{tracks:a})=>{a.forEach(s=>{var i,d;let u=(i=s.subtitleTrack)!=null?i:s.closedCaptions,l=t.subtitleTracks.findIndex(({lang:p,name:T,type:y})=>p==(u==null?void 0:u.lang)&&T===s.label&&y.toLowerCase()===s.kind),c=((d=s._id)!=null?d:s.default)?"default":`${s.kind}${l}`;z(e,s.kind,s.label,u==null?void 0:u.lang,c,s.default)})});let r=()=>{if(!t.subtitleTracks.length)return;let o=Array.from(e.textTracks).find(u=>u.id&&u.mode==="showing"&&["subtitles","captions"].includes(u.kind));if(!o)return;let a=t.subtitleTracks[t.subtitleTrack],s=a?a.default?"default":`${t.subtitleTracks[t.subtitleTrack].type.toLowerCase()}${t.subtitleTrack}`:void 0;if(t.subtitleTrack<0||(o==null?void 0:o.id)!==s){let u=t.subtitleTracks.findIndex(({lang:l,name:c,type:i,default:d})=>o.id==="default"&&d||l==o.language&&c===o.label&&i.toLowerCase()===o.kind);t.subtitleTrack=u}(o==null?void 0:o.id)===s&&o.cues&&Array.from(o.cues).forEach(u=>{o.addCue(u)})};e.textTracks.addEventListener("change",r),t.on(R.Events.CUES_PARSED,(o,{track:a,cues:s})=>{let u=e.textTracks.getTrackById(a);if(!u)return;let l=u.mode==="disabled";l&&(u.mode="hidden"),s.forEach(c=>{var i;(i=u.cues)!=null&&i.getCueById(c.id)||u.addCue(c)}),l&&(u.mode="disabled")}),t.once(R.Events.DESTROYING,()=>{e.textTracks.removeEventListener("change",r),e.querySelectorAll("track[data-removeondestroy]").forEach(a=>{a.remove()})});let n=()=>{Array.from(e.textTracks).forEach(o=>{var a,s;if(!["subtitles","caption"].includes(o.kind)&&(o.label==="thumbnails"||o.kind==="chapters")){if(!((a=o.cues)!=null&&a.length)){let u="track";o.kind&&(u+=`[kind="${o.kind}"]`),o.label&&(u+=`[label="${o.label}"]`);let l=e.querySelector(u),c=(s=l==null?void 0:l.getAttribute("src"))!=null?s:"";l==null||l.removeAttribute("src"),setTimeout(()=>{l==null||l.setAttribute("src",c)},0)}o.mode!=="hidden"&&(o.mode="hidden")}})};t.once(R.Events.MANIFEST_LOADED,n),t.once(R.Events.MEDIA_ATTACHED,n)}function z(e,t,r,n,o,a){let s=document.createElement("track");return s.kind=t,s.label=r,n&&(s.srclang=n),o&&(s.id=o),a&&(s.default=!0),s.track.mode=["subtitles","captions"].includes(t)?"disabled":"hidden",s.setAttribute("data-removeondestroy",""),e.append(s),s.track}function Oe(e,t){let r=Array.prototype.find.call(e.querySelectorAll("track"),n=>n.track===t);r==null||r.remove()}function A(e,t,r){var n;return(n=Array.from(e.querySelectorAll("track")).find(o=>o.track.label===t&&o.track.kind===r))==null?void 0:n.track}async function Ue(e,t,r,n){let o=A(e,r,n);return o||(o=z(e,n,r),o.mode="hidden",await new Promise(a=>setTimeout(()=>a(void 0),0))),o.mode!=="hidden"&&(o.mode="hidden"),[...t].sort((a,s)=>ae(s)-ae(a)).forEach(a=>{var l,c;let s=a.value,u=ae(a);if("endTime"in a&&a.endTime!=null)o==null||o.addCue(new VTTCue(u,a.endTime,n==="chapters"?s:JSON.stringify(s!=null?s:null)));else{let i=Array.prototype.findIndex.call(o==null?void 0:o.cues,y=>y.startTime>=u),d=(l=o==null?void 0:o.cues)==null?void 0:l[i],p=d?d.startTime:Number.isFinite(e.duration)?e.duration:Number.MAX_SAFE_INTEGER,T=(c=o==null?void 0:o.cues)==null?void 0:c[i-1];T&&(T.endTime=u),o==null||o.addCue(new VTTCue(u,p,n==="chapters"?s:JSON.stringify(s!=null?s:null)))}}),e.textTracks.dispatchEvent(new Event("change",{bubbles:!0,composed:!0})),o}var se="cuepoints",He=Object.freeze({label:se});async function ie(e,t,r=He){return Ue(e,t,r.label,"metadata")}var q=e=>({time:e.startTime,value:JSON.parse(e.text)});function Ve(e,t={label:se}){let r=A(e,t.label,"metadata");return r!=null&&r.cues?Array.from(r.cues,n=>q(n)):[]}function ce(e,t={label:se}){var a,s;let r=A(e,t.label,"metadata");if(!((a=r==null?void 0:r.activeCues)!=null&&a.length))return;if(r.activeCues.length===1)return q(r.activeCues[0]);let{currentTime:n}=e,o=Array.prototype.find.call((s=r.activeCues)!=null?s:[],({startTime:u,endTime:l})=>u<=n&&l>n);return q(o||r.activeCues[0])}async function ue(e,t=He){return new Promise(r=>{x(e,"loadstart",async()=>{let n=await ie(e,[],t);x(e,"cuechange",()=>{let o=ce(e);if(o){let a=new CustomEvent("cuepointchange",{composed:!0,bubbles:!0,detail:o});e.dispatchEvent(a)}},{},n),r(n)})})}var de="chapters",Fe=Object.freeze({label:de}),j=e=>({startTime:e.startTime,endTime:e.endTime,value:e.text});async function le(e,t,r=Fe){return Ue(e,t,r.label,"chapters")}function Ke(e,t={label:de}){var n;let r=A(e,t.label,"chapters");return(n=r==null?void 0:r.cues)!=null&&n.length?Array.from(r.cues,o=>j(o)):[]}function pe(e,t={label:de}){var a,s;let r=A(e,t.label,"chapters");if(!((a=r==null?void 0:r.activeCues)!=null&&a.length))return;if(r.activeCues.length===1)return j(r.activeCues[0]);let{currentTime:n}=e,o=Array.prototype.find.call((s=r.activeCues)!=null?s:[],({startTime:u,endTime:l})=>u<=n&&l>n);return j(o||r.activeCues[0])}async function fe(e,t=Fe){return new Promise(r=>{x(e,"loadstart",async()=>{let n=await le(e,[],t);x(e,"cuechange",()=>{let o=pe(e);if(o){let a=new CustomEvent("chapterchange",{composed:!0,bubbles:!0,detail:o});e.dispatchEvent(a)}},{},n),r(n)})})}function Ye(e,t){if(t){let r=t.playingDate;if(r!=null)return new Date(r.getTime()-e.currentTime*1e3)}return typeof e.getStartDate=="function"?e.getStartDate():new Date(NaN)}function We(e,t){if(t&&t.playingDate)return t.playingDate;if(typeof e.getStartDate=="function"){let r=e.getStartDate();return new Date(r.getTime()+e.currentTime*1e3)}return new Date(NaN)}var k=require("hls.js");var X={VIDEO:"v",THUMBNAIL:"t",STORYBOARD:"s",DRM:"d"},Ft=e=>{if(e===C.VIDEO)return X.VIDEO;if(e===C.DRM)return X.DRM},Kt=(e,t)=>{var o,a;let r=O(e),n=`${r}Token`;return(o=t.tokens)!=null&&o[r]?(a=t.tokens)==null?void 0:a[r]:S(n,t)?t[n]:void 0},K=(e,t,r,n=!1,o=!(a=>(a=globalThis.navigator)==null?void 0:a.onLine)())=>{var v,N;if(o){let M=m("Your device appears to be offline",n),b=void 0,E=f.MEDIA_ERR_NETWORK,h=new f(M,E,!0,b);return h.errorCategory=t,h.muxCode=g.NETWORK_OFFLINE,h.data=e,h}let s="status"in e?e.status:e.code,u=Date.now(),l=f.MEDIA_ERR_NETWORK;if(s===200)return;let c=O(t),i=Kt(t,r),d=Ft(t),[p]=V((v=r.playbackId)!=null?v:"");if(!s||!p)return;let T=G(i);if(i&&!T){let M=m("The {tokenNamePrefix}-token provided is invalid or malformed.",n).format({tokenNamePrefix:c}),b=m("Compact JWT string: {token}",n).format({token:i}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_TOKEN_MALFORMED,E.data=e,E}if(s>=500){let M=new f("",l,!0);return M.errorCategory=t,M.muxCode=g.NETWORK_UNKNOWN_ERROR,M}if(s===403)if(T){if(Pe(T,u)){let M={timeStyle:"medium",dateStyle:"medium"},b=m("The video\u2019s secured {tokenNamePrefix}-token has expired.",n).format({tokenNamePrefix:c}),E=m("Expired at: {expiredDate}. Current time: {currentDate}.",n).format({expiredDate:new Intl.DateTimeFormat("en",M).format((N=T.exp)!=null?N:0*1e3),currentDate:new Intl.DateTimeFormat("en",M).format(u)}),h=new f(b,l,!0,E);return h.errorCategory=t,h.muxCode=g.NETWORK_TOKEN_EXPIRED,h.data=e,h}if(_e(T,p)){let M=m("The video\u2019s playback ID does not match the one encoded in the {tokenNamePrefix}-token.",n).format({tokenNamePrefix:c}),b=m("Specified playback ID: {playbackId} and the playback ID encoded in the {tokenNamePrefix}-token: {tokenPlaybackId}",n).format({tokenNamePrefix:c,playbackId:p,tokenPlaybackId:T.sub}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_TOKEN_SUB_MISMATCH,E.data=e,E}if(ke(T,d)){let M=m("The {tokenNamePrefix}-token is formatted with incorrect information.",n).format({tokenNamePrefix:c}),b=m("The {tokenNamePrefix}-token has no aud value. aud value should be {expectedAud}.",n).format({tokenNamePrefix:c,expectedAud:d}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_TOKEN_AUD_MISSING,E.data=e,E}if(he(T,d)){let M=m("The {tokenNamePrefix}-token is formatted with incorrect information.",n).format({tokenNamePrefix:c}),b=m("The {tokenNamePrefix}-token has an incorrect aud value: {aud}. aud value should be {expectedAud}.",n).format({tokenNamePrefix:c,expectedAud:d,aud:T.aud}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_TOKEN_AUD_MISMATCH,E.data=e,E}}else{let M=m("Authorization error trying to access this {category} URL. If this is a signed URL, you might need to provide a {tokenNamePrefix}-token.",n).format({tokenNamePrefix:c,category:t}),b=m("Specified playback ID: {playbackId}",n).format({playbackId:p}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_TOKEN_MISSING,E.data=e,E}if(s===412){let M=m("This playback-id may belong to a live stream that is not currently active or an asset that is not ready.",n),b=m("Specified playback ID: {playbackId}",n).format({playbackId:p}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_NOT_READY,E.data=e,E}if(s===404){let M=m("This URL or playback-id does not exist. You may have used an Asset ID or an ID from a different resource.",n),b=m("Specified playback ID: {playbackId}",n).format({playbackId:p}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_NOT_FOUND,E.data=e,E}if(s===400){let M=m("The URL or playback-id was invalid. You may have used an invalid value as a playback-id."),b=m("Specified playback ID: {playbackId}",n).format({playbackId:p}),E=new f(M,l,!0,b);return E.errorCategory=t,E.muxCode=g.NETWORK_INVALID_URL,E.data=e,E}let y=new f("",l,!0);return y.errorCategory=t,y.muxCode=g.NETWORK_UNKNOWN_ERROR,y.data=e,y};var Q={FAIRPLAY:"fairplay",PLAYREADY:"playready",WIDEVINE:"widevine"},Xe=e=>{if(e.includes("fps"))return Q.FAIRPLAY;if(e.includes("playready"))return Q.PLAYREADY;if(e.includes("widevine"))return Q.WIDEVINE},Qe=async e=>fetch(e).then(t=>t.status!==200?Promise.reject(t):t.text()).then(t=>{let r=t.split(`
`).find((n,o,a)=>o&&a[o-1].startsWith("#EXT-X-STREAM-INF"));return fetch(r).then(n=>n.status!==200?Promise.reject(n):n.text()).then(n=>n.split(`
`))}),Ze=e=>{var s,u,l;let r=(u=((s=e.find(c=>c.startsWith("#EXT-X-PLAYLIST-TYPE")))!=null?s:"").split(":")[1])==null?void 0:u.trim(),n=re(r),o=ne(r),a;if(n===D.LIVE){let c=e.find(d=>d.startsWith("#EXT-X-PART-INF"));if(!!c)a=+c.split(":")[1].split("=")[1]*2;else{let d=e.find(y=>y.startsWith("#EXT-X-TARGETDURATION")),p=(l=d==null?void 0:d.split(":"))==null?void 0:l[1];a=+(p!=null?p:6)*3}}return{streamType:n,targetLiveWindow:o,liveEdgeStartOffset:a}},et=async(e,t)=>{if(t===L.MP4)return{streamType:D.ON_DEMAND,targetLiveWindow:Number.NaN,liveEdgeStartOffset:void 0};if(t===L.M3U8){let r=await Qe(e);return Ze(r)}return console.error(`Media type ${t} is an unrecognized or unsupported type for src ${e}.`),{streamType:void 0,targetLiveWindow:void 0,liveEdgeStartOffset:void 0}},tt=async(e,t,r=F({src:e}))=>{var s,u,l;let{streamType:n,targetLiveWindow:o,liveEdgeStartOffset:a}=await et(e,r);((s=P.get(t))!=null?s:{}).liveEdgeStartOffset=a,((u=P.get(t))!=null?u:{}).targetLiveWindow=o,t.dispatchEvent(new CustomEvent("targetlivewindowchange",{composed:!0,bubbles:!0})),((l=P.get(t))!=null?l:{}).streamType=n,t.dispatchEvent(new CustomEvent("streamtypechange",{composed:!0,bubbles:!0}))},rt=e=>{var s;let t=e.type,r=re(t),n=ne(t),o,a=!!((s=e.partList)!=null&&s.length);return r===D.LIVE&&(o=a?e.partTarget*2:e.targetduration*3),{streamType:r,targetLiveWindow:n,liveEdgeStartOffset:o,lowLatency:a}},nt=(e,t,r)=>{var u,l,c,i,d,p,T,y;let{streamType:n,targetLiveWindow:o,liveEdgeStartOffset:a,lowLatency:s}=rt(e);if(n===D.LIVE){s?(r.config.backBufferLength=(u=r.userConfig.backBufferLength)!=null?u:4,r.config.maxFragLookUpTolerance=(l=r.userConfig.maxFragLookUpTolerance)!=null?l:.001,r.config.abrBandWidthUpFactor=(c=r.userConfig.abrBandWidthUpFactor)!=null?c:r.config.abrBandWidthFactor):r.config.backBufferLength=(i=r.userConfig.backBufferLength)!=null?i:8;let v=Object.freeze({get length(){return t.seekable.length},start(N){return t.seekable.start(N)},end(N){var M;return N>this.length||N<0||Number.isFinite(t.duration)?t.seekable.end(N):(M=r.liveSyncPosition)!=null?M:t.seekable.end(N)}});((d=P.get(t))!=null?d:{}).seekable=v}((p=P.get(t))!=null?p:{}).liveEdgeStartOffset=a,((T=P.get(t))!=null?T:{}).targetLiveWindow=o,t.dispatchEvent(new CustomEvent("targetlivewindowchange",{composed:!0,bubbles:!0})),((y=P.get(t))!=null?y:{}).streamType=n,t.dispatchEvent(new CustomEvent("streamtypechange",{composed:!0,bubbles:!0}))},$e,Be,Yt=(Be=($e=globalThis==null?void 0:globalThis.navigator)==null?void 0:$e.userAgent)!=null?Be:"",Je,Ge,qe,Wt=(qe=(Ge=(Je=globalThis==null?void 0:globalThis.navigator)==null?void 0:Je.userAgentData)==null?void 0:Ge.platform)!=null?qe:"",$t=Yt.toLowerCase().includes("android")||["x11","android"].some(e=>Wt.toLowerCase().includes(e)),P=new WeakMap,I="mux.com",je,ze,ot=(ze=(je=R).isSupported)==null?void 0:ze.call(je),Bt=$t,Jt=()=>W.default.utils.now(),at=W.default.utils.generateUUID,Gt=({playbackId:e,customDomain:t=I,maxResolution:r,minResolution:n,renditionOrder:o,programStartTime:a,programEndTime:s,playbackToken:u,tokens:{playback:l=u}={},extraSourceParams:c={}}={})=>{if(!e)return;let[i,d=""]=V(e),p=new URL(`https://stream.${t}/${i}.m3u8${d}`);return l||p.searchParams.has("token")?(p.searchParams.forEach((T,y)=>{y!="token"&&p.searchParams.delete(y)}),l&&p.searchParams.set("token",l)):(r&&p.searchParams.set("max_resolution",r),n&&(p.searchParams.set("min_resolution",n),r&&+r.slice(0,-1)<+n.slice(0,-1)&&console.error("minResolution must be <= maxResolution","minResolution",n,"maxResolution",r)),o&&p.searchParams.set("rendition_order",o),a&&p.searchParams.set("program_start_time",`${a}`),s&&p.searchParams.set("program_end_time",`${s}`),Object.entries(c).forEach(([T,y])=>{y!=null&&p.searchParams.set(T,y)})),p.toString()},ee=e=>{if(!e)return;let[t]=e.split("?");return t||void 0},st=e=>{if(!e||!e.startsWith("https://stream."))return;let[t]=new URL(e).pathname.slice(1).split(".m3u8");return t||void 0},qt=e=>{var t,r,n;return(t=e==null?void 0:e.metadata)!=null&&t.video_id?e.metadata.video_id:Me(e)&&(n=(r=ee(e.playbackId))!=null?r:st(e.src))!=null?n:e.src},it=e=>{var t;return(t=P.get(e))==null?void 0:t.error},Te=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.streamType)!=null?r:D.UNKNOWN},jt=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.targetLiveWindow)!=null?r:Number.NaN},Z=e=>{var t,r;return(r=(t=P.get(e))==null?void 0:t.seekable)!=null?r:e.seekable},zt=e=>{var n;let t=(n=P.get(e))==null?void 0:n.liveEdgeStartOffset;if(typeof t!="number")return Number.NaN;let r=Z(e);return r.length?r.end(r.length-1)-t:Number.NaN},Ee=.034,Xt=(e,t,r=Ee)=>Math.abs(e-t)<=r,ct=(e,t,r=Ee)=>e>t||Xt(e,t,r),ut=(e,t=Ee)=>e.paused&&ct(e.currentTime,e.duration,t),me=(e,t)=>{var c,i,d;if(!t||!e.buffered.length)return;if(e.readyState>2)return!1;let r=t.currentLevel>=0?(i=(c=t.levels)==null?void 0:c[t.currentLevel])==null?void 0:i.details:(d=t.levels.find(p=>!!p.details))==null?void 0:d.details;if(!r||r.live)return;let{fragments:n}=r;if(!(n!=null&&n.length))return;if(e.currentTime<e.duration-(r.targetduration+.5))return!1;let o=n[n.length-1];if(e.currentTime<=o.start)return!1;let a=o.start+o.duration/2,s=e.buffered.start(e.buffered.length-1),u=e.buffered.end(e.buffered.length-1);return a>s&&a<u},dt=(e,t)=>e.ended||e.loop?e.ended:t&&me(e,t)?!0:ut(e),Qt=(e,t,r)=>{lt(t,r);let{metadata:n={}}=e,{view_session_id:o=at()}=n,a=qt(e);n.view_session_id=o,n.video_id=a,e.metadata=n;let s=i=>{var d;(d=t.mux)==null||d.emit("hb",{view_drm_type:i})};e.drmTypeCb=s,P.set(t,{});let u=ft(e,t),l=Ae(e,t,u);Mt(e,t,u),Rt(e,t,u),ue(t),fe(t);let c=Ie(e,t,u);return{engine:u,setAutoplay:c,setPreload:l}},lt=(e,t)=>{let r=t==null?void 0:t.engine;r&&(r.detachMedia(),r.destroy()),e!=null&&e.mux&&!e.mux.deleted&&(e.mux.destroy(),delete e.mux),e&&(e.removeAttribute("src"),e.load(),e.removeEventListener("error",bt),e.removeEventListener("error",ye),e.removeEventListener("durationchange",Ct),P.delete(e),e.dispatchEvent(new Event("teardown")))};function pt(e,t){var c;let r=F(e);if(!(r===L.M3U8))return!0;let o=!r||((c=t.canPlayType(r))!=null?c:!0),{preferPlayback:a}=e,s=a===B.MSE,u=a===B.NATIVE;return o&&(u||!(ot&&(s||Bt)))}var ft=(e,t)=>{let{debug:r,streamType:n,startTime:o=-1,metadata:a,preferCmcd:s,_hlsConfig:u={}}=e,c=F(e)===L.M3U8,i=pt(e,t);if(c&&!i&&ot){let d={backBufferLength:30,renderTextTracksNatively:!1,liveDurationInfinity:!0,capLevelToPlayerSize:!0,capLevelOnFPSDrop:!0},p=Tt(n),T=yt(e),y=s!==w.NONE?{useHeaders:s===w.HEADER,sessionId:a==null?void 0:a.view_session_id,contentId:a==null?void 0:a.video_id}:void 0;return new R({debug:r,startPosition:o,cmcd:y,xhrSetup:(N,M)=>{var h,Re;if(s&&s!==w.QUERY)return;let b=new URL(M);if(!b.searchParams.has("CMCD"))return;let E=((Re=(h=b.searchParams.get("CMCD"))==null?void 0:h.split(","))!=null?Re:[]).filter(Ce=>Ce.startsWith("sid")||Ce.startsWith("cid")).join(",");b.searchParams.set("CMCD",E),N.open("GET",b)},...d,...p,...T,...u})}},Tt=e=>e===D.LIVE?{backBufferLength:8}:{},yt=e=>{let{tokens:{drm:t}={},playbackId:r,drmTypeCb:n}=e,o=ee(r);return!t||!o?{}:{emeEnabled:!0,drmSystems:{"com.apple.fps":{licenseUrl:Y(e,"fairplay"),serverCertificateUrl:ge(e,"fairplay")},"com.widevine.alpha":{licenseUrl:Y(e,"widevine")},"com.microsoft.playready":{licenseUrl:Y(e,"playready")}},requestMediaKeySystemAccessFunc:(a,s)=>(a==="com.widevine.alpha"&&(s=[...s.map(u=>{var c;let l=(c=u.videoCapabilities)==null?void 0:c.map(i=>({...i,robustness:"HW_SECURE_ALL"}));return{...u,videoCapabilities:l}}),...s]),navigator.requestMediaKeySystemAccess(a,s).then(u=>{let l=Xe(a);return n==null||n(l),u}))}},Et=async e=>{let t=await fetch(e);return t.status!==200?Promise.reject(t):await t.arrayBuffer()},mt=async(e,t)=>{let r=await fetch(t,{method:"POST",headers:{"Content-type":"application/octet-stream"},body:e});if(r.status!==200)return Promise.reject(r);let n=await r.arrayBuffer();return new Uint8Array(n)},gt=(e,t)=>{x(t,"encrypted",async n=>{try{let o=n.initDataType;if(o!=="skd"){console.error(`Received unexpected initialization data type "${o}"`);return}if(!t.mediaKeys){let c=await navigator.requestMediaKeySystemAccess("com.apple.fps",[{initDataTypes:[o],videoCapabilities:[{contentType:"application/vnd.apple.mpegurl",robustness:""}],distinctiveIdentifier:"not-allowed",persistentState:"not-allowed",sessionTypes:["temporary"]}]).then(d=>{var p;return(p=e.drmTypeCb)==null||p.call(e,Q.FAIRPLAY),d}).catch(()=>{let d=m("Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser."),p=new f(d,f.MEDIA_ERR_ENCRYPTED,!0);p.errorCategory=C.DRM,p.muxCode=g.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM,t.dispatchEvent(new CustomEvent("error",{detail:p}))});if(!c)return;let i=await c.createMediaKeys();try{let d=await Et(ge(e,"fairplay")).catch(p=>{if(p instanceof Response){let T=K(p,C.DRM,e);return console.error("mediaError",T==null?void 0:T.message,T==null?void 0:T.context),T?Promise.reject(T):Promise.reject(new Error("Unexpected error in app cert request"))}return Promise.reject(p)});await i.setServerCertificate(d).catch(()=>{let p=m("Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate."),T=new f(p,f.MEDIA_ERR_ENCRYPTED,!0);return T.errorCategory=C.DRM,T.muxCode=g.ENCRYPTED_UPDATE_SERVER_CERT_FAILED,Promise.reject(T)})}catch(d){t.dispatchEvent(new CustomEvent("error",{detail:d}));return}await t.setMediaKeys(i)}let a=n.initData;if(a==null){console.error(`Could not start encrypted playback due to missing initData in ${n.type} event`);return}let s=t.mediaKeys.createSession();s.addEventListener("keystatuseschange",()=>{s.keyStatuses.forEach(c=>{let i;if(c==="internal-error"){let d=m("The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.");i=new f(d,f.MEDIA_ERR_ENCRYPTED,!0),i.errorCategory=C.DRM,i.muxCode=g.ENCRYPTED_CDM_ERROR}else if(c==="output-restricted"||c==="output-downscaled"){let d=m("DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.");i=new f(d,f.MEDIA_ERR_ENCRYPTED,!1),i.errorCategory=C.DRM,i.muxCode=g.ENCRYPTED_OUTPUT_RESTRICTED}i&&t.dispatchEvent(new CustomEvent("error",{detail:i}))})});let u=await Promise.all([s.generateRequest(o,a).catch(()=>{let c=m("Failed to generate a DRM license request. This may be an issue with the player or your protected content."),i=new f(c,f.MEDIA_ERR_ENCRYPTED,!0);i.errorCategory=C.DRM,i.muxCode=g.ENCRYPTED_GENERATE_REQUEST_FAILED,t.dispatchEvent(new CustomEvent("error",{detail:i}))}),new Promise(c=>{s.addEventListener("message",i=>{c(i.message)},{once:!0})})]).then(([,c])=>c);s.generateRequest(o,a);let l=await mt(u,Y(e,"fairplay")).catch(c=>{if(c instanceof Response){let i=K(c,C.DRM,e);return console.error("mediaError",i==null?void 0:i.message,i==null?void 0:i.context),i?Promise.reject(i):Promise.reject(new Error("Unexpected error in license key request"))}return Promise.reject(c)});await s.update(l).catch(()=>{let c=m("Failed to update DRM license. This may be an issue with the player or your protected content."),i=new f(c,f.MEDIA_ERR_ENCRYPTED,!0);return i.errorCategory=C.DRM,i.muxCode=g.ENCRYPTED_UPDATE_LICENSE_FAILED,Promise.reject(i)})}catch(o){t.dispatchEvent(new CustomEvent("error",{detail:o}));return}})},Y=({playbackId:e,tokens:{drm:t}={},customDomain:r=I},n)=>{let o=ee(e);return`https://license.${r.toLocaleLowerCase().endsWith(I)?r:I}/license/${n}/${o}?token=${t}`},ge=({playbackId:e,tokens:{drm:t}={},customDomain:r=I},n)=>{let o=ee(e);return`https://license.${r.toLocaleLowerCase().endsWith(I)?r:I}/appcert/${n}/${o}?token=${t}`},Me=({playbackId:e,src:t,customDomain:r})=>{if(e)return!0;if(typeof t!="string")return!1;let n=window==null?void 0:window.location.href,o=new URL(t,n).hostname.toLocaleLowerCase();return o.includes(I)||!!r&&o.includes(r.toLocaleLowerCase())},Mt=(e,t,r)=>{var s;let{envKey:n,disableTracking:o}=e,a=Me(e);if(!o&&(n||a)){let{playerInitTime:u,playerSoftwareName:l,playerSoftwareVersion:c,beaconCollectionDomain:i,debug:d,disableCookies:p}=e,T={...e.metadata,video_title:((s=e==null?void 0:e.metadata)==null?void 0:s.video_title)||void 0},y=v=>typeof v.player_error_code=="string"?!1:typeof e.errorTranslator=="function"?e.errorTranslator(v):v;W.default.monitor(t,{debug:d,beaconCollectionDomain:i,hlsjs:r,Hls:r?R:void 0,automaticErrorTracking:!1,errorTranslator:y,disableCookies:p,data:{...n?{env_key:n}:{},player_software_name:l,player_software:l,player_software_version:c,player_init_time:u,...T}})}},Rt=(e,t,r)=>{var c,i;let n=pt(e,t),{src:o}=e,a=()=>{t.ended||!dt(t,r)||(me(t,r)?t.currentTime=t.buffered.end(t.buffered.length-1):t.dispatchEvent(new Event("ended")))},s,u,l=()=>{var T,y;let d=(T=Z(t))==null?void 0:T.start(0),p=(y=Z(t))==null?void 0:y.end(0);(u!==p||s!==d)&&t.dispatchEvent(new CustomEvent("seekablechange",{composed:!0})),s=d,u=p};if(x(t,"durationchange",l),t&&n){let d=F(e);if(typeof o=="string"){let p=()=>{if(Te(t)!==D.LIVE||Number.isFinite(t.duration))return;let y=setInterval(l,1e3);t.addEventListener("teardown",()=>{clearInterval(y)},{once:!0}),x(t,"durationchange",()=>{Number.isFinite(t.duration)&&clearInterval(y)})},T=async()=>tt(o,t,d).then(p).catch(y=>{if(y instanceof Response){let v=K(y,C.VIDEO,e);if(v){t.dispatchEvent(new CustomEvent("error",{detail:v}));return}}else y instanceof Error});if(t.preload==="none"){let y=()=>{T(),t.removeEventListener("loadedmetadata",v)},v=()=>{T(),t.removeEventListener("play",y)};x(t,"play",y,{once:!0}),x(t,"loadedmetadata",v,{once:!0})}else T();(c=e.tokens)!=null&&c.drm?gt(e,t):x(t,"encrypted",()=>{let y=m("Attempting to play DRM-protected content without providing a DRM token."),v=new f(y,f.MEDIA_ERR_ENCRYPTED,!0);v.errorCategory=C.DRM,v.muxCode=g.ENCRYPTED_MISSING_TOKEN,t.dispatchEvent(new CustomEvent("error",{detail:v}))},{once:!0}),t.setAttribute("src",o),e.startTime&&(((i=P.get(t))!=null?i:{}).startTime=e.startTime,t.addEventListener("durationchange",Ct,{once:!0}))}else t.removeAttribute("src");t.addEventListener("error",bt),t.addEventListener("error",ye),t.addEventListener("emptied",()=>{t.querySelectorAll("track[data-removeondestroy]").forEach(T=>{T.remove()})},{once:!0}),x(t,"pause",a),x(t,"seeked",a),x(t,"play",()=>{t.ended||ct(t.currentTime,t.duration)&&(t.currentTime=t.seekable.length?t.seekable.start(0):0)})}else r&&o?(r.once(R.Events.LEVEL_LOADED,(d,p)=>{nt(p.details,t,r),l(),Te(t)===D.LIVE&&!Number.isFinite(t.duration)&&(r.on(R.Events.LEVEL_UPDATED,l),x(t,"durationchange",()=>{Number.isFinite(t.duration)&&r.off(R.Events.LEVELS_UPDATED,l)}))}),r.on(R.Events.ERROR,(d,p)=>{t.dispatchEvent(new CustomEvent("error",{detail:Zt(p,e)}))}),t.addEventListener("error",ye),x(t,"waiting",a),Se(e,r),we(t,r),r.attachMedia(t)):console.error("It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.")};function Ct(e){var n;let t=e.target,r=(n=P.get(t))==null?void 0:n.startTime;if(r&&De(t.seekable,t.duration,r)){let o=t.preload==="auto";o&&(t.preload="none"),t.currentTime=r,o&&(t.preload="auto")}}async function bt(e){if(!e.isTrusted)return;e.stopImmediatePropagation();let t=e.target;if(!(t!=null&&t.error))return;let{message:r,code:n}=t.error,o=new f(r,n);if(t.src&&n===f.MEDIA_ERR_SRC_NOT_SUPPORTED&&t.readyState===HTMLMediaElement.HAVE_NOTHING){setTimeout(()=>{var s;let a=(s=it(t))!=null?s:t.error;(a==null?void 0:a.code)===f.MEDIA_ERR_SRC_NOT_SUPPORTED&&t.dispatchEvent(new CustomEvent("error",{detail:o}))},500);return}if(t.src&&(n!==f.MEDIA_ERR_DECODE||n!==void 0))try{let{status:a}=await fetch(t.src);o.data={response:{code:a}}}catch{}t.dispatchEvent(new CustomEvent("error",{detail:o}))}function ye(e){var n,o;if(!(e instanceof CustomEvent)||!(e.detail instanceof f))return;let t=e.target,r=e.detail;!r||!r.fatal||(((n=P.get(t))!=null?n:{}).error=r,(o=t.mux)==null||o.emit("error",{player_error_code:r.code,player_error_message:r.message,player_error_context:r.context}))}var Zt=(e,t)=>{var u,l,c;console.error("getErrorFromHlsErrorData()",e);let r={[R.ErrorTypes.NETWORK_ERROR]:f.MEDIA_ERR_NETWORK,[R.ErrorTypes.MEDIA_ERROR]:f.MEDIA_ERR_DECODE,[R.ErrorTypes.KEY_SYSTEM_ERROR]:f.MEDIA_ERR_ENCRYPTED},n=i=>[k.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,k.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED].includes(i.details)?f.MEDIA_ERR_NETWORK:r[i.type],o=i=>{if(i.type===k.ErrorTypes.KEY_SYSTEM_ERROR)return C.DRM;if(i.type===k.ErrorTypes.NETWORK_ERROR)return C.VIDEO},a,s=n(e);if(s===f.MEDIA_ERR_NETWORK&&e.response){let i=(u=o(e))!=null?u:C.VIDEO;a=(l=K(e.response,i,t))!=null?l:new f("",s)}else if(s===f.MEDIA_ERR_ENCRYPTED)if(e.details===k.ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE){let i=m("Attempting to play DRM-protected content without providing a DRM token.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_MISSING_TOKEN}else if(e.details===k.ErrorDetails.KEY_SYSTEM_NO_ACCESS){let i=m("Cannot play DRM-protected content with current security configuration on this browser. Try playing in another browser.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_UNSUPPORTED_KEY_SYSTEM}else if(e.details===k.ErrorDetails.KEY_SYSTEM_NO_SESSION){let i=m("Failed to generate a DRM license request. This may be an issue with the player or your protected content.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,!0),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_GENERATE_REQUEST_FAILED}else if(e.details===k.ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED){let i=m("Failed to update DRM license. This may be an issue with the player or your protected content.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_UPDATE_LICENSE_FAILED}else if(e.details===k.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED){let i=m("Your server certificate failed when attempting to set it. This may be an issue with a no longer valid certificate.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_UPDATE_SERVER_CERT_FAILED}else if(e.details===k.ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR){let i=m("The DRM Content Decryption Module system had an internal failure. Try reloading the page, upading your browser, or playing in another browser.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_CDM_ERROR}else if(e.details===k.ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED){let i=m("DRM playback is being attempted in an environment that is not sufficiently secure. User may see black screen.");a=new f(i,f.MEDIA_ERR_ENCRYPTED,!1),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_OUTPUT_RESTRICTED}else a=new f(e.error.message,f.MEDIA_ERR_ENCRYPTED,e.fatal),a.errorCategory=C.DRM,a.muxCode=g.ENCRYPTED_ERROR;else a=new f("",s,e.fatal);return a.context||(a.context=`${e.url?`url: ${e.url}
`:""}${e.response&&(e.response.code||e.response.text)?`response: ${e.response.code}, ${e.response.text}
`:""}${e.reason?`failure reason: ${e.reason}
`:""}${e.level?`level: ${e.level}
`:""}${e.parent?`parent stream controller: ${e.parent}
`:""}${e.buffer?`buffer length: ${e.buffer}
`:""}${e.error?`error: ${e.error}
`:""}${e.event?`event: ${e.event}
`:""}${e.err?`error message: ${(c=e.err)==null?void 0:c.message}
`:""}`),a.data=e,a};
//# sourceMappingURL=index.cjs.js.map

47

dist/types-ts3.4/errors.d.ts

@@ -0,7 +1,42 @@

export declare const MuxErrorCategory: {
readonly VIDEO: "video";
readonly THUMBNAIL: "thumbnail";
readonly STORYBOARD: "storyboard";
readonly DRM: "drm";
};
export declare const MuxErrorCode: {
readonly NOT_AN_ERROR: 0;
readonly NETWORK_OFFLINE: 2000002;
readonly NETWORK_UNKNOWN_ERROR: 2000000;
readonly NETWORK_NO_STATUS: 2000001;
readonly NETWORK_INVALID_URL: 2400000;
readonly NETWORK_NOT_FOUND: 2404000;
readonly NETWORK_NOT_READY: 2412000;
readonly NETWORK_GENERIC_SERVER_FAIL: 2500000;
readonly NETWORK_TOKEN_MISSING: 2403201;
readonly NETWORK_TOKEN_MALFORMED: 2412202;
readonly NETWORK_TOKEN_EXPIRED: 2403210;
readonly NETWORK_TOKEN_AUD_MISSING: 2403221;
readonly NETWORK_TOKEN_AUD_MISMATCH: 2403222;
readonly NETWORK_TOKEN_SUB_MISMATCH: 2403232;
readonly ENCRYPTED_ERROR: 5000000;
readonly ENCRYPTED_UNSUPPORTED_KEY_SYSTEM: 5000001;
readonly ENCRYPTED_GENERATE_REQUEST_FAILED: 5000002;
readonly ENCRYPTED_UPDATE_LICENSE_FAILED: 5000003;
readonly ENCRYPTED_UPDATE_SERVER_CERT_FAILED: 5000004;
readonly ENCRYPTED_CDM_ERROR: 5000005;
readonly ENCRYPTED_OUTPUT_RESTRICTED: 5000006;
readonly ENCRYPTED_MISSING_TOKEN: 5000002;
};
export type MuxErrorCategory = typeof MuxErrorCategory;
export type MuxErrorCode = typeof MuxErrorCode;
export type MuxErrorCategoryValue = MuxErrorCategory[keyof MuxErrorCategory];
export type MuxErrorCodeValue = MuxErrorCode[keyof MuxErrorCode];
export declare const errorCategoryToTokenNameOrPrefix: (category: MuxErrorCategoryValue) => "thumbnail" | "storyboard" | "drm" | "playback";
export declare class MediaError extends Error {
static MEDIA_ERR_ABORTED: number;
static MEDIA_ERR_NETWORK: number;
static MEDIA_ERR_DECODE: number;
static MEDIA_ERR_SRC_NOT_SUPPORTED: number;
static MEDIA_ERR_ENCRYPTED: number;
static MEDIA_ERR_ABORTED: 1;
static MEDIA_ERR_NETWORK: 2;
static MEDIA_ERR_DECODE: 3;
static MEDIA_ERR_SRC_NOT_SUPPORTED: 4;
static MEDIA_ERR_ENCRYPTED: 5;
static MEDIA_ERR_CUSTOM: number;

@@ -11,2 +46,4 @@ static defaultMessages: Record<number, string>;

code: number;
muxCode?: MuxErrorCodeValue;
errorCategory?: MuxErrorCategoryValue;
context?: string;

@@ -13,0 +50,0 @@ fatal: boolean;

@@ -1,13 +0,21 @@

/// <reference types="mux-embed/dist/types/mux-embed" />
import { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MuxMediaPropTypes } from './types';
import mux from 'mux-embed';
import Hls from './hls';
import { HlsInterface } from './hls';
import { MediaError } from './errors';
import { MediaError, MuxErrorCategory, MuxErrorCode, errorCategoryToTokenNameOrPrefix } from './errors';
import { addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters } from './text-tracks';
import { getStartDate, getCurrentPdt } from './pdt';
import { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import { toPlaybackIdParts, i18n, parseJwt } from './util';
import { StreamTypes, MediaTypes } from './types';
import { HlsConfig } from 'hls.js';
export { mux, Hls, MediaError, addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters, getStartDate, getCurrentPdt, };
import { MuxJWTAud } from './request-errors';
export { mux, Hls, MediaError, MuxErrorCategory, MuxErrorCode, errorCategoryToTokenNameOrPrefix, MuxJWTAud, addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters, getStartDate, getCurrentPdt, toPlaybackIdParts, i18n, parseJwt, };
export * from './types';
declare const DRMType: {
readonly FAIRPLAY: "fairplay";
readonly PLAYREADY: "playready";
readonly WIDEVINE: "widevine";
};
type DRMTypeValue = (typeof DRMType)[keyof typeof DRMType];
export declare const toDRMTypeFromKeySystem: (keySystem: string) => DRMTypeValue | undefined;
export declare const getMediaPlaylistLinesFromMultivariantPlaylistSrc: (src: string) => Promise<string[]>;

@@ -19,3 +27,3 @@ export declare const getStreamInfoFromPlaylistLines: (playlistLines: string[]) => {

};
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | '') => Promise<{
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | "") => Promise<{
streamType: "on-demand" | "live";

@@ -29,3 +37,3 @@ targetLiveWindow: number;

}>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | '') => Promise<void>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | "") => Promise<void>;
export declare const getStreamInfoFromHlsjsLevelDetails: (levelDetails: any) => {

@@ -37,3 +45,16 @@ streamType: "on-demand" | "live";

};
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, 'config' | 'userConfig' | 'liveSyncPosition'>) => void;
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, "config" | "userConfig" | "liveSyncPosition">) => void;
declare global {
interface NavigatorUAData {
platform: string;
mobile: boolean;
brands: Array<{
brand: string;
version: string;
}>;
}
interface Navigator {
userAgentData?: NavigatorUAData;
}
}
export declare const muxMediaState: WeakMap<HTMLMediaElement, Partial<MuxMediaProps> & {

@@ -45,18 +66,4 @@ seekable?: TimeRanges;

export declare const generateUUID: () => string;
type MuxVideoURLProps = Partial<{
playbackId: string;
customDomain: string;
maxResolution: MaxResolutionValue;
minResolution: MinResolutionValue;
renditionOrder: RenditionOrderValue;
programStartTime: number;
programEndTime: number;
tokens: Partial<{
playback: string;
storyboard: string;
thumbnail: string;
}>;
extraSourceParams: Record<string, any>;
}>;
export declare const toMuxVideoURL: ({ playbackId: playbackIdWithParams, customDomain: domain, maxResolution, minResolution, renditionOrder, programStartTime, programEndTime, tokens: { playback: token }, extraSourceParams, }?: MuxVideoURLProps) => string | undefined;
type MuxVideoURLProps = Partial<Pick<MuxMediaPropTypes, 'playbackId' | 'customDomain' | 'maxResolution' | 'minResolution' | 'renditionOrder' | 'programStartTime' | 'programEndTime' | 'tokens' | 'playbackToken' | 'extraSourceParams'>>;
export declare const toMuxVideoURL: ({ playbackId: playbackIdWithParams, customDomain: domain, maxResolution, minResolution, renditionOrder, programStartTime, programEndTime, playbackToken, tokens: { playback: token }, extraSourceParams, }?: MuxVideoURLProps) => string | undefined;
export declare const toPlaybackIdFromSrc: (src: string | undefined) => string | undefined;

@@ -71,22 +78,22 @@ export declare const getError: (mediaEl: HTMLMediaElement) => globalThis.MediaError | (globalThis.MediaError & MediaError) | null | undefined;

/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean | undefined;
"levels" | "currentLevel">) => boolean | undefined;
export declare const getEnded: (mediaEl: HTMLMediaElement, hls?: Pick<Hls,
/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean;
"levels" | "currentLevel">) => boolean;
export declare const initialize: (props: Partial<MuxMediaPropsInternal>, mediaEl: HTMLMediaElement, core?: PlaybackCore) => {
engine: Hls | undefined;
setAutoplay: (newAutoplay?: import("./types").Autoplay | undefined) => void;
setPreload: (val?: "" | "none" | "metadata" | "auto" | undefined) => void;
setAutoplay: (newAutoplay?: import("./types").Autoplay) => void;
setPreload: (val?: HTMLMediaElement["preload"]) => void;
};
export declare const teardown: (mediaEl?: HTMLMediaElement | null, core?: PlaybackCore) => void;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, 'debug' | 'streamType' | 'type' | 'startTime' | 'metadata' | 'preferCmcd' | '_hlsConfig' | 'drmToken'>>, mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) => Hls | undefined;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, "debug" | "streamType" | "type" | "startTime" | "metadata" | "preferCmcd" | "_hlsConfig" | "tokens" | "drmTypeCb">>, mediaEl: Pick<HTMLMediaElement, "canPlayType">) => Hls | undefined;
export declare const getStreamTypeConfig: (streamType?: ValueOf<StreamTypes>) => {};
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, 'src' | 'playbackId' | 'drmToken' | 'customDomain'>>) => Partial<HlsConfig>;
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, "src" | "playbackId" | "tokens" | "customDomain" | "drmTypeCb">>) => Partial<HlsConfig>;
export declare const getAppCertificate: (appCertificateUrl: string) => Promise<ArrayBuffer>;
export declare const getLicenseKey: (message: ArrayBuffer, licenseServerUrl: string) => Promise<Uint8Array>;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'src' | 'customDomain'>>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, 'envKey' | 'playerInitTime' | 'beaconCollectionDomain' | 'errorTranslator' | 'metadata' | 'debug' | 'playerSoftwareName' | 'playerSoftwareVersion' | 'playbackId' | 'src' | 'customDomain' | 'disableCookies' | 'disableTracking'>>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, 'preferPlayback' | 'src' | 'type' | 'startTime' | 'streamType' | 'autoplay' | 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, 'config' | 'on' | 'once' | 'off' | 'trigger' | 'startLoad' | 'stopLoad' | 'recoverMediaError' | 'destroy' | 'loadSource' | 'attachMedia' | 'liveSyncPosition' | 'subtitleTracks' | 'subtitleTrack' | 'userConfig' | 'audioTrack' | 'audioTracks' | 'autoLevelEnabled' | 'nextLevel' | 'levels' | 'currentLevel'>) => void;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "playbackToken" | "customDomain" | "drmTypeCb">>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId: playbackIdWithParams, tokens: { drm: token }, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const toAppCertURL: ({ playbackId: playbackIdWithParams, tokens: { drm: token }, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "src" | "customDomain">>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, "envKey" | "playerInitTime" | "beaconCollectionDomain" | "errorTranslator" | "metadata" | "debug" | "playerSoftwareName" | "playerSoftwareVersion" | "playbackId" | "src" | "customDomain" | "disableCookies" | "disableTracking">>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, "preferPlayback" | "src" | "type" | "startTime" | "streamType" | "autoplay" | "playbackId" | "tokens" | "customDomain">>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, "config" | "on" | "once" | "off" | "trigger" | "startLoad" | "stopLoad" | "recoverMediaError" | "destroy" | "loadSource" | "attachMedia" | "liveSyncPosition" | "subtitleTracks" | "subtitleTrack" | "userConfig" | "audioTrack" | "audioTracks" | "autoLevelEnabled" | "nextLevel" | "levels" | "currentLevel">) => void;
import { PlaybackEngine } from './types';
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement['preload']) => void;
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement["preload"]) => void;

@@ -7,3 +7,3 @@ import Hls from './hls';

export declare function setupTextTracks(mediaEl: HTMLMediaElement, hls: Pick<Hls, 'on' | 'once' | 'subtitleTracks' | 'subtitleTrack'>): void;
export declare function addTextTrack(mediaEl: HTMLMediaElement, kind: TextTrackKind, label: string, lang?: string, id?: string): TextTrack;
export declare function addTextTrack(mediaEl: HTMLMediaElement, kind: TextTrackKind, label: string, lang?: string, id?: string, defaultTrack?: boolean): TextTrack;
export declare function removeTextTrack(mediaEl: HTMLMediaElement, track: TextTrack): void;

@@ -10,0 +10,0 @@ export declare function getTextTrack(mediaEl: HTMLMediaElement, label: string, kind: TextTrackKind): TextTrack | undefined;

@@ -1,2 +0,2 @@

/// <reference types="mux-embed/dist/types/mux-embed" />
/// <reference path="../../../../node_modules/mux-embed/dist/types/mux-embed.d.ts" />
import { Options } from 'mux-embed';

@@ -87,2 +87,8 @@ import { MediaError } from './errors';

export type RenditionOrderValue = ValueOf<typeof RenditionOrder>;
export type Tokens = {
playback?: string;
drm?: string;
thumbnail?: string;
storyboard?: string;
};
export type MuxMediaPropTypes = {

@@ -98,2 +104,3 @@ _hlsConfig?: Partial<HlsConfig>;

drmToken?: string;
playbackToken?: string;
envKey: MetaData['env_key'];

@@ -116,9 +123,5 @@ error?: HTMLMediaElement['error'] | MediaError;

targetLiveWindow: number;
tokens: Partial<{
drm: string;
playback: string;
storyboard: string;
thumbnail: string;
}>;
tokens: Tokens;
type: MediaTypes;
extraSourceParams: Record<string, any>;
};

@@ -130,3 +133,4 @@ export type HTMLMediaElementProps = Partial<Pick<HTMLMediaElement, 'src' | 'preload' | 'error' | 'seekable'>>;

playerSoftwareVersion: MetaData['player_software_version'];
drmTypeCb?: (drmType: Metadata['view_drm_type']) => void;
};
export {};

@@ -9,6 +9,17 @@ import { HlsPlaylistTypes, MuxMediaProps } from './types';

];
export declare const getType: (props: Partial<Pick<MuxMediaProps, 'type' | 'src'>>) => "" | import("./types").MediaTypes;
export declare const getType: (props: Partial<Pick<MuxMediaProps, "type" | "src">>) => "" | import("./types").MediaTypes;
export declare const toStreamTypeFromPlaylistType: (playlistType: HlsPlaylistTypes) => "on-demand" | "live";
export declare const toTargetLiveWindowFromPlaylistType: (playlistType: HlsPlaylistTypes) => number;
export declare const inferMimeTypeFromURL: (url: string) => "" | "application/vnd.apple.mpegurl" | "video/mp4";
export type MuxJWT = {
sub: string;
aud: 'v' | 't' | 'g' | 's' | 'd';
exp: number;
};
export declare const parseJwt: (token: string | undefined) => Partial<MuxJWT> | undefined;
export declare const isJWTExpired: ({ exp }: Partial<Pick<MuxJWT, "exp">>, referenceTime?: number) => boolean;
export declare const isJWTSubMismatch: ({ sub }: Partial<Pick<MuxJWT, "sub">>, expectedSub: string | undefined) => boolean;
export declare const isJWTAudMissing: ({ aud }: Partial<Pick<MuxJWT, "aud">>, _expectedAud: string | undefined) => boolean;
export declare const isJWTAudMismatch: ({ aud }: Partial<Pick<MuxJWT, "aud">>, expectedAud: string | undefined) => boolean;
export declare function i18n(str: string, translate?: boolean): any;
export {};

@@ -0,7 +1,42 @@

export declare const MuxErrorCategory: {
readonly VIDEO: "video";
readonly THUMBNAIL: "thumbnail";
readonly STORYBOARD: "storyboard";
readonly DRM: "drm";
};
export declare const MuxErrorCode: {
readonly NOT_AN_ERROR: 0;
readonly NETWORK_OFFLINE: 2000002;
readonly NETWORK_UNKNOWN_ERROR: 2000000;
readonly NETWORK_NO_STATUS: 2000001;
readonly NETWORK_INVALID_URL: 2400000;
readonly NETWORK_NOT_FOUND: 2404000;
readonly NETWORK_NOT_READY: 2412000;
readonly NETWORK_GENERIC_SERVER_FAIL: 2500000;
readonly NETWORK_TOKEN_MISSING: 2403201;
readonly NETWORK_TOKEN_MALFORMED: 2412202;
readonly NETWORK_TOKEN_EXPIRED: 2403210;
readonly NETWORK_TOKEN_AUD_MISSING: 2403221;
readonly NETWORK_TOKEN_AUD_MISMATCH: 2403222;
readonly NETWORK_TOKEN_SUB_MISMATCH: 2403232;
readonly ENCRYPTED_ERROR: 5000000;
readonly ENCRYPTED_UNSUPPORTED_KEY_SYSTEM: 5000001;
readonly ENCRYPTED_GENERATE_REQUEST_FAILED: 5000002;
readonly ENCRYPTED_UPDATE_LICENSE_FAILED: 5000003;
readonly ENCRYPTED_UPDATE_SERVER_CERT_FAILED: 5000004;
readonly ENCRYPTED_CDM_ERROR: 5000005;
readonly ENCRYPTED_OUTPUT_RESTRICTED: 5000006;
readonly ENCRYPTED_MISSING_TOKEN: 5000002;
};
export type MuxErrorCategory = typeof MuxErrorCategory;
export type MuxErrorCode = typeof MuxErrorCode;
export type MuxErrorCategoryValue = MuxErrorCategory[keyof MuxErrorCategory];
export type MuxErrorCodeValue = MuxErrorCode[keyof MuxErrorCode];
export declare const errorCategoryToTokenNameOrPrefix: (category: MuxErrorCategoryValue) => "thumbnail" | "storyboard" | "drm" | "playback";
export declare class MediaError extends Error {
static MEDIA_ERR_ABORTED: number;
static MEDIA_ERR_NETWORK: number;
static MEDIA_ERR_DECODE: number;
static MEDIA_ERR_SRC_NOT_SUPPORTED: number;
static MEDIA_ERR_ENCRYPTED: number;
static MEDIA_ERR_ABORTED: 1;
static MEDIA_ERR_NETWORK: 2;
static MEDIA_ERR_DECODE: 3;
static MEDIA_ERR_SRC_NOT_SUPPORTED: 4;
static MEDIA_ERR_ENCRYPTED: 5;
static MEDIA_ERR_CUSTOM: number;

@@ -11,2 +46,4 @@ static defaultMessages: Record<number, string>;

code: number;
muxCode?: MuxErrorCodeValue;
errorCategory?: MuxErrorCategoryValue;
context?: string;

@@ -13,0 +50,0 @@ fatal: boolean;

@@ -1,13 +0,21 @@

/// <reference types="mux-embed/dist/types/mux-embed" />
import type { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MuxMediaPropTypes } from './types';
import mux from 'mux-embed';
import Hls from './hls';
import type { HlsInterface } from './hls';
import { MediaError } from './errors';
import { MediaError, MuxErrorCategory, MuxErrorCode, errorCategoryToTokenNameOrPrefix } from './errors';
import { addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters } from './text-tracks';
import { getStartDate, getCurrentPdt } from './pdt';
import type { ValueOf, PlaybackCore, MuxMediaProps, MuxMediaPropsInternal, MaxResolutionValue, MinResolutionValue, RenditionOrderValue } from './types';
import { toPlaybackIdParts, i18n, parseJwt } from './util';
import { StreamTypes, MediaTypes } from './types';
import type { HlsConfig } from 'hls.js';
export { mux, Hls, MediaError, addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters, getStartDate, getCurrentPdt, };
import { type HlsConfig } from 'hls.js';
import { MuxJWTAud } from './request-errors';
export { mux, Hls, MediaError, MuxErrorCategory, MuxErrorCode, errorCategoryToTokenNameOrPrefix, MuxJWTAud, addTextTrack, removeTextTrack, getTextTrack, addCuePoints, getCuePoints, getActiveCuePoint, setupCuePoints, addChapters, getChapters, getActiveChapter, setupChapters, getStartDate, getCurrentPdt, toPlaybackIdParts, i18n, parseJwt, };
export * from './types';
declare const DRMType: {
readonly FAIRPLAY: "fairplay";
readonly PLAYREADY: "playready";
readonly WIDEVINE: "widevine";
};
type DRMTypeValue = (typeof DRMType)[keyof typeof DRMType];
export declare const toDRMTypeFromKeySystem: (keySystem: string) => DRMTypeValue | undefined;
export declare const getMediaPlaylistLinesFromMultivariantPlaylistSrc: (src: string) => Promise<string[]>;

@@ -19,3 +27,3 @@ export declare const getStreamInfoFromPlaylistLines: (playlistLines: string[]) => {

};
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | '') => Promise<{
export declare const getStreamInfoFromSrcAndType: (src: string, type?: MediaTypes | "") => Promise<{
streamType: "on-demand" | "live";

@@ -29,3 +37,3 @@ targetLiveWindow: number;

}>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | '') => Promise<void>;
export declare const updateStreamInfoFromSrc: (src: string, mediaEl: HTMLMediaElement, type?: MediaTypes | "") => Promise<void>;
export declare const getStreamInfoFromHlsjsLevelDetails: (levelDetails: any) => {

@@ -37,3 +45,16 @@ streamType: "on-demand" | "live";

};
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, 'config' | 'userConfig' | 'liveSyncPosition'>) => void;
export declare const updateStreamInfoFromHlsjsLevelDetails: (levelDetails: any, mediaEl: HTMLMediaElement, hls: Pick<Hls, "config" | "userConfig" | "liveSyncPosition">) => void;
declare global {
interface NavigatorUAData {
platform: string;
mobile: boolean;
brands: Array<{
brand: string;
version: string;
}>;
}
interface Navigator {
userAgentData?: NavigatorUAData;
}
}
export declare const muxMediaState: WeakMap<HTMLMediaElement, Partial<MuxMediaProps> & {

@@ -45,18 +66,4 @@ seekable?: TimeRanges;

export declare const generateUUID: () => string;
type MuxVideoURLProps = Partial<{
playbackId: string;
customDomain: string;
maxResolution: MaxResolutionValue;
minResolution: MinResolutionValue;
renditionOrder: RenditionOrderValue;
programStartTime: number;
programEndTime: number;
tokens: Partial<{
playback: string;
storyboard: string;
thumbnail: string;
}>;
extraSourceParams: Record<string, any>;
}>;
export declare const toMuxVideoURL: ({ playbackId: playbackIdWithParams, customDomain: domain, maxResolution, minResolution, renditionOrder, programStartTime, programEndTime, tokens: { playback: token }, extraSourceParams, }?: MuxVideoURLProps) => string | undefined;
type MuxVideoURLProps = Partial<Pick<MuxMediaPropTypes, 'playbackId' | 'customDomain' | 'maxResolution' | 'minResolution' | 'renditionOrder' | 'programStartTime' | 'programEndTime' | 'tokens' | 'playbackToken' | 'extraSourceParams'>>;
export declare const toMuxVideoURL: ({ playbackId: playbackIdWithParams, customDomain: domain, maxResolution, minResolution, renditionOrder, programStartTime, programEndTime, playbackToken, tokens: { playback: token }, extraSourceParams, }?: MuxVideoURLProps) => string | undefined;
export declare const toPlaybackIdFromSrc: (src: string | undefined) => string | undefined;

@@ -71,22 +78,22 @@ export declare const getError: (mediaEl: HTMLMediaElement) => globalThis.MediaError | (globalThis.MediaError & MediaError) | null | undefined;

/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean | undefined;
"levels" | "currentLevel">) => boolean | undefined;
export declare const getEnded: (mediaEl: HTMLMediaElement, hls?: Pick<Hls,
/** Should we add audio fragments logic here, too? (CJP) */
'levels' | 'currentLevel'>) => boolean;
"levels" | "currentLevel">) => boolean;
export declare const initialize: (props: Partial<MuxMediaPropsInternal>, mediaEl: HTMLMediaElement, core?: PlaybackCore) => {
engine: Hls | undefined;
setAutoplay: (newAutoplay?: import("./types").Autoplay | undefined) => void;
setPreload: (val?: "" | "none" | "metadata" | "auto" | undefined) => void;
setAutoplay: (newAutoplay?: import("./types").Autoplay) => void;
setPreload: (val?: HTMLMediaElement["preload"]) => void;
};
export declare const teardown: (mediaEl?: HTMLMediaElement | null, core?: PlaybackCore) => void;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, 'debug' | 'streamType' | 'type' | 'startTime' | 'metadata' | 'preferCmcd' | '_hlsConfig' | 'drmToken'>>, mediaEl: Pick<HTMLMediaElement, 'canPlayType'>) => Hls | undefined;
export declare const setupHls: (props: Partial<Pick<MuxMediaPropsInternal, "debug" | "streamType" | "type" | "startTime" | "metadata" | "preferCmcd" | "_hlsConfig" | "tokens" | "drmTypeCb">>, mediaEl: Pick<HTMLMediaElement, "canPlayType">) => Hls | undefined;
export declare const getStreamTypeConfig: (streamType?: ValueOf<StreamTypes>) => {};
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, 'src' | 'playbackId' | 'drmToken' | 'customDomain'>>) => Partial<HlsConfig>;
export declare const getDRMConfig: (props: Partial<Pick<MuxMediaPropsInternal, "src" | "playbackId" | "tokens" | "customDomain" | "drmTypeCb">>) => Partial<HlsConfig>;
export declare const getAppCertificate: (appCertificateUrl: string) => Promise<ArrayBuffer>;
export declare const getLicenseKey: (message: ArrayBuffer, licenseServerUrl: string) => Promise<Uint8Array>;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const toAppCertURL: ({ playbackId, drmToken: token, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'drmToken' | 'customDomain'>>, scheme: 'widevine' | 'playready' | 'fairplay') => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, 'playbackId' | 'src' | 'customDomain'>>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, 'envKey' | 'playerInitTime' | 'beaconCollectionDomain' | 'errorTranslator' | 'metadata' | 'debug' | 'playerSoftwareName' | 'playerSoftwareVersion' | 'playbackId' | 'src' | 'customDomain' | 'disableCookies' | 'disableTracking'>>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, 'preferPlayback' | 'src' | 'type' | 'startTime' | 'streamType' | 'autoplay' | 'playbackId' | 'drmToken' | 'customDomain'>>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, 'config' | 'on' | 'once' | 'off' | 'trigger' | 'startLoad' | 'stopLoad' | 'recoverMediaError' | 'destroy' | 'loadSource' | 'attachMedia' | 'liveSyncPosition' | 'subtitleTracks' | 'subtitleTrack' | 'userConfig' | 'audioTrack' | 'audioTracks' | 'autoLevelEnabled' | 'nextLevel' | 'levels' | 'currentLevel'>) => void;
export declare const setupNativeFairplayDRM: (props: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "playbackToken" | "customDomain" | "drmTypeCb">>, mediaEl: HTMLMediaElement) => void;
export declare const toLicenseKeyURL: ({ playbackId: playbackIdWithParams, tokens: { drm: token }, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const toAppCertURL: ({ playbackId: playbackIdWithParams, tokens: { drm: token }, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "tokens" | "customDomain">>, scheme: "widevine" | "playready" | "fairplay") => string;
export declare const isMuxVideoSrc: ({ playbackId, src, customDomain, }: Partial<Pick<MuxMediaPropsInternal, "playbackId" | "src" | "customDomain">>) => boolean;
export declare const setupMux: (props: Partial<Pick<MuxMediaPropsInternal, "envKey" | "playerInitTime" | "beaconCollectionDomain" | "errorTranslator" | "metadata" | "debug" | "playerSoftwareName" | "playerSoftwareVersion" | "playbackId" | "src" | "customDomain" | "disableCookies" | "disableTracking">>, mediaEl: HTMLMediaElement, hlsjs?: HlsInterface) => void;
export declare const loadMedia: (props: Partial<Pick<MuxMediaProps, "preferPlayback" | "src" | "type" | "startTime" | "streamType" | "autoplay" | "playbackId" | "tokens" | "customDomain">>, mediaEl: HTMLMediaElement, hls?: Pick<Hls, "config" | "on" | "once" | "off" | "trigger" | "startLoad" | "stopLoad" | "recoverMediaError" | "destroy" | "loadSource" | "attachMedia" | "liveSyncPosition" | "subtitleTracks" | "subtitleTrack" | "userConfig" | "audioTrack" | "audioTracks" | "autoLevelEnabled" | "nextLevel" | "levels" | "currentLevel">) => void;
import { PlaybackEngine } from './types';
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement['preload']) => void;
export declare const setupPreload: ({ preload, src }: Partial<HTMLMediaElement>, mediaEl: HTMLMediaElement, hls?: PlaybackEngine) => (val?: HTMLMediaElement["preload"]) => void;

@@ -7,3 +7,3 @@ import Hls from './hls';

export declare function setupTextTracks(mediaEl: HTMLMediaElement, hls: Pick<Hls, 'on' | 'once' | 'subtitleTracks' | 'subtitleTrack'>): void;
export declare function addTextTrack(mediaEl: HTMLMediaElement, kind: TextTrackKind, label: string, lang?: string, id?: string): TextTrack;
export declare function addTextTrack(mediaEl: HTMLMediaElement, kind: TextTrackKind, label: string, lang?: string, id?: string, defaultTrack?: boolean): TextTrack;
export declare function removeTextTrack(mediaEl: HTMLMediaElement, track: TextTrack): void;

@@ -10,0 +10,0 @@ export declare function getTextTrack(mediaEl: HTMLMediaElement, label: string, kind: TextTrackKind): TextTrack | undefined;

@@ -1,2 +0,2 @@

/// <reference types="mux-embed/dist/types/mux-embed" />
/// <reference path="../../../../node_modules/mux-embed/dist/types/mux-embed.d.ts" preserve="true" />
import type { Options } from 'mux-embed';

@@ -87,2 +87,8 @@ import type { MediaError } from './errors';

export type RenditionOrderValue = ValueOf<typeof RenditionOrder>;
export type Tokens = {
playback?: string;
drm?: string;
thumbnail?: string;
storyboard?: string;
};
export type MuxMediaPropTypes = {

@@ -98,2 +104,3 @@ _hlsConfig?: Partial<HlsConfig>;

drmToken?: string;
playbackToken?: string;
envKey: MetaData['env_key'];

@@ -116,9 +123,5 @@ error?: HTMLMediaElement['error'] | MediaError;

targetLiveWindow: number;
tokens: Partial<{
drm: string;
playback: string;
storyboard: string;
thumbnail: string;
}>;
tokens: Tokens;
type: MediaTypes;
extraSourceParams: Record<string, any>;
};

@@ -130,3 +133,4 @@ export type HTMLMediaElementProps = Partial<Pick<HTMLMediaElement, 'src' | 'preload' | 'error' | 'seekable'>>;

playerSoftwareVersion: MetaData['player_software_version'];
drmTypeCb?: (drmType: Metadata['view_drm_type']) => void;
};
export {};

@@ -6,6 +6,17 @@ import type { HlsPlaylistTypes, MuxMediaProps } from './types';

export declare const toPlaybackIdParts: (playbackIdWithOptionalParams: string) => [string, string?];
export declare const getType: (props: Partial<Pick<MuxMediaProps, 'type' | 'src'>>) => "" | import("./types").MediaTypes;
export declare const getType: (props: Partial<Pick<MuxMediaProps, "type" | "src">>) => "" | import("./types").MediaTypes;
export declare const toStreamTypeFromPlaylistType: (playlistType: HlsPlaylistTypes) => "on-demand" | "live";
export declare const toTargetLiveWindowFromPlaylistType: (playlistType: HlsPlaylistTypes) => number;
export declare const inferMimeTypeFromURL: (url: string) => "" | "application/vnd.apple.mpegurl" | "video/mp4";
export type MuxJWT = {
sub: string;
aud: 'v' | 't' | 'g' | 's' | 'd';
exp: number;
};
export declare const parseJwt: (token: string | undefined) => Partial<MuxJWT> | undefined;
export declare const isJWTExpired: ({ exp }: Partial<Pick<MuxJWT, "exp">>, referenceTime?: number) => boolean;
export declare const isJWTSubMismatch: ({ sub }: Partial<Pick<MuxJWT, "sub">>, expectedSub: string | undefined) => boolean;
export declare const isJWTAudMissing: ({ aud }: Partial<Pick<MuxJWT, "aud">>, _expectedAud: string | undefined) => boolean;
export declare const isJWTAudMismatch: ({ aud }: Partial<Pick<MuxJWT, "aud">>, expectedAud: string | undefined) => boolean;
export declare function i18n(str: string, translate?: boolean): any;
export {};
{
"name": "@mux/playback-core",
"version": "0.25.2",
"version": "0.26.0-canary.0-0f9d0fb",
"description": "Core library for media playback in the browser shared by mux elements",

@@ -41,3 +41,3 @@ "main": "./dist/index.cjs.js",

"clean": "shx rm -rf dist/",
"lint": "eslint src/ --ext .js,.jsx,.ts,.tsx",
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint src/ --ext .js,.jsx,.ts,.tsx",
"test": "web-test-runner **/*.test.js --port 8004 --coverage --config test/web-test-runner.config.mjs --root-dir ../..",

@@ -51,6 +51,6 @@ "posttest": "replace 'SF:src/' 'SF:packages/playback-core/src/' coverage/lcov.info --silent",

"dev": "npm-run-all --parallel dev:types dev:cjs dev:esm dev:iife dev:esm-module",
"build:esm": "esbuild --metafile=./dist/esm.json src/index.ts --target=es2019 --bundle --sourcemap --format=esm --outdir=dist --out-extension:.js=.mjs --external:mux-embed --external:hls.js",
"build:esm-module": "esbuild --metafile=./dist/module.json src/index.ts --target=es2019 --bundle --sourcemap --format=esm --outfile=./dist/playback-core.mjs",
"build:cjs": "esbuild --metafile=./dist/cjs.json src/index.ts --target=es2019 --bundle --sourcemap --format=cjs --outdir=dist --out-extension:.js=.cjs.js --external:mux-embed --external:hls.js",
"build:iife": "esbuild --metafile=./dist/iife.json src/index.ts --target=es2019 --bundle --sourcemap --format=iife --outfile=./dist/playback-core.js",
"build:esm": "esbuilder src/index.ts --sourcemap --format=esm --out-extension:.js=.mjs --external:mux-embed --external:hls.js",
"build:esm-module": "esbuilder src/index.ts --sourcemap --format=esm --outfile=./dist/playback-core.mjs",
"build:cjs": "esbuilder src/index.ts --sourcemap --format=cjs --out-extension:.js=.cjs.js --external:mux-embed --external:hls.js",
"build:iife": "esbuilder src/index.ts --sourcemap --format=iife --outfile=./dist/playback-core.js",
"prebuild:types": "shx mkdir -p ./dist/types && shx cp ../../types/** ./dist/types/",

@@ -65,7 +65,9 @@ "build:types": "tsc",

"hls.js": "~1.5.11",
"mux-embed": "~5.2.0"
"mux-embed": "^5.3.1"
},
"devDependencies": {
"@mux/esbuilder": "0.1.0",
"@open-wc/testing": "^4.0.0",
"@typescript-eslint/parser": "^5.48.0",
"@typescript-eslint/eslint-plugin": "^8.3.0",
"@typescript-eslint/parser": "^8.3.0",
"@web/dev-server-esbuild": "^1.0.2",

@@ -76,8 +78,7 @@ "@web/dev-server-import-maps": "^0.2.1",

"esbuild": "^0.19.8",
"eslint": "^8.24.0",
"eslint": "^9.9.1",
"npm-run-all": "^4.1.5",
"shx": "^0.3.4",
"typescript": "^4.9.4"
},
"gitHead": "94210d8ddb22e9d15369329ced978781eebf3402"
"typescript": "^5.5.4"
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc