stormcloud-video-player 0.8.60 → 0.8.62
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/stormcloud-vp.min.js +1 -1
- package/lib/Player.cjs.map +1 -1
- package/lib/StormcloudPlayer.cjs +83 -29
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +87 -31
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.ts +4034 -0
- package/lib/index.js +13001 -0
- package/lib/index.js.map +1 -0
- package/lib/patterns.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +3 -2
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +53 -11
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/PlaceholderLayer.cjs.map +1 -1
- package/lib/player/PlayerControls.cjs.map +1 -1
- package/lib/player/Scte35CueManager.cjs.map +1 -1
- package/lib/player/Scte35Parser.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +83 -29
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/playerTypes.cjs.map +1 -1
- package/lib/players/FilePlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +83 -29
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +83 -29
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/pal.cjs +9 -5
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/sdk/pal.d.cts +1 -0
- package/lib/types.cjs.map +1 -1
- package/lib/types.d.cts +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +25 -4
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/devUrl.cjs.map +1 -1
- package/lib/utils/polyfills.cjs.map +1 -1
- package/lib/utils/tracking.cjs +3 -2
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/trackingIngest.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +27 -5
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
- package/lib/utils/vastMacros.cjs +24 -4
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastMacros.d.cts +2 -0
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/lib/utils.cjs.map +1 -1
- package/package.json +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\players\\index.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","__hasOwnProp","getPrototypeOf","prototype","hasOwnProperty","name","all","target","get","enumerable","__copyProps","from","to","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","players_exports","__export","players_default","module","exports","import_react","lazy","IS_GLOBAL","globalThis","IS_IOS","IS_BROWSER","window","test","navigator","userAgent","document","IS_SAFARI","HLS_EXTENSIONS","HLS_PATHS","DASH_EXTENSIONS","AUDIO_EXTENSIONS","canPlay","hls","url","dash","video","VIDEO_EXTENSIONS","audio","file","import_react2","require","import_hls","getChromeVersion","ua","match","parseInt","getPlatform","getWebKitVersion","userAgentData","platform","detectBrowser","version","isSmartTV","isLegacyTV","supportsModernJS","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","majorVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","requiresMediaPipelineResetAfterAds","browser","getBrowserConfigOverrides","overrides","allowNativeHls","logBrowserInfo","debug","console","log","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","String","Math","floor","random","mm","ss","total","padStart","seconds","Number","isFinite","hh","ms","resolveMacroValues","ctx","set","values","pageUrl","adPlayhead","formatPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","errorCode","playerWidth","playerHeight","round","deviceId","limitAdTracking","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","replace","generateCachebuster","VAST_MACRO_PATTERN","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","parseFloat","p","h","map","m","s","n","parseProgressOffset","offset","trimmed","endsWith","percent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","BEACON_TIMEOUT_MS","inFlightBeacons","VAST_ERROR_MEDIA_DISPLAY","VAST_ERROR_WRAPPER_TIMEOUT","VAST_ERROR_WRAPPER_LIMIT","VAST_ERROR_WRAPPER_NO_ADS","VAST_ERROR_NO_SUPPORTED_MEDIA","VERIFICATION_NOT_SUPPORTED_REASON","VIEWABLE_MIN_VISIBLE_RATIO","VIEWABLE_MIN_CONTINUOUS_S","toVastMediaErrorCode","error","code","createHlsAdPlayer","contentVideo","options","adPlaying","originalMutedState","originalVolume","max","min","volume","listeners","RVFC_RELIABLE_PROP","mainHlsInstance","AD_VIDEO_PROP","adVideoElement","adHls","adContainerEl","AD_CONTAINER_PROP","containerHandlers","currentAd","currentAdMediaFile","podAds","podIndex","preloadedAds","destroyed","pendingTimeouts","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","BLACKFRAME_MIN_PLAYBACK_S","stallWatchdogId","lastAdProgressTime","lastAdProgressPosition","options2","videoFrameCallbackHandle","pendingPlayPromise","createTrackingState","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","lastViewSampleTime","lastPlayerExpanded","emit","documentHandlers","event","payload","fn","warn","buildTrackingMacroContext","ad","context","currentTime","clientWidth","clientHeight","location","href","fireTrackingPixels","urls","forEach","trackingUrl","macroContext","release","timeoutId","clearTimeout","img","onload","onerror","delete","bitrate","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","level","mediaFiles","Error","firstFile","mainQuality","scoredFiles","heightDiff","abs","resolutionDiff","widthDiff","fileBitrate","bitrateDiff","score","a","b","bestMatch","resolution","isAudioMediaFile","mediaFile","isHlsMediaFile","toLowerCase","type","isProgressiveMediaFile","includes","startsWith","collectVideoMediaFiles","linear","verbose","mediaFileElements","querySelectorAll","mf","index","getAttribute","apiFramework","bitrateValue","bitrateAttr","hasExplicitDimensions","push","createEmptyTrackingUrls","impression","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","xmlDoc","pushUrls","elements","collectLinearTracking","into","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","keys","incoming","concat","parseXml","xmlString","DOMParser","parseFromString","parserError","querySelector","getAdSequence","sequence","adElement","emptyVastResult","root","errorUrls","parseVastXml","adElements","documentElement","find","parsed","parseAdElement","vastAdTagUri","wrapper","trackingUrls2","linear2","trackingUrls","rules","inLine","Array","candidate","files","id","title","duration","clickThrough","fetchVastXml","vastTagUrl","requestVast","creds","fetch","mode","credentials","headers","referrerPolicy","response","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","followAdditionalWrappers","substring","fetchAndParsePod","trimmedXml","empty","podElements","filter","buffet","ads","resolveAd","shift","createAdVideoElement","createElement","style","position","left","objectFit","backgroundColor","playsInline","setupAdEventListeners","adEventHandlers","onTimeUpdate","noteAdProgress","sampleViewability","threshold","offsetPercent","add","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","creativeView","adId","muted","onEnded","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","reportCurrentAdError","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","continuousVisibleS","pause","onPlay","resume","handler","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","fireNotUsedForUnplayedAds","now","inView","visibilityState","paused","handleFullscreenChange","onInteraction","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onFullscreenChange","IntersectionObserver","entry","entries","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","playPromise","play","catch","finally","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","loadCurrentAdMedia","selectBestMediaFile","isHlsAd","default","isSupported","enableWorker","lowLatencyMode","loadSource","startAdPlayback","on","Events","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","clearInterval","cancelVideoFrameProbe","Date","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","FRAME_COUNTER_RELIABLE_PROP","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","onPresentedFrame","sawDecodedVideoFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","handleAdStall","releaseAdDecoder","pointerEvents","continueLiveStreamDuringAds","visibility","opacity","initialize","container","top","right","bottom","display","alignItems","justifyContent","zIndex","parentElement","requestAds","preloaded","reject","resolve","contentVolume","off","listener","stop","previousMutedState","clear","preloadingAds","isAdPlaying","resize","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getLoadedAdId","getPodAdCount","getPodTotalDurationMs","reduce","PRIVATE_HOST_PATTERNS","host","isLocalDevHost","pattern","toDevSafeUrl","rawUrl","protocol","_nonceLoader","cleanPath","pathname","PAL_SDK_URL","_palLoadPromise","loadPalSdk","existing","timeout","script","setAttribute","currentNonce","head","getOrCreateNonceLoader","goog","consentSettings","pal","ConsentSettings","allowStorage","NonceLoader","createPalNonceManager","currentNonceManager","generateNonce","request","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","iconsSupported","playerVersion","ppid","sessionId","JSON","stringify","manager","playerType","supportedApiFrameworks","loader","loadNonceManager","getNonce","getCurrentNonce","searchParams","sep","base","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","DEFAULT_TRACKING_INGEST_CONFIG","baseUrl","method","trackingIngestConfig","isTrackingIngestEnabled","enabled","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","licenseKey","Authorization","body","status","platformLat","readStoredLimitAdTracking","CTV_SESSION_STORAGE_KEY","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","realDeviceId","readStoredDeviceId","deviceIdType","readStoredString","inferDeviceIdType","isCtv","dpid","getOrCreateStoredUuid","deviceTypeHint","resolveDeviceTypeHint","getOrCreateCtvSessionId","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","mobile","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","phone","desktop","pc","tv","connectedtv","smarttv","gameconsole","stb","settopbox","SET_TOP_BOX_UA","GAME_CONSOLE_UA","CONNECTED_TV_UA","FEATURE_PHONE_UA","override","readDeviceTypeHintOverride","inferDeviceTypeHint","fallback","maxTouchPoints","fromGlobal","normalizeDeviceTypeHint","__STORMCLOUD_DTH__","getNativeBridgeSources","normalized","safeCall","isInteger","thisArg","isEquivalentDeviceIdType","tagType","runtimeType","tag","runtime","resolveNativeDeviceId","isMacroPlaceholder","isZeroedAdId","storageKey","writePersistentId","createUuid","readPersistentId","readCookie","localStorage","setItem","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","prefix","decodeURIComponent","slice","bytes","crypto","randomUUID","Uint8Array","getRandomValues","seed","performanceNow","i","hex","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","AiryTV","Android","webOS","Boolean","tizen","result","normalizeBoolean","getItem","cachedBrowserId","buildAnalyticsContext","config","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","memory","deviceMemory","hardwareConcurrency","screen","availWidth","orientation","pixelDepth","deviceType","brand","os","isWebView","isWebApp","webosMatch","model","tizenMatch","tvMatch","vendor","isAndroid","androidModelMatch","outerHeight","outerWidth","screenInfo","domain","origin","path","language","languages","join","cookieEnabled","referrer","sha256Hex","input","encodedData","utf8","buffer","hashBuffer","hash","char","fallbackHash","timestamp","subtle","digest","TextEncoder"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/players/index.ts\nvar players_exports = {};\n__export(players_exports, {\n default: () => players_default\n});\nmodule.exports = __toCommonJS(players_exports);\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar lazy = import_react.lazy;\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/patterns.ts\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_PATHS = /\\/hls\\//i;\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)($|\\?)/i;\nvar AUDIO_EXTENSIONS = /\\.(mp3|wav|ogg|aac|wma|flac|m4a)($|\\?)/i;\nvar canPlay = {\n hls: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return HLS_EXTENSIONS.test(url) || HLS_PATHS.test(url);\n },\n dash: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return DASH_EXTENSIONS.test(url);\n },\n video: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url);\n },\n audio: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return AUDIO_EXTENSIONS.test(url);\n },\n file: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url) || AUDIO_EXTENSIONS.test(url);\n }\n};\n\n// src/players/HlsPlayer.tsx\nvar import_react2 = require(\"react\");\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS = true;\n let webOSVersion;\n let tizenVersion;\n let chromeVersionNum;\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n if (match && match[1]) {\n version = match[1];\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = \"6.0\";\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = \"5.0\";\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = \"4.0\";\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = \"3.0\";\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = \"2.0\";\n majorVersion = 2;\n }\n } else {\n version = \"Unknown\";\n webOSVersion = void 0;\n }\n isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;\n } else if (/Tizen/i.test(ua)) {\n name = \"Samsung Tizen\";\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n tizenVersion = majorVersion;\n }\n isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else {\n if (chromeVersion > 0) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n if (chromeVersion < 50) {\n supportsModernJS = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS,\n webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum\n };\n}\nfunction requiresMediaPipelineResetAfterAds() {\n const browser = detectBrowser();\n return browser.name === \"Samsung Tizen\" && (browser.tizenVersion ?? 0) >= 5;\n}\nfunction getBrowserConfigOverrides() {\n const browser = detectBrowser();\n const overrides = {};\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n overrides.pauseContentDuringAds = true;\n }\n return overrides;\n}\nfunction logBrowserInfo(debug = false) {\n if (!debug) return;\n const browser = detectBrowser();\n console.log(\"[StormcloudVideoPlayer] Browser Compatibility Info:\", {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsModernJS: browser.supportsModernJS,\n ...browser.webOSVersion !== void 0 ? { webOSVersion: browser.webOSVersion } : {},\n ...browser.tizenVersion !== void 0 ? { tizenVersion: browser.tizenVersion } : {},\n ...browser.chromeVersion !== void 0 ? { chromeVersion: browser.chromeVersion } : {},\n userAgent: navigator.userAgent\n });\n}\n\n// src/utils/vastTrackingMacros.ts\nvar VAST_MACRO_PATTERN = /\\[([A-Z][A-Z0-9_]*)\\]/g;\nvar CACHEBUSTING_ALIASES = /\\[CACHEBUSTER\\]|\\[cachebuster\\]|\\[timestamp\\]|\\[random\\]|\\[INSERT_RANDOM_NUMBER\\]|%%CACHEBUSTER%%|%%CACHEBUST%%|\\$\\{CACHEBUSTER\\}|\\$\\{CACHEBUSTING\\}|\\{cachebuster\\}|\\{random\\}/g;\nvar KNOWN_VAST_MACROS = /* @__PURE__ */ new Set([\n \"ADCATEGORIES\",\n \"ADCOUNT\",\n \"ADPLAYHEAD\",\n \"ADSERVINGID\",\n \"ADTYPE\",\n \"APIFRAMEWORKS\",\n \"APPBUNDLE\",\n \"ASSETURI\",\n \"BLOCKEDADCATEGORIES\",\n \"BREAKMAXADLENGTH\",\n \"BREAKMAXADS\",\n \"BREAKMAXDURATION\",\n \"BREAKMINADLENGTH\",\n \"BREAKPOSITION\",\n \"CACHEBUSTING\",\n \"CLICKPOS\",\n \"CLICKTYPE\",\n \"CLIENTUA\",\n \"CONTENTID\",\n \"CONTENTPLAYHEAD\",\n \"CONTENTURI\",\n \"DEVICEIP\",\n \"DEVICEUA\",\n \"DOMAIN\",\n \"ERRORCODE\",\n \"EXTENSIONS\",\n \"GDPRCONSENT\",\n \"IFA\",\n \"IFATYPE\",\n \"INVENTORYSTATE\",\n \"LATLONG\",\n \"LIMITADTRACKING\",\n \"MEDIAMIME\",\n \"MEDIAPLAYHEAD\",\n \"OMIDPARTNER\",\n \"PAGEURL\",\n \"PLACEMENTTYPE\",\n \"PLAYERCAPABILITIES\",\n \"PLAYERSIZE\",\n \"PLAYERSTATE\",\n \"PODSEQUENCE\",\n \"REASON\",\n \"REGULATIONS\",\n \"SERVERSIDE\",\n \"SERVERUA\",\n \"TIMESTAMP\",\n \"TRANSACTIONID\",\n \"UNIVERSALADID\",\n \"VASTVERSIONS\",\n \"VERIFICATIONVENDORS\"\n]);\nfunction generateCachebuster() {\n return String(Math.floor(Math.random() * 9e7) + 1e7);\n}\nfunction formatPlayhead(seconds) {\n if (seconds == null || !Number.isFinite(seconds) || seconds < 0) {\n return void 0;\n }\n const total = Math.floor(seconds);\n const hh = String(Math.floor(total / 3600)).padStart(2, \"0\");\n const mm = String(Math.floor(total % 3600 / 60)).padStart(2, \"0\");\n const ss = String(total % 60).padStart(2, \"0\");\n const ms = String(Math.floor((seconds - total) * 1e3)).padStart(3, \"0\");\n return `${hh}:${mm}:${ss}.${ms}`;\n}\nfunction resolveMacroValues(ctx) {\n const values = /* @__PURE__ */ new Map();\n const set = (key, value) => {\n if (value != null && value !== \"\") values.set(key, value);\n };\n const adPlayhead = formatPlayhead(ctx.adPlayheadSeconds);\n set(\"ADPLAYHEAD\", adPlayhead);\n set(\"MEDIAPLAYHEAD\", adPlayhead);\n set(\"CONTENTPLAYHEAD\", formatPlayhead(ctx.contentPlayheadSeconds));\n set(\"ASSETURI\", ctx.assetUri);\n set(\"MEDIAMIME\", ctx.mediaMime);\n set(\"TIMESTAMP\", (/* @__PURE__ */ new Date()).toISOString());\n set(\"SERVERSIDE\", \"0\");\n if (ctx.errorCode != null && ctx.errorCode !== \"\") {\n set(\"ERRORCODE\", String(ctx.errorCode));\n }\n if (ctx.playerWidth != null && ctx.playerHeight != null) {\n set(\"PLAYERSIZE\", `${Math.round(ctx.playerWidth)},${Math.round(ctx.playerHeight)}`);\n }\n set(\"IFA\", ctx.deviceId);\n set(\"IFATYPE\", ctx.deviceIdType);\n if (ctx.limitAdTracking != null) {\n set(\"LIMITADTRACKING\", ctx.limitAdTracking ? \"1\" : \"0\");\n }\n set(\"PAGEURL\", ctx.pageUrl);\n if (ctx.pageUrl) {\n try {\n set(\"DOMAIN\", new URL(ctx.pageUrl).hostname);\n } catch {\n }\n }\n set(\"CLIENTUA\", ctx.clientUa);\n set(\"DEVICEUA\", ctx.clientUa);\n if (ctx.podSequence != null) {\n set(\"PODSEQUENCE\", String(ctx.podSequence));\n }\n set(\"ADSERVINGID\", ctx.adServingId);\n if (ctx.reason != null && ctx.reason !== \"\") {\n set(\"REASON\", String(ctx.reason));\n }\n return values;\n}\nfunction substituteVastTrackingMacros(url, ctx = {}) {\n if (!url) return url;\n const values = resolveMacroValues(ctx);\n return url.replace(CACHEBUSTING_ALIASES, () => generateCachebuster()).replace(VAST_MACRO_PATTERN, (match, name) => {\n if (name === \"CACHEBUSTING\") return generateCachebuster();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n return KNOWN_VAST_MACROS.has(name) ? \"\" : match;\n });\n}\n\n// src/sdk/hlsAdPlayer.ts\nvar LINEAR_TRACKING_EVENTS = [\n \"creativeView\",\n \"loaded\",\n \"start\",\n \"firstQuartile\",\n \"midpoint\",\n \"thirdQuartile\",\n \"complete\",\n \"mute\",\n \"unmute\",\n \"pause\",\n \"resume\",\n \"fullscreen\",\n \"exitFullscreen\",\n \"playerExpand\",\n \"playerCollapse\",\n \"notUsed\"\n];\nfunction textOf(el) {\n const value = el?.textContent?.trim();\n return value ? value : void 0;\n}\nfunction parseVastTime(value) {\n if (!value) return void 0;\n const parts = value.trim().split(\":\");\n if (parts.length !== 3) return void 0;\n const [h, m, s] = parts.map((p) => parseFloat(p));\n if (![h, m, s].every((n) => n !== void 0 && Number.isFinite(n))) {\n return void 0;\n }\n return h * 3600 + m * 60 + s;\n}\nfunction parseProgressOffset(offset) {\n if (!offset) return void 0;\n const trimmed = offset.trim();\n if (trimmed.endsWith(\"%\")) {\n const percent = parseFloat(trimmed);\n return Number.isFinite(percent) ? { offsetPercent: percent } : void 0;\n }\n const seconds = parseVastTime(trimmed);\n return seconds !== void 0 ? { offsetSeconds: seconds } : void 0;\n}\nvar MAX_VAST_WRAPPER_DEPTH = 5;\nvar BEACON_TIMEOUT_MS = 3e4;\nvar inFlightBeacons = /* @__PURE__ */ new Set();\nvar VAST_ERROR_MEDIA_DISPLAY = 405;\nvar VAST_ERROR_WRAPPER_TIMEOUT = 301;\nvar VAST_ERROR_WRAPPER_LIMIT = 302;\nvar VAST_ERROR_WRAPPER_NO_ADS = 303;\nvar VAST_ERROR_NO_SUPPORTED_MEDIA = 403;\nvar VERIFICATION_NOT_SUPPORTED_REASON = 2;\nvar VIEWABLE_MIN_VISIBLE_RATIO = 0.5;\nvar VIEWABLE_MIN_CONTINUOUS_S = 2;\nfunction toVastMediaErrorCode(error) {\n switch (error?.code) {\n case 1:\n return 400;\n case 2:\n return 401;\n case 4:\n return 403;\n default:\n return VAST_ERROR_MEDIA_DISPLAY;\n }\n}\nfunction createHlsAdPlayer(contentVideo, options) {\n let adPlaying = false;\n let originalMutedState = false;\n let originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));\n const listeners = /* @__PURE__ */ new Map();\n const mainHlsInstance = options?.mainHlsInstance;\n const AD_CONTAINER_PROP = \"__stormcloudAdContainer\";\n const AD_VIDEO_PROP = \"__stormcloudAdVideo\";\n const FRAME_COUNTER_RELIABLE_PROP = \"__stormcloudFrameCounterReliable\";\n const RVFC_RELIABLE_PROP = \"__stormcloudRvfcReliable\";\n let adVideoElement = contentVideo[AD_VIDEO_PROP] ?? void 0;\n let adHls;\n let adContainerEl = contentVideo[AD_CONTAINER_PROP] ?? void 0;\n let adEventHandlers = [];\n let containerHandlers = [];\n let currentAd;\n let currentAdMediaFile;\n let podAds = [];\n let podIndex = 0;\n const preloadedAds = /* @__PURE__ */ new Map();\n const preloadingAds = /* @__PURE__ */ new Map();\n let destroyed = false;\n let pendingTimeouts = [];\n const STALL_TIMEOUT_MS = 4e3;\n const STALL_CHECK_INTERVAL_MS = 1e3;\n const BLACKFRAME_MIN_PLAYBACK_S = 1.5;\n let stallWatchdogId;\n let lastAdProgressTime = 0;\n let lastAdProgressPosition = 0;\n let sawDecodedVideoFrame = false;\n let videoFrameCallbackHandle;\n let pendingPlayPromise;\n function createTrackingState() {\n return {\n impression: false,\n loaded: false,\n start: false,\n firstQuartile: false,\n midpoint: false,\n thirdQuartile: false,\n complete: false,\n viewabilitySettled: false,\n lastMuted: void 0,\n progressFired: /* @__PURE__ */ new Set()\n };\n }\n let trackingFired = createTrackingState();\n const resolvedAds = /* @__PURE__ */ new Set();\n let viewObserver;\n let visibleRatio = 0;\n let continuousVisibleS = 0;\n let lastViewSampleTime;\n let lastPlayerExpanded = false;\n let documentHandlers = [];\n function emit(event, payload) {\n const set = listeners.get(event);\n if (!set) return;\n for (const fn of Array.from(set)) {\n try {\n fn(payload);\n } catch (error) {\n console.warn(\n `[HlsAdPlayer] Error in event listener for ${event}:`,\n error\n );\n }\n }\n }\n function buildTrackingMacroContext(options2 = {}) {\n const { errorCode, reason } = options2;\n const ad = options2.ad ?? currentAd;\n const context = {\n adPlayheadSeconds: adVideoElement?.currentTime,\n contentPlayheadSeconds: contentVideo.currentTime,\n assetUri: currentAdMediaFile?.url,\n mediaMime: currentAdMediaFile?.type,\n playerWidth: adVideoElement?.clientWidth || adContainerEl?.clientWidth,\n playerHeight: adVideoElement?.clientHeight || adContainerEl?.clientHeight\n };\n if (errorCode != null) {\n context.errorCode = errorCode;\n }\n if (typeof navigator !== \"undefined\" && navigator.userAgent) {\n context.clientUa = navigator.userAgent;\n }\n if (typeof location !== \"undefined\" && location.href) {\n context.pageUrl = location.href;\n }\n if (podAds.length > 0) {\n context.podSequence = podIndex + 1;\n }\n if (ad?.adServingId) {\n context.adServingId = ad.adServingId;\n }\n if (reason != null) {\n context.reason = reason;\n }\n return context;\n }\n function fireTrackingPixels(urls, options2) {\n if (!urls || urls.length === 0) return;\n const macroContext = buildTrackingMacroContext(options2);\n urls.forEach((url) => {\n try {\n const trackingUrl = substituteVastTrackingMacros(url, macroContext);\n const img = new Image(1, 1);\n inFlightBeacons.add(img);\n let timeoutId;\n const release = () => {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n img.onload = null;\n img.onerror = null;\n inFlightBeacons.delete(img);\n };\n img.onload = release;\n img.onerror = release;\n timeoutId = setTimeout(release, BEACON_TIMEOUT_MS);\n img.src = trackingUrl;\n console.log(`[HlsAdPlayer] Fired tracking pixel: ${trackingUrl}`);\n } catch (error) {\n console.warn(`[HlsAdPlayer] Error firing tracking pixel:`, error);\n }\n });\n }\n function getMainStreamQuality() {\n if (!mainHlsInstance || !mainHlsInstance.levels) {\n return null;\n }\n const currentLevel = mainHlsInstance.currentLevel;\n if (currentLevel === -1 || !mainHlsInstance.levels[currentLevel]) {\n const autoLevel = mainHlsInstance.loadLevel;\n if (autoLevel !== -1 && mainHlsInstance.levels[autoLevel]) {\n const level2 = mainHlsInstance.levels[autoLevel];\n return {\n width: level2.width || 1920,\n height: level2.height || 1080,\n bitrate: level2.bitrate || 5e6\n };\n }\n return null;\n }\n const level = mainHlsInstance.levels[currentLevel];\n return {\n width: level.width || 1920,\n height: level.height || 1080,\n bitrate: level.bitrate || 5e6\n };\n }\n function selectBestMediaFile(mediaFiles) {\n if (mediaFiles.length === 0) {\n throw new Error(\"No media files available\");\n }\n const firstFile = mediaFiles[0];\n if (!firstFile) {\n throw new Error(\"No media files available\");\n }\n if (mediaFiles.length === 1) {\n return firstFile;\n }\n const mainQuality = getMainStreamQuality();\n if (!mainQuality) {\n console.log(\n \"[HlsAdPlayer] No main stream quality info, using first media file\"\n );\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Main stream quality:\", mainQuality);\n const scoredFiles = mediaFiles.map((file) => {\n const widthDiff = Math.abs(file.width - mainQuality.width);\n const heightDiff = Math.abs(file.height - mainQuality.height);\n const resolutionDiff = widthDiff + heightDiff;\n const fileBitrate = (file.bitrate || 5e3) * 1e3;\n const bitrateDiff = Math.abs(fileBitrate - mainQuality.bitrate);\n const score = resolutionDiff * 2 + bitrateDiff / 1e3;\n return { file, score, resolutionDiff, bitrateDiff };\n });\n scoredFiles.sort((a, b) => a.score - b.score);\n const bestMatch = scoredFiles[0];\n if (!bestMatch) {\n console.log(\"[HlsAdPlayer] No best match found, using first media file\");\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Selected media file:\", {\n url: bestMatch.file.url,\n resolution: `${bestMatch.file.width}x${bestMatch.file.height}`,\n bitrate: bestMatch.file.bitrate,\n score: bestMatch.score,\n resolutionDiff: bestMatch.resolutionDiff,\n bitrateDiff: bestMatch.bitrateDiff\n });\n return bestMatch.file;\n }\n function isHlsMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type === \"application/x-mpegurl\" || type === \"application/vnd.apple.mpegurl\" || type.includes(\"mpegurl\") || url.includes(\".m3u8\");\n }\n function isProgressiveMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type.startsWith(\"video/\") || url.endsWith(\".mp4\") || url.includes(\".mp4?\");\n }\n function isAudioMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = (mediaFile.url.toLowerCase().split(\"?\")[0] || \"\").trim();\n return type.startsWith(\"audio/\") || url.endsWith(\".mp3\") || url.endsWith(\".aac\") || url.endsWith(\".m4a\") || url.endsWith(\".ogg\") || url.endsWith(\".oga\") || url.endsWith(\".opus\") || url.endsWith(\".wav\") || url.endsWith(\".weba\");\n }\n function collectVideoMediaFiles(linear, verbose) {\n const mediaFileElements = linear.querySelectorAll(\n \":scope > MediaFiles > MediaFile\"\n );\n const mediaFiles = [];\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Found ${mediaFileElements.length} MediaFile element(s) in VAST XML`\n );\n }\n mediaFileElements.forEach((mf, index) => {\n const type = mf.getAttribute(\"type\") || \"\";\n const url = mf.textContent?.trim() || \"\";\n const width = mf.getAttribute(\"width\") || \"\";\n const height = mf.getAttribute(\"height\") || \"\";\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index}: type=\"${type}\", url=\"${url}\", width=\"${width}\", height=\"${height}\"`\n );\n }\n if (!url) {\n if (verbose) {\n console.warn(`[HlsAdPlayer] MediaFile ${index} has empty URL`);\n }\n return;\n }\n const apiFramework = (mf.getAttribute(\"apiFramework\") || \"\").toUpperCase();\n if (apiFramework === \"VPAID\") {\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (VPAID creatives are not supported)`\n );\n }\n return;\n }\n const bitrateAttr = mf.getAttribute(\"bitrate\");\n const bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;\n const mediaFile = {\n url,\n type,\n width: parseInt(width || \"1920\", 10),\n height: parseInt(height || \"1080\", 10),\n bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0\n };\n if (isAudioMediaFile(mediaFile)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (audio-only, type=\"${type}\") \\u2014 audio ads are not played to avoid a black screen`\n );\n return;\n }\n const hasExplicitDimensions = mf.getAttribute(\"width\") != null && mf.getAttribute(\"height\") != null;\n if (!isHlsMediaFile(mediaFile) && hasExplicitDimensions && (mediaFile.width <= 1 || mediaFile.height <= 1)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (degenerate dimensions ${mediaFile.width}x${mediaFile.height}, type=\"${type}\") \\u2014 likely an audio-only placeholder rendition`\n );\n return;\n }\n if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {\n mediaFiles.push(mediaFile);\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Added ${isHlsMediaFile(mediaFile) ? \"HLS\" : \"progressive\"} MediaFile: ${url}`\n );\n }\n } else if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (type=\"${type}\" is not supported)`\n );\n }\n });\n return mediaFiles;\n }\n function createEmptyTrackingUrls() {\n const urls = {\n impression: [],\n clickTracking: [],\n error: [],\n viewable: [],\n notViewable: [],\n viewUndetermined: [],\n verificationNotExecuted: [],\n progress: []\n };\n for (const event of LINEAR_TRACKING_EVENTS) {\n urls[event] = [];\n }\n return urls;\n }\n function pushUrls(target, elements) {\n elements.forEach((el) => {\n const url = textOf(el);\n if (url) target.push(url);\n });\n }\n function collectLinearTracking(linear, into) {\n linear.querySelectorAll(\":scope > TrackingEvents > Tracking\").forEach((el) => {\n const event = el.getAttribute(\"event\");\n const url = textOf(el);\n if (!event || !url) return;\n if (event === \"progress\") {\n const offset = parseProgressOffset(el.getAttribute(\"offset\"));\n if (offset) into.progress.push({ url, ...offset });\n return;\n }\n if (LINEAR_TRACKING_EVENTS.indexOf(event) !== -1) {\n into[event].push(url);\n }\n });\n pushUrls(\n into.clickTracking,\n linear.querySelectorAll(\":scope > VideoClicks > ClickTracking\")\n );\n }\n function collectAdLevelTracking(adBody, into) {\n pushUrls(into.impression, adBody.querySelectorAll(\":scope > Impression\"));\n pushUrls(into.error, adBody.querySelectorAll(\":scope > Error\"));\n pushUrls(\n into.viewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > Viewable\")\n );\n pushUrls(\n into.notViewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > NotViewable\")\n );\n pushUrls(\n into.viewUndetermined,\n adBody.querySelectorAll(\":scope > ViewableImpression > ViewUndetermined\")\n );\n adBody.querySelectorAll(\n ':scope > AdVerifications > Verification, :scope > Extensions > Extension[type=\"AdVerifications\"] > AdVerifications > Verification'\n ).forEach((verification) => {\n pushUrls(\n into.verificationNotExecuted,\n verification.querySelectorAll(\n ':scope > TrackingEvents > Tracking[event=\"verificationNotExecuted\"]'\n )\n );\n });\n }\n function mergeTrackingUrls(target, source) {\n const targetLists = target;\n const sourceLists = source;\n for (const key of Object.keys(targetLists)) {\n const incoming = sourceLists[key];\n if (incoming && incoming.length > 0) {\n targetLists[key] = targetLists[key].concat(incoming);\n }\n }\n return target;\n }\n function parseXml(xmlString) {\n const xmlDoc = new DOMParser().parseFromString(xmlString, \"text/xml\");\n const parserError = xmlDoc.querySelector(\"parsererror\");\n if (parserError) {\n console.error(\n \"[HlsAdPlayer] XML parsing error (malformed VAST XML):\",\n parserError.textContent\n );\n return null;\n }\n return xmlDoc;\n }\n function getAdSequence(adElement) {\n const sequence = parseInt(adElement.getAttribute(\"sequence\") || \"\", 10);\n return Number.isFinite(sequence) ? sequence : void 0;\n }\n function emptyVastResult(root) {\n const errorUrls = [];\n pushUrls(errorUrls, root.querySelectorAll(\":scope > Error\"));\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_WRAPPER_NO_ADS };\n }\n function parseVastXml(xmlString) {\n try {\n const xmlDoc = parseXml(xmlString);\n if (!xmlDoc) return { type: \"empty\" };\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n const adElement = adElements.find((el) => getAdSequence(el) === void 0) ?? adElements[0];\n if (!adElement) {\n console.warn(\n `[HlsAdPlayer] No Ad element found in VAST ${root.getAttribute(\"version\") ?? \"\"} response`\n );\n return emptyVastResult(root);\n }\n const parsed = parseAdElement(adElement, true);\n if (parsed.type === \"wrapper\") {\n console.log(\n `[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ${parsed.vastAdTagUri}`\n );\n }\n return parsed;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing VAST XML:\", error);\n return { type: \"empty\" };\n }\n }\n function parseAdElement(adElement, verbose = false) {\n try {\n const wrapper = adElement.querySelector(\":scope > Wrapper\");\n if (wrapper) {\n const vastAdTagUri = textOf(\n wrapper.querySelector(\":scope > VASTAdTagURI\")\n );\n if (!vastAdTagUri) {\n console.warn(\"[HlsAdPlayer] <Wrapper> has no VASTAdTagURI\");\n return { type: \"empty\" };\n }\n const trackingUrls2 = createEmptyTrackingUrls();\n collectAdLevelTracking(wrapper, trackingUrls2);\n wrapper.querySelectorAll(\":scope > Creatives > Creative > Linear\").forEach((linear2) => collectLinearTracking(linear2, trackingUrls2));\n return {\n type: \"wrapper\",\n vastAdTagUri,\n trackingUrls: trackingUrls2,\n rules: {\n followAdditionalWrappers: wrapper.getAttribute(\"followAdditionalWrappers\") !== \"false\"\n }\n };\n }\n const inLine = adElement.querySelector(\":scope > InLine\");\n if (!inLine) {\n console.warn(\"[HlsAdPlayer] <Ad> has neither <InLine> nor <Wrapper>\");\n return { type: \"empty\" };\n }\n const errorUrls = [];\n pushUrls(errorUrls, inLine.querySelectorAll(\":scope > Error\"));\n if (adElement.getAttribute(\"conditionalAd\") === \"true\") {\n console.warn(\"[HlsAdPlayer] Skipping conditional <Ad> (VPAID-only)\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n let linear;\n let mediaFiles = [];\n for (const candidate of Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear\")\n )) {\n const files = collectVideoMediaFiles(candidate, verbose);\n if (files.length > 0) {\n linear = candidate;\n mediaFiles = files;\n break;\n }\n }\n if (!linear) {\n console.warn(\"[HlsAdPlayer] No supported linear media files in <Ad>\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n const trackingUrls = createEmptyTrackingUrls();\n collectAdLevelTracking(inLine, trackingUrls);\n collectLinearTracking(linear, trackingUrls);\n return {\n type: \"inline\",\n ad: {\n id: adElement.getAttribute(\"id\") || \"unknown\",\n title: textOf(inLine.querySelector(\":scope > AdTitle\")) || \"Ad\",\n duration: parseVastTime(textOf(linear.querySelector(\":scope > Duration\"))) ?? 30,\n mediaFiles,\n trackingUrls,\n clickThrough: textOf(\n linear.querySelector(\":scope > VideoClicks > ClickThrough\")\n ),\n adServingId: textOf(inLine.querySelector(\":scope > AdServingId\"))\n }\n };\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing <Ad> element:\", error);\n return { type: \"empty\" };\n }\n }\n async function fetchVastXml(vastTagUrl, credentials = \"include\") {\n const requestVast = (creds) => fetch(vastTagUrl, {\n mode: \"cors\",\n credentials: creds,\n headers: {\n \"Accept\": \"application/xml, text/xml, */*\"\n },\n referrerPolicy: \"no-referrer-when-downgrade\"\n });\n let response;\n try {\n response = await requestVast(credentials);\n } catch (error) {\n if (credentials !== \"omit\") {\n console.warn(\n `[HlsAdPlayer] VAST fetch failed with credentials=\"${credentials}\", retrying without credentials:`,\n error\n );\n response = await requestVast(\"omit\");\n } else {\n throw error;\n }\n }\n if (!response.ok) {\n throw new Error(`Failed to fetch VAST: ${response.statusText}`);\n }\n return response.text();\n }\n async function fetchAndParseVastAd(vastTagUrl, depth = 0, accumulatedTracking = createEmptyTrackingUrls(), rules = { followAdditionalWrappers: true }) {\n let vastXml;\n try {\n vastXml = await fetchVastXml(\n vastTagUrl,\n depth === 0 ? \"include\" : \"omit\"\n );\n } catch (error) {\n if (depth === 0) throw error;\n console.warn(\"[HlsAdPlayer] Wrapped VAST request failed:\", error);\n fireTrackingPixels(accumulatedTracking.error, {\n errorCode: VAST_ERROR_WRAPPER_TIMEOUT\n });\n return null;\n }\n console.log(\"[HlsAdPlayer] VAST XML received\");\n console.log(\n \"[HlsAdPlayer] VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n const parsed = parseVastXml(vastXml);\n if (parsed.type === \"empty\") {\n fireTrackingPixels(\n (parsed.errorUrls ?? []).concat(accumulatedTracking.error),\n { errorCode: parsed.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS }\n );\n return null;\n }\n if (parsed.type === \"wrapper\") {\n if (depth >= MAX_VAST_WRAPPER_DEPTH || !rules.followAdditionalWrappers) {\n console.warn(\n rules.followAdditionalWrappers ? `[HlsAdPlayer] VAST wrapper depth limit (${MAX_VAST_WRAPPER_DEPTH}) reached, aborting redirect chain` : '[HlsAdPlayer] Parent wrapper set followAdditionalWrappers=\"false\"; rejecting nested wrapper'\n );\n fireTrackingPixels(\n accumulatedTracking.error.concat(parsed.trackingUrls.error),\n { errorCode: VAST_ERROR_WRAPPER_LIMIT }\n );\n return null;\n }\n mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n depth + 1,\n accumulatedTracking,\n parsed.rules\n );\n }\n mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);\n return parsed.ad;\n }\n async function fetchAndParsePod(vastTagUrl) {\n const vastXml = await fetchVastXml(vastTagUrl);\n console.log(\n `[HlsAdPlayer] Pod VAST XML received (length=${vastXml.length})`\n );\n const trimmedXml = vastXml.trim();\n if (trimmedXml.length === 0) {\n console.warn(\n \"[HlsAdPlayer] Pod VAST response body is empty (no fill)\"\n );\n return [];\n }\n const xmlDoc = parseXml(vastXml);\n if (!xmlDoc) {\n console.error(\n \"[HlsAdPlayer] Pod VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n return [];\n }\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n if (adElements.length === 0) {\n console.warn(\n `[HlsAdPlayer] No <Ad> elements in VAST ${root.getAttribute(\"version\") ?? \"\"} pod response (no fill)`\n );\n const empty = emptyVastResult(root);\n if (empty.type === \"empty\" && empty.errorUrls?.length) {\n fireTrackingPixels(empty.errorUrls, {\n errorCode: empty.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS\n });\n }\n return [];\n }\n const resolveAd = async (adElement) => {\n const parsed = parseAdElement(adElement);\n if (parsed.type === \"inline\") return parsed.ad;\n if (parsed.type === \"wrapper\") {\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n 1,\n parsed.trackingUrls,\n parsed.rules\n );\n }\n if (parsed.errorUrls?.length) {\n fireTrackingPixels(parsed.errorUrls, {\n errorCode: parsed.errorCode ?? VAST_ERROR_NO_SUPPORTED_MEDIA\n });\n }\n return null;\n };\n const podElements = adElements.filter((el) => getAdSequence(el) !== void 0).sort((a, b) => getAdSequence(a) - getAdSequence(b));\n const buffet = adElements.filter((el) => getAdSequence(el) === void 0);\n const ads = [];\n if (podElements.length === 0) {\n for (const adElement of buffet) {\n const ad = await resolveAd(adElement);\n if (ad) ads.push(ad);\n }\n } else {\n for (const adElement of podElements) {\n let ad = await resolveAd(adElement);\n while (!ad && buffet.length > 0) {\n ad = await resolveAd(buffet.shift());\n }\n if (ad) ads.push(ad);\n }\n }\n console.log(\n `[HlsAdPlayer] Parsed ${ads.length} ad(s) from VAST ${root.getAttribute(\"version\") ?? \"\"} pod response`\n );\n return ads;\n }\n function createAdVideoElement() {\n const video = document.createElement(\"video\");\n video.style.position = \"absolute\";\n video.style.left = \"0\";\n video.style.top = \"0\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.objectFit = \"contain\";\n video.style.backgroundColor = \"#000\";\n video.playsInline = true;\n video.muted = false;\n video.volume = 1;\n console.log(\n `[HlsAdPlayer] Created ad video element with volume ${video.volume}`\n );\n return video;\n }\n function setupAdEventListeners() {\n if (!adVideoElement || !currentAd) return;\n if (adEventHandlers.length > 0) return;\n const onTimeUpdate = () => {\n if (!currentAd || !adVideoElement) return;\n noteAdProgress();\n sampleViewability();\n const currentTime = adVideoElement.currentTime;\n if (trackingFired.start) {\n for (const event of currentAd.trackingUrls.progress) {\n if (trackingFired.progressFired.has(event)) continue;\n const threshold = event.offsetSeconds ?? (event.offsetPercent ?? 0) / 100 * currentAd.duration;\n if (currentTime >= threshold) {\n trackingFired.progressFired.add(event);\n fireTrackingPixels([event.url]);\n }\n }\n }\n if (!(currentAd.duration > 0)) return;\n const progress = currentTime / currentAd.duration;\n if (progress >= 0.25 && !trackingFired.firstQuartile) {\n trackingFired.firstQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.firstQuartile);\n }\n if (progress >= 0.5 && !trackingFired.midpoint) {\n trackingFired.midpoint = true;\n fireTrackingPixels(currentAd.trackingUrls.midpoint);\n }\n if (progress >= 0.75 && !trackingFired.thirdQuartile) {\n trackingFired.thirdQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);\n }\n };\n const onLoadedMetadata = () => {\n if (!adPlaying || !adVideoElement) return;\n const { videoWidth, videoHeight } = adVideoElement;\n if (videoWidth <= 1 || videoHeight <= 1) {\n console.warn(\n `[HlsAdPlayer] Ad creative has no usable video dimensions (${videoWidth}x${videoHeight}) - skipping this creative`\n );\n handleVideoDecodeFailure();\n }\n };\n const onCanPlay = () => {\n if (!currentAd || trackingFired.loaded) return;\n trackingFired.loaded = true;\n fireTrackingPixels(currentAd.trackingUrls.loaded);\n };\n const onPlaying = () => {\n startStallWatchdog();\n if (!currentAd || !adVideoElement) return;\n if (!trackingFired.impression) {\n trackingFired.impression = true;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.impression);\n fireTrackingPixels(currentAd.trackingUrls.creativeView);\n fireTrackingPixels(currentAd.trackingUrls.verificationNotExecuted, {\n reason: VERIFICATION_NOT_SUPPORTED_REASON\n });\n emit(\"ad_impression\", {\n adId: currentAd.id,\n index: podIndex,\n total: podAds.length || 1\n });\n }\n if (trackingFired.start) return;\n trackingFired.start = true;\n trackingFired.lastMuted = adVideoElement.muted || adVideoElement.volume === 0;\n fireTrackingPixels(currentAd.trackingUrls.start);\n console.log(\"[HlsAdPlayer] Ad started playing\");\n };\n const onEnded = () => {\n if (!currentAd || trackingFired.complete) return;\n sampleViewability();\n settleViewability();\n trackingFired.complete = true;\n fireTrackingPixels(currentAd.trackingUrls.complete);\n console.log(\"[HlsAdPlayer] Ad completed\");\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdComplete();\n };\n const onError = (e) => {\n if (!adPlaying) return;\n console.error(\"[HlsAdPlayer] Ad video error:\", e);\n reportCurrentAdError(toVastMediaErrorCode(adVideoElement?.error));\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n };\n const onVolumeChange = () => {\n if (!currentAd || !adVideoElement) return;\n const muted = adVideoElement.muted || adVideoElement.volume === 0;\n if (!trackingFired.start) {\n trackingFired.lastMuted = muted;\n return;\n }\n if (muted === trackingFired.lastMuted) return;\n trackingFired.lastMuted = muted;\n fireTrackingPixels(\n muted ? currentAd.trackingUrls.mute : currentAd.trackingUrls.unmute\n );\n };\n const isTrackablePlayback = () => adPlaying && !!currentAd && !!adVideoElement && trackingFired.start && !trackingFired.complete && !adVideoElement.ended;\n const onPause = () => {\n continuousVisibleS = 0;\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.pause);\n }\n };\n const onPlay = () => {\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.resume);\n }\n };\n adEventHandlers = [\n { type: \"timeupdate\", handler: onTimeUpdate },\n { type: \"loadedmetadata\", handler: onLoadedMetadata },\n { type: \"canplay\", handler: onCanPlay },\n { type: \"playing\", handler: onPlaying },\n { type: \"ended\", handler: onEnded },\n { type: \"error\", handler: onError },\n { type: \"volumechange\", handler: onVolumeChange },\n { type: \"pause\", handler: onPause },\n { type: \"play\", handler: onPlay }\n ];\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.addEventListener(type, handler);\n }\n }\n function teardownAdEventListeners() {\n if (adVideoElement) {\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.removeEventListener(type, handler);\n }\n }\n adEventHandlers = [];\n }\n function handleAdClick() {\n if (!adPlaying || !currentAd) return;\n fireTrackingPixels(currentAd.trackingUrls.clickTracking);\n emit(\"ad_click\", { adId: currentAd.id, clickThrough: currentAd.clickThrough });\n if (currentAd.clickThrough) {\n try {\n window.open(currentAd.clickThrough, \"_blank\", \"noopener\");\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Failed to open ClickThrough URL:\", error);\n }\n }\n }\n function reportCurrentAdError(errorCode) {\n if (!currentAd) return;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.error, { errorCode });\n }\n function fireNotUsedForUnplayedAds() {\n for (const ad of podAds) {\n if (resolvedAds.has(ad)) continue;\n resolvedAds.add(ad);\n fireTrackingPixels(ad.trackingUrls.notUsed, { ad });\n }\n }\n function sampleViewability() {\n if (!currentAd || !adVideoElement || !viewObserver || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n const now = adVideoElement.currentTime;\n const inView = visibleRatio >= VIEWABLE_MIN_VISIBLE_RATIO && document.visibilityState === \"visible\" && !adVideoElement.paused;\n if (!inView) {\n continuousVisibleS = 0;\n } else if (lastViewSampleTime !== void 0 && now >= lastViewSampleTime) {\n continuousVisibleS += now - lastViewSampleTime;\n }\n lastViewSampleTime = now;\n if (continuousVisibleS >= VIEWABLE_MIN_CONTINUOUS_S) {\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(currentAd.trackingUrls.viewable);\n }\n }\n function settleViewability() {\n if (!currentAd || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(\n viewObserver ? currentAd.trackingUrls.notViewable : currentAd.trackingUrls.viewUndetermined\n );\n }\n function handleFullscreenChange() {\n if (!adPlaying || !currentAd || !adContainerEl || !trackingFired.start) return;\n const fullscreenEl = document.fullscreenElement ?? document.webkitFullscreenElement;\n const expanded = !!fullscreenEl && fullscreenEl.contains(adContainerEl);\n if (expanded === lastPlayerExpanded) return;\n lastPlayerExpanded = expanded;\n const urls = currentAd.trackingUrls;\n fireTrackingPixels(\n expanded ? urls.fullscreen.concat(urls.playerExpand) : urls.exitFullscreen.concat(urls.playerCollapse)\n );\n }\n function attachContainerHandlers() {\n if (!adContainerEl || containerHandlers.length > 0) return;\n const onClick = () => handleAdClick();\n const onInteraction = (event) => {\n if (adPlaying) emit(\"ad_interaction\", event);\n };\n containerHandlers = [\n { type: \"click\", handler: onClick },\n { type: \"mousedown\", handler: onInteraction },\n { type: \"touchstart\", handler: onInteraction }\n ];\n for (const { type, handler } of containerHandlers) {\n adContainerEl.addEventListener(type, handler);\n }\n const onFullscreenChange = () => handleFullscreenChange();\n documentHandlers = [\n { type: \"fullscreenchange\", handler: onFullscreenChange },\n { type: \"webkitfullscreenchange\", handler: onFullscreenChange }\n ];\n for (const { type, handler } of documentHandlers) {\n document.addEventListener(type, handler);\n }\n if (typeof IntersectionObserver !== \"undefined\") {\n viewObserver = new IntersectionObserver(\n (entries) => {\n const entry = entries[entries.length - 1];\n if (entry) {\n visibleRatio = entry.isIntersecting ? entry.intersectionRatio : 0;\n }\n },\n { threshold: [0, 0.25, 0.5, 0.75, 1] }\n );\n viewObserver.observe(adContainerEl);\n }\n }\n function detachContainerHandlers() {\n if (adContainerEl) {\n for (const { type, handler } of containerHandlers) {\n adContainerEl.removeEventListener(type, handler);\n }\n }\n containerHandlers = [];\n for (const { type, handler } of documentHandlers) {\n document.removeEventListener(type, handler);\n }\n documentHandlers = [];\n viewObserver?.disconnect();\n viewObserver = void 0;\n }\n function setAdPlayingFlag(isPlaying) {\n if (isPlaying) {\n contentVideo.dataset.stormcloudAdPlaying = \"true\";\n } else {\n delete contentVideo.dataset.stormcloudAdPlaying;\n }\n }\n function resetAdTracking() {\n trackingFired = createTrackingState();\n continuousVisibleS = 0;\n lastViewSampleTime = void 0;\n }\n function isRvfcSupported(video) {\n return typeof video.requestVideoFrameCallback === \"function\";\n }\n function settlePendingPlay() {\n pendingPlayPromise = void 0;\n }\n function startAdPlayback(context) {\n if (!adVideoElement) return;\n const playPromise = adVideoElement.play();\n pendingPlayPromise = playPromise;\n playPromise.catch((error) => {\n if (pendingPlayPromise !== playPromise) {\n return;\n }\n console.error(`[HlsAdPlayer] Error starting ${context}:`, error);\n handleAdError();\n }).finally(() => {\n if (pendingPlayPromise === playPromise) {\n pendingPlayPromise = void 0;\n }\n });\n }\n function prepareVideoElementForNewSource() {\n settlePendingPlay();\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n if (!adVideoElement) return;\n try {\n adVideoElement.pause();\n adVideoElement.removeAttribute(\"src\");\n adVideoElement.load();\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error preparing ad video for new source:\",\n error\n );\n }\n }\n function recreateAdVideoElement() {\n console.log(\n \"[HlsAdPlayer] Recreating ad video element (single-decoder platform)\"\n );\n teardownAdEventListeners();\n prepareVideoElementForNewSource();\n if (adVideoElement) {\n try {\n adVideoElement.remove();\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error removing ad video element:\", error);\n }\n }\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n }\n function loadCurrentAdMedia() {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n const mediaFile = selectBestMediaFile(currentAd.mediaFiles);\n if (!mediaFile) {\n throw new Error(\"No media file available for ad\");\n }\n currentAdMediaFile = mediaFile;\n const isHlsAd = isHlsMediaFile(mediaFile);\n console.log(\n `[HlsAdPlayer] Loading ${isHlsAd ? \"HLS\" : \"progressive\"} ad (pod ${podIndex + 1}/${podAds.length || 1}) from: ${mediaFile.url}`\n );\n if (isHlsAd && import_hls.default.isSupported()) {\n if (adHls) {\n adHls.destroy();\n }\n adHls = new import_hls.default({\n enableWorker: true,\n lowLatencyMode: false\n });\n adHls.loadSource(mediaFile.url);\n adHls.attachMedia(adVideoElement);\n adHls.on(import_hls.default.Events.MANIFEST_PARSED, () => {\n console.log(\"[HlsAdPlayer] HLS manifest parsed, starting playback\");\n startAdPlayback(\"HLS ad playback\");\n });\n adHls.on(import_hls.default.Events.ERROR, (_event, data) => {\n console.error(\"[HlsAdPlayer] HLS error:\", data);\n if (data.fatal) {\n handleAdError();\n }\n });\n } else if (isHlsAd && adVideoElement.canPlayType(\"application/vnd.apple.mpegurl\")) {\n adVideoElement.src = mediaFile.url;\n startAdPlayback(\"native HLS ad playback\");\n } else if (!isHlsAd && isProgressiveMediaFile(mediaFile)) {\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n adVideoElement.src = mediaFile.url;\n adVideoElement.load();\n startAdPlayback(\"progressive ad playback\");\n } else {\n throw new Error(`Unsupported ad media file type: ${mediaFile.type}`);\n }\n }\n function advanceToNextPodAd() {\n if (podIndex >= podAds.length - 1) {\n return false;\n }\n settleViewability();\n podIndex++;\n currentAd = podAds[podIndex];\n currentAdMediaFile = void 0;\n resetAdTracking();\n if (currentAd) {\n console.log(\n `[HlsAdPlayer] Advancing to next pod ad (${podIndex + 1}/${podAds.length}): ${currentAd.title}, duration: ${currentAd.duration}s`\n );\n }\n clearStallWatchdog();\n if (requiresMediaPipelineResetAfterAds()) {\n recreateAdVideoElement();\n setupAdEventListeners();\n } else {\n prepareVideoElementForNewSource();\n }\n try {\n loadCurrentAdMedia();\n emit(\"pod_ad_started\", { index: podIndex, total: podAds.length });\n return true;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Failed to load next pod ad:\", error);\n return false;\n }\n }\n function clearStallWatchdog() {\n if (stallWatchdogId != null) {\n clearInterval(stallWatchdogId);\n stallWatchdogId = void 0;\n }\n cancelVideoFrameProbe();\n }\n function noteAdProgress() {\n lastAdProgressTime = Date.now();\n if (adVideoElement) {\n lastAdProgressPosition = adVideoElement.currentTime;\n }\n }\n function handleAdStall() {\n console.warn(\n \"[HlsAdPlayer] Ad playback stalled (no progress) - recovering to avoid a blank frame\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function getDecodedVideoFrameCount(video) {\n try {\n if (typeof video.getVideoPlaybackQuality === \"function\") {\n const quality = video.getVideoPlaybackQuality();\n if (quality && typeof quality.totalVideoFrames === \"number\") {\n return quality.totalVideoFrames;\n }\n }\n const legacyCount = video.webkitDecodedFrameCount;\n if (typeof legacyCount === \"number\") {\n return legacyCount;\n }\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Unable to read decoded video frame count:\",\n error\n );\n }\n return void 0;\n }\n function isFrameCounterReliable() {\n return contentVideo[FRAME_COUNTER_RELIABLE_PROP] === true;\n }\n function markFrameCounterReliable() {\n contentVideo[FRAME_COUNTER_RELIABLE_PROP] = true;\n }\n function isRvfcReliable() {\n return contentVideo[RVFC_RELIABLE_PROP] === true;\n }\n function markRvfcReliable() {\n contentVideo[RVFC_RELIABLE_PROP] = true;\n }\n function cancelVideoFrameProbe() {\n if (videoFrameCallbackHandle != null && adVideoElement && typeof adVideoElement.cancelVideoFrameCallback === \"function\") {\n try {\n adVideoElement.cancelVideoFrameCallback(\n videoFrameCallbackHandle\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error cancelling video frame callback:\",\n error\n );\n }\n }\n videoFrameCallbackHandle = void 0;\n }\n function startVideoFrameProbe() {\n cancelVideoFrameProbe();\n if (!adVideoElement) return;\n const rvfc = adVideoElement.requestVideoFrameCallback;\n if (typeof rvfc !== \"function\") return;\n const onPresentedFrame = () => {\n videoFrameCallbackHandle = void 0;\n if (!adPlaying) return;\n sawDecodedVideoFrame = true;\n markRvfcReliable();\n };\n try {\n videoFrameCallbackHandle = rvfc.call(\n adVideoElement,\n onPresentedFrame\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error requesting video frame callback:\",\n error\n );\n videoFrameCallbackHandle = void 0;\n }\n }\n function handleVideoDecodeFailure() {\n console.warn(\n \"[HlsAdPlayer] Ad audio is advancing but no video frames decoded (black screen) - skipping this creative\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function startStallWatchdog() {\n clearStallWatchdog();\n noteAdProgress();\n sawDecodedVideoFrame = false;\n startVideoFrameProbe();\n const blackFrameDetectionEnabled = !requiresMediaPipelineResetAfterAds();\n stallWatchdogId = window.setInterval(() => {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n if (blackFrameDetectionEnabled && !sawDecodedVideoFrame && !adVideoElement.paused) {\n const decodedFrames = getDecodedVideoFrameCount(adVideoElement);\n if (decodedFrames !== void 0 && decodedFrames > 0) {\n sawDecodedVideoFrame = true;\n markFrameCounterReliable();\n } else if (adVideoElement.currentTime >= BLACKFRAME_MIN_PLAYBACK_S) {\n const timeAdvancing = adVideoElement.currentTime > lastAdProgressPosition + 0.05;\n if (isRvfcSupported(adVideoElement) && timeAdvancing && isRvfcReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n if (decodedFrames === 0 && timeAdvancing && isFrameCounterReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n }\n }\n if (adVideoElement.currentTime > lastAdProgressPosition + 0.05) {\n noteAdProgress();\n return;\n }\n if (adVideoElement.paused) {\n noteAdProgress();\n return;\n }\n if (Date.now() - lastAdProgressTime >= STALL_TIMEOUT_MS) {\n handleAdStall();\n }\n }, STALL_CHECK_INTERVAL_MS);\n }\n function releaseAdDecoder() {\n prepareVideoElementForNewSource();\n if (adContainerEl) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n }\n function handleAdComplete() {\n console.log(\"[HlsAdPlayer] Handling ad completion\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode:\", error);\n });\n } else {\n console.log(\"[HlsAdPlayer] Content video already playing in live mode\");\n }\n }\n emit(\"content_resume\");\n }\n function handleAdError() {\n console.log(\"[HlsAdPlayer] Handling ad error\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n emit(\"ad_error\");\n }\n return {\n initialize() {\n console.log(\"[HlsAdPlayer] Initializing\");\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"30\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n contentVideo[AD_CONTAINER_PROP] = adContainerEl;\n attachContainerHandlers();\n },\n async requestAds(vastTagUrl) {\n console.log(\"[HlsAdPlayer] Requesting ads:\", vastTagUrl);\n if (adPlaying) {\n console.warn(\n \"[HlsAdPlayer] Cannot request new ads while an ad is playing\"\n );\n return Promise.reject(new Error(\"Ad already playing\"));\n }\n try {\n let ads = [];\n if (preloadedAds.has(vastTagUrl)) {\n const preloaded = preloadedAds.get(vastTagUrl);\n preloadedAds.delete(vastTagUrl);\n if (preloaded) {\n ads = [preloaded];\n }\n console.log(\n \"[HlsAdPlayer] Using preloaded VAST response:\",\n vastTagUrl\n );\n } else {\n ads = await fetchAndParsePod(vastTagUrl);\n }\n if (!ads.length) {\n console.warn(\"[HlsAdPlayer] No ads available from VAST response\");\n emit(\"ad_error\");\n return Promise.reject(new Error(\"No ads available from VAST response\"));\n }\n podAds = ads;\n podIndex = 0;\n currentAd = ads[0];\n currentAdMediaFile = void 0;\n console.log(\n `[HlsAdPlayer] Pod parsed: ${ads.length} ad(s), first=\"${currentAd?.title}\", duration=${currentAd?.duration}s`\n );\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error requesting ads:\", error);\n emit(\"ad_error\");\n return Promise.reject(error);\n }\n },\n async play() {\n if (!currentAd) {\n console.warn(\n \"[HlsAdPlayer] Cannot play: No ad loaded (no ads available)\"\n );\n return Promise.reject(new Error(\"No ad loaded\"));\n }\n console.log(\"[HlsAdPlayer] Starting ad playback\");\n try {\n if (!adVideoElement) {\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n }\n setupAdEventListeners();\n resetAdTracking();\n const contentVolume = contentVideo.volume;\n originalVolume = Math.max(\n 0,\n Math.min(1, contentVolume || originalVolume)\n );\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.pause();\n console.log(\"[HlsAdPlayer] Content paused (VOD mode)\");\n } else {\n console.log(\"[HlsAdPlayer] Content continues (Live mode)\");\n }\n console.log(\"[HlsAdPlayer] FORCE MUTING main video\");\n contentVideo.muted = true;\n adPlaying = true;\n setAdPlayingFlag(true);\n if (adVideoElement) {\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n console.log(\n `[HlsAdPlayer] Set ad video volume to ${adVideoElement.volume}, muted: ${adVideoElement.muted}, originalMutedState: ${originalMutedState}, contentVolume: ${contentVolume}`\n );\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n emit(\"content_pause\");\n loadCurrentAdMedia();\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error playing ad:\", error);\n handleAdError();\n return Promise.reject(error);\n }\n },\n pause() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && !adVideoElement.paused) {\n adVideoElement.pause();\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error pausing ad:\", error);\n }\n },\n resume() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && adVideoElement.paused) {\n adVideoElement.play().catch(() => {\n });\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error resuming ad:\", error);\n }\n },\n async stop() {\n console.log(\"[HlsAdPlayer] Stopping ad\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n const previousMutedState = contentVideo.muted;\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n console.log(\n `[HlsAdPlayer] Restored mute state on stop: ${previousMutedState} -> ${originalMutedState}, volume: ${contentVideo.volume}`\n );\n releaseAdDecoder();\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback on stop\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode on stop:\", error);\n });\n }\n }\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n },\n destroy() {\n console.log(\"[HlsAdPlayer] Destroying\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n destroyed = true;\n clearStallWatchdog();\n for (const timeoutId of pendingTimeouts) {\n clearTimeout(timeoutId);\n }\n pendingTimeouts = [];\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n teardownAdEventListeners();\n detachContainerHandlers();\n releaseAdDecoder();\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n listeners.clear();\n preloadedAds.clear();\n preloadingAds.clear();\n },\n isAdPlaying() {\n return adPlaying;\n },\n resize(width, height) {\n console.log(`[HlsAdPlayer] Resizing to ${width}x${height}`);\n if (adContainerEl) {\n adContainerEl.style.width = `${width}px`;\n adContainerEl.style.height = `${height}px`;\n }\n if (adVideoElement) {\n adVideoElement.style.width = `${width}px`;\n adVideoElement.style.height = `${height}px`;\n }\n },\n on(event, listener) {\n if (!listeners.has(event)) listeners.set(event, /* @__PURE__ */ new Set());\n listeners.get(event).add(listener);\n },\n off(event, listener) {\n listeners.get(event)?.delete(listener);\n },\n updateOriginalMutedState(muted, volume) {\n const nextVolume = typeof volume === \"number\" && !Number.isNaN(volume) ? Math.max(0, Math.min(1, volume)) : originalVolume;\n console.log(\n `[HlsAdPlayer] updateOriginalMutedState called: { muted: ${originalMutedState} -> ${muted}, volume: ${originalVolume} -> ${nextVolume} }`\n );\n originalMutedState = muted;\n originalVolume = nextVolume;\n },\n getOriginalMutedState() {\n return originalMutedState;\n },\n getOriginalVolume() {\n return originalVolume;\n },\n setAdVolume(volume) {\n if (adVideoElement && adPlaying) {\n const clamped = Math.max(0, Math.min(1, volume));\n adVideoElement.volume = clamped;\n adVideoElement.muted = clamped === 0;\n }\n },\n getAdVolume() {\n if (adVideoElement && adPlaying) {\n return adVideoElement.volume;\n }\n return 1;\n },\n showPlaceholder() {\n contentVideo.style.opacity = \"0\";\n contentVideo.style.visibility = \"hidden\";\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"10\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n },\n hidePlaceholder() {\n if (adContainerEl && !adPlaying) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n if (!adPlaying) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n },\n getLoadedAdDuration() {\n return currentAd?.duration;\n },\n getLoadedAdId() {\n return currentAd?.id;\n },\n getPodAdCount() {\n return podAds.length;\n },\n getPodTotalDurationMs() {\n return podAds.reduce(\n (total, ad) => total + (ad.duration > 0 ? ad.duration * 1e3 : 0),\n 0\n );\n }\n };\n}\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader() {\n if (_nonceLoader) return _nonceLoader;\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = true;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader();\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/vastEnvironmentSignals.ts\nvar CTV_SESSION_STORAGE_KEY = \"stormcloud.ctv.sid\";\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar ANDROID_ID_TYPES = /* @__PURE__ */ new Set([\"aaid\", \"adid\"]);\nfunction resolveVastEnvironmentSignals(isCtv) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;\n let deviceId = realDeviceId;\n let deviceIdType = bridgeSignals.deviceIdType || readStoredString(\"deviceIdType\") || readStoredString(\"idtype\") || platformDevice.deviceIdType || inferDeviceIdType();\n const platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;\n let limitAdTracking = deviceId != null ? platformLat ?? readStoredLimitAdTracking() ?? false : void 0;\n if (!deviceId && isCtv) {\n const dpid = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (dpid) {\n deviceId = dpid;\n deviceIdType = \"dpid\";\n limitAdTracking = platformLat ?? readStoredLimitAdTracking() ?? false;\n }\n }\n const deviceTypeHint = resolveDeviceTypeHint(isCtv);\n if (isCtv) {\n return {\n isCtv: true,\n sessionId: getOrCreateCtvSessionId(),\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n }\n return {\n isCtv: false,\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n}\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar SET_TOP_BOX_UA = /LGSTB|\\bSTB\\b|STB\\d|Set-?Top|SetTopBox|TV ?Box|Kaon|Humax|Arris|Technicolor|Sagemcom|Infomir|MAG\\d{3}|KreaTV|Amino|Formuler|Dune ?HD|TiVo|MiBOX|Mi Box|SHIELD Android TV|\\bAFT[A-Z]|Roku|AppleTV|Apple TV|CrKey/i;\nvar GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;\nvar CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\\bTV\\b/i;\nvar FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;\nfunction resolveDeviceTypeHint(isCtv) {\n const override = readDeviceTypeHintOverride();\n if (override != null) return override;\n return inferDeviceTypeHint(isCtv);\n}\nfunction inferDeviceTypeHint(isCtv) {\n const fallback = isCtv ? DEVICE_TYPE_HINT.CONNECTED_TV : DEVICE_TYPE_HINT.DESKTOP;\n if (typeof navigator === \"undefined\") return fallback;\n const ua = navigator.userAgent || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n if (SET_TOP_BOX_UA.test(ua)) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n if (GAME_CONSOLE_UA.test(ua)) return DEVICE_TYPE_HINT.GAME_CONSOLE;\n if (CONNECTED_TV_UA.test(ua) && !/Mobile/i.test(ua)) {\n return DEVICE_TYPE_HINT.CONNECTED_TV;\n }\n if (FEATURE_PHONE_UA.test(ua)) return DEVICE_TYPE_HINT.FEATURE_PHONE;\n if (/iPad/i.test(ua) || /Macintosh/i.test(ua) && maxTouchPoints > 1) {\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/iPhone|iPod/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (/Android/i.test(ua)) {\n if (/Mobile/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (maxTouchPoints === 0) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n return fallback;\n}\nfunction readDeviceTypeHintOverride() {\n if (typeof window === \"undefined\") return void 0;\n const keys = [\"dth\", \"deviceTypeHint\"];\n const fromGlobal = normalizeDeviceTypeHint(window.__STORMCLOUD_DTH__);\n if (fromGlobal != null) return fromGlobal;\n for (const source of getNativeBridgeSources()) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeDeviceTypeHint(\n typeof value === \"function\" ? safeCall(value, source) : value\n );\n if (normalized != null) return normalized;\n }\n }\n for (const key of [\"stormcloud.dth\", \"dth\"]) {\n const normalized = normalizeDeviceTypeHint(readStoredString(key));\n if (normalized != null) return normalized;\n }\n return void 0;\n}\nfunction normalizeDeviceTypeHint(value) {\n if (typeof value === \"number\") {\n return Number.isInteger(value) && value >= 1 && value <= 7 ? value : void 0;\n }\n if (typeof value !== \"string\") return void 0;\n const trimmed = value.trim();\n if (/^[1-7]$/.test(trimmed)) return parseInt(trimmed, 10);\n return DEVICE_TYPE_HINT_ALIASES[trimmed.toLowerCase().replace(/[\\s_-]/g, \"\")];\n}\nfunction safeCall(fn, thisArg) {\n try {\n return fn.call(thisArg);\n } catch {\n return void 0;\n }\n}\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction isEquivalentDeviceIdType(tagType, runtimeType) {\n if (!tagType || !runtimeType) return false;\n const tag = tagType.toLowerCase();\n const runtime = runtimeType.toLowerCase();\n if (tag === runtime) return true;\n return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);\n}\nfunction resolveNativeDeviceId() {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction getOrCreateCtvSessionId() {\n const existing = readPersistentId(CTV_SESSION_STORAGE_KEY);\n if (existing) {\n writePersistentId(CTV_SESSION_STORAGE_KEY, existing);\n return existing;\n }\n const sessionId = createUuid();\n writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);\n return sessionId;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction readStoredLimitAdTracking() {\n return normalizeBoolean(\n readStoredString(\"limitAdTracking\") || readStoredString(\"limitedAdTracking\") || readStoredString(\"is_lat\")\n );\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId();\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendInitialTracking(licenseKey, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n adLoaded: false,\n adDetect: false\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending initial tracking data:\",\n error\n );\n }\n}\nasync function sendAdDetectTracking(licenseKey, adDetectInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adDetect: true,\n captureAt: adDetectInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad detect tracking:\",\n error\n );\n }\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/utils/polyfills.ts\nfunction polyfillURLSearchParams() {\n if (typeof URLSearchParams !== \"undefined\") {\n return;\n }\n class URLSearchParamsPolyfill {\n constructor(init) {\n this.params = /* @__PURE__ */ new Map();\n if (typeof init === \"string\") {\n this.parseQueryString(init);\n } else if (init instanceof URLSearchParamsPolyfill) {\n init.forEach((value, key) => {\n this.append(key, value);\n });\n }\n }\n parseQueryString(query) {\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n if (!cleanQuery) return;\n cleanQuery.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n const decodedKey = this.safeDecodeURIComponent(key);\n const decodedValue = value ? this.safeDecodeURIComponent(value) : \"\";\n this.append(decodedKey, decodedValue);\n }\n });\n }\n safeDecodeURIComponent(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\n } catch (e) {\n return str;\n }\n }\n append(name, value) {\n const values = this.params.get(name) || [];\n values.push(String(value));\n this.params.set(name, values);\n }\n delete(name) {\n this.params.delete(name);\n }\n get(name) {\n const values = this.params.get(name);\n return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;\n }\n getAll(name) {\n return this.params.get(name) || [];\n }\n has(name) {\n return this.params.has(name);\n }\n set(name, value) {\n this.params.set(name, [String(value)]);\n }\n forEach(callback) {\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n callback(value, key, this);\n });\n });\n }\n toString() {\n const parts = [];\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n });\n });\n return parts.join(\"&\");\n }\n }\n window.URLSearchParams = URLSearchParamsPolyfill;\n}\nfunction polyfillTextEncoder() {\n if (typeof TextEncoder !== \"undefined\") {\n return;\n }\n class TextEncoderPolyfill {\n constructor() {\n this.encoding = \"utf-8\";\n }\n encode(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 128) {\n utf8.push(charcode);\n } else if (charcode < 2048) {\n utf8.push(192 | charcode >> 6, 128 | charcode & 63);\n } else if (charcode < 55296 || charcode >= 57344) {\n utf8.push(\n 224 | charcode >> 12,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n } else {\n i++;\n charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);\n utf8.push(\n 240 | charcode >> 18,\n 128 | charcode >> 12 & 63,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n }\n }\n return new Uint8Array(utf8);\n }\n }\n window.TextEncoder = TextEncoderPolyfill;\n}\nfunction polyfillPromiseFinally() {\n if (typeof Promise !== \"undefined\" && !Promise.prototype.finally) {\n Promise.prototype.finally = function(callback) {\n const constructor = this.constructor;\n return this.then(\n (value) => constructor.resolve(callback()).then(() => value),\n (reason) => constructor.resolve(callback()).then(() => {\n throw reason;\n })\n );\n };\n }\n}\nfunction polyfillObjectAssign() {\n if (typeof Object.assign !== \"function\") {\n Object.assign = function(target, ...sources) {\n if (target == null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const to = Object(target);\n for (let i = 0; i < sources.length; i++) {\n const nextSource = sources[i];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\nfunction polyfillArrayFrom() {\n if (!Array.from) {\n Array.from = function(arrayLike, mapFn, thisArg) {\n const items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError(\"Array.from requires an array-like object\");\n }\n const len = items.length >>> 0;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n if (mapFn) {\n result[i] = mapFn.call(thisArg, items[i], i);\n } else {\n result[i] = items[i];\n }\n }\n return result;\n };\n }\n}\nfunction polyfillStringStartsWith() {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function(search, pos) {\n pos = !pos || pos < 0 ? 0 : +pos;\n return this.substring(pos, pos + search.length) === search;\n };\n }\n}\nfunction polyfillStringEndsWith() {\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function(search, length) {\n if (length === void 0 || length > this.length) {\n length = this.length;\n }\n return this.substring(length - search.length, length) === search;\n };\n }\n}\nfunction polyfillStringIncludes() {\n if (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== \"number\") {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n }\n return this.indexOf(search, start) !== -1;\n };\n }\n}\nfunction initializePolyfills() {\n polyfillObjectAssign();\n polyfillArrayFrom();\n polyfillStringStartsWith();\n polyfillStringEndsWith();\n polyfillStringIncludes();\n polyfillURLSearchParams();\n polyfillTextEncoder();\n polyfillPromiseFinally();\n}\n\n// src/utils/vastMacros.ts\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nvar EXAMPLE_COM_URL = /example\\.com/i;\nvar CTV_UNSUPPORTED_PARAMS = [\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\"\n];\nvar INLINE_DEVICE_MACRO_REPLACEMENTS = [\n { pattern: /\\[RDID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IFA\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[ADVERTISING[_-]?ID(?:ENTIFIER)?\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[DEVICE[_-]?ID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IDTYPE\\]/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /\\{rdid\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{device[_-]?id\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{idtype\\}/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_IDENTIFIER_PLAIN%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%ADVERTISING_ID_OPT_OUT%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%ADVERTISING_ID_TYPE%%/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_ID%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%LIMIT_AD_TRACKING%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%SESSION_ID%%/gi, getValue: (ctx) => ctx.sessionId },\n { pattern: /%%CORRELATOR%%/gi, getValue: (ctx) => ctx.correlator }\n];\nfunction isMacroPlaceholder2(value) {\n if (value == null) return true;\n const trimmed = value.trim();\n if (!trimmed) return true;\n if (UNEXPANDED_MACRO_PATTERN.test(trimmed)) return true;\n return /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(trimmed);\n}\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nfunction expandInlineMacroPlaceholders(baseUrl, ctx) {\n let url = baseUrl;\n for (const { pattern, getValue } of INLINE_DEVICE_MACRO_REPLACEMENTS) {\n const value = getValue(ctx);\n if (value != null && value !== \"\") {\n url = url.replace(pattern, encodeURIComponent(value));\n }\n }\n return url;\n}\nfunction applyDeviceIdentityParams(params, ctx) {\n const runtimeId = ctx.deviceId?.trim();\n const runtimeType = ctx.deviceIdType?.trim() || inferDeviceIdType();\n const tagRdid = params.get(\"rdid\");\n const tagType = params.get(\"idtype\");\n const tagLat = params.get(\"is_lat\");\n const latValue = ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0;\n if (runtimeId) {\n params.set(\"rdid\", runtimeId);\n params.set(\"idtype\", runtimeType || tagType || \"aaid\");\n params.set(\"is_lat\", latValue ?? (isMacroPlaceholder2(tagLat) ? \"0\" : tagLat));\n return;\n }\n const tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));\n const tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));\n if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n if (tagRdidValid) {\n if (isMacroPlaceholder2(tagType) && runtimeType) {\n params.set(\"idtype\", runtimeType);\n }\n if (isMacroPlaceholder2(tagLat)) {\n params.set(\"is_lat\", latValue ?? \"0\");\n }\n return;\n }\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n}\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nfunction applyVastMacros(baseUrl, ctx) {\n const expandedUrl = expandInlineMacroPlaceholders(baseUrl, ctx);\n let url;\n try {\n url = new URL(normalizeVastTagUrl(expandedUrl));\n } catch {\n return replaceCorrelatorFallback(expandedUrl, ctx.correlator);\n }\n const params = url.searchParams;\n removeBrokenAppNameOrphans(params);\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n }\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n params.delete(\"ppos\");\n params.delete(\"lip\");\n if (ctx.podMinDurationMs != null) {\n params.set(\"pmnd\", String(Math.max(0, Math.round(ctx.podMinDurationMs))));\n }\n if (ctx.podMaxDurationMs != null) {\n params.set(\"pmxd\", String(Math.max(0, Math.round(ctx.podMaxDurationMs))));\n }\n if (ctx.podMaxAds != null) {\n params.set(\"pmad\", String(Math.max(1, Math.round(ctx.podMaxAds))));\n }\n if (!ctx.isCtv && ctx.pageUrl) {\n params.set(\"url\", ctx.pageUrl);\n params.set(\"description_url\", ctx.pageUrl);\n }\n const existingUrl = params.get(\"url\") || \"\";\n if (EXAMPLE_COM_URL.test(existingUrl)) {\n params.delete(\"url\");\n params.delete(\"description_url\");\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n applyDeviceIdentityParams(params, ctx);\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n if (ctx.programTitle) {\n params.set(\"ct_ti\", ctx.programTitle);\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (isMacroPlaceholder2(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n removeBrokenAppNameOrphans(params);\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n\n// src/player/AdConfigManager.ts\nvar AdConfigManager = class {\n constructor(config, video) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds = /* @__PURE__ */ new Set();\n this.streamCorrelator = generateCorrelator();\n this.viewCorrelator = generateCorrelator();\n this.consentSignals = {};\n this.podCounter = 0;\n this.podAssignedByPrefetch = false;\n this.lastHeartbeatTime = 0;\n this.defaultPodMaxAds = 6;\n this.defaultPodMaxDurationMs = 12e4;\n this.config = config;\n this.video = video;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n isVmapEnabled() {\n return !!(this.config.isVmap && this.config.vmapUrl?.trim());\n }\n async fetchAdConfiguration() {\n if (this.isVmapEnabled()) {\n await this.fetchAndParseVmap(this.config.vmapUrl);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VMAP mode enabled\");\n }\n return;\n }\n const vastMode = this.config.vastMode || \"default\";\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VAST mode:\", vastMode);\n }\n if (vastMode === \"adstorm\") {\n if (!this.config.licenseKey) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] AdStorm mode requires a license key\"\n );\n }\n return;\n }\n const vastEndpoint = `https://adstorm.co/api-adstorm-dev/adstorm/vast/${this.config.licenseKey}`;\n this.apiVastTagUrl = vastEndpoint;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using AdStorm VAST endpoint (adstorm mode):\",\n vastEndpoint\n );\n }\n return;\n }\n if (this.config.vastTagUrl) {\n this.apiVastTagUrl = normalizeVastTagUrl(this.config.vastTagUrl);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using custom VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n return;\n }\n const apiUrl = \"https://adstorm.co/api-adstorm-dev/adstorm/ads/web\";\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Fetching ad configuration from:\",\n apiUrl\n );\n }\n const headers = {};\n if (this.config.licenseKey) {\n headers[\"Authorization\"] = `Bearer ${this.config.licenseKey}`;\n }\n const response = await fetch(apiUrl, { headers });\n if (!response.ok) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Failed to fetch ad configuration: ${response.status}`\n );\n }\n return;\n }\n const data = await response.json();\n const imaPayload = data.response?.ima?.[\"publisherdesk.ima\"]?.payload;\n if (imaPayload) {\n let decodedPayload = imaPayload;\n try {\n decodedPayload = decodeURIComponent(imaPayload);\n } catch {\n console.warn(\"[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:\", imaPayload);\n }\n console.log(\"[StormcloudVideoPlayer] Raw VAST tag URL (from API):\", decodedPayload);\n this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Normalized VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n } else {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response\"\n );\n }\n }\n const numberAds = data.response?.options?.vast?.cue_tones?.number_ads;\n if (numberAds != null && numberAds > 0) {\n this.apiNumberAds = numberAds;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Number of ads per break from API:\",\n this.apiNumberAds\n );\n }\n }\n }\n async fetchAndParseVmap(vmapUrl) {\n if (!vmapUrl.trim()) {\n return;\n }\n try {\n const response = await fetch(vmapUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch VMAP (${response.status})`);\n }\n const vmapXml = await response.text();\n this.vmapBreaks = this.parseVmapToBreaks(vmapXml);\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Loaded ${this.vmapBreaks.length} VMAP ad break(s) from:`,\n vmapUrl\n );\n }\n } catch (error) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to load VMAP:\", error);\n }\n }\n }\n parseVmapToBreaks(vmapXml) {\n if (typeof DOMParser === \"undefined\") {\n return [];\n }\n const doc = new DOMParser().parseFromString(vmapXml, \"application/xml\");\n if (doc.querySelector(\"parsererror\")) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Invalid VMAP XML received\");\n }\n return [];\n }\n const VMAP_NS = \"http://www.iab.net/videosuite/vmap\";\n let adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, \"AdBreak\"));\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(\n doc.querySelectorAll(\"AdBreak, vmap\\\\:AdBreak\")\n );\n }\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(doc.getElementsByTagName(\"*\")).filter(\n (el) => el.localName === \"AdBreak\"\n );\n }\n const parsed = [];\n adBreakNodes.forEach((node, index) => {\n const timeOffsetRaw = (node.getAttribute(\"timeOffset\") || \"\").trim();\n const startTimeMs = this.parseVmapTimeOffsetToMs(timeOffsetRaw);\n if (startTimeMs == null) {\n return;\n }\n let adTagNode = node.getElementsByTagNameNS(VMAP_NS, \"AdTagURI\")[0];\n if (!adTagNode) {\n adTagNode = node.querySelector(\"AdTagURI, vmap\\\\:AdTagURI\") ?? void 0;\n }\n const adTagUrl = (adTagNode?.textContent || \"\").trim();\n if (!adTagUrl) {\n return;\n }\n const breakId = node.getAttribute(\"breakId\") || `vmap-break-${index}-${timeOffsetRaw || \"unknown\"}`;\n parsed.push({\n id: breakId,\n startTimeMs,\n vastTagUrl: adTagUrl\n });\n });\n parsed.sort((a, b) => {\n const aStart = a.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : a.startTimeMs;\n const bStart = b.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : b.startTimeMs;\n return aStart - bStart;\n });\n return parsed;\n }\n parseVmapTimeOffsetToMs(timeOffset) {\n if (!timeOffset) {\n return void 0;\n }\n const normalized = timeOffset.trim().toLowerCase();\n if (normalized === \"start\") {\n return 0;\n }\n if (normalized === \"end\") {\n return -1;\n }\n const hms = timeOffset.match(\n /^(\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/\n );\n if (hms) {\n const [, hh, mm, ss, ms = \"0\"] = hms;\n const hours = Number(hh);\n const minutes = Number(mm);\n const seconds = Number(ss);\n const millis = Number(ms.padEnd(3, \"0\").slice(0, 3));\n return (hours * 3600 + minutes * 60 + seconds) * 1e3 + millis;\n }\n const percent = timeOffset.match(/^(\\d+(?:\\.\\d+)?)%$/);\n if (percent) {\n const ratio = Number(percent[1]) / 100;\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3 * ratio);\n }\n return void 0;\n }\n return void 0;\n }\n getAdBreakKey(adBreak) {\n if (adBreak.id) {\n return adBreak.id;\n }\n return `${adBreak.startTimeMs}-${adBreak.vastTagUrl || \"\"}`;\n }\n resolveBreakStartMs(adBreak) {\n if (adBreak.startTimeMs >= 0) {\n return adBreak.startTimeMs;\n }\n if (adBreak.startTimeMs === -1) {\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3);\n }\n }\n return void 0;\n }\n findCurrentOrNextBreak(nowMs) {\n const schedule = this.vmapBreaks;\n let candidate;\n const tol = this.config.driftToleranceMs ?? 1e3;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (breakStartMs <= nowMs + tol && (candidate == null || breakStartMs > (this.resolveBreakStartMs(candidate) ?? 0))) {\n candidate = b;\n }\n }\n return candidate;\n }\n findBreakForTime(nowMs) {\n const schedule = this.vmapBreaks;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (b.durationMs) {\n const end = breakStartMs + b.durationMs;\n if (nowMs >= breakStartMs && nowMs < end) {\n return b;\n }\n continue;\n }\n if (nowMs >= breakStartMs) {\n return b;\n }\n }\n return void 0;\n }\n selectVastTagsForBreak(b) {\n if (!b || !b.vastTagUrl) return void 0;\n if (b.vastTagUrl.includes(\",\")) {\n return b.vastTagUrl.split(\",\").map((s) => s.trim()).filter((s) => s.length > 0);\n }\n return [b.vastTagUrl];\n }\n beginNewAdPod() {\n this.podCounter++;\n }\n resolvePodParams(breakDurationMs) {\n const maxDurationMs = breakDurationMs != null && breakDurationMs > 0 ? breakDurationMs : this.config.podMaxDurationMs != null && this.config.podMaxDurationMs > 0 ? this.config.podMaxDurationMs : this.defaultPodMaxDurationMs;\n const maxAds = this.config.podMaxAds && this.config.podMaxAds > 0 ? this.config.podMaxAds : this.apiNumberAds && this.apiNumberAds > 0 ? this.apiNumberAds : this.defaultPodMaxAds;\n const minDurationMs = this.config.podExactDuration && maxDurationMs != null ? maxDurationMs : 0;\n return { maxAds, minDurationMs, maxDurationMs };\n }\n getPalDescriptionUrl() {\n if (!this.apiVastTagUrl) return void 0;\n try {\n const params = new URL(this.apiVastTagUrl).searchParams;\n return params.get(\"description_url\") || params.get(\"url\") || void 0;\n } catch {\n return void 0;\n }\n }\n generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {\n const adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;\n const envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);\n const urlWithMacros = applyVastMacros(baseUrl, {\n correlator: this.viewCorrelator,\n streamCorrelator: this.streamCorrelator,\n pod: this.podCounter > 0 ? this.podCounter : void 0,\n podMaxAds: podParams.maxAds,\n podMinDurationMs: podParams.minDurationMs,\n podMaxDurationMs: podParams.maxDurationMs,\n isCtv: envSignals.isCtv,\n pageUrl: !envSignals.isCtv && typeof window !== \"undefined\" ? toDevSafeUrl(window.location.href) : void 0,\n adWillPlayMuted,\n adWillAutoPlay: !!this.config.autoplay,\n sessionId: envSignals.sessionId,\n deviceId: envSignals.deviceId,\n deviceIdType: envSignals.deviceIdType,\n limitAdTracking: envSignals.limitAdTracking,\n deviceTypeHint: envSignals.deviceTypeHint,\n adTest: this.config.adTest,\n ...this.config.programTitle ? { programTitle: this.config.programTitle } : {},\n consent: this.consentSignals\n });\n const finalUrl = palNonce.injectNonce(urlWithMacros);\n console.log(\n `[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=${this.podCounter}, pmad=${podParams.maxAds}, pmnd=${podParams.minDurationMs}, pmxd=${podParams.maxDurationMs ?? \"?\"}):`,\n finalUrl\n );\n return finalUrl;\n }\n // --- Tracking ---\n initializeTracking() {\n sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(() => {\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n }).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send initial tracking:\",\n error\n );\n }\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n });\n }\n sendHeartbeatIfNeeded() {\n const now = Date.now();\n if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {\n this.lastHeartbeatTime = now;\n sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send heartbeat:\",\n error\n );\n }\n });\n }\n }\n destroyTracking() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = void 0;\n }\n }\n};\n\n// src/player/AdTimingService.ts\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls2.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls2.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls2.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls2.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls2.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls2.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls2.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls2.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.adRequestQueue = [];\n this.adPodQueue = [];\n this.maxPlaceholderDurationMs = 5e3;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const adPlayer = this.host.getAdPlayer();\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"all_ads_completed\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.inAdBreak) {\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n let errorMessage = \"Ad playback failed\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure();\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] content_resume event: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n });\n }\n recreateAdController() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Recreating AdController for new ad\");\n }\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n async handleAdStart(_marker) {\n const scheduled = this.adConfig.findCurrentOrNextBreak(\n this.host.video.currentTime * 1e3\n );\n if (scheduled) {\n this.adConfig.consumedVmapBreakIds.add(this.adConfig.getAdBreakKey(scheduled));\n }\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n this.clearPendingAdBreak();\n return;\n }\n const adBreakDurationMs = _marker.durationSeconds != null ? _marker.durationSeconds * 1e3 : scheduled?.durationMs;\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[CONTINUOUS-FETCH] ${mode} MODE: Target duration=${adBreakDurationMs}ms`\n );\n }\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n const podPlayed = await this.startOptimizedPod(\n baseVastUrl,\n adBreakDurationMs,\n currentMuted,\n currentVolume\n );\n if (!podPlayed) {\n if (this.debug) {\n console.log(\"[POD] Initial pod request did not fill; attempting top-up pod request\");\n }\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n await this.tryNextAvailableAdWithRateLimit();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs, currentMuted, currentVolume) {\n let podUrl;\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.continuousFetchingActive = false;\n this.recreateAdController();\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n await adPlayer.requestAds(podUrl);\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) {\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n return false;\n }\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: podUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await adPlayer.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(currentMuted ? 0 : currentVolume);\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(podUrl, Date.now());\n }\n this.continuousFetchingActive = true;\n this.recreateAdController();\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Continuous fetching\n // ───────────────────────────────────────────────────────────────\n startContinuousFetching(baseVastUrl) {\n if (!this.continuousFetchingActive) {\n return;\n }\n if (this.continuousFetchLoopRunning) {\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Fetch loop already running, skipping duplicate start\");\n }\n return;\n }\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Starting continuous ad fetching loop\");\n }\n this.continuousFetchLoopRunning = true;\n this.continuousFetchLoop(baseVastUrl);\n }\n async continuousFetchLoop(baseVastUrl) {\n const epoch = this.timing.adBreakEpoch;\n while (this.continuousFetchingActive && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (remaining <= this.timing.getMinRemainingMsToStartAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough ad break time left (wall=${this.timing.getWallClockRemainingAdMs()}ms, budget=${this.timing.getDurationBudgetRemainingMs()}ms), stopping URL generation`);\n }\n break;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, stopping URL generation\");\n }\n break;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), stopping URL generation`);\n }\n break;\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Maximum ad requests reached (${this.timing.maxTotalAdRequestsPerBreak}), stopping`);\n }\n break;\n }\n const maxQueueSize = 5;\n if (this.adRequestQueue.length >= maxQueueSize) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] URL queue full (${this.adRequestQueue.length}), waiting...`);\n }\n await new Promise((resolve) => setTimeout(resolve, 1e3));\n continue;\n }\n const newAdUrl = this.nextAdRequestUrl(baseVastUrl);\n if (!newAdUrl || this.timing.failedVastUrls.has(newAdUrl) || this.timing.isUrlInCooldown(newAdUrl)) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n continue;\n }\n if (this.debug) {\n const queuedUrlsPreview = [...this.adRequestQueue, newAdUrl];\n console.log(\n `[CONTINUOUS-FETCH] Queued VAST URL (queue size: ${queuedUrlsPreview.length})`,\n { queuedUrls: queuedUrlsPreview }\n );\n }\n this.adRequestQueue.push(newAdUrl);\n const generationDelay = this.timing.consecutiveFailures > 0 ? Math.min(1e3 * Math.pow(2, this.timing.consecutiveFailures), 5e3) : 500;\n await new Promise((resolve) => setTimeout(resolve, generationDelay));\n }\n this.continuousFetchLoopRunning = false;\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] URL generation loop ended (queued: ${this.adRequestQueue.length})`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n }\n stopContinuousFetching() {\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.placeholder.hide();\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Stopping continuous ad fetching\");\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad iteration\n // ───────────────────────────────────────────────────────────────\n async tryNextAvailableAdWithRateLimit() {\n if (!this.inAdBreak) {\n return;\n }\n const epoch = this.timing.adBreakEpoch;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n }\n this.handleAdPodComplete();\n return;\n }\n const backoffMultiplier = Math.pow(2, this.timing.consecutiveFailures);\n const backoffDelay = Math.min(this.timing.backoffBaseMs * backoffMultiplier, this.timing.maxBackoffMs);\n const effectiveMinInterval = this.timing.minAdRequestIntervalMs + (this.timing.consecutiveFailures > 0 ? backoffDelay : 0);\n const timeSinceLastRequest = Date.now() - this.timing.lastAdRequestTime;\n if (timeSinceLastRequest < effectiveMinInterval) {\n const waitTime = effectiveMinInterval - timeSinceLastRequest;\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Rate limiting: waiting ${waitTime}ms before next request (backoff: ${this.timing.consecutiveFailures} failures)`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) {\n return;\n }\n return this.tryNextAvailableAd(0);\n }\n async tryNextAvailableAd(retryCount = 0) {\n if (!this.inAdBreak) {\n return;\n }\n const remaining = this.timing.getRemainingAdMs();\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough time remaining (${remaining}ms) to start another ad, ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, ending ad break gracefully\");\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n this.timing.cleanupTemporaryFailures();\n while (this.adRequestQueue.length > 0) {\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping permanently-failed URL, trying next...\");\n continue;\n }\n if (this.timing.isUrlInCooldown(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping URL in cooldown (recent no-fill), trying next...\");\n continue;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Requesting next ad via HLS ad player (${this.timing.currentAdIndex + 1}, ${this.adRequestQueue.length} remaining in queue)`);\n }\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad request failed:\", errorMessage);\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n const maxRetries = 3;\n if (this.continuousFetchingActive && retryCount < maxRetries && remaining > 2e3) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Queue empty, waiting for URLs... (${retryCount + 1}/${maxRetries})`);\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n await this.tryNextAvailableAd(retryCount + 1);\n return;\n }\n if (!this.isShowingPlaceholder && remaining > 1e3) {\n this.showPlaceholderAndWaitForAds();\n } else {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] No more ads available, ending ad break\");\n this.handleAdPodComplete();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n async playSingleAd(vastTagUrl) {\n const adPlayer = this.host.getAdPlayer();\n if (adPlayer.isAdPlaying()) return;\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n this.recreateAdController();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n const ap = this.host.getAdPlayer();\n await ap.requestAds(vastTagUrl);\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: vastTagUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) return;\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n this.timing.rejectLoadedAdForDuration(ap);\n this.recreateAdController();\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n try {\n this.timing.startAdFailsafeTimer(requestToken);\n await ap.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.consecutiveFailures = 0;\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (playError) {\n if (this.debug) console.error(\"[AD-ERROR] Failed to play ad:\", playError);\n if (this.timing.isTemporaryAdError(playError)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary play error - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent play error - URL blacklisted\");\n }\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw playError;\n }\n } catch (error) {\n const errorMessage = error?.message || \"\";\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", errorMessage);\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary error (no-fill/timeout) - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent error - URL blacklisted:\", errorMessage);\n }\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Placeholder wait\n // ───────────────────────────────────────────────────────────────\n async showPlaceholderAndWaitForAds() {\n const remaining = this.timing.getRemainingAdMs();\n const waitTime = Math.min(this.maxPlaceholderDurationMs, remaining);\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping placeholder wait\");\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping placeholder - too many consecutive failures\");\n this.handleAdPodComplete();\n return;\n }\n if (waitTime < 1e3) {\n this.handleAdPodComplete();\n return;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Showing placeholder for ${waitTime}ms while waiting for ad URLs`);\n }\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n const checkInterval = 300;\n const maxChecks = Math.floor(waitTime / checkInterval);\n for (let i = 0; i < maxChecks; i++) {\n await new Promise((resolve) => setTimeout(resolve, checkInterval));\n if (!this.inAdBreak) return;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Too many failures during placeholder wait\");\n break;\n }\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Not enough time remaining during placeholder wait, ending ad break\");\n break;\n }\n while (this.adRequestQueue.length > 0) {\n if (!this.timing.hasTimeToStartAnotherAd()) break;\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) continue;\n if (this.timing.isUrlInCooldown(nextAdUrl)) continue;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad URL available, requesting via HLS ad player\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n }\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Placeholder timeout, ending ad break\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n this.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n handleAdPodComplete() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\");\n }\n this.timing.resetForBreakEnd();\n this.stopContinuousFetching();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.adRequestQueue = [];\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.host.getAdPlayer().stop().catch(() => {\n });\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure() {\n this.timing.consecutiveFailures++;\n this.timing.recordGamNoFill();\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] Ad failure: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}, consecutiveFailures=${this.timing.consecutiveFailures}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(`[CONTINUOUS-FETCH] Max consecutive failures reached (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n if (this.debug) console.log(\"[AD-ERROR] Ad failed and not enough time remaining for another ad. Failed URLs:\", this.timing.failedVastUrls.size);\n this.handleAdPodComplete();\n }\n }\n};\n\n// src/player/StormcloudVideoPlayer.ts\nvar StormcloudVideoPlayer = class {\n constructor(config) {\n this.attached = false;\n this.palPlaybackStarted = false;\n initializePolyfills();\n const browserOverrides = getBrowserConfigOverrides();\n this.config = { ...browserOverrides, ...config };\n this.video = config.videoElement;\n logBrowserInfo(config.debugAdTiming);\n this.adPlayer = this.createAdPlayer(false);\n this.palNonce = createPalNonceManager();\n this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {\n onEarlyStartCue: (marker, fragmentSn, cueKey) => {\n this.startAdPrefetch(marker, fragmentSn, cueKey);\n },\n onPlaybackCue: (marker, cueKey) => {\n this.onScte35Marker(marker, cueKey);\n },\n isInAdBreak: () => this.adBreak.inAdBreak\n });\n this.adConfig = new AdConfigManager(this.config, this.video);\n this.timing = new AdTimingService(this.config, this.video, {\n onAdStopTimerFired: () => this.onAdStopTimerFired(),\n onAdStartTimerFired: (marker, cueKey) => {\n this.startScte35AdBreak(\n marker,\n cueKey,\n marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs\n );\n },\n onWatchdogTimeout: () => this.adBreak.handleAdFailure(),\n onFailsafeTimeout: () => this.adBreak.handleAdFailure(),\n getAdState: () => ({\n inAdBreak: this.adBreak.inAdBreak,\n showAds: this.adBreak.showAds,\n adPlaying: this.adPlayer.isAdPlaying()\n })\n });\n this.placeholder = new PlaceholderLayer(this.video, !!this.config.debugAdTiming);\n this.hlsEngine = new HlsEngine(this.config, this.video, this.cueManager, this.timing, {\n onManifestParsed: async (isLive) => this.onManifestParsed(isLive),\n onScte35Cue: (marker, context) => this.cueManager.onScte35Cue(marker, context),\n activatePendingCuesForFragment: (frag) => this.cueManager.activatePendingScte35CuesForFragment(frag),\n onFatalDestroy: () => this.destroy(),\n isInAdBreak: () => this.adBreak.inAdBreak,\n hasPendingAdBreak: () => this.adBreak.pendingAdBreak !== null\n });\n this.adBreak = new AdBreakOrchestrator(\n {\n config: this.config,\n video: this.video,\n getAdPlayer: () => this.adPlayer,\n setAdPlayer: (p) => {\n this.adPlayer = p;\n },\n createAdPlayer: (c) => this.createAdPlayer(c),\n shouldContinueLiveStreamDuringAds: () => this.shouldContinueLiveStreamDuringAds(),\n isLiveStream: () => this.hlsEngine.isLiveStream,\n getLiveSyncPosition: () => this.hlsEngine.getLiveSyncPosition(),\n restartHlsLoad: (position) => this.hlsEngine.restartLoadAt(position),\n reloadLiveStream: () => this.hlsEngine.reloadLiveStream(),\n recoverMediaError: () => this.hlsEngine.recoverMediaError(),\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds(),\n generatePodVastUrl: (base, breakDurationMs) => this.generatePodVastUrl(base, breakDurationMs),\n onAdClick: () => this.palNonce.sendAdClick(),\n onAdInteraction: (event) => this.palNonce.sendAdTouch(event)\n },\n this.timing,\n this.adConfig,\n this.cueManager,\n this.placeholder\n );\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n createAdPlayer(continueLiveStreamDuringAds) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Creating HLS ad player\");\n }\n return createHlsAdPlayer(this.video, {\n continueLiveStreamDuringAds,\n ...this.config.licenseKey ? { licenseKey: this.config.licenseKey } : {},\n ...this.hlsEngine?.hls ? { mainHlsInstance: this.hlsEngine.hls } : {}\n });\n }\n generatePodVastUrl(baseUrl, breakDurationMs) {\n const podParams = this.adConfig.resolvePodParams(breakDurationMs);\n return this.adConfig.generatePodVastUrl(\n baseUrl,\n podParams,\n this.adPlayer,\n this.palNonce,\n this.adBreak.inAdBreak\n );\n }\n // ───────────────────────────────────────────────────────────────\n // Lifecycle\n // ───────────────────────────────────────────────────────────────\n async load() {\n if (!this.attached) {\n this.attach();\n }\n try {\n await this.adConfig.fetchAdConfiguration();\n } catch (error) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to fetch ad configuration:\",\n error\n );\n }\n }\n const palDescriptionUrl = this.adConfig.getPalDescriptionUrl();\n this.palNonce.generateNonce({\n videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,\n videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,\n adWillAutoPlay: !!this.config.autoplay,\n adWillPlayMuted: true,\n playerVolume: 0,\n continuousPlayback: this.config.lowLatencyMode ?? false,\n ...palDescriptionUrl ? { descriptionUrl: palDescriptionUrl } : {}\n }).catch(() => {\n });\n fetchConsentSignals().then((signals) => {\n this.adConfig.consentSignals = signals;\n }).catch(() => {\n });\n this.adConfig.initializeTracking();\n if (this.hlsEngine.shouldUseNativeHls(() => this.getStreamType())) {\n await this.hlsEngine.setupNativeHls();\n const continueLiveStreamDuringAds = this.shouldContinueLiveStreamDuringAds();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Native HLS ad behavior:\", {\n isLive: this.hlsEngine.isLiveStream,\n continueLiveStreamDuringAds\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(continueLiveStreamDuringAds);\n this.adPlayer.initialize();\n return;\n }\n this.hlsEngine.setupHls();\n }\n async onManifestParsed(isLive) {\n if (this.hlsEngine.reloadingLiveStream) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Manifest re-parsed after hard reload \\u2014 skipping ad-player setup\");\n }\n return;\n }\n if (!this.adConfig.isVmapEnabled() && !isLive && this.adConfig.vmapBreaks.length === 0 && this.adConfig.apiVastTagUrl) {\n const prerollKey = \"synthetic-vod-preroll\";\n if (!this.adConfig.consumedVmapBreakIds.has(prerollKey)) {\n this.adConfig.vmapBreaks = [\n { id: prerollKey, startTimeMs: 0, vastTagUrl: this.adConfig.apiVastTagUrl }\n ];\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Injected synthetic VOD preroll from apiVastTagUrl\"\n );\n }\n }\n }\n if (this.debug) {\n const adBehavior = this.shouldContinueLiveStreamDuringAds() ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\"[StormcloudVideoPlayer] Stream type detected:\", {\n isLive,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(this.shouldContinueLiveStreamDuringAds());\n this.adPlayer.initialize();\n }\n attach() {\n if (this.attached) return;\n this.attached = true;\n this.video.autoplay = !!this.config.autoplay;\n this.video.muted = !!this.config.muted;\n this.adPlayer.initialize();\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.attachImaEventListeners();\n this.video.addEventListener(\"play\", () => {\n if (!this.palPlaybackStarted && !this.adPlayer.isAdPlaying()) {\n this.palPlaybackStarted = true;\n this.palNonce.sendPlaybackStart();\n }\n });\n this.endedHandler = () => {\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.onVideoEnded();\n };\n this.video.addEventListener(\"ended\", this.endedHandler);\n this.video.addEventListener(\"mousedown\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.video.addEventListener(\"touchstart\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.timeUpdateHandler = () => {\n this.onTimeUpdate(this.video.currentTime);\n };\n this.video.addEventListener(\"timeupdate\", this.timeUpdateHandler);\n this.emptiedHandler = () => {\n if (this.hlsEngine.nativeHlsMode && this.hlsEngine.videoSrcProtection && !this.adPlayer.isAdPlaying()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Video src was cleared, restoring:\",\n this.hlsEngine.videoSrcProtection\n );\n }\n const currentTime = this.video.currentTime;\n const wasPaused = this.video.paused;\n this.video.src = this.hlsEngine.videoSrcProtection;\n this.video.currentTime = currentTime;\n if (!wasPaused) {\n this.video.play().catch(() => {\n });\n }\n }\n };\n this.video.addEventListener(\"emptied\", this.emptiedHandler);\n }\n shouldContinueLiveStreamDuringAds() {\n if (this.config.pauseContentDuringAds) {\n return false;\n }\n if (this.hlsEngine.isLiveStream) {\n return true;\n }\n const duration = this.video.duration;\n if (!Number.isFinite(duration) || duration === Infinity) {\n return true;\n }\n return false;\n }\n // ───────────────────────────────────────────────────────────────\n // SCTE-35 marker orchestration\n // ───────────────────────────────────────────────────────────────\n onScte35Marker(marker, cueKey) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 marker detected:\", {\n type: marker.type,\n ptsSeconds: marker.ptsSeconds,\n durationSeconds: marker.durationSeconds,\n currentTime: this.video.currentTime,\n raw: marker.raw,\n hasPendingAdBreak: !!this.adBreak.pendingAdBreak\n });\n }\n if (marker.type === \"start\") {\n if (this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n const newDurationMs = marker.durationSeconds * 1e3;\n if (this.timing.expectedAdBreakDurationMs == null || newDurationMs > this.timing.expectedAdBreakDurationMs) {\n this.timing.setAdBreakDurationBoundary(newDurationMs);\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Updated ad break duration from subsequent marker: ${newDurationMs}ms, remaining: ${this.timing.getWallClockRemainingAdMs()}ms`\n );\n }\n }\n }\n return;\n }\n if (!this.adBreak.adDetectSentForCurrentBreak) {\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n }\n const hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;\n const durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.adBreak.pendingAdBreak?.marker.durationSeconds != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;\n const isManifest = isManifestBasedMarker(marker);\n const forceImmediate = this.config.immediateManifestAds ?? true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad start decision:\", {\n isManifestMarker: isManifest,\n forceImmediate,\n hasPts: typeof marker.ptsSeconds === \"number\",\n hasPrefetchedAds\n });\n }\n if (isManifest && forceImmediate) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Starting ad immediately (manifest-based)${hasPrefetchedAds ? \" with prefetched ads\" : \"\"}`\n );\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n } else if (typeof marker.ptsSeconds === \"number\") {\n const tol = this.config.driftToleranceMs ?? 1e3;\n const nowMs = this.video.currentTime * 1e3;\n const estCurrentPtsMs = nowMs - this.timing.ptsDriftEmaMs;\n const deltaMs = Math.floor(marker.ptsSeconds * 1e3 - estCurrentPtsMs);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] PTS-based timing calculation:\", {\n nowMs,\n estCurrentPtsMs,\n markerPtsMs: marker.ptsSeconds * 1e3,\n deltaMs,\n tolerance: tol\n });\n }\n if (deltaMs > tol) {\n if (this.debug) {\n console.log(`[StormcloudVideoPlayer] Scheduling ad start in ${deltaMs}ms`);\n }\n this.timing.expectedAdBreakDurationMs = durationMs;\n this.cueManager.scheduledScte35BreakKey = cueKey;\n this.timing.scheduleAdStartIn(deltaMs, marker, cueKey);\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (within tolerance)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (fallback)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n return;\n }\n if (marker.type === \"progress\" && this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n this.timing.setAdBreakDurationBoundary(marker.durationSeconds * 1e3);\n }\n this.timing.scheduleAdStopAtBreakBoundary();\n if (!this.adPlayer.isAdPlaying() && this.timing.activeAdRequestToken === null && this.adBreak.adRequestQueue.length > 0 && this.timing.hasTimeToStartAnotherAd()) {\n this.adBreak.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n if (marker.type === \"end\") {\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on SCTE end marker\");\n }\n }\n const remaining = this.timing.getRemainingAdMs();\n const adPlaying = this.adPlayer.isAdPlaying();\n const hasQueuedAds = this.adBreak.adRequestQueue.length > 0;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 end marker received:\", {\n remaining,\n adPlaying,\n hasQueuedAds,\n activeAdRequest: this.timing.activeAdRequestToken !== null\n });\n }\n this.timing.scteAdBreakEndWallClockMs = Date.now();\n this.timing.clearAdStartTimer();\n this.timing.clearAdStopTimer();\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n return;\n }\n }\n startScte35AdBreak(marker, cueKey, durationMs) {\n this.adBreak.inAdBreak = true;\n this.cueManager.activeScte35BreakKey = cueKey ?? this.cueManager.pendingScte35CueKey;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.timing.currentAdBreakStartWallClockMs = this.timing.resolveScteBreakStartWallClockMs(marker);\n this.timing.setAdBreakDurationBoundary(durationMs);\n this.adBreak.handleAdStart(marker);\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n onAdStopTimerFired() {\n if (!this.adBreak.inAdBreak) return;\n const adPlaying = this.adPlayer.isAdPlaying();\n const checkIntervalMs = Math.max(\n 250,\n Math.floor(this.config.adBreakCheckIntervalMs ?? 1e3)\n );\n const maxExtensionMsConfig = this.config.maxAdBreakExtensionMs;\n const maxExtensionMs = typeof maxExtensionMsConfig === \"number\" && maxExtensionMsConfig > 0 ? maxExtensionMsConfig : 0;\n const endWallClockMs = this.timing.getAdBreakEndWallClockMs() ?? Date.now();\n const overrunMs = Math.max(0, Date.now() - endWallClockMs);\n const shouldExtendAdBreak = adPlaying && overrunMs < maxExtensionMs;\n if (shouldExtendAdBreak) {\n this.timing.scheduleAdStopCountdown(checkIntervalMs);\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Ad break boundary reached (overrun=${overrunMs}ms) - hard-stopping ads and resuming stream`\n );\n }\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad prefetch\n // ───────────────────────────────────────────────────────────────\n startAdPrefetch(marker, fragmentSn, cueKey) {\n if (this.adBreak.pendingAdBreak || this.adBreak.inAdBreak) return;\n const scheduled = this.adConfig.findCurrentOrNextBreak(this.video.currentTime * 1e3);\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n if (this.debug) console.warn(\"[StormcloudVideoPlayer] No VAST URL available for prefetch\");\n return;\n }\n this.adConfig.beginNewAdPod();\n this.adConfig.podAssignedByPrefetch = true;\n const breakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : void 0;\n const generatedUrls = [this.generatePodVastUrl(baseVastUrl, breakDurationMs)];\n this.adBreak.pendingAdBreak = {\n marker,\n ...fragmentSn !== void 0 ? { detectedAtFragmentSn: fragmentSn } : {},\n vastUrls: generatedUrls,\n isFetching: false,\n fetchStartTime: Date.now()\n };\n this.cueManager.pendingScte35CueKey = cueKey;\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n if (fragmentSn !== void 0) detectPayload.detectedAtFragmentSn = fragmentSn;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n if (this.debug) {\n console.log(\"[PREFETCH] Starting ad prefetch for upcoming ad break\");\n console.log(`[PREFETCH] Pre-generated pod request URL`);\n }\n }\n // ───────────────────────────────────────────────────────────────\n // VMAP time-based ad breaks\n // ───────────────────────────────────────────────────────────────\n onTimeUpdate(currentTimeSec) {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const nowMs = currentTimeSec * 1e3;\n const breakToPlay = this.adConfig.findBreakForTime(nowMs);\n if (breakToPlay) {\n void this.handleVmapAdBreak(breakToPlay, nowMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad break failed gracefully:\", error);\n }\n });\n }\n }\n onVideoEnded() {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;\n const postroll = this.adConfig.vmapBreaks.find(\n (b) => b.startTimeMs === -1 && !this.adConfig.consumedVmapBreakIds.has(this.adConfig.getAdBreakKey(b))\n );\n if (postroll) {\n void this.handleVmapAdBreak(postroll, durationMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP post-roll failed gracefully:\", error);\n }\n });\n }\n }\n async handleVmapAdBreak(adBreak, nowMs) {\n const key = this.adConfig.getAdBreakKey(adBreak);\n if (this.adConfig.consumedVmapBreakIds.has(key)) return;\n const breakStartMs = this.adConfig.resolveBreakStartMs(adBreak);\n if (breakStartMs == null) return;\n const durationMs = adBreak.durationMs ?? 0;\n const endMs = breakStartMs + durationMs;\n const inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;\n if (inWindow) {\n this.adConfig.consumedVmapBreakIds.add(key);\n const tags = this.adConfig.selectVastTagsForBreak(adBreak);\n if (!tags || tags.length === 0) return;\n const first = tags[0];\n const rest = tags.slice(1);\n this.adBreak.adPodQueue = rest;\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.showAds = true;\n this.adBreak.inAdBreak = true;\n this.timing.currentAdBreakStartWallClockMs = Date.now();\n try {\n await this.adBreak.playSingleAd(first);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad request failed:\", error);\n }\n this.adBreak.handleAdPodComplete();\n }\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Public API\n // ───────────────────────────────────────────────────────────────\n getCurrentAdIndex() {\n return this.timing.currentAdIndex;\n }\n getTotalAdsInBreak() {\n return this.timing.totalAdsInBreak;\n }\n getAdRemainingMs() {\n return this.timing.getRemainingAdMs();\n }\n isAdPlaying() {\n return this.adBreak.inAdBreak && this.adPlayer.isAdPlaying();\n }\n isShowingAds() {\n return this.adBreak.showAds;\n }\n getStreamType() {\n const url = this.config.src.toLowerCase();\n if (url.includes(\".m3u8\") || url.includes(\"/hls/\") || url.includes(\"application/vnd.apple.mpegurl\")) {\n return \"hls\";\n }\n return \"other\";\n }\n shouldShowNativeControls() {\n const streamType = this.getStreamType();\n if (streamType === \"other\") {\n return !(this.config.showCustomControls ?? false);\n }\n return !!(this.config.allowNativeHls && !(this.config.showCustomControls ?? false));\n }\n isLive() {\n return this.hlsEngine.isLiveStream;\n }\n isLowLatencyStream() {\n return this.hlsEngine.isLowLatencyStream();\n }\n get videoElement() {\n return this.video;\n }\n toggleMute() {\n toggleMute(this.video, this.adPlayer, this.debug);\n }\n toggleFullscreen() {\n return toggleFullscreen(this.video, this.debug);\n }\n isMuted() {\n return isMuted(this.video, this.adPlayer);\n }\n setMuted(muted) {\n setMuted(this.video, this.adPlayer, muted, this.debug);\n }\n setVolume(volume) {\n setVolume(this.video, this.adPlayer, volume, this.debug);\n }\n getVolume() {\n return getVolume(this.video, this.adPlayer);\n }\n isFullscreen() {\n return isFullscreen();\n }\n resize() {\n resizePlayer(this.video, this.adPlayer, this.debug);\n }\n // ───────────────────────────────────────────────────────────────\n // Destroy\n // ───────────────────────────────────────────────────────────────\n destroy() {\n this.adBreak.stopContinuousFetching();\n this.timing.destroy();\n this.adBreak.clearPendingAdBreak();\n this.placeholder.destroy();\n if (this.timeUpdateHandler) {\n this.video.removeEventListener(\"timeupdate\", this.timeUpdateHandler);\n delete this.timeUpdateHandler;\n }\n if (this.endedHandler) {\n this.video.removeEventListener(\"ended\", this.endedHandler);\n delete this.endedHandler;\n }\n if (this.emptiedHandler) {\n this.video.removeEventListener(\"emptied\", this.emptiedHandler);\n delete this.emptiedHandler;\n }\n this.adConfig.destroyTracking();\n this.hlsEngine.destroy();\n this.adPlayer?.destroy();\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.palNonce.reset();\n this.adBreak.adRequestQueue = [];\n this.timing.consecutiveFailures = 0;\n }\n};\n\n// src/players/HlsPlayer.tsx\nvar HlsPlayer = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.player = null;\n this.mounted = false;\n this.load = async () => {\n if (!this.props.videoElement || !this.props.src) return;\n try {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n const config = {\n src: this.props.src,\n videoElement: this.props.videoElement\n };\n if (this.props.autoplay !== void 0)\n config.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) config.muted = this.props.muted;\n if (this.props.lowLatencyMode !== void 0)\n config.lowLatencyMode = this.props.lowLatencyMode;\n if (this.props.allowNativeHls !== void 0)\n config.allowNativeHls = this.props.allowNativeHls;\n if (this.props.isLiveStream !== void 0)\n config.isLiveStream = this.props.isLiveStream;\n if (this.props.driftToleranceMs !== void 0)\n config.driftToleranceMs = this.props.driftToleranceMs;\n if (this.props.immediateManifestAds !== void 0)\n config.immediateManifestAds = this.props.immediateManifestAds;\n if (this.props.debugAdTiming !== void 0)\n config.debugAdTiming = this.props.debugAdTiming;\n if (this.props.showCustomControls !== void 0)\n config.showCustomControls = this.props.showCustomControls;\n if (this.props.onVolumeToggle !== void 0)\n config.onVolumeToggle = this.props.onVolumeToggle;\n if (this.props.onFullscreenToggle !== void 0)\n config.onFullscreenToggle = this.props.onFullscreenToggle;\n if (this.props.onControlClick !== void 0)\n config.onControlClick = this.props.onControlClick;\n if (this.props.licenseKey !== void 0)\n config.licenseKey = this.props.licenseKey;\n if (this.props.adFailsafeTimeoutMs !== void 0)\n config.adFailsafeTimeoutMs = this.props.adFailsafeTimeoutMs;\n if (this.props.minSegmentsBeforePlay !== void 0)\n config.minSegmentsBeforePlay = this.props.minSegmentsBeforePlay;\n if (this.props.ctvAdRequest !== void 0)\n config.ctvAdRequest = this.props.ctvAdRequest;\n this.player = new StormcloudVideoPlayer(config);\n this.props.onMount?.(this);\n await this.player.load();\n if (this.mounted) {\n this.props.onReady?.();\n }\n } catch (error) {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n }\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[HlsPlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n this.props.onPlay?.();\n } else {\n console.warn(\"[HlsPlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n this.props.onPause?.();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"player\") return this.player;\n if (key === \"video\") return this.props.videoElement;\n if (key === \"hls\" && this.player) return this.player.hls;\n return null;\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nHlsPlayer.displayName = \"HlsPlayer\";\nHlsPlayer.canPlay = canPlay.hls;\n\n// src/players/FilePlayer.tsx\nvar import_react3 = require(\"react\");\nvar FilePlayer = class extends import_react3.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.ready = false;\n this.load = () => {\n if (!this.props.videoElement || !this.props.src) return;\n const video = this.props.videoElement;\n const handleLoadedMetadata = () => {\n if (this.mounted && !this.ready) {\n this.ready = true;\n this.props.onReady?.();\n }\n };\n const handlePlay = () => {\n if (this.mounted) {\n this.props.onPlay?.();\n }\n };\n const handlePause = () => {\n if (this.mounted) {\n this.props.onPause?.();\n }\n };\n const handleEnded = () => {\n if (this.mounted) {\n this.props.onEnded?.();\n }\n };\n const handleError = (error) => {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n };\n const handleLoadedData = () => {\n if (this.mounted) {\n this.props.onLoaded?.();\n }\n };\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.src = this.props.src;\n if (this.props.autoplay !== void 0) video.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) video.muted = this.props.muted;\n if (this.props.loop !== void 0) video.loop = this.props.loop;\n if (this.props.controls !== void 0) video.controls = this.props.controls;\n if (this.props.playsInline !== void 0)\n video.playsInline = this.props.playsInline;\n if (this.props.preload !== void 0)\n video.preload = this.props.preload;\n if (this.props.poster !== void 0) video.poster = this.props.poster;\n this.props.onMount?.(this);\n return () => {\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n };\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[FilePlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n } else {\n console.warn(\"[FilePlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.setLoop = (loop) => {\n if (this.props.videoElement) {\n this.props.videoElement.loop = loop;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"video\") return this.props.videoElement;\n return null;\n };\n this.enablePIP = async () => {\n if (this.props.videoElement && \"requestPictureInPicture\" in this.props.videoElement) {\n try {\n await this.props.videoElement.requestPictureInPicture();\n } catch (error) {\n console.warn(\"Picture-in-Picture failed:\", error);\n }\n }\n };\n this.disablePIP = async () => {\n if (document.pictureInPictureElement) {\n try {\n await document.exitPictureInPicture();\n } catch (error) {\n console.warn(\"Exit Picture-in-Picture failed:\", error);\n }\n }\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nFilePlayer.displayName = \"FilePlayer\";\nFilePlayer.canPlay = canPlay.file;\n\n// src/players/index.ts\nvar players = [\n {\n key: \"hls\",\n name: \"HLS Player\",\n canPlay: canPlay.hls,\n lazyPlayer: lazy(() => Promise.resolve({ default: HlsPlayer }))\n },\n {\n key: \"file\",\n name: \"File Player\",\n canPlay: canPlay.file,\n canEnablePIP: (url) => {\n return canPlay.file(url) && (document.pictureInPictureEnabled || typeof document.webkitSupportsPresentationMode === \"function\");\n },\n lazyPlayer: lazy(() => Promise.resolve({ default: FilePlayer }))\n }\n];\nvar players_default = players;\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\players\\index.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","players_exports","default","players_default","module","exports","import_react","require","lazy","IS_BROWSER","window","document","IS_GLOBAL","globalThis","IS_IOS","test","navigator","userAgent","IS_SAFARI","HLS_EXTENSIONS","HLS_PATHS","DASH_EXTENSIONS","VIDEO_EXTENSIONS","AUDIO_EXTENSIONS","canPlay","hls","url","dash","video","audio","file","import_react2","import_hls","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","userAgentData","platform","detectBrowser","version","majorVersion","isSmartTV","isLegacyTV","supportsModernJS","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","requiresMediaPipelineResetAfterAds","browser","getBrowserConfigOverrides","overrides","allowNativeHls","pauseContentDuringAds","logBrowserInfo","debug","console","log","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","String","Math","floor","random","formatPlayhead","seconds","Number","isFinite","total","hh","padStart","mm","ss","ms","resolveMacroValues","ctx","values","set","adPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","round","deviceId","deviceIdType","limitAdTracking","pageUrl","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","replace","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","map","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","trimmed","endsWith","percent","offsetPercent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","BEACON_TIMEOUT_MS","inFlightBeacons","VAST_ERROR_MEDIA_DISPLAY","VAST_ERROR_WRAPPER_TIMEOUT","VAST_ERROR_WRAPPER_LIMIT","VAST_ERROR_WRAPPER_NO_ADS","VAST_ERROR_NO_SUPPORTED_MEDIA","VERIFICATION_NOT_SUPPORTED_REASON","VIEWABLE_MIN_VISIBLE_RATIO","VIEWABLE_MIN_CONTINUOUS_S","toVastMediaErrorCode","error","code","createHlsAdPlayer","contentVideo","options","adPlaying","originalMutedState","originalVolume","max","min","volume","listeners","mainHlsInstance","AD_CONTAINER_PROP","AD_VIDEO_PROP","FRAME_COUNTER_RELIABLE_PROP","RVFC_RELIABLE_PROP","adVideoElement","adHls","adContainerEl","adEventHandlers","containerHandlers","currentAd","currentAdMediaFile","podAds","podIndex","preloadedAds","preloadingAds","destroyed","pendingTimeouts","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","BLACKFRAME_MIN_PLAYBACK_S","stallWatchdogId","lastAdProgressTime","lastAdProgressPosition","sawDecodedVideoFrame","videoFrameCallbackHandle","pendingPlayPromise","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","emit","event","payload","Array","fn","warn","buildTrackingMacroContext","options2","ad","context","currentTime","type","clientWidth","clientHeight","location","href","fireTrackingPixels","urls","macroContext","forEach","trackingUrl","img","Image","add","timeoutId","release","clearTimeout","onload","onerror","delete","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","bitrate","level","selectBestMediaFile","mediaFiles","Error","firstFile","mainQuality","scoredFiles","widthDiff","abs","heightDiff","resolutionDiff","fileBitrate","bitrateDiff","score","sort","a","b","bestMatch","resolution","isHlsMediaFile","mediaFile","toLowerCase","includes","isProgressiveMediaFile","startsWith","isAudioMediaFile","collectVideoMediaFiles","linear","verbose","mediaFileElements","querySelectorAll","mf","index","getAttribute","apiFramework","toUpperCase","bitrateAttr","bitrateValue","hasExplicitDimensions","push","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","collectLinearTracking","into","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","keys","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","errorUrls","parseVastXml","adElements","documentElement","find","parsed","parseAdElement","vastAdTagUri","wrapper","trackingUrls2","linear2","trackingUrls","rules","followAdditionalWrappers","inLine","candidate","files","id","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","requestVast","response","creds","fetch","mode","headers","referrerPolicy","ok","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","substring","fetchAndParsePod","trimmedXml","empty","resolveAd","podElements","buffet","ads","filter","shift","createAdVideoElement","createElement","style","position","left","top","objectFit","backgroundColor","playsInline","muted","setupAdEventListeners","onTimeUpdate","noteAdProgress","sampleViewability","threshold","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","creativeView","adId","onEnded","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","reportCurrentAdError","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","open","fireNotUsedForUnplayedAds","notUsed","now","inView","visibilityState","paused","handleFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onInteraction","onFullscreenChange","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","startAdPlayback","playPromise","play","catch","finally","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","loadCurrentAdMedia","isHlsAd","isSupported","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","onPresentedFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","releaseAdDecoder","display","pointerEvents","continueLiveStreamDuringAds","visibility","opacity","initialize","container","right","bottom","alignItems","justifyContent","zIndex","parentElement","requestAds","preloaded","reject","resolve","contentVolume","stop","previousMutedState","clear","isAdPlaying","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","setAdVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getLoadedAdId","getPodAdCount","getPodTotalDurationMs","reduce","PRIVATE_HOST_PATTERNS","isLocalDevHost","host","some","pattern","toDevSafeUrl","rawUrl","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_nonceLoaderAllowStorage","_palLoadPromise","loadPalSdk","goog","pal","existing","timeout","script","async","setAttribute","head","getOrCreateNonceLoader","allowStorage","consentSettings","ConsentSettings","NonceLoader","createPalNonceManager","currentNonce","currentNonceManager","generateNonce","loader","request","manager","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","iconsSupported","playerType","playerVersion","supportedApiFrameworks","ppid","sessionId","JSON","stringify","loadNonceManager","getNonce","getCurrentNonce","injectNonce","searchParams","base","sep","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","reset","DEFAULT_TRACKING_INGEST_CONFIG","enabled","baseUrl","trackingIngestConfig","isTrackingIngestEnabled","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","ingestPlayerTracking","licenseKey","body","method","Authorization","status","CTV_SESSION_STORAGE_KEY","WEB_SESSION_STORAGE_KEY","inMemoryWebSessionId","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","resolveVastEnvironmentSignals","isCtv","platformLat","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","realDeviceId","readStoredDeviceId","readStoredString","inferDeviceIdType","readStoredLimitAdTracking","dpid","getOrCreateStoredUuid","deviceTypeHint","resolveDeviceTypeHint","getOrCreateCtvSessionId","webSessionId","getOrCreateWebSessionId","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","gameconsole","stb","settopbox","SET_TOP_BOX_UA","GAME_CONSOLE_UA","CONNECTED_TV_UA","FEATURE_PHONE_UA","override","readDeviceTypeHintOverride","inferDeviceTypeHint","fallback","maxTouchPoints","fromGlobal","normalizeDeviceTypeHint","__STORMCLOUD_DTH__","getNativeBridgeSources","normalized","safeCall","isInteger","thisArg","isEquivalentDeviceIdType","tagType","runtimeType","tag","runtime","resolveNativeDeviceId","includeStored","isMacroPlaceholder","isZeroedAdId","storageKey","readPersistentId","writePersistentId","createUuid","sessionStorage","getItem","setItem","readCookie","localStorage","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","prefix","cookie","part","decodeURIComponent","slice","bytes","crypto","randomUUID","Uint8Array","getRandomValues","seed","performanceNow","i","hex","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","AiryTV","Android","webOS","tizen","amazon","Boolean","result","normalizeBoolean","cachedBrowserId","buildAnalyticsContext","config","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","screen","vendor","memory","deviceMemory","hardwareConcurrency","screenInfo","availWidth","availHeight","orientation","pixelDepth","deviceType","brand","os","model","isAndroid","isWebView","isWebApp","webosMatch","tizenMatch","tvMatch","androidModelMatch","outerHeight","outerWidth","matchMedia","matches","standalone","angle","domain","origin","path","language","languages","join","cookieEnabled","doNotTrack","referrer","sha256Hex","input","encodedData","utf8","buffer","hashBuffer","hash","char","fallbackHash","timestamp","subtle","digest","TextEncoder","encode","unescape","charCodeAt","padEnd","resolvePlayerIdentitySeed","clientInfo","nativeDeviceId","persistedId","getBrowserID","canPublish","buildPlayerMetricEvent","flags","playerId","captureAt","player_id","device_type","ad_loaded","adLoaded","ad_detect","adDetect","capture_at","input_stream_type","sendInitialTracking","metricEvent","events","sendAdDetectTracking","adDetectInfo","sendHeartbeat","sendAdLoadedTracking","adLoadedInfo","sendAdImpressionTracking","adImpressionInfo","ad_played_count","ad_url","adUrl","heartbeatData","polyfillURLSearchParams","URLSearchParamsPolyfill","init","params","parseQueryString","append","query","cleanQuery","param","decodedKey","safeDecodeURIComponent","decodedValue","str","getAll","callback","polyfillTextEncoder","TextEncoderPolyfill","encoding","charcode","polyfillPromiseFinally","constructor","then","polyfillObjectAssign","assign","sources","TypeError","nextSource","nextKey","polyfillArrayFrom","arrayLike","mapFn","items","len","polyfillStringStartsWith","search","pos","polyfillStringEndsWith","polyfillStringIncludes","initializePolyfills","UNEXPANDED_MACRO_PATTERN","INVALID_VAST_PARAM_KEY","EXAMPLE_COM_URL","CTV_UNSUPPORTED_PARAMS","INLINE_DEVICE_MACRO_REPLACEMENTS","getValue","correlator","isMacroPlaceholder2","generateCorrelator","buf","Uint32Array","MAX_SAFE_INTEGER","expandInlineMacroPlaceholders","applyDeviceIdentityParams","runtimeId","tagRdid","tagLat","latValue","tagRdidValid","tagTypeValid","removeBrokenAppNameOrphans","toDelete","_value","suffix","normalizeVastTagUrl","raw","anValue","orphanFragments","reconstructed","_match","val","applyVastMacros","expandedUrl","replaceCorrelatorFallback","streamCorrelator","pod","podMinDurationMs","podMaxDurationMs","podMaxAds","existingUrl","consent","gdpr","gdprConsent","usPrivacy","adTest","programTitle","channelName","staleKeys","correlatorRegex","fetchConsentSignals","timeoutMs","signals","tasks","tcfApi","__tcfapi","settled","tcData","success","eventStatus","gdprApplies","storageAllowed","purpose","consents","tcString","listenerId","uspApi","__uspapi","uspString","parseCueOutDuration","num","dStr","d","parseCueOutCont","res","elapsedMatch","durationMatch","elapsed","slashMatch","parseAttributeList","attrs","regex","exec","rawVal","toNumber","isManifestBasedMarker","marker","id3","splice_command_type","decodeId3ValueToText","decoder","TextDecoder","decode","out","fromCharCode","getFragmentStartSeconds","frag","candidates","startPTS","parseScte35FromId3","cueOutMatch","arg","dur","ptsSeconds","durationSeconds","cueOutContMatch","cont","cueInMatch","daterangeMatch","hasScteOut","hasScteIn","klass","bin","parseScte35Binary","normalizeFragmentPayload","ArrayBuffer","isView","view","byteOffset","byteLength","detectTsPacketFormat","packetSizes","packetSize","tsPayloadOffset","matchedPackets","packetStart","getPsiSectionStart","payloadUnitStart","pointerField","sectionStart","getPsiSectionLength","parsePatSection","pmtPids","sectionLength","sectionEnd","programNumber","pid","descriptorsIdentifyScte35","end","descriptorStart","descriptorEnd","registration","parsePmtSection","tsScte35Pids","programInfoLength","streamType","elementaryPid","esInfoLength","hasProcessedTsScte35Section","section","processedSections","checksum","size","firstKey","next","addScte35SectionMarker","markers","appendScte35Bytes","assemblers","assembler","expectedLength","collectScte35SectionsFromPayload","previousAssembler","subarray","tableId","totalLength","parseScte35FromTsPackets","packetInfo","sectionAssemblers","tsStart","secondByte","thirdByte","fourthByte","adaptationFieldControl","hasPayload","payloadStart","adaptationLength","payloadEnd","BitReader","bytePos","bitPos","readBits","numBits","remainingInByte","toRead","currentByte","mask","bits","skipBits","bytePosition","readSpliceTime","r","ptsAdjustmentTicks","timeSpecifiedFlag","high","low","ptsTicks","markerTypeFromSegmentationTypeId","segmentationTypeId","parseScte35SegmentationDescriptor","descriptor","identifier","segmentationEventId","cancelIndicator","programSegmentationFlag","segmentationDurationFlag","componentCount","durationTicks","segmentationUpidLength","markerType","parseScte35SegmentationDescriptors","descriptorLoopLength","descriptorOffset","descriptorTag","descriptorLength","descriptorDataStart","descriptorDataEnd","descriptorMarker","ptsAdjHigh","ptsAdjLow","spliceCommandLength","spliceCommandType","spliceEventId","commandBodyStart","cancel","outOfNetwork","programSpliceFlag","durationFlag","spliceImmediateFlag","componentPtsSeconds","expectedDescriptorOffset","splice_event_id","segmentation_event_id","Scte35CueManager","callbacks","pendingScte35Cues","recentScte35CueKeys","recentScte35CueLimit","processedTsScte35Sections","pendingScte35CueKey","pendingScte35CueKeyValue","activeScte35BreakKey","activeScte35BreakKeyValue","scheduledScte35BreakKey","scheduledScte35BreakKeyValue","createScte35CueContext","readiness","sn","fragmentSn","fragmentStartSec","fragmentStartSeconds","onScte35Cue","cue","createScte35Cue","pendingKey","getPendingScte35CueKey","trimRecentScte35CueMaps","onEarlyStartCue","shouldAcceptScte35EndCue","inAdBreak","isInAdBreak","hasRecentlyHandledScte35Cue","markScte35CueHandled","onPlaybackCue","activatePendingScte35CuesForFragment","matchingCues","getScte35CueKey","getScte35MarkerRaw","toIdentityString","daterangeId","ID","scteValue","isStrongScte35CueKey","recentKey","AdConfigManager","vmapBreaks","consumedVmapBreakIds","viewCorrelator","consentSignals","podCounter","podAssignedByPrefetch","lastHeartbeatTime","defaultPodMaxAds","defaultPodMaxDurationMs","isVmapEnabled","isVmap","vmapUrl","fetchAdConfiguration","vastMode","vastEndpoint","apiUrl","imaPayload","decodedPayload","numberAds","fetchAndParseVmap","apiVastTagUrl","json","ima","vast","cue_tones","number_ads","apiNumberAds","vmapXml","parseVmapToBreaks","doc","VMAP_NS","adBreakNodes","getElementsByTagNameNS","getElementsByTagName","localName","node","timeOffsetRaw","startTimeMs","parseVmapTimeOffsetToMs","adTagNode","adTagUrl","breakId","aStart","bStart","timeOffset","hms","hours","minutes","millis","ratio","durationSec","getAdBreakKey","adBreak","resolveBreakStartMs","findCurrentOrNextBreak","nowMs","schedule","tol","driftToleranceMs","breakStartMs","findBreakForTime","durationMs","selectVastTagsForBreak","beginNewAdPod","resolvePodParams","breakDurationMs","maxDurationMs","maxAds","minDurationMs","podExactDuration","getPalDescriptionUrl","generatePodVastUrl","podParams","adPlayer","palNonce","envSignals","ctvAdRequest","urlWithMacros","autoplay","finalUrl","initializeTracking","heartbeatInterval","sendHeartbeatIfNeeded","destroyTracking","AdTimingService","adRequestWatchdogToken","adFailsafeToken","ptsDriftEmaMs","adBreakPlayedDurationMs","adBreakEpoch","adRequestTokenCounter","activeAdRequestToken","currentAdIndex","totalAdsInBreak","totalAdRequestsInBreak","maxTotalAdRequestsPerBreak","lastAdRequestTime","consecutiveFailures","maxConsecutiveFailures","minAdRequestIntervalMs","backoffBaseMs","maxBackoffMs","defaultMinRemainingMsToStartAd","failedVastUrls","temporaryFailureUrls","temporaryFailureCooldownMs","globalConsecutiveNoFills","globalNoFillThreshold","globalNoFillCooldownUntil","globalNoFillBackoffBaseMs","globalNoFillBackoffMaxMs","globalLastGamRequestTime","globalMinGamIntervalMs","scheduleAdStopCountdown","remainingMs","clearAdStopTimer","ensureAdStoppedByTimer","adStopTimerId","onAdStopTimerFired","scheduleAdStartIn","delayMs","cueKey","clearAdStartTimer","onAdStartTimerFired","adStartTimerId","updatePtsDrift","ptsSecondsSample","sampleMs","alpha","resolveScteBreakStartWallClockMs","nowWallClockMs","estimatedCurrentPtsMs","deltaMs","setAdBreakDurationBoundary","expectedAdBreakDurationMs","currentAdBreakStartWallClockMs","scteAdBreakEndWallClockMs","scheduleAdStopAtBreakBoundary","getWallClockRemainingAdMs","endWallClockMs","getAdBreakEndWallClockMs","getDurationBudgetRemainingMs","getLoadedAdDurationMs","adController","adFitsRemainingBudget","logAdDurationDecision","accepted","remainingBudget","recordPlayedAdDuration","ensureLoadedAdFitsBudget","fits","rejectLoadedAdForDuration","markAdStarted","notePodAdStarted","getRemainingAdMs","wallClockRemaining","budgetRemaining","getMinRemainingMsToStartAd","configured","minRemainingMsToStartAd","hasTimeToStartAnotherAd","minRemaining","isTemporaryAdError","message","isUrlInCooldown","failureTime","cleanupTemporaryFailures","isGamInCooldown","recordGamNoFill","exponent","backoff","pow","resetGamNoFillCounter","enforceGlobalRateLimit","waitMs","startAdRequestWatchdog","token","clearAdRequestWatchdog","adFailsafeTimeoutMs","adRequestWatchdogId","logAdState","onWatchdogTimeout","startAdFailsafeTimer","clearAdFailsafeTimer","failsafeMs","adFailsafeTimerId","videoPaused","onFailsafeTimeout","extra","getAdState","showAds","resetForBreakEnd","PlaceholderLayer","ensureContainer","transition","show","wasHidden","offsetHeight","requestAnimationFrame","hide","removeChild","import_hls2","HlsEngine","cueManager","timing","nativeHlsMode","videoSrcProtection","reloadingLiveStream","bufferedSegmentsCount","shouldAutoplayAfterBuffering","hasInitialBufferCompleted","latencyProfileApplied","shouldUseNativeHls","getStreamType","canNative","setupNativeHls","adBehavior","isLive","setupHls","backBufferLength","liveDurationInfinity","maxLiveSyncPlaybackRate","maxBufferLength","maxMaxBufferLength","maxBufferSize","maxBufferHole","highBufferWatchdogPeriod","nudgeOffset","nudgeMaxRetry","startPosition","MEDIA_ATTACHED","_","_data","minSegments","details","live","onManifestParsed","detectedLowLatencyStream","minSegmentsBeforePlay","LEVEL_LOADED","_evt","applyStreamLatencyProfile","hasPendingAdBreak","fragments","fragmentsToScan","tagList","isArray","idx","earlyDetection","FRAG_BUFFERED","err","FRAG_PARSING_METADATA","id3Tags","samples","pts","onId3Tag","FRAG_LOADED","processFragmentScte35Payload","FRAG_DECRYPTED","FRAG_CHANGED","activatePendingCuesForFragment","prog","ErrorTypes","NETWORK_ERROR","startLoad","MEDIA_ERROR","recoverMediaError","onFatalDestroy","isLowLatencyStream","isLowLatencyManifest","useLowLatency","cfg","liveSyncDuration","liveSyncDurationCount","lowLatencyModeRequested","canBlockReload","partTarget","partHoldBack","partListLength","partList","targetDuration","targetduration","hasParts","hasPartTarget","hasPartHoldBack","payloadData","getLiveSyncPosition","liveSyncPosition","restartLoadAt","stopLoad","reloadLiveStream","detachMedia","recreateDelayMs","getAdAudioVolume","toggleMute","newMutedState","restoreVolume","toggleFullscreen","requestFullscreen","isMuted","setMuted","setVolume","clampedVolume","getVolume","isFullscreen","resizePlayer","AdBreakOrchestrator","adConfig","placeholder","isShowingPlaceholder","adDetectSentForCurrentBreak","continuousFetchingActive","continuousFetchLoopRunning","adRequestQueue","adPodQueue","maxPlaceholderDurationMs","pendingAdBreak","analyticsContext","nextAdRequestUrl","baseVastUrl","remaining","attachImaEventListeners","getAdPlayer","onAdClick","onAdInteraction","adIndex","queuedUrls","tryNextAvailableAdWithRateLimit","handleAdPodComplete","errorPayload","errorMessage","vastErrorCode","cause","innerError","causeMessage","handleAdFailure","recreateAdController","shouldShowPlaceholder","preservedMutedState","preservedVolumeState","shouldContinueLiveStreamDuringAds","newAdPlayer","createAdPlayer","setAdPlayer","clearPendingAdBreak","prefetchTimerId","handleAdStart","_marker","scheduled","tags","adBreakDurationMs","currentMuted","currentVolume","podPlayed","startOptimizedPod","startContinuousFetching","podUrl","requestToken","podCount","vastUrls","vastUrl","continuousFetchLoop","epoch","maxQueueSize","newAdUrl","queuedUrlsPreview","generationDelay","stopContinuousFetching","backoffMultiplier","backoffDelay","effectiveMinInterval","timeSinceLastRequest","waitTime","tryNextAvailableAd","retryCount","nextAdUrl","maxRetries","playSingleAd","showPlaceholderAndWaitForAds","ap","playError","checkInterval","maxChecks","restoredMuted","restoredVolume","monitorLiveResumeStall","liveSyncPos","toFixed","restartHlsLoad","resumeContentPlayback","getBufferedAhead","ranges","buffered","describeVideoState","networkStates","readyStates","v","net","networkState","ready","readyState","seeking","resumeBaseline","needsReset","pollIntervalMs","graceMs","recoveryCooldownMs","maxRecoveries","maxMonitorMs","startTime","baseline","recoveries","lastRecoveryAt","listenersAttached","onMediaEvent","diagEvents","dt","cleanup","poll","advanced","playing","bufferedAhead","wedged","canRecover","reloadPos","attempt","maxAttempts","onReady","backoffMs","playResult","StormcloudVideoPlayer","attached","palPlaybackStarted","browserOverrides","videoElement","startAdPrefetch","onScte35Marker","startScte35AdBreak","hlsEngine","c","palDescriptionUrl","attach","offsetWidth","prerollKey","endedHandler","onVideoEnded","timeUpdateHandler","emptiedHandler","wasPaused","Infinity","newDurationMs","detectPayload","hasPrefetchedAds","isManifest","forceImmediate","immediateManifestAds","isManifestMarker","hasPts","estCurrentPtsMs","markerPtsMs","tolerance","hasQueuedAds","activeAdRequest","checkIntervalMs","adBreakCheckIntervalMs","maxExtensionMsConfig","maxAdBreakExtensionMs","maxExtensionMs","overrunMs","shouldExtendAdBreak","generatedUrls","detectedAtFragmentSn","isFetching","fetchStartTime","currentTimeSec","breakToPlay","handleVmapAdBreak","postroll","endMs","inWindow","first","rest","getCurrentAdIndex","getTotalAdsInBreak","getAdRemainingMs","isShowingAds","shouldShowNativeControls","showCustomControls","HlsPlayer","arguments","player","mounted","props","onVolumeToggle","onFullscreenToggle","onControlClick","onMount","hasValidSource","currentSrc","seekTo","keepPlaying","setPlaybackRate","rate","playbackRate","getDuration","getCurrentTime","getSecondsLoaded","getInternalPlayer","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","render","Component","displayName","import_react3","FilePlayer","handleLoadedMetadata","handlePlay","handlePause","handleEnded","handleError","handleLoadedData","onLoaded","loop","controls","preload","poster","setLoop","enablePIP","requestPictureInPicture","disablePIP","pictureInPictureElement","exitPictureInPicture","players","lazyPlayer","canEnablePIP","pictureInPictureEnabled","webkitSupportsPresentationMode"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/players/index.ts\nvar players_exports = {};\n__export(players_exports, {\n default: () => players_default\n});\nmodule.exports = __toCommonJS(players_exports);\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar lazy = import_react.lazy;\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/patterns.ts\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_PATHS = /\\/hls\\//i;\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)($|\\?)/i;\nvar AUDIO_EXTENSIONS = /\\.(mp3|wav|ogg|aac|wma|flac|m4a)($|\\?)/i;\nvar canPlay = {\n hls: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return HLS_EXTENSIONS.test(url) || HLS_PATHS.test(url);\n },\n dash: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return DASH_EXTENSIONS.test(url);\n },\n video: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url);\n },\n audio: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return AUDIO_EXTENSIONS.test(url);\n },\n file: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url) || AUDIO_EXTENSIONS.test(url);\n }\n};\n\n// src/players/HlsPlayer.tsx\nvar import_react2 = require(\"react\");\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS = true;\n let webOSVersion;\n let tizenVersion;\n let chromeVersionNum;\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n if (match && match[1]) {\n version = match[1];\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = \"6.0\";\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = \"5.0\";\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = \"4.0\";\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = \"3.0\";\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = \"2.0\";\n majorVersion = 2;\n }\n } else {\n version = \"Unknown\";\n webOSVersion = void 0;\n }\n isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;\n } else if (/Tizen/i.test(ua)) {\n name = \"Samsung Tizen\";\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n tizenVersion = majorVersion;\n }\n isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else {\n if (chromeVersion > 0) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n if (chromeVersion < 50) {\n supportsModernJS = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS,\n webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum\n };\n}\nfunction requiresMediaPipelineResetAfterAds() {\n const browser = detectBrowser();\n return browser.name === \"Samsung Tizen\" && (browser.tizenVersion ?? 0) >= 5;\n}\nfunction getBrowserConfigOverrides() {\n const browser = detectBrowser();\n const overrides = {};\n if (browser.isSmartTV) {\n overrides.allowNativeHls = true;\n overrides.pauseContentDuringAds = true;\n }\n return overrides;\n}\nfunction logBrowserInfo(debug = false) {\n if (!debug) return;\n const browser = detectBrowser();\n console.log(\"[StormcloudVideoPlayer] Browser Compatibility Info:\", {\n browser: `${browser.name} ${browser.version}`,\n platform: browser.platform,\n isSmartTV: browser.isSmartTV,\n isLegacyTV: browser.isLegacyTV,\n supportsModernJS: browser.supportsModernJS,\n ...browser.webOSVersion !== void 0 ? { webOSVersion: browser.webOSVersion } : {},\n ...browser.tizenVersion !== void 0 ? { tizenVersion: browser.tizenVersion } : {},\n ...browser.chromeVersion !== void 0 ? { chromeVersion: browser.chromeVersion } : {},\n userAgent: navigator.userAgent\n });\n}\n\n// src/utils/vastTrackingMacros.ts\nvar VAST_MACRO_PATTERN = /\\[([A-Z][A-Z0-9_]*)\\]/g;\nvar CACHEBUSTING_ALIASES = /\\[CACHEBUSTER\\]|\\[cachebuster\\]|\\[timestamp\\]|\\[random\\]|\\[INSERT_RANDOM_NUMBER\\]|%%CACHEBUSTER%%|%%CACHEBUST%%|\\$\\{CACHEBUSTER\\}|\\$\\{CACHEBUSTING\\}|\\{cachebuster\\}|\\{random\\}/g;\nvar KNOWN_VAST_MACROS = /* @__PURE__ */ new Set([\n \"ADCATEGORIES\",\n \"ADCOUNT\",\n \"ADPLAYHEAD\",\n \"ADSERVINGID\",\n \"ADTYPE\",\n \"APIFRAMEWORKS\",\n \"APPBUNDLE\",\n \"ASSETURI\",\n \"BLOCKEDADCATEGORIES\",\n \"BREAKMAXADLENGTH\",\n \"BREAKMAXADS\",\n \"BREAKMAXDURATION\",\n \"BREAKMINADLENGTH\",\n \"BREAKPOSITION\",\n \"CACHEBUSTING\",\n \"CLICKPOS\",\n \"CLICKTYPE\",\n \"CLIENTUA\",\n \"CONTENTID\",\n \"CONTENTPLAYHEAD\",\n \"CONTENTURI\",\n \"DEVICEIP\",\n \"DEVICEUA\",\n \"DOMAIN\",\n \"ERRORCODE\",\n \"EXTENSIONS\",\n \"GDPRCONSENT\",\n \"IFA\",\n \"IFATYPE\",\n \"INVENTORYSTATE\",\n \"LATLONG\",\n \"LIMITADTRACKING\",\n \"MEDIAMIME\",\n \"MEDIAPLAYHEAD\",\n \"OMIDPARTNER\",\n \"PAGEURL\",\n \"PLACEMENTTYPE\",\n \"PLAYERCAPABILITIES\",\n \"PLAYERSIZE\",\n \"PLAYERSTATE\",\n \"PODSEQUENCE\",\n \"REASON\",\n \"REGULATIONS\",\n \"SERVERSIDE\",\n \"SERVERUA\",\n \"TIMESTAMP\",\n \"TRANSACTIONID\",\n \"UNIVERSALADID\",\n \"VASTVERSIONS\",\n \"VERIFICATIONVENDORS\"\n]);\nfunction generateCachebuster() {\n return String(Math.floor(Math.random() * 9e7) + 1e7);\n}\nfunction formatPlayhead(seconds) {\n if (seconds == null || !Number.isFinite(seconds) || seconds < 0) {\n return void 0;\n }\n const total = Math.floor(seconds);\n const hh = String(Math.floor(total / 3600)).padStart(2, \"0\");\n const mm = String(Math.floor(total % 3600 / 60)).padStart(2, \"0\");\n const ss = String(total % 60).padStart(2, \"0\");\n const ms = String(Math.floor((seconds - total) * 1e3)).padStart(3, \"0\");\n return `${hh}:${mm}:${ss}.${ms}`;\n}\nfunction resolveMacroValues(ctx) {\n const values = /* @__PURE__ */ new Map();\n const set = (key, value) => {\n if (value != null && value !== \"\") values.set(key, value);\n };\n const adPlayhead = formatPlayhead(ctx.adPlayheadSeconds);\n set(\"ADPLAYHEAD\", adPlayhead);\n set(\"MEDIAPLAYHEAD\", adPlayhead);\n set(\"CONTENTPLAYHEAD\", formatPlayhead(ctx.contentPlayheadSeconds));\n set(\"ASSETURI\", ctx.assetUri);\n set(\"MEDIAMIME\", ctx.mediaMime);\n set(\"TIMESTAMP\", (/* @__PURE__ */ new Date()).toISOString());\n set(\"SERVERSIDE\", \"0\");\n if (ctx.errorCode != null && ctx.errorCode !== \"\") {\n set(\"ERRORCODE\", String(ctx.errorCode));\n }\n if (ctx.playerWidth != null && ctx.playerHeight != null) {\n set(\"PLAYERSIZE\", `${Math.round(ctx.playerWidth)},${Math.round(ctx.playerHeight)}`);\n }\n set(\"IFA\", ctx.deviceId);\n set(\"IFATYPE\", ctx.deviceIdType);\n if (ctx.limitAdTracking != null) {\n set(\"LIMITADTRACKING\", ctx.limitAdTracking ? \"1\" : \"0\");\n }\n set(\"PAGEURL\", ctx.pageUrl);\n if (ctx.pageUrl) {\n try {\n set(\"DOMAIN\", new URL(ctx.pageUrl).hostname);\n } catch {\n }\n }\n set(\"CLIENTUA\", ctx.clientUa);\n set(\"DEVICEUA\", ctx.clientUa);\n if (ctx.podSequence != null) {\n set(\"PODSEQUENCE\", String(ctx.podSequence));\n }\n set(\"ADSERVINGID\", ctx.adServingId);\n if (ctx.reason != null && ctx.reason !== \"\") {\n set(\"REASON\", String(ctx.reason));\n }\n return values;\n}\nfunction substituteVastTrackingMacros(url, ctx = {}) {\n if (!url) return url;\n const values = resolveMacroValues(ctx);\n return url.replace(CACHEBUSTING_ALIASES, () => generateCachebuster()).replace(VAST_MACRO_PATTERN, (match, name) => {\n if (name === \"CACHEBUSTING\") return generateCachebuster();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n return KNOWN_VAST_MACROS.has(name) ? \"\" : match;\n });\n}\n\n// src/sdk/hlsAdPlayer.ts\nvar LINEAR_TRACKING_EVENTS = [\n \"creativeView\",\n \"loaded\",\n \"start\",\n \"firstQuartile\",\n \"midpoint\",\n \"thirdQuartile\",\n \"complete\",\n \"mute\",\n \"unmute\",\n \"pause\",\n \"resume\",\n \"fullscreen\",\n \"exitFullscreen\",\n \"playerExpand\",\n \"playerCollapse\",\n \"notUsed\"\n];\nfunction textOf(el) {\n const value = el?.textContent?.trim();\n return value ? value : void 0;\n}\nfunction parseVastTime(value) {\n if (!value) return void 0;\n const parts = value.trim().split(\":\");\n if (parts.length !== 3) return void 0;\n const [h, m, s] = parts.map((p) => parseFloat(p));\n if (![h, m, s].every((n) => n !== void 0 && Number.isFinite(n))) {\n return void 0;\n }\n return h * 3600 + m * 60 + s;\n}\nfunction parseProgressOffset(offset) {\n if (!offset) return void 0;\n const trimmed = offset.trim();\n if (trimmed.endsWith(\"%\")) {\n const percent = parseFloat(trimmed);\n return Number.isFinite(percent) ? { offsetPercent: percent } : void 0;\n }\n const seconds = parseVastTime(trimmed);\n return seconds !== void 0 ? { offsetSeconds: seconds } : void 0;\n}\nvar MAX_VAST_WRAPPER_DEPTH = 5;\nvar BEACON_TIMEOUT_MS = 3e4;\nvar inFlightBeacons = /* @__PURE__ */ new Set();\nvar VAST_ERROR_MEDIA_DISPLAY = 405;\nvar VAST_ERROR_WRAPPER_TIMEOUT = 301;\nvar VAST_ERROR_WRAPPER_LIMIT = 302;\nvar VAST_ERROR_WRAPPER_NO_ADS = 303;\nvar VAST_ERROR_NO_SUPPORTED_MEDIA = 403;\nvar VERIFICATION_NOT_SUPPORTED_REASON = 2;\nvar VIEWABLE_MIN_VISIBLE_RATIO = 0.5;\nvar VIEWABLE_MIN_CONTINUOUS_S = 2;\nfunction toVastMediaErrorCode(error) {\n switch (error?.code) {\n case 1:\n return 400;\n case 2:\n return 401;\n case 4:\n return 403;\n default:\n return VAST_ERROR_MEDIA_DISPLAY;\n }\n}\nfunction createHlsAdPlayer(contentVideo, options) {\n let adPlaying = false;\n let originalMutedState = false;\n let originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));\n const listeners = /* @__PURE__ */ new Map();\n const mainHlsInstance = options?.mainHlsInstance;\n const AD_CONTAINER_PROP = \"__stormcloudAdContainer\";\n const AD_VIDEO_PROP = \"__stormcloudAdVideo\";\n const FRAME_COUNTER_RELIABLE_PROP = \"__stormcloudFrameCounterReliable\";\n const RVFC_RELIABLE_PROP = \"__stormcloudRvfcReliable\";\n let adVideoElement = contentVideo[AD_VIDEO_PROP] ?? void 0;\n let adHls;\n let adContainerEl = contentVideo[AD_CONTAINER_PROP] ?? void 0;\n let adEventHandlers = [];\n let containerHandlers = [];\n let currentAd;\n let currentAdMediaFile;\n let podAds = [];\n let podIndex = 0;\n const preloadedAds = /* @__PURE__ */ new Map();\n const preloadingAds = /* @__PURE__ */ new Map();\n let destroyed = false;\n let pendingTimeouts = [];\n const STALL_TIMEOUT_MS = 4e3;\n const STALL_CHECK_INTERVAL_MS = 1e3;\n const BLACKFRAME_MIN_PLAYBACK_S = 1.5;\n let stallWatchdogId;\n let lastAdProgressTime = 0;\n let lastAdProgressPosition = 0;\n let sawDecodedVideoFrame = false;\n let videoFrameCallbackHandle;\n let pendingPlayPromise;\n function createTrackingState() {\n return {\n impression: false,\n loaded: false,\n start: false,\n firstQuartile: false,\n midpoint: false,\n thirdQuartile: false,\n complete: false,\n viewabilitySettled: false,\n lastMuted: void 0,\n progressFired: /* @__PURE__ */ new Set()\n };\n }\n let trackingFired = createTrackingState();\n const resolvedAds = /* @__PURE__ */ new Set();\n let viewObserver;\n let visibleRatio = 0;\n let continuousVisibleS = 0;\n let lastViewSampleTime;\n let lastPlayerExpanded = false;\n let documentHandlers = [];\n function emit(event, payload) {\n const set = listeners.get(event);\n if (!set) return;\n for (const fn of Array.from(set)) {\n try {\n fn(payload);\n } catch (error) {\n console.warn(\n `[HlsAdPlayer] Error in event listener for ${event}:`,\n error\n );\n }\n }\n }\n function buildTrackingMacroContext(options2 = {}) {\n const { errorCode, reason } = options2;\n const ad = options2.ad ?? currentAd;\n const context = {\n adPlayheadSeconds: adVideoElement?.currentTime,\n contentPlayheadSeconds: contentVideo.currentTime,\n assetUri: currentAdMediaFile?.url,\n mediaMime: currentAdMediaFile?.type,\n playerWidth: adVideoElement?.clientWidth || adContainerEl?.clientWidth,\n playerHeight: adVideoElement?.clientHeight || adContainerEl?.clientHeight\n };\n if (errorCode != null) {\n context.errorCode = errorCode;\n }\n if (typeof navigator !== \"undefined\" && navigator.userAgent) {\n context.clientUa = navigator.userAgent;\n }\n if (typeof location !== \"undefined\" && location.href) {\n context.pageUrl = location.href;\n }\n if (podAds.length > 0) {\n context.podSequence = podIndex + 1;\n }\n if (ad?.adServingId) {\n context.adServingId = ad.adServingId;\n }\n if (reason != null) {\n context.reason = reason;\n }\n return context;\n }\n function fireTrackingPixels(urls, options2) {\n if (!urls || urls.length === 0) return;\n const macroContext = buildTrackingMacroContext(options2);\n urls.forEach((url) => {\n try {\n const trackingUrl = substituteVastTrackingMacros(url, macroContext);\n const img = new Image(1, 1);\n inFlightBeacons.add(img);\n let timeoutId;\n const release = () => {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n img.onload = null;\n img.onerror = null;\n inFlightBeacons.delete(img);\n };\n img.onload = release;\n img.onerror = release;\n timeoutId = setTimeout(release, BEACON_TIMEOUT_MS);\n img.src = trackingUrl;\n console.log(`[HlsAdPlayer] Fired tracking pixel: ${trackingUrl}`);\n } catch (error) {\n console.warn(`[HlsAdPlayer] Error firing tracking pixel:`, error);\n }\n });\n }\n function getMainStreamQuality() {\n if (!mainHlsInstance || !mainHlsInstance.levels) {\n return null;\n }\n const currentLevel = mainHlsInstance.currentLevel;\n if (currentLevel === -1 || !mainHlsInstance.levels[currentLevel]) {\n const autoLevel = mainHlsInstance.loadLevel;\n if (autoLevel !== -1 && mainHlsInstance.levels[autoLevel]) {\n const level2 = mainHlsInstance.levels[autoLevel];\n return {\n width: level2.width || 1920,\n height: level2.height || 1080,\n bitrate: level2.bitrate || 5e6\n };\n }\n return null;\n }\n const level = mainHlsInstance.levels[currentLevel];\n return {\n width: level.width || 1920,\n height: level.height || 1080,\n bitrate: level.bitrate || 5e6\n };\n }\n function selectBestMediaFile(mediaFiles) {\n if (mediaFiles.length === 0) {\n throw new Error(\"No media files available\");\n }\n const firstFile = mediaFiles[0];\n if (!firstFile) {\n throw new Error(\"No media files available\");\n }\n if (mediaFiles.length === 1) {\n return firstFile;\n }\n const mainQuality = getMainStreamQuality();\n if (!mainQuality) {\n console.log(\n \"[HlsAdPlayer] No main stream quality info, using first media file\"\n );\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Main stream quality:\", mainQuality);\n const scoredFiles = mediaFiles.map((file) => {\n const widthDiff = Math.abs(file.width - mainQuality.width);\n const heightDiff = Math.abs(file.height - mainQuality.height);\n const resolutionDiff = widthDiff + heightDiff;\n const fileBitrate = (file.bitrate || 5e3) * 1e3;\n const bitrateDiff = Math.abs(fileBitrate - mainQuality.bitrate);\n const score = resolutionDiff * 2 + bitrateDiff / 1e3;\n return { file, score, resolutionDiff, bitrateDiff };\n });\n scoredFiles.sort((a, b) => a.score - b.score);\n const bestMatch = scoredFiles[0];\n if (!bestMatch) {\n console.log(\"[HlsAdPlayer] No best match found, using first media file\");\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Selected media file:\", {\n url: bestMatch.file.url,\n resolution: `${bestMatch.file.width}x${bestMatch.file.height}`,\n bitrate: bestMatch.file.bitrate,\n score: bestMatch.score,\n resolutionDiff: bestMatch.resolutionDiff,\n bitrateDiff: bestMatch.bitrateDiff\n });\n return bestMatch.file;\n }\n function isHlsMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type === \"application/x-mpegurl\" || type === \"application/vnd.apple.mpegurl\" || type.includes(\"mpegurl\") || url.includes(\".m3u8\");\n }\n function isProgressiveMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type.startsWith(\"video/\") || url.endsWith(\".mp4\") || url.includes(\".mp4?\");\n }\n function isAudioMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = (mediaFile.url.toLowerCase().split(\"?\")[0] || \"\").trim();\n return type.startsWith(\"audio/\") || url.endsWith(\".mp3\") || url.endsWith(\".aac\") || url.endsWith(\".m4a\") || url.endsWith(\".ogg\") || url.endsWith(\".oga\") || url.endsWith(\".opus\") || url.endsWith(\".wav\") || url.endsWith(\".weba\");\n }\n function collectVideoMediaFiles(linear, verbose) {\n const mediaFileElements = linear.querySelectorAll(\n \":scope > MediaFiles > MediaFile\"\n );\n const mediaFiles = [];\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Found ${mediaFileElements.length} MediaFile element(s) in VAST XML`\n );\n }\n mediaFileElements.forEach((mf, index) => {\n const type = mf.getAttribute(\"type\") || \"\";\n const url = mf.textContent?.trim() || \"\";\n const width = mf.getAttribute(\"width\") || \"\";\n const height = mf.getAttribute(\"height\") || \"\";\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index}: type=\"${type}\", url=\"${url}\", width=\"${width}\", height=\"${height}\"`\n );\n }\n if (!url) {\n if (verbose) {\n console.warn(`[HlsAdPlayer] MediaFile ${index} has empty URL`);\n }\n return;\n }\n const apiFramework = (mf.getAttribute(\"apiFramework\") || \"\").toUpperCase();\n if (apiFramework === \"VPAID\") {\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (VPAID creatives are not supported)`\n );\n }\n return;\n }\n const bitrateAttr = mf.getAttribute(\"bitrate\");\n const bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;\n const mediaFile = {\n url,\n type,\n width: parseInt(width || \"1920\", 10),\n height: parseInt(height || \"1080\", 10),\n bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0\n };\n if (isAudioMediaFile(mediaFile)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (audio-only, type=\"${type}\") \\u2014 audio ads are not played to avoid a black screen`\n );\n return;\n }\n const hasExplicitDimensions = mf.getAttribute(\"width\") != null && mf.getAttribute(\"height\") != null;\n if (!isHlsMediaFile(mediaFile) && hasExplicitDimensions && (mediaFile.width <= 1 || mediaFile.height <= 1)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (degenerate dimensions ${mediaFile.width}x${mediaFile.height}, type=\"${type}\") \\u2014 likely an audio-only placeholder rendition`\n );\n return;\n }\n if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {\n mediaFiles.push(mediaFile);\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Added ${isHlsMediaFile(mediaFile) ? \"HLS\" : \"progressive\"} MediaFile: ${url}`\n );\n }\n } else if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (type=\"${type}\" is not supported)`\n );\n }\n });\n return mediaFiles;\n }\n function createEmptyTrackingUrls() {\n const urls = {\n impression: [],\n clickTracking: [],\n error: [],\n viewable: [],\n notViewable: [],\n viewUndetermined: [],\n verificationNotExecuted: [],\n progress: []\n };\n for (const event of LINEAR_TRACKING_EVENTS) {\n urls[event] = [];\n }\n return urls;\n }\n function pushUrls(target, elements) {\n elements.forEach((el) => {\n const url = textOf(el);\n if (url) target.push(url);\n });\n }\n function collectLinearTracking(linear, into) {\n linear.querySelectorAll(\":scope > TrackingEvents > Tracking\").forEach((el) => {\n const event = el.getAttribute(\"event\");\n const url = textOf(el);\n if (!event || !url) return;\n if (event === \"progress\") {\n const offset = parseProgressOffset(el.getAttribute(\"offset\"));\n if (offset) into.progress.push({ url, ...offset });\n return;\n }\n if (LINEAR_TRACKING_EVENTS.indexOf(event) !== -1) {\n into[event].push(url);\n }\n });\n pushUrls(\n into.clickTracking,\n linear.querySelectorAll(\":scope > VideoClicks > ClickTracking\")\n );\n }\n function collectAdLevelTracking(adBody, into) {\n pushUrls(into.impression, adBody.querySelectorAll(\":scope > Impression\"));\n pushUrls(into.error, adBody.querySelectorAll(\":scope > Error\"));\n pushUrls(\n into.viewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > Viewable\")\n );\n pushUrls(\n into.notViewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > NotViewable\")\n );\n pushUrls(\n into.viewUndetermined,\n adBody.querySelectorAll(\":scope > ViewableImpression > ViewUndetermined\")\n );\n adBody.querySelectorAll(\n ':scope > AdVerifications > Verification, :scope > Extensions > Extension[type=\"AdVerifications\"] > AdVerifications > Verification'\n ).forEach((verification) => {\n pushUrls(\n into.verificationNotExecuted,\n verification.querySelectorAll(\n ':scope > TrackingEvents > Tracking[event=\"verificationNotExecuted\"]'\n )\n );\n });\n }\n function mergeTrackingUrls(target, source) {\n const targetLists = target;\n const sourceLists = source;\n for (const key of Object.keys(targetLists)) {\n const incoming = sourceLists[key];\n if (incoming && incoming.length > 0) {\n targetLists[key] = targetLists[key].concat(incoming);\n }\n }\n return target;\n }\n function parseXml(xmlString) {\n const xmlDoc = new DOMParser().parseFromString(xmlString, \"text/xml\");\n const parserError = xmlDoc.querySelector(\"parsererror\");\n if (parserError) {\n console.error(\n \"[HlsAdPlayer] XML parsing error (malformed VAST XML):\",\n parserError.textContent\n );\n return null;\n }\n return xmlDoc;\n }\n function getAdSequence(adElement) {\n const sequence = parseInt(adElement.getAttribute(\"sequence\") || \"\", 10);\n return Number.isFinite(sequence) ? sequence : void 0;\n }\n function emptyVastResult(root) {\n const errorUrls = [];\n pushUrls(errorUrls, root.querySelectorAll(\":scope > Error\"));\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_WRAPPER_NO_ADS };\n }\n function parseVastXml(xmlString) {\n try {\n const xmlDoc = parseXml(xmlString);\n if (!xmlDoc) return { type: \"empty\" };\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n const adElement = adElements.find((el) => getAdSequence(el) === void 0) ?? adElements[0];\n if (!adElement) {\n console.warn(\n `[HlsAdPlayer] No Ad element found in VAST ${root.getAttribute(\"version\") ?? \"\"} response`\n );\n return emptyVastResult(root);\n }\n const parsed = parseAdElement(adElement, true);\n if (parsed.type === \"wrapper\") {\n console.log(\n `[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ${parsed.vastAdTagUri}`\n );\n }\n return parsed;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing VAST XML:\", error);\n return { type: \"empty\" };\n }\n }\n function parseAdElement(adElement, verbose = false) {\n try {\n const wrapper = adElement.querySelector(\":scope > Wrapper\");\n if (wrapper) {\n const vastAdTagUri = textOf(\n wrapper.querySelector(\":scope > VASTAdTagURI\")\n );\n if (!vastAdTagUri) {\n console.warn(\"[HlsAdPlayer] <Wrapper> has no VASTAdTagURI\");\n return { type: \"empty\" };\n }\n const trackingUrls2 = createEmptyTrackingUrls();\n collectAdLevelTracking(wrapper, trackingUrls2);\n wrapper.querySelectorAll(\":scope > Creatives > Creative > Linear\").forEach((linear2) => collectLinearTracking(linear2, trackingUrls2));\n return {\n type: \"wrapper\",\n vastAdTagUri,\n trackingUrls: trackingUrls2,\n rules: {\n followAdditionalWrappers: wrapper.getAttribute(\"followAdditionalWrappers\") !== \"false\"\n }\n };\n }\n const inLine = adElement.querySelector(\":scope > InLine\");\n if (!inLine) {\n console.warn(\"[HlsAdPlayer] <Ad> has neither <InLine> nor <Wrapper>\");\n return { type: \"empty\" };\n }\n const errorUrls = [];\n pushUrls(errorUrls, inLine.querySelectorAll(\":scope > Error\"));\n if (adElement.getAttribute(\"conditionalAd\") === \"true\") {\n console.warn(\"[HlsAdPlayer] Skipping conditional <Ad> (VPAID-only)\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n let linear;\n let mediaFiles = [];\n for (const candidate of Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear\")\n )) {\n const files = collectVideoMediaFiles(candidate, verbose);\n if (files.length > 0) {\n linear = candidate;\n mediaFiles = files;\n break;\n }\n }\n if (!linear) {\n console.warn(\"[HlsAdPlayer] No supported linear media files in <Ad>\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n const trackingUrls = createEmptyTrackingUrls();\n collectAdLevelTracking(inLine, trackingUrls);\n collectLinearTracking(linear, trackingUrls);\n return {\n type: \"inline\",\n ad: {\n id: adElement.getAttribute(\"id\") || \"unknown\",\n title: textOf(inLine.querySelector(\":scope > AdTitle\")) || \"Ad\",\n duration: parseVastTime(textOf(linear.querySelector(\":scope > Duration\"))) ?? 30,\n mediaFiles,\n trackingUrls,\n clickThrough: textOf(\n linear.querySelector(\":scope > VideoClicks > ClickThrough\")\n ),\n adServingId: textOf(inLine.querySelector(\":scope > AdServingId\"))\n }\n };\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing <Ad> element:\", error);\n return { type: \"empty\" };\n }\n }\n async function fetchVastXml(vastTagUrl, credentials = \"include\") {\n const requestVast = (creds) => fetch(vastTagUrl, {\n mode: \"cors\",\n credentials: creds,\n headers: {\n \"Accept\": \"application/xml, text/xml, */*\"\n },\n referrerPolicy: \"no-referrer-when-downgrade\"\n });\n let response;\n try {\n response = await requestVast(credentials);\n } catch (error) {\n if (credentials !== \"omit\") {\n console.warn(\n `[HlsAdPlayer] VAST fetch failed with credentials=\"${credentials}\", retrying without credentials:`,\n error\n );\n response = await requestVast(\"omit\");\n } else {\n throw error;\n }\n }\n if (!response.ok) {\n throw new Error(`Failed to fetch VAST: ${response.statusText}`);\n }\n return response.text();\n }\n async function fetchAndParseVastAd(vastTagUrl, depth = 0, accumulatedTracking = createEmptyTrackingUrls(), rules = { followAdditionalWrappers: true }) {\n let vastXml;\n try {\n vastXml = await fetchVastXml(\n vastTagUrl,\n depth === 0 ? \"include\" : \"omit\"\n );\n } catch (error) {\n if (depth === 0) throw error;\n console.warn(\"[HlsAdPlayer] Wrapped VAST request failed:\", error);\n fireTrackingPixels(accumulatedTracking.error, {\n errorCode: VAST_ERROR_WRAPPER_TIMEOUT\n });\n return null;\n }\n console.log(\"[HlsAdPlayer] VAST XML received\");\n console.log(\n \"[HlsAdPlayer] VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n const parsed = parseVastXml(vastXml);\n if (parsed.type === \"empty\") {\n fireTrackingPixels(\n (parsed.errorUrls ?? []).concat(accumulatedTracking.error),\n { errorCode: parsed.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS }\n );\n return null;\n }\n if (parsed.type === \"wrapper\") {\n if (depth >= MAX_VAST_WRAPPER_DEPTH || !rules.followAdditionalWrappers) {\n console.warn(\n rules.followAdditionalWrappers ? `[HlsAdPlayer] VAST wrapper depth limit (${MAX_VAST_WRAPPER_DEPTH}) reached, aborting redirect chain` : '[HlsAdPlayer] Parent wrapper set followAdditionalWrappers=\"false\"; rejecting nested wrapper'\n );\n fireTrackingPixels(\n accumulatedTracking.error.concat(parsed.trackingUrls.error),\n { errorCode: VAST_ERROR_WRAPPER_LIMIT }\n );\n return null;\n }\n mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n depth + 1,\n accumulatedTracking,\n parsed.rules\n );\n }\n mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);\n return parsed.ad;\n }\n async function fetchAndParsePod(vastTagUrl) {\n const vastXml = await fetchVastXml(vastTagUrl);\n console.log(\n `[HlsAdPlayer] Pod VAST XML received (length=${vastXml.length})`\n );\n const trimmedXml = vastXml.trim();\n if (trimmedXml.length === 0) {\n console.warn(\n \"[HlsAdPlayer] Pod VAST response body is empty (no fill)\"\n );\n return [];\n }\n const xmlDoc = parseXml(vastXml);\n if (!xmlDoc) {\n console.error(\n \"[HlsAdPlayer] Pod VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n return [];\n }\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n if (adElements.length === 0) {\n console.warn(\n `[HlsAdPlayer] No <Ad> elements in VAST ${root.getAttribute(\"version\") ?? \"\"} pod response (no fill)`\n );\n const empty = emptyVastResult(root);\n if (empty.type === \"empty\" && empty.errorUrls?.length) {\n fireTrackingPixels(empty.errorUrls, {\n errorCode: empty.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS\n });\n }\n return [];\n }\n const resolveAd = async (adElement) => {\n const parsed = parseAdElement(adElement);\n if (parsed.type === \"inline\") return parsed.ad;\n if (parsed.type === \"wrapper\") {\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n 1,\n parsed.trackingUrls,\n parsed.rules\n );\n }\n if (parsed.errorUrls?.length) {\n fireTrackingPixels(parsed.errorUrls, {\n errorCode: parsed.errorCode ?? VAST_ERROR_NO_SUPPORTED_MEDIA\n });\n }\n return null;\n };\n const podElements = adElements.filter((el) => getAdSequence(el) !== void 0).sort((a, b) => getAdSequence(a) - getAdSequence(b));\n const buffet = adElements.filter((el) => getAdSequence(el) === void 0);\n const ads = [];\n if (podElements.length === 0) {\n for (const adElement of buffet) {\n const ad = await resolveAd(adElement);\n if (ad) ads.push(ad);\n }\n } else {\n for (const adElement of podElements) {\n let ad = await resolveAd(adElement);\n while (!ad && buffet.length > 0) {\n ad = await resolveAd(buffet.shift());\n }\n if (ad) ads.push(ad);\n }\n }\n console.log(\n `[HlsAdPlayer] Parsed ${ads.length} ad(s) from VAST ${root.getAttribute(\"version\") ?? \"\"} pod response`\n );\n return ads;\n }\n function createAdVideoElement() {\n const video = document.createElement(\"video\");\n video.style.position = \"absolute\";\n video.style.left = \"0\";\n video.style.top = \"0\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.objectFit = \"contain\";\n video.style.backgroundColor = \"#000\";\n video.playsInline = true;\n video.muted = false;\n video.volume = 1;\n console.log(\n `[HlsAdPlayer] Created ad video element with volume ${video.volume}`\n );\n return video;\n }\n function setupAdEventListeners() {\n if (!adVideoElement || !currentAd) return;\n if (adEventHandlers.length > 0) return;\n const onTimeUpdate = () => {\n if (!currentAd || !adVideoElement) return;\n noteAdProgress();\n sampleViewability();\n const currentTime = adVideoElement.currentTime;\n if (trackingFired.start) {\n for (const event of currentAd.trackingUrls.progress) {\n if (trackingFired.progressFired.has(event)) continue;\n const threshold = event.offsetSeconds ?? (event.offsetPercent ?? 0) / 100 * currentAd.duration;\n if (currentTime >= threshold) {\n trackingFired.progressFired.add(event);\n fireTrackingPixels([event.url]);\n }\n }\n }\n if (!(currentAd.duration > 0)) return;\n const progress = currentTime / currentAd.duration;\n if (progress >= 0.25 && !trackingFired.firstQuartile) {\n trackingFired.firstQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.firstQuartile);\n }\n if (progress >= 0.5 && !trackingFired.midpoint) {\n trackingFired.midpoint = true;\n fireTrackingPixels(currentAd.trackingUrls.midpoint);\n }\n if (progress >= 0.75 && !trackingFired.thirdQuartile) {\n trackingFired.thirdQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);\n }\n };\n const onLoadedMetadata = () => {\n if (!adPlaying || !adVideoElement) return;\n const { videoWidth, videoHeight } = adVideoElement;\n if (videoWidth <= 1 || videoHeight <= 1) {\n console.warn(\n `[HlsAdPlayer] Ad creative has no usable video dimensions (${videoWidth}x${videoHeight}) - skipping this creative`\n );\n handleVideoDecodeFailure();\n }\n };\n const onCanPlay = () => {\n if (!currentAd || trackingFired.loaded) return;\n trackingFired.loaded = true;\n fireTrackingPixels(currentAd.trackingUrls.loaded);\n };\n const onPlaying = () => {\n startStallWatchdog();\n if (!currentAd || !adVideoElement) return;\n if (!trackingFired.impression) {\n trackingFired.impression = true;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.impression);\n fireTrackingPixels(currentAd.trackingUrls.creativeView);\n fireTrackingPixels(currentAd.trackingUrls.verificationNotExecuted, {\n reason: VERIFICATION_NOT_SUPPORTED_REASON\n });\n emit(\"ad_impression\", {\n adId: currentAd.id,\n index: podIndex,\n total: podAds.length || 1\n });\n }\n if (trackingFired.start) return;\n trackingFired.start = true;\n trackingFired.lastMuted = adVideoElement.muted || adVideoElement.volume === 0;\n fireTrackingPixels(currentAd.trackingUrls.start);\n console.log(\"[HlsAdPlayer] Ad started playing\");\n };\n const onEnded = () => {\n if (!currentAd || trackingFired.complete) return;\n sampleViewability();\n settleViewability();\n trackingFired.complete = true;\n fireTrackingPixels(currentAd.trackingUrls.complete);\n console.log(\"[HlsAdPlayer] Ad completed\");\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdComplete();\n };\n const onError = (e) => {\n if (!adPlaying) return;\n console.error(\"[HlsAdPlayer] Ad video error:\", e);\n reportCurrentAdError(toVastMediaErrorCode(adVideoElement?.error));\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n };\n const onVolumeChange = () => {\n if (!currentAd || !adVideoElement) return;\n const muted = adVideoElement.muted || adVideoElement.volume === 0;\n if (!trackingFired.start) {\n trackingFired.lastMuted = muted;\n return;\n }\n if (muted === trackingFired.lastMuted) return;\n trackingFired.lastMuted = muted;\n fireTrackingPixels(\n muted ? currentAd.trackingUrls.mute : currentAd.trackingUrls.unmute\n );\n };\n const isTrackablePlayback = () => adPlaying && !!currentAd && !!adVideoElement && trackingFired.start && !trackingFired.complete && !adVideoElement.ended;\n const onPause = () => {\n continuousVisibleS = 0;\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.pause);\n }\n };\n const onPlay = () => {\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.resume);\n }\n };\n adEventHandlers = [\n { type: \"timeupdate\", handler: onTimeUpdate },\n { type: \"loadedmetadata\", handler: onLoadedMetadata },\n { type: \"canplay\", handler: onCanPlay },\n { type: \"playing\", handler: onPlaying },\n { type: \"ended\", handler: onEnded },\n { type: \"error\", handler: onError },\n { type: \"volumechange\", handler: onVolumeChange },\n { type: \"pause\", handler: onPause },\n { type: \"play\", handler: onPlay }\n ];\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.addEventListener(type, handler);\n }\n }\n function teardownAdEventListeners() {\n if (adVideoElement) {\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.removeEventListener(type, handler);\n }\n }\n adEventHandlers = [];\n }\n function handleAdClick() {\n if (!adPlaying || !currentAd) return;\n fireTrackingPixels(currentAd.trackingUrls.clickTracking);\n emit(\"ad_click\", { adId: currentAd.id, clickThrough: currentAd.clickThrough });\n if (currentAd.clickThrough) {\n try {\n window.open(currentAd.clickThrough, \"_blank\", \"noopener\");\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Failed to open ClickThrough URL:\", error);\n }\n }\n }\n function reportCurrentAdError(errorCode) {\n if (!currentAd) return;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.error, { errorCode });\n }\n function fireNotUsedForUnplayedAds() {\n for (const ad of podAds) {\n if (resolvedAds.has(ad)) continue;\n resolvedAds.add(ad);\n fireTrackingPixels(ad.trackingUrls.notUsed, { ad });\n }\n }\n function sampleViewability() {\n if (!currentAd || !adVideoElement || !viewObserver || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n const now = adVideoElement.currentTime;\n const inView = visibleRatio >= VIEWABLE_MIN_VISIBLE_RATIO && document.visibilityState === \"visible\" && !adVideoElement.paused;\n if (!inView) {\n continuousVisibleS = 0;\n } else if (lastViewSampleTime !== void 0 && now >= lastViewSampleTime) {\n continuousVisibleS += now - lastViewSampleTime;\n }\n lastViewSampleTime = now;\n if (continuousVisibleS >= VIEWABLE_MIN_CONTINUOUS_S) {\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(currentAd.trackingUrls.viewable);\n }\n }\n function settleViewability() {\n if (!currentAd || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(\n viewObserver ? currentAd.trackingUrls.notViewable : currentAd.trackingUrls.viewUndetermined\n );\n }\n function handleFullscreenChange() {\n if (!adPlaying || !currentAd || !adContainerEl || !trackingFired.start) return;\n const fullscreenEl = document.fullscreenElement ?? document.webkitFullscreenElement;\n const expanded = !!fullscreenEl && fullscreenEl.contains(adContainerEl);\n if (expanded === lastPlayerExpanded) return;\n lastPlayerExpanded = expanded;\n const urls = currentAd.trackingUrls;\n fireTrackingPixels(\n expanded ? urls.fullscreen.concat(urls.playerExpand) : urls.exitFullscreen.concat(urls.playerCollapse)\n );\n }\n function attachContainerHandlers() {\n if (!adContainerEl || containerHandlers.length > 0) return;\n const onClick = () => handleAdClick();\n const onInteraction = (event) => {\n if (adPlaying) emit(\"ad_interaction\", event);\n };\n containerHandlers = [\n { type: \"click\", handler: onClick },\n { type: \"mousedown\", handler: onInteraction },\n { type: \"touchstart\", handler: onInteraction }\n ];\n for (const { type, handler } of containerHandlers) {\n adContainerEl.addEventListener(type, handler);\n }\n const onFullscreenChange = () => handleFullscreenChange();\n documentHandlers = [\n { type: \"fullscreenchange\", handler: onFullscreenChange },\n { type: \"webkitfullscreenchange\", handler: onFullscreenChange }\n ];\n for (const { type, handler } of documentHandlers) {\n document.addEventListener(type, handler);\n }\n if (typeof IntersectionObserver !== \"undefined\") {\n viewObserver = new IntersectionObserver(\n (entries) => {\n const entry = entries[entries.length - 1];\n if (entry) {\n visibleRatio = entry.isIntersecting ? entry.intersectionRatio : 0;\n }\n },\n { threshold: [0, 0.25, 0.5, 0.75, 1] }\n );\n viewObserver.observe(adContainerEl);\n }\n }\n function detachContainerHandlers() {\n if (adContainerEl) {\n for (const { type, handler } of containerHandlers) {\n adContainerEl.removeEventListener(type, handler);\n }\n }\n containerHandlers = [];\n for (const { type, handler } of documentHandlers) {\n document.removeEventListener(type, handler);\n }\n documentHandlers = [];\n viewObserver?.disconnect();\n viewObserver = void 0;\n }\n function setAdPlayingFlag(isPlaying) {\n if (isPlaying) {\n contentVideo.dataset.stormcloudAdPlaying = \"true\";\n } else {\n delete contentVideo.dataset.stormcloudAdPlaying;\n }\n }\n function resetAdTracking() {\n trackingFired = createTrackingState();\n continuousVisibleS = 0;\n lastViewSampleTime = void 0;\n }\n function isRvfcSupported(video) {\n return typeof video.requestVideoFrameCallback === \"function\";\n }\n function settlePendingPlay() {\n pendingPlayPromise = void 0;\n }\n function startAdPlayback(context) {\n if (!adVideoElement) return;\n const playPromise = adVideoElement.play();\n pendingPlayPromise = playPromise;\n playPromise.catch((error) => {\n if (pendingPlayPromise !== playPromise) {\n return;\n }\n console.error(`[HlsAdPlayer] Error starting ${context}:`, error);\n handleAdError();\n }).finally(() => {\n if (pendingPlayPromise === playPromise) {\n pendingPlayPromise = void 0;\n }\n });\n }\n function prepareVideoElementForNewSource() {\n settlePendingPlay();\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n if (!adVideoElement) return;\n try {\n adVideoElement.pause();\n adVideoElement.removeAttribute(\"src\");\n adVideoElement.load();\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error preparing ad video for new source:\",\n error\n );\n }\n }\n function recreateAdVideoElement() {\n console.log(\n \"[HlsAdPlayer] Recreating ad video element (single-decoder platform)\"\n );\n teardownAdEventListeners();\n prepareVideoElementForNewSource();\n if (adVideoElement) {\n try {\n adVideoElement.remove();\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error removing ad video element:\", error);\n }\n }\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n }\n function loadCurrentAdMedia() {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n const mediaFile = selectBestMediaFile(currentAd.mediaFiles);\n if (!mediaFile) {\n throw new Error(\"No media file available for ad\");\n }\n currentAdMediaFile = mediaFile;\n const isHlsAd = isHlsMediaFile(mediaFile);\n console.log(\n `[HlsAdPlayer] Loading ${isHlsAd ? \"HLS\" : \"progressive\"} ad (pod ${podIndex + 1}/${podAds.length || 1}) from: ${mediaFile.url}`\n );\n if (isHlsAd && import_hls.default.isSupported()) {\n if (adHls) {\n adHls.destroy();\n }\n adHls = new import_hls.default({\n enableWorker: true,\n lowLatencyMode: false\n });\n adHls.loadSource(mediaFile.url);\n adHls.attachMedia(adVideoElement);\n adHls.on(import_hls.default.Events.MANIFEST_PARSED, () => {\n console.log(\"[HlsAdPlayer] HLS manifest parsed, starting playback\");\n startAdPlayback(\"HLS ad playback\");\n });\n adHls.on(import_hls.default.Events.ERROR, (_event, data) => {\n console.error(\"[HlsAdPlayer] HLS error:\", data);\n if (data.fatal) {\n handleAdError();\n }\n });\n } else if (isHlsAd && adVideoElement.canPlayType(\"application/vnd.apple.mpegurl\")) {\n adVideoElement.src = mediaFile.url;\n startAdPlayback(\"native HLS ad playback\");\n } else if (!isHlsAd && isProgressiveMediaFile(mediaFile)) {\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n adVideoElement.src = mediaFile.url;\n adVideoElement.load();\n startAdPlayback(\"progressive ad playback\");\n } else {\n throw new Error(`Unsupported ad media file type: ${mediaFile.type}`);\n }\n }\n function advanceToNextPodAd() {\n if (podIndex >= podAds.length - 1) {\n return false;\n }\n settleViewability();\n podIndex++;\n currentAd = podAds[podIndex];\n currentAdMediaFile = void 0;\n resetAdTracking();\n if (currentAd) {\n console.log(\n `[HlsAdPlayer] Advancing to next pod ad (${podIndex + 1}/${podAds.length}): ${currentAd.title}, duration: ${currentAd.duration}s`\n );\n }\n clearStallWatchdog();\n if (requiresMediaPipelineResetAfterAds()) {\n recreateAdVideoElement();\n setupAdEventListeners();\n } else {\n prepareVideoElementForNewSource();\n }\n try {\n loadCurrentAdMedia();\n emit(\"pod_ad_started\", { index: podIndex, total: podAds.length });\n return true;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Failed to load next pod ad:\", error);\n return false;\n }\n }\n function clearStallWatchdog() {\n if (stallWatchdogId != null) {\n clearInterval(stallWatchdogId);\n stallWatchdogId = void 0;\n }\n cancelVideoFrameProbe();\n }\n function noteAdProgress() {\n lastAdProgressTime = Date.now();\n if (adVideoElement) {\n lastAdProgressPosition = adVideoElement.currentTime;\n }\n }\n function handleAdStall() {\n console.warn(\n \"[HlsAdPlayer] Ad playback stalled (no progress) - recovering to avoid a blank frame\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function getDecodedVideoFrameCount(video) {\n try {\n if (typeof video.getVideoPlaybackQuality === \"function\") {\n const quality = video.getVideoPlaybackQuality();\n if (quality && typeof quality.totalVideoFrames === \"number\") {\n return quality.totalVideoFrames;\n }\n }\n const legacyCount = video.webkitDecodedFrameCount;\n if (typeof legacyCount === \"number\") {\n return legacyCount;\n }\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Unable to read decoded video frame count:\",\n error\n );\n }\n return void 0;\n }\n function isFrameCounterReliable() {\n return contentVideo[FRAME_COUNTER_RELIABLE_PROP] === true;\n }\n function markFrameCounterReliable() {\n contentVideo[FRAME_COUNTER_RELIABLE_PROP] = true;\n }\n function isRvfcReliable() {\n return contentVideo[RVFC_RELIABLE_PROP] === true;\n }\n function markRvfcReliable() {\n contentVideo[RVFC_RELIABLE_PROP] = true;\n }\n function cancelVideoFrameProbe() {\n if (videoFrameCallbackHandle != null && adVideoElement && typeof adVideoElement.cancelVideoFrameCallback === \"function\") {\n try {\n adVideoElement.cancelVideoFrameCallback(\n videoFrameCallbackHandle\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error cancelling video frame callback:\",\n error\n );\n }\n }\n videoFrameCallbackHandle = void 0;\n }\n function startVideoFrameProbe() {\n cancelVideoFrameProbe();\n if (!adVideoElement) return;\n const rvfc = adVideoElement.requestVideoFrameCallback;\n if (typeof rvfc !== \"function\") return;\n const onPresentedFrame = () => {\n videoFrameCallbackHandle = void 0;\n if (!adPlaying) return;\n sawDecodedVideoFrame = true;\n markRvfcReliable();\n };\n try {\n videoFrameCallbackHandle = rvfc.call(\n adVideoElement,\n onPresentedFrame\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error requesting video frame callback:\",\n error\n );\n videoFrameCallbackHandle = void 0;\n }\n }\n function handleVideoDecodeFailure() {\n console.warn(\n \"[HlsAdPlayer] Ad audio is advancing but no video frames decoded (black screen) - skipping this creative\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function startStallWatchdog() {\n clearStallWatchdog();\n noteAdProgress();\n sawDecodedVideoFrame = false;\n startVideoFrameProbe();\n const blackFrameDetectionEnabled = !requiresMediaPipelineResetAfterAds();\n stallWatchdogId = window.setInterval(() => {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n if (blackFrameDetectionEnabled && !sawDecodedVideoFrame && !adVideoElement.paused) {\n const decodedFrames = getDecodedVideoFrameCount(adVideoElement);\n if (decodedFrames !== void 0 && decodedFrames > 0) {\n sawDecodedVideoFrame = true;\n markFrameCounterReliable();\n } else if (adVideoElement.currentTime >= BLACKFRAME_MIN_PLAYBACK_S) {\n const timeAdvancing = adVideoElement.currentTime > lastAdProgressPosition + 0.05;\n if (isRvfcSupported(adVideoElement) && timeAdvancing && isRvfcReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n if (decodedFrames === 0 && timeAdvancing && isFrameCounterReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n }\n }\n if (adVideoElement.currentTime > lastAdProgressPosition + 0.05) {\n noteAdProgress();\n return;\n }\n if (adVideoElement.paused) {\n noteAdProgress();\n return;\n }\n if (Date.now() - lastAdProgressTime >= STALL_TIMEOUT_MS) {\n handleAdStall();\n }\n }, STALL_CHECK_INTERVAL_MS);\n }\n function releaseAdDecoder() {\n prepareVideoElementForNewSource();\n if (adContainerEl) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n }\n function handleAdComplete() {\n console.log(\"[HlsAdPlayer] Handling ad completion\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode:\", error);\n });\n } else {\n console.log(\"[HlsAdPlayer] Content video already playing in live mode\");\n }\n }\n emit(\"content_resume\");\n }\n function handleAdError() {\n console.log(\"[HlsAdPlayer] Handling ad error\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n emit(\"ad_error\");\n }\n return {\n initialize() {\n console.log(\"[HlsAdPlayer] Initializing\");\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"30\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n contentVideo[AD_CONTAINER_PROP] = adContainerEl;\n attachContainerHandlers();\n },\n async requestAds(vastTagUrl) {\n console.log(\"[HlsAdPlayer] Requesting ads:\", vastTagUrl);\n if (adPlaying) {\n console.warn(\n \"[HlsAdPlayer] Cannot request new ads while an ad is playing\"\n );\n return Promise.reject(new Error(\"Ad already playing\"));\n }\n try {\n let ads = [];\n if (preloadedAds.has(vastTagUrl)) {\n const preloaded = preloadedAds.get(vastTagUrl);\n preloadedAds.delete(vastTagUrl);\n if (preloaded) {\n ads = [preloaded];\n }\n console.log(\n \"[HlsAdPlayer] Using preloaded VAST response:\",\n vastTagUrl\n );\n } else {\n ads = await fetchAndParsePod(vastTagUrl);\n }\n if (!ads.length) {\n console.warn(\"[HlsAdPlayer] No ads available from VAST response\");\n emit(\"ad_error\");\n return Promise.reject(new Error(\"No ads available from VAST response\"));\n }\n podAds = ads;\n podIndex = 0;\n currentAd = ads[0];\n currentAdMediaFile = void 0;\n console.log(\n `[HlsAdPlayer] Pod parsed: ${ads.length} ad(s), first=\"${currentAd?.title}\", duration=${currentAd?.duration}s`\n );\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error requesting ads:\", error);\n emit(\"ad_error\");\n return Promise.reject(error);\n }\n },\n async play() {\n if (!currentAd) {\n console.warn(\n \"[HlsAdPlayer] Cannot play: No ad loaded (no ads available)\"\n );\n return Promise.reject(new Error(\"No ad loaded\"));\n }\n console.log(\"[HlsAdPlayer] Starting ad playback\");\n try {\n if (!adVideoElement) {\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n }\n setupAdEventListeners();\n resetAdTracking();\n const contentVolume = contentVideo.volume;\n originalVolume = Math.max(\n 0,\n Math.min(1, contentVolume || originalVolume)\n );\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.pause();\n console.log(\"[HlsAdPlayer] Content paused (VOD mode)\");\n } else {\n console.log(\"[HlsAdPlayer] Content continues (Live mode)\");\n }\n console.log(\"[HlsAdPlayer] FORCE MUTING main video\");\n contentVideo.muted = true;\n adPlaying = true;\n setAdPlayingFlag(true);\n if (adVideoElement) {\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n console.log(\n `[HlsAdPlayer] Set ad video volume to ${adVideoElement.volume}, muted: ${adVideoElement.muted}, originalMutedState: ${originalMutedState}, contentVolume: ${contentVolume}`\n );\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n emit(\"content_pause\");\n loadCurrentAdMedia();\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error playing ad:\", error);\n handleAdError();\n return Promise.reject(error);\n }\n },\n pause() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && !adVideoElement.paused) {\n adVideoElement.pause();\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error pausing ad:\", error);\n }\n },\n resume() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && adVideoElement.paused) {\n adVideoElement.play().catch(() => {\n });\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error resuming ad:\", error);\n }\n },\n async stop() {\n console.log(\"[HlsAdPlayer] Stopping ad\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n const previousMutedState = contentVideo.muted;\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n console.log(\n `[HlsAdPlayer] Restored mute state on stop: ${previousMutedState} -> ${originalMutedState}, volume: ${contentVideo.volume}`\n );\n releaseAdDecoder();\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback on stop\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode on stop:\", error);\n });\n }\n }\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n },\n destroy() {\n console.log(\"[HlsAdPlayer] Destroying\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n destroyed = true;\n clearStallWatchdog();\n for (const timeoutId of pendingTimeouts) {\n clearTimeout(timeoutId);\n }\n pendingTimeouts = [];\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n teardownAdEventListeners();\n detachContainerHandlers();\n releaseAdDecoder();\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n listeners.clear();\n preloadedAds.clear();\n preloadingAds.clear();\n },\n isAdPlaying() {\n return adPlaying;\n },\n resize(width, height) {\n console.log(`[HlsAdPlayer] Resizing to ${width}x${height}`);\n if (adContainerEl) {\n adContainerEl.style.width = `${width}px`;\n adContainerEl.style.height = `${height}px`;\n }\n if (adVideoElement) {\n adVideoElement.style.width = `${width}px`;\n adVideoElement.style.height = `${height}px`;\n }\n },\n on(event, listener) {\n if (!listeners.has(event)) listeners.set(event, /* @__PURE__ */ new Set());\n listeners.get(event).add(listener);\n },\n off(event, listener) {\n listeners.get(event)?.delete(listener);\n },\n updateOriginalMutedState(muted, volume) {\n const nextVolume = typeof volume === \"number\" && !Number.isNaN(volume) ? Math.max(0, Math.min(1, volume)) : originalVolume;\n console.log(\n `[HlsAdPlayer] updateOriginalMutedState called: { muted: ${originalMutedState} -> ${muted}, volume: ${originalVolume} -> ${nextVolume} }`\n );\n originalMutedState = muted;\n originalVolume = nextVolume;\n },\n getOriginalMutedState() {\n return originalMutedState;\n },\n getOriginalVolume() {\n return originalVolume;\n },\n setAdVolume(volume) {\n if (adVideoElement && adPlaying) {\n const clamped = Math.max(0, Math.min(1, volume));\n adVideoElement.volume = clamped;\n adVideoElement.muted = clamped === 0;\n }\n },\n getAdVolume() {\n if (adVideoElement && adPlaying) {\n return adVideoElement.volume;\n }\n return 1;\n },\n showPlaceholder() {\n contentVideo.style.opacity = \"0\";\n contentVideo.style.visibility = \"hidden\";\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"10\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n },\n hidePlaceholder() {\n if (adContainerEl && !adPlaying) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n if (!adPlaying) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n },\n getLoadedAdDuration() {\n return currentAd?.duration;\n },\n getLoadedAdId() {\n return currentAd?.id;\n },\n getPodAdCount() {\n return podAds.length;\n },\n getPodTotalDurationMs() {\n return podAds.reduce(\n (total, ad) => total + (ad.duration > 0 ? ad.duration * 1e3 : 0),\n 0\n );\n }\n };\n}\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _nonceLoaderAllowStorage;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader(allowStorage) {\n if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {\n return _nonceLoader;\n }\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = allowStorage;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n _nonceLoaderAllowStorage = allowStorage;\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader(options.allowStorage ?? true);\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/vastEnvironmentSignals.ts\nvar CTV_SESSION_STORAGE_KEY = \"stormcloud.ctv.sid\";\nvar WEB_SESSION_STORAGE_KEY = \"stormcloud.web.sid\";\nvar inMemoryWebSessionId;\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar ANDROID_ID_TYPES = /* @__PURE__ */ new Set([\"aaid\", \"adid\"]);\nfunction resolveVastEnvironmentSignals(isCtv) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const realDeviceId = bridgeSignals.deviceId || (isCtv ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n let deviceId = realDeviceId;\n let deviceIdType = bridgeSignals.deviceIdType || readStoredString(\"deviceIdType\") || readStoredString(\"idtype\") || platformDevice.deviceIdType || inferDeviceIdType();\n const platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;\n let limitAdTracking = deviceId != null ? platformLat ?? readStoredLimitAdTracking() ?? false : void 0;\n if (!deviceId && isCtv) {\n const dpid = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (dpid) {\n deviceId = dpid;\n deviceIdType = \"dpid\";\n limitAdTracking = platformLat ?? readStoredLimitAdTracking() ?? false;\n }\n }\n const deviceTypeHint = resolveDeviceTypeHint(isCtv);\n if (isCtv) {\n return {\n isCtv: true,\n sessionId: getOrCreateCtvSessionId(),\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n }\n const webSessionId = getOrCreateWebSessionId();\n return {\n isCtv: false,\n ...webSessionId ? { sessionId: webSessionId } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n}\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar SET_TOP_BOX_UA = /LGSTB|\\bSTB\\b|STB\\d|Set-?Top|SetTopBox|TV ?Box|Kaon|Humax|Arris|Technicolor|Sagemcom|Infomir|MAG\\d{3}|KreaTV|Amino|Formuler|Dune ?HD|TiVo|MiBOX|Mi Box|SHIELD Android TV|\\bAFT[A-Z]|Roku|AppleTV|Apple TV|CrKey/i;\nvar GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;\nvar CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\\bTV\\b/i;\nvar FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;\nfunction resolveDeviceTypeHint(isCtv) {\n const override = readDeviceTypeHintOverride(isCtv);\n if (override != null) return override;\n return inferDeviceTypeHint(isCtv);\n}\nfunction inferDeviceTypeHint(isCtv) {\n const fallback = isCtv ? DEVICE_TYPE_HINT.CONNECTED_TV : DEVICE_TYPE_HINT.DESKTOP;\n if (typeof navigator === \"undefined\") return fallback;\n const ua = navigator.userAgent || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n if (SET_TOP_BOX_UA.test(ua)) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n if (GAME_CONSOLE_UA.test(ua)) return DEVICE_TYPE_HINT.GAME_CONSOLE;\n if (CONNECTED_TV_UA.test(ua) && !/Mobile/i.test(ua)) {\n return DEVICE_TYPE_HINT.CONNECTED_TV;\n }\n if (FEATURE_PHONE_UA.test(ua)) return DEVICE_TYPE_HINT.FEATURE_PHONE;\n if (/iPad/i.test(ua) || /Macintosh/i.test(ua) && maxTouchPoints > 1) {\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/iPhone|iPod/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (/Android/i.test(ua)) {\n if (/Mobile/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (maxTouchPoints === 0) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n return fallback;\n}\nfunction readDeviceTypeHintOverride(isCtv) {\n if (typeof window === \"undefined\") return void 0;\n const keys = [\"dth\", \"deviceTypeHint\"];\n const fromGlobal = normalizeDeviceTypeHint(window.__STORMCLOUD_DTH__);\n if (fromGlobal != null) return fromGlobal;\n for (const source of getNativeBridgeSources()) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeDeviceTypeHint(\n typeof value === \"function\" ? safeCall(value, source) : value\n );\n if (normalized != null) return normalized;\n }\n }\n if (!isCtv) return void 0;\n for (const key of [\"stormcloud.dth\", \"dth\"]) {\n const normalized = normalizeDeviceTypeHint(readStoredString(key));\n if (normalized != null) return normalized;\n }\n return void 0;\n}\nfunction normalizeDeviceTypeHint(value) {\n if (typeof value === \"number\") {\n return Number.isInteger(value) && value >= 1 && value <= 7 ? value : void 0;\n }\n if (typeof value !== \"string\") return void 0;\n const trimmed = value.trim();\n if (/^[1-7]$/.test(trimmed)) return parseInt(trimmed, 10);\n return DEVICE_TYPE_HINT_ALIASES[trimmed.toLowerCase().replace(/[\\s_-]/g, \"\")];\n}\nfunction safeCall(fn, thisArg) {\n try {\n return fn.call(thisArg);\n } catch {\n return void 0;\n }\n}\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction isEquivalentDeviceIdType(tagType, runtimeType) {\n if (!tagType || !runtimeType) return false;\n const tag = tagType.toLowerCase();\n const runtime = runtimeType.toLowerCase();\n if (tag === runtime) return true;\n return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);\n}\nfunction resolveNativeDeviceId(includeStored = true) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction getOrCreateCtvSessionId() {\n const existing = readPersistentId(CTV_SESSION_STORAGE_KEY);\n if (existing) {\n writePersistentId(CTV_SESSION_STORAGE_KEY, existing);\n return existing;\n }\n const sessionId = createUuid();\n writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);\n return sessionId;\n}\nfunction getOrCreateWebSessionId() {\n if (typeof window === \"undefined\") return void 0;\n try {\n const existing = window.sessionStorage?.getItem(WEB_SESSION_STORAGE_KEY);\n if (existing && !isMacroPlaceholder(existing)) return existing;\n } catch {\n }\n const sessionId = inMemoryWebSessionId || createUuid();\n inMemoryWebSessionId = sessionId;\n try {\n window.sessionStorage?.setItem(WEB_SESSION_STORAGE_KEY, sessionId);\n } catch {\n }\n return sessionId;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction readStoredLimitAdTracking() {\n return normalizeBoolean(\n readStoredString(\"limitAdTracking\") || readStoredString(\"limitedAdTracking\") || readStoredString(\"is_lat\")\n );\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendInitialTracking(licenseKey, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n adLoaded: false,\n adDetect: false\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending initial tracking data:\",\n error\n );\n }\n}\nasync function sendAdDetectTracking(licenseKey, adDetectInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adDetect: true,\n captureAt: adDetectInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad detect tracking:\",\n error\n );\n }\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/utils/polyfills.ts\nfunction polyfillURLSearchParams() {\n if (typeof URLSearchParams !== \"undefined\") {\n return;\n }\n class URLSearchParamsPolyfill {\n constructor(init) {\n this.params = /* @__PURE__ */ new Map();\n if (typeof init === \"string\") {\n this.parseQueryString(init);\n } else if (init instanceof URLSearchParamsPolyfill) {\n init.forEach((value, key) => {\n this.append(key, value);\n });\n }\n }\n parseQueryString(query) {\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n if (!cleanQuery) return;\n cleanQuery.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n const decodedKey = this.safeDecodeURIComponent(key);\n const decodedValue = value ? this.safeDecodeURIComponent(value) : \"\";\n this.append(decodedKey, decodedValue);\n }\n });\n }\n safeDecodeURIComponent(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\n } catch (e) {\n return str;\n }\n }\n append(name, value) {\n const values = this.params.get(name) || [];\n values.push(String(value));\n this.params.set(name, values);\n }\n delete(name) {\n this.params.delete(name);\n }\n get(name) {\n const values = this.params.get(name);\n return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;\n }\n getAll(name) {\n return this.params.get(name) || [];\n }\n has(name) {\n return this.params.has(name);\n }\n set(name, value) {\n this.params.set(name, [String(value)]);\n }\n forEach(callback) {\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n callback(value, key, this);\n });\n });\n }\n toString() {\n const parts = [];\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n });\n });\n return parts.join(\"&\");\n }\n }\n window.URLSearchParams = URLSearchParamsPolyfill;\n}\nfunction polyfillTextEncoder() {\n if (typeof TextEncoder !== \"undefined\") {\n return;\n }\n class TextEncoderPolyfill {\n constructor() {\n this.encoding = \"utf-8\";\n }\n encode(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 128) {\n utf8.push(charcode);\n } else if (charcode < 2048) {\n utf8.push(192 | charcode >> 6, 128 | charcode & 63);\n } else if (charcode < 55296 || charcode >= 57344) {\n utf8.push(\n 224 | charcode >> 12,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n } else {\n i++;\n charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);\n utf8.push(\n 240 | charcode >> 18,\n 128 | charcode >> 12 & 63,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n }\n }\n return new Uint8Array(utf8);\n }\n }\n window.TextEncoder = TextEncoderPolyfill;\n}\nfunction polyfillPromiseFinally() {\n if (typeof Promise !== \"undefined\" && !Promise.prototype.finally) {\n Promise.prototype.finally = function(callback) {\n const constructor = this.constructor;\n return this.then(\n (value) => constructor.resolve(callback()).then(() => value),\n (reason) => constructor.resolve(callback()).then(() => {\n throw reason;\n })\n );\n };\n }\n}\nfunction polyfillObjectAssign() {\n if (typeof Object.assign !== \"function\") {\n Object.assign = function(target, ...sources) {\n if (target == null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const to = Object(target);\n for (let i = 0; i < sources.length; i++) {\n const nextSource = sources[i];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\nfunction polyfillArrayFrom() {\n if (!Array.from) {\n Array.from = function(arrayLike, mapFn, thisArg) {\n const items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError(\"Array.from requires an array-like object\");\n }\n const len = items.length >>> 0;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n if (mapFn) {\n result[i] = mapFn.call(thisArg, items[i], i);\n } else {\n result[i] = items[i];\n }\n }\n return result;\n };\n }\n}\nfunction polyfillStringStartsWith() {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function(search, pos) {\n pos = !pos || pos < 0 ? 0 : +pos;\n return this.substring(pos, pos + search.length) === search;\n };\n }\n}\nfunction polyfillStringEndsWith() {\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function(search, length) {\n if (length === void 0 || length > this.length) {\n length = this.length;\n }\n return this.substring(length - search.length, length) === search;\n };\n }\n}\nfunction polyfillStringIncludes() {\n if (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== \"number\") {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n }\n return this.indexOf(search, start) !== -1;\n };\n }\n}\nfunction initializePolyfills() {\n polyfillObjectAssign();\n polyfillArrayFrom();\n polyfillStringStartsWith();\n polyfillStringEndsWith();\n polyfillStringIncludes();\n polyfillURLSearchParams();\n polyfillTextEncoder();\n polyfillPromiseFinally();\n}\n\n// src/utils/vastMacros.ts\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nvar EXAMPLE_COM_URL = /example\\.com/i;\nvar CTV_UNSUPPORTED_PARAMS = [\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\"\n];\nvar INLINE_DEVICE_MACRO_REPLACEMENTS = [\n { pattern: /\\[RDID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IFA\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[ADVERTISING[_-]?ID(?:ENTIFIER)?\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[DEVICE[_-]?ID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IDTYPE\\]/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /\\{rdid\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{device[_-]?id\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{idtype\\}/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_IDENTIFIER_PLAIN%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%ADVERTISING_ID_OPT_OUT%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%ADVERTISING_ID_TYPE%%/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_ID%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%LIMIT_AD_TRACKING%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%SESSION_ID%%/gi, getValue: (ctx) => ctx.sessionId },\n { pattern: /%%CORRELATOR%%/gi, getValue: (ctx) => ctx.correlator }\n];\nfunction isMacroPlaceholder2(value) {\n if (value == null) return true;\n const trimmed = value.trim();\n if (!trimmed) return true;\n if (UNEXPANDED_MACRO_PATTERN.test(trimmed)) return true;\n return /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(trimmed);\n}\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nfunction expandInlineMacroPlaceholders(baseUrl, ctx) {\n let url = baseUrl;\n for (const { pattern, getValue } of INLINE_DEVICE_MACRO_REPLACEMENTS) {\n const value = getValue(ctx);\n if (value != null && value !== \"\") {\n url = url.replace(pattern, encodeURIComponent(value));\n }\n }\n return url;\n}\nfunction applyDeviceIdentityParams(params, ctx) {\n const runtimeId = ctx.deviceId?.trim();\n const runtimeType = ctx.deviceIdType?.trim() || inferDeviceIdType();\n const tagRdid = params.get(\"rdid\");\n const tagType = params.get(\"idtype\");\n const tagLat = params.get(\"is_lat\");\n const latValue = ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0;\n if (runtimeId) {\n params.set(\"rdid\", runtimeId);\n params.set(\"idtype\", runtimeType || tagType || \"aaid\");\n params.set(\"is_lat\", latValue ?? (isMacroPlaceholder2(tagLat) ? \"0\" : tagLat));\n return;\n }\n if (!ctx.isCtv) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n const tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));\n const tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));\n if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n if (tagRdidValid) {\n if (isMacroPlaceholder2(tagType) && runtimeType) {\n params.set(\"idtype\", runtimeType);\n }\n if (isMacroPlaceholder2(tagLat)) {\n params.set(\"is_lat\", latValue ?? \"0\");\n }\n return;\n }\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n}\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nfunction applyVastMacros(baseUrl, ctx) {\n const expandedUrl = expandInlineMacroPlaceholders(baseUrl, ctx);\n let url;\n try {\n url = new URL(normalizeVastTagUrl(expandedUrl));\n } catch {\n return replaceCorrelatorFallback(expandedUrl, ctx.correlator);\n }\n const params = url.searchParams;\n removeBrokenAppNameOrphans(params);\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n }\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n params.delete(\"ppos\");\n params.delete(\"lip\");\n if (ctx.podMinDurationMs != null) {\n params.set(\"pmnd\", String(Math.max(0, Math.round(ctx.podMinDurationMs))));\n }\n if (ctx.podMaxDurationMs != null) {\n params.set(\"pmxd\", String(Math.max(0, Math.round(ctx.podMaxDurationMs))));\n }\n if (ctx.podMaxAds != null) {\n params.set(\"pmad\", String(Math.max(1, Math.round(ctx.podMaxAds))));\n }\n const existingUrl = params.get(\"url\") || \"\";\n if (EXAMPLE_COM_URL.test(existingUrl)) {\n params.delete(\"url\");\n params.delete(\"description_url\");\n }\n if (!ctx.isCtv && ctx.pageUrl) {\n if (isMacroPlaceholder2(params.get(\"url\"))) {\n params.set(\"url\", ctx.pageUrl);\n }\n if (isMacroPlaceholder2(params.get(\"description_url\"))) {\n params.set(\"description_url\", params.get(\"url\") || ctx.pageUrl);\n }\n }\n if (!ctx.isCtv) {\n params.delete(\"an\");\n params.delete(\"msid\");\n params.delete(\"sid\");\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n applyDeviceIdentityParams(params, ctx);\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n if (ctx.programTitle) {\n params.set(\"ct_ti\", ctx.programTitle);\n }\n if (ctx.channelName) {\n params.set(\"ct_ch\", ctx.channelName);\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (isMacroPlaceholder2(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n removeBrokenAppNameOrphans(params);\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n signals.storageAllowed = tcData.gdprApplies ? tcData.purpose?.consents?.[1] === true : true;\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n\n// src/player/AdConfigManager.ts\nvar AdConfigManager = class {\n constructor(config, video) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds = /* @__PURE__ */ new Set();\n this.streamCorrelator = generateCorrelator();\n this.viewCorrelator = generateCorrelator();\n this.consentSignals = {};\n this.podCounter = 0;\n this.podAssignedByPrefetch = false;\n this.lastHeartbeatTime = 0;\n this.defaultPodMaxAds = 6;\n this.defaultPodMaxDurationMs = 12e4;\n this.config = config;\n this.video = video;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n isVmapEnabled() {\n return !!(this.config.isVmap && this.config.vmapUrl?.trim());\n }\n async fetchAdConfiguration() {\n if (this.isVmapEnabled()) {\n await this.fetchAndParseVmap(this.config.vmapUrl);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VMAP mode enabled\");\n }\n return;\n }\n const vastMode = this.config.vastMode || \"default\";\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VAST mode:\", vastMode);\n }\n if (vastMode === \"adstorm\") {\n if (!this.config.licenseKey) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] AdStorm mode requires a license key\"\n );\n }\n return;\n }\n const vastEndpoint = `https://adstorm.co/api-adstorm-dev/adstorm/vast/${this.config.licenseKey}`;\n this.apiVastTagUrl = vastEndpoint;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using AdStorm VAST endpoint (adstorm mode):\",\n vastEndpoint\n );\n }\n return;\n }\n if (this.config.vastTagUrl) {\n this.apiVastTagUrl = normalizeVastTagUrl(this.config.vastTagUrl);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using custom VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n return;\n }\n const apiUrl = \"https://adstorm.co/api-adstorm-dev/adstorm/ads/web\";\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Fetching ad configuration from:\",\n apiUrl\n );\n }\n const headers = {};\n if (this.config.licenseKey) {\n headers[\"Authorization\"] = `Bearer ${this.config.licenseKey}`;\n }\n const response = await fetch(apiUrl, { headers });\n if (!response.ok) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Failed to fetch ad configuration: ${response.status}`\n );\n }\n return;\n }\n const data = await response.json();\n const imaPayload = data.response?.ima?.[\"publisherdesk.ima\"]?.payload;\n if (imaPayload) {\n let decodedPayload = imaPayload;\n try {\n decodedPayload = decodeURIComponent(imaPayload);\n } catch {\n console.warn(\"[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:\", imaPayload);\n }\n console.log(\"[StormcloudVideoPlayer] Raw VAST tag URL (from API):\", decodedPayload);\n this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Normalized VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n } else {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response\"\n );\n }\n }\n const numberAds = data.response?.options?.vast?.cue_tones?.number_ads;\n if (numberAds != null && numberAds > 0) {\n this.apiNumberAds = numberAds;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Number of ads per break from API:\",\n this.apiNumberAds\n );\n }\n }\n }\n async fetchAndParseVmap(vmapUrl) {\n if (!vmapUrl.trim()) {\n return;\n }\n try {\n const response = await fetch(vmapUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch VMAP (${response.status})`);\n }\n const vmapXml = await response.text();\n this.vmapBreaks = this.parseVmapToBreaks(vmapXml);\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Loaded ${this.vmapBreaks.length} VMAP ad break(s) from:`,\n vmapUrl\n );\n }\n } catch (error) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to load VMAP:\", error);\n }\n }\n }\n parseVmapToBreaks(vmapXml) {\n if (typeof DOMParser === \"undefined\") {\n return [];\n }\n const doc = new DOMParser().parseFromString(vmapXml, \"application/xml\");\n if (doc.querySelector(\"parsererror\")) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Invalid VMAP XML received\");\n }\n return [];\n }\n const VMAP_NS = \"http://www.iab.net/videosuite/vmap\";\n let adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, \"AdBreak\"));\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(\n doc.querySelectorAll(\"AdBreak, vmap\\\\:AdBreak\")\n );\n }\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(doc.getElementsByTagName(\"*\")).filter(\n (el) => el.localName === \"AdBreak\"\n );\n }\n const parsed = [];\n adBreakNodes.forEach((node, index) => {\n const timeOffsetRaw = (node.getAttribute(\"timeOffset\") || \"\").trim();\n const startTimeMs = this.parseVmapTimeOffsetToMs(timeOffsetRaw);\n if (startTimeMs == null) {\n return;\n }\n let adTagNode = node.getElementsByTagNameNS(VMAP_NS, \"AdTagURI\")[0];\n if (!adTagNode) {\n adTagNode = node.querySelector(\"AdTagURI, vmap\\\\:AdTagURI\") ?? void 0;\n }\n const adTagUrl = (adTagNode?.textContent || \"\").trim();\n if (!adTagUrl) {\n return;\n }\n const breakId = node.getAttribute(\"breakId\") || `vmap-break-${index}-${timeOffsetRaw || \"unknown\"}`;\n parsed.push({\n id: breakId,\n startTimeMs,\n vastTagUrl: adTagUrl\n });\n });\n parsed.sort((a, b) => {\n const aStart = a.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : a.startTimeMs;\n const bStart = b.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : b.startTimeMs;\n return aStart - bStart;\n });\n return parsed;\n }\n parseVmapTimeOffsetToMs(timeOffset) {\n if (!timeOffset) {\n return void 0;\n }\n const normalized = timeOffset.trim().toLowerCase();\n if (normalized === \"start\") {\n return 0;\n }\n if (normalized === \"end\") {\n return -1;\n }\n const hms = timeOffset.match(\n /^(\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/\n );\n if (hms) {\n const [, hh, mm, ss, ms = \"0\"] = hms;\n const hours = Number(hh);\n const minutes = Number(mm);\n const seconds = Number(ss);\n const millis = Number(ms.padEnd(3, \"0\").slice(0, 3));\n return (hours * 3600 + minutes * 60 + seconds) * 1e3 + millis;\n }\n const percent = timeOffset.match(/^(\\d+(?:\\.\\d+)?)%$/);\n if (percent) {\n const ratio = Number(percent[1]) / 100;\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3 * ratio);\n }\n return void 0;\n }\n return void 0;\n }\n getAdBreakKey(adBreak) {\n if (adBreak.id) {\n return adBreak.id;\n }\n return `${adBreak.startTimeMs}-${adBreak.vastTagUrl || \"\"}`;\n }\n resolveBreakStartMs(adBreak) {\n if (adBreak.startTimeMs >= 0) {\n return adBreak.startTimeMs;\n }\n if (adBreak.startTimeMs === -1) {\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3);\n }\n }\n return void 0;\n }\n findCurrentOrNextBreak(nowMs) {\n const schedule = this.vmapBreaks;\n let candidate;\n const tol = this.config.driftToleranceMs ?? 1e3;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (breakStartMs <= nowMs + tol && (candidate == null || breakStartMs > (this.resolveBreakStartMs(candidate) ?? 0))) {\n candidate = b;\n }\n }\n return candidate;\n }\n findBreakForTime(nowMs) {\n const schedule = this.vmapBreaks;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (b.durationMs) {\n const end = breakStartMs + b.durationMs;\n if (nowMs >= breakStartMs && nowMs < end) {\n return b;\n }\n continue;\n }\n if (nowMs >= breakStartMs) {\n return b;\n }\n }\n return void 0;\n }\n selectVastTagsForBreak(b) {\n if (!b || !b.vastTagUrl) return void 0;\n if (b.vastTagUrl.includes(\",\")) {\n return b.vastTagUrl.split(\",\").map((s) => s.trim()).filter((s) => s.length > 0);\n }\n return [b.vastTagUrl];\n }\n beginNewAdPod() {\n this.podCounter++;\n }\n resolvePodParams(breakDurationMs) {\n const maxDurationMs = breakDurationMs != null && breakDurationMs > 0 ? breakDurationMs : this.config.podMaxDurationMs != null && this.config.podMaxDurationMs > 0 ? this.config.podMaxDurationMs : this.defaultPodMaxDurationMs;\n const maxAds = this.config.podMaxAds && this.config.podMaxAds > 0 ? this.config.podMaxAds : this.apiNumberAds && this.apiNumberAds > 0 ? this.apiNumberAds : this.defaultPodMaxAds;\n const minDurationMs = this.config.podExactDuration && maxDurationMs != null ? maxDurationMs : 0;\n return { maxAds, minDurationMs, maxDurationMs };\n }\n getPalDescriptionUrl() {\n if (!this.apiVastTagUrl) return void 0;\n try {\n const params = new URL(this.apiVastTagUrl).searchParams;\n return params.get(\"description_url\") || params.get(\"url\") || void 0;\n } catch {\n return void 0;\n }\n }\n generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {\n const adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;\n const envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);\n const urlWithMacros = applyVastMacros(baseUrl, {\n correlator: this.viewCorrelator,\n streamCorrelator: this.streamCorrelator,\n pod: this.podCounter > 0 ? this.podCounter : void 0,\n podMaxAds: podParams.maxAds,\n podMinDurationMs: podParams.minDurationMs,\n podMaxDurationMs: podParams.maxDurationMs,\n isCtv: envSignals.isCtv,\n pageUrl: !envSignals.isCtv && typeof window !== \"undefined\" ? toDevSafeUrl(window.location.href) : void 0,\n adWillPlayMuted,\n adWillAutoPlay: !!this.config.autoplay,\n sessionId: envSignals.isCtv || this.consentSignals.storageAllowed !== false ? envSignals.sessionId : void 0,\n deviceId: envSignals.deviceId,\n deviceIdType: envSignals.deviceIdType,\n limitAdTracking: envSignals.limitAdTracking,\n deviceTypeHint: envSignals.deviceTypeHint,\n adTest: this.config.adTest,\n ...this.config.programTitle ? { programTitle: this.config.programTitle } : {},\n ...this.config.channelName ? { channelName: this.config.channelName } : {},\n consent: this.consentSignals\n });\n const finalUrl = palNonce.injectNonce(urlWithMacros);\n console.log(\n `[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=${this.podCounter}, pmad=${podParams.maxAds}, pmnd=${podParams.minDurationMs}, pmxd=${podParams.maxDurationMs ?? \"?\"}):`,\n finalUrl\n );\n return finalUrl;\n }\n // --- Tracking ---\n initializeTracking() {\n sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(() => {\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n }).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send initial tracking:\",\n error\n );\n }\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n });\n }\n sendHeartbeatIfNeeded() {\n const now = Date.now();\n if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {\n this.lastHeartbeatTime = now;\n sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send heartbeat:\",\n error\n );\n }\n });\n }\n }\n destroyTracking() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = void 0;\n }\n }\n};\n\n// src/player/AdTimingService.ts\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls2.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls2.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls2.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls2.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls2.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls2.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls2.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls2.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.adRequestQueue = [];\n this.adPodQueue = [];\n this.maxPlaceholderDurationMs = 5e3;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const adPlayer = this.host.getAdPlayer();\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"all_ads_completed\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.inAdBreak) {\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n let errorMessage = \"Ad playback failed\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure();\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] content_resume event: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n });\n }\n recreateAdController() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Recreating AdController for new ad\");\n }\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n async handleAdStart(_marker) {\n const scheduled = this.adConfig.findCurrentOrNextBreak(\n this.host.video.currentTime * 1e3\n );\n if (scheduled) {\n this.adConfig.consumedVmapBreakIds.add(this.adConfig.getAdBreakKey(scheduled));\n }\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n this.clearPendingAdBreak();\n return;\n }\n const adBreakDurationMs = _marker.durationSeconds != null ? _marker.durationSeconds * 1e3 : scheduled?.durationMs;\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[CONTINUOUS-FETCH] ${mode} MODE: Target duration=${adBreakDurationMs}ms`\n );\n }\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n const podPlayed = await this.startOptimizedPod(\n baseVastUrl,\n adBreakDurationMs,\n currentMuted,\n currentVolume\n );\n if (!podPlayed) {\n if (this.debug) {\n console.log(\"[POD] Initial pod request did not fill; attempting top-up pod request\");\n }\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n await this.tryNextAvailableAdWithRateLimit();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs, currentMuted, currentVolume) {\n let podUrl;\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.continuousFetchingActive = false;\n this.recreateAdController();\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n await adPlayer.requestAds(podUrl);\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) {\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n return false;\n }\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: podUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await adPlayer.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(currentMuted ? 0 : currentVolume);\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(podUrl, Date.now());\n }\n this.continuousFetchingActive = true;\n this.recreateAdController();\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Continuous fetching\n // ───────────────────────────────────────────────────────────────\n startContinuousFetching(baseVastUrl) {\n if (!this.continuousFetchingActive) {\n return;\n }\n if (this.continuousFetchLoopRunning) {\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Fetch loop already running, skipping duplicate start\");\n }\n return;\n }\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Starting continuous ad fetching loop\");\n }\n this.continuousFetchLoopRunning = true;\n this.continuousFetchLoop(baseVastUrl);\n }\n async continuousFetchLoop(baseVastUrl) {\n const epoch = this.timing.adBreakEpoch;\n while (this.continuousFetchingActive && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (remaining <= this.timing.getMinRemainingMsToStartAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough ad break time left (wall=${this.timing.getWallClockRemainingAdMs()}ms, budget=${this.timing.getDurationBudgetRemainingMs()}ms), stopping URL generation`);\n }\n break;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, stopping URL generation\");\n }\n break;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), stopping URL generation`);\n }\n break;\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Maximum ad requests reached (${this.timing.maxTotalAdRequestsPerBreak}), stopping`);\n }\n break;\n }\n const maxQueueSize = 5;\n if (this.adRequestQueue.length >= maxQueueSize) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] URL queue full (${this.adRequestQueue.length}), waiting...`);\n }\n await new Promise((resolve) => setTimeout(resolve, 1e3));\n continue;\n }\n const newAdUrl = this.nextAdRequestUrl(baseVastUrl);\n if (!newAdUrl || this.timing.failedVastUrls.has(newAdUrl) || this.timing.isUrlInCooldown(newAdUrl)) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n continue;\n }\n if (this.debug) {\n const queuedUrlsPreview = [...this.adRequestQueue, newAdUrl];\n console.log(\n `[CONTINUOUS-FETCH] Queued VAST URL (queue size: ${queuedUrlsPreview.length})`,\n { queuedUrls: queuedUrlsPreview }\n );\n }\n this.adRequestQueue.push(newAdUrl);\n const generationDelay = this.timing.consecutiveFailures > 0 ? Math.min(1e3 * Math.pow(2, this.timing.consecutiveFailures), 5e3) : 500;\n await new Promise((resolve) => setTimeout(resolve, generationDelay));\n }\n this.continuousFetchLoopRunning = false;\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] URL generation loop ended (queued: ${this.adRequestQueue.length})`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n }\n stopContinuousFetching() {\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.placeholder.hide();\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Stopping continuous ad fetching\");\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad iteration\n // ───────────────────────────────────────────────────────────────\n async tryNextAvailableAdWithRateLimit() {\n if (!this.inAdBreak) {\n return;\n }\n const epoch = this.timing.adBreakEpoch;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n }\n this.handleAdPodComplete();\n return;\n }\n const backoffMultiplier = Math.pow(2, this.timing.consecutiveFailures);\n const backoffDelay = Math.min(this.timing.backoffBaseMs * backoffMultiplier, this.timing.maxBackoffMs);\n const effectiveMinInterval = this.timing.minAdRequestIntervalMs + (this.timing.consecutiveFailures > 0 ? backoffDelay : 0);\n const timeSinceLastRequest = Date.now() - this.timing.lastAdRequestTime;\n if (timeSinceLastRequest < effectiveMinInterval) {\n const waitTime = effectiveMinInterval - timeSinceLastRequest;\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Rate limiting: waiting ${waitTime}ms before next request (backoff: ${this.timing.consecutiveFailures} failures)`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) {\n return;\n }\n return this.tryNextAvailableAd(0);\n }\n async tryNextAvailableAd(retryCount = 0) {\n if (!this.inAdBreak) {\n return;\n }\n const remaining = this.timing.getRemainingAdMs();\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough time remaining (${remaining}ms) to start another ad, ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, ending ad break gracefully\");\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n this.timing.cleanupTemporaryFailures();\n while (this.adRequestQueue.length > 0) {\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping permanently-failed URL, trying next...\");\n continue;\n }\n if (this.timing.isUrlInCooldown(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping URL in cooldown (recent no-fill), trying next...\");\n continue;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Requesting next ad via HLS ad player (${this.timing.currentAdIndex + 1}, ${this.adRequestQueue.length} remaining in queue)`);\n }\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad request failed:\", errorMessage);\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n const maxRetries = 3;\n if (this.continuousFetchingActive && retryCount < maxRetries && remaining > 2e3) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Queue empty, waiting for URLs... (${retryCount + 1}/${maxRetries})`);\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n await this.tryNextAvailableAd(retryCount + 1);\n return;\n }\n if (!this.isShowingPlaceholder && remaining > 1e3) {\n this.showPlaceholderAndWaitForAds();\n } else {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] No more ads available, ending ad break\");\n this.handleAdPodComplete();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n async playSingleAd(vastTagUrl) {\n const adPlayer = this.host.getAdPlayer();\n if (adPlayer.isAdPlaying()) return;\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n this.recreateAdController();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n const ap = this.host.getAdPlayer();\n await ap.requestAds(vastTagUrl);\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: vastTagUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) return;\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n this.timing.rejectLoadedAdForDuration(ap);\n this.recreateAdController();\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n try {\n this.timing.startAdFailsafeTimer(requestToken);\n await ap.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.consecutiveFailures = 0;\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (playError) {\n if (this.debug) console.error(\"[AD-ERROR] Failed to play ad:\", playError);\n if (this.timing.isTemporaryAdError(playError)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary play error - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent play error - URL blacklisted\");\n }\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw playError;\n }\n } catch (error) {\n const errorMessage = error?.message || \"\";\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", errorMessage);\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary error (no-fill/timeout) - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent error - URL blacklisted:\", errorMessage);\n }\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Placeholder wait\n // ───────────────────────────────────────────────────────────────\n async showPlaceholderAndWaitForAds() {\n const remaining = this.timing.getRemainingAdMs();\n const waitTime = Math.min(this.maxPlaceholderDurationMs, remaining);\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping placeholder wait\");\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping placeholder - too many consecutive failures\");\n this.handleAdPodComplete();\n return;\n }\n if (waitTime < 1e3) {\n this.handleAdPodComplete();\n return;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Showing placeholder for ${waitTime}ms while waiting for ad URLs`);\n }\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n const checkInterval = 300;\n const maxChecks = Math.floor(waitTime / checkInterval);\n for (let i = 0; i < maxChecks; i++) {\n await new Promise((resolve) => setTimeout(resolve, checkInterval));\n if (!this.inAdBreak) return;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Too many failures during placeholder wait\");\n break;\n }\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Not enough time remaining during placeholder wait, ending ad break\");\n break;\n }\n while (this.adRequestQueue.length > 0) {\n if (!this.timing.hasTimeToStartAnotherAd()) break;\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) continue;\n if (this.timing.isUrlInCooldown(nextAdUrl)) continue;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad URL available, requesting via HLS ad player\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n }\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Placeholder timeout, ending ad break\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n this.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n handleAdPodComplete() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\");\n }\n this.timing.resetForBreakEnd();\n this.stopContinuousFetching();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.adRequestQueue = [];\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.host.getAdPlayer().stop().catch(() => {\n });\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure() {\n this.timing.consecutiveFailures++;\n this.timing.recordGamNoFill();\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] Ad failure: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}, consecutiveFailures=${this.timing.consecutiveFailures}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(`[CONTINUOUS-FETCH] Max consecutive failures reached (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n if (this.debug) console.log(\"[AD-ERROR] Ad failed and not enough time remaining for another ad. Failed URLs:\", this.timing.failedVastUrls.size);\n this.handleAdPodComplete();\n }\n }\n};\n\n// src/player/StormcloudVideoPlayer.ts\nvar StormcloudVideoPlayer = class {\n constructor(config) {\n this.attached = false;\n this.palPlaybackStarted = false;\n initializePolyfills();\n const browserOverrides = getBrowserConfigOverrides();\n this.config = { ...browserOverrides, ...config };\n this.video = config.videoElement;\n logBrowserInfo(config.debugAdTiming);\n this.adPlayer = this.createAdPlayer(false);\n this.palNonce = createPalNonceManager();\n this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {\n onEarlyStartCue: (marker, fragmentSn, cueKey) => {\n this.startAdPrefetch(marker, fragmentSn, cueKey);\n },\n onPlaybackCue: (marker, cueKey) => {\n this.onScte35Marker(marker, cueKey);\n },\n isInAdBreak: () => this.adBreak.inAdBreak\n });\n this.adConfig = new AdConfigManager(this.config, this.video);\n this.timing = new AdTimingService(this.config, this.video, {\n onAdStopTimerFired: () => this.onAdStopTimerFired(),\n onAdStartTimerFired: (marker, cueKey) => {\n this.startScte35AdBreak(\n marker,\n cueKey,\n marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs\n );\n },\n onWatchdogTimeout: () => this.adBreak.handleAdFailure(),\n onFailsafeTimeout: () => this.adBreak.handleAdFailure(),\n getAdState: () => ({\n inAdBreak: this.adBreak.inAdBreak,\n showAds: this.adBreak.showAds,\n adPlaying: this.adPlayer.isAdPlaying()\n })\n });\n this.placeholder = new PlaceholderLayer(this.video, !!this.config.debugAdTiming);\n this.hlsEngine = new HlsEngine(this.config, this.video, this.cueManager, this.timing, {\n onManifestParsed: async (isLive) => this.onManifestParsed(isLive),\n onScte35Cue: (marker, context) => this.cueManager.onScte35Cue(marker, context),\n activatePendingCuesForFragment: (frag) => this.cueManager.activatePendingScte35CuesForFragment(frag),\n onFatalDestroy: () => this.destroy(),\n isInAdBreak: () => this.adBreak.inAdBreak,\n hasPendingAdBreak: () => this.adBreak.pendingAdBreak !== null\n });\n this.adBreak = new AdBreakOrchestrator(\n {\n config: this.config,\n video: this.video,\n getAdPlayer: () => this.adPlayer,\n setAdPlayer: (p) => {\n this.adPlayer = p;\n },\n createAdPlayer: (c) => this.createAdPlayer(c),\n shouldContinueLiveStreamDuringAds: () => this.shouldContinueLiveStreamDuringAds(),\n isLiveStream: () => this.hlsEngine.isLiveStream,\n getLiveSyncPosition: () => this.hlsEngine.getLiveSyncPosition(),\n restartHlsLoad: (position) => this.hlsEngine.restartLoadAt(position),\n reloadLiveStream: () => this.hlsEngine.reloadLiveStream(),\n recoverMediaError: () => this.hlsEngine.recoverMediaError(),\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds(),\n generatePodVastUrl: (base, breakDurationMs) => this.generatePodVastUrl(base, breakDurationMs),\n onAdClick: () => this.palNonce.sendAdClick(),\n onAdInteraction: (event) => this.palNonce.sendAdTouch(event)\n },\n this.timing,\n this.adConfig,\n this.cueManager,\n this.placeholder\n );\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n createAdPlayer(continueLiveStreamDuringAds) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Creating HLS ad player\");\n }\n return createHlsAdPlayer(this.video, {\n continueLiveStreamDuringAds,\n ...this.config.licenseKey ? { licenseKey: this.config.licenseKey } : {},\n ...this.hlsEngine?.hls ? { mainHlsInstance: this.hlsEngine.hls } : {}\n });\n }\n generatePodVastUrl(baseUrl, breakDurationMs) {\n const podParams = this.adConfig.resolvePodParams(breakDurationMs);\n return this.adConfig.generatePodVastUrl(\n baseUrl,\n podParams,\n this.adPlayer,\n this.palNonce,\n this.adBreak.inAdBreak\n );\n }\n // ───────────────────────────────────────────────────────────────\n // Lifecycle\n // ───────────────────────────────────────────────────────────────\n async load() {\n if (!this.attached) {\n this.attach();\n }\n try {\n await this.adConfig.fetchAdConfiguration();\n } catch (error) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to fetch ad configuration:\",\n error\n );\n }\n }\n const palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;\n fetchConsentSignals().catch(() => ({})).then((signals) => {\n this.adConfig.consentSignals = signals;\n const muted = this.video.muted;\n return this.palNonce.generateNonce({\n videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,\n videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,\n adWillAutoPlay: !!this.config.autoplay,\n adWillPlayMuted: muted,\n playerVolume: muted ? 0 : this.video.volume,\n continuousPlayback: this.config.lowLatencyMode ?? false,\n ...palDescriptionUrl ? { descriptionUrl: palDescriptionUrl } : {},\n ...signals.storageAllowed != null ? { allowStorage: signals.storageAllowed } : {}\n });\n }).catch(() => {\n });\n this.adConfig.initializeTracking();\n if (this.hlsEngine.shouldUseNativeHls(() => this.getStreamType())) {\n await this.hlsEngine.setupNativeHls();\n const continueLiveStreamDuringAds = this.shouldContinueLiveStreamDuringAds();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Native HLS ad behavior:\", {\n isLive: this.hlsEngine.isLiveStream,\n continueLiveStreamDuringAds\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(continueLiveStreamDuringAds);\n this.adPlayer.initialize();\n return;\n }\n this.hlsEngine.setupHls();\n }\n async onManifestParsed(isLive) {\n if (this.hlsEngine.reloadingLiveStream) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Manifest re-parsed after hard reload \\u2014 skipping ad-player setup\");\n }\n return;\n }\n if (!this.adConfig.isVmapEnabled() && !isLive && this.adConfig.vmapBreaks.length === 0 && this.adConfig.apiVastTagUrl) {\n const prerollKey = \"synthetic-vod-preroll\";\n if (!this.adConfig.consumedVmapBreakIds.has(prerollKey)) {\n this.adConfig.vmapBreaks = [\n { id: prerollKey, startTimeMs: 0, vastTagUrl: this.adConfig.apiVastTagUrl }\n ];\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Injected synthetic VOD preroll from apiVastTagUrl\"\n );\n }\n }\n }\n if (this.debug) {\n const adBehavior = this.shouldContinueLiveStreamDuringAds() ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\"[StormcloudVideoPlayer] Stream type detected:\", {\n isLive,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(this.shouldContinueLiveStreamDuringAds());\n this.adPlayer.initialize();\n }\n attach() {\n if (this.attached) return;\n this.attached = true;\n this.video.autoplay = !!this.config.autoplay;\n this.video.muted = !!this.config.muted;\n this.adPlayer.initialize();\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.attachImaEventListeners();\n this.video.addEventListener(\"play\", () => {\n if (!this.palPlaybackStarted && !this.adPlayer.isAdPlaying()) {\n this.palPlaybackStarted = true;\n this.palNonce.sendPlaybackStart();\n }\n });\n this.endedHandler = () => {\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.onVideoEnded();\n };\n this.video.addEventListener(\"ended\", this.endedHandler);\n this.video.addEventListener(\"mousedown\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.video.addEventListener(\"touchstart\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.timeUpdateHandler = () => {\n this.onTimeUpdate(this.video.currentTime);\n };\n this.video.addEventListener(\"timeupdate\", this.timeUpdateHandler);\n this.emptiedHandler = () => {\n if (this.hlsEngine.nativeHlsMode && this.hlsEngine.videoSrcProtection && !this.adPlayer.isAdPlaying()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Video src was cleared, restoring:\",\n this.hlsEngine.videoSrcProtection\n );\n }\n const currentTime = this.video.currentTime;\n const wasPaused = this.video.paused;\n this.video.src = this.hlsEngine.videoSrcProtection;\n this.video.currentTime = currentTime;\n if (!wasPaused) {\n this.video.play().catch(() => {\n });\n }\n }\n };\n this.video.addEventListener(\"emptied\", this.emptiedHandler);\n }\n shouldContinueLiveStreamDuringAds() {\n if (this.config.pauseContentDuringAds) {\n return false;\n }\n if (this.hlsEngine.isLiveStream) {\n return true;\n }\n const duration = this.video.duration;\n if (!Number.isFinite(duration) || duration === Infinity) {\n return true;\n }\n return false;\n }\n // ───────────────────────────────────────────────────────────────\n // SCTE-35 marker orchestration\n // ───────────────────────────────────────────────────────────────\n onScte35Marker(marker, cueKey) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 marker detected:\", {\n type: marker.type,\n ptsSeconds: marker.ptsSeconds,\n durationSeconds: marker.durationSeconds,\n currentTime: this.video.currentTime,\n raw: marker.raw,\n hasPendingAdBreak: !!this.adBreak.pendingAdBreak\n });\n }\n if (marker.type === \"start\") {\n if (this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n const newDurationMs = marker.durationSeconds * 1e3;\n if (this.timing.expectedAdBreakDurationMs == null || newDurationMs > this.timing.expectedAdBreakDurationMs) {\n this.timing.setAdBreakDurationBoundary(newDurationMs);\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Updated ad break duration from subsequent marker: ${newDurationMs}ms, remaining: ${this.timing.getWallClockRemainingAdMs()}ms`\n );\n }\n }\n }\n return;\n }\n if (!this.adBreak.adDetectSentForCurrentBreak) {\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n }\n const hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;\n const durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.adBreak.pendingAdBreak?.marker.durationSeconds != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;\n const isManifest = isManifestBasedMarker(marker);\n const forceImmediate = this.config.immediateManifestAds ?? true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad start decision:\", {\n isManifestMarker: isManifest,\n forceImmediate,\n hasPts: typeof marker.ptsSeconds === \"number\",\n hasPrefetchedAds\n });\n }\n if (isManifest && forceImmediate) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Starting ad immediately (manifest-based)${hasPrefetchedAds ? \" with prefetched ads\" : \"\"}`\n );\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n } else if (typeof marker.ptsSeconds === \"number\") {\n const tol = this.config.driftToleranceMs ?? 1e3;\n const nowMs = this.video.currentTime * 1e3;\n const estCurrentPtsMs = nowMs - this.timing.ptsDriftEmaMs;\n const deltaMs = Math.floor(marker.ptsSeconds * 1e3 - estCurrentPtsMs);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] PTS-based timing calculation:\", {\n nowMs,\n estCurrentPtsMs,\n markerPtsMs: marker.ptsSeconds * 1e3,\n deltaMs,\n tolerance: tol\n });\n }\n if (deltaMs > tol) {\n if (this.debug) {\n console.log(`[StormcloudVideoPlayer] Scheduling ad start in ${deltaMs}ms`);\n }\n this.timing.expectedAdBreakDurationMs = durationMs;\n this.cueManager.scheduledScte35BreakKey = cueKey;\n this.timing.scheduleAdStartIn(deltaMs, marker, cueKey);\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (within tolerance)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (fallback)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n return;\n }\n if (marker.type === \"progress\" && this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n this.timing.setAdBreakDurationBoundary(marker.durationSeconds * 1e3);\n }\n this.timing.scheduleAdStopAtBreakBoundary();\n if (!this.adPlayer.isAdPlaying() && this.timing.activeAdRequestToken === null && this.adBreak.adRequestQueue.length > 0 && this.timing.hasTimeToStartAnotherAd()) {\n this.adBreak.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n if (marker.type === \"end\") {\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on SCTE end marker\");\n }\n }\n const remaining = this.timing.getRemainingAdMs();\n const adPlaying = this.adPlayer.isAdPlaying();\n const hasQueuedAds = this.adBreak.adRequestQueue.length > 0;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 end marker received:\", {\n remaining,\n adPlaying,\n hasQueuedAds,\n activeAdRequest: this.timing.activeAdRequestToken !== null\n });\n }\n this.timing.scteAdBreakEndWallClockMs = Date.now();\n this.timing.clearAdStartTimer();\n this.timing.clearAdStopTimer();\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n return;\n }\n }\n startScte35AdBreak(marker, cueKey, durationMs) {\n this.adBreak.inAdBreak = true;\n this.cueManager.activeScte35BreakKey = cueKey ?? this.cueManager.pendingScte35CueKey;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.timing.currentAdBreakStartWallClockMs = this.timing.resolveScteBreakStartWallClockMs(marker);\n this.timing.setAdBreakDurationBoundary(durationMs);\n this.adBreak.handleAdStart(marker);\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n onAdStopTimerFired() {\n if (!this.adBreak.inAdBreak) return;\n const adPlaying = this.adPlayer.isAdPlaying();\n const checkIntervalMs = Math.max(\n 250,\n Math.floor(this.config.adBreakCheckIntervalMs ?? 1e3)\n );\n const maxExtensionMsConfig = this.config.maxAdBreakExtensionMs;\n const maxExtensionMs = typeof maxExtensionMsConfig === \"number\" && maxExtensionMsConfig > 0 ? maxExtensionMsConfig : 0;\n const endWallClockMs = this.timing.getAdBreakEndWallClockMs() ?? Date.now();\n const overrunMs = Math.max(0, Date.now() - endWallClockMs);\n const shouldExtendAdBreak = adPlaying && overrunMs < maxExtensionMs;\n if (shouldExtendAdBreak) {\n this.timing.scheduleAdStopCountdown(checkIntervalMs);\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Ad break boundary reached (overrun=${overrunMs}ms) - hard-stopping ads and resuming stream`\n );\n }\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad prefetch\n // ───────────────────────────────────────────────────────────────\n startAdPrefetch(marker, fragmentSn, cueKey) {\n if (this.adBreak.pendingAdBreak || this.adBreak.inAdBreak) return;\n const scheduled = this.adConfig.findCurrentOrNextBreak(this.video.currentTime * 1e3);\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n if (this.debug) console.warn(\"[StormcloudVideoPlayer] No VAST URL available for prefetch\");\n return;\n }\n this.adConfig.beginNewAdPod();\n this.adConfig.podAssignedByPrefetch = true;\n const breakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : void 0;\n const generatedUrls = [this.generatePodVastUrl(baseVastUrl, breakDurationMs)];\n this.adBreak.pendingAdBreak = {\n marker,\n ...fragmentSn !== void 0 ? { detectedAtFragmentSn: fragmentSn } : {},\n vastUrls: generatedUrls,\n isFetching: false,\n fetchStartTime: Date.now()\n };\n this.cueManager.pendingScte35CueKey = cueKey;\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n if (fragmentSn !== void 0) detectPayload.detectedAtFragmentSn = fragmentSn;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n if (this.debug) {\n console.log(\"[PREFETCH] Starting ad prefetch for upcoming ad break\");\n console.log(`[PREFETCH] Pre-generated pod request URL`);\n }\n }\n // ───────────────────────────────────────────────────────────────\n // VMAP time-based ad breaks\n // ───────────────────────────────────────────────────────────────\n onTimeUpdate(currentTimeSec) {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const nowMs = currentTimeSec * 1e3;\n const breakToPlay = this.adConfig.findBreakForTime(nowMs);\n if (breakToPlay) {\n void this.handleVmapAdBreak(breakToPlay, nowMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad break failed gracefully:\", error);\n }\n });\n }\n }\n onVideoEnded() {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;\n const postroll = this.adConfig.vmapBreaks.find(\n (b) => b.startTimeMs === -1 && !this.adConfig.consumedVmapBreakIds.has(this.adConfig.getAdBreakKey(b))\n );\n if (postroll) {\n void this.handleVmapAdBreak(postroll, durationMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP post-roll failed gracefully:\", error);\n }\n });\n }\n }\n async handleVmapAdBreak(adBreak, nowMs) {\n const key = this.adConfig.getAdBreakKey(adBreak);\n if (this.adConfig.consumedVmapBreakIds.has(key)) return;\n const breakStartMs = this.adConfig.resolveBreakStartMs(adBreak);\n if (breakStartMs == null) return;\n const durationMs = adBreak.durationMs ?? 0;\n const endMs = breakStartMs + durationMs;\n const inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;\n if (inWindow) {\n this.adConfig.consumedVmapBreakIds.add(key);\n const tags = this.adConfig.selectVastTagsForBreak(adBreak);\n if (!tags || tags.length === 0) return;\n const first = tags[0];\n const rest = tags.slice(1);\n this.adBreak.adPodQueue = rest;\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.showAds = true;\n this.adBreak.inAdBreak = true;\n this.timing.currentAdBreakStartWallClockMs = Date.now();\n try {\n await this.adBreak.playSingleAd(first);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad request failed:\", error);\n }\n this.adBreak.handleAdPodComplete();\n }\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Public API\n // ───────────────────────────────────────────────────────────────\n getCurrentAdIndex() {\n return this.timing.currentAdIndex;\n }\n getTotalAdsInBreak() {\n return this.timing.totalAdsInBreak;\n }\n getAdRemainingMs() {\n return this.timing.getRemainingAdMs();\n }\n isAdPlaying() {\n return this.adBreak.inAdBreak && this.adPlayer.isAdPlaying();\n }\n isShowingAds() {\n return this.adBreak.showAds;\n }\n getStreamType() {\n const url = this.config.src.toLowerCase();\n if (url.includes(\".m3u8\") || url.includes(\"/hls/\") || url.includes(\"application/vnd.apple.mpegurl\")) {\n return \"hls\";\n }\n return \"other\";\n }\n shouldShowNativeControls() {\n const streamType = this.getStreamType();\n if (streamType === \"other\") {\n return !(this.config.showCustomControls ?? false);\n }\n return !!(this.config.allowNativeHls && !(this.config.showCustomControls ?? false));\n }\n isLive() {\n return this.hlsEngine.isLiveStream;\n }\n isLowLatencyStream() {\n return this.hlsEngine.isLowLatencyStream();\n }\n get videoElement() {\n return this.video;\n }\n toggleMute() {\n toggleMute(this.video, this.adPlayer, this.debug);\n }\n toggleFullscreen() {\n return toggleFullscreen(this.video, this.debug);\n }\n isMuted() {\n return isMuted(this.video, this.adPlayer);\n }\n setMuted(muted) {\n setMuted(this.video, this.adPlayer, muted, this.debug);\n }\n setVolume(volume) {\n setVolume(this.video, this.adPlayer, volume, this.debug);\n }\n getVolume() {\n return getVolume(this.video, this.adPlayer);\n }\n isFullscreen() {\n return isFullscreen();\n }\n resize() {\n resizePlayer(this.video, this.adPlayer, this.debug);\n }\n // ───────────────────────────────────────────────────────────────\n // Destroy\n // ───────────────────────────────────────────────────────────────\n destroy() {\n this.adBreak.stopContinuousFetching();\n this.timing.destroy();\n this.adBreak.clearPendingAdBreak();\n this.placeholder.destroy();\n if (this.timeUpdateHandler) {\n this.video.removeEventListener(\"timeupdate\", this.timeUpdateHandler);\n delete this.timeUpdateHandler;\n }\n if (this.endedHandler) {\n this.video.removeEventListener(\"ended\", this.endedHandler);\n delete this.endedHandler;\n }\n if (this.emptiedHandler) {\n this.video.removeEventListener(\"emptied\", this.emptiedHandler);\n delete this.emptiedHandler;\n }\n this.adConfig.destroyTracking();\n this.hlsEngine.destroy();\n this.adPlayer?.destroy();\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.palNonce.reset();\n this.adBreak.adRequestQueue = [];\n this.timing.consecutiveFailures = 0;\n }\n};\n\n// src/players/HlsPlayer.tsx\nvar HlsPlayer = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.player = null;\n this.mounted = false;\n this.load = async () => {\n if (!this.props.videoElement || !this.props.src) return;\n try {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n const config = {\n src: this.props.src,\n videoElement: this.props.videoElement\n };\n if (this.props.autoplay !== void 0)\n config.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) config.muted = this.props.muted;\n if (this.props.lowLatencyMode !== void 0)\n config.lowLatencyMode = this.props.lowLatencyMode;\n if (this.props.allowNativeHls !== void 0)\n config.allowNativeHls = this.props.allowNativeHls;\n if (this.props.isLiveStream !== void 0)\n config.isLiveStream = this.props.isLiveStream;\n if (this.props.driftToleranceMs !== void 0)\n config.driftToleranceMs = this.props.driftToleranceMs;\n if (this.props.immediateManifestAds !== void 0)\n config.immediateManifestAds = this.props.immediateManifestAds;\n if (this.props.debugAdTiming !== void 0)\n config.debugAdTiming = this.props.debugAdTiming;\n if (this.props.showCustomControls !== void 0)\n config.showCustomControls = this.props.showCustomControls;\n if (this.props.onVolumeToggle !== void 0)\n config.onVolumeToggle = this.props.onVolumeToggle;\n if (this.props.onFullscreenToggle !== void 0)\n config.onFullscreenToggle = this.props.onFullscreenToggle;\n if (this.props.onControlClick !== void 0)\n config.onControlClick = this.props.onControlClick;\n if (this.props.licenseKey !== void 0)\n config.licenseKey = this.props.licenseKey;\n if (this.props.adFailsafeTimeoutMs !== void 0)\n config.adFailsafeTimeoutMs = this.props.adFailsafeTimeoutMs;\n if (this.props.minSegmentsBeforePlay !== void 0)\n config.minSegmentsBeforePlay = this.props.minSegmentsBeforePlay;\n if (this.props.ctvAdRequest !== void 0)\n config.ctvAdRequest = this.props.ctvAdRequest;\n this.player = new StormcloudVideoPlayer(config);\n this.props.onMount?.(this);\n await this.player.load();\n if (this.mounted) {\n this.props.onReady?.();\n }\n } catch (error) {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n }\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[HlsPlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n this.props.onPlay?.();\n } else {\n console.warn(\"[HlsPlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n this.props.onPause?.();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"player\") return this.player;\n if (key === \"video\") return this.props.videoElement;\n if (key === \"hls\" && this.player) return this.player.hls;\n return null;\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nHlsPlayer.displayName = \"HlsPlayer\";\nHlsPlayer.canPlay = canPlay.hls;\n\n// src/players/FilePlayer.tsx\nvar import_react3 = require(\"react\");\nvar FilePlayer = class extends import_react3.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.ready = false;\n this.load = () => {\n if (!this.props.videoElement || !this.props.src) return;\n const video = this.props.videoElement;\n const handleLoadedMetadata = () => {\n if (this.mounted && !this.ready) {\n this.ready = true;\n this.props.onReady?.();\n }\n };\n const handlePlay = () => {\n if (this.mounted) {\n this.props.onPlay?.();\n }\n };\n const handlePause = () => {\n if (this.mounted) {\n this.props.onPause?.();\n }\n };\n const handleEnded = () => {\n if (this.mounted) {\n this.props.onEnded?.();\n }\n };\n const handleError = (error) => {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n };\n const handleLoadedData = () => {\n if (this.mounted) {\n this.props.onLoaded?.();\n }\n };\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.src = this.props.src;\n if (this.props.autoplay !== void 0) video.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) video.muted = this.props.muted;\n if (this.props.loop !== void 0) video.loop = this.props.loop;\n if (this.props.controls !== void 0) video.controls = this.props.controls;\n if (this.props.playsInline !== void 0)\n video.playsInline = this.props.playsInline;\n if (this.props.preload !== void 0)\n video.preload = this.props.preload;\n if (this.props.poster !== void 0) video.poster = this.props.poster;\n this.props.onMount?.(this);\n return () => {\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n };\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[FilePlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n } else {\n console.warn(\"[FilePlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.setLoop = (loop) => {\n if (this.props.videoElement) {\n this.props.videoElement.loop = loop;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"video\") return this.props.videoElement;\n return null;\n };\n this.enablePIP = async () => {\n if (this.props.videoElement && \"requestPictureInPicture\" in this.props.videoElement) {\n try {\n await this.props.videoElement.requestPictureInPicture();\n } catch (error) {\n console.warn(\"Picture-in-Picture failed:\", error);\n }\n }\n };\n this.disablePIP = async () => {\n if (document.pictureInPictureElement) {\n try {\n await document.exitPictureInPicture();\n } catch (error) {\n console.warn(\"Exit Picture-in-Picture failed:\", error);\n }\n }\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nFilePlayer.displayName = \"FilePlayer\";\nFilePlayer.canPlay = canPlay.file;\n\n// src/players/index.ts\nvar players = [\n {\n key: \"hls\",\n name: \"HLS Player\",\n canPlay: canPlay.hls,\n lazyPlayer: lazy(() => Promise.resolve({ default: HlsPlayer }))\n },\n {\n key: \"file\",\n name: \"File Player\",\n canPlay: canPlay.file,\n canEnablePIP: (url) => {\n return canPlay.file(url) && (document.pictureInPictureEnabled || typeof document.webkitSupportsPresentationMode === \"function\");\n },\n lazyPlayer: lazy(() => Promise.resolve({ default: FilePlayer }))\n }\n];\nvar players_default = players;\n"]}
|