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.
Files changed (54) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs.map +1 -1
  3. package/lib/StormcloudPlayer.cjs +83 -29
  4. package/lib/StormcloudPlayer.cjs.map +1 -1
  5. package/lib/index.cjs +87 -31
  6. package/lib/index.cjs.map +1 -1
  7. package/lib/index.d.ts +4034 -0
  8. package/lib/index.js +13001 -0
  9. package/lib/index.js.map +1 -0
  10. package/lib/patterns.cjs.map +1 -1
  11. package/lib/player/AdBreakOrchestrator.cjs +3 -2
  12. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  13. package/lib/player/AdConfigManager.cjs +53 -11
  14. package/lib/player/AdConfigManager.cjs.map +1 -1
  15. package/lib/player/AdTimingService.cjs.map +1 -1
  16. package/lib/player/HlsEngine.cjs.map +1 -1
  17. package/lib/player/PlaceholderLayer.cjs.map +1 -1
  18. package/lib/player/PlayerControls.cjs.map +1 -1
  19. package/lib/player/Scte35CueManager.cjs.map +1 -1
  20. package/lib/player/Scte35Parser.cjs.map +1 -1
  21. package/lib/player/StormcloudVideoPlayer.cjs +83 -29
  22. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  23. package/lib/player/playerTypes.cjs.map +1 -1
  24. package/lib/players/FilePlayer.cjs.map +1 -1
  25. package/lib/players/HlsPlayer.cjs +83 -29
  26. package/lib/players/HlsPlayer.cjs.map +1 -1
  27. package/lib/players/index.cjs +83 -29
  28. package/lib/players/index.cjs.map +1 -1
  29. package/lib/props.cjs.map +1 -1
  30. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  31. package/lib/sdk/pal.cjs +9 -5
  32. package/lib/sdk/pal.cjs.map +1 -1
  33. package/lib/sdk/pal.d.cts +1 -0
  34. package/lib/types.cjs.map +1 -1
  35. package/lib/types.d.cts +1 -0
  36. package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
  37. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  38. package/lib/utils/browserCompat.cjs.map +1 -1
  39. package/lib/utils/ctvVastSignals.cjs +25 -4
  40. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  41. package/lib/utils/devUrl.cjs.map +1 -1
  42. package/lib/utils/polyfills.cjs.map +1 -1
  43. package/lib/utils/tracking.cjs +3 -2
  44. package/lib/utils/tracking.cjs.map +1 -1
  45. package/lib/utils/trackingIngest.cjs.map +1 -1
  46. package/lib/utils/vastEnvironmentSignals.cjs +27 -5
  47. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  48. package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
  49. package/lib/utils/vastMacros.cjs +24 -4
  50. package/lib/utils/vastMacros.cjs.map +1 -1
  51. package/lib/utils/vastMacros.d.cts +2 -0
  52. package/lib/utils/vastTrackingMacros.cjs.map +1 -1
  53. package/lib/utils.cjs.map +1 -1
  54. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\ui\\StormcloudVideoPlayer.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","__copyProps","to","from","except","desc","key","call","enumerable","mod","isNodeMode","__esModule","value","__toCommonJS","StormcloudVideoPlayer_exports","StormcloudVideoPlayerComponent","import_react","__toESM","require","import_hls","getChromeVersion","match","ua","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","detectBrowser","version","isSmartTV","isLegacyTV","supportsModernJS","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","majorVersion","toString","URLSearchParams","browser","overrides","requiresMediaPipelineResetAfterAds","getBrowserConfigOverrides","allowNativeHls","pauseContentDuringAds","logBrowserInfo","debug","console","log","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","Set","adPlayhead","ss","String","total","ms","generateCachebuster","Math","floor","random","seconds","Number","isFinite","formatPlayhead","padStart","mm","hh","values","Map","ctx","deviceId","set","assetUri","mediaMime","Date","toISOString","errorCode","round","playerWidth","playerHeight","limitAdTracking","pageUrl","clientUa","podSequence","reason","substituteVastTrackingMacros","url","resolveMacroValues","replace","VAST_MACRO_PATTERN","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","parseFloat","map","p","h","m","every","n","s","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","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","currentAdMediaFile","adContainerEl","adEventHandlers","containerHandlers","currentAd","podAds","podIndex","preloadedAds","destroyed","pendingTimeouts","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","lastAdProgressPosition","sawDecodedVideoFrame","videoFrameCallbackHandle","pendingPlayPromise","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","emit","event","payload","Array","fn","warn","buildTrackingMacroContext","options2","ad","context","adPlayheadSeconds","currentTime","contentPlayheadSeconds","type","clientWidth","location","href","adServingId","urls","forEach","trackingUrl","macroContext","img","Image","add","timeoutId","clearTimeout","onerror","onload","release","setTimeout","src","level","getMainStreamQuality","currentLevel","levels","autoLevel","loadLevel","level2","width","height","bitrate","mediaFiles","Error","firstFile","mainQuality","scoredFiles","file","widthDiff","abs","heightDiff","resolutionDiff","fileBitrate","score","resolution","bestMatch","mediaFile","bitrateDiff","sort","a","b","isHlsMediaFile","toLowerCase","includes","isProgressiveMediaFile","startsWith","isAudioMediaFile","mediaFileElements","linear","querySelectorAll","verbose","mf","index","getAttribute","apiFramework","toUpperCase","bitrateValue","bitrateAttr","hasExplicitDimensions","push","createEmptyTrackingUrls","clickTracking","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","errorUrls","collectLinearTracking","into","parseProgressOffset","indexOf","collectAdLevelTracking","adBody","viewable","verification","mergeTrackingUrls","source","targetLists","sourceLists","keys","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","parseVastXml","adElements","documentElement","find","parsed","parseAdElement","wrapper","vastAdTagUri","trackingUrls2","linear2","inLine","rules","followAdditionalWrappers","candidate","files","collectVideoMediaFiles","trackingUrls","id","title","clickThrough","headers","fetchVastXml","vastTagUrl","credentials","requestVast","response","fetch","mode","creds","referrerPolicy","ok","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","fireTrackingPixels","substring","fetchAndParsePod","trimmedXml","empty","resolveAd","podElements","buffet","ads","filter","shift","style","objectFit","createAdVideoElement","video","document","createElement","position","left","top","backgroundColor","playsInline","muted","setupAdEventListeners","onTimeUpdate","noteAdProgress","sampleViewability","threshold","duration","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onEnded","onPlaying","startStallWatchdog","creativeView","adId","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","reportCurrentAdError","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","teardownAdEventListeners","removeEventListener","handleAdClick","window","open","fireNotUsedForUnplayedAds","notUsed","viewabilitySettled","now","inView","visibilityState","paused","handleFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","attachContainerHandlers","onInteraction","onClick","addEventListener","onFullscreenChange","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","settlePendingPlay","startAdPlayback","playPromise","play","catch","finally","prepareVideoElementForNewSource","destroy","recreateAdVideoElement","removeAttribute","load","remove","appendChild","loadCurrentAdMedia","selectBestMediaFile","isHlsAd","default","isSupported","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","stallWatchdogId","cancelVideoFrameProbe","lastAdProgressTime","handleAdStall","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","requestVideoFrameCallback","onPresentedFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","getDecodedVideoFrameCount","BLACKFRAME_MIN_PLAYBACK_S","timeAdvancing","releaseAdDecoder","display","pointerEvents","continueLiveStreamDuringAds","visibility","opacity","initialize","container","right","bottom","alignItems","justifyContent","parentElement","requestAds","preloaded","Promise","reject","delete","resolve","contentVolume","stop","previousMutedState","getOriginalMutedState","clear","preloadingAds","isAdPlaying","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalVolume","setAdVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getPodTotalDurationMs","getLoadedAdId","getPodAdCount","reduce","isLocalDevHost","hostname","host","rawUrl","pattern","toDevSafeUrl","URL","cleanPath","_nonceLoader","_palLoadPromise","loadPalSdk","goog","pal","existing","timeout","script","PAL_SDK_URL","async","setAttribute","head","getOrCreateNonceLoader","consentSettings","ConsentSettings","allowStorage","NonceLoader","createPalNonceManager","currentNonce","currentNonceManager","generateNonce","request","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","descriptionUrl","continuousPlayback","playerType","playerVersion","supportedApiFrameworks","ppid","JSON","stringify","iconsSupported","sessionId","manager","getNonce","getCurrentNonce","injectNonce","sep","base","sendPlaybackStart","sendPlaybackEnd","sendAdClick","baseUrl","sendAdTouch","searchParams","enabled","trackingIngestConfig","DEFAULT_TRACKING_INGEST_CONFIG","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","ingestPlayerTracking","licenseKey","body","isTrackingIngestEnabled","method","Authorization","status","CTV_SESSION_STORAGE_KEY","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","resolveVastEnvironmentSignals","isCtv","platformLat","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","realDeviceId","readStoredDeviceId","deviceIdType","readStoredString","inferDeviceIdType","readStoredLimitAdTracking","dpid","getOrCreateStoredUuid","deviceTypeHint","resolveDeviceTypeHint","getOrCreateCtvSessionId","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","GAME_CONSOLE","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","readPersistentId","writePersistentId","createUuid","readCookie","localStorage","setItem","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","prefix","cookie","part","decodeURIComponent","slice","bytes","crypto","randomUUID","getRandomValues","seed","performanceNow","i","hex","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appId","appName","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","AiryTV","Android","webOS","amazon","Boolean","result","readBridgeBoolean","normalizeBoolean","getItem","cachedBrowserId","config","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","screen","vendor","memory","deviceMemory","hardwareConcurrency","screenInfo","availWidth","availHeight","orientation","pixelDepth","deviceType","brand","os","isAndroid","isWebView","webosMatch","model","tizenMatch","tvMatch","androidModelMatch","outerHeight","outerWidth","isWebApp","matchMedia","matches","standalone","angle","domain","path","pathname","languages","cookieEnabled","referrer","join","doNotTrack","sha256Hex","input","subtle","digest","Uint8Array","TextEncoder","utf8","unescape","buffer","charCodeAt","encodedData","hashBuffer","hash","char","resolvePlayerIdentitySeed","clientInfo","persistedId","fallbackHash","timestamp","padEnd","nativeDeviceId","getBrowserID","canPublish","buildPlayerMetricEvent","flags","playerId","captureAt","ad_loaded","ad_detect","adLoaded","adDetect","input_stream_type","sendInitialTracking","metricEvent","events","sendAdDetectTracking","adDetectInfo","sendHeartbeat","adLoadedInfo","sendAdImpressionTracking","adImpressionInfo","player_id","ad_url","adUrl","capture_at","heartbeatData","parseQueryString","URLSearchParamsPolyfill","init","query","cleanQuery","param","decodedKey","safeDecodeURIComponent","decodedValue","str","append","params","getAll","callback","TextEncoderPolyfill","encoding","encode","charcode","polyfillPromiseFinally","constructor","then","polyfillStringStartsWith","polyfillObjectAssign","assign","sources","TypeError","nextSource","nextKey","polyfillArrayFrom","arrayLike","mapFn","len","items","search","pos","polyfillStringIncludes","initializePolyfills","polyfillStringEndsWith","polyfillURLSearchParams","polyfillTextEncoder","UNEXPANDED_MACRO_PATTERN","INVALID_VAST_PARAM_KEY","EXAMPLE_COM_URL","CTV_UNSUPPORTED_PARAMS"],"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/ui/StormcloudVideoPlayer.tsx\nvar StormcloudVideoPlayer_exports = {};\n__export(StormcloudVideoPlayer_exports, {\n StormcloudVideoPlayerComponent: () => StormcloudVideoPlayerComponent\n});\nmodule.exports = __toCommonJS(StormcloudVideoPlayer_exports);\nvar import_react = __toESM(require(\"react\"), 1);\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/ui/StormcloudVideoPlayer.tsx\nvar import_fa = require(\"react-icons/fa\");\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar ExpandIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 4H4v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 9V4h-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 20h5v-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 15v5h5\" })\n ]\n }\n);\nvar CompressIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 9h5V4\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 4v5h5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 15h-5v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 20v-5H4\" })\n ]\n }\n);\nvar CRITICAL_PROPS = [\n \"src\",\n \"allowNativeHls\",\n \"isLiveStream\",\n \"licenseKey\",\n \"isVmap\",\n \"vmapUrl\",\n \"lowLatencyMode\",\n \"driftToleranceMs\",\n \"vastMode\",\n \"ctvAdRequest\"\n];\nvar CONTROLS_HIDE_DELAY = 3e3;\nvar DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;\nvar StormcloudVideoPlayerComponent = import_react.default.memo(\n (props) => {\n const {\n src,\n autoplay,\n muted,\n lowLatencyMode,\n allowNativeHls,\n isLiveStream,\n driftToleranceMs,\n immediateManifestAds,\n debugAdTiming,\n showCustomControls,\n hideLoadingIndicator,\n onVolumeToggle,\n onFullscreenToggle,\n onControlClick,\n onReady,\n wrapperClassName,\n wrapperStyle,\n className,\n style,\n controls,\n playsInline,\n preload,\n poster,\n children,\n licenseKey,\n vastMode,\n vastTagUrl,\n isVmap,\n vmapUrl,\n minSegmentsBeforePlay,\n ctvAdRequest,\n programTitle,\n ...restVideoAttrs\n } = props;\n const videoRef = (0, import_react.useRef)(null);\n const playerRef = (0, import_react.useRef)(null);\n const bufferingTimeoutRef = (0, import_react.useRef)(null);\n const controlsTimerRef = (0, import_react.useRef)(null);\n const wrapperRef = (0, import_react.useRef)(null);\n const [adStatus, setAdStatus] = import_react.default.useState({ showAds: false, currentIndex: 0, totalAds: 0, remainingSeconds: 0 });\n const [shouldShowNativeControls, setShouldShowNativeControls] = import_react.default.useState(true);\n const [isMuted2, setIsMuted] = import_react.default.useState(false);\n const [isFullscreen2, setIsFullscreen] = import_react.default.useState(false);\n const [isPlaying, setIsPlaying] = import_react.default.useState(false);\n const [currentTime, setCurrentTime] = import_react.default.useState(0);\n const [duration, setDuration] = import_react.default.useState(0);\n const [volume, setVolume2] = import_react.default.useState(1);\n const [playbackRate, setPlaybackRate] = import_react.default.useState(1);\n const [showVolumeSlider, setShowVolumeSlider] = import_react.default.useState(false);\n const [showSpeedMenu, setShowSpeedMenu] = import_react.default.useState(false);\n const [isLoading, setIsLoading] = import_react.default.useState(true);\n const [isBuffering, setIsBuffering] = import_react.default.useState(false);\n const [showCenterPlay, setShowCenterPlay] = import_react.default.useState(false);\n const [showLicenseWarning, setShowLicenseWarning] = import_react.default.useState(false);\n const [controlsVisible, setControlsVisible] = import_react.default.useState(true);\n const [viewportWidth, setViewportWidth] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerWidth : 1920\n );\n const [isPortrait, setIsPortrait] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerHeight > window.innerWidth : false\n );\n const [playerAspectRatio, setPlayerAspectRatio] = import_react.default.useState(\n DEFAULT_PLAYER_ASPECT_RATIO\n );\n const getResponsiveScale = () => {\n if (viewportWidth < 480) return 0.7;\n if (viewportWidth < 768) return 0.8;\n if (viewportWidth < 1024) return 0.9;\n return 1;\n };\n const responsiveScale = getResponsiveScale();\n const resetControlsTimer = (0, import_react.useCallback)(() => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n setControlsVisible(true);\n controlsTimerRef.current = window.setTimeout(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, CONTROLS_HIDE_DELAY);\n }, [showVolumeSlider, showSpeedMenu]);\n const handleWrapperMouseMove = (0, import_react.useCallback)(() => {\n resetControlsTimer();\n }, [resetControlsTimer]);\n const handleWrapperMouseLeave = (0, import_react.useCallback)(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, [showVolumeSlider, showSpeedMenu]);\n const formatTime = (seconds) => {\n if (!isFinite(seconds)) return \"0:00:00\";\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor(seconds % 3600 / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n };\n const handlePlayPause = () => {\n if (videoRef.current) {\n if (videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n } else {\n videoRef.current.pause();\n setShowCenterPlay(true);\n }\n }\n resetControlsTimer();\n };\n const handleCenterPlayClick = () => {\n if (videoRef.current && videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n }\n };\n const handleTimelineSeek = (e) => {\n if (videoRef.current && duration > 0 && isFinite(duration)) {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, clickX / rect.width));\n const newTime = progress * duration;\n if (isFinite(newTime) && newTime >= 0 && newTime <= duration) {\n videoRef.current.currentTime = newTime;\n }\n }\n resetControlsTimer();\n };\n const handleVolumeChange = (newVolume) => {\n if (playerRef.current && isFinite(newVolume)) {\n const clampedVolume = Math.max(0, Math.min(1, newVolume));\n playerRef.current.setVolume(clampedVolume);\n }\n };\n const handlePlaybackRateChange = (rate) => {\n if (videoRef.current && isFinite(rate) && rate > 0) {\n videoRef.current.playbackRate = rate;\n }\n setShowSpeedMenu(false);\n };\n const isHlsStream = src?.toLowerCase().includes(\".m3u8\") || src?.toLowerCase().includes(\"/hls/\");\n const isLiveUiMode = isLiveStream === true;\n const shouldShowEnhancedControls = showCustomControls && (isHlsStream ? !isLiveUiMode : true);\n const criticalPropsKey = (0, import_react.useMemo)(() => {\n return CRITICAL_PROPS.map((prop) => `${prop}:${props[prop]}`).join(\"|\");\n }, [\n src,\n allowNativeHls,\n isLiveStream,\n licenseKey,\n isVmap,\n vmapUrl,\n lowLatencyMode,\n driftToleranceMs,\n vastMode\n ]);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\") return;\n const el = videoRef.current;\n if (!el || !src) return;\n if (!licenseKey) {\n setShowLicenseWarning(true);\n setIsLoading(false);\n console.warn(\n \"StormcloudVideoPlayer: License key is required but not provided. Please set the licenseKey prop to use the player.\"\n );\n return;\n }\n setShowLicenseWarning(false);\n if (debugAdTiming) {\n console.log(\"[StormcloudUI] Initializing player, isLoading=true\");\n }\n if (playerRef.current) {\n try {\n playerRef.current.destroy();\n } catch {\n }\n playerRef.current = null;\n }\n const cfg = {\n src,\n videoElement: el\n };\n if (autoplay !== void 0) cfg.autoplay = autoplay;\n if (muted !== void 0) cfg.muted = muted;\n if (lowLatencyMode !== void 0) cfg.lowLatencyMode = lowLatencyMode;\n if (allowNativeHls !== void 0) cfg.allowNativeHls = allowNativeHls;\n if (isLiveStream !== void 0) cfg.isLiveStream = isLiveStream;\n if (driftToleranceMs !== void 0)\n cfg.driftToleranceMs = driftToleranceMs;\n if (immediateManifestAds !== void 0)\n cfg.immediateManifestAds = immediateManifestAds;\n if (debugAdTiming !== void 0) cfg.debugAdTiming = debugAdTiming;\n if (showCustomControls !== void 0)\n cfg.showCustomControls = showCustomControls;\n if (onVolumeToggle !== void 0) cfg.onVolumeToggle = onVolumeToggle;\n if (onFullscreenToggle !== void 0)\n cfg.onFullscreenToggle = onFullscreenToggle;\n if (onControlClick !== void 0) cfg.onControlClick = onControlClick;\n if (licenseKey !== void 0) cfg.licenseKey = licenseKey;\n if (vastMode !== void 0) cfg.vastMode = vastMode;\n if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;\n if (isVmap !== void 0) cfg.isVmap = isVmap;\n if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;\n if (minSegmentsBeforePlay !== void 0)\n cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;\n if (ctvAdRequest !== void 0) cfg.ctvAdRequest = ctvAdRequest;\n if (programTitle !== void 0) cfg.programTitle = programTitle;\n const player = new StormcloudVideoPlayer(cfg);\n playerRef.current = player;\n player.load().then(() => {\n const showNative = player.shouldShowNativeControls();\n setShouldShowNativeControls(showNative);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Player loaded successfully, waiting for video ready\"\n );\n }\n onReady?.(player);\n }).catch((error) => {\n console.error(\n \"StormcloudVideoPlayer: Failed to load player:\",\n error\n );\n setIsLoading(false);\n onReady?.(player);\n });\n return () => {\n try {\n player.destroy();\n } catch {\n }\n playerRef.current = null;\n };\n }, [criticalPropsKey]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n try {\n if (autoplay !== void 0 && playerRef.current.videoElement) {\n playerRef.current.videoElement.autoplay = autoplay;\n }\n if (muted !== void 0 && !playerRef.current.isShowingAds()) {\n playerRef.current.setMuted(muted);\n }\n } catch (error) {\n console.warn(\"Failed to update player properties:\", error);\n }\n }, [autoplay, muted]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n const checkAdStatus = () => {\n if (playerRef.current) {\n const showAdsFromMethod = playerRef.current.isShowingAds();\n const showAdsFromAttribute = videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n const showAds = showAdsFromMethod || showAdsFromAttribute;\n const currentIndex = playerRef.current.getCurrentAdIndex();\n const totalAds = playerRef.current.getTotalAdsInBreak();\n const remainingMs = playerRef.current.getAdRemainingMs();\n const remainingSeconds = showAds ? Math.max(0, Math.ceil(remainingMs / 1e3)) : 0;\n setAdStatus((prev) => {\n if (prev.showAds !== showAds || prev.currentIndex !== currentIndex || prev.totalAds !== totalAds || prev.remainingSeconds !== remainingSeconds) {\n if (showAds && !prev.showAds) {\n setShowCenterPlay(false);\n }\n return { showAds, currentIndex, totalAds, remainingSeconds };\n }\n return prev;\n });\n }\n };\n const interval = setInterval(checkAdStatus, 50);\n return () => clearInterval(interval);\n }, []);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\" || !playerRef.current) return;\n const handleResize = () => {\n if (playerRef.current && videoRef.current) {\n if (typeof playerRef.current.resize === \"function\") {\n playerRef.current.resize();\n }\n }\n setViewportWidth(window.innerWidth);\n setIsPortrait(window.innerHeight > window.innerWidth);\n };\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current || !videoRef.current) return;\n const updateStates = () => {\n if (playerRef.current && videoRef.current) {\n setIsMuted(playerRef.current.isMuted());\n setIsPlaying(!videoRef.current.paused);\n const currentTimeValue = videoRef.current.currentTime;\n setCurrentTime(isFinite(currentTimeValue) ? currentTimeValue : 0);\n const durationValue = videoRef.current.duration;\n setDuration(isFinite(durationValue) ? durationValue : 0);\n const volumeValue = playerRef.current.getVolume();\n setVolume2(\n isFinite(volumeValue) ? Math.max(0, Math.min(1, volumeValue)) : 1\n );\n const rateValue = videoRef.current.playbackRate;\n setPlaybackRate(\n isFinite(rateValue) && rateValue > 0 ? rateValue : 1\n );\n }\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n const interval = setInterval(updateStates, 200);\n const handleFullscreenChange = () => {\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () => {\n clearInterval(interval);\n document.removeEventListener(\n \"fullscreenchange\",\n handleFullscreenChange\n );\n };\n }, []);\n (0, import_react.useEffect)(() => {\n if (!videoRef.current) return;\n const handleLoadedMetadata = () => {\n const video2 = videoRef.current;\n if (video2) {\n if (video2.videoWidth > 0 && video2.videoHeight > 0) {\n setPlayerAspectRatio(video2.videoWidth / video2.videoHeight);\n }\n void video2.offsetHeight;\n }\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadedmetadata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadedData = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadeddata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadStart = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadstart, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleCanPlay = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplay, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleCanPlayThrough = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplaythrough, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleWaiting = () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n }\n bufferingTimeoutRef.current = window.setTimeout(() => {\n setIsBuffering(true);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video buffering detected (after 300ms delay), readyState:\",\n videoRef.current?.readyState,\n \"- showing spinner, isBuffering=true\"\n );\n }\n }, 300);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: waiting, readyState:\",\n videoRef.current?.readyState,\n \"- buffering delay started (300ms)\"\n );\n }\n };\n const handlePlaying = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n setShowCenterPlay(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: playing, readyState:\",\n videoRef.current?.readyState,\n \"- playback started, isLoading=false, isBuffering=false\"\n );\n }\n };\n const handlePause = () => {\n const isAdActive = playerRef.current?.isShowingAds() || videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n if (playerRef.current && !isAdActive) {\n setShowCenterPlay(true);\n } else {\n setShowCenterPlay(false);\n }\n };\n const handleEnded = () => {\n setShowCenterPlay(true);\n };\n const video = videoRef.current;\n video.addEventListener(\"loadstart\", handleLoadStart);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.addEventListener(\"canplay\", handleCanPlay);\n video.addEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.addEventListener(\"waiting\", handleWaiting);\n video.addEventListener(\"playing\", handlePlaying);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n if (video.paused) {\n setShowCenterPlay(true);\n }\n return () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n video.removeEventListener(\"loadstart\", handleLoadStart);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n video.removeEventListener(\"canplay\", handleCanPlay);\n video.removeEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.removeEventListener(\"waiting\", handleWaiting);\n video.removeEventListener(\"playing\", handlePlaying);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, [debugAdTiming]);\n (0, import_react.useEffect)(() => {\n setPlayerAspectRatio(DEFAULT_PLAYER_ASPECT_RATIO);\n }, [src]);\n (0, import_react.useEffect)(() => {\n return () => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n };\n }, []);\n const progressPercent = duration > 0 ? currentTime / duration * 100 : 0;\n const VolumeIcon = isMuted2 || volume === 0 ? import_fa.FaVolumeMute : volume < 0.5 ? import_fa.FaVolumeDown : import_fa.FaVolumeUp;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"style\", { children: `\n @keyframes sc-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes sc-loading-glow {\n 0%, 100% { opacity: 0.85; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.05); }\n }\n @keyframes sc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n }\n @keyframes sc-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .sc-wrapper:fullscreen,\n .sc-wrapper:has(*:fullscreen) {\n border-radius: 0 !important;\n box-shadow: none !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n z-index: 999999 !important;\n background: #000 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .sc-ctrl-btn {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n padding: 8px;\n transition: background 0.15s ease, opacity 0.15s ease;\n opacity: 0.9;\n }\n .sc-ctrl-btn:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.1);\n }\n .sc-ctrl-btn:active {\n opacity: 0.7;\n }\n .sc-controls-bar {\n transition: opacity 0.35s ease, transform 0.35s ease;\n }\n .sc-progress-track:hover .sc-progress-thumb {\n transform: translate(-50%, -50%) scale(1) !important;\n }\n .sc-loading-hidden .sc-loading-indicator {\n display: none !important;\n }\n ` }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n ref: wrapperRef,\n className: `sc-wrapper ${wrapperClassName || \"\"}`,\n onMouseMove: handleWrapperMouseMove,\n onMouseLeave: handleWrapperMouseLeave,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: isFullscreen2 ? \"fixed\" : \"relative\",\n top: isFullscreen2 ? 0 : void 0,\n left: isFullscreen2 ? 0 : void 0,\n overflow: \"hidden\",\n width: isFullscreen2 ? \"100vw\" : \"100%\",\n height: isFullscreen2 ? \"100vh\" : \"auto\",\n minHeight: isFullscreen2 ? \"100vh\" : \"auto\",\n aspectRatio: isFullscreen2 ? void 0 : playerAspectRatio,\n maxWidth: isFullscreen2 ? \"100vw\" : \"100%\",\n maxHeight: isFullscreen2 ? \"100vh\" : \"none\",\n zIndex: isFullscreen2 ? 999999 : void 0,\n backgroundColor: \"#000\",\n borderRadius: isFullscreen2 ? 0 : void 0,\n boxShadow: isFullscreen2 ? \"none\" : void 0,\n ...wrapperStyle\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"video\",\n {\n ref: videoRef,\n className,\n style: {\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: isFullscreen2 ? \"100%\" : \"none\",\n objectFit: isFullscreen2 ? \"cover\" : \"contain\",\n backgroundColor: \"#000\",\n aspectRatio: isFullscreen2 ? \"unset\" : void 0,\n ...style\n },\n controls: shouldShowNativeControls && controls && !showCustomControls,\n playsInline,\n preload,\n poster,\n ...restVideoAttrs,\n children\n }\n ),\n (isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-loading-indicator\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 20,\n width: `${Math.max(34, 38 * responsiveScale)}px`,\n height: `${Math.max(34, 38 * responsiveScale)}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n animation: \"sc-loading-glow 1.4s ease-in-out infinite\",\n filter: \"drop-shadow(0 6px 14px rgba(0, 0, 0, 0.55))\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n border: \"3px solid rgba(255, 255, 255, 0.25)\",\n borderTopColor: \"#ff0000\",\n borderRightColor: \"rgba(255, 255, 255, 0.85)\",\n animation: \"sc-spin 0.8s linear infinite\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"7px\",\n height: \"7px\",\n borderRadius: \"50%\",\n background: \"#ff0000\",\n boxShadow: \"0 0 10px rgba(255, 0, 0, 0.65)\"\n }\n }\n )\n ]\n }\n ),\n showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 25,\n background: \"rgba(220, 38, 38, 0.92)\",\n backdropFilter: \"blur(24px)\",\n color: \"white\",\n padding: \"28px 36px\",\n borderRadius: \"14px\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n boxShadow: \"0 24px 64px rgba(0, 0, 0, 0.5)\",\n textAlign: \"center\",\n maxWidth: \"400px\",\n margin: \"0 16px\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { fontSize: \"18px\", fontWeight: \"700\", marginBottom: \"10px\", letterSpacing: \"-0.02em\" }, children: \"License Key Required\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { fontSize: \"13px\", lineHeight: \"1.6\", color: \"rgba(255, 255, 255, 0.85)\" }, children: [\n \"Please provide a valid license key to use the Stormcloud Video Player.\",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"br\", {}),\n \"Contact your administrator for licensing information.\"\n ] })\n ]\n }\n ),\n adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${12 * responsiveScale}px`,\n left: `${12 * responsiveScale}px`,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n pointerEvents: \"none\",\n animation: \"sc-fade-in 0.3s ease\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n background: \"rgba(234, 179, 8, 0.95)\",\n color: \"#111\",\n padding: `${4 * responsiveScale}px ${12 * responsiveScale}px`,\n borderRadius: \"6px\",\n fontSize: `${11 * responsiveScale}px`,\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n boxShadow: \"0 2px 12px rgba(234, 179, 8, 0.35)\"\n },\n children: `Ad ${Math.max(1, adStatus.currentIndex)}`\n }\n )\n }\n ),\n showCenterPlay && !isLoading && !isBuffering && !showLicenseWarning && !adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: handleCenterPlayClick,\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 15,\n cursor: \"pointer\",\n background: \"rgba(0, 0, 0, 0.55)\",\n backdropFilter: \"blur(8px)\",\n borderRadius: \"50%\",\n width: `${92 * responsiveScale}px`,\n height: `${92 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.2s ease, transform 0.2s ease\",\n animation: \"sc-fade-in 0.2s ease\"\n },\n onMouseEnter: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.72)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1.06)\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.55)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1)\";\n },\n title: \"Play\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n import_fa.FaPlay,\n {\n size: Math.max(24, 32 * responsiveScale),\n color: \"white\",\n style: { marginLeft: \"4px\" }\n }\n )\n }\n ),\n shouldShowEnhancedControls && !showLicenseWarning ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n background: \"linear-gradient(0deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.35) 60%, transparent 100%)\",\n padding: `${20 * responsiveScale}px ${12 * responsiveScale}px ${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible || adStatus.showAds ? 1 : 0,\n transform: controlsVisible || adStatus.showAds ? \"translateY(0)\" : \"translateY(6px)\",\n pointerEvents: controlsVisible || adStatus.showAds ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-progress-track\",\n style: {\n width: \"100%\",\n height: \"3px\",\n background: \"rgba(255, 255, 255, 0.2)\",\n borderRadius: \"1.5px\",\n marginBottom: `${8 * responsiveScale}px`,\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"height 0.1s ease\"\n },\n onClick: handleTimelineSeek,\n onMouseEnter: (e) => {\n e.currentTarget.style.height = \"5px\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.height = \"3px\";\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"1.5px\",\n width: `${progressPercent}%`,\n transition: \"width 0.15s linear\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n className: \"sc-progress-thumb\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%) scale(0)\",\n width: \"13px\",\n height: \"13px\",\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 4px rgba(0, 0, 0, 0.3)\",\n transition: \"transform 0.1s ease, left 0.15s linear\"\n }\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"white\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: handlePlayPause,\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isPlaying ? \"Pause\" : \"Play\",\n children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPause, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPlay, { size: Math.max(14, 18 * responsiveScale), style: { marginLeft: \"2px\" } })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n paddingRight: `${6 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${8 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"Roboto, 'Segoe UI', Arial, sans-serif\",\n color: \"rgba(255, 255, 255, 0.9)\",\n display: viewportWidth < 480 ? \"none\" : \"block\",\n fontVariantNumeric: \"tabular-nums\",\n userSelect: \"none\",\n marginLeft: `${4 * responsiveScale}px`\n },\n children: [\n formatTime(currentTime),\n \" \",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"span\", { style: { color: \"rgba(255,255,255,0.5)\" }, children: \"/\" }),\n \" \",\n formatTime(duration)\n ]\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { position: \"relative\", display: viewportWidth < 600 ? \"none\" : \"block\" }, children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n setShowSpeedMenu(!showSpeedMenu);\n resetControlsTimer();\n },\n style: {\n padding: `${6 * responsiveScale}px ${10 * responsiveScale}px`,\n borderRadius: `${6 * responsiveScale}px`,\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"'SF Mono', 'Cascadia Code', monospace\",\n fontWeight: \"600\",\n minHeight: `${32 * responsiveScale}px`\n },\n title: \"Playback Speed\",\n children: [\n playbackRate,\n \"x\"\n ]\n }\n ),\n showSpeedMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"8px\",\n background: \"rgba(0, 0, 0, 0.8)\",\n backdropFilter: \"blur(24px)\",\n WebkitBackdropFilter: \"blur(24px)\",\n borderRadius: \"10px\",\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n minWidth: \"80px\",\n boxShadow: \"0 12px 40px rgba(0, 0, 0, 0.5)\",\n animation: \"sc-fade-in 0.15s ease\"\n },\n children: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2].map((speed) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n onClick: () => handlePlaybackRateChange(speed),\n style: {\n display: \"block\",\n width: \"100%\",\n padding: `${8 * responsiveScale}px ${14 * responsiveScale}px`,\n background: playbackRate === speed ? \"rgba(255, 255, 255, 0.12)\" : \"transparent\",\n border: \"none\",\n color: playbackRate === speed ? \"#fff\" : \"rgba(255, 255, 255, 0.7)\",\n cursor: \"pointer\",\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Mono', monospace\",\n fontWeight: playbackRate === speed ? \"700\" : \"500\",\n textAlign: \"center\",\n transition: \"background 0.15s ease, color 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.target.style.color = \"#fff\";\n }\n },\n onMouseLeave: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"transparent\";\n e.target.style.color = \"rgba(255, 255, 255, 0.7)\";\n }\n },\n children: [\n speed,\n \"x\"\n ]\n },\n speed\n ))\n }\n )\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ]\n }\n )\n ]\n }\n ) : showCustomControls && !showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${10 * responsiveScale}px`,\n left: `${10 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transition: \"opacity 0.35s ease\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: \"#ff3b30\",\n animation: \"sc-pulse 1.5s ease-in-out infinite\",\n flexShrink: 0\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"span\",\n {\n style: {\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Pro Display', 'Segoe UI', Arial, sans-serif\",\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n color: \"#fff\",\n textShadow: \"0 1px 3px rgba(0,0,0,0.6)\",\n userSelect: \"none\"\n },\n children: \"LIVE\"\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: `${10 * responsiveScale}px`,\n right: `${10 * responsiveScale}px`,\n display: \"flex\",\n flexDirection: isPortrait ? \"column\" : \"row\",\n alignItems: isPortrait ? \"flex-end\" : \"center\",\n gap: `${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transform: controlsVisible ? \"translateY(0)\" : \"translateY(4px)\",\n pointerEvents: controlsVisible ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n background: \"rgba(0, 0, 0, 0.6)\",\n borderRadius: `${18 * responsiveScale}px`,\n padding: \"2px\",\n paddingRight: `${8 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${10 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`,\n background: \"rgba(0, 0, 0, 0.6)\"\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ] }),\n onControlClick && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: onControlClick,\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n cursor: \"pointer\"\n }\n }\n )\n ]\n }\n )\n ] });\n },\n (prevProps, nextProps) => {\n for (const prop of CRITICAL_PROPS) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const uiProps = [\n \"autoplay\",\n \"muted\",\n \"controls\",\n \"showCustomControls\",\n \"className\",\n \"style\",\n \"wrapperClassName\",\n \"wrapperStyle\",\n \"playsInline\",\n \"preload\",\n \"poster\",\n \"children\"\n ];\n for (const prop of uiProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const callbackProps = [\n \"onReady\",\n \"onVolumeToggle\",\n \"onFullscreenToggle\",\n \"onControlClick\"\n ];\n for (const prop of callbackProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n return true;\n }\n);\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n StormcloudVideoPlayerComponent\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\ui\\StormcloudVideoPlayer.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","StormcloudVideoPlayer_exports","StormcloudVideoPlayerComponent","module","exports","import_react","require","import_hls","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","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","url","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","file","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","video","document","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","window","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","default","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","hls","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","import_fa","import_jsx_runtime","ExpandIcon","jsxs","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","focusable","children","jsx","CompressIcon","CRITICAL_PROPS","CONTROLS_HIDE_DELAY","DEFAULT_PLAYER_ASPECT_RATIO","memo","props","hideLoadingIndicator","onVolumeToggle","onFullscreenToggle","onControlClick","wrapperClassName","wrapperStyle","className","controls","preload","poster","restVideoAttrs","videoRef","useRef","playerRef","bufferingTimeoutRef","controlsTimerRef","wrapperRef","useState","currentIndex","totalAds","remainingSeconds","adStatus","setAdStatus","setShouldShowNativeControls","isMuted2","setIsMuted","isFullscreen2","setIsFullscreen","setIsPlaying","setCurrentTime","setDuration","setVolume2","playbackRate","setPlaybackRate","showVolumeSlider","setShowVolumeSlider","showSpeedMenu","setShowSpeedMenu","isLoading","setIsLoading","isBuffering","setIsBuffering","showCenterPlay","setShowCenterPlay","showLicenseWarning","setShowLicenseWarning","controlsVisible","setControlsVisible","innerWidth","viewportWidth","setViewportWidth","innerHeight","isPortrait","setIsPortrait","playerAspectRatio","setPlayerAspectRatio","getResponsiveScale","responsiveScale","resetControlsTimer","useCallback","current","handleWrapperMouseMove","handleWrapperMouseLeave","formatTime","handlePlayPause","hasValidSource","currentSrc","handleCenterPlayClick","handleTimelineSeek","rect","currentTarget","getBoundingClientRect","clickX","clientX","newTime","handleVolumeChange","newVolume","handlePlaybackRateChange","rate","isHlsStream","isLiveUiMode","shouldShowEnhancedControls","criticalPropsKey","useMemo","prop","useEffect","player","showNative","checkAdStatus","showAdsFromMethod","showAdsFromAttribute","ceil","prev","interval","handleResize","updateStates","currentTimeValue","durationValue","volumeValue","rateValue","handleLoadedMetadata","video2","handleLoadedData","handleLoadStart","handleCanPlay","handleCanPlayThrough","handleWaiting","handlePlaying","handlePause","isAdActive","handleEnded","progressPercent","VolumeIcon","FaVolumeMute","FaVolumeDown","FaVolumeUp","Fragment","ref","onMouseMove","onMouseLeave","overflow","minHeight","aspectRatio","maxWidth","maxHeight","borderRadius","boxShadow","transform","animation","inset","border","borderTopColor","borderRightColor","background","backdropFilter","color","padding","textAlign","margin","fontSize","fontWeight","marginBottom","letterSpacing","lineHeight","gap","textTransform","cursor","onMouseEnter","FaPlay","marginLeft","minWidth","FaPause","paddingRight","paddingLeft","onMouseDown","preventDefault","move","ev","r2","up","stopPropagation","fontFamily","fontVariantNumeric","userSelect","WebkitBackdropFilter","speed","flexShrink","textShadow","flexDirection","prevProps","nextProps","uiProps","callbackProps"],"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/ui/StormcloudVideoPlayer.tsx\nvar StormcloudVideoPlayer_exports = {};\n__export(StormcloudVideoPlayer_exports, {\n StormcloudVideoPlayerComponent: () => StormcloudVideoPlayerComponent\n});\nmodule.exports = __toCommonJS(StormcloudVideoPlayer_exports);\nvar import_react = __toESM(require(\"react\"), 1);\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/ui/StormcloudVideoPlayer.tsx\nvar import_fa = require(\"react-icons/fa\");\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar ExpandIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 4H4v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 9V4h-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 20h5v-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 15v5h5\" })\n ]\n }\n);\nvar CompressIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 9h5V4\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 4v5h5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 15h-5v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 20v-5H4\" })\n ]\n }\n);\nvar CRITICAL_PROPS = [\n \"src\",\n \"allowNativeHls\",\n \"isLiveStream\",\n \"licenseKey\",\n \"isVmap\",\n \"vmapUrl\",\n \"lowLatencyMode\",\n \"driftToleranceMs\",\n \"vastMode\",\n \"ctvAdRequest\"\n];\nvar CONTROLS_HIDE_DELAY = 3e3;\nvar DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;\nvar StormcloudVideoPlayerComponent = import_react.default.memo(\n (props) => {\n const {\n src,\n autoplay,\n muted,\n lowLatencyMode,\n allowNativeHls,\n isLiveStream,\n driftToleranceMs,\n immediateManifestAds,\n debugAdTiming,\n showCustomControls,\n hideLoadingIndicator,\n onVolumeToggle,\n onFullscreenToggle,\n onControlClick,\n onReady,\n wrapperClassName,\n wrapperStyle,\n className,\n style,\n controls,\n playsInline,\n preload,\n poster,\n children,\n licenseKey,\n vastMode,\n vastTagUrl,\n isVmap,\n vmapUrl,\n minSegmentsBeforePlay,\n ctvAdRequest,\n programTitle,\n channelName,\n ...restVideoAttrs\n } = props;\n const videoRef = (0, import_react.useRef)(null);\n const playerRef = (0, import_react.useRef)(null);\n const bufferingTimeoutRef = (0, import_react.useRef)(null);\n const controlsTimerRef = (0, import_react.useRef)(null);\n const wrapperRef = (0, import_react.useRef)(null);\n const [adStatus, setAdStatus] = import_react.default.useState({ showAds: false, currentIndex: 0, totalAds: 0, remainingSeconds: 0 });\n const [shouldShowNativeControls, setShouldShowNativeControls] = import_react.default.useState(true);\n const [isMuted2, setIsMuted] = import_react.default.useState(false);\n const [isFullscreen2, setIsFullscreen] = import_react.default.useState(false);\n const [isPlaying, setIsPlaying] = import_react.default.useState(false);\n const [currentTime, setCurrentTime] = import_react.default.useState(0);\n const [duration, setDuration] = import_react.default.useState(0);\n const [volume, setVolume2] = import_react.default.useState(1);\n const [playbackRate, setPlaybackRate] = import_react.default.useState(1);\n const [showVolumeSlider, setShowVolumeSlider] = import_react.default.useState(false);\n const [showSpeedMenu, setShowSpeedMenu] = import_react.default.useState(false);\n const [isLoading, setIsLoading] = import_react.default.useState(true);\n const [isBuffering, setIsBuffering] = import_react.default.useState(false);\n const [showCenterPlay, setShowCenterPlay] = import_react.default.useState(false);\n const [showLicenseWarning, setShowLicenseWarning] = import_react.default.useState(false);\n const [controlsVisible, setControlsVisible] = import_react.default.useState(true);\n const [viewportWidth, setViewportWidth] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerWidth : 1920\n );\n const [isPortrait, setIsPortrait] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerHeight > window.innerWidth : false\n );\n const [playerAspectRatio, setPlayerAspectRatio] = import_react.default.useState(\n DEFAULT_PLAYER_ASPECT_RATIO\n );\n const getResponsiveScale = () => {\n if (viewportWidth < 480) return 0.7;\n if (viewportWidth < 768) return 0.8;\n if (viewportWidth < 1024) return 0.9;\n return 1;\n };\n const responsiveScale = getResponsiveScale();\n const resetControlsTimer = (0, import_react.useCallback)(() => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n setControlsVisible(true);\n controlsTimerRef.current = window.setTimeout(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, CONTROLS_HIDE_DELAY);\n }, [showVolumeSlider, showSpeedMenu]);\n const handleWrapperMouseMove = (0, import_react.useCallback)(() => {\n resetControlsTimer();\n }, [resetControlsTimer]);\n const handleWrapperMouseLeave = (0, import_react.useCallback)(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, [showVolumeSlider, showSpeedMenu]);\n const formatTime = (seconds) => {\n if (!isFinite(seconds)) return \"0:00:00\";\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor(seconds % 3600 / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n };\n const handlePlayPause = () => {\n if (videoRef.current) {\n if (videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n } else {\n videoRef.current.pause();\n setShowCenterPlay(true);\n }\n }\n resetControlsTimer();\n };\n const handleCenterPlayClick = () => {\n if (videoRef.current && videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n }\n };\n const handleTimelineSeek = (e) => {\n if (videoRef.current && duration > 0 && isFinite(duration)) {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, clickX / rect.width));\n const newTime = progress * duration;\n if (isFinite(newTime) && newTime >= 0 && newTime <= duration) {\n videoRef.current.currentTime = newTime;\n }\n }\n resetControlsTimer();\n };\n const handleVolumeChange = (newVolume) => {\n if (playerRef.current && isFinite(newVolume)) {\n const clampedVolume = Math.max(0, Math.min(1, newVolume));\n playerRef.current.setVolume(clampedVolume);\n }\n };\n const handlePlaybackRateChange = (rate) => {\n if (videoRef.current && isFinite(rate) && rate > 0) {\n videoRef.current.playbackRate = rate;\n }\n setShowSpeedMenu(false);\n };\n const isHlsStream = src?.toLowerCase().includes(\".m3u8\") || src?.toLowerCase().includes(\"/hls/\");\n const isLiveUiMode = isLiveStream === true;\n const shouldShowEnhancedControls = showCustomControls && (isHlsStream ? !isLiveUiMode : true);\n const criticalPropsKey = (0, import_react.useMemo)(() => {\n return CRITICAL_PROPS.map((prop) => `${prop}:${props[prop]}`).join(\"|\");\n }, [\n src,\n allowNativeHls,\n isLiveStream,\n licenseKey,\n isVmap,\n vmapUrl,\n lowLatencyMode,\n driftToleranceMs,\n vastMode\n ]);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\") return;\n const el = videoRef.current;\n if (!el || !src) return;\n if (!licenseKey) {\n setShowLicenseWarning(true);\n setIsLoading(false);\n console.warn(\n \"StormcloudVideoPlayer: License key is required but not provided. Please set the licenseKey prop to use the player.\"\n );\n return;\n }\n setShowLicenseWarning(false);\n if (debugAdTiming) {\n console.log(\"[StormcloudUI] Initializing player, isLoading=true\");\n }\n if (playerRef.current) {\n try {\n playerRef.current.destroy();\n } catch {\n }\n playerRef.current = null;\n }\n const cfg = {\n src,\n videoElement: el\n };\n if (autoplay !== void 0) cfg.autoplay = autoplay;\n if (muted !== void 0) cfg.muted = muted;\n if (lowLatencyMode !== void 0) cfg.lowLatencyMode = lowLatencyMode;\n if (allowNativeHls !== void 0) cfg.allowNativeHls = allowNativeHls;\n if (isLiveStream !== void 0) cfg.isLiveStream = isLiveStream;\n if (driftToleranceMs !== void 0)\n cfg.driftToleranceMs = driftToleranceMs;\n if (immediateManifestAds !== void 0)\n cfg.immediateManifestAds = immediateManifestAds;\n if (debugAdTiming !== void 0) cfg.debugAdTiming = debugAdTiming;\n if (showCustomControls !== void 0)\n cfg.showCustomControls = showCustomControls;\n if (onVolumeToggle !== void 0) cfg.onVolumeToggle = onVolumeToggle;\n if (onFullscreenToggle !== void 0)\n cfg.onFullscreenToggle = onFullscreenToggle;\n if (onControlClick !== void 0) cfg.onControlClick = onControlClick;\n if (licenseKey !== void 0) cfg.licenseKey = licenseKey;\n if (vastMode !== void 0) cfg.vastMode = vastMode;\n if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;\n if (isVmap !== void 0) cfg.isVmap = isVmap;\n if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;\n if (minSegmentsBeforePlay !== void 0)\n cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;\n if (ctvAdRequest !== void 0) cfg.ctvAdRequest = ctvAdRequest;\n if (programTitle !== void 0) cfg.programTitle = programTitle;\n if (channelName !== void 0) cfg.channelName = channelName;\n const player = new StormcloudVideoPlayer(cfg);\n playerRef.current = player;\n player.load().then(() => {\n const showNative = player.shouldShowNativeControls();\n setShouldShowNativeControls(showNative);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Player loaded successfully, waiting for video ready\"\n );\n }\n onReady?.(player);\n }).catch((error) => {\n console.error(\n \"StormcloudVideoPlayer: Failed to load player:\",\n error\n );\n setIsLoading(false);\n onReady?.(player);\n });\n return () => {\n try {\n player.destroy();\n } catch {\n }\n playerRef.current = null;\n };\n }, [criticalPropsKey]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n try {\n if (autoplay !== void 0 && playerRef.current.videoElement) {\n playerRef.current.videoElement.autoplay = autoplay;\n }\n if (muted !== void 0 && !playerRef.current.isShowingAds()) {\n playerRef.current.setMuted(muted);\n }\n } catch (error) {\n console.warn(\"Failed to update player properties:\", error);\n }\n }, [autoplay, muted]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n const checkAdStatus = () => {\n if (playerRef.current) {\n const showAdsFromMethod = playerRef.current.isShowingAds();\n const showAdsFromAttribute = videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n const showAds = showAdsFromMethod || showAdsFromAttribute;\n const currentIndex = playerRef.current.getCurrentAdIndex();\n const totalAds = playerRef.current.getTotalAdsInBreak();\n const remainingMs = playerRef.current.getAdRemainingMs();\n const remainingSeconds = showAds ? Math.max(0, Math.ceil(remainingMs / 1e3)) : 0;\n setAdStatus((prev) => {\n if (prev.showAds !== showAds || prev.currentIndex !== currentIndex || prev.totalAds !== totalAds || prev.remainingSeconds !== remainingSeconds) {\n if (showAds && !prev.showAds) {\n setShowCenterPlay(false);\n }\n return { showAds, currentIndex, totalAds, remainingSeconds };\n }\n return prev;\n });\n }\n };\n const interval = setInterval(checkAdStatus, 50);\n return () => clearInterval(interval);\n }, []);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\" || !playerRef.current) return;\n const handleResize = () => {\n if (playerRef.current && videoRef.current) {\n if (typeof playerRef.current.resize === \"function\") {\n playerRef.current.resize();\n }\n }\n setViewportWidth(window.innerWidth);\n setIsPortrait(window.innerHeight > window.innerWidth);\n };\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current || !videoRef.current) return;\n const updateStates = () => {\n if (playerRef.current && videoRef.current) {\n setIsMuted(playerRef.current.isMuted());\n setIsPlaying(!videoRef.current.paused);\n const currentTimeValue = videoRef.current.currentTime;\n setCurrentTime(isFinite(currentTimeValue) ? currentTimeValue : 0);\n const durationValue = videoRef.current.duration;\n setDuration(isFinite(durationValue) ? durationValue : 0);\n const volumeValue = playerRef.current.getVolume();\n setVolume2(\n isFinite(volumeValue) ? Math.max(0, Math.min(1, volumeValue)) : 1\n );\n const rateValue = videoRef.current.playbackRate;\n setPlaybackRate(\n isFinite(rateValue) && rateValue > 0 ? rateValue : 1\n );\n }\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n const interval = setInterval(updateStates, 200);\n const handleFullscreenChange = () => {\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () => {\n clearInterval(interval);\n document.removeEventListener(\n \"fullscreenchange\",\n handleFullscreenChange\n );\n };\n }, []);\n (0, import_react.useEffect)(() => {\n if (!videoRef.current) return;\n const handleLoadedMetadata = () => {\n const video2 = videoRef.current;\n if (video2) {\n if (video2.videoWidth > 0 && video2.videoHeight > 0) {\n setPlayerAspectRatio(video2.videoWidth / video2.videoHeight);\n }\n void video2.offsetHeight;\n }\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadedmetadata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadedData = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadeddata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadStart = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadstart, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleCanPlay = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplay, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleCanPlayThrough = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplaythrough, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleWaiting = () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n }\n bufferingTimeoutRef.current = window.setTimeout(() => {\n setIsBuffering(true);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video buffering detected (after 300ms delay), readyState:\",\n videoRef.current?.readyState,\n \"- showing spinner, isBuffering=true\"\n );\n }\n }, 300);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: waiting, readyState:\",\n videoRef.current?.readyState,\n \"- buffering delay started (300ms)\"\n );\n }\n };\n const handlePlaying = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n setShowCenterPlay(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: playing, readyState:\",\n videoRef.current?.readyState,\n \"- playback started, isLoading=false, isBuffering=false\"\n );\n }\n };\n const handlePause = () => {\n const isAdActive = playerRef.current?.isShowingAds() || videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n if (playerRef.current && !isAdActive) {\n setShowCenterPlay(true);\n } else {\n setShowCenterPlay(false);\n }\n };\n const handleEnded = () => {\n setShowCenterPlay(true);\n };\n const video = videoRef.current;\n video.addEventListener(\"loadstart\", handleLoadStart);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.addEventListener(\"canplay\", handleCanPlay);\n video.addEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.addEventListener(\"waiting\", handleWaiting);\n video.addEventListener(\"playing\", handlePlaying);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n if (video.paused) {\n setShowCenterPlay(true);\n }\n return () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n video.removeEventListener(\"loadstart\", handleLoadStart);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n video.removeEventListener(\"canplay\", handleCanPlay);\n video.removeEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.removeEventListener(\"waiting\", handleWaiting);\n video.removeEventListener(\"playing\", handlePlaying);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, [debugAdTiming]);\n (0, import_react.useEffect)(() => {\n setPlayerAspectRatio(DEFAULT_PLAYER_ASPECT_RATIO);\n }, [src]);\n (0, import_react.useEffect)(() => {\n return () => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n };\n }, []);\n const progressPercent = duration > 0 ? currentTime / duration * 100 : 0;\n const VolumeIcon = isMuted2 || volume === 0 ? import_fa.FaVolumeMute : volume < 0.5 ? import_fa.FaVolumeDown : import_fa.FaVolumeUp;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"style\", { children: `\n @keyframes sc-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes sc-loading-glow {\n 0%, 100% { opacity: 0.85; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.05); }\n }\n @keyframes sc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n }\n @keyframes sc-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .sc-wrapper:fullscreen,\n .sc-wrapper:has(*:fullscreen) {\n border-radius: 0 !important;\n box-shadow: none !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n z-index: 999999 !important;\n background: #000 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .sc-ctrl-btn {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n padding: 8px;\n transition: background 0.15s ease, opacity 0.15s ease;\n opacity: 0.9;\n }\n .sc-ctrl-btn:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.1);\n }\n .sc-ctrl-btn:active {\n opacity: 0.7;\n }\n .sc-controls-bar {\n transition: opacity 0.35s ease, transform 0.35s ease;\n }\n .sc-progress-track:hover .sc-progress-thumb {\n transform: translate(-50%, -50%) scale(1) !important;\n }\n .sc-loading-hidden .sc-loading-indicator {\n display: none !important;\n }\n ` }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n ref: wrapperRef,\n className: `sc-wrapper ${wrapperClassName || \"\"}`,\n onMouseMove: handleWrapperMouseMove,\n onMouseLeave: handleWrapperMouseLeave,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: isFullscreen2 ? \"fixed\" : \"relative\",\n top: isFullscreen2 ? 0 : void 0,\n left: isFullscreen2 ? 0 : void 0,\n overflow: \"hidden\",\n width: isFullscreen2 ? \"100vw\" : \"100%\",\n height: isFullscreen2 ? \"100vh\" : \"auto\",\n minHeight: isFullscreen2 ? \"100vh\" : \"auto\",\n aspectRatio: isFullscreen2 ? void 0 : playerAspectRatio,\n maxWidth: isFullscreen2 ? \"100vw\" : \"100%\",\n maxHeight: isFullscreen2 ? \"100vh\" : \"none\",\n zIndex: isFullscreen2 ? 999999 : void 0,\n backgroundColor: \"#000\",\n borderRadius: isFullscreen2 ? 0 : void 0,\n boxShadow: isFullscreen2 ? \"none\" : void 0,\n ...wrapperStyle\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"video\",\n {\n ref: videoRef,\n className,\n style: {\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: isFullscreen2 ? \"100%\" : \"none\",\n objectFit: isFullscreen2 ? \"cover\" : \"contain\",\n backgroundColor: \"#000\",\n aspectRatio: isFullscreen2 ? \"unset\" : void 0,\n ...style\n },\n controls: shouldShowNativeControls && controls && !showCustomControls,\n playsInline,\n preload,\n poster,\n ...restVideoAttrs,\n children\n }\n ),\n (isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-loading-indicator\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 20,\n width: `${Math.max(34, 38 * responsiveScale)}px`,\n height: `${Math.max(34, 38 * responsiveScale)}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n animation: \"sc-loading-glow 1.4s ease-in-out infinite\",\n filter: \"drop-shadow(0 6px 14px rgba(0, 0, 0, 0.55))\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n border: \"3px solid rgba(255, 255, 255, 0.25)\",\n borderTopColor: \"#ff0000\",\n borderRightColor: \"rgba(255, 255, 255, 0.85)\",\n animation: \"sc-spin 0.8s linear infinite\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"7px\",\n height: \"7px\",\n borderRadius: \"50%\",\n background: \"#ff0000\",\n boxShadow: \"0 0 10px rgba(255, 0, 0, 0.65)\"\n }\n }\n )\n ]\n }\n ),\n showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 25,\n background: \"rgba(220, 38, 38, 0.92)\",\n backdropFilter: \"blur(24px)\",\n color: \"white\",\n padding: \"28px 36px\",\n borderRadius: \"14px\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n boxShadow: \"0 24px 64px rgba(0, 0, 0, 0.5)\",\n textAlign: \"center\",\n maxWidth: \"400px\",\n margin: \"0 16px\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { fontSize: \"18px\", fontWeight: \"700\", marginBottom: \"10px\", letterSpacing: \"-0.02em\" }, children: \"License Key Required\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { fontSize: \"13px\", lineHeight: \"1.6\", color: \"rgba(255, 255, 255, 0.85)\" }, children: [\n \"Please provide a valid license key to use the Stormcloud Video Player.\",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"br\", {}),\n \"Contact your administrator for licensing information.\"\n ] })\n ]\n }\n ),\n adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${12 * responsiveScale}px`,\n left: `${12 * responsiveScale}px`,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n pointerEvents: \"none\",\n animation: \"sc-fade-in 0.3s ease\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n background: \"rgba(234, 179, 8, 0.95)\",\n color: \"#111\",\n padding: `${4 * responsiveScale}px ${12 * responsiveScale}px`,\n borderRadius: \"6px\",\n fontSize: `${11 * responsiveScale}px`,\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n boxShadow: \"0 2px 12px rgba(234, 179, 8, 0.35)\"\n },\n children: `Ad ${Math.max(1, adStatus.currentIndex)}`\n }\n )\n }\n ),\n showCenterPlay && !isLoading && !isBuffering && !showLicenseWarning && !adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: handleCenterPlayClick,\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 15,\n cursor: \"pointer\",\n background: \"rgba(0, 0, 0, 0.55)\",\n backdropFilter: \"blur(8px)\",\n borderRadius: \"50%\",\n width: `${92 * responsiveScale}px`,\n height: `${92 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.2s ease, transform 0.2s ease\",\n animation: \"sc-fade-in 0.2s ease\"\n },\n onMouseEnter: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.72)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1.06)\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.55)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1)\";\n },\n title: \"Play\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n import_fa.FaPlay,\n {\n size: Math.max(24, 32 * responsiveScale),\n color: \"white\",\n style: { marginLeft: \"4px\" }\n }\n )\n }\n ),\n shouldShowEnhancedControls && !showLicenseWarning ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n background: \"linear-gradient(0deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.35) 60%, transparent 100%)\",\n padding: `${20 * responsiveScale}px ${12 * responsiveScale}px ${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible || adStatus.showAds ? 1 : 0,\n transform: controlsVisible || adStatus.showAds ? \"translateY(0)\" : \"translateY(6px)\",\n pointerEvents: controlsVisible || adStatus.showAds ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-progress-track\",\n style: {\n width: \"100%\",\n height: \"3px\",\n background: \"rgba(255, 255, 255, 0.2)\",\n borderRadius: \"1.5px\",\n marginBottom: `${8 * responsiveScale}px`,\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"height 0.1s ease\"\n },\n onClick: handleTimelineSeek,\n onMouseEnter: (e) => {\n e.currentTarget.style.height = \"5px\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.height = \"3px\";\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"1.5px\",\n width: `${progressPercent}%`,\n transition: \"width 0.15s linear\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n className: \"sc-progress-thumb\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%) scale(0)\",\n width: \"13px\",\n height: \"13px\",\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 4px rgba(0, 0, 0, 0.3)\",\n transition: \"transform 0.1s ease, left 0.15s linear\"\n }\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"white\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: handlePlayPause,\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isPlaying ? \"Pause\" : \"Play\",\n children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPause, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPlay, { size: Math.max(14, 18 * responsiveScale), style: { marginLeft: \"2px\" } })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n paddingRight: `${6 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${8 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"Roboto, 'Segoe UI', Arial, sans-serif\",\n color: \"rgba(255, 255, 255, 0.9)\",\n display: viewportWidth < 480 ? \"none\" : \"block\",\n fontVariantNumeric: \"tabular-nums\",\n userSelect: \"none\",\n marginLeft: `${4 * responsiveScale}px`\n },\n children: [\n formatTime(currentTime),\n \" \",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"span\", { style: { color: \"rgba(255,255,255,0.5)\" }, children: \"/\" }),\n \" \",\n formatTime(duration)\n ]\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { position: \"relative\", display: viewportWidth < 600 ? \"none\" : \"block\" }, children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n setShowSpeedMenu(!showSpeedMenu);\n resetControlsTimer();\n },\n style: {\n padding: `${6 * responsiveScale}px ${10 * responsiveScale}px`,\n borderRadius: `${6 * responsiveScale}px`,\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"'SF Mono', 'Cascadia Code', monospace\",\n fontWeight: \"600\",\n minHeight: `${32 * responsiveScale}px`\n },\n title: \"Playback Speed\",\n children: [\n playbackRate,\n \"x\"\n ]\n }\n ),\n showSpeedMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"8px\",\n background: \"rgba(0, 0, 0, 0.8)\",\n backdropFilter: \"blur(24px)\",\n WebkitBackdropFilter: \"blur(24px)\",\n borderRadius: \"10px\",\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n minWidth: \"80px\",\n boxShadow: \"0 12px 40px rgba(0, 0, 0, 0.5)\",\n animation: \"sc-fade-in 0.15s ease\"\n },\n children: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2].map((speed) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n onClick: () => handlePlaybackRateChange(speed),\n style: {\n display: \"block\",\n width: \"100%\",\n padding: `${8 * responsiveScale}px ${14 * responsiveScale}px`,\n background: playbackRate === speed ? \"rgba(255, 255, 255, 0.12)\" : \"transparent\",\n border: \"none\",\n color: playbackRate === speed ? \"#fff\" : \"rgba(255, 255, 255, 0.7)\",\n cursor: \"pointer\",\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Mono', monospace\",\n fontWeight: playbackRate === speed ? \"700\" : \"500\",\n textAlign: \"center\",\n transition: \"background 0.15s ease, color 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.target.style.color = \"#fff\";\n }\n },\n onMouseLeave: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"transparent\";\n e.target.style.color = \"rgba(255, 255, 255, 0.7)\";\n }\n },\n children: [\n speed,\n \"x\"\n ]\n },\n speed\n ))\n }\n )\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ]\n }\n )\n ]\n }\n ) : showCustomControls && !showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${10 * responsiveScale}px`,\n left: `${10 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transition: \"opacity 0.35s ease\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: \"#ff3b30\",\n animation: \"sc-pulse 1.5s ease-in-out infinite\",\n flexShrink: 0\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"span\",\n {\n style: {\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Pro Display', 'Segoe UI', Arial, sans-serif\",\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n color: \"#fff\",\n textShadow: \"0 1px 3px rgba(0,0,0,0.6)\",\n userSelect: \"none\"\n },\n children: \"LIVE\"\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: `${10 * responsiveScale}px`,\n right: `${10 * responsiveScale}px`,\n display: \"flex\",\n flexDirection: isPortrait ? \"column\" : \"row\",\n alignItems: isPortrait ? \"flex-end\" : \"center\",\n gap: `${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transform: controlsVisible ? \"translateY(0)\" : \"translateY(4px)\",\n pointerEvents: controlsVisible ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n background: \"rgba(0, 0, 0, 0.6)\",\n borderRadius: `${18 * responsiveScale}px`,\n padding: \"2px\",\n paddingRight: `${8 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${10 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`,\n background: \"rgba(0, 0, 0, 0.6)\"\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ] }),\n onControlClick && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: onControlClick,\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n cursor: \"pointer\"\n }\n }\n )\n ]\n }\n )\n ] });\n },\n (prevProps, nextProps) => {\n for (const prop of CRITICAL_PROPS) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const uiProps = [\n \"autoplay\",\n \"muted\",\n \"controls\",\n \"showCustomControls\",\n \"className\",\n \"style\",\n \"wrapperClassName\",\n \"wrapperStyle\",\n \"playsInline\",\n \"preload\",\n \"poster\",\n \"children\"\n ];\n for (const prop of uiProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const callbackProps = [\n \"onReady\",\n \"onVolumeToggle\",\n \"onFullscreenToggle\",\n \"onControlClick\"\n ];\n for (const prop of callbackProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n return true;\n }\n);\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n StormcloudVideoPlayerComponent\n});\n"]}