stormcloud-video-player 0.8.59 → 0.8.60

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 (79) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1369 -1369
  3. package/dist/stormcloud-vp.min.js +3 -1
  4. package/lib/Player.cjs +548 -0
  5. package/lib/Player.cjs.map +1 -0
  6. package/lib/Player.d.cts +146 -0
  7. package/lib/{index.js → StormcloudPlayer.cjs} +1108 -1877
  8. package/lib/StormcloudPlayer.cjs.map +1 -0
  9. package/lib/{index.d.ts → StormcloudPlayer.d.cts} +7 -400
  10. package/lib/index.cjs +979 -251
  11. package/lib/index.cjs.map +1 -1
  12. package/lib/index.d.cts +18 -4032
  13. package/lib/patterns.cjs +111 -0
  14. package/lib/patterns.cjs.map +1 -0
  15. package/lib/patterns.d.cts +14 -0
  16. package/lib/player/AdBreakOrchestrator.cjs +48 -14
  17. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  18. package/lib/player/AdBreakOrchestrator.d.cts +3 -1
  19. package/lib/player/AdConfigManager.cjs +155 -17
  20. package/lib/player/AdConfigManager.cjs.map +1 -1
  21. package/lib/player/AdConfigManager.d.cts +1 -1
  22. package/lib/player/AdTimingService.cjs.map +1 -1
  23. package/lib/player/AdTimingService.d.cts +1 -1
  24. package/lib/player/HlsEngine.cjs.map +1 -1
  25. package/lib/player/HlsEngine.d.cts +1 -1
  26. package/lib/player/PlaceholderLayer.cjs.map +1 -1
  27. package/lib/player/PlayerControls.cjs.map +1 -1
  28. package/lib/player/PlayerControls.d.cts +1 -1
  29. package/lib/player/Scte35CueManager.cjs.map +1 -1
  30. package/lib/player/Scte35CueManager.d.cts +1 -1
  31. package/lib/player/Scte35Parser.cjs.map +1 -1
  32. package/lib/player/Scte35Parser.d.cts +1 -1
  33. package/lib/player/StormcloudVideoPlayer.cjs +979 -251
  34. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  35. package/lib/player/StormcloudVideoPlayer.d.cts +1 -1
  36. package/lib/player/playerTypes.cjs.map +1 -1
  37. package/lib/player/playerTypes.d.cts +1 -1
  38. package/lib/players/FilePlayer.cjs.map +1 -1
  39. package/lib/players/HlsPlayer.cjs +979 -251
  40. package/lib/players/HlsPlayer.cjs.map +1 -1
  41. package/lib/players/HlsPlayer.d.cts +1 -1
  42. package/lib/players/index.cjs +979 -251
  43. package/lib/players/index.cjs.map +1 -1
  44. package/lib/props.cjs +186 -0
  45. package/lib/props.cjs.map +1 -0
  46. package/lib/props.d.cts +62 -0
  47. package/lib/sdk/hlsAdPlayer.cjs +884 -234
  48. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  49. package/lib/sdk/hlsAdPlayer.d.cts +1 -1
  50. package/lib/sdk/pal.cjs.map +1 -1
  51. package/lib/types.cjs +49 -0
  52. package/lib/types.cjs.map +1 -0
  53. package/lib/{types-52ASml2N.d.cts → types.d.cts} +47 -1
  54. package/lib/ui/StormcloudVideoPlayer.cjs +979 -251
  55. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  56. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  57. package/lib/utils/browserCompat.cjs.map +1 -1
  58. package/lib/utils/ctvVastSignals.cjs +155 -17
  59. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  60. package/lib/utils/devUrl.cjs.map +1 -1
  61. package/lib/utils/polyfills.cjs.map +1 -1
  62. package/lib/utils/tracking.cjs +42 -14
  63. package/lib/utils/tracking.cjs.map +1 -1
  64. package/lib/utils/tracking.d.cts +1 -1
  65. package/lib/utils/trackingIngest.cjs.map +1 -1
  66. package/lib/utils/vastEnvironmentSignals.cjs +167 -17
  67. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  68. package/lib/utils/vastEnvironmentSignals.d.cts +12 -1
  69. package/lib/utils/vastMacros.cjs +26 -0
  70. package/lib/utils/vastMacros.cjs.map +1 -1
  71. package/lib/utils/vastTrackingMacros.cjs +5 -0
  72. package/lib/utils/vastTrackingMacros.cjs.map +1 -1
  73. package/lib/utils/vastTrackingMacros.d.cts +2 -0
  74. package/lib/utils.cjs +292 -0
  75. package/lib/utils.cjs.map +1 -0
  76. package/lib/utils.d.cts +17 -0
  77. package/package.json +91 -91
  78. package/rollup.config.js +90 -90
  79. package/lib/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\StormcloudPlayer.cjs"],"names":["__defProp","Object","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","__create","__esModule","value","__toCommonJS","StormcloudPlayer_exports","createStormcloudPlayer","default","StormcloudPlayer_default","require","getWebKitVersion","match","parseInt","module","exports","import_react5","import_hls","getChromeVersion","ua","getPlatform","navigator","userAgentData","platform","userAgent","test","webOSVersion","detectBrowser","version","majorVersion","isLegacyTV","supportsModernJS","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","isSmartTV","parts","split","toString","Promise","Map","Set","browser","getBrowserConfigOverrides","overrides","pauseContentDuringAds","logBrowserInfo","debug","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","String","Math","floor","random","formatPlayhead","seconds","total","hh","padStart","mm","ss","ms","resolveMacroValues","ctx","set","values","adPlayhead","adPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","round","deviceId","deviceIdType","limitAdTracking","pageUrl","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","url","replace","encodeURIComponent","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","parseFloat","map","p","h","m","every","n","Number","isFinite","s","trimmed","offset","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","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","RVFC_RELIABLE_PROP","adVideoElement","adHls","adContainerEl","adEventHandlers","containerHandlers","currentAdMediaFile","podAds","podIndex","preloadedAds","preloadingAds","destroyed","pendingTimeouts","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","BLACKFRAME_MIN_PLAYBACK_S","stallWatchdogId","lastAdProgressTime","lastAdProgressPosition","videoFrameCallbackHandle","pendingPlayPromise","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","event","emit","payload","Array","fn","console","warn","buildTrackingMacroContext","options2","context","contentPlayheadSeconds","currentTime","type","clientWidth","clientHeight","ad","location","href","fireTrackingPixels","urls","forEach","trackingUrl","macroContext","add","img","timeoutId","release","onload","autoLevel","onerror","delete","setTimeout","src","log","getMainStreamQuality","levels","currentLevel","loadLevel","width","level2","height","bitrate","level","selectBestMediaFile","mediaFiles","Error","firstFile","fileBitrate","score","bestMatch","mediaFile","mediaFileElements","mf","mainQuality","scoredFiles","file","heightDiff","abs","resolutionDiff","widthDiff","bitrateDiff","sort","a","b","isProgressiveMediaFile","isHlsMediaFile","toLowerCase","startsWith","includes","isAudioMediaFile","collectVideoMediaFiles","linear","verbose","querySelectorAll","index","getAttribute","apiFramework","toUpperCase","bitrateAttr","bitrateValue","hasExplicitDimensions","push","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","collectLinearTracking","into","parseProgressOffset","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","keys","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","errorUrls","root","parseVastXml","adElements","documentElement","find","emptyVastResult","parsed","parseAdElement","vastAdTagUri","wrapper","inLine","trackingUrls2","linear2","rules","followAdditionalWrappers","files","candidate","trackingUrls","id","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","requestVast","response","creds","fetch","mode","headers","referrerPolicy","ok","statusText","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","currentAd","onTimeUpdate","noteAdProgress","has","threshold","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","creativeView","VERIFICATION_NOT_SUPPORTED_REASON","onEnded","complete","sampleViewability","settleViewability","handleAdComplete","onError","e","reportCurrentAdError","advanceToNextPodAd","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","teardownAdEventListeners","removeEventListener","adId","handleAdClick","window","open","fireNotUsedForUnplayedAds","notUsed","inView","visibilityState","paused","now","expanded","handleFullscreenChange","fullscreenEl","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","onClick","onInteraction","addEventListener","onFullscreenChange","observe","IntersectionObserver","entry","entries","isIntersecting","intersectionRatio","detachContainerHandlers","disconnect","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","settlePendingPlay","startAdPlayback","playPromise","play","catch","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","appendChild","loadCurrentAdMedia","isHlsAd","isSupported","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","requiresMediaPipelineResetAfterAds","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","FRAME_COUNTER_RELIABLE_PROP","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","requestVideoFrameCallback","onPresentedFrame","sawDecodedVideoFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","releaseAdDecoder","display","pointerEvents","setAdPlayingFlag","continueLiveStreamDuringAds","visibility","opacity","initialize","container","right","bottom","alignItems","justifyContent","zIndex","parentElement","attachContainerHandlers","requestAds","reject","preloaded","resolve","contentVolume","previousMutedState","stop","clearTimeout","clear","isAdPlaying","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getPodTotalDurationMs","getLoadedAdDuration","getLoadedAdId","getPodAdCount","reduce","PRIVATE_HOST_PATTERNS","hostname","isLocalDevHost","host","some","pattern","toDevSafeUrl","rawUrl","URL","cleanPath","pathname","protocol","loadPalSdk","_palLoadPromise","goog","pal","existing","timeout","script","async","consentSettings","allowStorage","setAttribute","head","getOrCreateNonceLoader","_nonceLoader","ConsentSettings","NonceLoader","currentNonceManager","generateNonce","loader","request","manager","NonceRequest","adWillAutoPlay","playerVolume","adWillPlayMuted","continuousPlayback","descriptionUrl","iconsSupported","playerType","playerVersion","supportedApiFrameworks","sessionId","JSON","stringify","ppid","loadNonceManager","currentNonce","getNonce","getCurrentNonce","injectNonce","searchParams","sendAdClick","base","sep","sendPlaybackStart","sendPlaybackEnd","sendAdTouch","DEFAULT_TRACKING_INGEST_CONFIG","enabled","baseUrl","trackingIngestConfig","normalizeIngestBaseUrl","channel","ingestPlayerTracking","licenseKey","body","isTrackingIngestEnabled","buildTrackingIngestUrl","method","Authorization","resolveVastEnvironmentSignals","isCtv","CTV_SESSION_STORAGE_KEY","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","platformLat","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","realDeviceId","readStoredDeviceId","readStoredString","inferDeviceIdType","readStoredLimitAdTracking","dpid","getOrCreateStoredUuid","deviceTypeHint","resolveDeviceTypeHint","getOrCreateCtvSessionId","SMARTPHONE","DEVICE_TYPE_HINT","FEATURE_PHONE","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","SET_TOP_BOX_UA","CONNECTED_TV_UA","override","readDeviceTypeHintOverride","inferDeviceTypeHint","fallback","maxTouchPoints","GAME_CONSOLE_UA","FEATURE_PHONE_UA","fromGlobal","normalizeDeviceTypeHint","__STORMCLOUD_DTH__","getNativeBridgeSources","normalized","safeCall","isInteger","thisArg","isEquivalentDeviceIdType","tagType","runtimeType","tag","runtime","isMacroPlaceholder","isZeroedAdId","storageKey","readPersistentId","writePersistentId","createUuid","readCookie","writeCookie","localStorage","setItem","PERSISTENT_ID_COOKIE_MAX_AGE","cookie","part","prefix","decodeURIComponent","slice","bytes","crypto","randomUUID","Uint8Array","getRandomValues","seed","performanceNow","i","hex","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","AiryTV","Android","webOS","tizen","amazon","Boolean","result","normalizeBoolean","getItem","cachedBrowserId","buildAnalyticsContext","config","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","vendor","memory","deviceMemory","screenInfo","screen","availWidth","orientation","pixelDepth","deviceType","model","isAndroid","isWebView","isWebApp","brand","os","webosMatch","androidModelMatch","outerHeight","outerWidth","matchMedia","matches","standalone","angle","origin","path","hardwareConcurrency","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","resolveNativeDeviceId","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","sendAdLoadedTracking","adLoadedInfo","sendHeartbeat","sendAdImpressionTracking","adImpressionInfo","ad_played_count","ad_url","adUrl","heartbeatData","URLSearchParamsPolyfill","init","params","parseQueryString"],"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/StormcloudPlayer.tsx\nvar StormcloudPlayer_exports = {};\n__export(StormcloudPlayer_exports, {\n createStormcloudPlayer: () => createStormcloudPlayer,\n default: () => StormcloudPlayer_default\n});\nmodule.exports = __toCommonJS(StormcloudPlayer_exports);\nvar import_react5 = __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/props.ts\nvar noop = () => {\n};\nvar defaultProps = {\n playing: false,\n loop: false,\n controls: true,\n volume: 1,\n muted: false,\n playbackRate: 1,\n width: \"100%\",\n height: \"auto\",\n style: {},\n progressInterval: 1e3,\n playsInline: false,\n autoplay: false,\n preload: \"metadata\",\n poster: \"\",\n className: \"\",\n wrapperClassName: \"\",\n wrapperStyle: {},\n allowNativeHls: false,\n lowLatencyMode: false,\n driftToleranceMs: 1e3,\n immediateManifestAds: true,\n debugAdTiming: false,\n showCustomControls: false,\n hideLoadingIndicator: false,\n licenseKey: \"\",\n isVmap: false,\n vmapUrl: \"\",\n adFailsafeTimeoutMs: 1e4,\n minSegmentsBeforePlay: 2,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onVolumeToggle: noop,\n onFullscreenToggle: noop,\n onControlClick: noop\n};\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar lazy = import_react.lazy;\nvar omit = (object, keys) => {\n const result = { ...object };\n keys.forEach((key) => {\n delete result[key];\n });\n return result;\n};\nvar isMediaStream = (url) => {\n return typeof window !== \"undefined\" && window.MediaStream && url instanceof window.MediaStream;\n};\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/patterns.ts\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_PATHS = /\\/hls\\//i;\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|webm|ogg|avi|mov|wmv|flv|mkv)($|\\?)/i;\nvar AUDIO_EXTENSIONS = /\\.(mp3|wav|ogg|aac|wma|flac|m4a)($|\\?)/i;\nvar canPlay = {\n hls: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return HLS_EXTENSIONS.test(url) || HLS_PATHS.test(url);\n },\n dash: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return DASH_EXTENSIONS.test(url);\n },\n video: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url);\n },\n audio: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return AUDIO_EXTENSIONS.test(url);\n },\n file: (url) => {\n if (!url || typeof url !== \"string\") return false;\n return VIDEO_EXTENSIONS.test(url) || AUDIO_EXTENSIONS.test(url);\n }\n};\n\n// src/players/HlsPlayer.tsx\nvar import_react2 = require(\"react\");\nvar HlsPlayer = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.player = null;\n this.mounted = false;\n this.load = async () => {\n if (!this.props.videoElement || !this.props.src) return;\n try {\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n const config = {\n src: this.props.src,\n videoElement: this.props.videoElement\n };\n if (this.props.autoplay !== void 0)\n config.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) config.muted = this.props.muted;\n if (this.props.lowLatencyMode !== void 0)\n config.lowLatencyMode = this.props.lowLatencyMode;\n if (this.props.allowNativeHls !== void 0)\n config.allowNativeHls = this.props.allowNativeHls;\n if (this.props.isLiveStream !== void 0)\n config.isLiveStream = this.props.isLiveStream;\n if (this.props.driftToleranceMs !== void 0)\n config.driftToleranceMs = this.props.driftToleranceMs;\n if (this.props.immediateManifestAds !== void 0)\n config.immediateManifestAds = this.props.immediateManifestAds;\n if (this.props.debugAdTiming !== void 0)\n config.debugAdTiming = this.props.debugAdTiming;\n if (this.props.showCustomControls !== void 0)\n config.showCustomControls = this.props.showCustomControls;\n if (this.props.onVolumeToggle !== void 0)\n config.onVolumeToggle = this.props.onVolumeToggle;\n if (this.props.onFullscreenToggle !== void 0)\n config.onFullscreenToggle = this.props.onFullscreenToggle;\n if (this.props.onControlClick !== void 0)\n config.onControlClick = this.props.onControlClick;\n if (this.props.licenseKey !== void 0)\n config.licenseKey = this.props.licenseKey;\n if (this.props.adFailsafeTimeoutMs !== void 0)\n config.adFailsafeTimeoutMs = this.props.adFailsafeTimeoutMs;\n if (this.props.minSegmentsBeforePlay !== void 0)\n config.minSegmentsBeforePlay = this.props.minSegmentsBeforePlay;\n if (this.props.ctvAdRequest !== void 0)\n config.ctvAdRequest = this.props.ctvAdRequest;\n this.player = new StormcloudVideoPlayer(config);\n this.props.onMount?.(this);\n await this.player.load();\n if (this.mounted) {\n this.props.onReady?.();\n }\n } catch (error) {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n }\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[HlsPlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n this.props.onPlay?.();\n } else {\n console.warn(\"[HlsPlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n this.props.onPause?.();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"player\") return this.player;\n if (key === \"video\") return this.props.videoElement;\n if (key === \"hls\" && this.player) return this.player.hls;\n return null;\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nHlsPlayer.displayName = \"HlsPlayer\";\nHlsPlayer.canPlay = canPlay.hls;\n\n// src/players/FilePlayer.tsx\nvar import_react3 = require(\"react\");\nvar FilePlayer = class extends import_react3.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.ready = false;\n this.load = () => {\n if (!this.props.videoElement || !this.props.src) return;\n const video = this.props.videoElement;\n const handleLoadedMetadata = () => {\n if (this.mounted && !this.ready) {\n this.ready = true;\n this.props.onReady?.();\n }\n };\n const handlePlay = () => {\n if (this.mounted) {\n this.props.onPlay?.();\n }\n };\n const handlePause = () => {\n if (this.mounted) {\n this.props.onPause?.();\n }\n };\n const handleEnded = () => {\n if (this.mounted) {\n this.props.onEnded?.();\n }\n };\n const handleError = (error) => {\n if (this.mounted) {\n this.props.onError?.(error);\n }\n };\n const handleLoadedData = () => {\n if (this.mounted) {\n this.props.onLoaded?.();\n }\n };\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"play\", handlePlay);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n video.addEventListener(\"error\", handleError);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.src = this.props.src;\n if (this.props.autoplay !== void 0) video.autoplay = this.props.autoplay;\n if (this.props.muted !== void 0) video.muted = this.props.muted;\n if (this.props.loop !== void 0) video.loop = this.props.loop;\n if (this.props.controls !== void 0) video.controls = this.props.controls;\n if (this.props.playsInline !== void 0)\n video.playsInline = this.props.playsInline;\n if (this.props.preload !== void 0)\n video.preload = this.props.preload;\n if (this.props.poster !== void 0) video.poster = this.props.poster;\n this.props.onMount?.(this);\n return () => {\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"play\", handlePlay);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n video.removeEventListener(\"error\", handleError);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n };\n };\n this.play = () => {\n if (this.props.videoElement) {\n const video = this.props.videoElement;\n const hasValidSource = video.src || video.currentSrc && video.currentSrc !== \"\" || video.readyState >= 1;\n if (hasValidSource) {\n video.play()?.catch((error) => {\n console.error(\"[FilePlayer] Failed to play:\", error);\n this.props.onError?.(error);\n });\n } else {\n console.warn(\"[FilePlayer] Cannot play: video has no valid source\");\n }\n }\n };\n this.pause = () => {\n if (this.props.videoElement) {\n this.props.videoElement.pause();\n }\n };\n this.stop = () => {\n this.pause();\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = 0;\n }\n };\n this.seekTo = (seconds, keepPlaying) => {\n if (this.props.videoElement) {\n this.props.videoElement.currentTime = seconds;\n if (!keepPlaying) {\n this.pause();\n }\n }\n };\n this.setVolume = (volume) => {\n if (this.props.videoElement) {\n this.props.videoElement.volume = Math.max(0, Math.min(1, volume));\n }\n };\n this.mute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = true;\n }\n };\n this.unmute = () => {\n if (this.props.videoElement) {\n this.props.videoElement.muted = false;\n }\n };\n this.setPlaybackRate = (rate) => {\n if (this.props.videoElement && rate > 0) {\n this.props.videoElement.playbackRate = rate;\n }\n };\n this.setLoop = (loop) => {\n if (this.props.videoElement) {\n this.props.videoElement.loop = loop;\n }\n };\n this.getDuration = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.duration)) {\n return this.props.videoElement.duration;\n }\n return null;\n };\n this.getCurrentTime = () => {\n if (this.props.videoElement && isFinite(this.props.videoElement.currentTime)) {\n return this.props.videoElement.currentTime;\n }\n return null;\n };\n this.getSecondsLoaded = () => {\n if (this.props.videoElement && this.props.videoElement.buffered.length > 0) {\n return this.props.videoElement.buffered.end(\n this.props.videoElement.buffered.length - 1\n );\n }\n return null;\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (key === \"video\") return this.props.videoElement;\n return null;\n };\n this.enablePIP = async () => {\n if (this.props.videoElement && \"requestPictureInPicture\" in this.props.videoElement) {\n try {\n await this.props.videoElement.requestPictureInPicture();\n } catch (error) {\n console.warn(\"Picture-in-Picture failed:\", error);\n }\n }\n };\n this.disablePIP = async () => {\n if (document.pictureInPictureElement) {\n try {\n await document.exitPictureInPicture();\n } catch (error) {\n console.warn(\"Exit Picture-in-Picture failed:\", error);\n }\n }\n };\n }\n componentDidMount() {\n this.mounted = true;\n this.load();\n }\n componentWillUnmount() {\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (prevProps.src !== this.props.src) {\n this.load();\n }\n }\n render() {\n return null;\n }\n};\nFilePlayer.displayName = \"FilePlayer\";\nFilePlayer.canPlay = canPlay.file;\n\n// src/players/index.ts\nvar players = [\n {\n key: \"hls\",\n name: \"HLS Player\",\n canPlay: canPlay.hls,\n lazyPlayer: lazy(() => Promise.resolve({ default: HlsPlayer }))\n },\n {\n key: \"file\",\n name: \"File Player\",\n canPlay: canPlay.file,\n canEnablePIP: (url) => {\n return canPlay.file(url) && (document.pictureInPictureEnabled || typeof document.webkitSupportsPresentationMode === \"function\");\n },\n lazyPlayer: lazy(() => Promise.resolve({ default: FilePlayer }))\n }\n];\nvar players_default = players;\n\n// src/Player.tsx\nvar import_react4 = __toESM(require(\"react\"), 1);\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react4.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.isReady = false;\n this.isPlaying = false;\n this.isLoading = true;\n this.loadOnReady = null;\n this.startOnPlay = true;\n this.seekOnPlay = null;\n this.onDurationCalled = false;\n this.handlePlayerMount = (player) => {\n if (this.player) {\n this.progress();\n return;\n }\n this.player = player;\n this.player.load(this.props.src);\n this.progress();\n };\n this.getInternalPlayer = (key) => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.progress = () => {\n if (this.props.src && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0;\n const loadedSeconds = this.getSecondsLoaded();\n const duration = this.getDuration();\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration,\n loaded: 0,\n loadedSeconds: 0\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress?.(progress);\n }\n this.prevPlayed = progress.playedSeconds;\n this.prevLoaded = progress.loadedSeconds;\n }\n }\n this.progressTimeout = window.setTimeout(\n this.progress,\n this.props.progressInterval || 1e3\n );\n };\n this.handleReady = () => {\n if (!this.mounted) return;\n this.isReady = true;\n this.isLoading = false;\n const { onReady, playing, volume, muted } = this.props;\n onReady();\n if (!muted && volume !== null) {\n this.player.setVolume(volume);\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true);\n this.loadOnReady = null;\n } else if (playing) {\n this.player.play();\n }\n this.handleDurationCheck();\n };\n this.handlePlay = () => {\n this.isPlaying = true;\n this.isLoading = false;\n const { onStart, onPlay, playbackRate } = this.props;\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate);\n }\n onStart?.();\n this.startOnPlay = false;\n }\n onPlay?.();\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay);\n this.seekOnPlay = null;\n }\n this.handleDurationCheck();\n };\n this.handlePause = (e) => {\n this.isPlaying = false;\n if (!this.isLoading) {\n this.props.onPause?.(e);\n }\n };\n this.handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props;\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0);\n }\n if (!loop) {\n this.isPlaying = false;\n onEnded?.();\n }\n };\n this.handleError = (...args) => {\n this.isLoading = false;\n this.props.onError?.(args[0], args[1], args[2], args[3]);\n };\n this.handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout);\n const duration = this.getDuration();\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration?.(duration);\n this.onDurationCalled = true;\n }\n } else {\n this.durationCheckTimeout = window.setTimeout(\n this.handleDurationCheck,\n 100\n );\n }\n };\n this.handleLoaded = () => {\n this.isLoading = false;\n };\n }\n componentDidMount() {\n this.mounted = true;\n }\n componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n clearTimeout(this.durationCheckTimeout);\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (!this.player) return;\n const { src, playing, volume, muted, playbackRate, loop, activePlayer } = this.props;\n if (prevProps.src !== src) {\n if (this.isLoading && !activePlayer.forceLoad && !isMediaStream(src)) {\n console.warn(\n `StormcloudPlayer: the attempt to load ${src} is being deferred until the player has loaded`\n );\n this.loadOnReady = src || null;\n return;\n }\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(src, this.isReady);\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play();\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause();\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume);\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute();\n } else {\n this.player.unmute();\n if (volume !== null) {\n setTimeout(() => this.player.setVolume(volume));\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate);\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop);\n }\n }\n getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n seekTo(amount, type, keepPlaying) {\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(() => {\n this.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n }\n return;\n }\n const isFraction = !type ? amount > 0 && amount < 1 : type === \"fraction\";\n if (isFraction) {\n const duration = this.player.getDuration();\n if (!duration) {\n console.warn(\n \"StormcloudPlayer: could not seek using fraction \\u2013 duration not yet available\"\n );\n return;\n }\n this.player.seekTo(duration * amount, keepPlaying);\n return;\n }\n this.player.seekTo(amount, keepPlaying);\n }\n render() {\n const Player2 = this.props.activePlayer;\n if (!Player2) {\n return null;\n }\n return import_react4.default.createElement(Player2, {\n ...this.props,\n onMount: this.handlePlayerMount,\n onReady: this.handleReady,\n onPlay: this.handlePlay,\n onPause: this.handlePause,\n onEnded: this.handleEnded,\n onLoaded: this.handleLoaded,\n onError: this.handleError\n });\n }\n};\nPlayer.displayName = \"Player\";\nPlayer.defaultProps = defaultProps;\n\n// src/StormcloudPlayer.tsx\nvar IS_BROWSER2 = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL2 = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar UniversalSuspense = IS_BROWSER2 || IS_GLOBAL2 ? import_react5.Suspense : () => null;\nvar SUPPORTED_PROPS = [\n \"src\",\n \"playing\",\n \"loop\",\n \"controls\",\n \"volume\",\n \"muted\",\n \"playbackRate\",\n \"width\",\n \"height\",\n \"style\",\n \"progressInterval\",\n \"playsInline\",\n \"autoplay\",\n \"preload\",\n \"poster\",\n \"className\",\n \"wrapperClassName\",\n \"wrapperStyle\",\n \"allowNativeHls\",\n \"lowLatencyMode\",\n \"isLiveStream\",\n \"driftToleranceMs\",\n \"immediateManifestAds\",\n \"debugAdTiming\",\n \"showCustomControls\",\n \"licenseKey\",\n \"isVmap\",\n \"vmapUrl\",\n \"adFailsafeTimeoutMs\",\n \"minSegmentsBeforePlay\",\n \"ctvAdRequest\",\n \"onReady\",\n \"onStart\",\n \"onPlay\",\n \"onPause\",\n \"onBuffer\",\n \"onBufferEnd\",\n \"onEnded\",\n \"onError\",\n \"onDuration\",\n \"onSeek\",\n \"onProgress\",\n \"onVolumeToggle\",\n \"onFullscreenToggle\",\n \"onControlClick\"\n];\nvar customPlayers = [];\nvar createStormcloudPlayer = (playerList, fallback) => {\n var _a;\n return _a = class extends import_react5.Component {\n constructor() {\n super(...arguments);\n this.state = {\n showPreview: false\n };\n this.references = {\n wrapper: (wrapper) => {\n this.wrapper = wrapper;\n },\n player: (player) => {\n this.player = player;\n }\n };\n this.getActivePlayer = (src) => {\n if (!src) return null;\n for (const player of [...customPlayers, ...playerList]) {\n if (player.canPlay(src)) {\n return player;\n }\n }\n if (fallback) {\n return fallback;\n }\n return null;\n };\n this.getAttributes = (src) => {\n return omit(this.props, SUPPORTED_PROPS);\n };\n this.handleReady = () => {\n this.props.onReady?.(this);\n };\n this.seekTo = (fraction, type, keepPlaying) => {\n if (!this.player) return null;\n this.player.seekTo(fraction, type, keepPlaying);\n };\n this.getCurrentTime = () => {\n if (!this.player) return null;\n return this.player.getCurrentTime();\n };\n this.getSecondsLoaded = () => {\n if (!this.player) return null;\n return this.player.getSecondsLoaded();\n };\n this.getDuration = () => {\n if (!this.player) return null;\n return this.player.getDuration();\n };\n this.getInternalPlayer = (key = \"player\") => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.renderActivePlayer = (src) => {\n if (!src) return null;\n const activePlayer = this.getActivePlayer(src);\n if (!activePlayer) return null;\n return import_react5.default.createElement(Player, {\n ...this.props,\n key: activePlayer.key,\n ref: this.references.player,\n activePlayer: activePlayer.lazyPlayer || activePlayer,\n onReady: this.handleReady\n });\n };\n }\n render() {\n const {\n src,\n style,\n width,\n height,\n fallback: fallbackElement,\n wrapper: Wrapper\n } = this.props;\n const attributes = this.getAttributes(src);\n const wrapperRef = typeof Wrapper === \"string\" ? this.references.wrapper : void 0;\n return import_react5.default.createElement(\n Wrapper,\n {\n ref: wrapperRef,\n style: { ...style, width, height },\n ...attributes\n },\n import_react5.default.createElement(\n UniversalSuspense,\n { fallback: fallbackElement },\n this.renderActivePlayer(src)\n )\n );\n }\n }, _a.displayName = \"StormcloudPlayer\", _a.defaultProps = {\n ...defaultProps,\n fallback: null,\n wrapper: \"div\"\n }, _a.addCustomPlayer = (player) => {\n customPlayers.push(player);\n }, _a.removeCustomPlayers = () => {\n customPlayers.length = 0;\n }, _a.canPlay = (src) => {\n for (const Player2 of [...customPlayers, ...playerList]) {\n if (Player2.canPlay(src)) {\n return true;\n }\n }\n return false;\n }, _a.canEnablePIP = (src) => {\n for (const Player2 of [...customPlayers, ...playerList]) {\n if (Player2.canEnablePIP && Player2.canEnablePIP(src)) {\n return true;\n }\n }\n return false;\n }, _a;\n};\nvar StormcloudPlayer = createStormcloudPlayer(\n players_default,\n players_default[players_default.length - 1]\n);\nvar StormcloudPlayer_default = StormcloudPlayer;\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createStormcloudPlayer\n});\n"]}