@oddin-gg/havik-player 2.24.0 → 2.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("hls.js");c=s(c,1);var l=class extends Error{code;httpStatus;retryAfterMs;requestId;serverCode;liveStartsAtMs;country;constructor(e,t,n,r){super(n),this.name=`PlaybackError`,this.code=e,this.httpStatus=t,this.retryAfterMs=r?.retryAfterMs,this.requestId=r?.requestId,this.serverCode=r?.serverCode,this.liveStartsAtMs=r?.liveStartsAtMs,this.country=r?.country,r?.cause!==void 0&&(this.cause=r.cause)}};function u(e){switch(e){case 400:return`INVALID_URN`;case 401:return`UNAUTHORIZED`;case 403:return`FORBIDDEN`;case 404:return`NOT_FOUND`;case 410:return`GONE`;case 425:return`TOO_EARLY`;case 429:return`RATE_LIMITED`;case 451:return`GEO_DENIED`;case 503:return`UNAVAILABLE`;default:return`INTERNAL`}}function d(e){let t=e;if(typeof e==`string`){if(e===``)return;try{t=JSON.parse(e)}catch{return}}if(!t||typeof t!=`object`)return;let n=t.error;if(typeof n==`string`)return n===``?void 0:n;if(n&&typeof n==`object`){let e=n.code;if(typeof e==`string`&&e!==``)return e}}function f(e,t){return e===401?`UNAUTHORIZED`:e===403?t===`cdm_revoked`?`DRM_DEVICE_REVOKED`:`FORBIDDEN`:`DRM_CLIENT`}var p=new Set([`TOO_EARLY`,`UNAVAILABLE`,`RATE_LIMITED`,`NETWORK`]);function m(e){return p.has(e)}async function h(e){let t=typeof e==`function`?await e():e;if(!t||!t.apiKey)throw Error(`havik-player: credential is missing an apiKey`);return t}function g(e){return e===`live`||e===`ended`||e===`upcoming`||e===`pending`?e:`upcoming`}function _(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=typeof n.urn==`string`?n.urn:``,r=typeof n.name==`string`?n.name:``;if(!e&&!r)continue;let i={urn:e,name:r,isHome:n.isHome===!0};typeof n.logoUrl==`string`&&ee(n.logoUrl)&&(i.logoUrl=n.logoUrl),t.push(i)}return t.length>0?t:void 0}function ee(e){try{return new URL(e).protocol===`https:`}catch{return!1}}function v(e,t){let n=e.replace(/\/+$/,``),r;try{r=new URL(n+t)}catch{throw new l(`INTERNAL`,0,`invalid baseUrl: ${JSON.stringify(e)}`)}if(r.protocol!==`https:`&&r.protocol!==`http:`)throw new l(`INTERNAL`,0,`baseUrl must be http(s), got: ${JSON.stringify(e)}`);return r.toString()}function te(e){if(!e)return;let t=Number(e);if(Number.isFinite(t))return Math.max(0,Math.round(t*1e3));let n=Date.parse(e);if(!Number.isNaN(n))return Math.max(0,n-Date.now())}async function y(e,t){let n=await h(t.credential),r=t.headers??new Headers;if(t.apiHeaders)for(let[e,n]of Object.entries(t.apiHeaders))r.has(e)||r.set(e,n);r.set(`x-api-key`,n.apiKey);try{return await fetch(e,{method:t.method??`GET`,headers:r,body:t.body,signal:t.signal,cache:`no-store`,credentials:`omit`,mode:`cors`})}catch(e){throw t.signal?.aborted?new l(`ABORTED`,0,`request aborted`,{cause:e}):new l(`NETWORK`,0,`network request failed: ${ne(e)}`,{cause:e})}}function ne(e){return e instanceof Error?e.message:String(e)}var re=new Set;function b(e,t=e){re.has(t)||(re.add(t),console.warn(`havik-player: ${e}`))}var ie=1e3,ae=3e4,oe=6e5,se=3e5,ce=1e3,le={TOO_EARLY:`tooEarly`,UNAVAILABLE:`unavailable`,RATE_LIMITED:`rateLimited`,NETWORK:`network`};function ue(e){let t=e===!0||e===!1?{}:e,n=Math.max(ce,t.floorMs??ie),r=Math.max(n,t.ceilMs??ae),i=Math.max(0,t.imminentMs??oe),a=Math.max(r,t.sanityFloorMs??se);return{timeoutMs:t.timeoutMs,floorMs:n,ceilMs:r,imminentMs:i,sanityFloorMs:a,kickoffMs:de(t.kickoffAt),jitter:t.jitter??!0,onState:t.onState}}function de(e){if(e==null)return;if(typeof e==`number`)return Number.isFinite(e)?e:void 0;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function fe(e,t,n){return Math.min(n,Math.max(t,e))}function pe(e){return Math.round(e*(1+.15*Math.random()))}function me(e,t,n,r){let i=r??n.kickoffMs,a=i==null?void 0:Math.max(0,i-t),o=Math.max(n.floorMs,e??0);if(a==null||a<=n.imminentMs)return{delay:fe(e??n.floorMs,o,n.ceilMs),ttkMs:a};let s=Math.min(Math.floor(a/10),n.sanityFloorMs,a);return{delay:Math.max(o,s),ttkMs:a}}function he(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new l(`ABORTED`,0,`wait-for-live aborted`));return}let i=()=>{clearTimeout(a),r(new l(`ABORTED`,0,`wait-for-live aborted`))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}async function ge(e,t,n){let r=ue(t),i=Date.now(),a=r.timeoutMs==null?1/0:i+r.timeoutMs,o=0,s;for(;;){if(n?.aborted)throw new l(`ABORTED`,0,`wait-for-live aborted`);try{return await e()}catch(e){if(!(e instanceof l)||!m(e.code))throw e;o+=1,e.liveStartsAtMs!=null&&Number.isFinite(e.liveStartsAtMs)&&(s=e.liveStartsAtMs);let t=Date.now(),c=me(e.retryAfterMs,t,r,s),u=c.ttkMs,d=c.delay;if(r.jitter&&(d=pe(d)),t+d>a)throw new l(`TIMEOUT`,e.httpStatus,`timed out after ${r.timeoutMs}ms waiting for the stream to go live`,{retryAfterMs:e.retryAfterMs,cause:e});r.onState?.({phase:le[e.code]??`unavailable`,retryInMs:d,attempt:o,elapsedMs:t-i,ttkMs:u}),await he(d,n)}}}async function x(e){if(!e.matchUrn||typeof e.matchUrn!=`string`)throw new l(`INVALID_URN`,0,`resolveStream: a non-empty matchUrn is required`);let t=await y(v(e.baseUrl,`/v1/playback/${encodeURIComponent(e.matchUrn)}`),{credential:e.credential,signal:e.signal,apiHeaders:e.apiHeaders});if(!t.ok)throw await _e(t);return be(await t.json(),e.matchUrn)}function S(e){let t=()=>x(e);return e.waitForLive?ge(t,e.waitForLive,e.signal):t()}async function _e(e){let t=te(e.headers.get(`retry-after`)),n=e.headers.get(`x-request-id`)??e.headers.get(`x-amzn-requestid`)??void 0,r=e.statusText||`HTTP ${e.status}`,i,a,o;try{let t=await e.json();if(t?.error?.message&&(r=t.error.message),t?.error?.code&&(i=t.error.code),typeof t?.liveStartsAt==`string`){let e=Date.parse(t.liveStartsAt);Number.isFinite(e)&&(a=e)}e.status===451&&typeof t?.country==`string`&&/^[A-Z]{2}$/.test(t.country)&&(o=t.country)}catch{}return new l(u(e.status),e.status,r,{retryAfterMs:t,requestId:n,serverCode:i,liveStartsAtMs:a,country:o})}var ve=new Set([`matchUrn`,`protocol`,`drmEnabled`,`manifestUrl`,`drm`,`serverTime`,`liveStartsAt`,`expiresAt`,`analytics`]);function C(e,t){let n;try{n=new URL(t)}catch{throw new l(`INTERNAL`,0,`playback ${e} is not a valid URL`)}if(n.protocol!==`https:`&&n.protocol!==`http:`)throw new l(`INTERNAL`,0,`playback ${e} has a disallowed scheme: ${n.protocol}`);return t}function ye(e){if(e!==void 0){if(typeof e==`string`&&!e.endsWith(`/`))try{let t=new URL(e);if(t.protocol===`https:`&&t.href===`${t.origin}/`)return t.origin}catch{}b(`server analytics.endpoint ${JSON.stringify(e)} ignored: not a bare https origin.`)}}function be(e,t){if(!e.manifestUrl)throw new l(`INTERNAL`,0,`playback response is missing manifestUrl`);let n=e.drmEnabled??!!e.drm,r={matchUrn:e.matchUrn??t,protocol:`hls`,drmEnabled:n,manifestUrl:C(`manifestUrl`,e.manifestUrl),serverTime:e.serverTime??``};if(e.liveStartsAt&&(r.liveStartsAt=e.liveStartsAt),typeof e.analytics?.sid==`string`&&e.analytics.sid){r.analytics={sid:e.analytics.sid};let t=ye(e.analytics.endpoint);t&&(r.analytics.endpoint=t)}if(n&&e.drm){let t={};e.drm.widevine?.licenseUrl&&(t.widevine={licenseUrl:C(`widevine licenseUrl`,e.drm.widevine.licenseUrl)}),e.drm.fairplay?.licenseUrl&&e.drm.fairplay.certificateUrl&&(t.fairplay={licenseUrl:C(`fairplay licenseUrl`,e.drm.fairplay.licenseUrl),certificateUrl:C(`fairplay certificateUrl`,e.drm.fairplay.certificateUrl)}),(t.widevine||t.fairplay)&&(r.drm=t)}let i={};for(let[t,n]of Object.entries(e))ve.has(t)||(i[t]=n);return Object.keys(i).length>0&&(r.extensions=i),r}function w(e){return e.ownerDocument??document}function xe(e){return e.fullscreenElement??e.webkitFullscreenElement??null}function Se(e,t){let n=xe(w(e));return n!=null&&(n===e||t!=null&&n===t)||e.webkitDisplayingFullscreen===!0}function T(e,t){let n=t??e,r=w(e);if(typeof n.requestFullscreen==`function`)return r.fullscreenEnabled!==!1;if(typeof n.webkitRequestFullscreen==`function`)return r.webkitFullscreenEnabled!==!1;let i=e;return i.webkitSupportsFullscreen===!0&&typeof i.webkitEnterFullscreen==`function`||e.readyState<1}async function E(e,t){let n=t??e;if(typeof n.requestFullscreen==`function`)return await n.requestFullscreen(),!0;if(typeof n.webkitRequestFullscreen==`function`)return n.webkitRequestFullscreen(),!0;let r=e;return r.webkitSupportsFullscreen&&typeof r.webkitEnterFullscreen==`function`?(r.webkitEnterFullscreen(),!0):!1}async function D(e,t){let n=e;if(n.webkitDisplayingFullscreen){n.webkitExitFullscreen?.();return}let r=w(e),i=xe(r);i!=null&&(i===e||t!=null&&i===t)&&(typeof r.exitFullscreen==`function`?await r.exitFullscreen():r.webkitExitFullscreen?.())}async function Ce(e){let t=new URLSearchParams;e.status&&t.set(`status`,Array.isArray(e.status)?e.status.join(`,`):e.status),e.sport&&t.set(`sport`,e.sport);let n=t.toString(),r=v(e.baseUrl,`/v1/catalog`+(n?`?${n}`:``)),i=new Headers;e.etag&&i.set(`If-None-Match`,e.etag);let a=await y(r,{credential:e.credential,signal:e.signal,headers:i,apiHeaders:e.apiHeaders});if(a.status===304)return{tournaments:[],etag:e.etag,notModified:!0};if(!a.ok)throw new l(u(a.status),a.status,`catalog request failed (HTTP ${a.status})`);return{tournaments:we(await a.json()),etag:a.headers.get(`etag`)??void 0,notModified:!1}}function we(e){return(e.tournaments??[]).map(e=>{let t=e.urn??``,n=e.name??``,r=e.sport??``;return{urn:t,name:n,sport:r,isOffline:!!e.isOffline,matches:(e.matches??[]).map(e=>({matchUrn:e.matchUrn??``,matchName:e.matchName??``,status:g(e.status),statusRaw:e.status,datePlannedStart:e.datePlannedStart,tournamentUrn:t,tournamentName:n,sport:r,teams:_(e.teams)}))}})}async function Te(e){let t=v(e.baseUrl,`/v1/tournaments/${encodeURIComponent(e.urn)}`),n=new Headers;e.etag&&n.set(`If-None-Match`,e.etag);let r=await y(t,{credential:e.credential,signal:e.signal,headers:n,apiHeaders:e.apiHeaders});if(r.status===304)return{etag:e.etag,notModified:!0,notFound:!1};if(r.status===404)return{notModified:!1,notFound:!0};if(!r.ok)throw new l(u(r.status),r.status,`tournament request failed (HTTP ${r.status})`);return{tournament:Ee(await r.json()),etag:r.headers.get(`etag`)??void 0,notModified:!1,notFound:!1}}function Ee(e){let t=e.urn??``,n=e.name??``,r=e.sport??``;return{urn:t,name:n,sport:r,isOffline:!!e.isOffline,matches:(e.matches??[]).map(e=>({matchUrn:e.matchUrn??``,matchName:e.matchName??``,status:g(e.status),statusRaw:e.status,datePlannedStart:e.datePlannedStart,tournamentUrn:t,tournamentName:n,sport:r,teams:_(e.teams)}))}}function De(e){return e.tournaments.flatMap(e=>e.matches)}var Oe=new Set([`NOT_FOUND`,`GEO_DENIED`,`GONE`,`INVALID_URN`]);function ke(e){let t=Math.max(2e3,e.intervalMs??1e4),n=new AbortController,r,i,a,o=!1,s=()=>{o||(r=setTimeout(c,t))},c=async()=>{try{let t=v(e.baseUrl,`/v1/matches/${encodeURIComponent(e.matchUrn)}`),r=new Headers;i&&r.set(`If-None-Match`,i);let o=await y(t,{credential:e.credential,signal:n.signal,headers:r,apiHeaders:e.apiHeaders});if(o.status!==304){if(!o.ok)throw new l(u(o.status),o.status,`match status request failed (HTTP ${o.status})`);i=o.headers.get(`etag`)??i;let t=await o.json(),n=g(t.status),r=typeof t.status==`string`?t.status:n,s=_(t.teams),c=JSON.stringify([r,t.datePlannedStart??null,s??null]);c!==a&&(a=c,e.onChange({matchUrn:t.matchUrn??e.matchUrn,matchName:t.matchName,status:n,statusRaw:t.status,datePlannedStart:t.datePlannedStart,teams:s}))}}catch(t){if(!n.signal.aborted){let n=t instanceof l?t:new l(`NETWORK`,0,String(t));Oe.has(n.code)&&(o=!0),e.onError?.(n)}}finally{s()}};return c(),{stop(){o=!0,n.abort(),r&&clearTimeout(r)}}}var Ae=45e3,O=class extends Error{status;terminal;constructor(e){let t=e===410;super(t?`live-state subscribe failed: HTTP ${e} — match is gone, not retrying`:e===404?`live-state subscribe failed: HTTP ${e} — match not in the catalog, retrying slowly`:`live-state subscribe failed: HTTP ${e}`),this.name=`LiveStateHttpError`,this.status=e,this.terminal=t}},je=3e5;function k(e){let t=Math.max(250,e.minBackoffMs??1e3),n=Math.max(t,e.maxBackoffMs??15e3),r=Math.max(t,e.notFoundRetryMs??je),i=e.idleTimeoutMs??Ae,a=Number.isFinite(i)&&i>0?i:0,o=new AbortController,s=!1,c=e=>new Promise(t=>{if(o.signal.aborted)return t();let n=setTimeout(t,e);o.signal.addEventListener(`abort`,()=>{clearTimeout(n),t()},{once:!0})}),l=t=>{if(s)return;e.onAlive?.();let n=`message`,r=[];for(let e of t.split(`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("hls.js");c=s(c,1);var l=class extends Error{code;httpStatus;retryAfterMs;requestId;serverCode;liveStartsAtMs;country;constructor(e,t,n,r){super(n),this.name=`PlaybackError`,this.code=e,this.httpStatus=t,this.retryAfterMs=r?.retryAfterMs,this.requestId=r?.requestId,this.serverCode=r?.serverCode,this.liveStartsAtMs=r?.liveStartsAtMs,this.country=r?.country,r?.cause!==void 0&&(this.cause=r.cause)}};function u(e){switch(e){case 400:return`INVALID_URN`;case 401:return`UNAUTHORIZED`;case 403:return`FORBIDDEN`;case 404:return`NOT_FOUND`;case 410:return`GONE`;case 425:return`TOO_EARLY`;case 429:return`RATE_LIMITED`;case 451:return`GEO_DENIED`;case 503:return`UNAVAILABLE`;default:return`INTERNAL`}}function d(e){let t=e;if(typeof e==`string`){if(e===``)return;try{t=JSON.parse(e)}catch{return}}if(!t||typeof t!=`object`)return;let n=t.error;if(typeof n==`string`)return n===``?void 0:n;if(n&&typeof n==`object`){let e=n.code;if(typeof e==`string`&&e!==``)return e}}function f(e,t){return e===401?`UNAUTHORIZED`:e===403?t===`cdm_revoked`?`DRM_DEVICE_REVOKED`:`FORBIDDEN`:`DRM_CLIENT`}var p=new Set([`TOO_EARLY`,`UNAVAILABLE`,`RATE_LIMITED`,`NETWORK`]);function m(e){return p.has(e)}async function h(e){let t=typeof e==`function`?await e():e;if(!t||!t.apiKey)throw Error(`havik-player: credential is missing an apiKey`);return t}function g(e){return e===`live`||e===`ended`||e===`upcoming`||e===`pending`?e:`upcoming`}function _(e){if(!Array.isArray(e))return;let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=typeof n.urn==`string`?n.urn:``,r=typeof n.name==`string`?n.name:``;if(!e&&!r)continue;let i={urn:e,name:r,isHome:n.isHome===!0};typeof n.logoUrl==`string`&&ee(n.logoUrl)&&(i.logoUrl=n.logoUrl),t.push(i)}return t.length>0?t:void 0}function ee(e){try{return new URL(e).protocol===`https:`}catch{return!1}}function v(e,t){let n=e.replace(/\/+$/,``),r;try{r=new URL(n+t)}catch{throw new l(`INTERNAL`,0,`invalid baseUrl: ${JSON.stringify(e)}`)}if(r.protocol!==`https:`&&r.protocol!==`http:`)throw new l(`INTERNAL`,0,`baseUrl must be http(s), got: ${JSON.stringify(e)}`);return r.toString()}function te(e){if(!e)return;let t=Number(e);if(Number.isFinite(t))return Math.max(0,Math.round(t*1e3));let n=Date.parse(e);if(!Number.isNaN(n))return Math.max(0,n-Date.now())}async function y(e,t){let n=await h(t.credential),r=t.headers??new Headers;if(t.apiHeaders)for(let[e,n]of Object.entries(t.apiHeaders))r.has(e)||r.set(e,n);r.set(`x-api-key`,n.apiKey);try{return await fetch(e,{method:t.method??`GET`,headers:r,body:t.body,signal:t.signal,cache:`no-store`,credentials:`omit`,mode:`cors`})}catch(e){throw t.signal?.aborted?new l(`ABORTED`,0,`request aborted`,{cause:e}):new l(`NETWORK`,0,`network request failed: ${ne(e)}`,{cause:e})}}function ne(e){return e instanceof Error?e.message:String(e)}var re=new Set;function b(e,t=e){re.has(t)||(re.add(t),console.warn(`havik-player: ${e}`))}var ie=1e3,ae=3e4,oe=6e5,se=3e5,ce=1e3,le={TOO_EARLY:`tooEarly`,UNAVAILABLE:`unavailable`,RATE_LIMITED:`rateLimited`,NETWORK:`network`};function ue(e){let t=e===!0||e===!1?{}:e,n=Math.max(ce,t.floorMs??ie),r=Math.max(n,t.ceilMs??ae),i=Math.max(0,t.imminentMs??oe),a=Math.max(r,t.sanityFloorMs??se);return{timeoutMs:t.timeoutMs,floorMs:n,ceilMs:r,imminentMs:i,sanityFloorMs:a,kickoffMs:de(t.kickoffAt),jitter:t.jitter??!0,onState:t.onState}}function de(e){if(e==null)return;if(typeof e==`number`)return Number.isFinite(e)?e:void 0;let t=Date.parse(e);return Number.isFinite(t)?t:void 0}function fe(e,t,n){return Math.min(n,Math.max(t,e))}function pe(e){return Math.round(e*(1+.15*Math.random()))}function me(e,t,n,r){let i=r??n.kickoffMs,a=i==null?void 0:Math.max(0,i-t),o=Math.max(n.floorMs,e??0);if(a==null||a<=n.imminentMs)return{delay:fe(e??n.floorMs,o,n.ceilMs),ttkMs:a};let s=Math.min(Math.floor(a/10),n.sanityFloorMs,a);return{delay:Math.max(o,s),ttkMs:a}}function he(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new l(`ABORTED`,0,`wait-for-live aborted`));return}let i=()=>{clearTimeout(a),r(new l(`ABORTED`,0,`wait-for-live aborted`))},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}async function ge(e,t,n){let r=ue(t),i=Date.now(),a=r.timeoutMs==null?1/0:i+r.timeoutMs,o=0,s;for(;;){if(n?.aborted)throw new l(`ABORTED`,0,`wait-for-live aborted`);try{return await e()}catch(e){if(!(e instanceof l)||!m(e.code))throw e;o+=1,e.liveStartsAtMs!=null&&Number.isFinite(e.liveStartsAtMs)&&(s=e.liveStartsAtMs);let t=Date.now(),c=me(e.retryAfterMs,t,r,s),u=c.ttkMs,d=c.delay;if(r.jitter&&(d=pe(d)),t+d>a)throw new l(`TIMEOUT`,e.httpStatus,`timed out after ${r.timeoutMs}ms waiting for the stream to go live`,{retryAfterMs:e.retryAfterMs,cause:e});r.onState?.({phase:le[e.code]??`unavailable`,retryInMs:d,attempt:o,elapsedMs:t-i,ttkMs:u}),await he(d,n)}}}async function x(e){if(!e.matchUrn||typeof e.matchUrn!=`string`)throw new l(`INVALID_URN`,0,`resolveStream: a non-empty matchUrn is required`);let t=await y(v(e.baseUrl,`/v1/playback/${encodeURIComponent(e.matchUrn)}`),{credential:e.credential,signal:e.signal,apiHeaders:e.apiHeaders});if(!t.ok)throw await _e(t);return be(await t.json(),e.matchUrn)}function S(e){let t=()=>x(e);return e.waitForLive?ge(t,e.waitForLive,e.signal):t()}async function _e(e){let t=te(e.headers.get(`retry-after`)),n=e.headers.get(`x-request-id`)??e.headers.get(`x-amzn-requestid`)??void 0,r=e.statusText||`HTTP ${e.status}`,i,a,o;try{let t=await e.json();if(t?.error?.message&&(r=t.error.message),t?.error?.code&&(i=t.error.code),typeof t?.liveStartsAt==`string`){let e=Date.parse(t.liveStartsAt);Number.isFinite(e)&&(a=e)}e.status===451&&typeof t?.country==`string`&&/^[A-Z]{2}$/.test(t.country)&&(o=t.country)}catch{}return new l(u(e.status),e.status,r,{retryAfterMs:t,requestId:n,serverCode:i,liveStartsAtMs:a,country:o})}var ve=new Set([`matchUrn`,`protocol`,`drmEnabled`,`manifestUrl`,`drm`,`serverTime`,`liveStartsAt`,`expiresAt`,`analytics`]);function C(e,t){let n;try{n=new URL(t)}catch{throw new l(`INTERNAL`,0,`playback ${e} is not a valid URL`)}if(n.protocol!==`https:`&&n.protocol!==`http:`)throw new l(`INTERNAL`,0,`playback ${e} has a disallowed scheme: ${n.protocol}`);return t}function ye(e){if(e!==void 0){if(typeof e==`string`&&!e.endsWith(`/`))try{let t=new URL(e);if(t.protocol===`https:`&&t.href===`${t.origin}/`)return t.origin}catch{}b(`server analytics.endpoint ${JSON.stringify(e)} ignored: not a bare https origin.`)}}function be(e,t){if(!e.manifestUrl)throw new l(`INTERNAL`,0,`playback response is missing manifestUrl`);let n=e.drmEnabled??!!e.drm,r={matchUrn:e.matchUrn??t,protocol:`hls`,drmEnabled:n,manifestUrl:C(`manifestUrl`,e.manifestUrl),serverTime:e.serverTime??``};if(e.liveStartsAt&&(r.liveStartsAt=e.liveStartsAt),typeof e.analytics?.sid==`string`&&e.analytics.sid){r.analytics={sid:e.analytics.sid};let t=ye(e.analytics.endpoint);t&&(r.analytics.endpoint=t)}if(n&&e.drm){let t={};e.drm.widevine?.licenseUrl&&(t.widevine={licenseUrl:C(`widevine licenseUrl`,e.drm.widevine.licenseUrl)}),e.drm.fairplay?.licenseUrl&&e.drm.fairplay.certificateUrl&&(t.fairplay={licenseUrl:C(`fairplay licenseUrl`,e.drm.fairplay.licenseUrl),certificateUrl:C(`fairplay certificateUrl`,e.drm.fairplay.certificateUrl)}),(t.widevine||t.fairplay)&&(r.drm=t)}let i={};for(let[t,n]of Object.entries(e))ve.has(t)||(i[t]=n);return Object.keys(i).length>0&&(r.extensions=i),r}function w(e){return e.ownerDocument??document}function xe(e){return e.fullscreenElement??e.webkitFullscreenElement??null}function T(e,t){let n=xe(w(e));return n!=null&&(n===e||t!=null&&n===t)||e.webkitDisplayingFullscreen===!0}function E(e,t){let n=t??e,r=w(e);if(typeof n.requestFullscreen==`function`)return r.fullscreenEnabled!==!1;if(typeof n.webkitRequestFullscreen==`function`)return r.webkitFullscreenEnabled!==!1;let i=e;return i.webkitSupportsFullscreen===!0&&typeof i.webkitEnterFullscreen==`function`||e.readyState<1}async function D(e,t){let n=t??e;if(typeof n.requestFullscreen==`function`)return await n.requestFullscreen(),!0;if(typeof n.webkitRequestFullscreen==`function`)return n.webkitRequestFullscreen(),!0;let r=e;return r.webkitSupportsFullscreen&&typeof r.webkitEnterFullscreen==`function`?(r.webkitEnterFullscreen(),!0):!1}async function O(e,t){let n=e;if(n.webkitDisplayingFullscreen){n.webkitExitFullscreen?.();return}let r=w(e),i=xe(r);i!=null&&(i===e||t!=null&&i===t)&&(typeof r.exitFullscreen==`function`?await r.exitFullscreen():r.webkitExitFullscreen?.())}async function Se(e){let t=new URLSearchParams;e.status&&t.set(`status`,Array.isArray(e.status)?e.status.join(`,`):e.status),e.sport&&t.set(`sport`,e.sport);let n=t.toString(),r=v(e.baseUrl,`/v1/catalog`+(n?`?${n}`:``)),i=new Headers;e.etag&&i.set(`If-None-Match`,e.etag);let a=await y(r,{credential:e.credential,signal:e.signal,headers:i,apiHeaders:e.apiHeaders});if(a.status===304)return{tournaments:[],etag:e.etag,notModified:!0};if(!a.ok)throw new l(u(a.status),a.status,`catalog request failed (HTTP ${a.status})`);return{tournaments:Ce(await a.json()),etag:a.headers.get(`etag`)??void 0,notModified:!1}}function Ce(e){return(e.tournaments??[]).map(e=>{let t=e.urn??``,n=e.name??``,r=e.sport??``;return{urn:t,name:n,sport:r,isOffline:!!e.isOffline,matches:(e.matches??[]).map(e=>({matchUrn:e.matchUrn??``,matchName:e.matchName??``,status:g(e.status),statusRaw:e.status,datePlannedStart:e.datePlannedStart,tournamentUrn:t,tournamentName:n,sport:r,teams:_(e.teams)}))}})}async function we(e){let t=v(e.baseUrl,`/v1/tournaments/${encodeURIComponent(e.urn)}`),n=new Headers;e.etag&&n.set(`If-None-Match`,e.etag);let r=await y(t,{credential:e.credential,signal:e.signal,headers:n,apiHeaders:e.apiHeaders});if(r.status===304)return{etag:e.etag,notModified:!0,notFound:!1};if(r.status===404)return{notModified:!1,notFound:!0};if(!r.ok)throw new l(u(r.status),r.status,`tournament request failed (HTTP ${r.status})`);return{tournament:Te(await r.json()),etag:r.headers.get(`etag`)??void 0,notModified:!1,notFound:!1}}function Te(e){let t=e.urn??``,n=e.name??``,r=e.sport??``;return{urn:t,name:n,sport:r,isOffline:!!e.isOffline,matches:(e.matches??[]).map(e=>({matchUrn:e.matchUrn??``,matchName:e.matchName??``,status:g(e.status),statusRaw:e.status,datePlannedStart:e.datePlannedStart,tournamentUrn:t,tournamentName:n,sport:r,teams:_(e.teams)}))}}function Ee(e){return e.tournaments.flatMap(e=>e.matches)}var De=new Set([`NOT_FOUND`,`GEO_DENIED`,`GONE`,`INVALID_URN`]);function Oe(e){let t=Math.max(2e3,e.intervalMs??1e4),n=new AbortController,r,i,a,o=!1,s=()=>{o||(r=setTimeout(c,t))},c=async()=>{try{let t=v(e.baseUrl,`/v1/matches/${encodeURIComponent(e.matchUrn)}`),r=new Headers;i&&r.set(`If-None-Match`,i);let o=await y(t,{credential:e.credential,signal:n.signal,headers:r,apiHeaders:e.apiHeaders});if(o.status!==304){if(!o.ok)throw new l(u(o.status),o.status,`match status request failed (HTTP ${o.status})`);i=o.headers.get(`etag`)??i;let t=await o.json(),n=g(t.status),r=typeof t.status==`string`?t.status:n,s=_(t.teams),c=JSON.stringify([r,t.datePlannedStart??null,s??null]);c!==a&&(a=c,e.onChange({matchUrn:t.matchUrn??e.matchUrn,matchName:t.matchName,status:n,statusRaw:t.status,datePlannedStart:t.datePlannedStart,teams:s}))}}catch(t){if(!n.signal.aborted){let n=t instanceof l?t:new l(`NETWORK`,0,String(t));De.has(n.code)&&(o=!0),e.onError?.(n)}}finally{s()}};return c(),{stop(){o=!0,n.abort(),r&&clearTimeout(r)}}}var ke=45e3,k=class extends Error{status;terminal;constructor(e){let t=e===410;super(t?`live-state subscribe failed: HTTP ${e} — match is gone, not retrying`:e===404?`live-state subscribe failed: HTTP ${e} — match not in the catalog, retrying slowly`:`live-state subscribe failed: HTTP ${e}`),this.name=`LiveStateHttpError`,this.status=e,this.terminal=t}},Ae=3e5;function A(e){let t=Math.max(250,e.minBackoffMs??1e3),n=Math.max(t,e.maxBackoffMs??15e3),r=Math.max(t,e.notFoundRetryMs??Ae),i=e.idleTimeoutMs??ke,a=Number.isFinite(i)&&i>0?i:0,o=new AbortController,s=!1,c=e=>new Promise(t=>{if(o.signal.aborted)return t();let n=setTimeout(t,e);o.signal.addEventListener(`abort`,()=>{clearTimeout(n),t()},{once:!0})}),l=t=>{if(s)return;e.onAlive?.();let n=`message`,r=[];for(let e of t.split(`
2
2
  `)){let t=e.endsWith(`\r`)?e.slice(0,-1):e;if(t===``||t.startsWith(`:`))continue;let i=t.indexOf(`:`),a=i<0?t:t.slice(0,i),o=i<0?``:t.slice(i+1);o.startsWith(` `)&&(o=o.slice(1)),a===`event`?n=o:a===`data`&&r.push(o)}if(n===`state`&&r.length!==0)try{let t=JSON.parse(r.join(`
3
- `));t&&typeof t.state==`string`&&e.onState(t)}catch{}},u=/\r\n\r\n|\n\n|\r\r/,d=async(e,t,n)=>{let r=e.getReader(),i=new TextDecoder,o=``,c=!1,d,f=()=>{a&&(clearTimeout(d),d=setTimeout(()=>{n(),r.cancel().catch(()=>{})},a))};try{for(f();;){let{value:e,done:n}=await r.read();if(n)return;e&&e.length>0&&(f(),c||(c=!0,t())),o+=i.decode(e,{stream:!0});let a;for(;(a=u.exec(o))!==null;)l(o.slice(0,a.index)),o=o.slice(a.index+a[0].length);if(s)return}}finally{clearTimeout(d),await r.cancel().catch(()=>{})}};return(async()=>{let i=t;for(;!s;){let l=new AbortController,u=()=>l.abort();o.signal.addEventListener(`abort`,u,{once:!0});let f=null,p=!1,m=!1,g,_=()=>{f=`no data for ${a}ms`,l.abort()};try{let n=await h(e.credential);if(s)return;let r=v(e.eventsBaseUrl,`/v1/events/${encodeURIComponent(e.matchUrn)}`);a&&(g=setTimeout(()=>{f=`no response headers within ${a}ms`,l.abort()},a));let o=await fetch(r,{method:`GET`,headers:{"x-api-key":n.apiKey,accept:`text/event-stream`},signal:l.signal,cache:`no-store`,credentials:`omit`,mode:`cors`});if(clearTimeout(g),s)return;if(!o.ok||!o.body){let t=new O(o.status);p=t.terminal,m=o.status===404,e.onError?.(t)}else await d(o.body,()=>{i=t},_)}catch(t){if(s||o.signal.aborted)return;f||e.onError?.(t)}finally{clearTimeout(g),o.signal.removeEventListener(`abort`,u),l.abort()}if(s||p)return;f&&e.onError?.(Error(`live-state subscribe idle: ${f} — reconnecting`)),await c(m?Math.max(i,r):i),i=Math.min(n,i*2)}})(),{close(){s||(s=!0,o.abort())}}}function A(e){try{let t=new URL(e);return t.hostname=`events.${t.hostname}`,t.pathname=``,t.search=``,t.origin}catch{return}}var j=`havik.player.deviceId`,M;function N(){if(M)return M;try{let e=globalThis.localStorage?.getItem(j);if(e)return M=e,e}catch{}let e=Ne();M=e;try{globalThis.localStorage?.setItem(j,e)}catch{}return e}function Me(){M=void 0;try{globalThis.localStorage?.removeItem(j)}catch{}}function Ne(){let e=globalThis.crypto;if(e&&typeof e.randomUUID==`function`)return e.randomUUID();let t=new Uint8Array(16);if(e&&typeof e.getRandomValues==`function`)e.getRandomValues(t);else for(let e=0;e<16;e+=1)t[e]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`));return n.slice(0,4).join(``)+`-`+n.slice(4,6).join(``)+`-`+n.slice(6,8).join(``)+`-`+n.slice(8,10).join(``)+`-`+n.slice(10,16).join(``)}function Pe(e,t,n={}){let r={"x-api-key":t.apiKey,"X-Match-Urn":e.matchUrn,"X-Device-Id":n.deviceId??N(),"Content-Type":`application/octet-stream`};return n.userId&&(r[`X-User-Id`]=n.userId),r}var P=`havik.player.bandwidth`,Fe=.8,Ie=2e7,Le=3e5;function Re(){return globalThis.navigator?.connection}function ze(){let e=Re()?.type;return typeof e==`string`&&e!==``&&e!==`unknown`?e:`any`}function Be(){let e=Re()?.downlink;return typeof e==`number`&&Number.isFinite(e)&&e>0?e*1e6:void 0}function Ve(){try{let e=globalThis.localStorage?.getItem(P);if(!e)return{};let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function He(e=Date.now()){let t=Ve()[ze()];if(!t||typeof t.bps!=`number`||typeof t.at!=`number`||!Number.isFinite(t.bps)||t.bps<=0)return;let n=e-t.at;if(n<0||n>2592e5)return;let r=Be(),i=r===void 0?t.bps:Math.min(t.bps,r);return Math.round(Math.min(Ie,Math.max(Le,i*Fe)))}function Ue(e,t=Date.now()){if(!Number.isFinite(e)||e<=0)return;let n=Ve();n[ze()]={bps:Math.round(e),at:t};try{globalThis.localStorage?.setItem(P,JSON.stringify(n))}catch{}}function We(){try{globalThis.localStorage?.removeItem(P)}catch{}}var Ge=new WeakMap;function Ke(e,t){let n=Ge.get(e);n||(n=new Map,Ge.set(e,n));let r=n.get(t.keySystem);if(r)return r;let i=t.createMediaKeys().catch(e=>{throw n.get(t.keySystem)===i&&n.delete(t.keySystem),e});return n.set(t.keySystem,i),i}function F(){return typeof navigator<`u`&&typeof navigator.requestMediaKeySystemAccess==`function`}var qe=[`SW_SECURE_DECODE`,`SW_SECURE_CRYPTO`];function Je(e){return e.startsWith(`com.widevine`)}function I(e,t){if(!Je(e))return t;let n=(e,t)=>{let n=e.videoCapabilities;return!n?.length||!n.some(e=>e.robustness)?!1:n.every(e=>{let n=qe.indexOf(e.robustness);return n===-1||qe.indexOf(t)>n})},r=qe.flatMap(e=>t.filter(t=>n(t,e)).map(t=>({...t,videoCapabilities:t.videoCapabilities?.map(t=>({...t,robustness:e}))})));return[...t,...r]}function Ye(e){return(t,n)=>F()?navigator.requestMediaKeySystemAccess(t,I(t,n)).then(t=>({keySystem:t.keySystem,getConfiguration:()=>t.getConfiguration(),createMediaKeys:()=>Ke(e,t)})):Promise.reject(Error(`navigator.requestMediaKeySystemAccess is unavailable — EME needs a secure context (https, or localhost)`))}var L={video:`SW_SECURE_DECODE`,audio:`SW_SECURE_CRYPTO`,scheme:`cbcs`};function Xe(e){if(!F())return;let t=(e,t)=>({contentType:e,robustness:t,encryptionScheme:L.scheme});Ye(e)(`com.widevine.alpha`,[{initDataTypes:[`cenc`],distinctiveIdentifier:`optional`,persistentState:`optional`,sessionTypes:[`temporary`],audioCapabilities:[t(`audio/mp4; codecs="mp4a.40.2"`,L.audio)],videoCapabilities:[t(`video/mp4; codecs="avc1.42e01e"`,L.video)]}]).then(e=>e.createMediaKeys()).catch(()=>{})}function R(e){let t=z(e);if(/^avc[13]/.test(t))return`avc`;if(/^(hvc1|hev1)/.test(t))return`hevc`;if(/^(dvh1|dvhe)/.test(t))return`dv`;if(t.startsWith(`av01`))return`av1`;if(/^vp0?9/.test(t))return`vp9`}function z(e){return(e??``).trim().toLowerCase()}var Ze={hevc:`hvc1.1.6.L93.90`,dv:`dvh1.05.06`,av1:`av01.0.05M.08`,vp9:`vp09.00.10.08`},Qe=new Map,B=new Map;function $e(e){let t=z(e),n=Qe.get(t);if(n)return n;let r={initDataTypes:[`cenc`],distinctiveIdentifier:`optional`,persistentState:`optional`,sessionTypes:[`temporary`],videoCapabilities:[{contentType:`video/mp4; codecs="${e.trim()}"`,robustness:L.video,encryptionScheme:L.scheme}]},i=(async()=>{try{return await navigator.requestMediaKeySystemAccess(`com.widevine.alpha`,I(`com.widevine.alpha`,[r])),!0}catch{return!1}})().then(e=>(B.set(t,e),e));return Qe.set(t,i),i}function et(){if(F())for(let e of Object.values(Ze))$e(e)}function tt(e){let t=R(e);if(t)return t===`avc`?!0:B.get(z(e))??B.get(z(Ze[t]))}var nt=5e3,rt=`video/mp4; codecs="avc1.42E01E"`,it=`audio/mp4; codecs="mp4a.40.2"`,at={widevine:[`com.widevine.alpha`],fairplay:[`com.apple.fps`]};function ot(e){return e===`fairplay`?[{initDataTypes:[`sinf`,`skd`,`cenc`],videoCapabilities:[{contentType:rt,robustness:``,encryptionScheme:`cbcs`}],audioCapabilities:[{contentType:it,robustness:``,encryptionScheme:`cbcs`}]}]:I(`com.widevine.alpha`,[{initDataTypes:[`cenc`],videoCapabilities:[{contentType:rt,robustness:L.video,encryptionScheme:L.scheme}],audioCapabilities:[{contentType:it,robustness:L.audio,encryptionScheme:L.scheme}]}])}function st(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`probe-timeout`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}async function ct(e={}){let t=e.systems??[`widevine`,`fairplay`],n=e.timeoutMs??nt,r={};if(typeof window<`u`&&window.isSecureContext===!1)return{verdict:`insecure-context`,detail:r};let i=typeof navigator<`u`?navigator.requestMediaKeySystemAccess?.bind(navigator):void 0;if(!i)return{verdict:`no-cdm`,detail:r};let a=!1,o=!1,s=Date.now()+n,c=()=>Math.max(1,s-Date.now());for(let e of t){let t=at[e];if(!t){r[e]=`unknown system`;continue}for(let n of t){if(Date.now()>=s){a=!0,r[e]??=`${n}: probe-timeout`;break}try{return await st((await st(i(n,ot(e)),c())).createMediaKeys(),c()),r[e]=`ok (${n})`,{verdict:`supported`,system:e,detail:r}}catch(t){let i=t;r[e]=`${n}: ${(i?.name&&i.name!==`Error`?i.name:i?.message)||String(t)}`,i?.message===`probe-timeout`&&(a=!0),i?.name===`SecurityError`&&(o=!0)}}}return o?{verdict:`blocked-by-policy`,detail:r}:a?{verdict:`probe-timeout`,detail:r}:{verdict:`no-cdm`,detail:r}}var lt=/^#EXT-X-(PART-INF|PART|PRELOAD-HINT)[:\s]/m;function ut(e){return lt.test(e)}var dt={integration:`https://feed-dev.oddin-video.gg`,production:`https://feed.oddin-video.gg`};function ft(e){let t=Object.prototype.hasOwnProperty.call(dt,e)?dt[e]:void 0;if(!t)throw new l(`INTERNAL`,0,`unknown env ${JSON.stringify(e)} — expected 'integration' or 'production'`);return t}var pt={droppedFrames:0};function mt(e){try{return new URL(e).host}catch{return``}}var ht=/\.(m3u8|ts|m4s|mp4|cmfv|cmfa)(\?|$)/i;function gt(e){if(typeof performance>`u`||typeof performance.getEntriesByType!=`function`)return``;let t=``,n=-1,r=performance.getEntriesByType(`resource`);for(let i of r)if(!(i.startTime<e)&&(i.initiatorType===`video`||i.initiatorType===`audio`||ht.test(i.name))&&i.startTime>=n){let e=mt(i.name);e&&(t=e,n=i.startTime)}return t}function V(e){let t=e.getVideoPlaybackQuality?.();return{dropped:t?.droppedVideoFrames??0,totalFrames:t?.totalVideoFrames??0}}var _t=class{video;baseFrames=0;baseDropped=0;lastFrames=0;lastDropped=0;constructor(e){this.video=e}read(){let e=V(this.video);return e.totalFrames<this.lastFrames&&(this.baseFrames+=this.lastFrames),e.dropped<this.lastDropped&&(this.baseDropped+=this.lastDropped),this.lastFrames=e.totalFrames,this.lastDropped=e.dropped,{dropped:this.baseDropped+e.dropped,totalFrames:this.baseFrames+e.totalFrames}}attach(){let e=()=>void this.read();return this.video.addEventListener(`timeupdate`,e),this.video.addEventListener(`seeking`,e),()=>{this.video.removeEventListener(`timeupdate`,e),this.video.removeEventListener(`seeking`,e)}}};function vt(e,t){let n=[[`playing`,()=>t(`playing`)],[`waiting`,()=>t(`buffering`)],[`stalled`,()=>t(`buffering`)],[`pause`,()=>{e.ended||t(`paused`)}],[`ended`,()=>t(`ended`)]];for(let[t,r]of n)e.addEventListener(t,r);return()=>{for(let[t,r]of n)e.removeEventListener(t,r)}}var yt=2e3,bt=3,H=500,xt=6e3,St=.25,Ct=250,wt=.05,Tt=4,Et=12e3,Dt=.25,Ot=1e3;function kt(e){try{let t=new TextDecoder(`utf-8`).decode(new Uint8Array(e));return/^skd:\/\/[0-9a-fA-F-]{36}:([0-9a-fA-F]{32})$/.exec(t)?.[1]}catch{return}}function U(e){return!!(e??(typeof document<`u`?document.createElement(`video`):void 0))?.canPlayType(`application/vnd.apple.mpegurl`)}function W(){if(typeof window>`u`)return!1;let e=`WebKitMediaKeys`in window||typeof HTMLMediaElement<`u`&&`webkitSetMediaKeys`in HTMLMediaElement.prototype,t=typeof navigator<`u`&&/Apple/i.test(navigator.vendor??``);return e||t}function At(){if(typeof navigator>`u`||!W())return!1;let e=navigator.userAgent??``;return/iPhone|iPad|iPod/.test(e)?!0:/Macintosh/.test(e)&&typeof navigator.maxTouchPoints==`number`&&navigator.maxTouchPoints>1}var G=class{name=`native`;deps;onLoaded;onError;onEncrypted;fairplayLicenseUrl;keySession=null;fairplayArmed=!1;onVisibility=null;onPageShow=null;hiddenSince=null;refocusTimer=null;edgeTimer=null;onEdgeReset=null;lastBufferedEnd=null;bufferedAdvancedAt=null;lastSeekableEnd=null;edgeStampedAt=null;lastTickAt=null;endedEmitted=!1;fairplayKeyIV;loadStarted;preloadTouched=!1;savedPreload=null;cdnHost=``;builtAt;frameCounter;detachFrames=null;constructor(e){this.deps=e,this.frameCounter=new _t(e.video),this.loadStarted=e.deferLoad!==!0,this.builtAt=typeof performance<`u`?performance.now():0}async load(){this.detachFrames??=this.frameCounter.attach();let{video:e,descriptor:t,emit:n}=this.deps;if(this.endedEmitted=!1,this.watchRefocus(),this.watchBufferedEnd(),this.loadStarted||(this.preloadTouched=!0,this.savedPreload=e.getAttribute(`preload`),e.preload=`none`),t.drmEnabled){if(!t.drm?.fairplay){n({type:`error`,error:new l(`DRM_CLIENT`,0,`native HLS engine cannot satisfy this DRM (Widevine requires the hls.js engine); use engine "auto"/"hls" on a Widevine-capable browser`),fatal:!0});return}this.armFairPlay()}let r=!this.loadStarted;this.onLoaded=r?void 0:()=>n({type:`ready`}),this.onError=()=>n({type:`error`,error:new l(`INTERNAL`,0,`native HLS playback error`),fatal:!0}),this.onLoaded&&e.addEventListener(`loadedmetadata`,this.onLoaded,{once:!0}),e.addEventListener(`error`,this.onError),e.src=Mt(t.manifestUrl,t.analytics?.sid),e.load()}startLoad(){this.loadStarted||(this.loadStarted=!0,this.restorePreload())}restorePreload(){if(!this.preloadTouched)return;this.preloadTouched=!1;let{video:e}=this.deps;this.savedPreload===null?e.removeAttribute(`preload`):e.setAttribute(`preload`,this.savedPreload)}armFairPlay(){let{video:e,descriptor:t,credential:n,deviceId:r,userId:i,emit:a}=this.deps,o=t.drm?.fairplay;if(!o)return;this.fairplayLicenseUrl=o.licenseUrl;let s=(e,t,n,r)=>a({type:`error`,error:new l(f(t,r),t,e,r?{serverCode:r}:void 0),fatal:n}),c=async e=>{try{return await e.text()}catch{return``}};this.onEncrypted=a=>{let l=a;l.initData&&!this.fairplayArmed&&(this.fairplayArmed=!0,this.fairplayKeyIV=kt(l.initData),(async()=>{try{let a=await(await navigator.requestMediaKeySystemAccess(`com.apple.fps`,[{initDataTypes:[l.initDataType],videoCapabilities:[{contentType:`application/vnd.apple.mpegurl`,robustness:``}],distinctiveIdentifier:`not-allowed`,persistentState:`not-allowed`,sessionTypes:[`temporary`]}])).createMediaKeys(),u=await fetch(o.certificateUrl,{headers:{"x-api-key":n.apiKey}});if(!u.ok){this.fairplayArmed=!1,s(`FairPlay certificate request failed: ${u.status}`,u.status,!0);return}await a.setServerCertificate(await u.arrayBuffer()),await e.setMediaKeys(a);let f=a.createSession();this.keySession=f,f.addEventListener(`message`,e=>{(async()=>{try{let a=await fetch(this.fairplayLicenseUrl??o.licenseUrl,{method:`POST`,body:e.message,headers:{"x-api-key":n.apiKey,"X-Match-Urn":t.matchUrn,"X-Device-Id":r,...i?{"X-User-Id":i}:{},...this.fairplayKeyIV?{"X-Key-Iv":this.fairplayKeyIV}:{}}});if(!a.ok){let e=a.status===403?d(await c(a)):void 0;s(`FairPlay license request failed: ${a.status}`,a.status,!0,e);return}await f.update(new Uint8Array(await a.arrayBuffer()))}catch(e){s(`FairPlay license request failed: ${String(e)}`,0,!0)}})()}),await f.generateRequest(l.initDataType,l.initData)}catch(e){this.fairplayArmed=!1,s(`FairPlay key session failed: ${String(e)}`,0,!0)}})())},e.addEventListener(`encrypted`,this.onEncrypted)}setLicenseUrls(e){e.fairplay&&(this.fairplayLicenseUrl=e.fairplay)}getQualityLevels(){return[]}getCurrentQuality(){return-1}setQuality(e){}setMaxBitrate(e){}getAudioTracks(){let e=this.deps.video.audioTracks;return e?Array.from({length:e.length},(t,n)=>{let r=e[n];return{id:n,name:r.label||r.language||`Audio ${n+1}`,lang:r.language||void 0,default:r.enabled}}):[]}setAudioTrack(e){let t=this.deps.video.audioTracks;if(t)for(let n=0;n<t.length;n+=1)t[n].enabled=n===e}getTextTracks(){let e=this.deps.video.textTracks;return Array.from({length:e.length},(t,n)=>{let r=e[n];return{id:n,name:r.label||r.language||`Text ${n+1}`,lang:r.language||void 0}})}setTextTrack(e){let t=this.deps.video.textTracks;for(let n=0;n<t.length;n+=1)t[n].mode=n===e?`showing`:`disabled`}seekToLive(){let e=this.deps.video,t=this.liveEnd();t==null||t<=e.currentTime||(e.currentTime=t)}getStats(){let e=this.deps.video,t=this.frameCounter.read(),n={droppedFrames:t.dropped,decodedFrames:t.totalFrames};if(this.cdnHost||=gt(this.builtAt),this.cdnHost&&(n.cdnHost=this.cdnHost),this.deps.descriptor.drmEnabled&&(n.keySystem=`fairplay`),e.duration===1/0){n.isLive=!0;let t=this.liveEdgeEstimate(),r=t==null?NaN:t-e.currentTime;Number.isFinite(r)&&(n.atLiveEdge=r<=Tt,!e.paused&&r>=0&&(n.latencySeconds=r))}else Number.isFinite(e.duration)&&e.duration>0&&(n.isLive=!1);return n}stop(){this.unwatchBufferedEnd();try{this.deps.video.pause()}catch{}}watchRefocus(){this.deps.snapToLiveOnRefocus===!1||typeof document>`u`||this.onVisibility||(this.onVisibility=()=>{let e=K();if(document.visibilityState===`hidden`){this.hiddenSince=e,this.cancelRefocus();return}let t=this.hiddenSince;this.hiddenSince=null,t!=null&&e-t>=yt&&this.armRefocus()},this.onPageShow=e=>{e.persisted&&this.armRefocus()},document.addEventListener(`visibilitychange`,this.onVisibility),typeof window<`u`&&window.addEventListener(`pageshow`,this.onPageShow))}armRefocus(){if(this.cancelRefocus(),Number.isFinite(this.deps.video.duration))return;let e=this.liveEnd(),t=K,n=t(),r=0,i=()=>{if(this.refocusTimer=null,Number.isFinite(this.deps.video.duration))return;r+=H;let a=this.liveEnd(),o=a!=null&&(e==null||a>=e+St),s=Math.max(r,t()-n)>=xt;if(o||s&&a!=null){this.snapToLive();return}this.refocusTimer=setTimeout(i,H)};this.refocusTimer=setTimeout(i,H)}cancelRefocus(){this.refocusTimer!=null&&clearTimeout(this.refocusTimer),this.refocusTimer=null}watchBufferedEnd(){if(this.edgeTimer!=null)return;let{video:e}=this.deps;this.onEdgeReset=e=>{this.lastBufferedEnd=null,this.bufferedAdvancedAt=null,e.type===`emptied`&&this.resetEndStale()},e.addEventListener(`seeking`,this.onEdgeReset),e.addEventListener(`emptied`,this.onEdgeReset),this.edgeTimer=setInterval(()=>{if(e.duration!==1/0)return;this.checkEndStale();let t=jt(e,e.currentTime);t!=null&&((this.lastBufferedEnd==null||Math.abs(t-this.lastBufferedEnd)>=wt)&&(this.bufferedAdvancedAt=K()),this.lastBufferedEnd=t)},Ct)}checkEndStale(){if(this.endedEmitted)return;let e=K(),t=this.lastTickAt==null?0:e-this.lastTickAt;this.lastTickAt=e;let n=this.liveEnd();if(n==null)return;let r=this.lastSeekableEnd==null||Math.abs(n-this.lastSeekableEnd)>=Dt;this.lastSeekableEnd=n;let i=this.deps.video,a=typeof document<`u`&&document.visibilityState===`hidden`;if(r||t>Ot||a||i.paused){this.edgeStampedAt=e;return}e-(this.edgeStampedAt??e)>Et&&(this.endedEmitted=!0,this.deps.emit({type:`ended`,reason:`stalled`}))}resetEndStale(){this.lastSeekableEnd=null,this.edgeStampedAt=null,this.lastTickAt=null}unwatchBufferedEnd(){this.edgeTimer!=null&&clearInterval(this.edgeTimer),this.edgeTimer=null,this.onEdgeReset&&=(this.deps.video.removeEventListener(`seeking`,this.onEdgeReset),this.deps.video.removeEventListener(`emptied`,this.onEdgeReset),null),this.resetEndStale(),this.lastBufferedEnd=null,this.bufferedAdvancedAt=null}liveEdgeEstimate(){let e=this.deps.video;if(e.duration!==1/0)return null;let t=this.liveEnd(),n=jt(e,e.currentTime)??this.lastBufferedEnd;if(n!=null){let e=this.bufferedAdvancedAt,r=n+(e==null?0:Math.max(0,(K()-e)/1e3));(t==null||r>t)&&(t=r)}return t!=null&&Number.isFinite(t)?t:null}liveEnd(){let e=this.deps.video;if(e.duration!==1/0||e.seekable.length===0)return null;let t=e.seekable.end(e.seekable.length-1);return Number.isFinite(t)?t:null}snapToLive(){let e=this.deps.video,t=this.liveEnd();if(t==null)return;let n=e.seekable.start(e.seekable.length-1),r=Math.min(e.currentTime,t),i=Math.max(n,t-bt,r);try{e.currentTime=i}catch{}}destroy(){this.detachFrames?.(),this.detachFrames=null,this.cancelRefocus(),this.unwatchBufferedEnd(),this.onVisibility&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),this.onVisibility=null),this.onPageShow&&typeof window<`u`&&(window.removeEventListener(`pageshow`,this.onPageShow),this.onPageShow=null);let{video:e}=this.deps;this.onLoaded&&e.removeEventListener(`loadedmetadata`,this.onLoaded),this.onError&&e.removeEventListener(`error`,this.onError),this.onEncrypted&&e.removeEventListener(`encrypted`,this.onEncrypted),this.keySession?.close().catch(()=>{}),this.keySession=null,this.fairplayArmed=!1,this.fairplayKeyIV=void 0;try{e.pause()}catch{}e.removeAttribute(`src`),this.restorePreload();try{e.load()}catch{}}};function K(){return typeof performance<`u`?performance.now():Date.now()}function jt(e,t){let n=e.buffered;if(!n||!Number.isFinite(t))return null;for(let e=0;e<n.length;e+=1)if(n.start(e)<=t+.1&&n.end(e)>t){let t=n.end(e);return Number.isFinite(t)?t:null}return null}function Mt(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}CMCD=${encodeURIComponent(`sid="${t}"`)}`:e}function q(e,t=Date.now()){if(!e)return!1;let n;try{n=new URL(e).searchParams.get(`exp`)}catch{return!1}return!n||!/^\d+$/.test(n)?!1:Number(n)*1e3<=t}var Nt=4096;function Pt(e){if(!e||typeof e!=`object`)return;let{response:t}=e;if(typeof t==`string`)return t;let n;if(Object.prototype.toString.call(t)===`[object ArrayBuffer]`?n=new Uint8Array(t):ArrayBuffer.isView(t)&&(n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),!(!n||n.byteLength===0||n.byteLength>Nt))try{return new TextDecoder().decode(n)}catch{return}}var Ft=15e3,It=5e3,Lt=6,Rt=4e3,zt=2;function J(e){try{let t=new URL(e);return t.searchParams.delete(`CMCD`),t.toString()}catch{return e}}var Bt=class{cmcd;entries=new Map;keyed=new Set;perTrack=new Map;hints=new Map;stats={started:0,served:0,missed:0,failed:0,expired:0,hintStarted:0,hintServed:0,hintFailed:0,hintExpired:0,hintDropped:0};constructor(e={}){this.cmcd=e}keyUsable(e){this.keyed.add(e)}isActive(e){return!this.keyed.has(e)}prefetch(e,t,n){if(!this.isActive(t))return;let r=J(e);if(this.entries.has(r))return;let i=this.perTrack.get(t)??0;i>=Lt||(this.perTrack.set(t,i+1),this.start(r,this.withCmcd(e,t,n),!1,Ft),this.stats.started+=1)}prefetchHint(e,t){let n=J(e);if(this.entries.has(n))return;let r=this.hints.get(t)??[];for(;r.length>=zt;){let e=r.shift();e!==void 0&&this.drop(e)&&(this.stats.hintDropped+=1)}r.push(n),this.hints.set(t,r),this.start(n,this.withCmcd(e,t,`media`),!0,Rt),this.stats.hintStarted+=1}dropHints(e){for(let t of this.hints.get(e)??[])this.drop(t)&&(this.stats.hintDropped+=1);this.hints.delete(e)}drop(e){let t=this.entries.get(e);return t?(this.entries.delete(e),t.abort.abort(),!0):!1}start(e,t,n,r){let i=new AbortController,a={started:performance.now(),first:0,end:0,hint:n,headers:Promise.resolve(),bytes:Promise.resolve(null),abort:i},o=()=>{};a.headers=new Promise(e=>o=e),a.bytes=fetch(t,{credentials:`omit`,mode:`cors`,signal:i.signal}).then(async e=>{if(a.first=performance.now(),o(),!e.ok)return null;let t=await e.arrayBuffer();return a.end=performance.now(),t}).catch(()=>null).finally(o),this.entries.set(e,a),setTimeout(()=>{this.entries.get(e)===a&&(this.entries.delete(e),i.abort(),n?this.stats.hintExpired+=1:this.stats.expired+=1)},r)}take(e){let t=J(e),n=this.entries.get(t);return n&&this.entries.delete(t),n}destroy(){for(let e of this.entries.values())e.abort.abort();this.entries.clear(),this.hints.clear()}withCmcd(e,t,n){let{sessionId:r,contentId:i}=this.cmcd;if(!r&&!i)return e;let a=[];i&&a.push(`cid="${i}"`),a.push(`ot=${n===`init`?`i`:t===`audio`?`a`:`v`}`),a.push(`sf=h`),r&&a.push(`sid="${r}"`),a.push(`st=ll`);try{let t=new URL(e);return t.searchParams.set(`CMCD`,a.join(`,`)),t.toString()}catch{return e}}};function Vt(e){let t=c.default.DefaultConfig?.loader;if(typeof t!=`function`)return;class n extends t{served=!1;cancelled=!1;entry;stats=Ht();load(t,n,r){let i=t.rangeEnd?void 0:e.take(t.url);if(!i){super.load(t,n,r);return}this.served=!0,this.entry=i;let a=performance.now(),o=()=>{i.hint?e.stats.hintFailed+=1:e.stats.failed+=1},s=()=>{!this.cancelled&&this.served&&(i.abort.abort(),o(),this.served=!1,this.entry=void 0,super.load(t,n,r))},c=n?.loadPolicy,l=c?.maxTimeToFirstByteMs||It,u=setTimeout(s,l);i.headers.then(()=>{clearTimeout(u);let e=c?.maxLoadTimeMs;e&&(u=setTimeout(s,Math.max(0,e-(performance.now()-a))))}),i.bytes.then(s=>{if(clearTimeout(u),this.cancelled||!this.served)return;if(!s){o(),this.served=!1,super.load(t,n,r);return}let c=this.stats;if(i.hint){e.stats.hintServed+=1;let t=performance.now(),n=Math.max(0,(i.end||t)-(i.first||t)),r=Math.max(0,(i.first||t)-a);c.loading.end=t,c.loading.first=t-n,c.loading.start=c.loading.first-r}else e.stats.served+=1,c.loading.start=a,c.loading.first=Math.max(a,i.first||a),c.loading.end=performance.now();c.loaded=c.total=s.byteLength,this.entry=void 0,r.onSuccess({url:t.url,data:s},c,t,null)})}abort(){if(this.served){this.cancelled=!0,this.stats.aborted=!0,this.entry?.abort.abort(),this.entry=void 0;return}super.abort()}}return n}function Ht(){return{aborted:!1,loaded:0,retry:0,total:0,chunkCount:0,bwEstimate:0,loading:{start:0,first:0,end:0},parsing:{start:0,end:0},buffering:{start:0,first:0,end:0}}}function Ut(e){return e===`audio`?`audio`:`main`}function Wt(e,t){let n=[];t.initSegment?.url&&!t.initSegment.data&&n.push({url:t.initSegment.url,kind:`init`});let r=((t.type===`audio`?e.audioTracks?.[e.audioTrack]?.details:typeof t.level==`number`?e.levels?.[t.level]?.details:void 0)?.partList??[]).filter(e=>e.fragment.sn===t.sn);if(r.length)for(let e of r)e.url&&n.push({url:e.url,kind:`media`});else t.url&&n.push({url:t.url,kind:`media`});return n}function Gt(e){let t=e,n=t?.preloadHint;if(!n||!t?.url||n.TYPE!==`PART`||n[`BYTERANGE-START`]!==void 0||n[`BYTERANGE-LENGTH`]!==void 0)return null;let r=n.URI;if(typeof r!=`string`||!r)return null;try{return new URL(r,t.url).toString()}catch{return null}}function Y(e,t){return e.length===0?0:e[Math.min(e.length,Math.max(1,Math.ceil(t/100*e.length)))-1]??0}function Kt(){return c.default.isSupported()}var qt=3,Jt=1e6,Yt=20,Xt=1e4,Zt=3,Qt=5,$t=3,en=1e4,tn=3e4,nn=12e3,rn=3e3,an=.02,on=6e3,sn=.5,cn=3,ln=.5,un=1.1,dn=.25,fn=5e3,pn=4e3,mn=2,hn=5,gn=2,_n=2,vn=4,yn=4,bn=2e3,xn=3e4,Sn=1,Cn=2;function wn(e,t,n){if(n<=0||t<0||t>=e.length)return t;let r=(t,n)=>e[t].width===e[n].width&&e[t].height===e[n].height,i=t=>{for(;t+1<e.length&&r(t+1,t);)t++;return t},a=i(t);for(let t=0;t<n&&a+1<e.length;t++)a=i(a+1);return a}var Tn=.2,En=30,Dn=2,On=2,kn=2,An=9,jn=.5,Mn=64,Nn=1e4,Pn=8,Fn=.6,In=.4,Ln=.4,Rn=2,zn=6e4,X=.5,Bn=3.5,Vn=300;function Hn(e){return(e?.part??e?.frag)?.stats}function Un(){if(typeof navigator>`u`)return 0;try{let e=navigator.connection?.rtt;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:0}catch{return 0}}function Wn(e){if(e.liveSyncDurationCount!=null||e.liveMaxLatencyDurationCount!=null){delete e.liveSyncDuration,delete e.liveMaxLatencyDuration;return}e.liveSyncDuration??=kn;let t=Math.max(12,e.liveSyncDuration+An);(e.liveMaxLatencyDuration==null||e.liveMaxLatencyDuration<=e.liveSyncDuration)&&(e.liveMaxLatencyDuration=t),Gn(e,e.liveSyncDuration)}function Gn(e,t){let n=(e,t,n)=>Math.min(n,Math.max(t,e));e.maxStarvationDelay??=n(t/2,.5,4),e.maxLoadingDelay??=n(t,1,4),e.abrEwmaFastLive??=n(t/2,1,3)}var Kn=class{name=`hls`;hls=null;deps;licenseUrl;detectedLowLatency=!1;bytesLoaded=0;prefetch=null;reportedFirstPlaylist=!1;reportedFirstBytes=!1;reportedDrmReady=!1;playlistBytesLoaded=0;renditionSwitches=0;licenseTimeMs=0;licenseRequested=!1;upshifts=0;downshifts=0;lastLevelIndex=-1;requestCount=0;requestErrors=0;requestTimesMs=[];cdnHost=``;ladderHeights;ladderTopBitrateKbps=0;mediaRecoveries=0;networkRecoveries=0;licenseRecoveries=0;recoveryResetTimer=null;networkRetryTimer=null;licenseRetryTimer=null;onVisibility=null;onSeeking=null;onPause=null;onPlay=null;pauseSuspendTimer=null;loadSuspended=!1;stopped=!1;sawLive=!1;lastEndSN=-1;lastAdvanceMs=0;endWatchdog=null;endedEmitted=!1;lastFragLoadingMs=0;starvedTicks=0;starvationKicks=0;kickPending=!1;kickTicks=0;starvationRebuilds=0;kickKind=null;starvedFrames=0;deadTicks=0;mainFragsSinceTick=0;bwFragsLoaded=0;bwSavedAt=0;recentMainFrags=[];chaseSuspended=!1;savedLiveMaxLatency;savedMaxSyncRate;chaseLatency=-1;catchUpRate=1;catchUpEngaged=!1;onTimeUpdate=null;chaseTicks=0;liveRetargets=0;holdBackEnabled;holdBackSamples=[];holdBackBase=-1;holdBackStepCount=0;holdBackApplied=0;holdBackSlowTicks=0;holdBackFastSince=0;holdBackSteps=0;holdBackPriorChecked=!1;capObserver=null;capTimer=null;sizeCapLevel=null;bitrateCapLevel=-1;pushedCapLevel=-1;pushedCapReason=null;fpsCapBitrate=null;fpsCapFailedHeight=null;fpsCapManaged=!0;fpsLastFrames=-1;fpsLastDropped=-1;fpsBadTicks=0;fpsGraceTicks=0;fpsDownCaps=0;sizeCapManaged=!0;dprMedia=null;onDprChange=null;loadStarted;frameCounter;detachFrames=null;constructor(e){this.deps=e,this.holdBackEnabled=e.adaptiveHoldBack!==!1,this.frameCounter=new _t(e.video),this.licenseUrl=e.descriptor.drm?.widevine?.licenseUrl,this.loadStarted=e.deferLoad!==!0}async load(){this.detachFrames??=this.frameCounter.attach();let{descriptor:e,snapToLiveOnRefocus:t,video:n,emit:r}=this.deps,i=U(n)&&W(),a=!!e.drm?.widevine?.licenseUrl&&!i;if(e.drmEnabled&&!a){r({type:`error`,error:new l(`DRM_CLIENT`,0,e.drm?.fairplay?.licenseUrl&&i?`FairPlay cannot be played on the hls.js engine (WebKit binds keys via the media sinf box); use engine "auto" or "native"`:`DRM is required but none of the stream’s key systems is usable on this platform (WebKit takes FairPlay only; other browsers take Widevine only)`),fatal:!0});return}e.drmEnabled&&a&&!this.deps.hlsConfig?.requestMediaKeySystemAccessFunc&&(Xe(n),et()),this.startHls(),t!==!1&&typeof document<`u`&&(this.onVisibility=()=>{let e=this.hls;if(document.visibilityState!==`visible`||!e)return;let t=e.liveSyncPosition;if(typeof t!=`number`)return;let r=typeof e.targetLatency==`number`&&e.targetLatency>0?e.targetLatency:3;t-n.currentTime>Math.max(r*3,8)&&(n.currentTime=t)},document.addEventListener(`visibilitychange`,this.onVisibility)),this.onSeeking=()=>{this.clampOverSeek(),this.loadSuspended&&(this.resumeLoading(),this.schedulePauseSuspend())},n.addEventListener(`seeking`,this.onSeeking),this.onTimeUpdate=()=>this.updateCatchUpBand(),n.addEventListener(`timeupdate`,this.onTimeUpdate),this.onPause=()=>this.schedulePauseSuspend(),this.onPlay=()=>this.resumeLoading(),n.addEventListener(`pause`,this.onPause),n.addEventListener(`play`,this.onPlay),this.sizeCapManaged&&typeof ResizeObserver<`u`&&(this.capObserver=new ResizeObserver(()=>this.onMediaResize()),this.capObserver.observe(n),this.watchDprChanges())}schedulePauseSuspend(){this.pauseSuspendTimer||this.loadSuspended||this.stopped||!this.loadStarted||(this.pauseSuspendTimer=setTimeout(()=>{this.pauseSuspendTimer=null;let{video:e}=this.deps;if(e.paused&&!e.ended&&!this.stopped&&this.hls){try{this.hls.stopLoad()}catch{return}this.loadSuspended=!0}},fn))}resumeLoading(){if(this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null),this.resetChaseWindow(),this.resetFrameDropWindow(),this.loadSuspended&&(this.loadSuspended=!1,!this.stopped&&this.hls)){this.lastAdvanceMs=Date.now(),this.lastFragLoadingMs=0,this.resetStarvationWindow(),this.resetChaseWindow(),this.clearKick();try{this.hls.startLoad(-1)}catch{}}}startLoad(){this.loadStarted||(this.loadStarted=!0,this.deps.video.paused&&this.schedulePauseSuspend(),this.hls?.startLoad(-1))}watchDprChanges(){if(typeof matchMedia!=`function`)return;this.unwatchDprChanges();let e=typeof self<`u`&&self.devicePixelRatio||1,t=matchMedia(`(resolution: ${e}dppx)`);if(typeof t.addEventListener!=`function`)return;let n=()=>{this.onMediaResize(),this.watchDprChanges()};t.addEventListener(`change`,n),this.dprMedia=t,this.onDprChange=n}unwatchDprChanges(){this.dprMedia&&this.onDprChange&&this.dprMedia.removeEventListener(`change`,this.onDprChange),this.dprMedia=null,this.onDprChange=null}clampOverSeek(){let e=this.hls;if(!e||this.chaseSuspended||(e.levels[e.currentLevel]??e.levels[e.loadLevel])?.details?.live!==!0)return;let t=e.liveSyncPosition;if(typeof t!=`number`||!Number.isFinite(t))return;let{video:n}=this.deps;n.currentTime<=t+jn||(n.currentTime=t)}reanchorPartTimeline(e,t){let{frag:n,part:r}=t;if(!r||r.index!==0||n.type!==`main`||typeof n.sn!=`number`)return;let i=e.levels[n.level]?.details;if(!i?.live)return;let a=r.elementaryStreams.video??r.elementaryStreams.audiovideo??r.elementaryStreams.audio;if(!a)return;let o=n.sn,s=i.fragments.find(e=>e&&e.sn===o)??(i.fragmentHint?.sn===o?i.fragmentHint:void 0);if(!s)return;let c=a.startPTS-s.start;if(!(!Number.isFinite(c)||Math.abs(c)<an)){for(let e of i.fragments)e&&e.setStart(e.start+c);i.fragmentHint?.setStart(i.fragmentHint.start+c),this.deps.debug===!0&&console.info(`havik-player: LL-HLS timeline re-anchored by ${c>=0?`+`:``}${c.toFixed(3)}s at sn ${n.sn} (level ${n.level})`)}}startHls(){let{video:e,descriptor:t,credential:n,deviceId:r,userId:i,lowLatency:a,debug:o,hlsConfig:s,emit:l}=this.deps;this.clearKick(),this.resetStarvationWindow(),this.resetChaseWindow(),this.resetFrameDropWindow(),this.lastFragLoadingMs=0,this.lastEndSN=-1,this.lastAdvanceMs=0;let u=t.drmEnabled&&!!(t.drm?.widevine?.licenseUrl||t.drm?.fairplay?.licenseUrl),d=U(this.deps.video)&&W(),f={debug:o===!0,enableWorker:!a,lowLatencyMode:a,backBufferLength:90,liveDurationInfinity:!0,maxBufferHole:.5,maxLiveSyncPlaybackRate:d?1:1.1,abrEwmaDefaultEstimate:this.startEstimate(),capLevelToPlayerSize:!1,...this.loadStarted?{}:{autoStartLoad:!1},...u?{emeEnabled:!0,drmSystems:{...this.licenseUrl?{"com.widevine.alpha":{licenseUrl:this.licenseUrl}}:{}},drmSystemOptions:{videoRobustness:L.video,audioRobustness:L.audio,videoEncryptionScheme:L.scheme,audioEncryptionScheme:L.scheme},...F()?{requestMediaKeySystemAccessFunc:Ye(e)}:{},licenseXhrSetup:(e,a)=>{let o=performance.now(),s=()=>{e.open(`POST`,this.licenseUrl??a,!0),e.setRequestHeader(`x-api-key`,n.apiKey),e.setRequestHeader(`X-Match-Urn`,t.matchUrn),e.setRequestHeader(`X-Device-Id`,r),i&&e.setRequestHeader(`X-User-Id`,i),this.licenseRequested=!0,e.addEventListener(`loadend`,()=>{this.licenseTimeMs===0&&(this.licenseTimeMs=Math.max(1,Math.round(performance.now()-o)))})},{freshLicenseUrl:c}=this.deps;if(!c||!q(this.licenseUrl)){s();return}let l=this.hls,u,d=new Promise(e=>{u=setTimeout(()=>e(void 0),en)});return Promise.race([c().catch(()=>void 0),d]).finally(()=>clearTimeout(u)).then(e=>{if(!this.hls||this.hls!==l)throw Error(`havik-player: engine torn down during refresh`);e&&(this.licenseUrl=e),s()})}}:{},...t.analytics?.sid?{cmcd:{sessionId:t.analytics.sid,contentId:t.matchUrn,useHeaders:!1}}:{},...s};this.prefetch?.destroy(),this.prefetch=null;let p=!1,m=!1,h=u&&this.deps.mediaDuringKey!==!1,g=this.deps.preloadHints===!0;if((h||g)&&!f.fLoader){let e=new Bt({sessionId:t.analytics?.sid,contentId:t.matchUrn}),n=Vt(e);n&&(this.prefetch=e,p=h,m=g,f.fLoader=n)}Wn(f),this.catchUpRate=typeof f.maxLiveSyncPlaybackRate==`number`?f.maxLiveSyncPlaybackRate:1,this.catchUpEngaged=!1,this.catchUpRate>1&&(f.maxLiveSyncPlaybackRate=1),this.sizeCapManaged=f.capLevelToPlayerSize!==!0,this.fpsCapManaged=!(s&&`capLevelOnFPSDrop`in s),this.loadStarted=f.autoStartLoad!==!1;let _=new c.default(f);if(this.hls=_,this.armHoldBack(_,f),_.on(c.default.Events.FRAG_PARSED,(e,t)=>this.reanchorPartTimeline(_,t)),_.on(c.default.Events.MANIFEST_PARSED,()=>{this.mediaRecoveries=0,this.networkRecoveries=0,u&&!this.deps.hlsConfig?.requestMediaKeySystemAccessFunc&&this.dropLevelsWidevineCannotPlay(_),this.measureLadder(_),this.applySizeCap(),this.loadSuspended=!1,e.paused&&this.schedulePauseSuspend(),l({type:`ready`})}),_.on(c.default.Events.FRAG_BUFFERED,(e,t)=>{t?.frag?.type===`main`&&(this.kickKind!==`dead`&&this.clearKick(),(this.mediaRecoveries>0||this.networkRecoveries>0||this.licenseRecoveries>0||this.starvationKicks>0||this.starvationRebuilds>0)&&!this.recoveryResetTimer&&(this.recoveryResetTimer=setTimeout(()=>{this.mediaRecoveries=0,this.networkRecoveries=0,this.licenseRecoveries=0,this.starvationKicks=0,this.starvationRebuilds=0,this.recoveryResetTimer=null},tn)))}),_.on(c.default.Events.FRAG_LOADING,(e,t)=>{t?.frag?.type===`main`&&(this.lastFragLoadingMs=Date.now())}),_.on(c.default.Events.FRAG_LOADED,(e,t)=>{t?.frag?.type===`main`&&(this.mainFragsSinceTick+=1,this.bwFragsLoaded+=1,this.maybeRememberBandwidth(!1));let n=t?.frag,r=Hn(t),i=r?.loaded;typeof i==`number`&&(this.bytesLoaded+=i),!this.reportedFirstBytes&&typeof i==`number`&&i>0&&(this.reportedFirstBytes=!0,l({type:`firstBytes`}));let a=r?.loading;a&&a.end>0&&a.start>0&&(this.requestCount+=1,this.requestTimesMs.push(Math.max(0,Math.round(a.end-a.start))),this.requestTimesMs.length>Mn&&this.requestTimesMs.shift()),this.sampleHoldBack(t);let o=n?.url;if(o){let e=mt(o);e&&(this.cdnHost=e)}}),_.on(c.default.Events.LEVEL_LOADED,(e,t)=>{let n=t?.stats?.loaded;if(typeof n==`number`&&(this.playlistBytesLoaded+=n),this.reportedFirstPlaylist||(this.reportedFirstPlaylist=!0,l({type:`firstPlaylist`})),this.detectedLowLatency)return;let r=t.details;(r?.partList?.length||(r?.partTarget??0)>0)&&(this.detectedLowLatency=!0,l({type:`lowLatencyDetected`,value:!0}))}),_.on(c.default.Events.LEVEL_LOADED,(e,t)=>this.trackEnd(t)),this.prefetch&&m){let e=this.prefetch,t=this.deps.video,n=(n,r)=>{if(t.paused)return;let i=n;if(!i?.live||!i.partList?.length||typeof i.edge!=`number`)return;let a=t.buffered,o=a.length?a.end(a.length-1):0;if(i.edge-o>qt*(i.partTarget||.5))return;let s=Gt(n);s&&e.prefetchHint(s,r)};_.on(c.default.Events.LEVEL_LOADED,(e,t)=>{t.level===_.loadLevel&&n(t.details,`main`)}),_.on(c.default.Events.AUDIO_TRACK_LOADED,(e,t)=>{t?.id===_.audioTrack&&n(t?.details,`audio`)}),_.on(c.default.Events.LEVEL_SWITCHING,()=>e.dropHints(`main`)),_.on(c.default.Events.AUDIO_TRACK_SWITCHING,()=>e.dropHints(`audio`))}if(this.prefetch&&p){let e=this.prefetch;_.on(c.default.Events.KEY_LOADING,(t,n)=>{let r=n?.frag,i=Ut(r?.type);if(r&&e.isActive(i))for(let t of Wt(_,r))e.prefetch(t.url,i,t.kind)}),_.on(c.default.Events.KEY_LOADED,(t,n)=>e.keyUsable(Ut(n?.frag?.type)))}_.on(c.default.Events.KEY_LOADED,()=>{u&&!this.reportedDrmReady&&(this.reportedDrmReady=!0,l({type:`drmReady`}))}),this.endWatchdog&&clearInterval(this.endWatchdog),this.endWatchdog=setInterval(()=>{this.checkEndStale(),this.checkStarvation(),this.updateCatchUpBand(),this.checkFutileChase(),this.adaptHoldBack(),this.checkFrameDrops()},rn),_.on(c.default.Events.LEVEL_SWITCHED,(e,t)=>{this.renditionSwitches+=1;let n=this.lastLevelIndex>=0?_.levels[this.lastLevelIndex]:void 0,r=_.levels[t.level];n&&r&&r.bitrate!==n.bitrate&&(r.bitrate>n.bitrate?this.upshifts+=1:this.downshifts+=1),this.lastLevelIndex=t.level,this.armFrameDropGrace(),l({type:`qualitychange`,index:t.level})}),_.on(c.default.Events.AUDIO_TRACK_SWITCHED,(e,t)=>l({type:`audiotrackchange`,id:t.id})),_.on(c.default.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>l({type:`texttrackchange`,id:t.id})),_.on(c.default.Events.ERROR,(e,t)=>this.onError(t)),_.loadSource(t.manifestUrl),_.attachMedia(e)}getQualityLevels(){return this.hls?this.hls.levels.map((e,t)=>({index:t,width:e.width||void 0,height:e.height||void 0,bitrate:e.bitrate,codecs:e.videoCodec||e.codecSet||void 0})):[]}getCurrentQuality(){return this.hls?this.hls.autoLevelEnabled?-1:this.hls.currentLevel:-1}setQuality(e){this.hls&&(this.hls.currentLevel=e)}setMaxBitrate(e){let t=this.hls;if(t){if(e==null)this.bitrateCapLevel=-1;else{let n=-1;t.levels.forEach((t,r)=>{t.bitrate<=e&&(n=r)}),this.bitrateCapLevel=n}this.pushCap()}}computeSizeCapTarget(){let e=this.hls;if(!e||e.levels.length===0)return null;let{video:t}=this.deps,n=t.getBoundingClientRect(),r=n.width,i=n.height;if(!r&&!i&&(r=t.width||0,i=t.height||0),!(r>0)||!(i>0))return null;let a=e.config??{},o=typeof self<`u`&&self.devicePixelRatio>0?self.devicePixelRatio:1,s=a.ignoreDevicePixelRatio?1:o;s=Math.min(s,a.maxDevicePixelRatio??1/0);let l=c.CapLevelController.getMaxLevelByMediaSize(e.levels,r*s,i*s),u=this.deps.sizeCapHeadroom;if(u==null&&o>=Cn)return l;let d=u??Sn,f=Number.isNaN(d)?Sn:d===1/0?e.levels.length:Math.max(0,Math.floor(d));return wn(e.levels,l,f)}onMediaResize(){if(!this.sizeCapManaged)return;let e=this.computeSizeCapTarget();if(e==null)return;if(this.sizeCapLevel==null){this.applySizeCap();return}if(e===this.sizeCapLevel){this.capTimer&&=(clearTimeout(this.capTimer),null);return}this.capTimer&&clearTimeout(this.capTimer);let t=e>this.sizeCapLevel?bn:xn;this.capTimer=setTimeout(()=>{this.capTimer=null,this.computeSizeCapTarget()===e?this.applySizeCap():this.onMediaResize()},t)}measureLadder(e){let t=e.levels.map(e=>e.height).filter(e=>!!e);this.ladderHeights=t.length?[...new Set(t)].sort((e,t)=>e-t):void 0,this.ladderTopBitrateKbps=e.levels.length?Math.round(Math.max(...e.levels.map(e=>e.bitrate))/1e3):0}dropLevelsWidevineCannotPlay(e){this.removeLevelsWhere(e,e=>tt(e)!==!0);let t=new Set(e.levels.map(e=>e.videoCodec).filter(e=>!!e&&R(e)!==`avc`&&!!R(e)));for(let n of t)$e(n).then(t=>{t||this.hls!==e||this.removeLevelsWhere(e,e=>e===n)&&(this.measureLadder(e),this.applySizeCap())})}removeLevelsWhere(e,t){let n=e.levels??[],r=[],i=new Set;if(n.forEach((e,n)=>{let a=e.videoCodec;a&&R(a)&&t(a)&&(r.push(n),i.add(a))}),!r.length)return!1;let a=[...i].join(`, `);if(!n.some((e,t)=>r.includes(t)?!1:!R(e.videoCodec)||tt(e.videoCodec)===!0))return console.warn(`havik-player: every rendition is ${a}, which Widevine may not play on this browser; keeping them`),!1;for(let t=r.length-1;t>=0;--t)e.removeLevel(r[t]);return console.info(`havik-player: skipped ${r.length} rendition(s) Widevine cannot play on this browser (${a})`),!0}applySizeCap(){if(!this.sizeCapManaged)return;this.capTimer&&=(clearTimeout(this.capTimer),null);let e=this.computeSizeCapTarget();e!=null&&(this.sizeCapLevel=e,this.pushCap())}pushCap(){let e=this.hls;if(!e)return;let t=[[`size`,this.sizeCapLevel??-1],[`bitrate`,this.bitrateCapLevel],[`fps`,this.fpsCapLevel(e)]],n=-1,r=null;for(let[e,i]of t)i>=0&&(n<0||i<n)&&(n=i,r=e);e.autoLevelCapping=n,this.pushedCapLevel=n,this.pushedCapReason=r}getAudioTracks(){return this.hls?this.hls.audioTracks.map(e=>({id:e.id,name:e.name,lang:e.lang||void 0,default:!!e.default})):[]}setAudioTrack(e){this.hls&&(this.hls.audioTrack=e)}getTextTracks(){return this.hls?this.hls.subtitleTracks.map(e=>({id:e.id,name:e.name,lang:e.lang||void 0})):[]}setTextTrack(e){let t=this.hls;t&&(e<0?(t.subtitleTrack=-1,t.subtitleDisplay=!1):(t.subtitleTrack=e,t.subtitleDisplay=!0))}seekToLive(){let e=this.hls;e&&typeof e.liveSyncPosition==`number`&&(this.deps.video.currentTime=e.liveSyncPosition)}setLicenseUrls(e){e.widevine&&(this.licenseUrl=e.widevine)}getStats(){let e=this.hls,t=this.frameCounter.read(),n={droppedFrames:t.dropped,decodedFrames:t.totalFrames,lowLatency:this.detectedLowLatency,bytesLoaded:this.bytesLoaded,playlistBytesLoaded:this.playlistBytesLoaded,renditionSwitches:this.renditionSwitches,liveRetargets:this.liveRetargets,holdBackSteps:this.holdBackSteps,fpsDownCaps:this.fpsDownCaps,licenseTimeMs:this.licenseTimeMs,upshifts:this.upshifts,downshifts:this.downshifts,requestCount:this.requestCount,requestErrors:this.requestErrors,requestTimesMs:[...this.requestTimesMs],ladderHeights:this.ladderHeights,ladderTopBitrateKbps:this.ladderTopBitrateKbps||void 0};if(this.cdnHost&&(n.cdnHost=this.cdnHost),this.licenseRequested&&(n.keySystem=`widevine`,n.drmSecurityLevel=`L3`),e){n.qualityPinned=!e.autoLevelEnabled,typeof e.latency==`number`&&(n.latencySeconds=e.latency),typeof e.targetLatency==`number`&&e.targetLatency>0&&(n.targetLatencySeconds=e.targetLatency),typeof e.bandwidthEstimate==`number`&&(n.bandwidthKbps=Math.round(e.bandwidthEstimate/1e3));let t=e.currentLevel>=0?e.levels[e.currentLevel]:void 0;t&&(n.levelHeight=t.height);let r=e.autoLevelCapping,i=r>=0?e.levels[r]:void 0;if(i&&i.height>0){n.maxLevelHeight=i.height;let t=e.config??{};t.capLevelToPlayerSize!==!0&&t.capLevelOnFPSDrop!==!0&&r===this.pushedCapLevel&&this.pushedCapReason&&(n.capReason=this.pushedCapReason)}t?.videoCodec&&(n.videoCodec=t.videoCodec),t?.audioCodec&&(n.audioCodec=t.audioCodec),t&&typeof t.bitrate==`number`&&(n.renditionBitrateKbps=Math.round(t.bitrate/1e3)),typeof t?.details?.live==`boolean`&&(n.isLive=t.details.live,typeof e.liveSyncPosition==`number`&&(n.atLiveEdge=this.deps.video.currentTime>=e.liveSyncPosition-1.5))}return n}trackEnd(e){let t=e.details;if(t){if(t.live===!0){let e=!this.sawLive;this.sawLive=!0,e&&this.applyHoldBackPrior();let n=t.endSN??-1;n!==this.lastEndSN&&(this.lastEndSN=n,this.lastAdvanceMs=Date.now(),this.chaseSuspended&&this.resumeChasing());return}this.sawLive&&this.emitEnded(`endlist`)}}checkEndStale(){if(this.endedEmitted||!this.sawLive||this.lastAdvanceMs===0)return;if(typeof document<`u`&&document.hidden){this.lastAdvanceMs=Date.now();return}if(this.loadSuspended){this.lastAdvanceMs=Date.now();return}let e=Date.now()-this.lastAdvanceMs;!this.chaseSuspended&&e>on&&this.suspendChasing(),e>nn&&this.emitEnded(`stalled`)}resetStarvationWindow(){this.starvedTicks=0,this.deadTicks=0,this.mainFragsSinceTick=0,this.recentMainFrags=[]}clearKick(){this.kickPending=!1,this.kickTicks=0,this.kickKind=null}checkStarvation(){let e=this.hls,{video:t}=this.deps;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended)return;if(typeof document<`u`&&document.hidden||this.loadSuspended){this.resetStarvationWindow();return}let n=Date.now(),r=this.lastAdvanceMs!==0&&n-this.lastAdvanceMs<on,i=this.lastFragLoadingMs!==0&&n-this.lastFragLoadingMs>pn,a=t.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&!t.paused,{totalFrames:o,dropped:s}=V(t),c=o-s,l=c!==this.starvedFrames;if(this.starvedFrames=c,!a||l){(t.readyState>=HTMLMediaElement.HAVE_FUTURE_DATA||l)&&this.clearKick(),this.resetStarvationWindow();return}if(!r){this.resetStarvationWindow();return}if(this.kickPending&&(this.kickKind===`dead`||i)&&(this.kickTicks+=1),this.starvedTicks=i?this.starvedTicks+1:0,this.deadTicks+=1,this.recentMainFrags.push(this.mainFragsSinceTick),this.mainFragsSinceTick=0,this.recentMainFrags.length>vn&&this.recentMainFrags.shift(),this.clearRecoveryReset(),this.kickPending&&this.kickTicks>=gn&&(this.clearKick(),this.starvationRebuilds<_n)){this.starvationRebuilds+=1,this.resetStarvationWindow(),this.clearRecoveryReset(),console.warn(`havik-player: restarting the load did not resume video (the wedge is in hls.js state that only a rebuild clears) — rebuilding the player`),this.rebuildInstance(`starvation rebuild`);return}let u=i&&this.starvedTicks>=mn,d=!i&&this.deadTicks>=vn&&this.recentMainFrags.reduce((e,t)=>e+t,0)>=yn;if((u||d)&&(this.resetStarvationWindow(),!(this.starvationKicks>=hn))){this.starvationKicks+=1,this.kickPending=!0,this.kickTicks=0,this.kickKind=d?`dead`:`quiet`,this.clearRecoveryReset(),console.warn(d?`havik-player: video starved while hls.js keeps loading media it never plays (dead pipeline at the live edge) — restarting the load`:`havik-player: video starved while the live playlist advances (wedged hls.js fragment pipeline) — restarting the load`);try{e.stopLoad(),e.startLoad(-1)}catch(e){console.warn(`havik-player: starvation kick failed`,e)}}}updateCatchUpBand(){let e=this.hls;if(!e||this.catchUpRate<=1||this.chaseSuspended||this.loadSuspended)return;let t=e.latency,n=e.targetLatency;if(typeof t!=`number`||typeof n!=`number`||!Number.isFinite(t))return;let r=t-n;!this.catchUpEngaged&&r>sn?this.catchUpEngaged=!0:this.catchUpEngaged&&r<=sn&&this.deps.video.playbackRate===1&&(this.catchUpEngaged=!1);let i=this.catchUpEngaged?this.catchUpRate:1;e.config.maxLiveSyncPlaybackRate!==i&&(e.config.maxLiveSyncPlaybackRate=i)}fpsCapLevel(e){if(this.fpsCapBitrate==null)return-1;let t=this.fpsCapFailedHeight,n=-1;return e.levels.forEach((e,r)=>{let i=t==null||!(e.height>0)||e.height<t;e.bitrate<=this.fpsCapBitrate&&i&&(n=r)}),n<0?0:n}armFrameDropGrace(){this.fpsGraceTicks>0||(this.fpsGraceTicks=On,this.fpsBadTicks=0)}resetFrameDropWindow(){this.fpsLastFrames=-1,this.fpsLastDropped=-1,this.fpsBadTicks=0}checkFrameDrops(){let e=this.hls,{video:t}=this.deps;if(!e||!this.fpsCapManaged||this.loadSuspended||t.paused||!e.autoLevelEnabled||typeof document<`u`&&document.hidden){this.resetFrameDropWindow();return}let{totalFrames:n,dropped:r}=V(t),i=this.fpsLastFrames<0,a=n-this.fpsLastFrames,o=r-this.fpsLastDropped;if(this.fpsLastFrames=n,this.fpsLastDropped=r,i||a<En||o<0){this.fpsBadTicks=0;return}if(this.fpsGraceTicks>0){--this.fpsGraceTicks,this.fpsBadTicks=0;return}if(o<=Tn*a){this.fpsBadTicks=0;return}if(this.fpsBadTicks+=1,this.fpsBadTicks<Dn)return;this.fpsBadTicks=0;let s=e.levels,c=s[e.currentLevel];if(!c)return;let l=s.filter(e=>e.height>0&&e.height<c.height),u=(l.length?l:s.filter(e=>e.bitrate<c.bitrate)).map(e=>e.bitrate).sort((e,t)=>t-e)[0];u!=null&&(this.fpsCapBitrate!=null&&u>=this.fpsCapBitrate||(this.fpsCapBitrate=u,l.length&&(this.fpsCapFailedHeight=c.height),this.fpsDownCaps+=1,console.warn(`havik-player: dropping ${Math.round(100*o/a)}% of frames at ${c.height}p — capping quality below it`),this.pushCap()))}resetChaseWindow(){this.chaseLatency=-1,this.chaseTicks=0}checkFutileChase(){let e=this.hls,{video:t}=this.deps;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended||this.loadSuspended||typeof document<`u`&&document.hidden){this.resetChaseWindow();return}let n=e.latency,r=t.playbackRate,i=e.config.maxLiveSyncPlaybackRate;if(!(!t.paused&&typeof i==`number`&&i>1&&r>=Math.min(un,i)&&r<=i&&typeof n==`number`&&Number.isFinite(n))){this.resetChaseWindow();return}if(this.chaseLatency<0||this.chaseLatency-n>=ln){this.chaseLatency=n,this.chaseTicks=0;return}if(this.chaseTicks+=1,this.chaseTicks<cn)return;this.resetChaseWindow();let a=typeof e.config.liveMaxLatencyDuration==`number`?e.config.liveMaxLatencyDuration:e.maxLatency;if(!(a>1))return;let o=e.targetLatency;if(typeof o!=`number`||!(o>0))return;let s=Math.min(n,a-1);s<o+dn||(console.warn(`havik-player: catch-up at ${r}x not gaining on the live edge (latency ${n.toFixed(1)}s); holding at ${s.toFixed(1)}s`),this.liveRetargets+=1,e.targetLatency=s,this.deps.emit({type:`livetargetchange`,change:{targetSeconds:s,previousSeconds:o,reason:`futile-chase`}}))}armHoldBack(e,t){this.holdBackEnabled&&(this.holdBackSlowTicks=0,this.holdBackFastSince=0,this.holdBackSamples=[],this.holdBackBase<0&&typeof t.liveSyncDuration==`number`&&(this.holdBackBase=t.liveSyncDuration),this.holdBackApplied>0&&(e.targetLatency=this.holdBackApplied))}applyHoldBackPrior(){let e=this.hls;if(!this.holdBackEnabled||this.holdBackPriorChecked||!e||(this.holdBackPriorChecked=!0,this.holdBackApplied>0||this.holdBackStepCount>0))return;let t=e.targetLatency;if(this.holdBackBase<0&&typeof t==`number`&&t>0&&(this.holdBackBase=t),this.holdBackBase<0)return;let n=Un();if(!(n>=Vn))return;let r=typeof t==`number`&&t>0?t:this.holdBackBase,i=Math.min(this.holdBackCeiling(e),this.holdBackBase+X);i>r&&(this.holdBackStepCount=1,this.moveHoldBack(e,r,i,`connection-rtt`,`connection rtt ${n} ms`))}holdBackCeiling(e){let t=this.deps.adaptiveHoldBackCeiling,n=typeof t==`number`&&Number.isFinite(t)?t:Bn,r=typeof e.config.liveMaxLatencyDuration==`number`?e.config.liveMaxLatencyDuration:e.maxLatency;return r>1?Math.min(n,r-1):n}sampleHoldBack(e){if(!this.holdBackEnabled||typeof document<`u`&&document.hidden)return;let t=e.frag?.type;if(t!==`main`&&t!==`audio`)return;let n=e.part?e.part.duration:this.detectedLowLatency?0:e.frag?.duration;if(typeof n!=`number`||!(n>0))return;let r=Hn(e)?.loading;if(!r||!(r.start>0)||!(r.end>0))return;let i=r.first>r.start?r.first:r.end,a=Math.max(0,i-r.start)/(n*1e3);this.holdBackSamples.push({t:Date.now(),ratio:a}),this.holdBackSamples.length>256&&this.holdBackSamples.shift()}adaptHoldBack(){if(!this.holdBackEnabled)return;let e=this.hls;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended||this.loadSuspended||typeof document<`u`&&document.hidden){this.holdBackSlowTicks=0,this.holdBackFastSince=0,this.holdBackSamples=[];return}let t=Date.now(),n=t-Nn,r=this.holdBackSamples,i=0;for(;i<r.length&&r[i].t<n;)i+=1;i>0&&r.splice(0,i);let a=e.targetLatency;if(typeof a!=`number`||!(a>0))return;this.holdBackBase<0&&(this.holdBackBase=a);let o=this.holdBackBase,s=this.holdBackCeiling(e);if(r.length<Pn){this.holdBackSlowTicks=0;return}let c=r.map(e=>e.ratio).sort((e,t)=>e-t),l=Y(c,95),u=Y(c,50),d=Math.round(l*1e3);if(l>=Fn&&u>=In){if(this.holdBackFastSince=0,this.holdBackSlowTicks+=1,this.holdBackSlowTicks<Rn)return;this.holdBackSlowTicks=0;let t=Math.ceil((s-o)/X),n=Math.ceil((a-o)/X-1e-9);if(n>this.holdBackStepCount&&(this.holdBackStepCount=n),this.holdBackStepCount>=t)return;this.holdBackStepCount+=1;let r=Math.min(s,o+this.holdBackStepCount*X);if(r<=a)return;this.moveHoldBack(e,a,r,`slow-fetches`,`part fetches slow (first byte p50 ${Math.round(u*1e3)} / p95 ${d} ms per 1 s of media)`);return}if(this.holdBackSlowTicks=0,l>=Ln){this.holdBackFastSince=0;return}if(this.holdBackFastSince===0){this.holdBackFastSince=t;return}if(t-this.holdBackFastSince<zn||(this.holdBackFastSince=t,this.holdBackStepCount===0||a!==this.holdBackApplied))return;--this.holdBackStepCount;let f=Math.max(o,o+this.holdBackStepCount*X);f>=a||this.moveHoldBack(e,a,f,`fast-fetches`,`part fetches fast again (p95 first byte ${d} ms per 1 s of media)`)}moveHoldBack(e,t,n,r,i){console.info(`havik-player: ${i}; live target ${t.toFixed(1)}s → ${n.toFixed(1)}s`),this.holdBackApplied=n,this.holdBackSteps+=1,e.targetLatency=n,this.deps.emit({type:`livetargetchange`,change:{targetSeconds:n,previousSeconds:t,reason:r}})}suspendChasing(){let e=this.hls;if(!e)return;this.chaseSuspended=!0,this.savedLiveMaxLatency=e.config.liveMaxLatencyDuration,this.savedMaxSyncRate=e.config.maxLiveSyncPlaybackRate,e.config.liveMaxLatencyDuration=2**53-1,e.config.maxLiveSyncPlaybackRate=1;let{video:t}=this.deps,n=this.savedMaxSyncRate;t.playbackRate>1&&typeof n==`number`&&t.playbackRate<=n&&(t.playbackRate=1)}resumeChasing(){this.chaseSuspended=!1;let e=this.hls;e&&(e.config.liveMaxLatencyDuration=this.savedLiveMaxLatency,e.config.maxLiveSyncPlaybackRate=this.savedMaxSyncRate)}emitEnded(e){this.endedEmitted||(this.endedEmitted=!0,this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.deps.emit({type:`ended`,reason:e}))}stop(){this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.clearKick(),this.stopped=!0,this.loadSuspended=!1,this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null);try{this.hls?.stopLoad()}catch{}try{this.deps.video.pause()}catch{}}startEstimate(){return this.deps.rememberBandwidth===!1?Jt:He()??Jt}maybeRememberBandwidth(e){if(this.deps.rememberBandwidth===!1||this.bwFragsLoaded<Yt)return;let t=Date.now();if(!e&&t-this.bwSavedAt<Xt)return;let n=this.hls?.bandwidthEstimate;typeof n!=`number`||!Number.isFinite(n)||n<=0||(this.bwSavedAt=t,Ue(n))}destroy(){if(this.maybeRememberBandwidth(!0),this.detachFrames?.(),this.detachFrames=null,this.prefetch?.destroy(),this.prefetch=null,this.clearRecoveryReset(),this.capTimer&&=(clearTimeout(this.capTimer),null),this.capObserver&&=(this.capObserver.disconnect(),null),this.unwatchDprChanges(),this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.onVisibility&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),this.onVisibility=null),this.onSeeking&&=(this.deps.video.removeEventListener(`seeking`,this.onSeeking),null),this.onTimeUpdate&&=(this.deps.video.removeEventListener(`timeupdate`,this.onTimeUpdate),null),this.onPause&&=(this.deps.video.removeEventListener(`pause`,this.onPause),null),this.onPlay&&=(this.deps.video.removeEventListener(`play`,this.onPlay),null),this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null),this.networkRetryTimer&&=(clearTimeout(this.networkRetryTimer),null),this.licenseRetryTimer&&=(clearTimeout(this.licenseRetryTimer),null),this.hls){try{this.hls.destroy()}catch(e){console.warn(`havik-player: hls.js destroy() threw during teardown`,e)}this.hls=null}}clearRecoveryReset(){this.recoveryResetTimer&&=(clearTimeout(this.recoveryResetTimer),null)}scheduleLicenseRetry(e){if(e.details!==c.default.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED&&e.details!==c.default.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED)return!1;let t=e.response?.code??0;if(!(t===0||t===408||t===429||t>=500)||this.licenseRecoveries>=$t)return!1;this.licenseRecoveries+=1;let n=Math.min(8e3,500*2**(this.licenseRecoveries-1));return this.licenseRetryTimer=setTimeout(()=>{this.licenseRetryTimer=null,this.rebuildInstance(`license retry`)},n),!0}rebuildInstance(e){if(this.hls){try{this.hls.destroy()}catch(t){console.warn(`havik-player: hls.js destroy() threw during ${e}`,t)}this.hls=null,this.startHls(),this.armFrameDropGrace()}}onError(e){if(e.type===c.default.ErrorTypes.NETWORK_ERROR&&String(e.details??``).startsWith(`frag`)&&(this.requestErrors+=1),!e.fatal)return;let t=this.hls;if(t){if(this.clearRecoveryReset(),e.type===c.default.ErrorTypes.KEY_SYSTEM_ERROR){if(this.scheduleLicenseRetry(e))return;this.deps.emit({type:`error`,error:this.toError(e,`DRM`),fatal:!0,detail:e.details});return}if(e.type===c.default.ErrorTypes.NETWORK_ERROR){if(this.networkRecoveries<Qt){this.networkRecoveries+=1;let e=Math.min(8e3,1e3*2**(this.networkRecoveries-1));this.networkRetryTimer=setTimeout(()=>{this.networkRetryTimer=null,this.hls&&this.hls.startLoad()},e);return}this.deps.emit({type:`error`,error:this.toError(e,`NETWORK`),fatal:!0,detail:e.details});return}if(e.type===c.default.ErrorTypes.MEDIA_ERROR){if(this.mediaRecoveries<Zt){this.mediaRecoveries+=1,t.recoverMediaError();return}this.deps.emit({type:`error`,error:this.toError(e),fatal:!0,detail:e.details});return}this.deps.emit({type:`error`,error:this.toError(e),fatal:!0,detail:e.details})}}toError(e,t=`PLAYBACK`){let n=e.response?.code??0,r=e.details??e.type,i=e.reason??e.error?.message??``,a=t===`DRM`&&n===403&&e.details===c.default.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED?d(Pt(e.networkDetails)):void 0;return new l(t===`DRM`?f(n,a):n===401?`UNAUTHORIZED`:n===403?`FORBIDDEN`:`INTERNAL`,n,`${t} error: ${r}${i?` (${i})`:``}`,a?{serverCode:a}:void 0)}},qn=15e3,Jn=6e5,Yn=3e5,Xn=100,Z=1,Zn=1e3,Qn=3e4,$n=1e3,er={inline:`PRESENTATION_INLINE`,fullscreen:`PRESENTATION_FULLSCREEN`,pip:`PRESENTATION_PIP`},tr={widevine:`KEY_SYSTEM_WIDEVINE`,fairplay:`KEY_SYSTEM_FAIRPLAY`,none:`KEY_SYSTEM_NONE`},nr=new Set([`INVALID_URN`,`NOT_FOUND`,`GEO_DENIED`,`GONE`,`TOO_EARLY`,`UNAVAILABLE`,`UNAUTHORIZED`,`FORBIDDEN`,`RATE_LIMITED`,`TIMEOUT`]),Q={idle:`PLAYER_STATE_IDLE`,waiting:`PLAYER_STATE_WAITING`,loading:`PLAYER_STATE_LOADING`,playing:`PLAYER_STATE_PLAYING`,buffering:`PLAYER_STATE_BUFFERING`,paused:`PLAYER_STATE_PAUSED`,ended:`PLAYER_STATE_ENDED`,error:`PLAYER_STATE_ERROR`};function rr(e){try{let t=new URL(e),[n,...r]=t.hostname.split(`.`);return!n||r.length===0||n!==`feed`&&!n.startsWith(`feed-`)?void 0:(t.hostname=[n.replace(/^feed/,`beacons`),...r].join(`.`),t.pathname=``,t.search=``,t.origin)}catch{return}}var ir=(e,t)=>e.replace(/\/$/,``).toLowerCase()===t.replace(/\/$/,``).toLowerCase(),ar=new Set,or=new Set,sr=new Set,cr=e=>`this page's Content-Security-Policy blocks QoE beacons. Add ${e} to connect-src; until then none are sent.`;function lr(e){if(e.disposition!==`enforce`||e.effectiveDirective!==`connect-src`)return;let t;try{let n=new URL(e.blockedURI);t=n.origin+n.pathname}catch{return}if(ar.has(t)&&!or.has(t)){or.add(t),b(cr(new URL(t).origin));for(let e of sr)e.noteCspBlocked()}}function ur(e,t){return b(t,e),{disabledReason:t}}function dr(e,t,n){if(n)return t&&!ir(t,n)&&b(`analytics.endpoint "${t}" ignored; the server named "${n}".`),{endpoint:n};if(t)return{endpoint:t};if(t!==void 0)return ur(`empty-endpoint`,`analytics is disabled: no QoE beacons will be sent. analytics.endpoint was supplied but empty. Pass a real beacons origin, analytics: { endpoint: 'https://beacons[-dev].<domain>' }, or omit the option to derive it from baseUrl (or analytics: false to opt out).`);let r=rr(e);if(r)return{endpoint:r};let i;try{i=new URL(e).hostname||e}catch{i=e}return ur(i,`analytics is disabled: no QoE beacons will be sent. The beacons endpoint cannot be derived from the baseUrl host "${i}" — the convention is feed[-dev].<domain> → beacons[-dev].<domain>. Pass an explicit endpoint, analytics: { endpoint: 'https://beacons[-dev].<domain>' }, to createPlayer (or analytics: false to opt out deliberately).`)}var fr=class{opts;url;cspKey;now;seq=0;pending=[];timer=null;endedFlag=!1;lastBytes=0;lastPlaylistBytes=0;lastDropped=0;lastSwitches=0;playingSinceMs=null;hiddenSinceMs=null;playingTotalMs=0;hiddenTotalMs=0;lastHbPlayingMs=0;lastHbHiddenMs=0;lastHbRebufferMs=0;lastHbRebufferCount=0;lastHbActiveMs=0;rebufferCount=0;rebufferTotalMs=0;bufferingSinceMs=null;isBuffering=!1;errorCount=0;seekCount=0;pauseCount=0;isPlaying=!1;isHidden=!1;isMuted=!1;activeSinceMs=null;activeTotalMs=0;mutedSinceMs=null;mutedTotalMs=0;lastHbMutedMs=0;volumeChanges=0;muteChanges=0;presentation=`inline`;presentationSinceMs;fullscreenTotalMs=0;pipTotalMs=0;waitingSinceMs=null;waitingTotalMs=0;firstAudioMs=0;timeToFirstStallMs=0;lastStallMs=0;lastErrorMs=0;lastSeekMs=-1;stallIsSeekInduced=!1;lastErrorStage=null;sawFirstBytes=!1;mediaInfoSignature=``;lastUpshifts=0;lastDownshifts=0;lastDecoded=0;lastRequestCount=0;lastRequestErrors=0;pendingStart=null;firstFlushTimer=null;idleTimer=null;lastTickMs=0;bornMs;startupAnchorMs;startupTimeMs=0;manifestLoadMs=0;firstFragLoadMs=0;firstPlaylistMs=0;drmSetupMs=0;onPagehide=()=>this.end(`END_REASON_PAGEHIDE`);cspBlockedNoted=!1;onFreeze=()=>{this.endedFlag||this.flush(!0)};onResume=()=>this.checkSuspension(this.now());onVisibility=()=>{typeof document>`u`||(document.visibilityState===`hidden`?(this.hiddenSinceMs===null&&(this.hiddenSinceMs=this.now()),this.isHidden=!0):(this.hiddenSinceMs!==null&&(this.hiddenTotalMs+=this.now()-this.hiddenSinceMs,this.hiddenSinceMs=null),this.isHidden=!1),this.syncActive(),this.syncBuffering())};constructor(e){this.opts={...e,heartbeatMs:e.heartbeatMs??qn,idleMs:e.idleMs??Jn},this.url=`${e.endpoint.replace(/\/$/,``)}/v1/beacons`;try{let e=new URL(this.url);this.cspKey=e.origin+e.pathname}catch{this.cspKey=void 0}this.now=e.now??(()=>Date.now()),this.bornMs=this.now(),this.presentationSinceMs=this.bornMs,this.startupAnchorMs=this.bornMs}start(){if(this.endedFlag)return;let e={player:this.opts.player,sdkVersion:this.opts.sdkVersion,...this.opts.environment};this.pendingStart=e,this.enqueue({sessionStart:e}),this.firstFlushTimer=setTimeout(()=>this.flush(),Zn),this.lastTickMs=this.now(),this.timer=setInterval(()=>this.heartbeat(),this.opts.heartbeatMs),typeof window<`u`&&window.addEventListener(`pagehide`,this.onPagehide),typeof document<`u`&&(document.addEventListener(`visibilitychange`,this.onVisibility),document.addEventListener(`freeze`,this.onFreeze),document.addEventListener(`resume`,this.onResume),this.cspKey&&ar.add(this.cspKey),document.addEventListener(`securitypolicyviolation`,lr),sr.add(this),this.noteCspBlocked(),this.onVisibility())}checkSuspension(e){if(this.endedFlag||!this.opts.idleMs)return!1;let t=Math.max(this.opts.idleMs,Yn);return this.lastTickMs>0&&e-this.lastTickMs>=t?(this.endIdle(this.lastTickMs),!0):(this.lastTickMs=e,!1)}syncIdle(e){e===`paused`&&this.opts.idleMs?this.idleTimer===null&&(this.idleTimer=setTimeout(()=>{this.idleTimer=null,this.endIdle()},this.opts.idleMs)):this.idleTimer!==null&&(clearTimeout(this.idleTimer),this.idleTimer=null)}endIdle(e){this.endedFlag||(this.end(`END_REASON_IDLE`,e),this.opts.onIdle?.())}noteStateChange(e,t,n,r){if(this.endedFlag||e===t)return;let i=this.now();if(t===`playing`?(this.playingSinceMs===null&&(this.playingSinceMs=i),this.startupTimeMs===0&&(this.startupTimeMs=Math.max(Z,i-this.startupAnchorMs)),this.firstAudioMs===0&&!this.isMuted&&(this.firstAudioMs=Math.max(Z,i-this.startupAnchorMs)),this.isMuted&&this.mutedSinceMs===null&&(this.mutedSinceMs=i)):this.playingSinceMs!==null&&(this.playingTotalMs+=i-this.playingSinceMs,this.playingSinceMs=null,this.mutedSinceMs!==null&&(this.mutedTotalMs+=i-this.mutedSinceMs,this.mutedSinceMs=null)),this.isPlaying=t===`playing`,this.syncActive(),t===`waiting`?this.waitingSinceMs=i:this.waitingSinceMs!==null&&(this.waitingTotalMs+=i-this.waitingSinceMs,this.waitingSinceMs=null),t===`buffering`&&e===`playing`){this.stallIsSeekInduced=this.seekInduced(i);let e=!this.isHidden&&!this.stallIsSeekInduced;e&&(this.rebufferCount+=1),this.isBuffering=!0,this.lastStallMs=i,e&&this.timeToFirstStallMs===0&&(this.timeToFirstStallMs=Math.max(Z,Math.round(this.playingTotalMs)))}else e===`buffering`&&(this.isBuffering=!1,this.stallIsSeekInduced=!1);this.syncBuffering(),t===`paused`&&(this.pauseCount+=1),this.syncIdle(t);let a={fromState:Q[e]??`PLAYER_STATE_UNSPECIFIED`,toState:Q[t]??`PLAYER_STATE_UNSPECIFIED`,presentation:er[this.presentation]},o=this.causeOf(e,t,i);o&&(a.cause=o),n>0&&(a.positionMs=Math.round(n)),r&&(a.renditionHeight=r),this.enqueue({stateChange:a})}seekInduced(e){return this.lastSeekMs>=0&&e-this.lastSeekMs<$n}causeOf(e,t,n){if(t===`error`)return`TRANSITION_CAUSE_ERROR`;if(t===`buffering`)return this.seekInduced(n)?`TRANSITION_CAUSE_SEEK`:`TRANSITION_CAUSE_NETWORK_STALL`;if(t===`paused`||t===`playing`&&e===`paused`)return`TRANSITION_CAUSE_USER`}syncActive(e=this.now()){let t=this.isPlaying&&!this.isHidden&&!this.isMuted;t&&this.activeSinceMs===null?this.activeSinceMs=e:!t&&this.activeSinceMs!==null&&(this.activeTotalMs+=e-this.activeSinceMs,this.activeSinceMs=null)}syncBuffering(){let e=this.isBuffering&&!this.isHidden&&!this.stallIsSeekInduced;e&&this.bufferingSinceMs===null?this.bufferingSinceMs=this.now():!e&&this.bufferingSinceMs!==null&&(this.rebufferTotalMs+=this.now()-this.bufferingSinceMs,this.bufferingSinceMs=null)}closePresentation(e=this.now()){let t=e-this.presentationSinceMs;this.presentation===`fullscreen`?this.fullscreenTotalMs+=t:this.presentation===`pip`&&(this.pipTotalMs+=t),this.presentationSinceMs=e}noteAutoplay(e){this.pendingStart&&(this.pendingStart.autoplay=e)}noteEnvironment(e){this.pendingStart&&Object.assign(this.pendingStart,e)}seedVolume(e,t){this.endedFlag||(this.isMuted=e||t===0,this.isMuted&&this.isPlaying&&this.mutedSinceMs===null&&(this.mutedSinceMs=this.now()),this.syncActive())}noteVolume(e,t){if(this.endedFlag)return;let n=e||t===0;if(n===this.isMuted){this.volumeChanges+=1;return}this.muteChanges+=1;let r=this.now();n?this.isPlaying&&this.mutedSinceMs===null&&(this.mutedSinceMs=r):(this.mutedSinceMs!==null&&(this.mutedTotalMs+=r-this.mutedSinceMs,this.mutedSinceMs=null),this.firstAudioMs===0&&this.isPlaying&&(this.firstAudioMs=Math.max(Z,r-this.startupAnchorMs))),this.isMuted=n,this.syncActive()}notePresentation(e){this.endedFlag||e===this.presentation||(this.closePresentation(),this.presentation=e)}notePlayIntent(){this.endedFlag||this.startupTimeMs>0||(this.startupAnchorMs=this.now(),this.manifestLoadMs>0&&(this.manifestLoadMs=Z),this.firstPlaylistMs>0&&(this.firstPlaylistMs=Z),this.firstFragLoadMs>0&&(this.firstFragLoadMs=Z),this.drmSetupMs>0&&(this.drmSetupMs=Z))}noteReady(){this.manifestLoadMs===0&&(this.manifestLoadMs=Math.max(Z,this.now()-this.startupAnchorMs))}noteFirstPlaylist(){this.firstPlaylistMs===0&&(this.firstPlaylistMs=Math.max(Z,this.now()-this.startupAnchorMs))}noteDrmReady(){this.drmSetupMs===0&&(this.drmSetupMs=Math.max(Z,this.now()-this.startupAnchorMs))}noteFirstBytes(){this.sawFirstBytes=!0,this.firstFragLoadMs===0&&(this.firstFragLoadMs=Math.max(Z,this.now()-this.startupAnchorMs))}noteSeek(){this.endedFlag||(this.seekCount+=1,this.lastSeekMs=this.now())}noteError(e,t,n,r,i,a){if(this.endedFlag)return;this.errorCount+=1,this.lastErrorMs=this.now();let o={code:e};t&&(o.detail=t),n&&(o.fatal=!0),r>0&&(o.httpStatus=r),i>0&&(o.positionMs=Math.round(i));let s=this.stageOf(e,t,a);o.stage=s,this.lastErrorStage=s;let c=this.safeSample()?.cdnHost;c&&(o.cdnHost=c),this.enqueue({error:o}),this.flush()}stageOf(e,t,n){let r=n??``;if(r!==``)return/^fragLoad/i.test(r)?this.sawFirstBytes?`ERROR_STAGE_SEGMENT`:`ERROR_STAGE_FIRST_SEGMENT`:/^(manifest|level|audioTrack|subtitleTrack)/i.test(r)?`ERROR_STAGE_MANIFEST`:/key|licen[cs]e/i.test(r)?`ERROR_STAGE_DRM`:/parsing|append|buffer|remux|decrypt|media/i.test(r)?`ERROR_STAGE_DECODE`:`ERROR_STAGE_OTHER`;if(e===`DRM_CLIENT`||e===`DRM_DEVICE_REVOKED`)return`ERROR_STAGE_DRM`;if(nr.has(e))return`ERROR_STAGE_RESOLVE`;let i=t??``;return/frag|segment/i.test(i)?this.sawFirstBytes?`ERROR_STAGE_SEGMENT`:`ERROR_STAGE_FIRST_SEGMENT`:/manifest|level|playlist/i.test(i)?`ERROR_STAGE_MANIFEST`:/key|licen[cs]e/i.test(i)?`ERROR_STAGE_DRM`:/buffer|decode|media|append/i.test(i)?`ERROR_STAGE_DECODE`:`ERROR_STAGE_OTHER`}noteEnded(){this.end(`END_REASON_ENDED`)}noteDestroyed(){this.end(`END_REASON_STOPPED`)}noteFatal(){this.end(`END_REASON_FATAL_ERROR`)}heartbeat(){if(this.endedFlag)return;let e=this.now();if(this.checkSuspension(e)||this.cspBlocked())return;let t=this.opts.sample(),n=this.playingTotalMs;this.playingSinceMs!==null&&(n+=e-this.playingSinceMs);let r=this.hiddenTotalMs;this.hiddenSinceMs!==null&&(r+=e-this.hiddenSinceMs);let i=this.rebufferTotalMs;this.bufferingSinceMs!==null&&(i+=e-this.bufferingSinceMs);let a=this.activeTotalMs;this.activeSinceMs!==null&&(a+=e-this.activeSinceMs);let o={},s=t.bytesLoaded??0;s>this.lastBytes&&(o.bytesDownloadedDelta=s-this.lastBytes),this.lastBytes=s;let c=t.playlistBytesLoaded??0;c>this.lastPlaylistBytes&&(o.playlistBytesDelta=c-this.lastPlaylistBytes),this.lastPlaylistBytes=c;let l=t.droppedFrames??0;l>this.lastDropped&&(o.droppedFramesDelta=l-this.lastDropped),this.lastDropped=l;let u=t.renditionSwitches??0;u>this.lastSwitches&&(o.renditionSwitchesDelta=u-this.lastSwitches),this.lastSwitches=u,n>this.lastHbPlayingMs&&(o.playingMsDelta=Math.round(n-this.lastHbPlayingMs)),this.lastHbPlayingMs=n,r>this.lastHbHiddenMs&&(o.hiddenMsDelta=Math.round(r-this.lastHbHiddenMs)),this.lastHbHiddenMs=r,i>this.lastHbRebufferMs&&(o.rebufferMsDelta=Math.round(i-this.lastHbRebufferMs)),this.lastHbRebufferMs=i,this.rebufferCount>this.lastHbRebufferCount&&(o.rebufferCountDelta=this.rebufferCount-this.lastHbRebufferCount),this.lastHbRebufferCount=this.rebufferCount,a>this.lastHbActiveMs&&(o.activeMsDelta=Math.round(a-this.lastHbActiveMs)),this.lastHbActiveMs=a,typeof t.latencySeconds==`number`&&(o.latencyMs=Math.round(t.latencySeconds*1e3)),typeof t.targetLatencySeconds==`number`&&(o.targetLatencyMs=Math.round(t.targetLatencySeconds*1e3)),typeof t.bandwidthKbps==`number`&&(o.bandwidthEstKbps=t.bandwidthKbps),typeof t.levelHeight==`number`&&(o.renditionHeight=t.levelHeight),typeof t.renditionBitrateKbps==`number`&&(o.renditionBitrateKbps=t.renditionBitrateKbps),t.atLiveEdge===!0&&(o.atLiveEdge=!0),typeof t.bufferedMs==`number`&&t.bufferedMs>0&&(o.bufferedMs=Math.round(t.bufferedMs)),o.playerState=Q[t.state]??`PLAYER_STATE_UNSPECIFIED`;let d=this.mutedTotalMs;this.mutedSinceMs!==null&&(d+=e-this.mutedSinceMs),d>this.lastHbMutedMs&&(o.mutedMsDelta=Math.round(d-this.lastHbMutedMs)),this.lastHbMutedMs=d;let f=t.upshifts??0;f>this.lastUpshifts&&(o.upshiftsDelta=f-this.lastUpshifts),this.lastUpshifts=f;let p=t.downshifts??0;p>this.lastDownshifts&&(o.downshiftsDelta=p-this.lastDownshifts),this.lastDownshifts=p;let m=t.decodedFrames??0;m>this.lastDecoded&&(o.decodedFramesDelta=m-this.lastDecoded),this.lastDecoded=m;let h=t.requestErrors??0;h>this.lastRequestErrors&&(o.requestErrorsDelta=h-this.lastRequestErrors),this.lastRequestErrors=h;let g=t.requestCount??0,_=g-this.lastRequestCount;if(this.lastRequestCount=g,_>0){o.requestCountDelta=_;let e=t.requestTimesMs??[],n=e.slice(Math.max(0,e.length-_)).sort((e,t)=>e-t);n.length>0&&(o.requestTimeP50Ms=Y(n,50),o.requestTimeP95Ms=Y(n,95))}typeof t.latencySeconds==`number`&&typeof t.targetLatencySeconds==`number`&&(o.driftMs=Math.round((t.latencySeconds-t.targetLatencySeconds)*1e3)),typeof t.playbackRate==`number`&&t.playbackRate>0&&(o.playbackRate=t.playbackRate),t.qualityPinned===!0&&(o.qualityPinned=!0),t.cdnHost&&(o.cdnHost=t.cdnHost),this.maybeEmitMediaInfo(t),this.enqueue({heartbeat:o}),this.flush(),s>0&&this.noteFirstBytes()}maybeEmitMediaInfo(e){if(!(e.videoCodec??e.keySystem??e.ladderHeights))return;let t={};e.videoCodec&&(t.videoCodec=e.videoCodec),e.audioCodec&&(t.audioCodec=e.audioCodec),e.keySystem&&(t.keySystem=tr[e.keySystem]),e.drmSecurityLevel&&(t.drmSecurityLevel=e.drmSecurityLevel),e.ladderHeights?.length&&(t.ladderHeights=e.ladderHeights),e.ladderTopBitrateKbps&&(t.ladderTopBitrateKbps=e.ladderTopBitrateKbps),e.lowLatency&&(t.lowLatency=!0);let n=JSON.stringify(t);n!==this.mediaInfoSignature&&(this.mediaInfoSignature=n,this.enqueue({mediaInfo:t}))}end(e,t){if(this.endedFlag)return;this.endedFlag=!0,sr.delete(this);let n=t??this.now();this.playingSinceMs!==null&&(this.playingTotalMs+=n-this.playingSinceMs,this.playingSinceMs=null),this.hiddenSinceMs!==null&&(this.hiddenTotalMs+=n-this.hiddenSinceMs,this.hiddenSinceMs=null),this.bufferingSinceMs!==null&&(this.rebufferTotalMs+=n-this.bufferingSinceMs,this.bufferingSinceMs=null),this.mutedSinceMs!==null&&(this.mutedTotalMs+=n-this.mutedSinceMs,this.mutedSinceMs=null),this.waitingSinceMs!==null&&(this.waitingTotalMs+=n-this.waitingSinceMs,this.waitingSinceMs=null),this.isPlaying=!1,this.syncActive(n),this.closePresentation(n),this.firstFlushTimer&&=(clearTimeout(this.firstFlushTimer),null),this.timer&&=(clearInterval(this.timer),null),this.idleTimer&&=(clearTimeout(this.idleTimer),null),typeof window<`u`&&window.removeEventListener(`pagehide`,this.onPagehide),typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),document.removeEventListener(`freeze`,this.onFreeze),document.removeEventListener(`resume`,this.onResume));let r=this.safeSample();r&&this.maybeEmitMediaInfo(r);let i={reason:e},a=r?.bytesLoaded??this.lastBytes;a>0&&(i.bytesDownloadedTotal=a),this.playingTotalMs>0&&(i.watchTimeMs=Math.round(this.playingTotalMs)),this.rebufferCount>0&&(i.rebufferCount=this.rebufferCount),this.rebufferTotalMs>0&&(i.rebufferTimeMs=Math.round(this.rebufferTotalMs)),this.startupTimeMs>0&&(i.startupTimeMs=Math.round(this.startupTimeMs)),this.manifestLoadMs>0&&(i.manifestLoadMs=Math.round(this.manifestLoadMs)),this.firstPlaylistMs>0&&(i.firstPlaylistMs=Math.round(this.firstPlaylistMs)),this.firstFragLoadMs>0&&(i.firstFragLoadMs=Math.round(this.firstFragLoadMs)),this.drmSetupMs>0&&(i.drmSetupMs=Math.round(this.drmSetupMs));let o=r?.licenseTimeMs??0;o>0&&(i.licenseTimeMs=Math.round(o));let s=r?.droppedFrames??this.lastDropped;s>0&&(i.droppedFramesTotal=s),this.errorCount>0&&(i.errorCount=this.errorCount),this.hiddenTotalMs>0&&(i.hiddenTimeMs=Math.round(this.hiddenTotalMs)),this.seekCount>0&&(i.seekCount=this.seekCount),this.pauseCount>0&&(i.pauseCount=this.pauseCount),this.firstAudioMs>0&&(i.firstAudioMs=Math.round(this.firstAudioMs)),this.waitingTotalMs>0&&(i.waitingForLiveMs=Math.round(this.waitingTotalMs)),this.timeToFirstStallMs>0&&(i.timeToFirstStallMs=Math.round(this.timeToFirstStallMs));let c=r?.positionMs??0;c>0&&(i.exitPositionMs=Math.round(c)),this.activeTotalMs>0&&(i.activeWatchTimeMs=Math.round(this.activeTotalMs)),this.mutedTotalMs>0&&(i.mutedTimeMs=Math.round(this.mutedTotalMs));let l=e!==`END_REASON_ENDED`;l&&this.lastStallMs>0&&n-this.lastStallMs<=Qn&&(i.abandonAfterStallMs=Math.max(Z,Math.round(n-this.lastStallMs))),l&&this.lastErrorMs>0&&n-this.lastErrorMs<=Qn&&(i.abandonAfterErrorMs=Math.max(Z,Math.round(n-this.lastErrorMs))),this.fullscreenTotalMs>0&&(i.fullscreenTimeMs=Math.round(this.fullscreenTotalMs)),this.pipTotalMs>0&&(i.pipTimeMs=Math.round(this.pipTotalMs)),this.volumeChanges>0&&(i.volumeChanges=this.volumeChanges),this.muteChanges>0&&(i.muteChanges=this.muteChanges);let u=r?.decodedFrames??this.lastDecoded;u>0&&(i.decodedFramesTotal=u),e===`END_REASON_STOPPED`&&this.startupTimeMs===0&&this.lastErrorStage===null&&(e=`END_REASON_ABORTED`,i.reason=e),this.startupTimeMs===0&&e!==`END_REASON_ABORTED`&&(i.failedStage=this.lastErrorStage??(this.manifestLoadMs===0?`ERROR_STAGE_MANIFEST`:this.firstFragLoadMs===0?`ERROR_STAGE_FIRST_SEGMENT`:`ERROR_STAGE_OTHER`)),this.pending.push(this.wrap({sessionEnd:i})),this.flush(e===`END_REASON_PAGEHIDE`)}safeSample(){try{return this.opts.sample()}catch{return null}}wrap(e){return this.seq+=1,{sid:this.opts.sid,clientTime:new Date(this.now()).toISOString(),seq:this.seq,...e}}noteCspBlocked(){this.cspBlockedNoted||this.endedFlag||!this.cspBlocked()||(this.cspBlockedNoted=!0,this.opts.onBlocked?.(cr(new URL(this.url).origin)))}cspBlocked(){return!!this.cspKey&&or.has(this.cspKey)}enqueue(e){if(!this.cspBlocked())for(this.pending.push(this.wrap(e));this.pending.length>Xn;){let e=this.pending.findIndex(e=>e.heartbeat||e.stateChange);this.pending.splice(e>=0?e:0,1)}}flush(e=!1){if(this.firstFlushTimer&&=(clearTimeout(this.firstFlushTimer),null),this.pendingStart=null,this.pending.length===0)return;if(this.cspBlocked()){this.pending=[];return}let t=JSON.stringify({beacons:this.pending});if(this.pending=[],e){let e=this.opts.sendBeacon??(typeof navigator<`u`&&navigator.sendBeacon?navigator.sendBeacon.bind(navigator):void 0);if(e&&e(this.url,t))return}let n=this.opts.fetchFn??(typeof fetch<`u`?fetch:void 0);n&&n(this.url,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})}};function pr(){if(typeof window>`u`)return{integration:`INTEGRATION_KIND_SDK`};let e;try{e=window.top!==window.self}catch{e=!0}let t=window.location?.origin;if(!e)return{host:t&&t!==`null`?t:void 0,integration:`INTEGRATION_KIND_SDK`};let n;try{let e=window.location.ancestorOrigins;e&&e.length>0&&(n=e[e.length-1]??void 0),!n&&typeof document<`u`&&document.referrer&&(n=new URL(document.referrer).origin)}catch{n=void 0}return n===`null`&&(n=void 0),{host:n,integration:`INTEGRATION_KIND_IFRAME`}}function mr(){if(typeof navigator>`u`)return`DEVICE_CLASS_OTHER`;let e=navigator.userAgentData,t=e?.platform??``;if(/tv|tizen|webos/i.test(t))return`DEVICE_CLASS_TV`;let n=typeof screen<`u`?Math.min(screen.width,screen.height):0;return e?.mobile??(typeof navigator.maxTouchPoints==`number`&&navigator.maxTouchPoints>1&&n>0&&n<900)?n>=600?`DEVICE_CLASS_TABLET`:`DEVICE_CLASS_PHONE`:e||n>=900||/mac|win|linux|chrome os/i.test(t)?`DEVICE_CLASS_DESKTOP`:`DEVICE_CLASS_OTHER`}function hr(){let e=typeof navigator<`u`?navigator.connection:void 0;if(!e)return{connectionType:`CONNECTION_TYPE_UNKNOWN`};let t={wifi:`CONNECTION_TYPE_WIFI`,cellular:`CONNECTION_TYPE_CELLULAR`,ethernet:`CONNECTION_TYPE_ETHERNET`},n={"slow-2g":`RADIO_ACCESS_ESTIMATED_SLOW_2G`,"2g":`RADIO_ACCESS_ESTIMATED_2G`,"3g":`RADIO_ACCESS_ESTIMATED_3G`,"4g":`RADIO_ACCESS_ESTIMATED_4G`},r=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0,i={connectionType:e.type?r(t,e.type)??`CONNECTION_TYPE_OTHER`:`CONNECTION_TYPE_UNKNOWN`};if(e.effectiveType){let t=r(n,e.effectiveType);t&&(i.radioAccess=t)}return typeof e.downlink==`number`&&e.downlink>0&&(i.downlinkKbps=Math.round(e.downlink*1e3)),typeof e.rtt==`number`&&e.rtt>0&&(i.rttMs=Math.round(e.rtt)),e.saveData&&(i.saveData=!0),i}function gr(e){let t=pr(),n={deviceClass:mr(),integration:t.integration,...hr()};t.host&&(n.host=t.host),typeof screen<`u`&&screen.width>0&&(n.screenWidth=screen.width,n.screenHeight=screen.height),typeof window<`u`&&window.devicePixelRatio>0&&(n.devicePixelRatio=Math.round(window.devicePixelRatio*100)/100);let r=e.getBoundingClientRect?.();return r&&r.width>0&&(n.viewportWidth=Math.round(r.width),n.viewportHeight=Math.round(r.height)),n}async function _r(){let e=typeof navigator<`u`?navigator.userAgentData:void 0;if(!e?.getHighEntropyValues)return{};try{let t=await e.getHighEntropyValues([`model`,`platformVersion`]),n={};return t.model&&(n.deviceModel=t.model),t.platformVersion&&(n.osVersion=t.platformVersion),n}catch{return{}}}var vr=`2.24.0`,yr={accent:`#E1B600`,accentText:`#1B1C23`,background:`#0e0f13`,surface:`#1B1C23`,surfaceMuted:`#2a2c36`,text:`#ffffff`,textMuted:`#9aa0ad`,border:`rgba(255, 255, 255, 0.1)`,radius:`8px`,fontFamily:`ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`},br={accent:`--havik-accent`,accentText:`--havik-accent-text`,background:`--havik-bg`,surface:`--havik-surface`,surfaceMuted:`--havik-surface-muted`,text:`--havik-text`,textMuted:`--havik-text-muted`,border:`--havik-border`,radius:`--havik-radius`,fontFamily:`--havik-font`};function xr(e,t){let n={...yr,...t};for(let t of Object.keys(br))e.style.setProperty(br[t],n[t]);n.logoUrl&&e.style.setProperty(`--havik-logo`,`url("${n.logoUrl}")`)}var Sr=`havik-player-styles`,Cr=`
3
+ `));t&&typeof t.state==`string`&&e.onState(t)}catch{}},u=/\r\n\r\n|\n\n|\r\r/,d=async(e,t,n)=>{let r=e.getReader(),i=new TextDecoder,o=``,c=!1,d,f=()=>{a&&(clearTimeout(d),d=setTimeout(()=>{n(),r.cancel().catch(()=>{})},a))};try{for(f();;){let{value:e,done:n}=await r.read();if(n)return;e&&e.length>0&&(f(),c||(c=!0,t())),o+=i.decode(e,{stream:!0});let a;for(;(a=u.exec(o))!==null;)l(o.slice(0,a.index)),o=o.slice(a.index+a[0].length);if(s)return}}finally{clearTimeout(d),await r.cancel().catch(()=>{})}};return(async()=>{let i=t;for(;!s;){let l=new AbortController,u=()=>l.abort();o.signal.addEventListener(`abort`,u,{once:!0});let f=null,p=!1,m=!1,g,_=()=>{f=`no data for ${a}ms`,l.abort()};try{let n=await h(e.credential);if(s)return;let r=v(e.eventsBaseUrl,`/v1/events/${encodeURIComponent(e.matchUrn)}`);a&&(g=setTimeout(()=>{f=`no response headers within ${a}ms`,l.abort()},a));let o=await fetch(r,{method:`GET`,headers:{"x-api-key":n.apiKey,accept:`text/event-stream`},signal:l.signal,cache:`no-store`,credentials:`omit`,mode:`cors`});if(clearTimeout(g),s)return;if(!o.ok||!o.body){let t=new k(o.status);p=t.terminal,m=o.status===404,e.onError?.(t)}else await d(o.body,()=>{i=t},_)}catch(t){if(s||o.signal.aborted)return;f||e.onError?.(t)}finally{clearTimeout(g),o.signal.removeEventListener(`abort`,u),l.abort()}if(s||p)return;f&&e.onError?.(Error(`live-state subscribe idle: ${f} — reconnecting`)),await c(m?Math.max(i,r):i),i=Math.min(n,i*2)}})(),{close(){s||(s=!0,o.abort())}}}function j(e){try{let t=new URL(e);return t.hostname=`events.${t.hostname}`,t.pathname=``,t.search=``,t.origin}catch{return}}var M=`havik.player.deviceId`,N;function P(){if(N)return N;try{let e=globalThis.localStorage?.getItem(M);if(e)return N=e,e}catch{}let e=Me();N=e;try{globalThis.localStorage?.setItem(M,e)}catch{}return e}function je(){N=void 0;try{globalThis.localStorage?.removeItem(M)}catch{}}function Me(){let e=globalThis.crypto;if(e&&typeof e.randomUUID==`function`)return e.randomUUID();let t=new Uint8Array(16);if(e&&typeof e.getRandomValues==`function`)e.getRandomValues(t);else for(let e=0;e<16;e+=1)t[e]=Math.floor(Math.random()*256);t[6]=t[6]&15|64,t[8]=t[8]&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`));return n.slice(0,4).join(``)+`-`+n.slice(4,6).join(``)+`-`+n.slice(6,8).join(``)+`-`+n.slice(8,10).join(``)+`-`+n.slice(10,16).join(``)}function Ne(e,t,n={}){let r={"x-api-key":t.apiKey,"X-Match-Urn":e.matchUrn,"X-Device-Id":n.deviceId??P(),"Content-Type":`application/octet-stream`};return n.userId&&(r[`X-User-Id`]=n.userId),r}var F=`havik.player.bandwidth`,Pe=.8,Fe=2e7,Ie=3e5;function Le(){return globalThis.navigator?.connection}function Re(){let e=Le()?.type;return typeof e==`string`&&e!==``&&e!==`unknown`?e:`any`}function ze(){let e=Le()?.downlink;return typeof e==`number`&&Number.isFinite(e)&&e>0?e*1e6:void 0}function Be(){try{let e=globalThis.localStorage?.getItem(F);if(!e)return{};let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function Ve(e=Date.now()){let t=Be()[Re()];if(!t||typeof t.bps!=`number`||typeof t.at!=`number`||!Number.isFinite(t.bps)||t.bps<=0)return;let n=e-t.at;if(n<0||n>2592e5)return;let r=ze(),i=r===void 0?t.bps:Math.min(t.bps,r);return Math.round(Math.min(Fe,Math.max(Ie,i*Pe)))}function He(e,t=Date.now()){if(!Number.isFinite(e)||e<=0)return;let n=Be();n[Re()]={bps:Math.round(e),at:t};try{globalThis.localStorage?.setItem(F,JSON.stringify(n))}catch{}}function Ue(){try{globalThis.localStorage?.removeItem(F)}catch{}}var We=new WeakMap;function Ge(e,t){let n=We.get(e);n||(n=new Map,We.set(e,n));let r=n.get(t.keySystem);if(r)return r;let i=t.createMediaKeys().catch(e=>{throw n.get(t.keySystem)===i&&n.delete(t.keySystem),e});return n.set(t.keySystem,i),i}function I(){return typeof navigator<`u`&&typeof navigator.requestMediaKeySystemAccess==`function`}var Ke=[`SW_SECURE_DECODE`,`SW_SECURE_CRYPTO`];function qe(e){return e.startsWith(`com.widevine`)}function Je(e,t){if(!qe(e))return t;let n=(e,t)=>{let n=e.videoCapabilities;return!n?.length||!n.some(e=>e.robustness)?!1:n.every(e=>{let n=Ke.indexOf(e.robustness);return n===-1||Ke.indexOf(t)>n})},r=Ke.flatMap(e=>t.filter(t=>n(t,e)).map(t=>({...t,videoCapabilities:t.videoCapabilities?.map(t=>({...t,robustness:e}))})));return[...t,...r]}function Ye(e){return(t,n)=>I()?navigator.requestMediaKeySystemAccess(t,Je(t,n)).then(t=>({keySystem:t.keySystem,getConfiguration:()=>t.getConfiguration(),createMediaKeys:()=>Ge(e,t)})):Promise.reject(Error(`navigator.requestMediaKeySystemAccess is unavailable — EME needs a secure context (https, or localhost)`))}var L={video:`SW_SECURE_DECODE`,audio:`SW_SECURE_CRYPTO`,scheme:`cbcs`};function Xe(e){if(!I())return;let t=(e,t)=>({contentType:e,robustness:t,encryptionScheme:L.scheme});Ye(e)(`com.widevine.alpha`,[{initDataTypes:[`cenc`],distinctiveIdentifier:`optional`,persistentState:`optional`,sessionTypes:[`temporary`],audioCapabilities:[t(`audio/mp4; codecs="mp4a.40.2"`,L.audio)],videoCapabilities:[t(`video/mp4; codecs="avc1.42e01e"`,L.video)]}]).then(e=>e.createMediaKeys()).catch(()=>{})}function R(e){let t=z(e);if(/^avc[13]/.test(t))return`avc`;if(/^(hvc1|hev1)/.test(t))return`hevc`;if(/^(dvh1|dvhe)/.test(t))return`dv`;if(t.startsWith(`av01`))return`av1`;if(/^vp0?9/.test(t))return`vp9`}function z(e){return(e??``).trim().toLowerCase()}var Ze={hevc:`hvc1.1.6.L93.90`,dv:`dvh1.05.06`,av1:`av01.0.05M.08`,vp9:`vp09.00.10.08`},Qe=new Map,B=new Map;function $e(e){let t=z(e),n=Qe.get(t);if(n)return n;let r={initDataTypes:[`cenc`],distinctiveIdentifier:`optional`,persistentState:`optional`,sessionTypes:[`temporary`],videoCapabilities:[{contentType:`video/mp4; codecs="${e.trim()}"`,robustness:L.video,encryptionScheme:L.scheme}]},i=(async()=>{try{return await navigator.requestMediaKeySystemAccess(`com.widevine.alpha`,Je(`com.widevine.alpha`,[r])),!0}catch{return!1}})().then(e=>(B.set(t,e),e));return Qe.set(t,i),i}function et(){if(I())for(let e of Object.values(Ze))$e(e)}function tt(e){let t=R(e);if(t)return t===`avc`?!0:B.get(z(e))??B.get(z(Ze[t]))}var nt=5e3,rt=`video/mp4; codecs="avc1.42E01E"`,it=`audio/mp4; codecs="mp4a.40.2"`,at={widevine:[`com.widevine.alpha`],fairplay:[`com.apple.fps`]};function ot(e){return e===`fairplay`?[{initDataTypes:[`sinf`,`skd`,`cenc`],videoCapabilities:[{contentType:rt,robustness:``,encryptionScheme:`cbcs`}],audioCapabilities:[{contentType:it,robustness:``,encryptionScheme:`cbcs`}]}]:Je(`com.widevine.alpha`,[{initDataTypes:[`cenc`],videoCapabilities:[{contentType:rt,robustness:L.video,encryptionScheme:L.scheme}],audioCapabilities:[{contentType:it,robustness:L.audio,encryptionScheme:L.scheme}]}])}function st(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`probe-timeout`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}async function ct(e={}){let t=e.systems??[`widevine`,`fairplay`],n=e.timeoutMs??nt,r={};if(typeof window<`u`&&window.isSecureContext===!1)return{verdict:`insecure-context`,detail:r};let i=typeof navigator<`u`?navigator.requestMediaKeySystemAccess?.bind(navigator):void 0;if(!i)return{verdict:`no-cdm`,detail:r};let a=!1,o=!1,s=Date.now()+n,c=()=>Math.max(1,s-Date.now());for(let e of t){let t=at[e];if(!t){r[e]=`unknown system`;continue}for(let n of t){if(Date.now()>=s){a=!0,r[e]??=`${n}: probe-timeout`;break}try{return await st((await st(i(n,ot(e)),c())).createMediaKeys(),c()),r[e]=`ok (${n})`,{verdict:`supported`,system:e,detail:r}}catch(t){let i=t;r[e]=`${n}: ${(i?.name&&i.name!==`Error`?i.name:i?.message)||String(t)}`,i?.message===`probe-timeout`&&(a=!0),i?.name===`SecurityError`&&(o=!0)}}}return o?{verdict:`blocked-by-policy`,detail:r}:a?{verdict:`probe-timeout`,detail:r}:{verdict:`no-cdm`,detail:r}}var lt=/^#EXT-X-(PART-INF|PART|PRELOAD-HINT)[:\s]/m;function ut(e){return lt.test(e)}var dt={integration:`https://feed-dev.oddin-video.gg`,production:`https://feed.oddin-video.gg`};function ft(e){let t=Object.prototype.hasOwnProperty.call(dt,e)?dt[e]:void 0;if(!t)throw new l(`INTERNAL`,0,`unknown env ${JSON.stringify(e)} — expected 'integration' or 'production'`);return t}function V(){return typeof navigator>`u`||navigator.onLine!==!1}function pt(){let e=new Set,t=t=>{for(let n of Array.from(e))n(t)},n=()=>t(!0),r=()=>t(!1),i=typeof window<`u`&&typeof window.addEventListener==`function`;return i&&(window.addEventListener(`online`,n),window.addEventListener(`offline`,r)),{isOnline:V,onChange(t){return e.add(t),()=>{e.delete(t)}},destroy(){e.clear(),i&&(window.removeEventListener(`online`,n),window.removeEventListener(`offline`,r))}}}var mt={droppedFrames:0};function ht(e){try{return new URL(e).host}catch{return``}}var gt=/\.(m3u8|ts|m4s|mp4|cmfv|cmfa)(\?|$)/i;function _t(e){if(typeof performance>`u`||typeof performance.getEntriesByType!=`function`)return``;let t=``,n=-1,r=performance.getEntriesByType(`resource`);for(let i of r)if(!(i.startTime<e)&&(i.initiatorType===`video`||i.initiatorType===`audio`||gt.test(i.name))&&i.startTime>=n){let e=ht(i.name);e&&(t=e,n=i.startTime)}return t}function H(e){let t=e.getVideoPlaybackQuality?.();return{dropped:t?.droppedVideoFrames??0,totalFrames:t?.totalVideoFrames??0}}var vt=class{video;baseFrames=0;baseDropped=0;lastFrames=0;lastDropped=0;constructor(e){this.video=e}read(){let e=H(this.video);return e.totalFrames<this.lastFrames&&(this.baseFrames+=this.lastFrames),e.dropped<this.lastDropped&&(this.baseDropped+=this.lastDropped),this.lastFrames=e.totalFrames,this.lastDropped=e.dropped,{dropped:this.baseDropped+e.dropped,totalFrames:this.baseFrames+e.totalFrames}}attach(){let e=()=>void this.read();return this.video.addEventListener(`timeupdate`,e),this.video.addEventListener(`seeking`,e),()=>{this.video.removeEventListener(`timeupdate`,e),this.video.removeEventListener(`seeking`,e)}}};function yt(e,t){let n=[[`playing`,()=>t(`playing`)],[`waiting`,()=>t(`buffering`)],[`stalled`,()=>t(`buffering`)],[`pause`,()=>{e.ended||t(`paused`)}],[`ended`,()=>t(`ended`)]];for(let[t,r]of n)e.addEventListener(t,r);return()=>{for(let[t,r]of n)e.removeEventListener(t,r)}}var bt=2e3,xt=3,U=500,St=6e3,Ct=.25,wt=250,Tt=.05,Et=4,Dt=12e3,Ot=.25,kt=1e3;function At(e){try{let t=new TextDecoder(`utf-8`).decode(new Uint8Array(e));return/^skd:\/\/[0-9a-fA-F-]{36}:([0-9a-fA-F]{32})$/.exec(t)?.[1]}catch{return}}function W(e){return!!(e??(typeof document<`u`?document.createElement(`video`):void 0))?.canPlayType(`application/vnd.apple.mpegurl`)}function G(){if(typeof window>`u`)return!1;let e=`WebKitMediaKeys`in window||typeof HTMLMediaElement<`u`&&`webkitSetMediaKeys`in HTMLMediaElement.prototype,t=typeof navigator<`u`&&/Apple/i.test(navigator.vendor??``);return e||t}function jt(){if(typeof navigator>`u`||!G())return!1;let e=navigator.userAgent??``;return/iPhone|iPad|iPod/.test(e)?!0:/Macintosh/.test(e)&&typeof navigator.maxTouchPoints==`number`&&navigator.maxTouchPoints>1}var K=class{name=`native`;deps;onLoaded;onError;onEncrypted;fairplayLicenseUrl;keySession=null;fairplayArmed=!1;onVisibility=null;onPageShow=null;hiddenSince=null;refocusTimer=null;edgeTimer=null;onEdgeReset=null;lastBufferedEnd=null;bufferedAdvancedAt=null;lastSeekableEnd=null;edgeStampedAt=null;lastTickAt=null;endedEmitted=!1;fairplayKeyIV;loadStarted;preloadTouched=!1;savedPreload=null;cdnHost=``;builtAt;frameCounter;detachFrames=null;constructor(e){this.deps=e,this.frameCounter=new vt(e.video),this.loadStarted=e.deferLoad!==!0,this.builtAt=typeof performance<`u`?performance.now():0}async load(){this.detachFrames??=this.frameCounter.attach();let{video:e,descriptor:t,emit:n}=this.deps;if(this.endedEmitted=!1,this.watchRefocus(),this.watchBufferedEnd(),this.loadStarted||(this.preloadTouched=!0,this.savedPreload=e.getAttribute(`preload`),e.preload=`none`),t.drmEnabled){if(!t.drm?.fairplay){n({type:`error`,error:new l(`DRM_CLIENT`,0,`native HLS engine cannot satisfy this DRM (Widevine requires the hls.js engine); use engine "auto"/"hls" on a Widevine-capable browser`),fatal:!0});return}this.armFairPlay()}let r=!this.loadStarted;this.onLoaded=r?void 0:()=>n({type:`ready`}),this.onError=()=>n({type:`error`,error:V()?new l(`INTERNAL`,0,`native HLS playback error`):new l(`NETWORK`,0,`native HLS playback error while offline`),fatal:!0}),this.onLoaded&&e.addEventListener(`loadedmetadata`,this.onLoaded,{once:!0}),e.addEventListener(`error`,this.onError),e.src=Nt(t.manifestUrl,t.analytics?.sid),e.load()}startLoad(){this.loadStarted||(this.loadStarted=!0,this.restorePreload())}restorePreload(){if(!this.preloadTouched)return;this.preloadTouched=!1;let{video:e}=this.deps;this.savedPreload===null?e.removeAttribute(`preload`):e.setAttribute(`preload`,this.savedPreload)}armFairPlay(){let{video:e,descriptor:t,credential:n,deviceId:r,userId:i,emit:a}=this.deps,o=t.drm?.fairplay;if(!o)return;this.fairplayLicenseUrl=o.licenseUrl;let s=(e,t,n,r)=>a({type:`error`,error:new l(f(t,r),t,e,r?{serverCode:r}:void 0),fatal:n}),c=async e=>{try{return await e.text()}catch{return``}};this.onEncrypted=a=>{let l=a;l.initData&&!this.fairplayArmed&&(this.fairplayArmed=!0,this.fairplayKeyIV=At(l.initData),(async()=>{try{let a=await(await navigator.requestMediaKeySystemAccess(`com.apple.fps`,[{initDataTypes:[l.initDataType],videoCapabilities:[{contentType:`application/vnd.apple.mpegurl`,robustness:``}],distinctiveIdentifier:`not-allowed`,persistentState:`not-allowed`,sessionTypes:[`temporary`]}])).createMediaKeys(),u=await fetch(o.certificateUrl,{headers:{"x-api-key":n.apiKey}});if(!u.ok){this.fairplayArmed=!1,s(`FairPlay certificate request failed: ${u.status}`,u.status,!0);return}await a.setServerCertificate(await u.arrayBuffer()),await e.setMediaKeys(a);let f=a.createSession();this.keySession=f,f.addEventListener(`message`,e=>{(async()=>{try{let a=await fetch(this.fairplayLicenseUrl??o.licenseUrl,{method:`POST`,body:e.message,headers:{"x-api-key":n.apiKey,"X-Match-Urn":t.matchUrn,"X-Device-Id":r,...i?{"X-User-Id":i}:{},...this.fairplayKeyIV?{"X-Key-Iv":this.fairplayKeyIV}:{}}});if(!a.ok){let e=a.status===403?d(await c(a)):void 0;s(`FairPlay license request failed: ${a.status}`,a.status,!0,e);return}await f.update(new Uint8Array(await a.arrayBuffer()))}catch(e){s(`FairPlay license request failed: ${String(e)}`,0,!0)}})()}),await f.generateRequest(l.initDataType,l.initData)}catch(e){this.fairplayArmed=!1,s(`FairPlay key session failed: ${String(e)}`,0,!0)}})())},e.addEventListener(`encrypted`,this.onEncrypted)}setLicenseUrls(e){e.fairplay&&(this.fairplayLicenseUrl=e.fairplay)}getQualityLevels(){return[]}getCurrentQuality(){return-1}setQuality(e){}setMaxBitrate(e){}getAudioTracks(){let e=this.deps.video.audioTracks;return e?Array.from({length:e.length},(t,n)=>{let r=e[n];return{id:n,name:r.label||r.language||`Audio ${n+1}`,lang:r.language||void 0,default:r.enabled}}):[]}setAudioTrack(e){let t=this.deps.video.audioTracks;if(t)for(let n=0;n<t.length;n+=1)t[n].enabled=n===e}getTextTracks(){let e=this.deps.video.textTracks;return Array.from({length:e.length},(t,n)=>{let r=e[n];return{id:n,name:r.label||r.language||`Text ${n+1}`,lang:r.language||void 0}})}setTextTrack(e){let t=this.deps.video.textTracks;for(let n=0;n<t.length;n+=1)t[n].mode=n===e?`showing`:`disabled`}seekToLive(){let e=this.deps.video,t=this.liveEnd();t==null||t<=e.currentTime||(e.currentTime=t)}getStats(){let e=this.deps.video,t=this.frameCounter.read(),n={droppedFrames:t.dropped,decodedFrames:t.totalFrames};if(this.cdnHost||=_t(this.builtAt),this.cdnHost&&(n.cdnHost=this.cdnHost),this.deps.descriptor.drmEnabled&&(n.keySystem=`fairplay`),e.duration===1/0){n.isLive=!0;let t=this.liveEdgeEstimate(),r=t==null?NaN:t-e.currentTime;Number.isFinite(r)&&(n.atLiveEdge=r<=Et,!e.paused&&r>=0&&(n.latencySeconds=r))}else Number.isFinite(e.duration)&&e.duration>0&&(n.isLive=!1);return n}stop(){this.unwatchBufferedEnd();try{this.deps.video.pause()}catch{}}watchRefocus(){this.deps.snapToLiveOnRefocus===!1||typeof document>`u`||this.onVisibility||(this.onVisibility=()=>{let e=q();if(document.visibilityState===`hidden`){this.hiddenSince=e,this.cancelRefocus();return}let t=this.hiddenSince;this.hiddenSince=null,t!=null&&e-t>=bt&&this.armRefocus()},this.onPageShow=e=>{e.persisted&&this.armRefocus()},document.addEventListener(`visibilitychange`,this.onVisibility),typeof window<`u`&&window.addEventListener(`pageshow`,this.onPageShow))}armRefocus(){if(this.cancelRefocus(),Number.isFinite(this.deps.video.duration))return;let e=this.liveEnd(),t=q,n=t(),r=0,i=()=>{if(this.refocusTimer=null,Number.isFinite(this.deps.video.duration))return;r+=U;let a=this.liveEnd(),o=a!=null&&(e==null||a>=e+Ct),s=Math.max(r,t()-n)>=St;if(o||s&&a!=null){this.snapToLive();return}this.refocusTimer=setTimeout(i,U)};this.refocusTimer=setTimeout(i,U)}cancelRefocus(){this.refocusTimer!=null&&clearTimeout(this.refocusTimer),this.refocusTimer=null}watchBufferedEnd(){if(this.edgeTimer!=null)return;let{video:e}=this.deps;this.onEdgeReset=e=>{this.lastBufferedEnd=null,this.bufferedAdvancedAt=null,e.type===`emptied`&&this.resetEndStale()},e.addEventListener(`seeking`,this.onEdgeReset),e.addEventListener(`emptied`,this.onEdgeReset),this.edgeTimer=setInterval(()=>{if(e.duration!==1/0)return;this.checkEndStale();let t=Mt(e,e.currentTime);t!=null&&((this.lastBufferedEnd==null||Math.abs(t-this.lastBufferedEnd)>=Tt)&&(this.bufferedAdvancedAt=q()),this.lastBufferedEnd=t)},wt)}checkEndStale(){if(this.endedEmitted)return;let e=q(),t=this.lastTickAt==null?0:e-this.lastTickAt;this.lastTickAt=e;let n=this.liveEnd();if(n==null)return;let r=this.lastSeekableEnd==null||Math.abs(n-this.lastSeekableEnd)>=Ot;this.lastSeekableEnd=n;let i=this.deps.video,a=typeof document<`u`&&document.visibilityState===`hidden`;if(r||t>kt||a||i.paused){this.edgeStampedAt=e;return}e-(this.edgeStampedAt??e)>Dt&&(this.endedEmitted=!0,this.deps.emit({type:`ended`,reason:`stalled`}))}resetEndStale(){this.lastSeekableEnd=null,this.edgeStampedAt=null,this.lastTickAt=null}unwatchBufferedEnd(){this.edgeTimer!=null&&clearInterval(this.edgeTimer),this.edgeTimer=null,this.onEdgeReset&&=(this.deps.video.removeEventListener(`seeking`,this.onEdgeReset),this.deps.video.removeEventListener(`emptied`,this.onEdgeReset),null),this.resetEndStale(),this.lastBufferedEnd=null,this.bufferedAdvancedAt=null}liveEdgeEstimate(){let e=this.deps.video;if(e.duration!==1/0)return null;let t=this.liveEnd(),n=Mt(e,e.currentTime)??this.lastBufferedEnd;if(n!=null){let e=this.bufferedAdvancedAt,r=n+(e==null?0:Math.max(0,(q()-e)/1e3));(t==null||r>t)&&(t=r)}return t!=null&&Number.isFinite(t)?t:null}liveEnd(){let e=this.deps.video;if(e.duration!==1/0||e.seekable.length===0)return null;let t=e.seekable.end(e.seekable.length-1);return Number.isFinite(t)?t:null}snapToLive(){let e=this.deps.video,t=this.liveEnd();if(t==null)return;let n=e.seekable.start(e.seekable.length-1),r=Math.min(e.currentTime,t),i=Math.max(n,t-xt,r);try{e.currentTime=i}catch{}}destroy(){this.detachFrames?.(),this.detachFrames=null,this.cancelRefocus(),this.unwatchBufferedEnd(),this.onVisibility&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),this.onVisibility=null),this.onPageShow&&typeof window<`u`&&(window.removeEventListener(`pageshow`,this.onPageShow),this.onPageShow=null);let{video:e}=this.deps;this.onLoaded&&e.removeEventListener(`loadedmetadata`,this.onLoaded),this.onError&&e.removeEventListener(`error`,this.onError),this.onEncrypted&&e.removeEventListener(`encrypted`,this.onEncrypted),this.keySession?.close().catch(()=>{}),this.keySession=null,this.fairplayArmed=!1,this.fairplayKeyIV=void 0;try{e.pause()}catch{}e.removeAttribute(`src`),this.restorePreload();try{e.load()}catch{}}};function q(){return typeof performance<`u`?performance.now():Date.now()}function Mt(e,t){let n=e.buffered;if(!n||!Number.isFinite(t))return null;for(let e=0;e<n.length;e+=1)if(n.start(e)<=t+.1&&n.end(e)>t){let t=n.end(e);return Number.isFinite(t)?t:null}return null}function Nt(e,t){return t?`${e}${e.includes(`?`)?`&`:`?`}CMCD=${encodeURIComponent(`sid="${t}"`)}`:e}function J(e,t=Date.now()){if(!e)return!1;let n;try{n=new URL(e).searchParams.get(`exp`)}catch{return!1}return!n||!/^\d+$/.test(n)?!1:Number(n)*1e3<=t}var Pt=4096;function Ft(e){if(!e||typeof e!=`object`)return;let{response:t}=e;if(typeof t==`string`)return t;let n;if(Object.prototype.toString.call(t)===`[object ArrayBuffer]`?n=new Uint8Array(t):ArrayBuffer.isView(t)&&(n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength)),!(!n||n.byteLength===0||n.byteLength>Pt))try{return new TextDecoder().decode(n)}catch{return}}var It=15e3,Lt=5e3,Rt=6,zt=4e3,Bt=2;function Y(e){try{let t=new URL(e);return t.searchParams.delete(`CMCD`),t.toString()}catch{return e}}var Vt=class{cmcd;entries=new Map;keyed=new Set;perTrack=new Map;hints=new Map;stats={started:0,served:0,missed:0,failed:0,expired:0,hintStarted:0,hintServed:0,hintFailed:0,hintExpired:0,hintDropped:0};constructor(e={}){this.cmcd=e}keyUsable(e){this.keyed.add(e)}isActive(e){return!this.keyed.has(e)}prefetch(e,t,n){if(!this.isActive(t))return;let r=Y(e);if(this.entries.has(r))return;let i=this.perTrack.get(t)??0;i>=Rt||(this.perTrack.set(t,i+1),this.start(r,this.withCmcd(e,t,n),!1,It),this.stats.started+=1)}prefetchHint(e,t){let n=Y(e);if(this.entries.has(n))return;let r=this.hints.get(t)??[];for(;r.length>=Bt;){let e=r.shift();e!==void 0&&this.drop(e)&&(this.stats.hintDropped+=1)}r.push(n),this.hints.set(t,r),this.start(n,this.withCmcd(e,t,`media`),!0,zt),this.stats.hintStarted+=1}dropHints(e){for(let t of this.hints.get(e)??[])this.drop(t)&&(this.stats.hintDropped+=1);this.hints.delete(e)}drop(e){let t=this.entries.get(e);return t?(this.entries.delete(e),t.abort.abort(),!0):!1}start(e,t,n,r){let i=new AbortController,a={started:performance.now(),first:0,end:0,hint:n,headers:Promise.resolve(),bytes:Promise.resolve(null),abort:i},o=()=>{};a.headers=new Promise(e=>o=e),a.bytes=fetch(t,{credentials:`omit`,mode:`cors`,signal:i.signal}).then(async e=>{if(a.first=performance.now(),o(),!e.ok)return null;let t=await e.arrayBuffer();return a.end=performance.now(),t}).catch(()=>null).finally(o),this.entries.set(e,a),setTimeout(()=>{this.entries.get(e)===a&&(this.entries.delete(e),i.abort(),n?this.stats.hintExpired+=1:this.stats.expired+=1)},r)}take(e){let t=Y(e),n=this.entries.get(t);return n&&this.entries.delete(t),n}destroy(){for(let e of this.entries.values())e.abort.abort();this.entries.clear(),this.hints.clear()}withCmcd(e,t,n){let{sessionId:r,contentId:i}=this.cmcd;if(!r&&!i)return e;let a=[];i&&a.push(`cid="${i}"`),a.push(`ot=${n===`init`?`i`:t===`audio`?`a`:`v`}`),a.push(`sf=h`),r&&a.push(`sid="${r}"`),a.push(`st=ll`);try{let t=new URL(e);return t.searchParams.set(`CMCD`,a.join(`,`)),t.toString()}catch{return e}}};function Ht(e){let t=c.default.DefaultConfig?.loader;if(typeof t!=`function`)return;class n extends t{served=!1;cancelled=!1;entry;stats=Ut();load(t,n,r){let i=t.rangeEnd?void 0:e.take(t.url);if(!i){super.load(t,n,r);return}this.served=!0,this.entry=i;let a=performance.now(),o=()=>{i.hint?e.stats.hintFailed+=1:e.stats.failed+=1},s=()=>{!this.cancelled&&this.served&&(i.abort.abort(),o(),this.served=!1,this.entry=void 0,super.load(t,n,r))},c=n?.loadPolicy,l=c?.maxTimeToFirstByteMs||Lt,u=setTimeout(s,l);i.headers.then(()=>{clearTimeout(u);let e=c?.maxLoadTimeMs;e&&(u=setTimeout(s,Math.max(0,e-(performance.now()-a))))}),i.bytes.then(s=>{if(clearTimeout(u),this.cancelled||!this.served)return;if(!s){o(),this.served=!1,super.load(t,n,r);return}let c=this.stats;if(i.hint){e.stats.hintServed+=1;let t=performance.now(),n=Math.max(0,(i.end||t)-(i.first||t)),r=Math.max(0,(i.first||t)-a);c.loading.end=t,c.loading.first=t-n,c.loading.start=c.loading.first-r}else e.stats.served+=1,c.loading.start=a,c.loading.first=Math.max(a,i.first||a),c.loading.end=performance.now();c.loaded=c.total=s.byteLength,this.entry=void 0,r.onSuccess({url:t.url,data:s},c,t,null)})}abort(){if(this.served){this.cancelled=!0,this.stats.aborted=!0,this.entry?.abort.abort(),this.entry=void 0;return}super.abort()}}return n}function Ut(){return{aborted:!1,loaded:0,retry:0,total:0,chunkCount:0,bwEstimate:0,loading:{start:0,first:0,end:0},parsing:{start:0,end:0},buffering:{start:0,first:0,end:0}}}function Wt(e){return e===`audio`?`audio`:`main`}function Gt(e,t){let n=[];t.initSegment?.url&&!t.initSegment.data&&n.push({url:t.initSegment.url,kind:`init`});let r=((t.type===`audio`?e.audioTracks?.[e.audioTrack]?.details:typeof t.level==`number`?e.levels?.[t.level]?.details:void 0)?.partList??[]).filter(e=>e.fragment.sn===t.sn);if(r.length)for(let e of r)e.url&&n.push({url:e.url,kind:`media`});else t.url&&n.push({url:t.url,kind:`media`});return n}function Kt(e){let t=e,n=t?.preloadHint;if(!n||!t?.url||n.TYPE!==`PART`||n[`BYTERANGE-START`]!==void 0||n[`BYTERANGE-LENGTH`]!==void 0)return null;let r=n.URI;if(typeof r!=`string`||!r)return null;try{return new URL(r,t.url).toString()}catch{return null}}function X(e,t){return e.length===0?0:e[Math.min(e.length,Math.max(1,Math.ceil(t/100*e.length)))-1]??0}function qt(){return c.default.isSupported()}var Jt=3,Yt=1e6,Xt=20,Zt=1e4,Qt=3,$t=5,en=3,tn=1e4,nn=3e4,rn=12e3,an=3e3,on=.02,sn=6e3,cn=.5,ln=3,un=.5,dn=1.1,fn=.25,pn=5e3,mn=4e3,hn=2,gn=5,_n=2,vn=2,yn=4,bn=4,xn=2e3,Sn=3e4,Cn=1,wn=2;function Tn(e,t,n){if(n<=0||t<0||t>=e.length)return t;let r=(t,n)=>e[t].width===e[n].width&&e[t].height===e[n].height,i=t=>{for(;t+1<e.length&&r(t+1,t);)t++;return t},a=i(t);for(let t=0;t<n&&a+1<e.length;t++)a=i(a+1);return a}var En=.2,Dn=30,On=2,kn=2,An=2,jn=9,Mn=.5,Nn=64,Pn=1e4,Fn=8,In=.6,Ln=.4,Rn=.4,zn=2,Bn=6e4,Z=.5,Vn=3.5,Hn=300;function Un(e){return(e?.part??e?.frag)?.stats}function Wn(){if(typeof navigator>`u`)return 0;try{let e=navigator.connection?.rtt;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:0}catch{return 0}}function Gn(e){if(e.liveSyncDurationCount!=null||e.liveMaxLatencyDurationCount!=null){delete e.liveSyncDuration,delete e.liveMaxLatencyDuration;return}e.liveSyncDuration??=An;let t=Math.max(12,e.liveSyncDuration+jn);(e.liveMaxLatencyDuration==null||e.liveMaxLatencyDuration<=e.liveSyncDuration)&&(e.liveMaxLatencyDuration=t),Kn(e,e.liveSyncDuration)}function Kn(e,t){let n=(e,t,n)=>Math.min(n,Math.max(t,e));e.maxStarvationDelay??=n(t/2,.5,4),e.maxLoadingDelay??=n(t,1,4),e.abrEwmaFastLive??=n(t/2,1,3)}var qn=class{name=`hls`;hls=null;deps;licenseUrl;detectedLowLatency=!1;bytesLoaded=0;prefetch=null;reportedFirstPlaylist=!1;reportedFirstBytes=!1;reportedDrmReady=!1;playlistBytesLoaded=0;renditionSwitches=0;licenseTimeMs=0;licenseRequested=!1;upshifts=0;downshifts=0;lastLevelIndex=-1;requestCount=0;requestErrors=0;requestTimesMs=[];cdnHost=``;ladderHeights;ladderTopBitrateKbps=0;mediaRecoveries=0;networkRecoveries=0;licenseRecoveries=0;recoveryResetTimer=null;networkRetryTimer=null;licenseRetryTimer=null;offlineHold=!1;onOffline=null;onOnline=null;onVisibility=null;onSeeking=null;onPause=null;onPlay=null;pauseSuspendTimer=null;loadSuspended=!1;stopped=!1;sawLive=!1;lastEndSN=-1;lastAdvanceMs=0;endWatchdog=null;endedEmitted=!1;lastFragLoadingMs=0;starvedTicks=0;starvationKicks=0;kickPending=!1;kickTicks=0;starvationRebuilds=0;kickKind=null;starvedFrames=0;deadTicks=0;mainFragsSinceTick=0;bwFragsLoaded=0;bwSavedAt=0;recentMainFrags=[];chaseSuspended=!1;savedLiveMaxLatency;savedMaxSyncRate;chaseLatency=-1;catchUpRate=1;catchUpEngaged=!1;onTimeUpdate=null;chaseTicks=0;liveRetargets=0;holdBackEnabled;holdBackSamples=[];holdBackBase=-1;holdBackStepCount=0;holdBackApplied=0;holdBackSlowTicks=0;holdBackFastSince=0;holdBackSteps=0;holdBackPriorChecked=!1;capObserver=null;capTimer=null;sizeCapLevel=null;bitrateCapLevel=-1;pushedCapLevel=-1;pushedCapReason=null;fpsCapBitrate=null;fpsCapFailedHeight=null;fpsCapManaged=!0;fpsLastFrames=-1;fpsLastDropped=-1;fpsBadTicks=0;fpsGraceTicks=0;fpsDownCaps=0;sizeCapManaged=!0;dprMedia=null;onDprChange=null;loadStarted;frameCounter;detachFrames=null;constructor(e){this.deps=e,this.holdBackEnabled=e.adaptiveHoldBack!==!1,this.frameCounter=new vt(e.video),this.licenseUrl=e.descriptor.drm?.widevine?.licenseUrl,this.loadStarted=e.deferLoad!==!0}async load(){this.detachFrames??=this.frameCounter.attach();let{descriptor:e,snapToLiveOnRefocus:t,video:n,emit:r}=this.deps,i=W(n)&&G(),a=!!e.drm?.widevine?.licenseUrl&&!i;if(e.drmEnabled&&!a){r({type:`error`,error:new l(`DRM_CLIENT`,0,e.drm?.fairplay?.licenseUrl&&i?`FairPlay cannot be played on the hls.js engine (WebKit binds keys via the media sinf box); use engine "auto" or "native"`:`DRM is required but none of the stream’s key systems is usable on this platform (WebKit takes FairPlay only; other browsers take Widevine only)`),fatal:!0});return}e.drmEnabled&&a&&!this.deps.hlsConfig?.requestMediaKeySystemAccessFunc&&(Xe(n),et()),this.startHls(),t!==!1&&typeof document<`u`&&(this.onVisibility=()=>{let e=this.hls;if(document.visibilityState!==`visible`||!e)return;let t=e.liveSyncPosition;if(typeof t!=`number`)return;let r=typeof e.targetLatency==`number`&&e.targetLatency>0?e.targetLatency:3;t-n.currentTime>Math.max(r*3,8)&&(n.currentTime=t)},document.addEventListener(`visibilitychange`,this.onVisibility)),typeof window<`u`&&(this.onOffline=()=>{this.offlineHold=!0,this.networkRetryTimer&&=(clearTimeout(this.networkRetryTimer),null),this.lastAdvanceMs=this.lastAdvanceMs?Date.now():0,this.resetStarvationWindow(),this.clearKick()},this.onOnline=()=>{if(this.offlineHold&&(this.offlineHold=!1,this.networkRecoveries=0,this.networkRetryTimer&&=(clearTimeout(this.networkRetryTimer),null),!this.stopped&&this.hls&&this.loadStarted&&!this.loadSuspended)){this.lastAdvanceMs=Date.now(),this.lastFragLoadingMs=0,this.resetStarvationWindow(),this.resetChaseWindow(),this.clearKick();try{this.hls.startLoad(-1)}catch{}}},window.addEventListener(`offline`,this.onOffline),window.addEventListener(`online`,this.onOnline),V()||this.onOffline()),this.onSeeking=()=>{this.clampOverSeek(),this.loadSuspended&&(this.resumeLoading(),this.schedulePauseSuspend())},n.addEventListener(`seeking`,this.onSeeking),this.onTimeUpdate=()=>this.updateCatchUpBand(),n.addEventListener(`timeupdate`,this.onTimeUpdate),this.onPause=()=>this.schedulePauseSuspend(),this.onPlay=()=>this.resumeLoading(),n.addEventListener(`pause`,this.onPause),n.addEventListener(`play`,this.onPlay),this.sizeCapManaged&&typeof ResizeObserver<`u`&&(this.capObserver=new ResizeObserver(()=>this.onMediaResize()),this.capObserver.observe(n),this.watchDprChanges())}schedulePauseSuspend(){this.pauseSuspendTimer||this.loadSuspended||this.stopped||!this.loadStarted||(this.pauseSuspendTimer=setTimeout(()=>{this.pauseSuspendTimer=null;let{video:e}=this.deps;if(e.paused&&!e.ended&&!this.stopped&&this.hls){try{this.hls.stopLoad()}catch{return}this.loadSuspended=!0}},pn))}resumeLoading(){if(this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null),this.resetChaseWindow(),this.resetFrameDropWindow(),this.loadSuspended&&(this.loadSuspended=!1,!this.stopped&&this.hls)){this.lastAdvanceMs=Date.now(),this.lastFragLoadingMs=0,this.resetStarvationWindow(),this.resetChaseWindow(),this.clearKick();try{this.hls.startLoad(-1)}catch{}}}startLoad(){this.loadStarted||(this.loadStarted=!0,this.deps.video.paused&&this.schedulePauseSuspend(),this.hls?.startLoad(-1))}watchDprChanges(){if(typeof matchMedia!=`function`)return;this.unwatchDprChanges();let e=typeof self<`u`&&self.devicePixelRatio||1,t=matchMedia(`(resolution: ${e}dppx)`);if(typeof t.addEventListener!=`function`)return;let n=()=>{this.onMediaResize(),this.watchDprChanges()};t.addEventListener(`change`,n),this.dprMedia=t,this.onDprChange=n}unwatchDprChanges(){this.dprMedia&&this.onDprChange&&this.dprMedia.removeEventListener(`change`,this.onDprChange),this.dprMedia=null,this.onDprChange=null}clampOverSeek(){let e=this.hls;if(!e||this.chaseSuspended||(e.levels[e.currentLevel]??e.levels[e.loadLevel])?.details?.live!==!0)return;let t=e.liveSyncPosition;if(typeof t!=`number`||!Number.isFinite(t))return;let{video:n}=this.deps;n.currentTime<=t+Mn||(n.currentTime=t)}reanchorPartTimeline(e,t){let{frag:n,part:r}=t;if(!r||r.index!==0||n.type!==`main`||typeof n.sn!=`number`)return;let i=e.levels[n.level]?.details;if(!i?.live)return;let a=r.elementaryStreams.video??r.elementaryStreams.audiovideo??r.elementaryStreams.audio;if(!a)return;let o=n.sn,s=i.fragments.find(e=>e&&e.sn===o)??(i.fragmentHint?.sn===o?i.fragmentHint:void 0);if(!s)return;let c=a.startPTS-s.start;if(!(!Number.isFinite(c)||Math.abs(c)<on)){for(let e of i.fragments)e&&e.setStart(e.start+c);i.fragmentHint?.setStart(i.fragmentHint.start+c),this.deps.debug===!0&&console.info(`havik-player: LL-HLS timeline re-anchored by ${c>=0?`+`:``}${c.toFixed(3)}s at sn ${n.sn} (level ${n.level})`)}}startHls(){let{video:e,descriptor:t,credential:n,deviceId:r,userId:i,lowLatency:a,debug:o,hlsConfig:s,emit:l}=this.deps;this.clearKick(),this.resetStarvationWindow(),this.resetChaseWindow(),this.resetFrameDropWindow(),this.lastFragLoadingMs=0,this.lastEndSN=-1,this.lastAdvanceMs=0;let u=t.drmEnabled&&!!(t.drm?.widevine?.licenseUrl||t.drm?.fairplay?.licenseUrl),d=W(this.deps.video)&&G(),f={debug:o===!0,enableWorker:!a,lowLatencyMode:a,backBufferLength:90,liveDurationInfinity:!0,maxBufferHole:.5,maxLiveSyncPlaybackRate:d?1:1.1,abrEwmaDefaultEstimate:this.startEstimate(),capLevelToPlayerSize:!1,...this.loadStarted?{}:{autoStartLoad:!1},...u?{emeEnabled:!0,drmSystems:{...this.licenseUrl?{"com.widevine.alpha":{licenseUrl:this.licenseUrl}}:{}},drmSystemOptions:{videoRobustness:L.video,audioRobustness:L.audio,videoEncryptionScheme:L.scheme,audioEncryptionScheme:L.scheme},...I()?{requestMediaKeySystemAccessFunc:Ye(e)}:{},licenseXhrSetup:(e,a)=>{let o=performance.now(),s=()=>{e.open(`POST`,this.licenseUrl??a,!0),e.setRequestHeader(`x-api-key`,n.apiKey),e.setRequestHeader(`X-Match-Urn`,t.matchUrn),e.setRequestHeader(`X-Device-Id`,r),i&&e.setRequestHeader(`X-User-Id`,i),this.licenseRequested=!0,e.addEventListener(`loadend`,()=>{this.licenseTimeMs===0&&(this.licenseTimeMs=Math.max(1,Math.round(performance.now()-o)))})},{freshLicenseUrl:c}=this.deps;if(!c||!J(this.licenseUrl)){s();return}let l=this.hls,u,d=new Promise(e=>{u=setTimeout(()=>e(void 0),tn)});return Promise.race([c().catch(()=>void 0),d]).finally(()=>clearTimeout(u)).then(e=>{if(!this.hls||this.hls!==l)throw Error(`havik-player: engine torn down during refresh`);e&&(this.licenseUrl=e),s()})}}:{},...t.analytics?.sid?{cmcd:{sessionId:t.analytics.sid,contentId:t.matchUrn,useHeaders:!1}}:{},...s};this.prefetch?.destroy(),this.prefetch=null;let p=!1,m=!1,h=u&&this.deps.mediaDuringKey!==!1,g=this.deps.preloadHints===!0;if((h||g)&&!f.fLoader){let e=new Vt({sessionId:t.analytics?.sid,contentId:t.matchUrn}),n=Ht(e);n&&(this.prefetch=e,p=h,m=g,f.fLoader=n)}Gn(f),this.catchUpRate=typeof f.maxLiveSyncPlaybackRate==`number`?f.maxLiveSyncPlaybackRate:1,this.catchUpEngaged=!1,this.catchUpRate>1&&(f.maxLiveSyncPlaybackRate=1),this.sizeCapManaged=f.capLevelToPlayerSize!==!0,this.fpsCapManaged=!(s&&`capLevelOnFPSDrop`in s),this.loadStarted=f.autoStartLoad!==!1;let _=new c.default(f);if(this.hls=_,this.armHoldBack(_,f),_.on(c.default.Events.FRAG_PARSED,(e,t)=>this.reanchorPartTimeline(_,t)),_.on(c.default.Events.MANIFEST_PARSED,()=>{this.mediaRecoveries=0,this.networkRecoveries=0,u&&!this.deps.hlsConfig?.requestMediaKeySystemAccessFunc&&this.dropLevelsWidevineCannotPlay(_),this.measureLadder(_),this.applySizeCap(),this.loadSuspended=!1,e.paused&&this.schedulePauseSuspend(),l({type:`ready`})}),_.on(c.default.Events.FRAG_BUFFERED,(e,t)=>{t?.frag?.type===`main`&&(this.kickKind!==`dead`&&this.clearKick(),(this.mediaRecoveries>0||this.networkRecoveries>0||this.licenseRecoveries>0||this.starvationKicks>0||this.starvationRebuilds>0)&&!this.recoveryResetTimer&&(this.recoveryResetTimer=setTimeout(()=>{this.mediaRecoveries=0,this.networkRecoveries=0,this.licenseRecoveries=0,this.starvationKicks=0,this.starvationRebuilds=0,this.recoveryResetTimer=null},nn)))}),_.on(c.default.Events.FRAG_LOADING,(e,t)=>{t?.frag?.type===`main`&&(this.lastFragLoadingMs=Date.now())}),_.on(c.default.Events.FRAG_LOADED,(e,t)=>{t?.frag?.type===`main`&&(this.mainFragsSinceTick+=1,this.bwFragsLoaded+=1,this.maybeRememberBandwidth(!1));let n=t?.frag,r=Un(t),i=r?.loaded;typeof i==`number`&&(this.bytesLoaded+=i),!this.reportedFirstBytes&&typeof i==`number`&&i>0&&(this.reportedFirstBytes=!0,l({type:`firstBytes`}));let a=r?.loading;a&&a.end>0&&a.start>0&&(this.requestCount+=1,this.requestTimesMs.push(Math.max(0,Math.round(a.end-a.start))),this.requestTimesMs.length>Nn&&this.requestTimesMs.shift()),this.sampleHoldBack(t);let o=n?.url;if(o){let e=ht(o);e&&(this.cdnHost=e)}}),_.on(c.default.Events.LEVEL_LOADED,(e,t)=>{let n=t?.stats?.loaded;if(typeof n==`number`&&(this.playlistBytesLoaded+=n),this.reportedFirstPlaylist||(this.reportedFirstPlaylist=!0,l({type:`firstPlaylist`})),this.detectedLowLatency)return;let r=t.details;(r?.partList?.length||(r?.partTarget??0)>0)&&(this.detectedLowLatency=!0,l({type:`lowLatencyDetected`,value:!0}))}),_.on(c.default.Events.LEVEL_LOADED,(e,t)=>this.trackEnd(t)),this.prefetch&&m){let e=this.prefetch,t=this.deps.video,n=(n,r)=>{if(t.paused)return;let i=n;if(!i?.live||!i.partList?.length||typeof i.edge!=`number`)return;let a=t.buffered,o=a.length?a.end(a.length-1):0;if(i.edge-o>Jt*(i.partTarget||.5))return;let s=Kt(n);s&&e.prefetchHint(s,r)};_.on(c.default.Events.LEVEL_LOADED,(e,t)=>{t.level===_.loadLevel&&n(t.details,`main`)}),_.on(c.default.Events.AUDIO_TRACK_LOADED,(e,t)=>{t?.id===_.audioTrack&&n(t?.details,`audio`)}),_.on(c.default.Events.LEVEL_SWITCHING,()=>e.dropHints(`main`)),_.on(c.default.Events.AUDIO_TRACK_SWITCHING,()=>e.dropHints(`audio`))}if(this.prefetch&&p){let e=this.prefetch;_.on(c.default.Events.KEY_LOADING,(t,n)=>{let r=n?.frag,i=Wt(r?.type);if(r&&e.isActive(i))for(let t of Gt(_,r))e.prefetch(t.url,i,t.kind)}),_.on(c.default.Events.KEY_LOADED,(t,n)=>e.keyUsable(Wt(n?.frag?.type)))}_.on(c.default.Events.KEY_LOADED,()=>{u&&!this.reportedDrmReady&&(this.reportedDrmReady=!0,l({type:`drmReady`}))}),this.endWatchdog&&clearInterval(this.endWatchdog),this.endWatchdog=setInterval(()=>{this.checkEndStale(),this.checkStarvation(),this.updateCatchUpBand(),this.checkFutileChase(),this.adaptHoldBack(),this.checkFrameDrops()},an),_.on(c.default.Events.LEVEL_SWITCHED,(e,t)=>{this.renditionSwitches+=1;let n=this.lastLevelIndex>=0?_.levels[this.lastLevelIndex]:void 0,r=_.levels[t.level];n&&r&&r.bitrate!==n.bitrate&&(r.bitrate>n.bitrate?this.upshifts+=1:this.downshifts+=1),this.lastLevelIndex=t.level,this.armFrameDropGrace(),l({type:`qualitychange`,index:t.level})}),_.on(c.default.Events.AUDIO_TRACK_SWITCHED,(e,t)=>l({type:`audiotrackchange`,id:t.id})),_.on(c.default.Events.SUBTITLE_TRACK_SWITCH,(e,t)=>l({type:`texttrackchange`,id:t.id})),_.on(c.default.Events.ERROR,(e,t)=>this.onError(t)),_.loadSource(t.manifestUrl),_.attachMedia(e)}getQualityLevels(){return this.hls?this.hls.levels.map((e,t)=>({index:t,width:e.width||void 0,height:e.height||void 0,bitrate:e.bitrate,codecs:e.videoCodec||e.codecSet||void 0})):[]}getCurrentQuality(){return this.hls?this.hls.autoLevelEnabled?-1:this.hls.currentLevel:-1}setQuality(e){this.hls&&(this.hls.currentLevel=e)}setMaxBitrate(e){let t=this.hls;if(t){if(e==null)this.bitrateCapLevel=-1;else{let n=-1;t.levels.forEach((t,r)=>{t.bitrate<=e&&(n=r)}),this.bitrateCapLevel=n}this.pushCap()}}computeSizeCapTarget(){let e=this.hls;if(!e||e.levels.length===0)return null;let{video:t}=this.deps,n=t.getBoundingClientRect(),r=n.width,i=n.height;if(!r&&!i&&(r=t.width||0,i=t.height||0),!(r>0)||!(i>0))return null;let a=e.config??{},o=typeof self<`u`&&self.devicePixelRatio>0?self.devicePixelRatio:1,s=a.ignoreDevicePixelRatio?1:o;s=Math.min(s,a.maxDevicePixelRatio??1/0);let l=c.CapLevelController.getMaxLevelByMediaSize(e.levels,r*s,i*s),u=this.deps.sizeCapHeadroom;if(u==null&&o>=wn)return l;let d=u??Cn,f=Number.isNaN(d)?Cn:d===1/0?e.levels.length:Math.max(0,Math.floor(d));return Tn(e.levels,l,f)}onMediaResize(){if(!this.sizeCapManaged)return;let e=this.computeSizeCapTarget();if(e==null)return;if(this.sizeCapLevel==null){this.applySizeCap();return}if(e===this.sizeCapLevel){this.capTimer&&=(clearTimeout(this.capTimer),null);return}this.capTimer&&clearTimeout(this.capTimer);let t=e>this.sizeCapLevel?xn:Sn;this.capTimer=setTimeout(()=>{this.capTimer=null,this.computeSizeCapTarget()===e?this.applySizeCap():this.onMediaResize()},t)}measureLadder(e){let t=e.levels.map(e=>e.height).filter(e=>!!e);this.ladderHeights=t.length?[...new Set(t)].sort((e,t)=>e-t):void 0,this.ladderTopBitrateKbps=e.levels.length?Math.round(Math.max(...e.levels.map(e=>e.bitrate))/1e3):0}dropLevelsWidevineCannotPlay(e){this.removeLevelsWhere(e,e=>tt(e)!==!0);let t=new Set(e.levels.map(e=>e.videoCodec).filter(e=>!!e&&R(e)!==`avc`&&!!R(e)));for(let n of t)$e(n).then(t=>{t||this.hls!==e||this.removeLevelsWhere(e,e=>e===n)&&(this.measureLadder(e),this.applySizeCap())})}removeLevelsWhere(e,t){let n=e.levels??[],r=[],i=new Set;if(n.forEach((e,n)=>{let a=e.videoCodec;a&&R(a)&&t(a)&&(r.push(n),i.add(a))}),!r.length)return!1;let a=[...i].join(`, `);if(!n.some((e,t)=>r.includes(t)?!1:!R(e.videoCodec)||tt(e.videoCodec)===!0))return console.warn(`havik-player: every rendition is ${a}, which Widevine may not play on this browser; keeping them`),!1;for(let t=r.length-1;t>=0;--t)e.removeLevel(r[t]);return console.info(`havik-player: skipped ${r.length} rendition(s) Widevine cannot play on this browser (${a})`),!0}applySizeCap(){if(!this.sizeCapManaged)return;this.capTimer&&=(clearTimeout(this.capTimer),null);let e=this.computeSizeCapTarget();e!=null&&(this.sizeCapLevel=e,this.pushCap())}pushCap(){let e=this.hls;if(!e)return;let t=[[`size`,this.sizeCapLevel??-1],[`bitrate`,this.bitrateCapLevel],[`fps`,this.fpsCapLevel(e)]],n=-1,r=null;for(let[e,i]of t)i>=0&&(n<0||i<n)&&(n=i,r=e);e.autoLevelCapping=n,this.pushedCapLevel=n,this.pushedCapReason=r}getAudioTracks(){return this.hls?this.hls.audioTracks.map(e=>({id:e.id,name:e.name,lang:e.lang||void 0,default:!!e.default})):[]}setAudioTrack(e){this.hls&&(this.hls.audioTrack=e)}getTextTracks(){return this.hls?this.hls.subtitleTracks.map(e=>({id:e.id,name:e.name,lang:e.lang||void 0})):[]}setTextTrack(e){let t=this.hls;t&&(e<0?(t.subtitleTrack=-1,t.subtitleDisplay=!1):(t.subtitleTrack=e,t.subtitleDisplay=!0))}seekToLive(){let e=this.hls;e&&typeof e.liveSyncPosition==`number`&&(this.deps.video.currentTime=e.liveSyncPosition)}setLicenseUrls(e){e.widevine&&(this.licenseUrl=e.widevine)}getStats(){let e=this.hls,t=this.frameCounter.read(),n={droppedFrames:t.dropped,decodedFrames:t.totalFrames,lowLatency:this.detectedLowLatency,bytesLoaded:this.bytesLoaded,playlistBytesLoaded:this.playlistBytesLoaded,renditionSwitches:this.renditionSwitches,liveRetargets:this.liveRetargets,holdBackSteps:this.holdBackSteps,fpsDownCaps:this.fpsDownCaps,licenseTimeMs:this.licenseTimeMs,upshifts:this.upshifts,downshifts:this.downshifts,requestCount:this.requestCount,requestErrors:this.requestErrors,requestTimesMs:[...this.requestTimesMs],ladderHeights:this.ladderHeights,ladderTopBitrateKbps:this.ladderTopBitrateKbps||void 0};if(this.cdnHost&&(n.cdnHost=this.cdnHost),this.licenseRequested&&(n.keySystem=`widevine`,n.drmSecurityLevel=`L3`),e){n.qualityPinned=!e.autoLevelEnabled,typeof e.latency==`number`&&(n.latencySeconds=e.latency),typeof e.targetLatency==`number`&&e.targetLatency>0&&(n.targetLatencySeconds=e.targetLatency),typeof e.bandwidthEstimate==`number`&&(n.bandwidthKbps=Math.round(e.bandwidthEstimate/1e3));let t=e.currentLevel>=0?e.levels[e.currentLevel]:void 0;t&&(n.levelHeight=t.height);let r=e.autoLevelCapping,i=r>=0?e.levels[r]:void 0;if(i&&i.height>0){n.maxLevelHeight=i.height;let t=e.config??{};t.capLevelToPlayerSize!==!0&&t.capLevelOnFPSDrop!==!0&&r===this.pushedCapLevel&&this.pushedCapReason&&(n.capReason=this.pushedCapReason)}t?.videoCodec&&(n.videoCodec=t.videoCodec),t?.audioCodec&&(n.audioCodec=t.audioCodec),t&&typeof t.bitrate==`number`&&(n.renditionBitrateKbps=Math.round(t.bitrate/1e3)),typeof t?.details?.live==`boolean`&&(n.isLive=t.details.live,typeof e.liveSyncPosition==`number`&&(n.atLiveEdge=this.deps.video.currentTime>=e.liveSyncPosition-1.5))}return n}trackEnd(e){let t=e.details;if(t){if(t.live===!0){let e=!this.sawLive;this.sawLive=!0,e&&this.applyHoldBackPrior();let n=t.endSN??-1;n!==this.lastEndSN&&(this.lastEndSN=n,this.lastAdvanceMs=Date.now(),this.chaseSuspended&&this.resumeChasing());return}this.sawLive&&this.emitEnded(`endlist`)}}checkEndStale(){if(this.endedEmitted||!this.sawLive||this.lastAdvanceMs===0)return;if(typeof document<`u`&&document.hidden){this.lastAdvanceMs=Date.now();return}if(this.loadSuspended||this.offlineHold||!V()){this.lastAdvanceMs=Date.now();return}let e=Date.now()-this.lastAdvanceMs;!this.chaseSuspended&&e>sn&&this.suspendChasing(),e>rn&&this.emitEnded(`stalled`)}resetStarvationWindow(){this.starvedTicks=0,this.deadTicks=0,this.mainFragsSinceTick=0,this.recentMainFrags=[]}clearKick(){this.kickPending=!1,this.kickTicks=0,this.kickKind=null}checkStarvation(){let e=this.hls,{video:t}=this.deps;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended)return;if(typeof document<`u`&&document.hidden||this.loadSuspended||this.offlineHold||!V()){this.resetStarvationWindow();return}let n=Date.now(),r=this.lastAdvanceMs!==0&&n-this.lastAdvanceMs<sn,i=this.lastFragLoadingMs!==0&&n-this.lastFragLoadingMs>mn,a=t.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&!t.paused,{totalFrames:o,dropped:s}=H(t),c=o-s,l=c!==this.starvedFrames;if(this.starvedFrames=c,!a||l){(t.readyState>=HTMLMediaElement.HAVE_FUTURE_DATA||l)&&this.clearKick(),this.resetStarvationWindow();return}if(!r){this.resetStarvationWindow();return}if(this.kickPending&&(this.kickKind===`dead`||i)&&(this.kickTicks+=1),this.starvedTicks=i?this.starvedTicks+1:0,this.deadTicks+=1,this.recentMainFrags.push(this.mainFragsSinceTick),this.mainFragsSinceTick=0,this.recentMainFrags.length>yn&&this.recentMainFrags.shift(),this.clearRecoveryReset(),this.kickPending&&this.kickTicks>=_n&&(this.clearKick(),this.starvationRebuilds<vn)){this.starvationRebuilds+=1,this.resetStarvationWindow(),this.clearRecoveryReset(),console.warn(`havik-player: restarting the load did not resume video (the wedge is in hls.js state that only a rebuild clears) — rebuilding the player`),this.rebuildInstance(`starvation rebuild`);return}let u=i&&this.starvedTicks>=hn,d=!i&&this.deadTicks>=yn&&this.recentMainFrags.reduce((e,t)=>e+t,0)>=bn;if((u||d)&&(this.resetStarvationWindow(),!(this.starvationKicks>=gn))){this.starvationKicks+=1,this.kickPending=!0,this.kickTicks=0,this.kickKind=d?`dead`:`quiet`,this.clearRecoveryReset(),console.warn(d?`havik-player: video starved while hls.js keeps loading media it never plays (dead pipeline at the live edge) — restarting the load`:`havik-player: video starved while the live playlist advances (wedged hls.js fragment pipeline) — restarting the load`);try{e.stopLoad(),e.startLoad(-1)}catch(e){console.warn(`havik-player: starvation kick failed`,e)}}}updateCatchUpBand(){let e=this.hls;if(!e||this.catchUpRate<=1||this.chaseSuspended||this.loadSuspended||this.offlineHold)return;let t=e.latency,n=e.targetLatency;if(typeof t!=`number`||typeof n!=`number`||!Number.isFinite(t))return;let r=t-n;!this.catchUpEngaged&&r>cn?this.catchUpEngaged=!0:this.catchUpEngaged&&r<=cn&&this.deps.video.playbackRate===1&&(this.catchUpEngaged=!1);let i=this.catchUpEngaged?this.catchUpRate:1;e.config.maxLiveSyncPlaybackRate!==i&&(e.config.maxLiveSyncPlaybackRate=i)}fpsCapLevel(e){if(this.fpsCapBitrate==null)return-1;let t=this.fpsCapFailedHeight,n=-1;return e.levels.forEach((e,r)=>{let i=t==null||!(e.height>0)||e.height<t;e.bitrate<=this.fpsCapBitrate&&i&&(n=r)}),n<0?0:n}armFrameDropGrace(){this.fpsGraceTicks>0||(this.fpsGraceTicks=kn,this.fpsBadTicks=0)}resetFrameDropWindow(){this.fpsLastFrames=-1,this.fpsLastDropped=-1,this.fpsBadTicks=0}checkFrameDrops(){let e=this.hls,{video:t}=this.deps;if(!e||!this.fpsCapManaged||this.loadSuspended||this.offlineHold||t.paused||!e.autoLevelEnabled||typeof document<`u`&&document.hidden){this.resetFrameDropWindow();return}let{totalFrames:n,dropped:r}=H(t),i=this.fpsLastFrames<0,a=n-this.fpsLastFrames,o=r-this.fpsLastDropped;if(this.fpsLastFrames=n,this.fpsLastDropped=r,i||a<Dn||o<0){this.fpsBadTicks=0;return}if(this.fpsGraceTicks>0){--this.fpsGraceTicks,this.fpsBadTicks=0;return}if(o<=En*a){this.fpsBadTicks=0;return}if(this.fpsBadTicks+=1,this.fpsBadTicks<On)return;this.fpsBadTicks=0;let s=e.levels,c=s[e.currentLevel];if(!c)return;let l=s.filter(e=>e.height>0&&e.height<c.height),u=(l.length?l:s.filter(e=>e.bitrate<c.bitrate)).map(e=>e.bitrate).sort((e,t)=>t-e)[0];u!=null&&(this.fpsCapBitrate!=null&&u>=this.fpsCapBitrate||(this.fpsCapBitrate=u,l.length&&(this.fpsCapFailedHeight=c.height),this.fpsDownCaps+=1,console.warn(`havik-player: dropping ${Math.round(100*o/a)}% of frames at ${c.height}p — capping quality below it`),this.pushCap()))}resetChaseWindow(){this.chaseLatency=-1,this.chaseTicks=0}checkFutileChase(){let e=this.hls,{video:t}=this.deps;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended||this.loadSuspended||this.offlineHold||typeof document<`u`&&document.hidden){this.resetChaseWindow();return}let n=e.latency,r=t.playbackRate,i=e.config.maxLiveSyncPlaybackRate;if(!(!t.paused&&typeof i==`number`&&i>1&&r>=Math.min(dn,i)&&r<=i&&typeof n==`number`&&Number.isFinite(n))){this.resetChaseWindow();return}if(this.chaseLatency<0||this.chaseLatency-n>=un){this.chaseLatency=n,this.chaseTicks=0;return}if(this.chaseTicks+=1,this.chaseTicks<ln)return;this.resetChaseWindow();let a=typeof e.config.liveMaxLatencyDuration==`number`?e.config.liveMaxLatencyDuration:e.maxLatency;if(!(a>1))return;let o=e.targetLatency;if(typeof o!=`number`||!(o>0))return;let s=Math.min(n,a-1);s<o+fn||(console.warn(`havik-player: catch-up at ${r}x not gaining on the live edge (latency ${n.toFixed(1)}s); holding at ${s.toFixed(1)}s`),this.liveRetargets+=1,e.targetLatency=s,this.deps.emit({type:`livetargetchange`,change:{targetSeconds:s,previousSeconds:o,reason:`futile-chase`}}))}armHoldBack(e,t){this.holdBackEnabled&&(this.holdBackSlowTicks=0,this.holdBackFastSince=0,this.holdBackSamples=[],this.holdBackBase<0&&typeof t.liveSyncDuration==`number`&&(this.holdBackBase=t.liveSyncDuration),this.holdBackApplied>0&&(e.targetLatency=this.holdBackApplied))}applyHoldBackPrior(){let e=this.hls;if(!this.holdBackEnabled||this.holdBackPriorChecked||!e||(this.holdBackPriorChecked=!0,this.holdBackApplied>0||this.holdBackStepCount>0))return;let t=e.targetLatency;if(this.holdBackBase<0&&typeof t==`number`&&t>0&&(this.holdBackBase=t),this.holdBackBase<0)return;let n=Wn();if(!(n>=Hn))return;let r=typeof t==`number`&&t>0?t:this.holdBackBase,i=Math.min(this.holdBackCeiling(e),this.holdBackBase+Z);i>r&&(this.holdBackStepCount=1,this.moveHoldBack(e,r,i,`connection-rtt`,`connection rtt ${n} ms`))}holdBackCeiling(e){let t=this.deps.adaptiveHoldBackCeiling,n=typeof t==`number`&&Number.isFinite(t)?t:Vn,r=typeof e.config.liveMaxLatencyDuration==`number`?e.config.liveMaxLatencyDuration:e.maxLatency;return r>1?Math.min(n,r-1):n}sampleHoldBack(e){if(!this.holdBackEnabled||typeof document<`u`&&document.hidden)return;let t=e.frag?.type;if(t!==`main`&&t!==`audio`)return;let n=e.part?e.part.duration:this.detectedLowLatency?0:e.frag?.duration;if(typeof n!=`number`||!(n>0))return;let r=Un(e)?.loading;if(!r||!(r.start>0)||!(r.end>0))return;let i=r.first>r.start?r.first:r.end,a=Math.max(0,i-r.start)/(n*1e3);this.holdBackSamples.push({t:Date.now(),ratio:a}),this.holdBackSamples.length>256&&this.holdBackSamples.shift()}adaptHoldBack(){if(!this.holdBackEnabled)return;let e=this.hls;if(!e||this.endedEmitted||!this.sawLive||this.chaseSuspended||this.loadSuspended||this.offlineHold||typeof document<`u`&&document.hidden){this.holdBackSlowTicks=0,this.holdBackFastSince=0,this.holdBackSamples=[];return}let t=Date.now(),n=t-Pn,r=this.holdBackSamples,i=0;for(;i<r.length&&r[i].t<n;)i+=1;i>0&&r.splice(0,i);let a=e.targetLatency;if(typeof a!=`number`||!(a>0))return;this.holdBackBase<0&&(this.holdBackBase=a);let o=this.holdBackBase,s=this.holdBackCeiling(e);if(r.length<Fn){this.holdBackSlowTicks=0;return}let c=r.map(e=>e.ratio).sort((e,t)=>e-t),l=X(c,95),u=X(c,50),d=Math.round(l*1e3);if(l>=In&&u>=Ln){if(this.holdBackFastSince=0,this.holdBackSlowTicks+=1,this.holdBackSlowTicks<zn)return;this.holdBackSlowTicks=0;let t=Math.ceil((s-o)/Z),n=Math.ceil((a-o)/Z-1e-9);if(n>this.holdBackStepCount&&(this.holdBackStepCount=n),this.holdBackStepCount>=t)return;this.holdBackStepCount+=1;let r=Math.min(s,o+this.holdBackStepCount*Z);if(r<=a)return;this.moveHoldBack(e,a,r,`slow-fetches`,`part fetches slow (first byte p50 ${Math.round(u*1e3)} / p95 ${d} ms per 1 s of media)`);return}if(this.holdBackSlowTicks=0,l>=Rn){this.holdBackFastSince=0;return}if(this.holdBackFastSince===0){this.holdBackFastSince=t;return}if(t-this.holdBackFastSince<Bn||(this.holdBackFastSince=t,this.holdBackStepCount===0||a!==this.holdBackApplied))return;--this.holdBackStepCount;let f=Math.max(o,o+this.holdBackStepCount*Z);f>=a||this.moveHoldBack(e,a,f,`fast-fetches`,`part fetches fast again (p95 first byte ${d} ms per 1 s of media)`)}moveHoldBack(e,t,n,r,i){console.info(`havik-player: ${i}; live target ${t.toFixed(1)}s → ${n.toFixed(1)}s`),this.holdBackApplied=n,this.holdBackSteps+=1,e.targetLatency=n,this.deps.emit({type:`livetargetchange`,change:{targetSeconds:n,previousSeconds:t,reason:r}})}suspendChasing(){let e=this.hls;if(!e)return;this.chaseSuspended=!0,this.savedLiveMaxLatency=e.config.liveMaxLatencyDuration,this.savedMaxSyncRate=e.config.maxLiveSyncPlaybackRate,e.config.liveMaxLatencyDuration=2**53-1,e.config.maxLiveSyncPlaybackRate=1;let{video:t}=this.deps,n=this.savedMaxSyncRate;t.playbackRate>1&&typeof n==`number`&&t.playbackRate<=n&&(t.playbackRate=1)}resumeChasing(){this.chaseSuspended=!1;let e=this.hls;e&&(e.config.liveMaxLatencyDuration=this.savedLiveMaxLatency,e.config.maxLiveSyncPlaybackRate=this.savedMaxSyncRate)}emitEnded(e){this.endedEmitted||(this.endedEmitted=!0,this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.deps.emit({type:`ended`,reason:e}))}stop(){this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.clearKick(),this.stopped=!0,this.loadSuspended=!1,this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null);try{this.hls?.stopLoad()}catch{}try{this.deps.video.pause()}catch{}}startEstimate(){return this.deps.rememberBandwidth===!1?Yt:Ve()??Yt}maybeRememberBandwidth(e){if(this.deps.rememberBandwidth===!1||this.bwFragsLoaded<Xt)return;let t=Date.now();if(!e&&t-this.bwSavedAt<Zt)return;let n=this.hls?.bandwidthEstimate;typeof n!=`number`||!Number.isFinite(n)||n<=0||(this.bwSavedAt=t,He(n))}destroy(){if(this.maybeRememberBandwidth(!0),this.detachFrames?.(),this.detachFrames=null,this.prefetch?.destroy(),this.prefetch=null,this.clearRecoveryReset(),this.capTimer&&=(clearTimeout(this.capTimer),null),this.capObserver&&=(this.capObserver.disconnect(),null),this.unwatchDprChanges(),this.endWatchdog&&=(clearInterval(this.endWatchdog),null),this.onVisibility&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),this.onVisibility=null),this.onOffline&&typeof window<`u`&&(window.removeEventListener(`offline`,this.onOffline),this.onOffline=null),this.onOnline&&typeof window<`u`&&(window.removeEventListener(`online`,this.onOnline),this.onOnline=null),this.onSeeking&&=(this.deps.video.removeEventListener(`seeking`,this.onSeeking),null),this.onTimeUpdate&&=(this.deps.video.removeEventListener(`timeupdate`,this.onTimeUpdate),null),this.onPause&&=(this.deps.video.removeEventListener(`pause`,this.onPause),null),this.onPlay&&=(this.deps.video.removeEventListener(`play`,this.onPlay),null),this.pauseSuspendTimer&&=(clearTimeout(this.pauseSuspendTimer),null),this.networkRetryTimer&&=(clearTimeout(this.networkRetryTimer),null),this.licenseRetryTimer&&=(clearTimeout(this.licenseRetryTimer),null),this.hls){try{this.hls.destroy()}catch(e){console.warn(`havik-player: hls.js destroy() threw during teardown`,e)}this.hls=null}}clearRecoveryReset(){this.recoveryResetTimer&&=(clearTimeout(this.recoveryResetTimer),null)}scheduleLicenseRetry(e){if(e.details!==c.default.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED&&e.details!==c.default.ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED)return!1;let t=e.response?.code??0;if(!(t===0||t===408||t===429||t>=500)||this.licenseRecoveries>=en)return!1;this.licenseRecoveries+=1;let n=Math.min(8e3,500*2**(this.licenseRecoveries-1));return this.licenseRetryTimer=setTimeout(()=>{this.licenseRetryTimer=null,this.rebuildInstance(`license retry`)},n),!0}rebuildInstance(e){if(this.hls){try{this.hls.destroy()}catch(t){console.warn(`havik-player: hls.js destroy() threw during ${e}`,t)}this.hls=null,this.startHls(),this.armFrameDropGrace()}}onError(e){if(e.type===c.default.ErrorTypes.NETWORK_ERROR&&String(e.details??``).startsWith(`frag`)&&(this.requestErrors+=1),!e.fatal)return;let t=this.hls;if(t){if(this.clearRecoveryReset(),e.type===c.default.ErrorTypes.KEY_SYSTEM_ERROR){if(this.scheduleLicenseRetry(e))return;this.deps.emit({type:`error`,error:this.toError(e,`DRM`),fatal:!0,detail:e.details});return}if(e.type===c.default.ErrorTypes.NETWORK_ERROR){if(!V()&&(e.response?.code??0)===0){this.offlineHold=!0,this.networkRetryTimer&&=(clearTimeout(this.networkRetryTimer),null);return}if(this.networkRecoveries<$t){this.networkRecoveries+=1;let e=Math.min(8e3,1e3*2**(this.networkRecoveries-1));this.networkRetryTimer=setTimeout(()=>{this.networkRetryTimer=null,this.hls&&this.hls.startLoad()},e);return}this.deps.emit({type:`error`,error:this.toError(e,`NETWORK`),fatal:!0,detail:e.details});return}if(e.type===c.default.ErrorTypes.MEDIA_ERROR){if(this.mediaRecoveries<Qt){this.mediaRecoveries+=1,t.recoverMediaError();return}this.deps.emit({type:`error`,error:this.toError(e),fatal:!0,detail:e.details});return}this.deps.emit({type:`error`,error:this.toError(e),fatal:!0,detail:e.details})}}toError(e,t=`PLAYBACK`){let n=e.response?.code??0,r=e.details??e.type,i=e.reason??e.error?.message??``,a=t===`DRM`&&n===403&&e.details===c.default.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED?d(Ft(e.networkDetails)):void 0;return new l(t===`DRM`?f(n,a):t===`NETWORK`&&n===0?`NETWORK`:n===401?`UNAUTHORIZED`:n===403?`FORBIDDEN`:`INTERNAL`,n,`${t} error: ${r}${i?` (${i})`:``}`,a?{serverCode:a}:void 0)}},Jn=15e3,Yn=6e5,Xn=3e5,Zn=100,Q=1,Qn=1e3,$n=3e4,er=1e3,tr={inline:`PRESENTATION_INLINE`,fullscreen:`PRESENTATION_FULLSCREEN`,pip:`PRESENTATION_PIP`},nr={widevine:`KEY_SYSTEM_WIDEVINE`,fairplay:`KEY_SYSTEM_FAIRPLAY`,none:`KEY_SYSTEM_NONE`},rr=new Set([`INVALID_URN`,`NOT_FOUND`,`GEO_DENIED`,`GONE`,`TOO_EARLY`,`UNAVAILABLE`,`UNAUTHORIZED`,`FORBIDDEN`,`RATE_LIMITED`,`TIMEOUT`]),ir={idle:`PLAYER_STATE_IDLE`,waiting:`PLAYER_STATE_WAITING`,loading:`PLAYER_STATE_LOADING`,playing:`PLAYER_STATE_PLAYING`,buffering:`PLAYER_STATE_BUFFERING`,paused:`PLAYER_STATE_PAUSED`,ended:`PLAYER_STATE_ENDED`,error:`PLAYER_STATE_ERROR`};function ar(e){try{let t=new URL(e),[n,...r]=t.hostname.split(`.`);return!n||r.length===0||n!==`feed`&&!n.startsWith(`feed-`)?void 0:(t.hostname=[n.replace(/^feed/,`beacons`),...r].join(`.`),t.pathname=``,t.search=``,t.origin)}catch{return}}var or=(e,t)=>e.replace(/\/$/,``).toLowerCase()===t.replace(/\/$/,``).toLowerCase(),sr=new Set,cr=new Set,lr=new Set,ur=e=>`this page's Content-Security-Policy blocks QoE beacons. Add ${e} to connect-src; until then none are sent.`;function dr(e){if(e.disposition!==`enforce`||e.effectiveDirective!==`connect-src`)return;let t;try{let n=new URL(e.blockedURI);t=n.origin+n.pathname}catch{return}if(sr.has(t)&&!cr.has(t)){cr.add(t),b(ur(new URL(t).origin));for(let e of lr)e.noteCspBlocked()}}function fr(e,t){return b(t,e),{disabledReason:t}}function pr(e,t,n){if(n)return t&&!or(t,n)&&b(`analytics.endpoint "${t}" ignored; the server named "${n}".`),{endpoint:n};if(t)return{endpoint:t};if(t!==void 0)return fr(`empty-endpoint`,`analytics is disabled: no QoE beacons will be sent. analytics.endpoint was supplied but empty. Pass a real beacons origin, analytics: { endpoint: 'https://beacons[-dev].<domain>' }, or omit the option to derive it from baseUrl (or analytics: false to opt out).`);let r=ar(e);if(r)return{endpoint:r};let i;try{i=new URL(e).hostname||e}catch{i=e}return fr(i,`analytics is disabled: no QoE beacons will be sent. The beacons endpoint cannot be derived from the baseUrl host "${i}" — the convention is feed[-dev].<domain> → beacons[-dev].<domain>. Pass an explicit endpoint, analytics: { endpoint: 'https://beacons[-dev].<domain>' }, to createPlayer (or analytics: false to opt out deliberately).`)}var mr=class{opts;url;cspKey;now;seq=0;pending=[];timer=null;endedFlag=!1;lastBytes=0;lastPlaylistBytes=0;lastDropped=0;lastSwitches=0;playingSinceMs=null;hiddenSinceMs=null;playingTotalMs=0;hiddenTotalMs=0;lastHbPlayingMs=0;lastHbHiddenMs=0;lastHbRebufferMs=0;lastHbRebufferCount=0;lastHbActiveMs=0;rebufferCount=0;rebufferTotalMs=0;bufferingSinceMs=null;isBuffering=!1;errorCount=0;seekCount=0;pauseCount=0;isPlaying=!1;isHidden=!1;isMuted=!1;activeSinceMs=null;activeTotalMs=0;mutedSinceMs=null;mutedTotalMs=0;lastHbMutedMs=0;volumeChanges=0;muteChanges=0;presentation=`inline`;presentationSinceMs;fullscreenTotalMs=0;pipTotalMs=0;waitingSinceMs=null;waitingTotalMs=0;firstAudioMs=0;timeToFirstStallMs=0;lastStallMs=0;lastErrorMs=0;lastSeekMs=-1;stallIsSeekInduced=!1;lastErrorStage=null;sawFirstBytes=!1;mediaInfoSignature=``;lastUpshifts=0;lastDownshifts=0;lastDecoded=0;lastRequestCount=0;lastRequestErrors=0;pendingStart=null;firstFlushTimer=null;idleTimer=null;lastTickMs=0;bornMs;startupAnchorMs;startupTimeMs=0;manifestLoadMs=0;firstFragLoadMs=0;firstPlaylistMs=0;drmSetupMs=0;onPagehide=()=>this.end(`END_REASON_PAGEHIDE`);cspBlockedNoted=!1;onFreeze=()=>{this.endedFlag||this.flush(!0)};onResume=()=>this.checkSuspension(this.now());onVisibility=()=>{typeof document>`u`||(document.visibilityState===`hidden`?(this.hiddenSinceMs===null&&(this.hiddenSinceMs=this.now()),this.isHidden=!0):(this.hiddenSinceMs!==null&&(this.hiddenTotalMs+=this.now()-this.hiddenSinceMs,this.hiddenSinceMs=null),this.isHidden=!1),this.syncActive(),this.syncBuffering())};constructor(e){this.opts={...e,heartbeatMs:e.heartbeatMs??Jn,idleMs:e.idleMs??Yn},this.url=`${e.endpoint.replace(/\/$/,``)}/v1/beacons`;try{let e=new URL(this.url);this.cspKey=e.origin+e.pathname}catch{this.cspKey=void 0}this.now=e.now??(()=>Date.now()),this.bornMs=this.now(),this.presentationSinceMs=this.bornMs,this.startupAnchorMs=this.bornMs}start(){if(this.endedFlag)return;let e={player:this.opts.player,sdkVersion:this.opts.sdkVersion,...this.opts.environment};this.pendingStart=e,this.enqueue({sessionStart:e}),this.firstFlushTimer=setTimeout(()=>this.flush(),Qn),this.lastTickMs=this.now(),this.timer=setInterval(()=>this.heartbeat(),this.opts.heartbeatMs),typeof window<`u`&&window.addEventListener(`pagehide`,this.onPagehide),typeof document<`u`&&(document.addEventListener(`visibilitychange`,this.onVisibility),document.addEventListener(`freeze`,this.onFreeze),document.addEventListener(`resume`,this.onResume),this.cspKey&&sr.add(this.cspKey),document.addEventListener(`securitypolicyviolation`,dr),lr.add(this),this.noteCspBlocked(),this.onVisibility())}checkSuspension(e){if(this.endedFlag||!this.opts.idleMs)return!1;let t=Math.max(this.opts.idleMs,Xn);return this.lastTickMs>0&&e-this.lastTickMs>=t?(this.endIdle(this.lastTickMs),!0):(this.lastTickMs=e,!1)}syncIdle(e){e===`paused`&&this.opts.idleMs?this.idleTimer===null&&(this.idleTimer=setTimeout(()=>{this.idleTimer=null,this.endIdle()},this.opts.idleMs)):this.idleTimer!==null&&(clearTimeout(this.idleTimer),this.idleTimer=null)}endIdle(e){this.endedFlag||(this.end(`END_REASON_IDLE`,e),this.opts.onIdle?.())}noteStateChange(e,t,n,r){if(this.endedFlag||e===t)return;let i=this.now();if(t===`playing`?(this.playingSinceMs===null&&(this.playingSinceMs=i),this.startupTimeMs===0&&(this.startupTimeMs=Math.max(Q,i-this.startupAnchorMs)),this.firstAudioMs===0&&!this.isMuted&&(this.firstAudioMs=Math.max(Q,i-this.startupAnchorMs)),this.isMuted&&this.mutedSinceMs===null&&(this.mutedSinceMs=i)):this.playingSinceMs!==null&&(this.playingTotalMs+=i-this.playingSinceMs,this.playingSinceMs=null,this.mutedSinceMs!==null&&(this.mutedTotalMs+=i-this.mutedSinceMs,this.mutedSinceMs=null)),this.isPlaying=t===`playing`,this.syncActive(),t===`waiting`?this.waitingSinceMs=i:this.waitingSinceMs!==null&&(this.waitingTotalMs+=i-this.waitingSinceMs,this.waitingSinceMs=null),t===`buffering`&&e===`playing`){this.stallIsSeekInduced=this.seekInduced(i);let e=!this.isHidden&&!this.stallIsSeekInduced;e&&(this.rebufferCount+=1),this.isBuffering=!0,this.lastStallMs=i,e&&this.timeToFirstStallMs===0&&(this.timeToFirstStallMs=Math.max(Q,Math.round(this.playingTotalMs)))}else e===`buffering`&&(this.isBuffering=!1,this.stallIsSeekInduced=!1);this.syncBuffering(),t===`paused`&&(this.pauseCount+=1),this.syncIdle(t);let a={fromState:ir[e]??`PLAYER_STATE_UNSPECIFIED`,toState:ir[t]??`PLAYER_STATE_UNSPECIFIED`,presentation:tr[this.presentation]},o=this.causeOf(e,t,i);o&&(a.cause=o),n>0&&(a.positionMs=Math.round(n)),r&&(a.renditionHeight=r),this.enqueue({stateChange:a})}seekInduced(e){return this.lastSeekMs>=0&&e-this.lastSeekMs<er}causeOf(e,t,n){if(t===`error`)return`TRANSITION_CAUSE_ERROR`;if(t===`buffering`)return this.seekInduced(n)?`TRANSITION_CAUSE_SEEK`:`TRANSITION_CAUSE_NETWORK_STALL`;if(t===`paused`||t===`playing`&&e===`paused`)return`TRANSITION_CAUSE_USER`}syncActive(e=this.now()){let t=this.isPlaying&&!this.isHidden&&!this.isMuted;t&&this.activeSinceMs===null?this.activeSinceMs=e:!t&&this.activeSinceMs!==null&&(this.activeTotalMs+=e-this.activeSinceMs,this.activeSinceMs=null)}syncBuffering(){let e=this.isBuffering&&!this.isHidden&&!this.stallIsSeekInduced;e&&this.bufferingSinceMs===null?this.bufferingSinceMs=this.now():!e&&this.bufferingSinceMs!==null&&(this.rebufferTotalMs+=this.now()-this.bufferingSinceMs,this.bufferingSinceMs=null)}closePresentation(e=this.now()){let t=e-this.presentationSinceMs;this.presentation===`fullscreen`?this.fullscreenTotalMs+=t:this.presentation===`pip`&&(this.pipTotalMs+=t),this.presentationSinceMs=e}noteAutoplay(e){this.pendingStart&&(this.pendingStart.autoplay=e)}noteEnvironment(e){this.pendingStart&&Object.assign(this.pendingStart,e)}seedVolume(e,t){this.endedFlag||(this.isMuted=e||t===0,this.isMuted&&this.isPlaying&&this.mutedSinceMs===null&&(this.mutedSinceMs=this.now()),this.syncActive())}noteVolume(e,t){if(this.endedFlag)return;let n=e||t===0;if(n===this.isMuted){this.volumeChanges+=1;return}this.muteChanges+=1;let r=this.now();n?this.isPlaying&&this.mutedSinceMs===null&&(this.mutedSinceMs=r):(this.mutedSinceMs!==null&&(this.mutedTotalMs+=r-this.mutedSinceMs,this.mutedSinceMs=null),this.firstAudioMs===0&&this.isPlaying&&(this.firstAudioMs=Math.max(Q,r-this.startupAnchorMs))),this.isMuted=n,this.syncActive()}notePresentation(e){this.endedFlag||e===this.presentation||(this.closePresentation(),this.presentation=e)}notePlayIntent(){this.endedFlag||this.startupTimeMs>0||(this.startupAnchorMs=this.now(),this.manifestLoadMs>0&&(this.manifestLoadMs=Q),this.firstPlaylistMs>0&&(this.firstPlaylistMs=Q),this.firstFragLoadMs>0&&(this.firstFragLoadMs=Q),this.drmSetupMs>0&&(this.drmSetupMs=Q))}noteReady(){this.manifestLoadMs===0&&(this.manifestLoadMs=Math.max(Q,this.now()-this.startupAnchorMs))}noteFirstPlaylist(){this.firstPlaylistMs===0&&(this.firstPlaylistMs=Math.max(Q,this.now()-this.startupAnchorMs))}noteDrmReady(){this.drmSetupMs===0&&(this.drmSetupMs=Math.max(Q,this.now()-this.startupAnchorMs))}noteFirstBytes(){this.sawFirstBytes=!0,this.firstFragLoadMs===0&&(this.firstFragLoadMs=Math.max(Q,this.now()-this.startupAnchorMs))}noteSeek(){this.endedFlag||(this.seekCount+=1,this.lastSeekMs=this.now())}noteError(e,t,n,r,i,a){if(this.endedFlag)return;this.errorCount+=1,this.lastErrorMs=this.now();let o={code:e};t&&(o.detail=t),n&&(o.fatal=!0),r>0&&(o.httpStatus=r),i>0&&(o.positionMs=Math.round(i));let s=this.stageOf(e,t,a);o.stage=s,this.lastErrorStage=s;let c=this.safeSample()?.cdnHost;c&&(o.cdnHost=c),this.enqueue({error:o}),this.flush()}stageOf(e,t,n){let r=n??``;if(r!==``)return/^fragLoad/i.test(r)?this.sawFirstBytes?`ERROR_STAGE_SEGMENT`:`ERROR_STAGE_FIRST_SEGMENT`:/^(manifest|level|audioTrack|subtitleTrack)/i.test(r)?`ERROR_STAGE_MANIFEST`:/key|licen[cs]e/i.test(r)?`ERROR_STAGE_DRM`:/parsing|append|buffer|remux|decrypt|media/i.test(r)?`ERROR_STAGE_DECODE`:`ERROR_STAGE_OTHER`;if(e===`DRM_CLIENT`||e===`DRM_DEVICE_REVOKED`)return`ERROR_STAGE_DRM`;if(rr.has(e))return`ERROR_STAGE_RESOLVE`;let i=t??``;return/frag|segment/i.test(i)?this.sawFirstBytes?`ERROR_STAGE_SEGMENT`:`ERROR_STAGE_FIRST_SEGMENT`:/manifest|level|playlist/i.test(i)?`ERROR_STAGE_MANIFEST`:/key|licen[cs]e/i.test(i)?`ERROR_STAGE_DRM`:/buffer|decode|media|append/i.test(i)?`ERROR_STAGE_DECODE`:`ERROR_STAGE_OTHER`}noteEnded(){this.end(`END_REASON_ENDED`)}noteDestroyed(){this.end(`END_REASON_STOPPED`)}noteFatal(){this.end(`END_REASON_FATAL_ERROR`)}heartbeat(){if(this.endedFlag)return;let e=this.now();if(this.checkSuspension(e)||this.cspBlocked())return;let t=this.opts.sample(),n=this.playingTotalMs;this.playingSinceMs!==null&&(n+=e-this.playingSinceMs);let r=this.hiddenTotalMs;this.hiddenSinceMs!==null&&(r+=e-this.hiddenSinceMs);let i=this.rebufferTotalMs;this.bufferingSinceMs!==null&&(i+=e-this.bufferingSinceMs);let a=this.activeTotalMs;this.activeSinceMs!==null&&(a+=e-this.activeSinceMs);let o={},s=t.bytesLoaded??0;s>this.lastBytes&&(o.bytesDownloadedDelta=s-this.lastBytes),this.lastBytes=s;let c=t.playlistBytesLoaded??0;c>this.lastPlaylistBytes&&(o.playlistBytesDelta=c-this.lastPlaylistBytes),this.lastPlaylistBytes=c;let l=t.droppedFrames??0;l>this.lastDropped&&(o.droppedFramesDelta=l-this.lastDropped),this.lastDropped=l;let u=t.renditionSwitches??0;u>this.lastSwitches&&(o.renditionSwitchesDelta=u-this.lastSwitches),this.lastSwitches=u,n>this.lastHbPlayingMs&&(o.playingMsDelta=Math.round(n-this.lastHbPlayingMs)),this.lastHbPlayingMs=n,r>this.lastHbHiddenMs&&(o.hiddenMsDelta=Math.round(r-this.lastHbHiddenMs)),this.lastHbHiddenMs=r,i>this.lastHbRebufferMs&&(o.rebufferMsDelta=Math.round(i-this.lastHbRebufferMs)),this.lastHbRebufferMs=i,this.rebufferCount>this.lastHbRebufferCount&&(o.rebufferCountDelta=this.rebufferCount-this.lastHbRebufferCount),this.lastHbRebufferCount=this.rebufferCount,a>this.lastHbActiveMs&&(o.activeMsDelta=Math.round(a-this.lastHbActiveMs)),this.lastHbActiveMs=a,typeof t.latencySeconds==`number`&&(o.latencyMs=Math.round(t.latencySeconds*1e3)),typeof t.targetLatencySeconds==`number`&&(o.targetLatencyMs=Math.round(t.targetLatencySeconds*1e3)),typeof t.bandwidthKbps==`number`&&(o.bandwidthEstKbps=t.bandwidthKbps),typeof t.levelHeight==`number`&&(o.renditionHeight=t.levelHeight),typeof t.renditionBitrateKbps==`number`&&(o.renditionBitrateKbps=t.renditionBitrateKbps),t.atLiveEdge===!0&&(o.atLiveEdge=!0),typeof t.bufferedMs==`number`&&t.bufferedMs>0&&(o.bufferedMs=Math.round(t.bufferedMs)),o.playerState=ir[t.state]??`PLAYER_STATE_UNSPECIFIED`;let d=this.mutedTotalMs;this.mutedSinceMs!==null&&(d+=e-this.mutedSinceMs),d>this.lastHbMutedMs&&(o.mutedMsDelta=Math.round(d-this.lastHbMutedMs)),this.lastHbMutedMs=d;let f=t.upshifts??0;f>this.lastUpshifts&&(o.upshiftsDelta=f-this.lastUpshifts),this.lastUpshifts=f;let p=t.downshifts??0;p>this.lastDownshifts&&(o.downshiftsDelta=p-this.lastDownshifts),this.lastDownshifts=p;let m=t.decodedFrames??0;m>this.lastDecoded&&(o.decodedFramesDelta=m-this.lastDecoded),this.lastDecoded=m;let h=t.requestErrors??0;h>this.lastRequestErrors&&(o.requestErrorsDelta=h-this.lastRequestErrors),this.lastRequestErrors=h;let g=t.requestCount??0,_=g-this.lastRequestCount;if(this.lastRequestCount=g,_>0){o.requestCountDelta=_;let e=t.requestTimesMs??[],n=e.slice(Math.max(0,e.length-_)).sort((e,t)=>e-t);n.length>0&&(o.requestTimeP50Ms=X(n,50),o.requestTimeP95Ms=X(n,95))}typeof t.latencySeconds==`number`&&typeof t.targetLatencySeconds==`number`&&(o.driftMs=Math.round((t.latencySeconds-t.targetLatencySeconds)*1e3)),typeof t.playbackRate==`number`&&t.playbackRate>0&&(o.playbackRate=t.playbackRate),t.qualityPinned===!0&&(o.qualityPinned=!0),t.cdnHost&&(o.cdnHost=t.cdnHost),this.maybeEmitMediaInfo(t),this.enqueue({heartbeat:o}),this.flush(),s>0&&this.noteFirstBytes()}maybeEmitMediaInfo(e){if(!(e.videoCodec??e.keySystem??e.ladderHeights))return;let t={};e.videoCodec&&(t.videoCodec=e.videoCodec),e.audioCodec&&(t.audioCodec=e.audioCodec),e.keySystem&&(t.keySystem=nr[e.keySystem]),e.drmSecurityLevel&&(t.drmSecurityLevel=e.drmSecurityLevel),e.ladderHeights?.length&&(t.ladderHeights=e.ladderHeights),e.ladderTopBitrateKbps&&(t.ladderTopBitrateKbps=e.ladderTopBitrateKbps),e.lowLatency&&(t.lowLatency=!0);let n=JSON.stringify(t);n!==this.mediaInfoSignature&&(this.mediaInfoSignature=n,this.enqueue({mediaInfo:t}))}end(e,t){if(this.endedFlag)return;this.endedFlag=!0,lr.delete(this);let n=t??this.now();this.playingSinceMs!==null&&(this.playingTotalMs+=n-this.playingSinceMs,this.playingSinceMs=null),this.hiddenSinceMs!==null&&(this.hiddenTotalMs+=n-this.hiddenSinceMs,this.hiddenSinceMs=null),this.bufferingSinceMs!==null&&(this.rebufferTotalMs+=n-this.bufferingSinceMs,this.bufferingSinceMs=null),this.mutedSinceMs!==null&&(this.mutedTotalMs+=n-this.mutedSinceMs,this.mutedSinceMs=null),this.waitingSinceMs!==null&&(this.waitingTotalMs+=n-this.waitingSinceMs,this.waitingSinceMs=null),this.isPlaying=!1,this.syncActive(n),this.closePresentation(n),this.firstFlushTimer&&=(clearTimeout(this.firstFlushTimer),null),this.timer&&=(clearInterval(this.timer),null),this.idleTimer&&=(clearTimeout(this.idleTimer),null),typeof window<`u`&&window.removeEventListener(`pagehide`,this.onPagehide),typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onVisibility),document.removeEventListener(`freeze`,this.onFreeze),document.removeEventListener(`resume`,this.onResume));let r=this.safeSample();r&&this.maybeEmitMediaInfo(r);let i={reason:e},a=r?.bytesLoaded??this.lastBytes;a>0&&(i.bytesDownloadedTotal=a),this.playingTotalMs>0&&(i.watchTimeMs=Math.round(this.playingTotalMs)),this.rebufferCount>0&&(i.rebufferCount=this.rebufferCount),this.rebufferTotalMs>0&&(i.rebufferTimeMs=Math.round(this.rebufferTotalMs)),this.startupTimeMs>0&&(i.startupTimeMs=Math.round(this.startupTimeMs)),this.manifestLoadMs>0&&(i.manifestLoadMs=Math.round(this.manifestLoadMs)),this.firstPlaylistMs>0&&(i.firstPlaylistMs=Math.round(this.firstPlaylistMs)),this.firstFragLoadMs>0&&(i.firstFragLoadMs=Math.round(this.firstFragLoadMs)),this.drmSetupMs>0&&(i.drmSetupMs=Math.round(this.drmSetupMs));let o=r?.licenseTimeMs??0;o>0&&(i.licenseTimeMs=Math.round(o));let s=r?.droppedFrames??this.lastDropped;s>0&&(i.droppedFramesTotal=s),this.errorCount>0&&(i.errorCount=this.errorCount),this.hiddenTotalMs>0&&(i.hiddenTimeMs=Math.round(this.hiddenTotalMs)),this.seekCount>0&&(i.seekCount=this.seekCount),this.pauseCount>0&&(i.pauseCount=this.pauseCount),this.firstAudioMs>0&&(i.firstAudioMs=Math.round(this.firstAudioMs)),this.waitingTotalMs>0&&(i.waitingForLiveMs=Math.round(this.waitingTotalMs)),this.timeToFirstStallMs>0&&(i.timeToFirstStallMs=Math.round(this.timeToFirstStallMs));let c=r?.positionMs??0;c>0&&(i.exitPositionMs=Math.round(c)),this.activeTotalMs>0&&(i.activeWatchTimeMs=Math.round(this.activeTotalMs)),this.mutedTotalMs>0&&(i.mutedTimeMs=Math.round(this.mutedTotalMs));let l=e!==`END_REASON_ENDED`;l&&this.lastStallMs>0&&n-this.lastStallMs<=$n&&(i.abandonAfterStallMs=Math.max(Q,Math.round(n-this.lastStallMs))),l&&this.lastErrorMs>0&&n-this.lastErrorMs<=$n&&(i.abandonAfterErrorMs=Math.max(Q,Math.round(n-this.lastErrorMs))),this.fullscreenTotalMs>0&&(i.fullscreenTimeMs=Math.round(this.fullscreenTotalMs)),this.pipTotalMs>0&&(i.pipTimeMs=Math.round(this.pipTotalMs)),this.volumeChanges>0&&(i.volumeChanges=this.volumeChanges),this.muteChanges>0&&(i.muteChanges=this.muteChanges);let u=r?.decodedFrames??this.lastDecoded;u>0&&(i.decodedFramesTotal=u),e===`END_REASON_STOPPED`&&this.startupTimeMs===0&&this.lastErrorStage===null&&(e=`END_REASON_ABORTED`,i.reason=e),this.startupTimeMs===0&&e!==`END_REASON_ABORTED`&&(i.failedStage=this.lastErrorStage??(this.manifestLoadMs===0?`ERROR_STAGE_MANIFEST`:this.firstFragLoadMs===0?`ERROR_STAGE_FIRST_SEGMENT`:`ERROR_STAGE_OTHER`)),this.pending.push(this.wrap({sessionEnd:i})),this.flush(e===`END_REASON_PAGEHIDE`)}safeSample(){try{return this.opts.sample()}catch{return null}}wrap(e){return this.seq+=1,{sid:this.opts.sid,clientTime:new Date(this.now()).toISOString(),seq:this.seq,...e}}noteCspBlocked(){this.cspBlockedNoted||this.endedFlag||!this.cspBlocked()||(this.cspBlockedNoted=!0,this.opts.onBlocked?.(ur(new URL(this.url).origin)))}cspBlocked(){return!!this.cspKey&&cr.has(this.cspKey)}enqueue(e){if(!this.cspBlocked())for(this.pending.push(this.wrap(e));this.pending.length>Zn;){let e=this.pending.findIndex(e=>e.heartbeat||e.stateChange);this.pending.splice(e>=0?e:0,1)}}flush(e=!1){if(this.firstFlushTimer&&=(clearTimeout(this.firstFlushTimer),null),this.pendingStart=null,this.pending.length===0)return;if(this.cspBlocked()){this.pending=[];return}let t=JSON.stringify({beacons:this.pending});if(this.pending=[],e){let e=this.opts.sendBeacon??(typeof navigator<`u`&&navigator.sendBeacon?navigator.sendBeacon.bind(navigator):void 0);if(e&&e(this.url,t))return}let n=this.opts.fetchFn??(typeof fetch<`u`?fetch:void 0);n&&n(this.url,{method:`POST`,headers:{"content-type":`application/json`},body:t,keepalive:!0}).catch(()=>{})}};function hr(){if(typeof window>`u`)return{integration:`INTEGRATION_KIND_SDK`};let e;try{e=window.top!==window.self}catch{e=!0}let t=window.location?.origin;if(!e)return{host:t&&t!==`null`?t:void 0,integration:`INTEGRATION_KIND_SDK`};let n;try{let e=window.location.ancestorOrigins;e&&e.length>0&&(n=e[e.length-1]??void 0),!n&&typeof document<`u`&&document.referrer&&(n=new URL(document.referrer).origin)}catch{n=void 0}return n===`null`&&(n=void 0),{host:n,integration:`INTEGRATION_KIND_IFRAME`}}function gr(){if(typeof navigator>`u`)return`DEVICE_CLASS_OTHER`;let e=navigator.userAgentData,t=e?.platform??``;if(/tv|tizen|webos/i.test(t))return`DEVICE_CLASS_TV`;let n=typeof screen<`u`?Math.min(screen.width,screen.height):0;return e?.mobile??(typeof navigator.maxTouchPoints==`number`&&navigator.maxTouchPoints>1&&n>0&&n<900)?n>=600?`DEVICE_CLASS_TABLET`:`DEVICE_CLASS_PHONE`:e||n>=900||/mac|win|linux|chrome os/i.test(t)?`DEVICE_CLASS_DESKTOP`:`DEVICE_CLASS_OTHER`}function _r(){let e=typeof navigator<`u`?navigator.connection:void 0;if(!e)return{connectionType:`CONNECTION_TYPE_UNKNOWN`};let t={wifi:`CONNECTION_TYPE_WIFI`,cellular:`CONNECTION_TYPE_CELLULAR`,ethernet:`CONNECTION_TYPE_ETHERNET`},n={"slow-2g":`RADIO_ACCESS_ESTIMATED_SLOW_2G`,"2g":`RADIO_ACCESS_ESTIMATED_2G`,"3g":`RADIO_ACCESS_ESTIMATED_3G`,"4g":`RADIO_ACCESS_ESTIMATED_4G`},r=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)?e[t]:void 0,i={connectionType:e.type?r(t,e.type)??`CONNECTION_TYPE_OTHER`:`CONNECTION_TYPE_UNKNOWN`};if(e.effectiveType){let t=r(n,e.effectiveType);t&&(i.radioAccess=t)}return typeof e.downlink==`number`&&e.downlink>0&&(i.downlinkKbps=Math.round(e.downlink*1e3)),typeof e.rtt==`number`&&e.rtt>0&&(i.rttMs=Math.round(e.rtt)),e.saveData&&(i.saveData=!0),i}function vr(e){let t=hr(),n={deviceClass:gr(),integration:t.integration,..._r()};t.host&&(n.host=t.host),typeof screen<`u`&&screen.width>0&&(n.screenWidth=screen.width,n.screenHeight=screen.height),typeof window<`u`&&window.devicePixelRatio>0&&(n.devicePixelRatio=Math.round(window.devicePixelRatio*100)/100);let r=e.getBoundingClientRect?.();return r&&r.width>0&&(n.viewportWidth=Math.round(r.width),n.viewportHeight=Math.round(r.height)),n}async function yr(){let e=typeof navigator<`u`?navigator.userAgentData:void 0;if(!e?.getHighEntropyValues)return{};try{let t=await e.getHighEntropyValues([`model`,`platformVersion`]),n={};return t.model&&(n.deviceModel=t.model),t.platformVersion&&(n.osVersion=t.platformVersion),n}catch{return{}}}var br=`2.25.1`,xr={accent:`#E1B600`,accentText:`#1B1C23`,background:`#0e0f13`,surface:`#1B1C23`,surfaceMuted:`#2a2c36`,text:`#ffffff`,textMuted:`#9aa0ad`,border:`rgba(255, 255, 255, 0.1)`,radius:`8px`,fontFamily:`ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif`},Sr={accent:`--havik-accent`,accentText:`--havik-accent-text`,background:`--havik-bg`,surface:`--havik-surface`,surfaceMuted:`--havik-surface-muted`,text:`--havik-text`,textMuted:`--havik-text-muted`,border:`--havik-border`,radius:`--havik-radius`,fontFamily:`--havik-font`};function Cr(e,t){let n={...xr,...t};for(let t of Object.keys(Sr))e.style.setProperty(Sr[t],n[t]);n.logoUrl&&e.style.setProperty(`--havik-logo`,`url("${n.logoUrl}")`)}var wr=`havik-player-styles`,Tr=`
4
4
  .havik-player{position:relative;display:block;width:100%;background:var(--havik-bg,#0e0f13);
5
5
  color:var(--havik-text,#fff);font-family:var(--havik-font,system-ui,sans-serif);
6
6
  overflow:hidden;line-height:1.4;-webkit-tap-highlight-color:transparent}
@@ -128,5 +128,5 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.
128
128
  .havik-menu__item:hover{background:var(--havik-surface-muted,#2a2c36)}
129
129
  .havik-menu__item[aria-checked="true"]{color:var(--havik-accent,#E1B600);font-weight:600}
130
130
  .havik-menu__item[aria-checked="true"]::after{content:'✓'}
131
- `,wr=new WeakMap;function Tr(e=document,t){let n=e.querySelector(`style#${Sr}`);if(n&&(!t||wr.get(n)===t))return;let r=e.createElement(`style`);r.id=Sr,t&&(r.nonce=t,r.setAttribute(`nonce`,t)),r.textContent=Cr,wr.set(r,t),n?n.replaceWith(r):e.head.appendChild(r)}var Er={play:`<path d="M8 5v14l11-7z"/>`,pause:`<path d="M6 5h4v14H6zM14 5h4v14h-4z"/>`,volumeHigh:`<path d="M3 10v4h4l5 5V5L7 10H3zm13.5 2a4.5 4.5 0 0 0-2.5-4v8a4.5 4.5 0 0 0 2.5-4zm-2.5-9v2.06A7 7 0 0 1 14 19v2a9 9 0 0 0 0-18z"/>`,volumeMute:`<path d="M3 10v4h4l5 5V5L7 10H3zm16.5 2 2.5-2.5-1.4-1.4L18 10.6 15.4 8 14 9.4l2.6 2.6L14 14.6l1.4 1.4 2.6-2.6 2.6 2.6 1.4-1.4z"/>`,cc:`<path d="M19 4H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM10 11H8.5v-.5h-2v3h2V13H10v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H17v1a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1z"/>`,settings:`<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.11-.2.06-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>`,pip:`<path d="M19 7h-8v6h8V7zm4 12V5a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2zm-2 .02H3V4.98h18v14.04z"/>`,fullscreen:`<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>`,fullscreenExit:`<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>`,liveDot:`<circle cx="12" cy="12" r="6"/>`,retry:`<path d="M17.65 6.35A8 8 0 1 0 19.73 13h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/>`};function $(e){return`<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor">${Er[e]}</svg>`}var Dr=3e3,Or=250,kr=new Set([`GONE`,`NOT_FOUND`,`GEO_DENIED`,`INVALID_URN`,`UNAUTHORIZED`,`DRM_DEVICE_REVOKED`]);function Ar(e){let t=`This match isn't available in your country`;return e?`${t} (${e})`:t}var jr=`This device can't play protected video`;function Mr(e){return new Nr(e)}var Nr=class{root;video;player;doc;autoHideMs;overlay;center;spinner;bar;gradient;seek;seekBuffered;seekPlayed;seekThumb;playBtn;muteBtn;volSlider;live;liveGo;time;ccBtn;audioBtn;qualityBtn;pipBtn;fsBtn;menu;statusBox=null;statusKind=null;statusMsg=null;hasPlayed=!1;fsSupported=!0;lastError=null;logoUrl;statusOverlays;streamEnded;endedMessage;interruptedMessage;errorMessage;hideTimer;tapTimer;surfacePointerType=``;surfaceWasHidden=!1;pointerClosedMenu=!1;openMenu=null;scrubbing=!1;offFns=[];constructor(e){this.root=e.root,this.video=e.video,this.player=e.player,this.doc=e.root.ownerDocument??document,this.autoHideMs=e.autoHideMs??Dr,this.logoUrl=e.logoUrl,this.statusOverlays=e.statusOverlays!==!1,this.streamEnded=e.streamEnded??(()=>!1),this.endedMessage=e.endedMessage??`This stream has ended`,this.interruptedMessage=e.interruptedMessage??`Reconnecting — please stand by`,this.errorMessage=e.errorMessage,Tr(this.doc,e.cspNonce),this.root.classList.add(`havik-player`),this.root.hasAttribute(`tabindex`)||(this.root.tabIndex=0),this.root.setAttribute(`role`,`region`),this.root.setAttribute(`aria-label`,`Video player`);let t=(e,t,n)=>{let r=this.doc.createElement(e);if(r.className=t,n)for(let[e,t]of Object.entries(n))r.setAttribute(e,t);return r},n=(e,n,r)=>{let i=t(`button`,e,{type:`button`,"aria-label":r,title:r});return i.innerHTML=$(n),i};this.overlay=t(`div`,`havik-overlay`),this.center=t(`button`,`havik-center`,{type:`button`,"aria-label":`Play`}),this.center.innerHTML=$(`play`),this.spinner=t(`div`,`havik-spinner`),this.spinner.style.display=`none`,this.overlay.append(this.center,this.spinner),this.gradient=t(`div`,`havik-gradient`),this.bar=t(`div`,`havik-bar`),this.seek=t(`div`,`havik-seek`,{role:`slider`,"aria-label":`Seek`,"aria-valuemin":`0`,"aria-valuemax":`100`,tabindex:`0`});let r=t(`div`,`havik-seek__track`);this.seekBuffered=t(`div`,`havik-seek__buffered`),this.seekPlayed=t(`div`,`havik-seek__played`),this.seekThumb=t(`div`,`havik-seek__thumb`),r.append(this.seekBuffered,this.seekPlayed,this.seekThumb),this.seek.append(r);let i=t(`div`,`havik-controls`);this.playBtn=n(`havik-btn`,`play`,`Play`),this.muteBtn=n(`havik-btn`,`volumeHigh`,`Mute`),this.volSlider=t(`input`,`havik-vol__slider`,{type:`range`,min:`0`,max:`1`,step:`0.05`,"aria-label":`Volume`});let a=t(`div`,`havik-vol`);a.append(this.muteBtn,this.volSlider),this.live=t(`div`,`havik-live`),this.live.innerHTML=$(`liveDot`);let o=this.doc.createElement(`span`);o.textContent=`LIVE`,this.liveGo=t(`button`,`havik-live__go`,{type:`button`}),this.liveGo.textContent=`Go live`,this.live.append(o,this.liveGo),this.time=t(`div`,`havik-time`),this.time.textContent=`0:00`,this.time.style.display=`none`;let s=t(`div`,`havik-spacer`);if(this.ccBtn=n(`havik-btn`,`cc`,`Subtitles`),this.audioBtn=n(`havik-btn`,`settings`,`Audio track`),this.qualityBtn=n(`havik-btn`,`settings`,`Quality`),this.pipBtn=n(`havik-btn`,`pip`,`Picture in picture`),this.fsBtn=n(`havik-btn`,`fullscreen`,`Fullscreen`),this.ccBtn.style.display=`none`,this.audioBtn.style.display=`none`,this.qualityBtn.style.display=`none`,this.pipSupported()||(this.pipBtn.style.display=`none`),this.syncFullscreenSupport(),i.append(this.playBtn,a,this.live,this.time,s,this.ccBtn,this.audioBtn,this.qualityBtn,this.pipBtn,this.fsBtn),this.bar.append(this.seek,i),this.menu=t(`div`,`havik-menu`,{role:`menu`}),this.menu.hidden=!0,this.root.append(this.gradient,this.overlay,this.bar,this.menu),e.logoUrl){let n=t(`div`,`havik-watermark`);n.style.backgroundImage=`url("${e.logoUrl}")`,this.root.append(n)}this.wire(),this.syncPlayPause(),this.syncVolume(),this.scheduleHide()}on(e,t,n,r){e.addEventListener(t,n,r),this.offFns.push(()=>e.removeEventListener(t,n,r))}wire(){let e=this.video;this.on(this.playBtn,`click`,()=>this.togglePlay()),this.on(this.center,`click`,()=>this.togglePlay()),this.on(this.overlay,`pointerdown`,e=>{this.surfacePointerType=e.pointerType??``,this.surfaceWasHidden=this.root.classList.contains(`havik-hide`)}),this.on(this.overlay,`click`,e=>{e.target===this.overlay&&this.onSurfaceClick()}),this.on(this.muteBtn,`click`,()=>this.player.setMuted(!e.muted)),this.on(this.volSlider,`input`,()=>{let t=Number(this.volSlider.value);this.setVolumeFill(t),this.player.setVolume(t),t>0&&e.muted&&this.player.setMuted(!1)}),this.on(this.liveGo,`click`,()=>this.player.seekToLive()),this.on(this.pipBtn,`click`,()=>void this.togglePip()),this.on(this.fsBtn,`click`,()=>void this.toggleFullscreen()),this.on(this.ccBtn,`click`,()=>this.toggleMenu(`cc`)),this.on(this.audioBtn,`click`,()=>this.toggleMenu(`audio`)),this.on(this.qualityBtn,`click`,()=>this.toggleMenu(`quality`)),this.on(this.seek,`pointerdown`,e=>this.onSeekDown(e)),this.on(this.seek,`keydown`,e=>this.onSeekKey(e)),this.on(e,`play`,()=>this.syncPlayPause()),this.on(e,`pause`,()=>this.syncPlayPause()),this.on(e,`volumechange`,()=>this.syncVolume()),this.on(e,`timeupdate`,()=>this.syncProgress()),this.on(e,`progress`,()=>this.syncProgress()),this.on(e,`durationchange`,()=>this.syncProgress()),this.on(e,`loadedmetadata`,()=>this.syncFullscreenSupport()),this.offFns.push(this.player.on(`statechange`,()=>this.syncState())),this.offFns.push(this.player.on(`ended`,()=>this.syncState())),this.offFns.push(this.player.on(`ready`,()=>this.refreshTracks())),this.offFns.push(this.player.on(`qualitychange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`audiotrackchange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`texttrackchange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`pipchange`,e=>this.syncPip(e))),this.offFns.push(this.player.on(`stats`,()=>this.syncLive())),this.offFns.push(this.player.on(`error`,e=>{this.lastError=e,this.statusKind=null,this.syncState()}));let t=e=>e.pointerType!==`touch`;this.on(this.root,`pointermove`,e=>{t(e)&&this.poke()}),this.on(this.root,`pointerleave`,e=>{t(e)&&this.scheduleHide(0)}),this.on(this.root,`focusin`,()=>this.poke()),this.on(this.root,`keydown`,e=>this.onKey(e)),this.on(this.doc,`pointerdown`,e=>this.onDocPointer(e),{capture:!0}),this.on(this.doc,`fullscreenchange`,()=>this.syncFullscreen()),this.on(this.doc,`webkitfullscreenchange`,()=>this.syncFullscreen()),this.on(e,`webkitbeginfullscreen`,()=>this.syncFullscreen()),this.on(e,`webkitendfullscreen`,()=>this.syncFullscreen()),this.syncState()}togglePlay(){this.video.paused||this.video.ended?this.player.play():this.player.pause()}onSurfaceClick(){let e=this.surfacePointerType===`touch`;if(this.surfacePointerType=``,!e){this.tapTimer&&clearTimeout(this.tapTimer),this.tapTimer=void 0,this.togglePlay();return}if(this.pointerClosedMenu){this.tapTimer&&clearTimeout(this.tapTimer),this.tapTimer=void 0,this.poke();return}if(this.tapTimer){clearTimeout(this.tapTimer),this.tapTimer=void 0,this.togglePlay();return}let t=this.surfaceWasHidden;this.tapTimer=setTimeout(()=>{this.tapTimer=void 0,this.toggleBar(t)},Or)}toggleBar(e){e?this.poke():this.hideIfIdle()}syncPlayPause(){let e=!this.video.paused&&!this.video.ended;this.setIcon(this.playBtn,e?`pause`:`play`),this.playBtn.setAttribute(`aria-label`,e?`Pause`:`Play`),this.setIcon(this.center,e?`pause`:`play`),this.center.classList.toggle(`havik-gone`,e||!!this.statusBox),e?this.scheduleHide():this.show()}syncState(){let e=this.player.state;(e===`playing`||e===`buffering`)&&(this.hasPlayed=!0),this.syncStatus(e);let t=e===`loading`||e===`buffering`;this.spinner.style.display=t&&!this.statusBox?``:`none`,(t||this.statusBox)&&this.center.classList.add(`havik-gone`),this.syncLive()}syncStatus(e){let t=null;this.statusOverlays&&(e===`ended`?t=`ended`:e===`error`?t=`error`:e===`waiting`?t=`waiting`:!this.hasPlayed&&(e===`idle`||e===`paused`)&&(t=`preplay`)),this.renderStatus(t)}statusMessageFor(e){return e===`ended`?this.player.endedReason===`interrupted`?this.interruptedMessage:this.endedMessage:e===`waiting`?this.hasPlayed?`Reconnecting — please stand by`:`Starting soon…`:e===`error`?this.errorMessage===void 0?this.lastError?.code===`GEO_DENIED`?Ar(this.lastError.country):this.lastError?.code===`DRM_DEVICE_REVOKED`?jr:this.lastError?.message??`Playback unavailable`:this.errorMessage:null}renderStatus(e){let t=this.statusMessageFor(e);if(e===this.statusKind&&t===this.statusMsg||(this.statusKind=e,this.statusMsg=t,this.statusBox?.remove(),this.statusBox=null,this.root.classList.toggle(`havik-has-status`,!!e),!e))return;let n=this.doc.createElement(`div`);if(n.className=`havik-status havik-status--${e}`,this.logoUrl){let e=this.doc.createElement(`div`);e.className=`havik-status__logo`,n.append(e)}if(e===`preplay`){let e=this.doc.createElement(`button`);e.type=`button`,e.className=`havik-status__btn havik-status__btn--play`,e.setAttribute(`aria-label`,`Play`),e.innerHTML=$(`play`),e.addEventListener(`click`,()=>void this.player.play()),n.append(e)}else{let r=this.doc.createElement(`div`);if(r.className=`havik-status__msg`,r.textContent=t??``,n.append(r),e===`error`&&this.lastError&&!kr.has(this.lastError.code)){let e=this.doc.createElement(`button`);e.type=`button`,e.className=`havik-status__btn`,e.innerHTML=`${$(`retry`)}<span>Retry</span>`,e.addEventListener(`click`,()=>void this.player.retry()),n.append(e)}}this.root.append(n),this.statusBox=n,this.show()}syncVolume(){let e=this.video,t=e.muted||e.volume===0;this.setIcon(this.muteBtn,t?`volumeMute`:`volumeHigh`),this.muteBtn.setAttribute(`aria-label`,t?`Unmute`:`Mute`);let n=t?0:e.volume;this.volSlider.value=String(n),this.setVolumeFill(n)}setVolumeFill(e){this.volSlider.style.setProperty(`--havik-vol`,String(Math.min(1,Math.max(0,e))))}seekableRange(){let e=this.video,t,n;if(e.seekable&&e.seekable.length>0)t=e.seekable.start(0),n=e.seekable.end(e.seekable.length-1);else if(Number.isFinite(e.duration)&&e.duration>0)t=0,n=e.duration;else return null;let r=this.player.getStats();return r.isLive!==!1&&r.targetLatencySeconds&&r.targetLatencySeconds>0&&(n=Math.max(t,n-r.targetLatencySeconds)),n>t?{start:t,end:n}:null}syncProgress(){if(this.scrubbing)return;let e=this.seekableRange();if(!e){this.seekPlayed.style.width=`100%`;return}let t=e.end-e.start,n=Math.min(1,Math.max(0,(this.video.currentTime-e.start)/t));this.seekPlayed.style.width=`${(n*100).toFixed(2)}%`,this.seekThumb.style.left=`${(n*100).toFixed(2)}%`,this.seek.setAttribute(`aria-valuenow`,String(Math.round(n*100)));let r=this.video.buffered;if(r&&r.length>0){let n=r.end(r.length-1),i=Math.min(1,Math.max(0,(n-e.start)/t));this.seekBuffered.style.width=`${(i*100).toFixed(2)}%`}!this.player.getStats().isLive&&Number.isFinite(this.video.duration)&&(this.time.textContent=`${Pr(this.video.currentTime)} / ${Pr(this.video.duration)}`)}syncLive(){let e=this.player.getStats(),t=e.isLive!==!1,n=this.player.state===`ended`,r=!t&&!this.streamEnded();this.live.style.display=t&&!n?``:`none`,this.time.style.display=r?``:`none`,this.seek.style.display=r?``:`none`,this.live.classList.toggle(`is-live`,e.atLiveEdge!==!1&&t)}onSeekDown(e){let t=this.seekableRange();if(!t)return;e.preventDefault(),this.scrubbing=!0;let n=e=>this.seekToPointer(e,t),r=()=>{this.scrubbing=!1,this.doc.removeEventListener(`pointermove`,n),this.doc.removeEventListener(`pointerup`,r)};this.doc.addEventListener(`pointermove`,n),this.doc.addEventListener(`pointerup`,r),this.seekToPointer(e,t)}seekToPointer(e,t){let n=this.seek.getBoundingClientRect(),r=n.width>0?Math.min(1,Math.max(0,(e.clientX-n.left)/n.width)):0;this.seekPlayed.style.width=`${(r*100).toFixed(2)}%`,this.seekThumb.style.left=`${(r*100).toFixed(2)}%`,this.video.currentTime=t.start+r*(t.end-t.start)}onSeekKey(e){e.key===`ArrowLeft`?(this.nudge(-5),e.preventDefault()):e.key===`ArrowRight`&&(this.nudge(5),e.preventDefault())}nudge(e){let t=this.seekableRange();t&&(this.video.currentTime=Math.min(t.end,Math.max(t.start,this.video.currentTime+e)))}toggleMenu(e){if(this.openMenu===e){this.closeMenu();return}this.openMenu=e,this.renderMenu(e),this.menu.hidden=!1,this.show()}closeMenu(){this.openMenu=null,this.menu.hidden=!0,this.menu.replaceChildren()}renderMenu(e){e===`quality`?this.renderQualityMenu():e===`audio`?this.renderAudioMenu():this.renderCcMenu()}menuItem(e,t,n){let r=this.doc.createElement(`button`);r.type=`button`,r.className=`havik-menu__item`,r.setAttribute(`role`,`menuitemradio`),r.setAttribute(`aria-checked`,t?`true`:`false`);let i=this.doc.createElement(`span`);return i.textContent=e,r.append(i),r.addEventListener(`click`,()=>{n(),this.closeMenu()}),r}renderQualityMenu(){let e=this.player.getQualityLevels(),t=this.player.getCurrentQuality(),n=this.doc.createElement(`div`);n.className=`havik-menu__title`,n.textContent=`Quality`,this.menu.replaceChildren(n,this.menuItem(`Auto`,t===-1,()=>this.player.setQuality(`auto`)));for(let n of e)this.menu.append(this.menuItem(Fr(n),t===n.index,()=>this.player.setQuality(n.index)))}renderAudioMenu(){let e=this.player.getAudioTracks(),t=this.doc.createElement(`div`);t.className=`havik-menu__title`,t.textContent=`Audio`,this.menu.replaceChildren(t);for(let t of e)this.menu.append(this.menuItem(Ir(t),t.default,()=>this.player.setAudioTrack(t.id)))}renderCcMenu(){let e=this.player.getTextTracks(),t=this.doc.createElement(`div`);t.className=`havik-menu__title`,t.textContent=`Subtitles`,this.menu.replaceChildren(t,this.menuItem(`Off`,!1,()=>this.player.setTextTrack(-1)));for(let t of e)this.menu.append(this.menuItem(Lr(t),!1,()=>this.player.setTextTrack(t.id)))}onTracksChanged(){this.openMenu&&this.renderMenu(this.openMenu)}refreshTracks(){let e=this.player.getQualityLevels(),t=this.player.getAudioTracks(),n=this.player.getTextTracks();this.qualityBtn.style.display=e.length>1?``:`none`,this.audioBtn.style.display=t.length>1?``:`none`,this.ccBtn.style.display=n.length>0?``:`none`,this.onTracksChanged()}pipSupported(){return`pictureInPictureEnabled`in this.doc&&typeof this.video.requestPictureInPicture==`function`}async togglePip(){this.doc.pictureInPictureElement===this.video?await this.player.exitPictureInPicture():await this.player.enterPictureInPicture()}syncPip(e){this.pipBtn.setAttribute(`aria-pressed`,e?`true`:`false`)}async toggleFullscreen(){try{Se(this.video,this.root)?await D(this.video,this.root):await E(this.video,this.root)}catch{}}syncFullscreenSupport(){this.fsSupported=T(this.video,this.root),this.fsBtn.style.display=this.fsSupported?``:`none`}syncFullscreen(){let e=Se(this.video,this.root);this.setIcon(this.fsBtn,e?`fullscreenExit`:`fullscreen`),this.fsBtn.setAttribute(`aria-label`,e?`Exit fullscreen`:`Fullscreen`)}poke(){this.show(),this.scheduleHide()}show(){this.root.classList.remove(`havik-hide`)}scheduleHide(e=this.autoHideMs){this.hideTimer&&clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>this.hideIfIdle(),e)}hideIfIdle(){!this.video.paused&&!this.video.ended&&!this.openMenu&&!this.statusBox&&this.root.classList.add(`havik-hide`)}onDocPointer(e){this.pointerClosedMenu=!1,this.openMenu&&!this.menu.contains(e.target)&&([this.qualityBtn,this.audioBtn,this.ccBtn].some(t=>t.contains(e.target))||(this.closeMenu(),this.pointerClosedMenu=!0))}onKey(e){let t=e.target;if(!(t&&t!==this.root&&t!==this.seek&&t.tagName===`INPUT`)){switch(e.key){case` `:case`k`:this.togglePlay();break;case`m`:this.player.setMuted(!this.video.muted);break;case`f`:if(!this.fsSupported)return;this.toggleFullscreen();break;case`c`:this.ccBtn.style.display!==`none`&&this.toggleMenu(`cc`);break;case`l`:this.player.seekToLive();break;case`ArrowUp`:this.player.setVolume(Math.min(1,this.video.volume+.1));break;case`ArrowDown`:this.player.setVolume(Math.max(0,this.video.volume-.1));break;case`ArrowLeft`:this.nudge(-5);break;case`ArrowRight`:this.nudge(5);break;default:return}this.poke(),e.preventDefault()}}setIcon(e,t){e.innerHTML=$(t)}destroy(){this.hideTimer&&clearTimeout(this.hideTimer),this.tapTimer&&clearTimeout(this.tapTimer);for(let e of this.offFns)try{e()}catch{}this.offFns.length=0,this.closeMenu(),this.statusBox?.remove();for(let e of[this.overlay,this.gradient,this.bar,this.menu])e.remove();this.root.classList.remove(`havik-player`,`havik-hide`,`havik-has-status`)}};function Pr(e){(!Number.isFinite(e)||e<0)&&(e=0);let t=Math.floor(e%60),n=Math.floor(e/60%60),r=Math.floor(e/3600),i=r>0?String(n).padStart(2,`0`):String(n),a=String(t).padStart(2,`0`);return r>0?`${r}:${i}:${a}`:`${i}:${a}`}function Fr(e){return e.height?`${e.height}p`:`${Math.round(e.bitrate/1e3)} kbps`}function Ir(e){return e.name||e.lang||`Track ${e.id}`}function Lr(e){return e.name||e.lang||`Track ${e.id}`}var Rr=6e3,zr=45e3,Br=2e3,Vr=3,Hr=5e3,Ur=2e3,Wr=48e4,Gr=`keySystemLicenseRequestFailed`;function Kr(e){if(e.env!==void 0&&e.baseUrl!==void 0)throw new l(`INTERNAL`,0,`createPlayer: pass env OR baseUrl, not both (got env=${JSON.stringify(e.env)} and baseUrl=${JSON.stringify(e.baseUrl)})`);if(e.env!==void 0)return ft(e.env);if(!e.baseUrl)throw new l(`INTERNAL`,0,`createPlayer: env or baseUrl is required (env: 'integration' | 'production')`);return e.baseUrl}async function qr(e){if(!e.video||typeof e.video.play!=`function`)throw new l(`INTERNAL`,0,`createPlayer: opts.video must be an HTMLVideoElement`);let t=Kr(e);if(!e.matchUrn)throw new l(`INVALID_URN`,0,`createPlayer: matchUrn is required`);if(!e.credential)throw new l(`INTERNAL`,0,`createPlayer: credential is required`);let n=new Jr({...e,baseUrl:t});return await n.start(),n}var Jr=class{opts;abort=new AbortController;listeners={};engine=null;controlBar=null;container=null;detachMedia;detachPip;detachEndedPlayGuard;statsTimer;refreshTimer;refreshInFlight;onRefocus;onReturnVisible=null;onReturnPageShow=null;hiddenAtMs=null;staleLicenseReloaded=!1;_state=`idle`;_descriptor=null;destroyed=!1;loadGen=0;liveStateSub=null;endedHandled=!1;_endedReason=null;rejoinTimer=null;armingSub=null;armSseTimer=null;armFallbackCtrl=null;_lastError=null;analyticsSession=null;detachMediaListeners;playRequested=!1;idleClosed=!1;pendingStartLoad=!1;constructor(e){this.opts=e}get state(){return this._state}get descriptor(){return this._descriptor}get endedReason(){return this._endedReason}async start(){this.opts.muted&&(this.opts.video.muted=!0),this.opts.poster&&(this.opts.video.poster=this.opts.poster),this.mountControls(),this.attachPipListeners(),this.attachEndedPlayGuard(),this.setState(`loading`);let e=++this.loadGen,t=this.resolveOptions();try{let n=await x(t);if(await this.onResolved(n,e),e===this.loadGen&&this._state===`error`&&this._lastError){let e=this._lastError;throw this.destroy(),e}}catch(t){if(this.opts.waitForLive&&t instanceof l&&m(t.code)){this.setState(`waiting`),this.beginArming(e,t.liveStartsAtMs);return}throw t}}resolveOptions(){return{baseUrl:this.opts.baseUrl,matchUrn:this.opts.matchUrn,credential:this.opts.credential,signal:this.abort.signal,apiHeaders:this.opts.apiHeaders}}beginArming(e,t,n=!1){let r=this.opts.liveStateEvents===!1?void 0:this.opts.eventsBaseUrl??A(this.opts.baseUrl);r?this.armWithSse(e,r,t,n):this.beginArmingByPolling(e)}beginArmingByPolling(e){S({...this.resolveOptions(),signal:this.abort.signal,waitForLive:this.buildWaitConfig(e)}).then(t=>{if(!(this.destroyed||this.abort.signal.aborted||e!==this.loadGen))return this.onResolved(t,e)}).catch(t=>{this.destroyed||this.abort.signal.aborted||e!==this.loadGen||this.fail(t instanceof l?t:new l(`INTERNAL`,0,String(t)))})}armWithSse(e,t,n,r=!1){let i=!1,a=!1,o=new AbortController;this.armFallbackCtrl=o,this.setState(`waiting`);let s=this.opts.waitForLive,c=s&&s!==!0?s.kickoffAt:void 0,u=typeof c==`number`?c:typeof c==`string`?Date.parse(c):NaN,d=n??(Number.isFinite(u)?u:void 0);setTimeout(()=>{i||this.destroyed||e!==this.loadGen||this.emit(`waiting`,{phase:r?`unavailable`:`tooEarly`,retryInMs:zr,attempt:1,elapsedMs:0,...!r&&d!==void 0&&d>Date.now()?{ttkMs:d-Date.now()}:{}})},0);let f=()=>this.destroyed||this.abort.signal.aborted||e!==this.loadGen,p=async t=>{if(!(i||f())){i=!0,this.closeArming(),o.abort();try{await this.onResolved(t,e)}catch(e){if(f())return;this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e)))}}},h=()=>{i||a||f()||(a=!0,S({...this.resolveOptions(),signal:o.signal,waitForLive:this.buildWaitConfig(e)}).then(e=>p(e)).catch(e=>{i||f()||o.signal.aborted||(i=!0,this.closeArming(),this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e))))}))},g=()=>{i||f()||x(this.resolveOptions()).then(e=>p(e)).catch(e=>{if(!(i||f())){if(e instanceof l&&m(e.code)){h();return}i=!0,this.closeArming(),o.abort(),this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e)))}})},_=e=>{this.armSseTimer&&clearTimeout(this.armSseTimer),this.armSseTimer=setTimeout(()=>{!i&&!f()&&h()},e)};_(Rr),this.armingSub=k({eventsBaseUrl:t,matchUrn:this.opts.matchUrn,credential:this.opts.credential,onAlive:()=>_(zr),onState:e=>{i||f()||(e.state===`live`||e.state===`gone`)&&setTimeout(g,Math.random()*Br)},onError:()=>h()})}closeArming(){this.armSseTimer&&=(clearTimeout(this.armSseTimer),null),this.armFallbackCtrl?.abort(),this.armFallbackCtrl=null,this.armingSub?.close(),this.armingSub=null}buildWaitConfig(e){let t=this.opts.waitForLive&&this.opts.waitForLive!==!0?this.opts.waitForLive:{};return{...t,onState:n=>{this.destroyed||e!==this.loadGen||(this.setState(`waiting`),this.emit(`waiting`,n),t.onState?.(n))}}}async onResolved(e,t){if(this.destroyed||t!==this.loadGen)return;this._descriptor=e,this.endedHandled=!1,this._endedReason=null;let n=await h(this.opts.credential);if(this.destroyed||t!==this.loadGen)return;this.setState(`loading`);let r=this.opts.autoplay===!1&&!this.playRequested,i=this.createEngine(e,n,r),a=vt(this.opts.video,e=>{this._state!==`ended`&&this._state!==`error`&&this.setState(e)});if(await i.load(),this.destroyed||t!==this.loadGen){a(),i.destroy();return}if(this._state===`error`){a(),i.destroy();return}this.engine=i,this.detachMedia=a,this.opts.maxBitrate!=null&&i.setMaxBitrate(this.opts.maxBitrate),this.startStats(),this.scheduleLicenseRefresh(),this.startLiveState(t),this.watchReturn(),this.startAnalytics(e,i,t),r&&(this.pendingStartLoad=!0,this.setState(`paused`),i.name===`native`&&setTimeout(()=>{this.destroyed||t!==this.loadGen||this.engine!==i||(this.analyticsSession?.noteReady(),this.emit(`ready`))},0))}onAnalyticsIdle(e){this.destroyed||this.engine!==e||(this.idleClosed=!0,this.pendingStartLoad=!1,e.stop())}startAnalytics(e,t,n){if(this.analyticsSession?.noteDestroyed(),this.analyticsSession=null,this.detachMediaListeners?.(),this.opts.analytics===!1)return;let r=e.analytics?.sid;if(!r)return;let i=typeof this.opts.analytics==`object`?this.opts.analytics.endpoint:void 0,{endpoint:a,disabledReason:o}=dr(this.opts.baseUrl,i,e.analytics?.endpoint);if(!a){o&&setTimeout(()=>{this.destroyed||n!==this.loadGen||this.emit(`warning`,new l(`INTERNAL`,0,o))},0);return}let s=this.opts.video,c=new fr({endpoint:a,sid:r,player:t.name===`native`?`PLAYER_SAFARI_NATIVE`:`PLAYER_HLSJS`,sdkVersion:vr,environment:gr(s),idleMs:typeof this.opts.analytics==`object`?this.opts.analytics.idleMs:void 0,onIdle:()=>this.onAnalyticsIdle(t),onBlocked:e=>setTimeout(()=>{this.destroyed||n!==this.loadGen||this.emit(`warning`,new l(`INTERNAL`,0,e))},0),sample:()=>{let e=this.engine?.getStats()??pt,t=s.buffered.length?Math.max(0,s.buffered.end(s.buffered.length-1)-s.currentTime):0;return{...e,bufferedMs:Math.round(t*1e3),state:this._state,positionMs:Math.round(s.currentTime*1e3),playbackRate:s.playbackRate}}});this.analyticsSession=c;let u=()=>c.noteSeek(),d=()=>c.noteVolume(s.muted,s.volume);s.addEventListener(`seeking`,u),s.addEventListener(`volumechange`,d),this.detachMediaListeners=()=>{s.removeEventListener(`seeking`,u),s.removeEventListener(`volumechange`,d)},c.start(),c.seedVolume(s.muted,s.volume),c.notePresentation(this.currentPresentation()),_r().then(e=>c.noteEnvironment(e)),this.opts.autoplay===!1&&c.noteAutoplay(`AUTOPLAY_RESULT_NOT_ATTEMPTED`)}currentPresentation(){let e=this.opts.video;if(typeof document<`u`&&document.pictureInPictureElement===e)return`pip`;let t=typeof document<`u`?document.fullscreenElement:null;return e.webkitDisplayingFullscreen===!0||t&&(t===e||t.contains(e))?`fullscreen`:`inline`}createEngine(e,t,n=!1){let r={...this.opts.hlsConfig};this.opts.startLevel!=null&&(r.startLevel=this.opts.startLevel),this.opts.liveLatencyTarget!=null&&(r.liveSyncDuration=this.opts.liveLatencyTarget);let i={video:this.opts.video,descriptor:e,credential:t,deviceId:N(),userId:this.opts.userId,lowLatency:this.opts.lowLatency===void 0||this.opts.lowLatency===`auto`||this.opts.lowLatency,snapToLiveOnRefocus:this.opts.snapToLiveOnRefocus,rememberBandwidth:this.opts.rememberBandwidth,sizeCapHeadroom:this.opts.sizeCapHeadroom,adaptiveHoldBack:this.opts.adaptiveHoldBack,adaptiveHoldBackCeiling:this.opts.adaptiveHoldBackCeiling,mediaDuringKey:this.opts.mediaDuringKey,preloadHints:this.opts.preloadHints,debug:this.opts.debug,deferLoad:n,hlsConfig:r,emit:e=>this.onEngineEvent(e),freshLicenseUrl:()=>this.refreshLicense()},a=this.opts.engine??`auto`;if(a===`native`)return new G(i);if(a===`hls`)return new Kn(i);if(e.drmEnabled&&e.drm?.fairplay?.licenseUrl&&e.drm.fairplay.certificateUrl&&U(this.opts.video)&&W()||!e.drmEnabled&&At()&&U(this.opts.video))return new G(i);if(Kt())return new Kn(i);if(U(this.opts.video))return new G(i);throw new l(`INTERNAL`,0,`no supported HLS playback engine in this browser`)}onEngineEvent(e){if(!this.destroyed)switch(e.type){case`firstPlaylist`:this.analyticsSession?.noteFirstPlaylist();break;case`firstBytes`:this.analyticsSession?.noteFirstBytes();break;case`drmReady`:this.analyticsSession?.noteDrmReady(),this.staleLicenseReloaded=!1;break;case`ready`:this.analyticsSession?.noteReady(),this.emit(`ready`),(this.opts.autoplay!==!1||this.playRequested)&&this.play();break;case`lowLatencyDetected`:this._descriptor&&(this._descriptor.isLowLatency=e.value);break;case`livetargetchange`:this.emit(`latencytargetchange`,e.change);break;case`qualitychange`:this.emit(`qualitychange`,e.index);break;case`audiotrackchange`:this.emit(`audiotrackchange`,e.id);break;case`texttrackchange`:this.emit(`texttrackchange`,e.id);break;case`ended`:this.onStreamEnded();break;case`error`:{let t=e.fatal&&this.isStaleLicenseDenial(e);if(this.analyticsSession?.noteError(e.error.code,e.error.message,e.fatal&&!t,e.error.httpStatus??0,Math.round(this.opts.video.currentTime*1e3),e.detail),t){this.staleLicenseReloaded=!0;let t=this.loadGen;this.emit(`warning`,e.error),Promise.resolve().then(()=>{if(!(this.destroyed||t!==this.loadGen)&&this._state!==`error`&&this._state!==`ended`)return this.reload().catch(()=>void 0)})}else e.fatal?this.fail(e.error):this.emit(`warning`,e.error);break}}}startLiveState(e){if(this.opts.liveStateEvents===!1)return;let t=this.opts.eventsBaseUrl??A(this.opts.baseUrl);if(!t)return;this.closeLiveState();let n=0,r=!1;this.liveStateSub=k({eventsBaseUrl:t,matchUrn:this.opts.matchUrn,credential:this.opts.credential,onState:t=>{this.destroyed||e!==this.loadGen||(t.state===`gone`?this.onStreamEnded(!0,t.reason??`match_ended`):t.state===`ended`?this.onStreamEnded(!1,t.reason):t.state===`live`&&this.endedHandled&&this.scheduleRejoin(e))},onAlive:()=>{n=0,r=!1},onError:i=>{if(!(this.destroyed||e!==this.loadGen||r)&&!this.endedHandled){if(i instanceof O&&(i.terminal||i.status===404)){r=!0,this.emit(`warning`,new l(u(i.status),i.status,`live-state events answered HTTP ${i.status} for ${this.opts.matchUrn}: the match is `+(i.terminal?`gone, so the subscription stopped`:`not in the catalog (ended and dropped, or not listed yet), so it retries every 5 min`)+` — end-of-stream detection falls back to the HLS staleness watchdog.`));return}n+=1,n>=Vr&&(r=!0,this.emit(`warning`,new l(`NETWORK`,0,`live-state events unreachable at ${t} after ${n} attempts — end-of-stream detection degraded to the HLS staleness watchdog. Check the events host, the api-key's allowed origins, and CSP connect-src.`)))}}})}closeLiveState(){this.liveStateSub?.close(),this.liveStateSub=null}watchReturn(){this.onReturnVisible||typeof document>`u`||this.opts.liveStateEvents!==!1&&(document.visibilityState===`hidden`&&(this.hiddenAtMs=Date.now()),this.onReturnVisible=()=>{if(document.visibilityState===`hidden`){this.hiddenAtMs??=Date.now();return}let e=this.hiddenAtMs;this.hiddenAtMs=null,e!=null&&Date.now()-e>=Hr&&this.resyncLiveState()},this.onReturnPageShow=e=>{e.persisted&&this.resyncLiveState()},document.addEventListener(`visibilitychange`,this.onReturnVisible),typeof window<`u`&&window.addEventListener(`pageshow`,this.onReturnPageShow))}unwatchReturn(){this.onReturnVisible&&typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.onReturnVisible),this.onReturnPageShow&&typeof window<`u`&&window.removeEventListener(`pageshow`,this.onReturnPageShow),this.onReturnVisible=null,this.onReturnPageShow=null,this.hiddenAtMs=null}resyncLiveState(){!this.destroyed&&this.liveStateSub&&this.startLiveState(this.loadGen)}onStreamEnded(e=!1,t){if(!this.destroyed){if((e||!this.rejoinEnabled())&&(this.cancelRejoin(),this.closeLiveState()),this.endedHandled){t===`match_ended`&&this._endedReason!==`match_ended`&&(this._endedReason=t,this.emit(`ended`,t),this.leavePipOnEnd());return}this.endedHandled=!0,this._endedReason=t??null,this.stopRefresh(),this.pendingStartLoad=!1,this.engine?.stop(),this.setState(`ended`),this.leavePipOnEnd()}}leavePipOnEnd(){this._endedReason===`interrupted`&&this.rejoinEnabled()||this.exitPictureInPicture().catch(()=>{})}get streamEnded(){return this._state===`ended`&&this.endedHandled}rejoinEnabled(){return this.opts.rejoinOnLive!==!1&&this.opts.liveStateEvents!==!1}scheduleRejoin(e){this.rejoinEnabled()&&!this.rejoinTimer&&(this.rejoinTimer=setTimeout(()=>{this.rejoinTimer=null,!(this.destroyed||e!==this.loadGen||this._state!==`ended`)&&this.rejoin()},Math.random()*Br))}cancelRejoin(){this.rejoinTimer&&=(clearTimeout(this.rejoinTimer),null)}rejoin(){let e=++this.loadGen;this.teardownPlayback(),this.setState(`waiting`),this.beginArming(e,void 0,!0)}teardownPlayback(){this.stopStats(),this.stopRefresh(),this.cancelRejoin(),this.closeArming(),this.closeLiveState(),this.detachMedia?.(),this.engine?.destroy(),this.engine=null,this.pendingStartLoad=!1,this.idleClosed=!1}mountControls(){let e=this.opts.controls??`custom`,t=this.opts.video;if(e===`native`){t.controls=!0;return}if(e===`none`){t.controls=!1;return}t.controls=!1;let n=(t.ownerDocument??document).createElement(`div`),r=t.parentNode;r&&r.insertBefore(n,t),n.appendChild(t),xr(n,this.opts.theme),this.container=n,this.controlBar=Mr({root:n,video:t,player:this,logoUrl:this.opts.theme?.logoUrl,statusOverlays:this.opts.statusOverlays,endedMessage:this.opts.endedMessage,streamEnded:()=>this.streamEnded,interruptedMessage:this.opts.interruptedMessage,errorMessage:this.opts.errorMessage,cspNonce:this.opts.cspNonce})}unmountControls(){this.controlBar?.destroy(),this.controlBar=null;let e=this.container;e&&(e.parentNode?(e.parentNode.insertBefore(this.opts.video,e),e.remove()):this.opts.video.parentNode===e&&e.removeChild(this.opts.video)),this.container=null}attachPipListeners(){let e=this.opts.video,t=()=>this.analyticsSession?.notePresentation(this.currentPresentation()),n=()=>{t(),this.emit(`pipchange`,!0)},r=()=>{t(),this.emit(`pipchange`,!1)};e.addEventListener(`enterpictureinpicture`,n),e.addEventListener(`leavepictureinpicture`,r);let i=typeof document<`u`?document:void 0;i?.addEventListener(`fullscreenchange`,t),i?.addEventListener(`webkitfullscreenchange`,t),this.detachPip=()=>{e.removeEventListener(`enterpictureinpicture`,n),e.removeEventListener(`leavepictureinpicture`,r),i?.removeEventListener(`fullscreenchange`,t),i?.removeEventListener(`webkitfullscreenchange`,t)}}attachEndedPlayGuard(){let e=this.opts.video,t=()=>{this.streamEnded&&e.pause()};e.addEventListener(`play`,t),this.detachEndedPlayGuard=()=>e.removeEventListener(`play`,t)}startStats(){this.stopStats();let e=Math.max(500,this.opts.statsIntervalMs??Ur);this.statsTimer=setInterval(()=>{if(!this.engine)return;let e=this.engine.getStats();(e.bytesLoaded??0)>0&&this.analyticsSession?.noteFirstBytes(),this.emit(`stats`,e)},e)}stopStats(){this.statsTimer&&clearInterval(this.statsTimer),this.statsTimer=void 0}isStaleLicenseDenial(e){return this.staleLicenseReloaded||this.opts.hlsConfig?.licenseXhrSetup||this._state===`ended`||this._state===`error`||e.detail!==Gr||e.error.httpStatus!==403||e.error.code!==`FORBIDDEN`||e.error.serverCode===`license_refused`?!1:q(this._descriptor?.drm?.widevine?.licenseUrl)}scheduleLicenseRefresh(){if(this.stopRefresh(),!this._descriptor?.drmEnabled)return;typeof document<`u`&&this.engine?.name===`hls`&&(this.onRefocus=()=>{document.visibilityState!==`visible`||this.destroyed||q(this._descriptor?.drm?.widevine?.licenseUrl)&&this.refreshLicense()},document.addEventListener(`visibilitychange`,this.onRefocus));let e=this.opts.licenseRefreshMs??Wr;e&&(this.refreshTimer=setInterval(()=>void this.refreshLicense(),e))}stopRefresh(){this.refreshTimer&&clearInterval(this.refreshTimer),this.refreshTimer=void 0,this.onRefocus&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onRefocus),this.onRefocus=void 0)}refreshLicense(){let e=this.engine;if(this.destroyed||!e)return Promise.resolve(void 0);if(this.refreshInFlight?.engine===e)return this.refreshInFlight.promise;let t=(async()=>{try{let t=await x(this.resolveOptions());if(this.destroyed||this.engine!==e)return;let n=t.drm?.widevine?.licenseUrl,r=t.drm?.fairplay?.licenseUrl;return(n||r)&&(e.setLicenseUrls({widevine:n,fairplay:r}),this._descriptor=t),n}catch(e){e instanceof l&&!m(e.code)&&(this.stopRefresh(),this.destroyed||this.emit(`warning`,e));return}finally{this.refreshInFlight?.promise===t&&(this.refreshInFlight=void 0)}})();return this.refreshInFlight={engine:e,promise:t},t}async play(){if(this.destroyed)return;let e=!this.playRequested;if(this.playRequested=!0,this.idleClosed&&this._state!==`ended`&&this._state!==`error`){this.idleClosed=!1,await this.reload();return}if(this.streamEnded)return;let t=this.pendingStartLoad&&this._state!==`ended`&&this._state!==`error`;this.opts.autoplay===!1&&this.analyticsSession?.notePlayIntent(),t&&(this.pendingStartLoad=!1,this.setState(`loading`),this.engine?.startLoad());try{await this.opts.video.play(),e&&this.analyticsSession?.noteAutoplay(this.opts.video.muted?`AUTOPLAY_RESULT_ALLOWED_MUTED`:`AUTOPLAY_RESULT_ALLOWED`)}catch(n){n instanceof DOMException&&n.name===`NotAllowedError`&&(this.analyticsSession?.noteAutoplay(`AUTOPLAY_RESULT_BLOCKED`),e&&(this.playRequested=!1),t&&!this.destroyed&&this._state===`loading`&&this.setState(`paused`),this.emit(`autoplayblocked`))}}pause(){this.destroyed||this.opts.video.pause()}setMuted(e){this.destroyed||(this.opts.video.muted=e)}setVolume(e){this.destroyed||(this.opts.video.volume=Math.min(1,Math.max(0,e)))}getStats(){return this.engine?.getStats()??pt}getQualityLevels(){return this.engine?.getQualityLevels()??[]}getCurrentQuality(){return this.engine?.getCurrentQuality()??-1}setQuality(e){this.destroyed||this.engine?.setQuality(e===`auto`?-1:e)}setMaxBitrate(e){this.destroyed||this.engine?.setMaxBitrate(e)}getAudioTracks(){return this.engine?.getAudioTracks()??[]}setAudioTrack(e){this.destroyed||this.engine?.setAudioTrack(e)}getTextTracks(){return this.engine?.getTextTracks()??[]}setTextTrack(e){this.destroyed||this.engine?.setTextTrack(e)}seekToLive(){this.destroyed||this.engine?.seekToLive()}async enterPictureInPicture(){if(this.destroyed)return;let e=this.opts.video;typeof e.requestPictureInPicture==`function`&&await e.requestPictureInPicture()}async exitPictureInPicture(){let e=document;e.pictureInPictureElement===this.opts.video&&typeof e.exitPictureInPicture==`function`&&await e.exitPictureInPicture()}async enterFullscreen(){return!this.destroyed&&E(this.opts.video,this.container??void 0)}async exitFullscreen(){await D(this.opts.video,this.container??void 0)}fullscreenSupported(){return!this.destroyed&&T(this.opts.video,this.container??void 0)}retry(){return this.reload()}async reload(){if(this.destroyed)return;let e=++this.loadGen;this.teardownPlayback();try{let t=await S({...this.resolveOptions(),waitForLive:this.opts.waitForLive?this.buildWaitConfig(e):void 0});if(await this.onResolved(t,e),e===this.loadGen&&this._state===`error`&&this._lastError)throw this._lastError}catch(t){if(this.destroyed||this.abort.signal.aborted||e!==this.loadGen)return;throw t!==this._lastError&&this.fail(t instanceof l?t:new l(`INTERNAL`,0,String(t))),t}}on(e,t){let n=this.listeners[e]??=new Set;return n.add(t),()=>n.delete(t)}destroy(){this.destroyed||(this.destroyed=!0,this.loadGen+=1,this.abort.abort(),this.stopStats(),this.stopRefresh(),this.unmountControls(),this.cancelRejoin(),this.closeArming(),this.closeLiveState(),this.unwatchReturn(),this.detachMedia?.(),this.detachPip?.(),this.detachEndedPlayGuard?.(),this.analyticsSession?.noteDestroyed(),this.analyticsSession=null,this.detachMediaListeners?.(),this.engine?.destroy(),this.engine=null,this.setState(`idle`),this.clearListeners())}clearListeners(){for(let e of Object.keys(this.listeners))this.listeners[e]?.clear()}fail(e){this._lastError=e,this.setState(`error`),this.analyticsSession?.noteFatal(),this.emit(`error`,e)}setState(e){if(e===this._state)return;let t=this._state;if(this._state=e,this.analyticsSession){let n=this.opts.video;this.analyticsSession.noteStateChange(t,e,Math.round(n.currentTime*1e3),this.engine?.getStats().levelHeight),e===`ended`&&this.analyticsSession.noteEnded()}switch(this.emit(`statechange`,e),e){case`playing`:this.emit(`playing`);break;case`buffering`:this.emit(`buffering`);break;case`paused`:this.emit(`paused`);break;case`ended`:this.emit(`ended`,this._endedReason??void 0)}}emit(e,t){this.listeners[e]?.forEach(e=>{try{e(t)}catch{}})}};function Yr(e){return!!e&&typeof e==`object`&&typeof e.type==`string`&&e.type.startsWith(`oddin:`)}function Xr(e){if(!e.container||typeof e.container.appendChild!=`function`)throw Error(`mountEmbed: opts.container must be a DOM element`);if(!e.src)throw Error(`mountEmbed: opts.src is required`);if(!e.baseUrl||!e.matchUrn)throw Error(`mountEmbed: opts.baseUrl and opts.matchUrn are required`);let t=new URL(e.src,location.href),n=e.allowedFrameOrigin??t.origin;t.searchParams.set(`baseUrl`,e.baseUrl),t.searchParams.set(`matchUrn`,e.matchUrn),t.searchParams.set(`parentOrigin`,location.origin),e.muted!=null&&t.searchParams.set(`muted`,String(e.muted)),e.apiKey&&(t.searchParams.set(`apiKey`,e.apiKey),console.warn(`havik-player: passing apiKey to mountEmbed places it in the iframe URL — DEV/DEMO only. In production inject it server-side into window.HAVIK_EMBED_CONFIG on the embed page.`));let r=document.createElement(`iframe`);r.src=t.toString(),r.allow=`autoplay; encrypted-media; fullscreen`,r.setAttribute(`allowfullscreen`,``),r.referrerPolicy=`no-referrer`,r.setAttribute(`sandbox`,e.sandbox??`allow-scripts allow-same-origin allow-presentation`),r.style.cssText=`border:0;width:100%;height:100%;display:block`,e.container.appendChild(r);let i=new Set,a=t=>{if(t.source!==r.contentWindow||t.origin!==n||!Yr(t.data))return;let a=t.data;a.type===`oddin:ready`&&a.protocol!==1&&console.warn(`havik-player: embed protocol v${a.protocol} != host v1. Pin the embed page version to the SDK version to avoid skew.`),e.onEvent?.(a),i.forEach(e=>e(a))};window.addEventListener(`message`,a);let o=e=>r.contentWindow?.postMessage(e,n);return{iframe:r,play:()=>o({type:`oddin:play`}),pause:()=>o({type:`oddin:pause`}),setMuted:e=>o({type:`oddin:setMuted`,muted:e}),setVolume:e=>o({type:`oddin:setVolume`,volume:e}),setQuality:e=>o({type:`oddin:setQuality`,index:e}),setMaxBitrate:e=>o({type:`oddin:setMaxBitrate`,bitrate:e}),setAudioTrack:e=>o({type:`oddin:setAudioTrack`,id:e}),setTextTrack:e=>o({type:`oddin:setTextTrack`,id:e}),seekToLive:()=>o({type:`oddin:seekToLive`}),enterPip:()=>o({type:`oddin:enterPip`}),exitPip:()=>o({type:`oddin:exitPip`}),retry:()=>o({type:`oddin:retry`}),load:e=>o({type:`oddin:load`,matchUrn:e}),on:e=>(i.add(e),()=>i.delete(e)),destroy:()=>{o({type:`oddin:destroy`}),window.removeEventListener(`message`,a),r.remove()}}}var Zr=/^[A-Za-z0-9:_.-]{1,128}$/;function Qr(e){if(typeof e==`boolean`)return e;if(typeof e==`object`&&e){let t=e.endpoint;return typeof t==`string`?{endpoint:t}:{}}}function $r(){let e=window.HAVIK_EMBED_CONFIG;if(e)return{baseUrl:e.baseUrl??``,matchUrn:e.matchUrn??``,apiKey:e.apiKey??``,parentOrigin:e.parentOrigin,autoplay:e.autoplay??!0,muted:e.muted??!0,waitForLive:e.waitForLive??!0,analytics:Qr(e.analytics)};let t=new URLSearchParams(location.search);return{baseUrl:t.get(`baseUrl`)??``,matchUrn:t.get(`matchUrn`)??``,apiKey:t.get(`apiKey`)??``,parentOrigin:t.get(`parentOrigin`)??void 0,autoplay:!0,muted:t.get(`muted`)!==`false`,waitForLive:!0}}async function ei(){let e=$r();ni();let t=document.createElement(`video`);t.setAttribute(`playsinline`,``),t.muted=e.muted??!0,t.style.cssText=`width:100%;height:100%;object-fit:contain;background:#000;aspect-ratio:auto`,document.body.appendChild(t);let n=e.parentOrigin&&e.parentOrigin!==`null`?e.parentOrigin:null;n||console.warn(`havik-player: embed has no parentOrigin — the postMessage bridge is disabled (no events posted, no commands accepted). mountEmbed sets parentOrigin automatically.`);let r=e=>{if(n)try{window.parent?.postMessage(e,n)}catch{}};if(!e.baseUrl||!e.matchUrn||!e.apiKey){r({type:`oddin:error`,code:`INTERNAL`,message:`embed missing baseUrl/matchUrn/apiKey`});return}let i=null,a=e=>{e.on(`statechange`,e=>r({type:`oddin:state`,state:e})),e.on(`ready`,()=>r({type:`oddin:tracks`,quality:e.getQualityLevels(),audio:e.getAudioTracks(),text:e.getTextTracks()})),e.on(`waiting`,e=>r({type:`oddin:waiting`,retryInMs:e.retryInMs,attempt:e.attempt,phase:e.phase})),e.on(`qualitychange`,e=>r({type:`oddin:qualitychange`,index:e})),e.on(`audiotrackchange`,e=>r({type:`oddin:audiotrackchange`,id:e})),e.on(`texttrackchange`,e=>r({type:`oddin:texttrackchange`,id:e})),e.on(`stats`,e=>r({type:`oddin:stats`,droppedFrames:e.droppedFrames,latencySeconds:e.latencySeconds,bandwidthKbps:e.bandwidthKbps,levelHeight:e.levelHeight,lowLatency:e.lowLatency,isLive:e.isLive,atLiveEdge:e.atLiveEdge})),e.on(`error`,e=>r({type:`oddin:error`,code:e.code,message:e.message,...e.country===void 0?{}:{country:e.country}})),e.on(`autoplayblocked`,()=>{r({type:`oddin:autoplayblocked`}),ti(t,e)})},o=async n=>{i?.destroy(),i=null;try{let r=await qr({video:t,baseUrl:e.baseUrl,matchUrn:n,credential:{apiKey:e.apiKey},autoplay:e.autoplay,muted:e.muted,waitForLive:e.waitForLive,analytics:e.analytics});i=r;let o=t.parentElement;o?.classList.contains(`havik-player`)&&(o.style.cssText=`position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto`),a(r)}catch(e){let t=e instanceof l?e.code:`INTERNAL`,n=e instanceof Error?e.message:String(e),i=e instanceof l?e.country:void 0;r({type:`oddin:error`,code:t,message:n,...i===void 0?{}:{country:i}})}},s=()=>{window.removeEventListener(`message`,u),window.removeEventListener(`pagehide`,s),i?.destroy(),i=null},c=e=>{switch(e.type){case`oddin:play`:i?.play();break;case`oddin:pause`:i?.pause();break;case`oddin:setMuted`:typeof e.muted==`boolean`&&i?.setMuted(e.muted);break;case`oddin:setVolume`:typeof e.volume==`number`&&Number.isFinite(e.volume)&&i?.setVolume(e.volume);break;case`oddin:setQuality`:typeof e.index==`number`&&i?.setQuality(e.index);break;case`oddin:setMaxBitrate`:(e.bitrate===null||typeof e.bitrate==`number`&&Number.isFinite(e.bitrate))&&i?.setMaxBitrate(e.bitrate);break;case`oddin:setAudioTrack`:typeof e.id==`number`&&i?.setAudioTrack(e.id);break;case`oddin:setTextTrack`:typeof e.id==`number`&&i?.setTextTrack(e.id);break;case`oddin:seekToLive`:i?.seekToLive();break;case`oddin:enterPip`:i?.enterPictureInPicture();break;case`oddin:exitPip`:i?.exitPictureInPicture();break;case`oddin:retry`:i?.retry();break;case`oddin:load`:typeof e.matchUrn==`string`&&Zr.test(e.matchUrn)&&o(e.matchUrn);break;case`oddin:destroy`:s()}},u=e=>{n&&e.origin===n&&Yr(e.data)&&c(e.data)};n&&window.addEventListener(`message`,u),window.addEventListener(`pagehide`,s,{once:!0}),await o(e.matchUrn),r({type:`oddin:ready`,protocol:1})}function ti(e,t){if(document.getElementById(`havik-tap`))return;let n=document.createElement(`button`);n.id=`havik-tap`,n.textContent=`▶ Tap to play`,n.style.cssText=`position:fixed;inset:0;width:100%;height:100%;border:0;background:rgba(0,0,0,.55);color:#fff;font:600 18px system-ui,sans-serif;cursor:pointer;z-index:9`,n.addEventListener(`click`,()=>{n.remove(),t.play()}),document.body.appendChild(n)}function ni(){let e=document.createElement(`style`);e.textContent=`html,body{margin:0;height:100%;background:#000;overflow:hidden}body{display:flex}`,document.head.appendChild(e)}exports.LiveStateHttpError=O,exports.ODDIN_THEME=yr,exports.PlaybackError=l,exports.applyTheme=xr,exports.baseUrlForEnv=ft,exports.bootEmbed=ei,exports.clearDeviceId=Me,exports.clearRememberedBandwidth=We,exports.createPlayer=qr,exports.deriveEventsBaseUrl=A,exports.detectDrmSupport=ct,exports.enterVideoFullscreen=E,exports.exitVideoFullscreen=D,exports.fetchCatalog=Ce,exports.fetchTournament=Te,exports.flattenMatches=De,exports.fullscreenSupported=T,exports.getDeviceId=N,exports.isLowLatencyManifest=ut,exports.isOddinMessage=Yr,exports.licenseRequestHeaders=Pe,exports.mountEmbed=Xr,exports.pollToLive=ge,exports.resolveStream=S,exports.subscribeLiveState=k,exports.videoFullscreenActive=Se,exports.watchStatus=ke;
131
+ `,Er=new WeakMap;function Dr(e=document,t){let n=e.querySelector(`style#${wr}`);if(n&&(!t||Er.get(n)===t))return;let r=e.createElement(`style`);r.id=wr,t&&(r.nonce=t,r.setAttribute(`nonce`,t)),r.textContent=Tr,Er.set(r,t),n?n.replaceWith(r):e.head.appendChild(r)}var Or={play:`<path d="M8 5v14l11-7z"/>`,pause:`<path d="M6 5h4v14H6zM14 5h4v14h-4z"/>`,volumeHigh:`<path d="M3 10v4h4l5 5V5L7 10H3zm13.5 2a4.5 4.5 0 0 0-2.5-4v8a4.5 4.5 0 0 0 2.5-4zm-2.5-9v2.06A7 7 0 0 1 14 19v2a9 9 0 0 0 0-18z"/>`,volumeMute:`<path d="M3 10v4h4l5 5V5L7 10H3zm16.5 2 2.5-2.5-1.4-1.4L18 10.6 15.4 8 14 9.4l2.6 2.6L14 14.6l1.4 1.4 2.6-2.6 2.6 2.6 1.4-1.4z"/>`,cc:`<path d="M19 4H5a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zM10 11H8.5v-.5h-2v3h2V13H10v1a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1zm7 0h-1.5v-.5h-2v3h2V13H17v1a1 1 0 0 1-1 1h-3a1 1 0 0 1-1-1v-4a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v1z"/>`,settings:`<path d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.11-.2.06-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>`,pip:`<path d="M19 7h-8v6h8V7zm4 12V5a2 2 0 0 0-2-2H3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2zm-2 .02H3V4.98h18v14.04z"/>`,fullscreen:`<path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/>`,fullscreenExit:`<path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"/>`,liveDot:`<circle cx="12" cy="12" r="6"/>`,retry:`<path d="M17.65 6.35A8 8 0 1 0 19.73 13h-2.08A6 6 0 1 1 12 6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"/>`};function $(e){return`<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false" fill="currentColor">${Or[e]}</svg>`}var kr=3e3,Ar=250,jr=new Set([`GONE`,`NOT_FOUND`,`GEO_DENIED`,`INVALID_URN`,`UNAUTHORIZED`,`DRM_DEVICE_REVOKED`]);function Mr(e){let t=`This match isn't available in your country`;return e?`${t} (${e})`:t}var Nr=`This device can't play protected video`;function Pr(e){return new Fr(e)}var Fr=class{root;video;player;doc;autoHideMs;overlay;center;spinner;bar;gradient;seek;seekBuffered;seekPlayed;seekThumb;playBtn;muteBtn;volSlider;live;liveGo;time;ccBtn;audioBtn;qualityBtn;pipBtn;fsBtn;menu;statusBox=null;statusKind=null;statusMsg=null;hasPlayed=!1;fsSupported=!0;lastError=null;logoUrl;statusOverlays;streamEnded;endedMessage;interruptedMessage;errorMessage;offlineMessage;hideTimer;tapTimer;surfacePointerType=``;surfaceWasHidden=!1;pointerClosedMenu=!1;openMenu=null;scrubbing=!1;offFns=[];constructor(e){this.root=e.root,this.video=e.video,this.player=e.player,this.doc=e.root.ownerDocument??document,this.autoHideMs=e.autoHideMs??kr,this.logoUrl=e.logoUrl,this.statusOverlays=e.statusOverlays!==!1,this.streamEnded=e.streamEnded??(()=>!1),this.endedMessage=e.endedMessage??`This stream has ended`,this.interruptedMessage=e.interruptedMessage??`Reconnecting — please stand by`,this.errorMessage=e.errorMessage,this.offlineMessage=e.offlineMessage??`No internet connection — waiting to reconnect`,Dr(this.doc,e.cspNonce),this.root.classList.add(`havik-player`),this.root.hasAttribute(`tabindex`)||(this.root.tabIndex=0),this.root.setAttribute(`role`,`region`),this.root.setAttribute(`aria-label`,`Video player`);let t=(e,t,n)=>{let r=this.doc.createElement(e);if(r.className=t,n)for(let[e,t]of Object.entries(n))r.setAttribute(e,t);return r},n=(e,n,r)=>{let i=t(`button`,e,{type:`button`,"aria-label":r,title:r});return i.innerHTML=$(n),i};this.overlay=t(`div`,`havik-overlay`),this.center=t(`button`,`havik-center`,{type:`button`,"aria-label":`Play`}),this.center.innerHTML=$(`play`),this.spinner=t(`div`,`havik-spinner`),this.spinner.style.display=`none`,this.overlay.append(this.center,this.spinner),this.gradient=t(`div`,`havik-gradient`),this.bar=t(`div`,`havik-bar`),this.seek=t(`div`,`havik-seek`,{role:`slider`,"aria-label":`Seek`,"aria-valuemin":`0`,"aria-valuemax":`100`,tabindex:`0`});let r=t(`div`,`havik-seek__track`);this.seekBuffered=t(`div`,`havik-seek__buffered`),this.seekPlayed=t(`div`,`havik-seek__played`),this.seekThumb=t(`div`,`havik-seek__thumb`),r.append(this.seekBuffered,this.seekPlayed,this.seekThumb),this.seek.append(r);let i=t(`div`,`havik-controls`);this.playBtn=n(`havik-btn`,`play`,`Play`),this.muteBtn=n(`havik-btn`,`volumeHigh`,`Mute`),this.volSlider=t(`input`,`havik-vol__slider`,{type:`range`,min:`0`,max:`1`,step:`0.05`,"aria-label":`Volume`});let a=t(`div`,`havik-vol`);a.append(this.muteBtn,this.volSlider),this.live=t(`div`,`havik-live`),this.live.innerHTML=$(`liveDot`);let o=this.doc.createElement(`span`);o.textContent=`LIVE`,this.liveGo=t(`button`,`havik-live__go`,{type:`button`}),this.liveGo.textContent=`Go live`,this.live.append(o,this.liveGo),this.time=t(`div`,`havik-time`),this.time.textContent=`0:00`,this.time.style.display=`none`;let s=t(`div`,`havik-spacer`);if(this.ccBtn=n(`havik-btn`,`cc`,`Subtitles`),this.audioBtn=n(`havik-btn`,`settings`,`Audio track`),this.qualityBtn=n(`havik-btn`,`settings`,`Quality`),this.pipBtn=n(`havik-btn`,`pip`,`Picture in picture`),this.fsBtn=n(`havik-btn`,`fullscreen`,`Fullscreen`),this.ccBtn.style.display=`none`,this.audioBtn.style.display=`none`,this.qualityBtn.style.display=`none`,this.pipSupported()||(this.pipBtn.style.display=`none`),this.syncFullscreenSupport(),i.append(this.playBtn,a,this.live,this.time,s,this.ccBtn,this.audioBtn,this.qualityBtn,this.pipBtn,this.fsBtn),this.bar.append(this.seek,i),this.menu=t(`div`,`havik-menu`,{role:`menu`}),this.menu.hidden=!0,this.root.append(this.gradient,this.overlay,this.bar,this.menu),e.logoUrl){let n=t(`div`,`havik-watermark`);n.style.backgroundImage=`url("${e.logoUrl}")`,this.root.append(n)}this.wire(),this.syncPlayPause(),this.syncVolume(),this.scheduleHide()}on(e,t,n,r){e.addEventListener(t,n,r),this.offFns.push(()=>e.removeEventListener(t,n,r))}wire(){let e=this.video;this.on(this.playBtn,`click`,()=>this.togglePlay()),this.on(this.center,`click`,()=>this.togglePlay()),this.on(this.overlay,`pointerdown`,e=>{this.surfacePointerType=e.pointerType??``,this.surfaceWasHidden=this.root.classList.contains(`havik-hide`)}),this.on(this.overlay,`click`,e=>{e.target===this.overlay&&this.onSurfaceClick()}),this.on(this.muteBtn,`click`,()=>this.player.setMuted(!e.muted)),this.on(this.volSlider,`input`,()=>{let t=Number(this.volSlider.value);this.setVolumeFill(t),this.player.setVolume(t),t>0&&e.muted&&this.player.setMuted(!1)}),this.on(this.liveGo,`click`,()=>this.player.seekToLive()),this.on(this.pipBtn,`click`,()=>void this.togglePip()),this.on(this.fsBtn,`click`,()=>void this.toggleFullscreen()),this.on(this.ccBtn,`click`,()=>this.toggleMenu(`cc`)),this.on(this.audioBtn,`click`,()=>this.toggleMenu(`audio`)),this.on(this.qualityBtn,`click`,()=>this.toggleMenu(`quality`)),this.on(this.seek,`pointerdown`,e=>this.onSeekDown(e)),this.on(this.seek,`keydown`,e=>this.onSeekKey(e)),this.on(e,`play`,()=>this.syncPlayPause()),this.on(e,`pause`,()=>this.syncPlayPause()),this.on(e,`volumechange`,()=>this.syncVolume()),this.on(e,`timeupdate`,()=>this.syncProgress()),this.on(e,`progress`,()=>this.syncProgress()),this.on(e,`durationchange`,()=>this.syncProgress()),this.on(e,`loadedmetadata`,()=>this.syncFullscreenSupport()),this.offFns.push(this.player.on(`statechange`,()=>this.syncState())),this.offFns.push(this.player.on(`ended`,()=>this.syncState())),this.offFns.push(this.player.on(`offline`,()=>this.syncState())),this.offFns.push(this.player.on(`online`,()=>this.syncState())),this.offFns.push(this.player.on(`ready`,()=>this.refreshTracks())),this.offFns.push(this.player.on(`qualitychange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`audiotrackchange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`texttrackchange`,()=>this.onTracksChanged())),this.offFns.push(this.player.on(`pipchange`,e=>this.syncPip(e))),this.offFns.push(this.player.on(`stats`,()=>this.syncLive())),this.offFns.push(this.player.on(`error`,e=>{this.lastError=e,this.statusKind=null,this.syncState()}));let t=e=>e.pointerType!==`touch`;this.on(this.root,`pointermove`,e=>{t(e)&&this.poke()}),this.on(this.root,`pointerleave`,e=>{t(e)&&this.scheduleHide(0)}),this.on(this.root,`focusin`,()=>this.poke()),this.on(this.root,`keydown`,e=>this.onKey(e)),this.on(this.doc,`pointerdown`,e=>this.onDocPointer(e),{capture:!0}),this.on(this.doc,`fullscreenchange`,()=>this.syncFullscreen()),this.on(this.doc,`webkitfullscreenchange`,()=>this.syncFullscreen()),this.on(e,`webkitbeginfullscreen`,()=>this.syncFullscreen()),this.on(e,`webkitendfullscreen`,()=>this.syncFullscreen()),this.syncState()}togglePlay(){this.video.paused||this.video.ended?this.player.play():this.player.pause()}onSurfaceClick(){let e=this.surfacePointerType===`touch`;if(this.surfacePointerType=``,!e){this.tapTimer&&clearTimeout(this.tapTimer),this.tapTimer=void 0,this.togglePlay();return}if(this.pointerClosedMenu){this.tapTimer&&clearTimeout(this.tapTimer),this.tapTimer=void 0,this.poke();return}if(this.tapTimer){clearTimeout(this.tapTimer),this.tapTimer=void 0,this.togglePlay();return}let t=this.surfaceWasHidden;this.tapTimer=setTimeout(()=>{this.tapTimer=void 0,this.toggleBar(t)},Ar)}toggleBar(e){e?this.poke():this.hideIfIdle()}syncPlayPause(){let e=!this.video.paused&&!this.video.ended;this.setIcon(this.playBtn,e?`pause`:`play`),this.playBtn.setAttribute(`aria-label`,e?`Pause`:`Play`),this.setIcon(this.center,e?`pause`:`play`),this.center.classList.toggle(`havik-gone`,e||!!this.statusBox),e?this.scheduleHide():this.show()}syncState(){let e=this.player.state;(e===`playing`||e===`buffering`)&&(this.hasPlayed=!0),this.syncStatus(e);let t=e===`loading`||e===`buffering`;this.spinner.style.display=t&&!this.statusBox?``:`none`,(t||this.statusBox)&&this.center.classList.add(`havik-gone`),this.syncLive()}syncStatus(e){let t=null;if(this.statusOverlays){let n=this.player.offline&&e!==`ended`&&e!==`idle`,r=!this.hasPlayed&&(e===`paused`||e===`waiting`);e===`ended`?t=`ended`:n&&!r?t=`offline`:e===`error`?t=`error`:e===`waiting`?t=`waiting`:!this.hasPlayed&&(e===`idle`||e===`paused`)&&(t=`preplay`)}this.renderStatus(t)}statusMessageFor(e){return e===`ended`?this.player.endedReason===`interrupted`?this.interruptedMessage:this.endedMessage:e===`offline`?this.offlineMessage:e===`waiting`?this.hasPlayed?`Reconnecting — please stand by`:`Starting soon…`:e===`error`?this.errorMessage===void 0?this.lastError?.code===`GEO_DENIED`?Mr(this.lastError.country):this.lastError?.code===`DRM_DEVICE_REVOKED`?Nr:this.lastError?.message??`Playback unavailable`:this.errorMessage:null}renderStatus(e){let t=this.statusMessageFor(e);if(e===this.statusKind&&t===this.statusMsg||(this.statusKind=e,this.statusMsg=t,this.statusBox?.remove(),this.statusBox=null,this.root.classList.toggle(`havik-has-status`,!!e),!e))return;let n=this.doc.createElement(`div`);if(n.className=`havik-status havik-status--${e}`,this.logoUrl){let e=this.doc.createElement(`div`);e.className=`havik-status__logo`,n.append(e)}if(e===`preplay`){let e=this.doc.createElement(`button`);e.type=`button`,e.className=`havik-status__btn havik-status__btn--play`,e.setAttribute(`aria-label`,`Play`),e.innerHTML=$(`play`),e.addEventListener(`click`,()=>void this.player.play()),n.append(e)}else{let r=this.doc.createElement(`div`);if(r.className=`havik-status__msg`,r.textContent=t??``,n.append(r),e===`error`&&this.lastError&&!jr.has(this.lastError.code)){let e=this.doc.createElement(`button`);e.type=`button`,e.className=`havik-status__btn`,e.innerHTML=`${$(`retry`)}<span>Retry</span>`,e.addEventListener(`click`,()=>void this.player.retry()),n.append(e)}}this.root.append(n),this.statusBox=n,this.show()}syncVolume(){let e=this.video,t=e.muted||e.volume===0;this.setIcon(this.muteBtn,t?`volumeMute`:`volumeHigh`),this.muteBtn.setAttribute(`aria-label`,t?`Unmute`:`Mute`);let n=t?0:e.volume;this.volSlider.value=String(n),this.setVolumeFill(n)}setVolumeFill(e){this.volSlider.style.setProperty(`--havik-vol`,String(Math.min(1,Math.max(0,e))))}seekableRange(){let e=this.video,t,n;if(e.seekable&&e.seekable.length>0)t=e.seekable.start(0),n=e.seekable.end(e.seekable.length-1);else if(Number.isFinite(e.duration)&&e.duration>0)t=0,n=e.duration;else return null;let r=this.player.getStats();return r.isLive!==!1&&r.targetLatencySeconds&&r.targetLatencySeconds>0&&(n=Math.max(t,n-r.targetLatencySeconds)),n>t?{start:t,end:n}:null}syncProgress(){if(this.scrubbing)return;let e=this.seekableRange();if(!e){this.seekPlayed.style.width=`100%`;return}let t=e.end-e.start,n=Math.min(1,Math.max(0,(this.video.currentTime-e.start)/t));this.seekPlayed.style.width=`${(n*100).toFixed(2)}%`,this.seekThumb.style.left=`${(n*100).toFixed(2)}%`,this.seek.setAttribute(`aria-valuenow`,String(Math.round(n*100)));let r=this.video.buffered;if(r&&r.length>0){let n=r.end(r.length-1),i=Math.min(1,Math.max(0,(n-e.start)/t));this.seekBuffered.style.width=`${(i*100).toFixed(2)}%`}!this.player.getStats().isLive&&Number.isFinite(this.video.duration)&&(this.time.textContent=`${Ir(this.video.currentTime)} / ${Ir(this.video.duration)}`)}syncLive(){let e=this.player.getStats(),t=e.isLive!==!1,n=this.player.state===`ended`,r=!t&&!this.streamEnded();this.live.style.display=t&&!n?``:`none`,this.time.style.display=r?``:`none`,this.seek.style.display=r?``:`none`,this.live.classList.toggle(`is-live`,e.atLiveEdge!==!1&&t)}onSeekDown(e){let t=this.seekableRange();if(!t)return;e.preventDefault(),this.scrubbing=!0;let n=e=>this.seekToPointer(e,t),r=()=>{this.scrubbing=!1,this.doc.removeEventListener(`pointermove`,n),this.doc.removeEventListener(`pointerup`,r)};this.doc.addEventListener(`pointermove`,n),this.doc.addEventListener(`pointerup`,r),this.seekToPointer(e,t)}seekToPointer(e,t){let n=this.seek.getBoundingClientRect(),r=n.width>0?Math.min(1,Math.max(0,(e.clientX-n.left)/n.width)):0;this.seekPlayed.style.width=`${(r*100).toFixed(2)}%`,this.seekThumb.style.left=`${(r*100).toFixed(2)}%`,this.video.currentTime=t.start+r*(t.end-t.start)}onSeekKey(e){e.key===`ArrowLeft`?(this.nudge(-5),e.preventDefault()):e.key===`ArrowRight`&&(this.nudge(5),e.preventDefault())}nudge(e){let t=this.seekableRange();t&&(this.video.currentTime=Math.min(t.end,Math.max(t.start,this.video.currentTime+e)))}toggleMenu(e){if(this.openMenu===e){this.closeMenu();return}this.openMenu=e,this.renderMenu(e),this.menu.hidden=!1,this.show()}closeMenu(){this.openMenu=null,this.menu.hidden=!0,this.menu.replaceChildren()}renderMenu(e){e===`quality`?this.renderQualityMenu():e===`audio`?this.renderAudioMenu():this.renderCcMenu()}menuItem(e,t,n){let r=this.doc.createElement(`button`);r.type=`button`,r.className=`havik-menu__item`,r.setAttribute(`role`,`menuitemradio`),r.setAttribute(`aria-checked`,t?`true`:`false`);let i=this.doc.createElement(`span`);return i.textContent=e,r.append(i),r.addEventListener(`click`,()=>{n(),this.closeMenu()}),r}renderQualityMenu(){let e=this.player.getQualityLevels(),t=this.player.getCurrentQuality(),n=this.doc.createElement(`div`);n.className=`havik-menu__title`,n.textContent=`Quality`,this.menu.replaceChildren(n,this.menuItem(`Auto`,t===-1,()=>this.player.setQuality(`auto`)));for(let n of e)this.menu.append(this.menuItem(Lr(n),t===n.index,()=>this.player.setQuality(n.index)))}renderAudioMenu(){let e=this.player.getAudioTracks(),t=this.doc.createElement(`div`);t.className=`havik-menu__title`,t.textContent=`Audio`,this.menu.replaceChildren(t);for(let t of e)this.menu.append(this.menuItem(Rr(t),t.default,()=>this.player.setAudioTrack(t.id)))}renderCcMenu(){let e=this.player.getTextTracks(),t=this.doc.createElement(`div`);t.className=`havik-menu__title`,t.textContent=`Subtitles`,this.menu.replaceChildren(t,this.menuItem(`Off`,!1,()=>this.player.setTextTrack(-1)));for(let t of e)this.menu.append(this.menuItem(zr(t),!1,()=>this.player.setTextTrack(t.id)))}onTracksChanged(){this.openMenu&&this.renderMenu(this.openMenu)}refreshTracks(){let e=this.player.getQualityLevels(),t=this.player.getAudioTracks(),n=this.player.getTextTracks();this.qualityBtn.style.display=e.length>1?``:`none`,this.audioBtn.style.display=t.length>1?``:`none`,this.ccBtn.style.display=n.length>0?``:`none`,this.onTracksChanged()}pipSupported(){return`pictureInPictureEnabled`in this.doc&&typeof this.video.requestPictureInPicture==`function`}async togglePip(){this.doc.pictureInPictureElement===this.video?await this.player.exitPictureInPicture():await this.player.enterPictureInPicture()}syncPip(e){this.pipBtn.setAttribute(`aria-pressed`,e?`true`:`false`)}async toggleFullscreen(){try{T(this.video,this.root)?await O(this.video,this.root):await D(this.video,this.root)}catch{}}syncFullscreenSupport(){this.fsSupported=E(this.video,this.root),this.fsBtn.style.display=this.fsSupported?``:`none`}syncFullscreen(){let e=T(this.video,this.root);this.setIcon(this.fsBtn,e?`fullscreenExit`:`fullscreen`),this.fsBtn.setAttribute(`aria-label`,e?`Exit fullscreen`:`Fullscreen`)}poke(){this.show(),this.scheduleHide()}show(){this.root.classList.remove(`havik-hide`)}scheduleHide(e=this.autoHideMs){this.hideTimer&&clearTimeout(this.hideTimer),this.hideTimer=setTimeout(()=>this.hideIfIdle(),e)}hideIfIdle(){!this.video.paused&&!this.video.ended&&!this.openMenu&&!this.statusBox&&this.root.classList.add(`havik-hide`)}onDocPointer(e){this.pointerClosedMenu=!1,this.openMenu&&!this.menu.contains(e.target)&&([this.qualityBtn,this.audioBtn,this.ccBtn].some(t=>t.contains(e.target))||(this.closeMenu(),this.pointerClosedMenu=!0))}onKey(e){let t=e.target;if(!(t&&t!==this.root&&t!==this.seek&&t.tagName===`INPUT`)){switch(e.key){case` `:case`k`:this.togglePlay();break;case`m`:this.player.setMuted(!this.video.muted);break;case`f`:if(!this.fsSupported)return;this.toggleFullscreen();break;case`c`:this.ccBtn.style.display!==`none`&&this.toggleMenu(`cc`);break;case`l`:this.player.seekToLive();break;case`ArrowUp`:this.player.setVolume(Math.min(1,this.video.volume+.1));break;case`ArrowDown`:this.player.setVolume(Math.max(0,this.video.volume-.1));break;case`ArrowLeft`:this.nudge(-5);break;case`ArrowRight`:this.nudge(5);break;default:return}this.poke(),e.preventDefault()}}setIcon(e,t){e.innerHTML=$(t)}destroy(){this.hideTimer&&clearTimeout(this.hideTimer),this.tapTimer&&clearTimeout(this.tapTimer);for(let e of this.offFns)try{e()}catch{}this.offFns.length=0,this.closeMenu(),this.statusBox?.remove();for(let e of[this.overlay,this.gradient,this.bar,this.menu])e.remove();this.root.classList.remove(`havik-player`,`havik-hide`,`havik-has-status`)}};function Ir(e){(!Number.isFinite(e)||e<0)&&(e=0);let t=Math.floor(e%60),n=Math.floor(e/60%60),r=Math.floor(e/3600),i=r>0?String(n).padStart(2,`0`):String(n),a=String(t).padStart(2,`0`);return r>0?`${r}:${i}:${a}`:`${i}:${a}`}function Lr(e){return e.height?`${e.height}p`:`${Math.round(e.bitrate/1e3)} kbps`}function Rr(e){return e.name||e.lang||`Track ${e.id}`}function zr(e){return e.name||e.lang||`Track ${e.id}`}var Br=6e3,Vr=45e3,Hr=2e3,Ur=3,Wr=5e3,Gr=2e3,Kr=48e4,qr=`keySystemLicenseRequestFailed`,Jr=new Set([`GONE`,`NOT_FOUND`,`INVALID_URN`,`UNAUTHORIZED`,`GEO_DENIED`,`DRM_DEVICE_REVOKED`]);function Yr(e){return!Jr.has(e)}function Xr(e){if(e.env!==void 0&&e.baseUrl!==void 0)throw new l(`INTERNAL`,0,`createPlayer: pass env OR baseUrl, not both (got env=${JSON.stringify(e.env)} and baseUrl=${JSON.stringify(e.baseUrl)})`);if(e.env!==void 0)return ft(e.env);if(!e.baseUrl)throw new l(`INTERNAL`,0,`createPlayer: env or baseUrl is required (env: 'integration' | 'production')`);return e.baseUrl}async function Zr(e){if(!e.video||typeof e.video.play!=`function`)throw new l(`INTERNAL`,0,`createPlayer: opts.video must be an HTMLVideoElement`);let t=Xr(e);if(!e.matchUrn)throw new l(`INVALID_URN`,0,`createPlayer: matchUrn is required`);if(!e.credential)throw new l(`INTERNAL`,0,`createPlayer: credential is required`);let n=new Qr({...e,baseUrl:t});return await n.start(),n}var Qr=class{opts;abort=new AbortController;listeners={};engine=null;controlBar=null;container=null;detachMedia;detachPip;detachEndedPlayGuard;statsTimer;refreshTimer;refreshInFlight;onRefocus;onReturnVisible=null;onReturnPageShow=null;hiddenAtMs=null;staleLicenseReloaded=!1;_state=`idle`;_descriptor=null;destroyed=!1;loadGen=0;liveStateSub=null;endedHandled=!1;_endedReason=null;rejoinTimer=null;armingSub=null;armSseTimer=null;armFallbackCtrl=null;_lastError=null;analyticsSession=null;detachMediaListeners;playRequested=!1;idleClosed=!1;pendingStartLoad=!1;connectivity=null;failedWhileOffline=!1;constructor(e){this.opts=e}get state(){return this._state}get offline(){return!V()}get descriptor(){return this._descriptor}get endedReason(){return this._endedReason}async start(){this.opts.muted&&(this.opts.video.muted=!0),this.opts.poster&&(this.opts.video.poster=this.opts.poster),this.mountControls(),this.attachPipListeners(),this.attachEndedPlayGuard(),this.watchConnectivity(),this.setState(`loading`);let e=++this.loadGen,t=this.resolveOptions();try{let n=await x(t);if(await this.onResolved(n,e),e===this.loadGen&&this._state===`error`&&this._lastError){let e=this._lastError;throw this.destroy(),e}}catch(t){if(this.opts.waitForLive&&t instanceof l&&m(t.code)){this.setState(`waiting`),this.beginArming(e,t.liveStartsAtMs);return}throw this.destroy(),t}}resolveOptions(){return{baseUrl:this.opts.baseUrl,matchUrn:this.opts.matchUrn,credential:this.opts.credential,signal:this.abort.signal,apiHeaders:this.opts.apiHeaders}}beginArming(e,t,n=!1){let r=this.opts.liveStateEvents===!1?void 0:this.opts.eventsBaseUrl??j(this.opts.baseUrl);r?this.armWithSse(e,r,t,n):this.beginArmingByPolling(e)}beginArmingByPolling(e){S({...this.resolveOptions(),signal:this.abort.signal,waitForLive:this.buildWaitConfig(e)}).then(t=>{if(!(this.destroyed||this.abort.signal.aborted||e!==this.loadGen))return this.onResolved(t,e)}).catch(t=>{this.destroyed||this.abort.signal.aborted||e!==this.loadGen||this.fail(t instanceof l?t:new l(`INTERNAL`,0,String(t)))})}armWithSse(e,t,n,r=!1){let i=!1,a=!1,o=new AbortController;this.armFallbackCtrl=o,this.setState(`waiting`);let s=this.opts.waitForLive,c=s&&s!==!0?s.kickoffAt:void 0,u=typeof c==`number`?c:typeof c==`string`?Date.parse(c):NaN,d=n??(Number.isFinite(u)?u:void 0);setTimeout(()=>{i||this.destroyed||e!==this.loadGen||this.emit(`waiting`,{phase:r?`unavailable`:`tooEarly`,retryInMs:Vr,attempt:1,elapsedMs:0,...!r&&d!==void 0&&d>Date.now()?{ttkMs:d-Date.now()}:{}})},0);let f=()=>this.destroyed||this.abort.signal.aborted||e!==this.loadGen,p=async t=>{if(!(i||f())){i=!0,this.closeArming(),o.abort();try{await this.onResolved(t,e)}catch(e){if(f())return;this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e)))}}},h=()=>{i||a||f()||(a=!0,S({...this.resolveOptions(),signal:o.signal,waitForLive:this.buildWaitConfig(e)}).then(e=>p(e)).catch(e=>{i||f()||o.signal.aborted||(i=!0,this.closeArming(),this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e))))}))},g=()=>{i||f()||x(this.resolveOptions()).then(e=>p(e)).catch(e=>{if(!(i||f())){if(e instanceof l&&m(e.code)){h();return}i=!0,this.closeArming(),o.abort(),this.fail(e instanceof l?e:new l(`INTERNAL`,0,String(e)))}})},_=e=>{this.armSseTimer&&clearTimeout(this.armSseTimer),this.armSseTimer=setTimeout(()=>{!i&&!f()&&h()},e)};_(Br),this.armingSub=A({eventsBaseUrl:t,matchUrn:this.opts.matchUrn,credential:this.opts.credential,onAlive:()=>_(Vr),onState:e=>{i||f()||(e.state===`live`||e.state===`gone`)&&setTimeout(g,Math.random()*Hr)},onError:()=>h()})}closeArming(){this.armSseTimer&&=(clearTimeout(this.armSseTimer),null),this.armFallbackCtrl?.abort(),this.armFallbackCtrl=null,this.armingSub?.close(),this.armingSub=null}buildWaitConfig(e){let t=this.opts.waitForLive&&this.opts.waitForLive!==!0?this.opts.waitForLive:{};return{...t,onState:n=>{this.destroyed||e!==this.loadGen||(this.setState(`waiting`),this.emit(`waiting`,n),t.onState?.(n))}}}async onResolved(e,t){if(this.destroyed||t!==this.loadGen)return;this._descriptor=e,this.endedHandled=!1,this._endedReason=null;let n=await h(this.opts.credential);if(this.destroyed||t!==this.loadGen)return;this.setState(`loading`);let r=this.opts.autoplay===!1&&!this.playRequested,i=this.createEngine(e,n,r),a=yt(this.opts.video,e=>{this._state!==`ended`&&this._state!==`error`&&this.setState(e)});if(await i.load(),this.destroyed||t!==this.loadGen){a(),i.destroy();return}if(this._state===`error`){a(),i.destroy();return}this.engine=i,this.detachMedia=a,this.opts.maxBitrate!=null&&i.setMaxBitrate(this.opts.maxBitrate),this.startStats(),this.scheduleLicenseRefresh(),this.startLiveState(t),this.watchReturn(),this.startAnalytics(e,i,t),r&&(this.pendingStartLoad=!0,this.setState(`paused`),i.name===`native`&&setTimeout(()=>{this.destroyed||t!==this.loadGen||this.engine!==i||(this.analyticsSession?.noteReady(),this.emit(`ready`))},0))}onAnalyticsIdle(e){this.destroyed||this.engine!==e||(this.idleClosed=!0,this.pendingStartLoad=!1,e.stop())}startAnalytics(e,t,n){if(this.analyticsSession?.noteDestroyed(),this.analyticsSession=null,this.detachMediaListeners?.(),this.opts.analytics===!1)return;let r=e.analytics?.sid;if(!r)return;let i=typeof this.opts.analytics==`object`?this.opts.analytics.endpoint:void 0,{endpoint:a,disabledReason:o}=pr(this.opts.baseUrl,i,e.analytics?.endpoint);if(!a){o&&setTimeout(()=>{this.destroyed||n!==this.loadGen||this.emit(`warning`,new l(`INTERNAL`,0,o))},0);return}let s=this.opts.video,c=new mr({endpoint:a,sid:r,player:t.name===`native`?`PLAYER_SAFARI_NATIVE`:`PLAYER_HLSJS`,sdkVersion:br,environment:vr(s),idleMs:typeof this.opts.analytics==`object`?this.opts.analytics.idleMs:void 0,onIdle:()=>this.onAnalyticsIdle(t),onBlocked:e=>setTimeout(()=>{this.destroyed||n!==this.loadGen||this.emit(`warning`,new l(`INTERNAL`,0,e))},0),sample:()=>{let e=this.engine?.getStats()??mt,t=s.buffered.length?Math.max(0,s.buffered.end(s.buffered.length-1)-s.currentTime):0;return{...e,bufferedMs:Math.round(t*1e3),state:this._state,positionMs:Math.round(s.currentTime*1e3),playbackRate:s.playbackRate}}});this.analyticsSession=c;let u=()=>c.noteSeek(),d=()=>c.noteVolume(s.muted,s.volume);s.addEventListener(`seeking`,u),s.addEventListener(`volumechange`,d),this.detachMediaListeners=()=>{s.removeEventListener(`seeking`,u),s.removeEventListener(`volumechange`,d)},c.start(),c.seedVolume(s.muted,s.volume),c.notePresentation(this.currentPresentation()),yr().then(e=>c.noteEnvironment(e)),this.opts.autoplay===!1&&c.noteAutoplay(`AUTOPLAY_RESULT_NOT_ATTEMPTED`)}currentPresentation(){let e=this.opts.video;if(typeof document<`u`&&document.pictureInPictureElement===e)return`pip`;let t=typeof document<`u`?document.fullscreenElement:null;return e.webkitDisplayingFullscreen===!0||t&&(t===e||t.contains(e))?`fullscreen`:`inline`}createEngine(e,t,n=!1){let r={...this.opts.hlsConfig};this.opts.startLevel!=null&&(r.startLevel=this.opts.startLevel),this.opts.liveLatencyTarget!=null&&(r.liveSyncDuration=this.opts.liveLatencyTarget);let i={video:this.opts.video,descriptor:e,credential:t,deviceId:P(),userId:this.opts.userId,lowLatency:this.opts.lowLatency===void 0||this.opts.lowLatency===`auto`||this.opts.lowLatency,snapToLiveOnRefocus:this.opts.snapToLiveOnRefocus,rememberBandwidth:this.opts.rememberBandwidth,sizeCapHeadroom:this.opts.sizeCapHeadroom,adaptiveHoldBack:this.opts.adaptiveHoldBack,adaptiveHoldBackCeiling:this.opts.adaptiveHoldBackCeiling,mediaDuringKey:this.opts.mediaDuringKey,preloadHints:this.opts.preloadHints,debug:this.opts.debug,deferLoad:n,hlsConfig:r,emit:e=>this.onEngineEvent(e),freshLicenseUrl:()=>this.refreshLicense()},a=this.opts.engine??`auto`;if(a===`native`)return new K(i);if(a===`hls`)return new qn(i);if(e.drmEnabled&&e.drm?.fairplay?.licenseUrl&&e.drm.fairplay.certificateUrl&&W(this.opts.video)&&G()||!e.drmEnabled&&jt()&&W(this.opts.video))return new K(i);if(qt())return new qn(i);if(W(this.opts.video))return new K(i);throw new l(`INTERNAL`,0,`no supported HLS playback engine in this browser`)}onEngineEvent(e){if(!this.destroyed)switch(e.type){case`firstPlaylist`:this.analyticsSession?.noteFirstPlaylist();break;case`firstBytes`:this.analyticsSession?.noteFirstBytes();break;case`drmReady`:this.analyticsSession?.noteDrmReady(),this.staleLicenseReloaded=!1;break;case`ready`:this.analyticsSession?.noteReady(),this.emit(`ready`),(this.opts.autoplay!==!1||this.playRequested)&&this.play();break;case`lowLatencyDetected`:this._descriptor&&(this._descriptor.isLowLatency=e.value);break;case`livetargetchange`:this.emit(`latencytargetchange`,e.change);break;case`qualitychange`:this.emit(`qualitychange`,e.index);break;case`audiotrackchange`:this.emit(`audiotrackchange`,e.id);break;case`texttrackchange`:this.emit(`texttrackchange`,e.id);break;case`ended`:this.onStreamEnded();break;case`error`:{let t=e.fatal&&this.isStaleLicenseDenial(e);if(this.analyticsSession?.noteError(e.error.code,e.error.message,e.fatal&&!t,e.error.httpStatus??0,Math.round(this.opts.video.currentTime*1e3),e.detail),t){this.staleLicenseReloaded=!0;let t=this.loadGen;this.emit(`warning`,e.error),Promise.resolve().then(()=>{if(!(this.destroyed||t!==this.loadGen)&&this._state!==`error`&&this._state!==`ended`)return this.reload().catch(()=>void 0)})}else e.fatal?this.fail(e.error):this.emit(`warning`,e.error);break}}}startLiveState(e){if(this.opts.liveStateEvents===!1)return;let t=this.opts.eventsBaseUrl??j(this.opts.baseUrl);if(!t)return;this.closeLiveState();let n=0,r=!1;this.liveStateSub=A({eventsBaseUrl:t,matchUrn:this.opts.matchUrn,credential:this.opts.credential,onState:t=>{this.destroyed||e!==this.loadGen||(t.state===`gone`?this.onStreamEnded(!0,t.reason??`match_ended`):t.state===`ended`?this.onStreamEnded(!1,t.reason):t.state===`live`&&this.endedHandled&&this.scheduleRejoin(e))},onAlive:()=>{n=0,r=!1},onError:i=>{if(!(this.destroyed||e!==this.loadGen||r)&&!this.endedHandled){if(i instanceof k&&(i.terminal||i.status===404)){r=!0,this.emit(`warning`,new l(u(i.status),i.status,`live-state events answered HTTP ${i.status} for ${this.opts.matchUrn}: the match is `+(i.terminal?`gone, so the subscription stopped`:`not in the catalog (ended and dropped, or not listed yet), so it retries every 5 min`)+` — end-of-stream detection falls back to the HLS staleness watchdog.`));return}n+=1,n>=Ur&&(r=!0,this.emit(`warning`,new l(`NETWORK`,0,`live-state events unreachable at ${t} after ${n} attempts — end-of-stream detection degraded to the HLS staleness watchdog. Check the events host, the api-key's allowed origins, and CSP connect-src.`)))}}})}closeLiveState(){this.liveStateSub?.close(),this.liveStateSub=null}watchConnectivity(){this.connectivity||(this.connectivity=pt(),this.connectivity.onChange(e=>{if(this.destroyed)return;if(!e){this.emit(`offline`);return}if(this.emit(`online`),this._state!==`error`||!this._lastError)return;let t=this._lastError.code;Yr(t)&&(t===`NETWORK`||this.failedWhileOffline)&&this.retry().catch(()=>void 0)}))}watchReturn(){this.onReturnVisible||typeof document>`u`||this.opts.liveStateEvents!==!1&&(document.visibilityState===`hidden`&&(this.hiddenAtMs=Date.now()),this.onReturnVisible=()=>{if(document.visibilityState===`hidden`){this.hiddenAtMs??=Date.now();return}let e=this.hiddenAtMs;this.hiddenAtMs=null,e!=null&&Date.now()-e>=Wr&&this.resyncLiveState()},this.onReturnPageShow=e=>{e.persisted&&this.resyncLiveState()},document.addEventListener(`visibilitychange`,this.onReturnVisible),typeof window<`u`&&window.addEventListener(`pageshow`,this.onReturnPageShow))}unwatchReturn(){this.onReturnVisible&&typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.onReturnVisible),this.onReturnPageShow&&typeof window<`u`&&window.removeEventListener(`pageshow`,this.onReturnPageShow),this.onReturnVisible=null,this.onReturnPageShow=null,this.hiddenAtMs=null}resyncLiveState(){!this.destroyed&&this.liveStateSub&&this.startLiveState(this.loadGen)}onStreamEnded(e=!1,t){if(!this.destroyed){if((e||!this.rejoinEnabled())&&(this.cancelRejoin(),this.closeLiveState()),this.endedHandled){t===`match_ended`&&this._endedReason!==`match_ended`&&(this._endedReason=t,this.emit(`ended`,t),this.leavePipOnEnd());return}this.endedHandled=!0,this._endedReason=t??null,this.stopRefresh(),this.pendingStartLoad=!1,this.engine?.stop(),this.setState(`ended`),this.leavePipOnEnd()}}leavePipOnEnd(){this._endedReason===`interrupted`&&this.rejoinEnabled()||this.exitPictureInPicture().catch(()=>{})}get streamEnded(){return this._state===`ended`&&this.endedHandled}rejoinEnabled(){return this.opts.rejoinOnLive!==!1&&this.opts.liveStateEvents!==!1}scheduleRejoin(e){this.rejoinEnabled()&&!this.rejoinTimer&&(this.rejoinTimer=setTimeout(()=>{this.rejoinTimer=null,!(this.destroyed||e!==this.loadGen||this._state!==`ended`)&&this.rejoin()},Math.random()*Hr))}cancelRejoin(){this.rejoinTimer&&=(clearTimeout(this.rejoinTimer),null)}rejoin(){let e=++this.loadGen;this.teardownPlayback(),this.setState(`waiting`),this.beginArming(e,void 0,!0)}teardownPlayback(){this.stopStats(),this.stopRefresh(),this.cancelRejoin(),this.closeArming(),this.closeLiveState(),this.detachMedia?.(),this.engine?.destroy(),this.engine=null,this.pendingStartLoad=!1,this.idleClosed=!1}mountControls(){let e=this.opts.controls??`custom`,t=this.opts.video;if(e===`native`){t.controls=!0;return}if(e===`none`){t.controls=!1;return}t.controls=!1;let n=(t.ownerDocument??document).createElement(`div`),r=t.parentNode;r&&r.insertBefore(n,t),n.appendChild(t),Cr(n,this.opts.theme),this.container=n,this.controlBar=Pr({root:n,video:t,player:this,logoUrl:this.opts.theme?.logoUrl,statusOverlays:this.opts.statusOverlays,endedMessage:this.opts.endedMessage,streamEnded:()=>this.streamEnded,interruptedMessage:this.opts.interruptedMessage,errorMessage:this.opts.errorMessage,offlineMessage:this.opts.offlineMessage,cspNonce:this.opts.cspNonce})}unmountControls(){this.controlBar?.destroy(),this.controlBar=null;let e=this.container;e&&(e.parentNode?(e.parentNode.insertBefore(this.opts.video,e),e.remove()):this.opts.video.parentNode===e&&e.removeChild(this.opts.video)),this.container=null}attachPipListeners(){let e=this.opts.video,t=()=>this.analyticsSession?.notePresentation(this.currentPresentation()),n=()=>{t(),this.emit(`pipchange`,!0)},r=()=>{t(),this.emit(`pipchange`,!1)};e.addEventListener(`enterpictureinpicture`,n),e.addEventListener(`leavepictureinpicture`,r);let i=typeof document<`u`?document:void 0;i?.addEventListener(`fullscreenchange`,t),i?.addEventListener(`webkitfullscreenchange`,t),this.detachPip=()=>{e.removeEventListener(`enterpictureinpicture`,n),e.removeEventListener(`leavepictureinpicture`,r),i?.removeEventListener(`fullscreenchange`,t),i?.removeEventListener(`webkitfullscreenchange`,t)}}attachEndedPlayGuard(){let e=this.opts.video,t=()=>{this.streamEnded&&e.pause()};e.addEventListener(`play`,t),this.detachEndedPlayGuard=()=>e.removeEventListener(`play`,t)}startStats(){this.stopStats();let e=Math.max(500,this.opts.statsIntervalMs??Gr);this.statsTimer=setInterval(()=>{if(!this.engine)return;let e=this.engine.getStats();(e.bytesLoaded??0)>0&&this.analyticsSession?.noteFirstBytes(),this.emit(`stats`,e)},e)}stopStats(){this.statsTimer&&clearInterval(this.statsTimer),this.statsTimer=void 0}isStaleLicenseDenial(e){return this.staleLicenseReloaded||this.opts.hlsConfig?.licenseXhrSetup||this._state===`ended`||this._state===`error`||e.detail!==qr||e.error.httpStatus!==403||e.error.code!==`FORBIDDEN`||e.error.serverCode===`license_refused`?!1:J(this._descriptor?.drm?.widevine?.licenseUrl)}scheduleLicenseRefresh(){if(this.stopRefresh(),!this._descriptor?.drmEnabled)return;typeof document<`u`&&this.engine?.name===`hls`&&(this.onRefocus=()=>{document.visibilityState!==`visible`||this.destroyed||J(this._descriptor?.drm?.widevine?.licenseUrl)&&this.refreshLicense()},document.addEventListener(`visibilitychange`,this.onRefocus));let e=this.opts.licenseRefreshMs??Kr;e&&(this.refreshTimer=setInterval(()=>void this.refreshLicense(),e))}stopRefresh(){this.refreshTimer&&clearInterval(this.refreshTimer),this.refreshTimer=void 0,this.onRefocus&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.onRefocus),this.onRefocus=void 0)}refreshLicense(){let e=this.engine;if(this.destroyed||!e)return Promise.resolve(void 0);if(this.refreshInFlight?.engine===e)return this.refreshInFlight.promise;let t=(async()=>{try{let t=await x(this.resolveOptions());if(this.destroyed||this.engine!==e)return;let n=t.drm?.widevine?.licenseUrl,r=t.drm?.fairplay?.licenseUrl;return(n||r)&&(e.setLicenseUrls({widevine:n,fairplay:r}),this._descriptor=t),n}catch(e){e instanceof l&&!m(e.code)&&(this.stopRefresh(),this.destroyed||this.emit(`warning`,e));return}finally{this.refreshInFlight?.promise===t&&(this.refreshInFlight=void 0)}})();return this.refreshInFlight={engine:e,promise:t},t}async play(){if(this.destroyed)return;let e=!this.playRequested;if(this.playRequested=!0,this.idleClosed&&this._state!==`ended`&&this._state!==`error`){this.idleClosed=!1,await this.reload();return}if(this.streamEnded)return;let t=this.pendingStartLoad&&this._state!==`ended`&&this._state!==`error`;this.opts.autoplay===!1&&this.analyticsSession?.notePlayIntent(),t&&(this.pendingStartLoad=!1,this.setState(`loading`),this.engine?.startLoad());try{await this.opts.video.play(),e&&this.analyticsSession?.noteAutoplay(this.opts.video.muted?`AUTOPLAY_RESULT_ALLOWED_MUTED`:`AUTOPLAY_RESULT_ALLOWED`)}catch(n){n instanceof DOMException&&n.name===`NotAllowedError`&&(this.analyticsSession?.noteAutoplay(`AUTOPLAY_RESULT_BLOCKED`),e&&(this.playRequested=!1),t&&!this.destroyed&&this._state===`loading`&&this.setState(`paused`),this.emit(`autoplayblocked`))}}pause(){this.destroyed||this.opts.video.pause()}setMuted(e){this.destroyed||(this.opts.video.muted=e)}setVolume(e){this.destroyed||(this.opts.video.volume=Math.min(1,Math.max(0,e)))}getStats(){return this.engine?.getStats()??mt}getQualityLevels(){return this.engine?.getQualityLevels()??[]}getCurrentQuality(){return this.engine?.getCurrentQuality()??-1}setQuality(e){this.destroyed||this.engine?.setQuality(e===`auto`?-1:e)}setMaxBitrate(e){this.destroyed||this.engine?.setMaxBitrate(e)}getAudioTracks(){return this.engine?.getAudioTracks()??[]}setAudioTrack(e){this.destroyed||this.engine?.setAudioTrack(e)}getTextTracks(){return this.engine?.getTextTracks()??[]}setTextTrack(e){this.destroyed||this.engine?.setTextTrack(e)}seekToLive(){this.destroyed||this.engine?.seekToLive()}async enterPictureInPicture(){if(this.destroyed)return;let e=this.opts.video;typeof e.requestPictureInPicture==`function`&&await e.requestPictureInPicture()}async exitPictureInPicture(){let e=document;e.pictureInPictureElement===this.opts.video&&typeof e.exitPictureInPicture==`function`&&await e.exitPictureInPicture()}async enterFullscreen(){return!this.destroyed&&D(this.opts.video,this.container??void 0)}async exitFullscreen(){await O(this.opts.video,this.container??void 0)}fullscreenSupported(){return!this.destroyed&&E(this.opts.video,this.container??void 0)}retry(){return this.reload()}async reload(){if(this.destroyed)return;let e=++this.loadGen;this.teardownPlayback();try{let t=await S({...this.resolveOptions(),waitForLive:this.opts.waitForLive?this.buildWaitConfig(e):void 0});if(await this.onResolved(t,e),e===this.loadGen&&this._state===`error`&&this._lastError)throw this._lastError}catch(t){if(this.destroyed||this.abort.signal.aborted||e!==this.loadGen)return;throw t!==this._lastError&&this.fail(t instanceof l?t:new l(`INTERNAL`,0,String(t))),t}}on(e,t){let n=this.listeners[e]??=new Set;return n.add(t),()=>n.delete(t)}destroy(){this.destroyed||(this.destroyed=!0,this.loadGen+=1,this.abort.abort(),this.stopStats(),this.stopRefresh(),this.unmountControls(),this.cancelRejoin(),this.closeArming(),this.closeLiveState(),this.unwatchReturn(),this.connectivity?.destroy(),this.connectivity=null,this.detachMedia?.(),this.detachPip?.(),this.detachEndedPlayGuard?.(),this.analyticsSession?.noteDestroyed(),this.analyticsSession=null,this.detachMediaListeners?.(),this.engine?.destroy(),this.engine=null,this.setState(`idle`),this.clearListeners())}clearListeners(){for(let e of Object.keys(this.listeners))this.listeners[e]?.clear()}fail(e){this._lastError=e,this.failedWhileOffline=!V(),this.setState(`error`),this.analyticsSession?.noteFatal(),this.emit(`error`,e)}setState(e){if(e===this._state)return;let t=this._state;if(this._state=e,this.analyticsSession){let n=this.opts.video;this.analyticsSession.noteStateChange(t,e,Math.round(n.currentTime*1e3),this.engine?.getStats().levelHeight),e===`ended`&&this.analyticsSession.noteEnded()}switch(this.emit(`statechange`,e),e){case`playing`:this.emit(`playing`);break;case`buffering`:this.emit(`buffering`);break;case`paused`:this.emit(`paused`);break;case`ended`:this.emit(`ended`,this._endedReason??void 0)}}emit(e,t){this.listeners[e]?.forEach(e=>{try{e(t)}catch{}})}};function $r(e){return!!e&&typeof e==`object`&&typeof e.type==`string`&&e.type.startsWith(`oddin:`)}function ei(e){if(!e.container||typeof e.container.appendChild!=`function`)throw Error(`mountEmbed: opts.container must be a DOM element`);if(!e.src)throw Error(`mountEmbed: opts.src is required`);if(!e.baseUrl||!e.matchUrn)throw Error(`mountEmbed: opts.baseUrl and opts.matchUrn are required`);let t=new URL(e.src,location.href),n=e.allowedFrameOrigin??t.origin;t.searchParams.set(`baseUrl`,e.baseUrl),t.searchParams.set(`matchUrn`,e.matchUrn),t.searchParams.set(`parentOrigin`,location.origin),e.muted!=null&&t.searchParams.set(`muted`,String(e.muted)),e.apiKey&&(t.searchParams.set(`apiKey`,e.apiKey),console.warn(`havik-player: passing apiKey to mountEmbed places it in the iframe URL — DEV/DEMO only. In production inject it server-side into window.HAVIK_EMBED_CONFIG on the embed page.`));let r=document.createElement(`iframe`);r.src=t.toString(),r.allow=`autoplay; encrypted-media; fullscreen`,r.setAttribute(`allowfullscreen`,``),r.referrerPolicy=`no-referrer`,r.setAttribute(`sandbox`,e.sandbox??`allow-scripts allow-same-origin allow-presentation`),r.style.cssText=`border:0;width:100%;height:100%;display:block`,e.container.appendChild(r);let i=new Set,a=t=>{if(t.source!==r.contentWindow||t.origin!==n||!$r(t.data))return;let a=t.data;a.type===`oddin:ready`&&a.protocol!==1&&console.warn(`havik-player: embed protocol v${a.protocol} != host v1. Pin the embed page version to the SDK version to avoid skew.`),e.onEvent?.(a),i.forEach(e=>e(a))};window.addEventListener(`message`,a);let o=e=>r.contentWindow?.postMessage(e,n);return{iframe:r,play:()=>o({type:`oddin:play`}),pause:()=>o({type:`oddin:pause`}),setMuted:e=>o({type:`oddin:setMuted`,muted:e}),setVolume:e=>o({type:`oddin:setVolume`,volume:e}),setQuality:e=>o({type:`oddin:setQuality`,index:e}),setMaxBitrate:e=>o({type:`oddin:setMaxBitrate`,bitrate:e}),setAudioTrack:e=>o({type:`oddin:setAudioTrack`,id:e}),setTextTrack:e=>o({type:`oddin:setTextTrack`,id:e}),seekToLive:()=>o({type:`oddin:seekToLive`}),enterPip:()=>o({type:`oddin:enterPip`}),exitPip:()=>o({type:`oddin:exitPip`}),retry:()=>o({type:`oddin:retry`}),load:e=>o({type:`oddin:load`,matchUrn:e}),on:e=>(i.add(e),()=>i.delete(e)),destroy:()=>{o({type:`oddin:destroy`}),window.removeEventListener(`message`,a),r.remove()}}}var ti=/^[A-Za-z0-9:_.-]{1,128}$/;function ni(e){if(typeof e==`boolean`)return e;if(typeof e==`object`&&e){let t=e.endpoint;return typeof t==`string`?{endpoint:t}:{}}}function ri(){let e=window.HAVIK_EMBED_CONFIG;if(e)return{baseUrl:e.baseUrl??``,matchUrn:e.matchUrn??``,apiKey:e.apiKey??``,parentOrigin:e.parentOrigin,autoplay:e.autoplay??!0,muted:e.muted??!0,waitForLive:e.waitForLive??!0,analytics:ni(e.analytics)};let t=new URLSearchParams(location.search);return{baseUrl:t.get(`baseUrl`)??``,matchUrn:t.get(`matchUrn`)??``,apiKey:t.get(`apiKey`)??``,parentOrigin:t.get(`parentOrigin`)??void 0,autoplay:!0,muted:t.get(`muted`)!==`false`,waitForLive:!0}}async function ii(){let e=ri();oi();let t=document.createElement(`video`);t.setAttribute(`playsinline`,``),t.muted=e.muted??!0,t.style.cssText=`width:100%;height:100%;object-fit:contain;background:#000;aspect-ratio:auto`,document.body.appendChild(t);let n=e.parentOrigin&&e.parentOrigin!==`null`?e.parentOrigin:null;n||console.warn(`havik-player: embed has no parentOrigin — the postMessage bridge is disabled (no events posted, no commands accepted). mountEmbed sets parentOrigin automatically.`);let r=e=>{if(n)try{window.parent?.postMessage(e,n)}catch{}};if(!e.baseUrl||!e.matchUrn||!e.apiKey){r({type:`oddin:error`,code:`INTERNAL`,message:`embed missing baseUrl/matchUrn/apiKey`});return}let i=null,a=e=>{e.on(`statechange`,e=>r({type:`oddin:state`,state:e})),e.on(`ready`,()=>r({type:`oddin:tracks`,quality:e.getQualityLevels(),audio:e.getAudioTracks(),text:e.getTextTracks()})),e.on(`waiting`,e=>r({type:`oddin:waiting`,retryInMs:e.retryInMs,attempt:e.attempt,phase:e.phase})),e.on(`qualitychange`,e=>r({type:`oddin:qualitychange`,index:e})),e.on(`audiotrackchange`,e=>r({type:`oddin:audiotrackchange`,id:e})),e.on(`texttrackchange`,e=>r({type:`oddin:texttrackchange`,id:e})),e.on(`stats`,e=>r({type:`oddin:stats`,droppedFrames:e.droppedFrames,latencySeconds:e.latencySeconds,bandwidthKbps:e.bandwidthKbps,levelHeight:e.levelHeight,lowLatency:e.lowLatency,isLive:e.isLive,atLiveEdge:e.atLiveEdge})),e.on(`error`,e=>r({type:`oddin:error`,code:e.code,message:e.message,...e.country===void 0?{}:{country:e.country}})),e.on(`autoplayblocked`,()=>{r({type:`oddin:autoplayblocked`}),ai(t,e)})},o=async n=>{i?.destroy(),i=null;try{let r=await Zr({video:t,baseUrl:e.baseUrl,matchUrn:n,credential:{apiKey:e.apiKey},autoplay:e.autoplay,muted:e.muted,waitForLive:e.waitForLive,analytics:e.analytics});i=r;let o=t.parentElement;o?.classList.contains(`havik-player`)&&(o.style.cssText=`position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto`),a(r)}catch(e){let t=e instanceof l?e.code:`INTERNAL`,n=e instanceof Error?e.message:String(e),i=e instanceof l?e.country:void 0;r({type:`oddin:error`,code:t,message:n,...i===void 0?{}:{country:i}})}},s=()=>{window.removeEventListener(`message`,u),window.removeEventListener(`pagehide`,s),i?.destroy(),i=null},c=e=>{switch(e.type){case`oddin:play`:i?.play();break;case`oddin:pause`:i?.pause();break;case`oddin:setMuted`:typeof e.muted==`boolean`&&i?.setMuted(e.muted);break;case`oddin:setVolume`:typeof e.volume==`number`&&Number.isFinite(e.volume)&&i?.setVolume(e.volume);break;case`oddin:setQuality`:typeof e.index==`number`&&i?.setQuality(e.index);break;case`oddin:setMaxBitrate`:(e.bitrate===null||typeof e.bitrate==`number`&&Number.isFinite(e.bitrate))&&i?.setMaxBitrate(e.bitrate);break;case`oddin:setAudioTrack`:typeof e.id==`number`&&i?.setAudioTrack(e.id);break;case`oddin:setTextTrack`:typeof e.id==`number`&&i?.setTextTrack(e.id);break;case`oddin:seekToLive`:i?.seekToLive();break;case`oddin:enterPip`:i?.enterPictureInPicture();break;case`oddin:exitPip`:i?.exitPictureInPicture();break;case`oddin:retry`:i?.retry();break;case`oddin:load`:typeof e.matchUrn==`string`&&ti.test(e.matchUrn)&&o(e.matchUrn);break;case`oddin:destroy`:s()}},u=e=>{n&&e.origin===n&&$r(e.data)&&c(e.data)};n&&window.addEventListener(`message`,u),window.addEventListener(`pagehide`,s,{once:!0}),await o(e.matchUrn),r({type:`oddin:ready`,protocol:1})}function ai(e,t){if(document.getElementById(`havik-tap`))return;let n=document.createElement(`button`);n.id=`havik-tap`,n.textContent=`▶ Tap to play`,n.style.cssText=`position:fixed;inset:0;width:100%;height:100%;border:0;background:rgba(0,0,0,.55);color:#fff;font:600 18px system-ui,sans-serif;cursor:pointer;z-index:9`,n.addEventListener(`click`,()=>{n.remove(),t.play()}),document.body.appendChild(n)}function oi(){let e=document.createElement(`style`);e.textContent=`html,body{margin:0;height:100%;background:#000;overflow:hidden}body{display:flex}`,document.head.appendChild(e)}exports.LiveStateHttpError=k,exports.ODDIN_THEME=xr,exports.PlaybackError=l,exports.applyTheme=Cr,exports.baseUrlForEnv=ft,exports.bootEmbed=ii,exports.clearDeviceId=je,exports.clearRememberedBandwidth=Ue,exports.createPlayer=Zr,exports.deriveEventsBaseUrl=j,exports.detectDrmSupport=ct,exports.enterVideoFullscreen=D,exports.exitVideoFullscreen=O,exports.fetchCatalog=Se,exports.fetchTournament=we,exports.flattenMatches=Ee,exports.fullscreenSupported=E,exports.getDeviceId=P,exports.isLowLatencyManifest=ut,exports.isOddinMessage=$r,exports.licenseRequestHeaders=Ne,exports.mountEmbed=ei,exports.pollToLive=ge,exports.resolveStream=S,exports.subscribeLiveState=A,exports.videoFullscreenActive=T,exports.watchStatus=Oe;
132
132
  //# sourceMappingURL=index.cjs.map