stormcloud-video-player 0.8.60 → 0.8.61
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/stormcloud-vp.min.js +1 -1
- package/lib/Player.cjs.map +1 -1
- package/lib/StormcloudPlayer.cjs +83 -29
- package/lib/StormcloudPlayer.cjs.map +1 -1
- package/lib/index.cjs +87 -31
- package/lib/index.cjs.map +1 -1
- package/lib/patterns.cjs.map +1 -1
- package/lib/player/AdBreakOrchestrator.cjs +3 -2
- package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
- package/lib/player/AdConfigManager.cjs +53 -11
- package/lib/player/AdConfigManager.cjs.map +1 -1
- package/lib/player/AdTimingService.cjs.map +1 -1
- package/lib/player/HlsEngine.cjs.map +1 -1
- package/lib/player/PlaceholderLayer.cjs.map +1 -1
- package/lib/player/PlayerControls.cjs.map +1 -1
- package/lib/player/Scte35CueManager.cjs.map +1 -1
- package/lib/player/Scte35Parser.cjs.map +1 -1
- package/lib/player/StormcloudVideoPlayer.cjs +83 -29
- package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/player/playerTypes.cjs.map +1 -1
- package/lib/players/FilePlayer.cjs.map +1 -1
- package/lib/players/HlsPlayer.cjs +83 -29
- package/lib/players/HlsPlayer.cjs.map +1 -1
- package/lib/players/index.cjs +83 -29
- package/lib/players/index.cjs.map +1 -1
- package/lib/props.cjs.map +1 -1
- package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
- package/lib/sdk/pal.cjs +9 -5
- package/lib/sdk/pal.cjs.map +1 -1
- package/lib/sdk/pal.d.cts +1 -0
- package/lib/types.cjs.map +1 -1
- package/lib/types.d.cts +1 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +87 -31
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/browserCompat.cjs.map +1 -1
- package/lib/utils/ctvVastSignals.cjs +25 -4
- package/lib/utils/ctvVastSignals.cjs.map +1 -1
- package/lib/utils/devUrl.cjs.map +1 -1
- package/lib/utils/polyfills.cjs.map +1 -1
- package/lib/utils/tracking.cjs +3 -2
- package/lib/utils/tracking.cjs.map +1 -1
- package/lib/utils/trackingIngest.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.cjs +27 -5
- package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
- package/lib/utils/vastEnvironmentSignals.d.cts +1 -1
- package/lib/utils/vastMacros.cjs +24 -4
- package/lib/utils/vastMacros.cjs.map +1 -1
- package/lib/utils/vastMacros.d.cts +2 -0
- package/lib/utils/vastTrackingMacros.cjs.map +1 -1
- package/lib/utils.cjs.map +1 -1
- package/package.json +1 -1
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\index.cjs"],"names":["__create","Object","create","getOwnPropertyDescriptor","__defProp","__getOwnPropDesc","defineProperty","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","name","all","target","get","enumerable","__copyProps","to","from","except","desc","key","call","__getOwnPropNames","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","DEFAULT_TRACKING_INGEST_CONFIG","IS_BROWSER","IS_GLOBAL","IS_IOS","IS_SAFARI","SUPPORTS_DASH","StormcloudVideoPlayer","StormcloudVideoPlayerComponent","SUPPORTS_HLS","StormcloudPlayer","StormcloudPlayer_default","applyTrackingIngestConfig","buildAnalyticsContext","canPlay","configureTrackingIngest","createHlsAdPlayer","createStormcloudPlayer","ingestPlayerTracking","createPalNonceManager","default","detectBrowser","getBrowserConfigOverrides","getClientInfo","initializePolyfills","isMediaStream","isTrackingIngestEnabled","lazy","logBrowserInfo","merge","omit","parseQuery","navigator","sendAdImpressionTracking","module","import_react","match","ua","players","players_default","randomString","requiresMediaPipelineResetAfterAds","sendAdDetectTracking","sendAdLoadedTracking","supportsWebKitPresentationMode","sendHeartbeat","sendInitialTracking","supportsFeature","supportsModernJS","trackingIngestConfig","exports","parseInt","getWebKitVersion","userAgentData","platform","userAgent","test","getPlatform","version","majorVersion","isSmartTV","isLegacyTV","supportsModernJS2","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","getChromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","browser","overrides","allowNativeHls","Array","assign","forEach","String","includes","debug","console","log","feature","TextEncoder","fetch","crypto","subtle","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","Math","random","floor","formatPlayhead","seconds","hh","total","padStart","mm","ss","ms","resolveMacroValues","ctx","set","values","adPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","limitAdTracking","round","deviceId","deviceIdType","pageUrl","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","url","offset","replace","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","map","p","parseFloat","h","m","s","every","n","Number","isFinite","parseProgressOffset","trimmed","endsWith","percent","offsetPercent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","BEACON_TIMEOUT_MS","inFlightBeacons","VAST_ERROR_MEDIA_DISPLAY","toVastMediaErrorCode","error","VAST_ERROR_WRAPPER_TIMEOUT","VAST_ERROR_WRAPPER_LIMIT","VAST_ERROR_WRAPPER_NO_ADS","VAST_ERROR_NO_SUPPORTED_MEDIA","VERIFICATION_NOT_SUPPORTED_REASON","VIEWABLE_MIN_VISIBLE_RATIO","VIEWABLE_MIN_CONTINUOUS_S","adPlaying","originalMutedState","originalVolume","max","min","contentVideo","volume","listeners","mainHlsInstance","options","AD_CONTAINER_PROP","AD_VIDEO_PROP","adEventHandlers","stallWatchdogId","sawDecodedVideoFrame","videoFrameCallbackHandle","RVFC_RELIABLE_PROP","adVideoElement","adHls","containerHandlers","currentAd","currentAdMediaFile","podAds","preloadedAds","destroyed","lastAdProgressTime","lastAdProgressPosition","createTrackingState","impression","loaded","start","firstQuartile","thirdQuartile","complete","viewabilitySettled","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastPlayerExpanded","documentHandlers","emit","event","payload","options2","context","macroContext","buildTrackingMacroContext","urls","fn","warn","ad","currentTime","type","clientWidth","adContainerEl","clientHeight","location","href","podIndex","trackingUrl","add","img","timeoutId","onload","clearTimeout","delete","release","onerror","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","bitrate","level","mediaFiles","Error","firstFile","mainQuality","bestMatch","scoredFiles","file","widthDiff","abs","heightDiff","resolutionDiff","fileBitrate","score","bitrateDiff","sort","a","b","resolution","isHlsMediaFile","mediaFile","toLowerCase","isProgressiveMediaFile","startsWith","collectVideoMediaFiles","linear","verbose","mediaFileElements","querySelectorAll","mf","index","getAttribute","apiFramework","toUpperCase","bitrateAttr","bitrateValue","isAudioMediaFile","hasExplicitDimensions","push","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","pushUrls","elements","collectLinearTracking","into","progress","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","errorUrls","parseVastXml","adElements","documentElement","find","parsed","vastAdTagUri","parseAdElement","wrapper","linear2","trackingUrls2","rules","followAdditionalWrappers","inLine","files","candidate","trackingUrls","id","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","requestVast","response","creds","mode","headers","referrerPolicy","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","fireTrackingPixels","fetchAndParsePod","trimmedXml","empty","resolveAd","podElements","buffet","ads","substring","filter","shift","createAdVideoElement","video","document","createElement","style","left","top","backgroundColor","playsInline","muted","setupAdEventListeners","onTimeUpdate","noteAdProgress","threshold","midpoint","videoWidth","videoHeight","handleVideoDecodeFailure","onPlaying","startStallWatchdog","creativeView","lastMuted","sampleViewability","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","reportCurrentAdError","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","handler","onLoadedMetadata","onCanPlay","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","adId","window","open","notUsed","now","inView","visibilityState","paused","lastViewSampleTime","handleFullscreenChange","fullscreenEl","expanded","fullscreenElement","contains","webkitFullscreenElement","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onInteraction","onFullscreenChange","IntersectionObserver","entry","entries","isIntersecting","intersectionRatio","observe","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","pendingPlayPromise","startAdPlayback","playPromise","play","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","loadCurrentAdMedia","selectBestMediaFile","isHlsAd","import_hls","isSupported","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","FRAME_COUNTER_RELIABLE_PROP","markRvfcReliable","cancelVideoFrameCallback","rvfc","onPresentedFrame","startVideoFrameProbe","blackFrameDetectionEnabled","setInterval","markFrameCounterReliable","BLACKFRAME_MIN_PLAYBACK_S","timeAdvancing","isRvfcReliable","decodedFrames","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","releaseAdDecoder","display","pointerEvents","continueLiveStreamDuringAds","visibility","opacity","catch","initialize","container","position","right","bottom","alignItems","justifyContent","zIndex","parentElement","requestAds","reject","preloaded","resolve","contentVolume","resume","stop","previousMutedState","fireNotUsedForUnplayedAds","pendingTimeouts","preloadingAds","resize","detachContainerHandlers","clear","isAdPlaying","listener","off","nextVolume","getOriginalMutedState","setAdVolume","getOriginalVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdId","getPodAdCount","getLoadedAdDuration","getPodTotalDurationMs","reduce","PRIVATE_HOST_PATTERNS","isLocalDevHost","host","pattern","toDevSafeUrl","rawUrl","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_palLoadPromise","loadPalSdk","goog","pal","script","async","existing","timeout","setAttribute","head","getOrCreateNonceLoader","consentSettings","ConsentSettings","allowStorage","NonceLoader","currentNonce","currentNonceManager","generateNonce","loader","request","manager","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","iconsSupported","playerType","playerVersion","supportedApiFrameworks","ppid","sessionId","JSON","stringify","loadNonceManager","getNonce","getCurrentNonce","injectNonce","searchParams","base","sep","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","reset","enabled","baseUrl","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","licenseKey","body","method","Authorization","ok","CTV_SESSION_STORAGE_KEY","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","resolveVastEnvironmentSignals","platformLat","isCtv","bridgeSignals","readNativeBridgeSignals","realDeviceId","readStoredDeviceId","platformDevice","readStoredString","inferDeviceIdType","readStoredLimitAdTracking","dpid","getOrCreateStoredUuid","getOrCreateCtvSessionId","deviceTypeHint","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","gameconsole","stb","settopbox","SET_TOP_BOX_UA","GAME_CONSOLE_UA","CONNECTED_TV_UA","FEATURE_PHONE_UA","resolveDeviceTypeHint","override","readDeviceTypeHintOverride","inferDeviceTypeHint","fallback","maxTouchPoints","keys","fromGlobal","normalizeDeviceTypeHint","__STORMCLOUD_DTH__","getNativeBridgeSources","normalized","safeCall","isInteger","thisArg","isEquivalentDeviceIdType","tagType","runtimeType","tag","runtime","resolveNativeDeviceId","readPlatformNativeDeviceId","isMacroPlaceholder","isZeroedAdId","storageKey","readPersistentId","writePersistentId","createUuid","readCookie","localStorage","setItem","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","prefix","cookie","decodeURIComponent","slice","bytes","getRandomValues","Uint8Array","randomUUID","i","seed","hex","performanceNow","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appName","readBridgeBoolean","appId","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","Android","webOS","tizen","amazon","Boolean","result","normalizeBoolean","getItem","deviceType","brand","os","vendor","isAndroid","androidModelMatch","isWebView","model","outerHeight","outerWidth","isWebApp","matchMedia","matches","standalone","screen","orientation","angle","origin","screenInfo","deviceMemory","memory","doNotTrack","language","languages","join","cookieEnabled","referrer","digest","encodedData","encode","input","utf8","unescape","buffer","charCodeAt","hashBuffer","hash","char","fallbackHash","timestamp","padEnd","nativeDeviceId","persistedId","clientInfo","getBrowserID","cachedBrowserId","sha256Hex","resolvePlayerIdentitySeed","flags","debugAdTiming","playerId","captureAt","player_id","ad_loaded","adLoaded","ad_detect","adDetect","capture_at","inputStreamType","input_stream_type","metricEvent","canPublish","buildPlayerMetricEvent","events","adDetectInfo","adLoadedInfo","adImpressionInfo","heartbeatData","ad_played_count","ad_url","adUrl","polyfillURLSearchParams","params","URLSearchParamsPolyfill","init","parseQueryString","append","query","cleanQuery","param","decodedValue","safeDecodeURIComponent","decodedKey","str","getAll","callback","polyfillTextEncoder","TextEncoderPolyfill","encoding","charcode","polyfillPromiseFinally","finally","constructor","then","polyfillObjectAssign","sources","TypeError","nextSource","nextKey","polyfillArrayFrom","arrayLike","items","mapFn","len","search","polyfillStringStartsWith","pos","polyfillStringEndsWith","polyfillStringIncludes","INVALID_VAST_PARAM_KEY","EXAMPLE_COM_URL","CTV_UNSUPPORTED_PARAMS","getValue","correlator","isMacroPlaceholder2","UNEXPANDED_MACRO_PATTERN","generateCorrelator","buf","Uint32Array","MAX_SAFE_INTEGER","expandInlineMacroPlaceholders","INLINE_DEVICE_MACRO_REPLACEMENTS","applyDeviceIdentityParams","runtimeId","tagLat","latValue","tagRdidValid","tagTypeValid","removeBrokenAppNameOrphans","_value","toDelete","suffix"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBACIA,EAAAA,CAAAA,CAAAA,OAAWC,GAAAA,IAAOC,KAAAA,CA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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/index.ts\nvar index_exports = {};\n__export(index_exports, {\n DEFAULT_TRACKING_INGEST_CONFIG: () => DEFAULT_TRACKING_INGEST_CONFIG,\n IS_BROWSER: () => IS_BROWSER,\n IS_GLOBAL: () => IS_GLOBAL,\n IS_IOS: () => IS_IOS,\n IS_SAFARI: () => IS_SAFARI,\n SUPPORTS_DASH: () => SUPPORTS_DASH,\n SUPPORTS_HLS: () => SUPPORTS_HLS,\n StormcloudPlayer: () => StormcloudPlayer_default,\n StormcloudVideoPlayer: () => StormcloudVideoPlayer,\n StormcloudVideoPlayerComponent: () => StormcloudVideoPlayerComponent,\n applyTrackingIngestConfig: () => applyTrackingIngestConfig,\n buildAnalyticsContext: () => buildAnalyticsContext,\n canPlay: () => canPlay,\n configureTrackingIngest: () => configureTrackingIngest,\n createHlsAdPlayer: () => createHlsAdPlayer,\n createPalNonceManager: () => createPalNonceManager,\n createStormcloudPlayer: () => createStormcloudPlayer,\n default: () => StormcloudVideoPlayerComponent,\n detectBrowser: () => detectBrowser,\n getBrowserConfigOverrides: () => getBrowserConfigOverrides,\n getBrowserID: () => getBrowserID,\n getClientInfo: () => getClientInfo,\n ingestPlayerTracking: () => ingestPlayerTracking,\n initializePolyfills: () => initializePolyfills,\n isMediaStream: () => isMediaStream,\n isTrackingIngestEnabled: () => isTrackingIngestEnabled,\n lazy: () => lazy,\n logBrowserInfo: () => logBrowserInfo,\n merge: () => merge,\n omit: () => omit,\n parseQuery: () => parseQuery,\n players: () => players_default,\n randomString: () => randomString,\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds,\n sendAdDetectTracking: () => sendAdDetectTracking,\n sendAdImpressionTracking: () => sendAdImpressionTracking,\n sendAdLoadedTracking: () => sendAdLoadedTracking,\n sendHeartbeat: () => sendHeartbeat,\n sendInitialTracking: () => sendInitialTracking,\n supportsFeature: () => supportsFeature,\n supportsModernJS: () => supportsModernJS,\n supportsWebKitPresentationMode: () => supportsWebKitPresentationMode,\n trackingIngestConfig: () => trackingIngestConfig\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/ui/StormcloudVideoPlayer.tsx\nvar import_react = __toESM(require(\"react\"), 1);\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS2 = 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 supportsModernJS2 = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS2 = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS2 = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS2 = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS: supportsModernJS2,\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 supportsModernJS() {\n try {\n return typeof Promise !== \"undefined\" && typeof Map !== \"undefined\" && typeof Set !== \"undefined\" && typeof Array.from !== \"undefined\" && typeof Object.assign !== \"undefined\" && typeof Array.prototype.forEach !== \"undefined\" && typeof String.prototype.includes !== \"undefined\";\n } catch (e) {\n return false;\n }\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}\nfunction supportsFeature(feature) {\n switch (feature) {\n case \"urlsearchparams\":\n return typeof URLSearchParams !== \"undefined\";\n case \"textencoder\":\n return typeof TextEncoder !== \"undefined\";\n case \"promises\":\n return typeof Promise !== \"undefined\";\n case \"fetch\":\n return typeof fetch !== \"undefined\";\n case \"crypto\":\n return typeof crypto !== \"undefined\" && typeof crypto.subtle !== \"undefined\";\n default:\n return false;\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 applyTrackingIngestConfig(overrides) {\n Object.assign(trackingIngestConfig, overrides);\n}\nfunction configureTrackingIngest(overrides) {\n applyTrackingIngestConfig(overrides);\n}\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/vastEnvironmentSignals.ts\nvar CTV_SESSION_STORAGE_KEY = \"stormcloud.ctv.sid\";\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar ANDROID_ID_TYPES = /* @__PURE__ */ new Set([\"aaid\", \"adid\"]);\nfunction resolveVastEnvironmentSignals(isCtv) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const realDeviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;\n let deviceId = realDeviceId;\n let deviceIdType = bridgeSignals.deviceIdType || readStoredString(\"deviceIdType\") || readStoredString(\"idtype\") || platformDevice.deviceIdType || inferDeviceIdType();\n const platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;\n let limitAdTracking = deviceId != null ? platformLat ?? readStoredLimitAdTracking() ?? false : void 0;\n if (!deviceId && isCtv) {\n const dpid = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (dpid) {\n deviceId = dpid;\n deviceIdType = \"dpid\";\n limitAdTracking = platformLat ?? readStoredLimitAdTracking() ?? false;\n }\n }\n const deviceTypeHint = resolveDeviceTypeHint(isCtv);\n if (isCtv) {\n return {\n isCtv: true,\n sessionId: getOrCreateCtvSessionId(),\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n }\n return {\n isCtv: false,\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n}\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar SET_TOP_BOX_UA = /LGSTB|\\bSTB\\b|STB\\d|Set-?Top|SetTopBox|TV ?Box|Kaon|Humax|Arris|Technicolor|Sagemcom|Infomir|MAG\\d{3}|KreaTV|Amino|Formuler|Dune ?HD|TiVo|MiBOX|Mi Box|SHIELD Android TV|\\bAFT[A-Z]|Roku|AppleTV|Apple TV|CrKey/i;\nvar GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;\nvar CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\\bTV\\b/i;\nvar FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;\nfunction resolveDeviceTypeHint(isCtv) {\n const override = readDeviceTypeHintOverride();\n if (override != null) return override;\n return inferDeviceTypeHint(isCtv);\n}\nfunction inferDeviceTypeHint(isCtv) {\n const fallback = isCtv ? DEVICE_TYPE_HINT.CONNECTED_TV : DEVICE_TYPE_HINT.DESKTOP;\n if (typeof navigator === \"undefined\") return fallback;\n const ua = navigator.userAgent || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n if (SET_TOP_BOX_UA.test(ua)) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n if (GAME_CONSOLE_UA.test(ua)) return DEVICE_TYPE_HINT.GAME_CONSOLE;\n if (CONNECTED_TV_UA.test(ua) && !/Mobile/i.test(ua)) {\n return DEVICE_TYPE_HINT.CONNECTED_TV;\n }\n if (FEATURE_PHONE_UA.test(ua)) return DEVICE_TYPE_HINT.FEATURE_PHONE;\n if (/iPad/i.test(ua) || /Macintosh/i.test(ua) && maxTouchPoints > 1) {\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/iPhone|iPod/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (/Android/i.test(ua)) {\n if (/Mobile/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (maxTouchPoints === 0) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n return fallback;\n}\nfunction readDeviceTypeHintOverride() {\n if (typeof window === \"undefined\") return void 0;\n const keys = [\"dth\", \"deviceTypeHint\"];\n const fromGlobal = normalizeDeviceTypeHint(window.__STORMCLOUD_DTH__);\n if (fromGlobal != null) return fromGlobal;\n for (const source of getNativeBridgeSources()) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeDeviceTypeHint(\n typeof value === \"function\" ? safeCall(value, source) : value\n );\n if (normalized != null) return normalized;\n }\n }\n for (const key of [\"stormcloud.dth\", \"dth\"]) {\n const normalized = normalizeDeviceTypeHint(readStoredString(key));\n if (normalized != null) return normalized;\n }\n return void 0;\n}\nfunction normalizeDeviceTypeHint(value) {\n if (typeof value === \"number\") {\n return Number.isInteger(value) && value >= 1 && value <= 7 ? value : void 0;\n }\n if (typeof value !== \"string\") return void 0;\n const trimmed = value.trim();\n if (/^[1-7]$/.test(trimmed)) return parseInt(trimmed, 10);\n return DEVICE_TYPE_HINT_ALIASES[trimmed.toLowerCase().replace(/[\\s_-]/g, \"\")];\n}\nfunction safeCall(fn, thisArg) {\n try {\n return fn.call(thisArg);\n } catch {\n return void 0;\n }\n}\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction isEquivalentDeviceIdType(tagType, runtimeType) {\n if (!tagType || !runtimeType) return false;\n const tag = tagType.toLowerCase();\n const runtime = runtimeType.toLowerCase();\n if (tag === runtime) return true;\n return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);\n}\nfunction resolveNativeDeviceId() {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || readStoredDeviceId() || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction getOrCreateCtvSessionId() {\n const existing = readPersistentId(CTV_SESSION_STORAGE_KEY);\n if (existing) {\n writePersistentId(CTV_SESSION_STORAGE_KEY, existing);\n return existing;\n }\n const sessionId = createUuid();\n writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);\n return sessionId;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction readStoredLimitAdTracking() {\n return normalizeBoolean(\n readStoredString(\"limitAdTracking\") || readStoredString(\"limitedAdTracking\") || readStoredString(\"is_lat\")\n );\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId();\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendInitialTracking(licenseKey, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n adLoaded: false,\n adDetect: false\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending initial tracking data:\",\n error\n );\n }\n}\nasync function sendAdDetectTracking(licenseKey, adDetectInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adDetect: true,\n captureAt: adDetectInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad detect tracking:\",\n error\n );\n }\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/utils/polyfills.ts\nfunction polyfillURLSearchParams() {\n if (typeof URLSearchParams !== \"undefined\") {\n return;\n }\n class URLSearchParamsPolyfill {\n constructor(init) {\n this.params = /* @__PURE__ */ new Map();\n if (typeof init === \"string\") {\n this.parseQueryString(init);\n } else if (init instanceof URLSearchParamsPolyfill) {\n init.forEach((value, key) => {\n this.append(key, value);\n });\n }\n }\n parseQueryString(query) {\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n if (!cleanQuery) return;\n cleanQuery.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n const decodedKey = this.safeDecodeURIComponent(key);\n const decodedValue = value ? this.safeDecodeURIComponent(value) : \"\";\n this.append(decodedKey, decodedValue);\n }\n });\n }\n safeDecodeURIComponent(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\n } catch (e) {\n return str;\n }\n }\n append(name, value) {\n const values = this.params.get(name) || [];\n values.push(String(value));\n this.params.set(name, values);\n }\n delete(name) {\n this.params.delete(name);\n }\n get(name) {\n const values = this.params.get(name);\n return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;\n }\n getAll(name) {\n return this.params.get(name) || [];\n }\n has(name) {\n return this.params.has(name);\n }\n set(name, value) {\n this.params.set(name, [String(value)]);\n }\n forEach(callback) {\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n callback(value, key, this);\n });\n });\n }\n toString() {\n const parts = [];\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n });\n });\n return parts.join(\"&\");\n }\n }\n window.URLSearchParams = URLSearchParamsPolyfill;\n}\nfunction polyfillTextEncoder() {\n if (typeof TextEncoder !== \"undefined\") {\n return;\n }\n class TextEncoderPolyfill {\n constructor() {\n this.encoding = \"utf-8\";\n }\n encode(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 128) {\n utf8.push(charcode);\n } else if (charcode < 2048) {\n utf8.push(192 | charcode >> 6, 128 | charcode & 63);\n } else if (charcode < 55296 || charcode >= 57344) {\n utf8.push(\n 224 | charcode >> 12,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n } else {\n i++;\n charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);\n utf8.push(\n 240 | charcode >> 18,\n 128 | charcode >> 12 & 63,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n }\n }\n return new Uint8Array(utf8);\n }\n }\n window.TextEncoder = TextEncoderPolyfill;\n}\nfunction polyfillPromiseFinally() {\n if (typeof Promise !== \"undefined\" && !Promise.prototype.finally) {\n Promise.prototype.finally = function(callback) {\n const constructor = this.constructor;\n return this.then(\n (value) => constructor.resolve(callback()).then(() => value),\n (reason) => constructor.resolve(callback()).then(() => {\n throw reason;\n })\n );\n };\n }\n}\nfunction polyfillObjectAssign() {\n if (typeof Object.assign !== \"function\") {\n Object.assign = function(target, ...sources) {\n if (target == null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const to = Object(target);\n for (let i = 0; i < sources.length; i++) {\n const nextSource = sources[i];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\nfunction polyfillArrayFrom() {\n if (!Array.from) {\n Array.from = function(arrayLike, mapFn, thisArg) {\n const items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError(\"Array.from requires an array-like object\");\n }\n const len = items.length >>> 0;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n if (mapFn) {\n result[i] = mapFn.call(thisArg, items[i], i);\n } else {\n result[i] = items[i];\n }\n }\n return result;\n };\n }\n}\nfunction polyfillStringStartsWith() {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function(search, pos) {\n pos = !pos || pos < 0 ? 0 : +pos;\n return this.substring(pos, pos + search.length) === search;\n };\n }\n}\nfunction polyfillStringEndsWith() {\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function(search, length) {\n if (length === void 0 || length > this.length) {\n length = this.length;\n }\n return this.substring(length - search.length, length) === search;\n };\n }\n}\nfunction polyfillStringIncludes() {\n if (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== \"number\") {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n }\n return this.indexOf(search, start) !== -1;\n };\n }\n}\nfunction initializePolyfills() {\n polyfillObjectAssign();\n polyfillArrayFrom();\n polyfillStringStartsWith();\n polyfillStringEndsWith();\n polyfillStringIncludes();\n polyfillURLSearchParams();\n polyfillTextEncoder();\n polyfillPromiseFinally();\n}\n\n// src/utils/vastMacros.ts\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nvar EXAMPLE_COM_URL = /example\\.com/i;\nvar CTV_UNSUPPORTED_PARAMS = [\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\"\n];\nvar INLINE_DEVICE_MACRO_REPLACEMENTS = [\n { pattern: /\\[RDID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IFA\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[ADVERTISING[_-]?ID(?:ENTIFIER)?\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[DEVICE[_-]?ID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IDTYPE\\]/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /\\{rdid\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{device[_-]?id\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{idtype\\}/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_IDENTIFIER_PLAIN%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%ADVERTISING_ID_OPT_OUT%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%ADVERTISING_ID_TYPE%%/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_ID%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%LIMIT_AD_TRACKING%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%SESSION_ID%%/gi, getValue: (ctx) => ctx.sessionId },\n { pattern: /%%CORRELATOR%%/gi, getValue: (ctx) => ctx.correlator }\n];\nfunction isMacroPlaceholder2(value) {\n if (value == null) return true;\n const trimmed = value.trim();\n if (!trimmed) return true;\n if (UNEXPANDED_MACRO_PATTERN.test(trimmed)) return true;\n return /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(trimmed);\n}\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nfunction expandInlineMacroPlaceholders(baseUrl, ctx) {\n let url = baseUrl;\n for (const { pattern, getValue } of INLINE_DEVICE_MACRO_REPLACEMENTS) {\n const value = getValue(ctx);\n if (value != null && value !== \"\") {\n url = url.replace(pattern, encodeURIComponent(value));\n }\n }\n return url;\n}\nfunction applyDeviceIdentityParams(params, ctx) {\n const runtimeId = ctx.deviceId?.trim();\n const runtimeType = ctx.deviceIdType?.trim() || inferDeviceIdType();\n const tagRdid = params.get(\"rdid\");\n const tagType = params.get(\"idtype\");\n const tagLat = params.get(\"is_lat\");\n const latValue = ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0;\n if (runtimeId) {\n params.set(\"rdid\", runtimeId);\n params.set(\"idtype\", runtimeType || tagType || \"aaid\");\n params.set(\"is_lat\", latValue ?? (isMacroPlaceholder2(tagLat) ? \"0\" : tagLat));\n return;\n }\n const tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));\n const tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));\n if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n if (tagRdidValid) {\n if (isMacroPlaceholder2(tagType) && runtimeType) {\n params.set(\"idtype\", runtimeType);\n }\n if (isMacroPlaceholder2(tagLat)) {\n params.set(\"is_lat\", latValue ?? \"0\");\n }\n return;\n }\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n}\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nfunction applyVastMacros(baseUrl, ctx) {\n const expandedUrl = expandInlineMacroPlaceholders(baseUrl, ctx);\n let url;\n try {\n url = new URL(normalizeVastTagUrl(expandedUrl));\n } catch {\n return replaceCorrelatorFallback(expandedUrl, ctx.correlator);\n }\n const params = url.searchParams;\n removeBrokenAppNameOrphans(params);\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n }\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n params.delete(\"ppos\");\n params.delete(\"lip\");\n if (ctx.podMinDurationMs != null) {\n params.set(\"pmnd\", String(Math.max(0, Math.round(ctx.podMinDurationMs))));\n }\n if (ctx.podMaxDurationMs != null) {\n params.set(\"pmxd\", String(Math.max(0, Math.round(ctx.podMaxDurationMs))));\n }\n if (ctx.podMaxAds != null) {\n params.set(\"pmad\", String(Math.max(1, Math.round(ctx.podMaxAds))));\n }\n if (!ctx.isCtv && ctx.pageUrl) {\n params.set(\"url\", ctx.pageUrl);\n params.set(\"description_url\", ctx.pageUrl);\n }\n const existingUrl = params.get(\"url\") || \"\";\n if (EXAMPLE_COM_URL.test(existingUrl)) {\n params.delete(\"url\");\n params.delete(\"description_url\");\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n applyDeviceIdentityParams(params, ctx);\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n if (ctx.programTitle) {\n params.set(\"ct_ti\", ctx.programTitle);\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (isMacroPlaceholder2(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n removeBrokenAppNameOrphans(params);\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n\n// src/player/AdConfigManager.ts\nvar AdConfigManager = class {\n constructor(config, video) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds = /* @__PURE__ */ new Set();\n this.streamCorrelator = generateCorrelator();\n this.viewCorrelator = generateCorrelator();\n this.consentSignals = {};\n this.podCounter = 0;\n this.podAssignedByPrefetch = false;\n this.lastHeartbeatTime = 0;\n this.defaultPodMaxAds = 6;\n this.defaultPodMaxDurationMs = 12e4;\n this.config = config;\n this.video = video;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n isVmapEnabled() {\n return !!(this.config.isVmap && this.config.vmapUrl?.trim());\n }\n async fetchAdConfiguration() {\n if (this.isVmapEnabled()) {\n await this.fetchAndParseVmap(this.config.vmapUrl);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VMAP mode enabled\");\n }\n return;\n }\n const vastMode = this.config.vastMode || \"default\";\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VAST mode:\", vastMode);\n }\n if (vastMode === \"adstorm\") {\n if (!this.config.licenseKey) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] AdStorm mode requires a license key\"\n );\n }\n return;\n }\n const vastEndpoint = `https://adstorm.co/api-adstorm-dev/adstorm/vast/${this.config.licenseKey}`;\n this.apiVastTagUrl = vastEndpoint;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using AdStorm VAST endpoint (adstorm mode):\",\n vastEndpoint\n );\n }\n return;\n }\n if (this.config.vastTagUrl) {\n this.apiVastTagUrl = normalizeVastTagUrl(this.config.vastTagUrl);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using custom VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n return;\n }\n const apiUrl = \"https://adstorm.co/api-adstorm-dev/adstorm/ads/web\";\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Fetching ad configuration from:\",\n apiUrl\n );\n }\n const headers = {};\n if (this.config.licenseKey) {\n headers[\"Authorization\"] = `Bearer ${this.config.licenseKey}`;\n }\n const response = await fetch(apiUrl, { headers });\n if (!response.ok) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Failed to fetch ad configuration: ${response.status}`\n );\n }\n return;\n }\n const data = await response.json();\n const imaPayload = data.response?.ima?.[\"publisherdesk.ima\"]?.payload;\n if (imaPayload) {\n let decodedPayload = imaPayload;\n try {\n decodedPayload = decodeURIComponent(imaPayload);\n } catch {\n console.warn(\"[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:\", imaPayload);\n }\n console.log(\"[StormcloudVideoPlayer] Raw VAST tag URL (from API):\", decodedPayload);\n this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Normalized VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n } else {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response\"\n );\n }\n }\n const numberAds = data.response?.options?.vast?.cue_tones?.number_ads;\n if (numberAds != null && numberAds > 0) {\n this.apiNumberAds = numberAds;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Number of ads per break from API:\",\n this.apiNumberAds\n );\n }\n }\n }\n async fetchAndParseVmap(vmapUrl) {\n if (!vmapUrl.trim()) {\n return;\n }\n try {\n const response = await fetch(vmapUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch VMAP (${response.status})`);\n }\n const vmapXml = await response.text();\n this.vmapBreaks = this.parseVmapToBreaks(vmapXml);\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Loaded ${this.vmapBreaks.length} VMAP ad break(s) from:`,\n vmapUrl\n );\n }\n } catch (error) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to load VMAP:\", error);\n }\n }\n }\n parseVmapToBreaks(vmapXml) {\n if (typeof DOMParser === \"undefined\") {\n return [];\n }\n const doc = new DOMParser().parseFromString(vmapXml, \"application/xml\");\n if (doc.querySelector(\"parsererror\")) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Invalid VMAP XML received\");\n }\n return [];\n }\n const VMAP_NS = \"http://www.iab.net/videosuite/vmap\";\n let adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, \"AdBreak\"));\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(\n doc.querySelectorAll(\"AdBreak, vmap\\\\:AdBreak\")\n );\n }\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(doc.getElementsByTagName(\"*\")).filter(\n (el) => el.localName === \"AdBreak\"\n );\n }\n const parsed = [];\n adBreakNodes.forEach((node, index) => {\n const timeOffsetRaw = (node.getAttribute(\"timeOffset\") || \"\").trim();\n const startTimeMs = this.parseVmapTimeOffsetToMs(timeOffsetRaw);\n if (startTimeMs == null) {\n return;\n }\n let adTagNode = node.getElementsByTagNameNS(VMAP_NS, \"AdTagURI\")[0];\n if (!adTagNode) {\n adTagNode = node.querySelector(\"AdTagURI, vmap\\\\:AdTagURI\") ?? void 0;\n }\n const adTagUrl = (adTagNode?.textContent || \"\").trim();\n if (!adTagUrl) {\n return;\n }\n const breakId = node.getAttribute(\"breakId\") || `vmap-break-${index}-${timeOffsetRaw || \"unknown\"}`;\n parsed.push({\n id: breakId,\n startTimeMs,\n vastTagUrl: adTagUrl\n });\n });\n parsed.sort((a, b) => {\n const aStart = a.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : a.startTimeMs;\n const bStart = b.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : b.startTimeMs;\n return aStart - bStart;\n });\n return parsed;\n }\n parseVmapTimeOffsetToMs(timeOffset) {\n if (!timeOffset) {\n return void 0;\n }\n const normalized = timeOffset.trim().toLowerCase();\n if (normalized === \"start\") {\n return 0;\n }\n if (normalized === \"end\") {\n return -1;\n }\n const hms = timeOffset.match(\n /^(\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/\n );\n if (hms) {\n const [, hh, mm, ss, ms = \"0\"] = hms;\n const hours = Number(hh);\n const minutes = Number(mm);\n const seconds = Number(ss);\n const millis = Number(ms.padEnd(3, \"0\").slice(0, 3));\n return (hours * 3600 + minutes * 60 + seconds) * 1e3 + millis;\n }\n const percent = timeOffset.match(/^(\\d+(?:\\.\\d+)?)%$/);\n if (percent) {\n const ratio = Number(percent[1]) / 100;\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3 * ratio);\n }\n return void 0;\n }\n return void 0;\n }\n getAdBreakKey(adBreak) {\n if (adBreak.id) {\n return adBreak.id;\n }\n return `${adBreak.startTimeMs}-${adBreak.vastTagUrl || \"\"}`;\n }\n resolveBreakStartMs(adBreak) {\n if (adBreak.startTimeMs >= 0) {\n return adBreak.startTimeMs;\n }\n if (adBreak.startTimeMs === -1) {\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3);\n }\n }\n return void 0;\n }\n findCurrentOrNextBreak(nowMs) {\n const schedule = this.vmapBreaks;\n let candidate;\n const tol = this.config.driftToleranceMs ?? 1e3;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (breakStartMs <= nowMs + tol && (candidate == null || breakStartMs > (this.resolveBreakStartMs(candidate) ?? 0))) {\n candidate = b;\n }\n }\n return candidate;\n }\n findBreakForTime(nowMs) {\n const schedule = this.vmapBreaks;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (b.durationMs) {\n const end = breakStartMs + b.durationMs;\n if (nowMs >= breakStartMs && nowMs < end) {\n return b;\n }\n continue;\n }\n if (nowMs >= breakStartMs) {\n return b;\n }\n }\n return void 0;\n }\n selectVastTagsForBreak(b) {\n if (!b || !b.vastTagUrl) return void 0;\n if (b.vastTagUrl.includes(\",\")) {\n return b.vastTagUrl.split(\",\").map((s) => s.trim()).filter((s) => s.length > 0);\n }\n return [b.vastTagUrl];\n }\n beginNewAdPod() {\n this.podCounter++;\n }\n resolvePodParams(breakDurationMs) {\n const maxDurationMs = breakDurationMs != null && breakDurationMs > 0 ? breakDurationMs : this.config.podMaxDurationMs != null && this.config.podMaxDurationMs > 0 ? this.config.podMaxDurationMs : this.defaultPodMaxDurationMs;\n const maxAds = this.config.podMaxAds && this.config.podMaxAds > 0 ? this.config.podMaxAds : this.apiNumberAds && this.apiNumberAds > 0 ? this.apiNumberAds : this.defaultPodMaxAds;\n const minDurationMs = this.config.podExactDuration && maxDurationMs != null ? maxDurationMs : 0;\n return { maxAds, minDurationMs, maxDurationMs };\n }\n getPalDescriptionUrl() {\n if (!this.apiVastTagUrl) return void 0;\n try {\n const params = new URL(this.apiVastTagUrl).searchParams;\n return params.get(\"description_url\") || params.get(\"url\") || void 0;\n } catch {\n return void 0;\n }\n }\n generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {\n const adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;\n const envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);\n const urlWithMacros = applyVastMacros(baseUrl, {\n correlator: this.viewCorrelator,\n streamCorrelator: this.streamCorrelator,\n pod: this.podCounter > 0 ? this.podCounter : void 0,\n podMaxAds: podParams.maxAds,\n podMinDurationMs: podParams.minDurationMs,\n podMaxDurationMs: podParams.maxDurationMs,\n isCtv: envSignals.isCtv,\n pageUrl: !envSignals.isCtv && typeof window !== \"undefined\" ? toDevSafeUrl(window.location.href) : void 0,\n adWillPlayMuted,\n adWillAutoPlay: !!this.config.autoplay,\n sessionId: envSignals.sessionId,\n deviceId: envSignals.deviceId,\n deviceIdType: envSignals.deviceIdType,\n limitAdTracking: envSignals.limitAdTracking,\n deviceTypeHint: envSignals.deviceTypeHint,\n adTest: this.config.adTest,\n ...this.config.programTitle ? { programTitle: this.config.programTitle } : {},\n consent: this.consentSignals\n });\n const finalUrl = palNonce.injectNonce(urlWithMacros);\n console.log(\n `[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=${this.podCounter}, pmad=${podParams.maxAds}, pmnd=${podParams.minDurationMs}, pmxd=${podParams.maxDurationMs ?? \"?\"}):`,\n finalUrl\n );\n return finalUrl;\n }\n // --- Tracking ---\n initializeTracking() {\n sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(() => {\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n }).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send initial tracking:\",\n error\n );\n }\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n });\n }\n sendHeartbeatIfNeeded() {\n const now = Date.now();\n if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {\n this.lastHeartbeatTime = now;\n sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send heartbeat:\",\n error\n );\n }\n });\n }\n }\n destroyTracking() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = void 0;\n }\n }\n};\n\n// src/player/AdTimingService.ts\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls2.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls2.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls2.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls2.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls2.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls2.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls2.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls2.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.adRequestQueue = [];\n this.adPodQueue = [];\n this.maxPlaceholderDurationMs = 5e3;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const adPlayer = this.host.getAdPlayer();\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"all_ads_completed\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.inAdBreak) {\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n let errorMessage = \"Ad playback failed\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure();\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] content_resume event: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n });\n }\n recreateAdController() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Recreating AdController for new ad\");\n }\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n async handleAdStart(_marker) {\n const scheduled = this.adConfig.findCurrentOrNextBreak(\n this.host.video.currentTime * 1e3\n );\n if (scheduled) {\n this.adConfig.consumedVmapBreakIds.add(this.adConfig.getAdBreakKey(scheduled));\n }\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n this.clearPendingAdBreak();\n return;\n }\n const adBreakDurationMs = _marker.durationSeconds != null ? _marker.durationSeconds * 1e3 : scheduled?.durationMs;\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[CONTINUOUS-FETCH] ${mode} MODE: Target duration=${adBreakDurationMs}ms`\n );\n }\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n const podPlayed = await this.startOptimizedPod(\n baseVastUrl,\n adBreakDurationMs,\n currentMuted,\n currentVolume\n );\n if (!podPlayed) {\n if (this.debug) {\n console.log(\"[POD] Initial pod request did not fill; attempting top-up pod request\");\n }\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n await this.tryNextAvailableAdWithRateLimit();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs, currentMuted, currentVolume) {\n let podUrl;\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.continuousFetchingActive = false;\n this.recreateAdController();\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n await adPlayer.requestAds(podUrl);\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) {\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n return false;\n }\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: podUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await adPlayer.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(currentMuted ? 0 : currentVolume);\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(podUrl, Date.now());\n }\n this.continuousFetchingActive = true;\n this.recreateAdController();\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Continuous fetching\n // ───────────────────────────────────────────────────────────────\n startContinuousFetching(baseVastUrl) {\n if (!this.continuousFetchingActive) {\n return;\n }\n if (this.continuousFetchLoopRunning) {\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Fetch loop already running, skipping duplicate start\");\n }\n return;\n }\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Starting continuous ad fetching loop\");\n }\n this.continuousFetchLoopRunning = true;\n this.continuousFetchLoop(baseVastUrl);\n }\n async continuousFetchLoop(baseVastUrl) {\n const epoch = this.timing.adBreakEpoch;\n while (this.continuousFetchingActive && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (remaining <= this.timing.getMinRemainingMsToStartAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough ad break time left (wall=${this.timing.getWallClockRemainingAdMs()}ms, budget=${this.timing.getDurationBudgetRemainingMs()}ms), stopping URL generation`);\n }\n break;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, stopping URL generation\");\n }\n break;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), stopping URL generation`);\n }\n break;\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Maximum ad requests reached (${this.timing.maxTotalAdRequestsPerBreak}), stopping`);\n }\n break;\n }\n const maxQueueSize = 5;\n if (this.adRequestQueue.length >= maxQueueSize) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] URL queue full (${this.adRequestQueue.length}), waiting...`);\n }\n await new Promise((resolve) => setTimeout(resolve, 1e3));\n continue;\n }\n const newAdUrl = this.nextAdRequestUrl(baseVastUrl);\n if (!newAdUrl || this.timing.failedVastUrls.has(newAdUrl) || this.timing.isUrlInCooldown(newAdUrl)) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n continue;\n }\n if (this.debug) {\n const queuedUrlsPreview = [...this.adRequestQueue, newAdUrl];\n console.log(\n `[CONTINUOUS-FETCH] Queued VAST URL (queue size: ${queuedUrlsPreview.length})`,\n { queuedUrls: queuedUrlsPreview }\n );\n }\n this.adRequestQueue.push(newAdUrl);\n const generationDelay = this.timing.consecutiveFailures > 0 ? Math.min(1e3 * Math.pow(2, this.timing.consecutiveFailures), 5e3) : 500;\n await new Promise((resolve) => setTimeout(resolve, generationDelay));\n }\n this.continuousFetchLoopRunning = false;\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] URL generation loop ended (queued: ${this.adRequestQueue.length})`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n }\n stopContinuousFetching() {\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.placeholder.hide();\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Stopping continuous ad fetching\");\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad iteration\n // ───────────────────────────────────────────────────────────────\n async tryNextAvailableAdWithRateLimit() {\n if (!this.inAdBreak) {\n return;\n }\n const epoch = this.timing.adBreakEpoch;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n }\n this.handleAdPodComplete();\n return;\n }\n const backoffMultiplier = Math.pow(2, this.timing.consecutiveFailures);\n const backoffDelay = Math.min(this.timing.backoffBaseMs * backoffMultiplier, this.timing.maxBackoffMs);\n const effectiveMinInterval = this.timing.minAdRequestIntervalMs + (this.timing.consecutiveFailures > 0 ? backoffDelay : 0);\n const timeSinceLastRequest = Date.now() - this.timing.lastAdRequestTime;\n if (timeSinceLastRequest < effectiveMinInterval) {\n const waitTime = effectiveMinInterval - timeSinceLastRequest;\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Rate limiting: waiting ${waitTime}ms before next request (backoff: ${this.timing.consecutiveFailures} failures)`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) {\n return;\n }\n return this.tryNextAvailableAd(0);\n }\n async tryNextAvailableAd(retryCount = 0) {\n if (!this.inAdBreak) {\n return;\n }\n const remaining = this.timing.getRemainingAdMs();\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough time remaining (${remaining}ms) to start another ad, ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, ending ad break gracefully\");\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n this.timing.cleanupTemporaryFailures();\n while (this.adRequestQueue.length > 0) {\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping permanently-failed URL, trying next...\");\n continue;\n }\n if (this.timing.isUrlInCooldown(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping URL in cooldown (recent no-fill), trying next...\");\n continue;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Requesting next ad via HLS ad player (${this.timing.currentAdIndex + 1}, ${this.adRequestQueue.length} remaining in queue)`);\n }\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad request failed:\", errorMessage);\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n const maxRetries = 3;\n if (this.continuousFetchingActive && retryCount < maxRetries && remaining > 2e3) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Queue empty, waiting for URLs... (${retryCount + 1}/${maxRetries})`);\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n await this.tryNextAvailableAd(retryCount + 1);\n return;\n }\n if (!this.isShowingPlaceholder && remaining > 1e3) {\n this.showPlaceholderAndWaitForAds();\n } else {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] No more ads available, ending ad break\");\n this.handleAdPodComplete();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n async playSingleAd(vastTagUrl) {\n const adPlayer = this.host.getAdPlayer();\n if (adPlayer.isAdPlaying()) return;\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n this.recreateAdController();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n const ap = this.host.getAdPlayer();\n await ap.requestAds(vastTagUrl);\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: vastTagUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) return;\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n this.timing.rejectLoadedAdForDuration(ap);\n this.recreateAdController();\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n try {\n this.timing.startAdFailsafeTimer(requestToken);\n await ap.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.consecutiveFailures = 0;\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (playError) {\n if (this.debug) console.error(\"[AD-ERROR] Failed to play ad:\", playError);\n if (this.timing.isTemporaryAdError(playError)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary play error - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent play error - URL blacklisted\");\n }\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw playError;\n }\n } catch (error) {\n const errorMessage = error?.message || \"\";\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", errorMessage);\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary error (no-fill/timeout) - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent error - URL blacklisted:\", errorMessage);\n }\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Placeholder wait\n // ───────────────────────────────────────────────────────────────\n async showPlaceholderAndWaitForAds() {\n const remaining = this.timing.getRemainingAdMs();\n const waitTime = Math.min(this.maxPlaceholderDurationMs, remaining);\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping placeholder wait\");\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping placeholder - too many consecutive failures\");\n this.handleAdPodComplete();\n return;\n }\n if (waitTime < 1e3) {\n this.handleAdPodComplete();\n return;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Showing placeholder for ${waitTime}ms while waiting for ad URLs`);\n }\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n const checkInterval = 300;\n const maxChecks = Math.floor(waitTime / checkInterval);\n for (let i = 0; i < maxChecks; i++) {\n await new Promise((resolve) => setTimeout(resolve, checkInterval));\n if (!this.inAdBreak) return;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Too many failures during placeholder wait\");\n break;\n }\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Not enough time remaining during placeholder wait, ending ad break\");\n break;\n }\n while (this.adRequestQueue.length > 0) {\n if (!this.timing.hasTimeToStartAnotherAd()) break;\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) continue;\n if (this.timing.isUrlInCooldown(nextAdUrl)) continue;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad URL available, requesting via HLS ad player\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n }\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Placeholder timeout, ending ad break\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n this.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n handleAdPodComplete() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\");\n }\n this.timing.resetForBreakEnd();\n this.stopContinuousFetching();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.adRequestQueue = [];\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.host.getAdPlayer().stop().catch(() => {\n });\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure() {\n this.timing.consecutiveFailures++;\n this.timing.recordGamNoFill();\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] Ad failure: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}, consecutiveFailures=${this.timing.consecutiveFailures}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(`[CONTINUOUS-FETCH] Max consecutive failures reached (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n if (this.debug) console.log(\"[AD-ERROR] Ad failed and not enough time remaining for another ad. Failed URLs:\", this.timing.failedVastUrls.size);\n this.handleAdPodComplete();\n }\n }\n};\n\n// src/player/StormcloudVideoPlayer.ts\nvar StormcloudVideoPlayer = class {\n constructor(config) {\n this.attached = false;\n this.palPlaybackStarted = false;\n initializePolyfills();\n const browserOverrides = getBrowserConfigOverrides();\n this.config = { ...browserOverrides, ...config };\n this.video = config.videoElement;\n logBrowserInfo(config.debugAdTiming);\n this.adPlayer = this.createAdPlayer(false);\n this.palNonce = createPalNonceManager();\n this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {\n onEarlyStartCue: (marker, fragmentSn, cueKey) => {\n this.startAdPrefetch(marker, fragmentSn, cueKey);\n },\n onPlaybackCue: (marker, cueKey) => {\n this.onScte35Marker(marker, cueKey);\n },\n isInAdBreak: () => this.adBreak.inAdBreak\n });\n this.adConfig = new AdConfigManager(this.config, this.video);\n this.timing = new AdTimingService(this.config, this.video, {\n onAdStopTimerFired: () => this.onAdStopTimerFired(),\n onAdStartTimerFired: (marker, cueKey) => {\n this.startScte35AdBreak(\n marker,\n cueKey,\n marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs\n );\n },\n onWatchdogTimeout: () => this.adBreak.handleAdFailure(),\n onFailsafeTimeout: () => this.adBreak.handleAdFailure(),\n getAdState: () => ({\n inAdBreak: this.adBreak.inAdBreak,\n showAds: this.adBreak.showAds,\n adPlaying: this.adPlayer.isAdPlaying()\n })\n });\n this.placeholder = new PlaceholderLayer(this.video, !!this.config.debugAdTiming);\n this.hlsEngine = new HlsEngine(this.config, this.video, this.cueManager, this.timing, {\n onManifestParsed: async (isLive) => this.onManifestParsed(isLive),\n onScte35Cue: (marker, context) => this.cueManager.onScte35Cue(marker, context),\n activatePendingCuesForFragment: (frag) => this.cueManager.activatePendingScte35CuesForFragment(frag),\n onFatalDestroy: () => this.destroy(),\n isInAdBreak: () => this.adBreak.inAdBreak,\n hasPendingAdBreak: () => this.adBreak.pendingAdBreak !== null\n });\n this.adBreak = new AdBreakOrchestrator(\n {\n config: this.config,\n video: this.video,\n getAdPlayer: () => this.adPlayer,\n setAdPlayer: (p) => {\n this.adPlayer = p;\n },\n createAdPlayer: (c) => this.createAdPlayer(c),\n shouldContinueLiveStreamDuringAds: () => this.shouldContinueLiveStreamDuringAds(),\n isLiveStream: () => this.hlsEngine.isLiveStream,\n getLiveSyncPosition: () => this.hlsEngine.getLiveSyncPosition(),\n restartHlsLoad: (position) => this.hlsEngine.restartLoadAt(position),\n reloadLiveStream: () => this.hlsEngine.reloadLiveStream(),\n recoverMediaError: () => this.hlsEngine.recoverMediaError(),\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds(),\n generatePodVastUrl: (base, breakDurationMs) => this.generatePodVastUrl(base, breakDurationMs),\n onAdClick: () => this.palNonce.sendAdClick(),\n onAdInteraction: (event) => this.palNonce.sendAdTouch(event)\n },\n this.timing,\n this.adConfig,\n this.cueManager,\n this.placeholder\n );\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n createAdPlayer(continueLiveStreamDuringAds) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Creating HLS ad player\");\n }\n return createHlsAdPlayer(this.video, {\n continueLiveStreamDuringAds,\n ...this.config.licenseKey ? { licenseKey: this.config.licenseKey } : {},\n ...this.hlsEngine?.hls ? { mainHlsInstance: this.hlsEngine.hls } : {}\n });\n }\n generatePodVastUrl(baseUrl, breakDurationMs) {\n const podParams = this.adConfig.resolvePodParams(breakDurationMs);\n return this.adConfig.generatePodVastUrl(\n baseUrl,\n podParams,\n this.adPlayer,\n this.palNonce,\n this.adBreak.inAdBreak\n );\n }\n // ───────────────────────────────────────────────────────────────\n // Lifecycle\n // ───────────────────────────────────────────────────────────────\n async load() {\n if (!this.attached) {\n this.attach();\n }\n try {\n await this.adConfig.fetchAdConfiguration();\n } catch (error) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to fetch ad configuration:\",\n error\n );\n }\n }\n const palDescriptionUrl = this.adConfig.getPalDescriptionUrl();\n this.palNonce.generateNonce({\n videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,\n videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,\n adWillAutoPlay: !!this.config.autoplay,\n adWillPlayMuted: true,\n playerVolume: 0,\n continuousPlayback: this.config.lowLatencyMode ?? false,\n ...palDescriptionUrl ? { descriptionUrl: palDescriptionUrl } : {}\n }).catch(() => {\n });\n fetchConsentSignals().then((signals) => {\n this.adConfig.consentSignals = signals;\n }).catch(() => {\n });\n this.adConfig.initializeTracking();\n if (this.hlsEngine.shouldUseNativeHls(() => this.getStreamType())) {\n await this.hlsEngine.setupNativeHls();\n const continueLiveStreamDuringAds = this.shouldContinueLiveStreamDuringAds();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Native HLS ad behavior:\", {\n isLive: this.hlsEngine.isLiveStream,\n continueLiveStreamDuringAds\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(continueLiveStreamDuringAds);\n this.adPlayer.initialize();\n return;\n }\n this.hlsEngine.setupHls();\n }\n async onManifestParsed(isLive) {\n if (this.hlsEngine.reloadingLiveStream) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Manifest re-parsed after hard reload \\u2014 skipping ad-player setup\");\n }\n return;\n }\n if (!this.adConfig.isVmapEnabled() && !isLive && this.adConfig.vmapBreaks.length === 0 && this.adConfig.apiVastTagUrl) {\n const prerollKey = \"synthetic-vod-preroll\";\n if (!this.adConfig.consumedVmapBreakIds.has(prerollKey)) {\n this.adConfig.vmapBreaks = [\n { id: prerollKey, startTimeMs: 0, vastTagUrl: this.adConfig.apiVastTagUrl }\n ];\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Injected synthetic VOD preroll from apiVastTagUrl\"\n );\n }\n }\n }\n if (this.debug) {\n const adBehavior = this.shouldContinueLiveStreamDuringAds() ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\"[StormcloudVideoPlayer] Stream type detected:\", {\n isLive,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(this.shouldContinueLiveStreamDuringAds());\n this.adPlayer.initialize();\n }\n attach() {\n if (this.attached) return;\n this.attached = true;\n this.video.autoplay = !!this.config.autoplay;\n this.video.muted = !!this.config.muted;\n this.adPlayer.initialize();\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.attachImaEventListeners();\n this.video.addEventListener(\"play\", () => {\n if (!this.palPlaybackStarted && !this.adPlayer.isAdPlaying()) {\n this.palPlaybackStarted = true;\n this.palNonce.sendPlaybackStart();\n }\n });\n this.endedHandler = () => {\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.onVideoEnded();\n };\n this.video.addEventListener(\"ended\", this.endedHandler);\n this.video.addEventListener(\"mousedown\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.video.addEventListener(\"touchstart\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.timeUpdateHandler = () => {\n this.onTimeUpdate(this.video.currentTime);\n };\n this.video.addEventListener(\"timeupdate\", this.timeUpdateHandler);\n this.emptiedHandler = () => {\n if (this.hlsEngine.nativeHlsMode && this.hlsEngine.videoSrcProtection && !this.adPlayer.isAdPlaying()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Video src was cleared, restoring:\",\n this.hlsEngine.videoSrcProtection\n );\n }\n const currentTime = this.video.currentTime;\n const wasPaused = this.video.paused;\n this.video.src = this.hlsEngine.videoSrcProtection;\n this.video.currentTime = currentTime;\n if (!wasPaused) {\n this.video.play().catch(() => {\n });\n }\n }\n };\n this.video.addEventListener(\"emptied\", this.emptiedHandler);\n }\n shouldContinueLiveStreamDuringAds() {\n if (this.config.pauseContentDuringAds) {\n return false;\n }\n if (this.hlsEngine.isLiveStream) {\n return true;\n }\n const duration = this.video.duration;\n if (!Number.isFinite(duration) || duration === Infinity) {\n return true;\n }\n return false;\n }\n // ───────────────────────────────────────────────────────────────\n // SCTE-35 marker orchestration\n // ───────────────────────────────────────────────────────────────\n onScte35Marker(marker, cueKey) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 marker detected:\", {\n type: marker.type,\n ptsSeconds: marker.ptsSeconds,\n durationSeconds: marker.durationSeconds,\n currentTime: this.video.currentTime,\n raw: marker.raw,\n hasPendingAdBreak: !!this.adBreak.pendingAdBreak\n });\n }\n if (marker.type === \"start\") {\n if (this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n const newDurationMs = marker.durationSeconds * 1e3;\n if (this.timing.expectedAdBreakDurationMs == null || newDurationMs > this.timing.expectedAdBreakDurationMs) {\n this.timing.setAdBreakDurationBoundary(newDurationMs);\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Updated ad break duration from subsequent marker: ${newDurationMs}ms, remaining: ${this.timing.getWallClockRemainingAdMs()}ms`\n );\n }\n }\n }\n return;\n }\n if (!this.adBreak.adDetectSentForCurrentBreak) {\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n }\n const hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;\n const durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.adBreak.pendingAdBreak?.marker.durationSeconds != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;\n const isManifest = isManifestBasedMarker(marker);\n const forceImmediate = this.config.immediateManifestAds ?? true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad start decision:\", {\n isManifestMarker: isManifest,\n forceImmediate,\n hasPts: typeof marker.ptsSeconds === \"number\",\n hasPrefetchedAds\n });\n }\n if (isManifest && forceImmediate) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Starting ad immediately (manifest-based)${hasPrefetchedAds ? \" with prefetched ads\" : \"\"}`\n );\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n } else if (typeof marker.ptsSeconds === \"number\") {\n const tol = this.config.driftToleranceMs ?? 1e3;\n const nowMs = this.video.currentTime * 1e3;\n const estCurrentPtsMs = nowMs - this.timing.ptsDriftEmaMs;\n const deltaMs = Math.floor(marker.ptsSeconds * 1e3 - estCurrentPtsMs);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] PTS-based timing calculation:\", {\n nowMs,\n estCurrentPtsMs,\n markerPtsMs: marker.ptsSeconds * 1e3,\n deltaMs,\n tolerance: tol\n });\n }\n if (deltaMs > tol) {\n if (this.debug) {\n console.log(`[StormcloudVideoPlayer] Scheduling ad start in ${deltaMs}ms`);\n }\n this.timing.expectedAdBreakDurationMs = durationMs;\n this.cueManager.scheduledScte35BreakKey = cueKey;\n this.timing.scheduleAdStartIn(deltaMs, marker, cueKey);\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (within tolerance)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (fallback)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n return;\n }\n if (marker.type === \"progress\" && this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n this.timing.setAdBreakDurationBoundary(marker.durationSeconds * 1e3);\n }\n this.timing.scheduleAdStopAtBreakBoundary();\n if (!this.adPlayer.isAdPlaying() && this.timing.activeAdRequestToken === null && this.adBreak.adRequestQueue.length > 0 && this.timing.hasTimeToStartAnotherAd()) {\n this.adBreak.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n if (marker.type === \"end\") {\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on SCTE end marker\");\n }\n }\n const remaining = this.timing.getRemainingAdMs();\n const adPlaying = this.adPlayer.isAdPlaying();\n const hasQueuedAds = this.adBreak.adRequestQueue.length > 0;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 end marker received:\", {\n remaining,\n adPlaying,\n hasQueuedAds,\n activeAdRequest: this.timing.activeAdRequestToken !== null\n });\n }\n this.timing.scteAdBreakEndWallClockMs = Date.now();\n this.timing.clearAdStartTimer();\n this.timing.clearAdStopTimer();\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n return;\n }\n }\n startScte35AdBreak(marker, cueKey, durationMs) {\n this.adBreak.inAdBreak = true;\n this.cueManager.activeScte35BreakKey = cueKey ?? this.cueManager.pendingScte35CueKey;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.timing.currentAdBreakStartWallClockMs = this.timing.resolveScteBreakStartWallClockMs(marker);\n this.timing.setAdBreakDurationBoundary(durationMs);\n this.adBreak.handleAdStart(marker);\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n onAdStopTimerFired() {\n if (!this.adBreak.inAdBreak) return;\n const adPlaying = this.adPlayer.isAdPlaying();\n const checkIntervalMs = Math.max(\n 250,\n Math.floor(this.config.adBreakCheckIntervalMs ?? 1e3)\n );\n const maxExtensionMsConfig = this.config.maxAdBreakExtensionMs;\n const maxExtensionMs = typeof maxExtensionMsConfig === \"number\" && maxExtensionMsConfig > 0 ? maxExtensionMsConfig : 0;\n const endWallClockMs = this.timing.getAdBreakEndWallClockMs() ?? Date.now();\n const overrunMs = Math.max(0, Date.now() - endWallClockMs);\n const shouldExtendAdBreak = adPlaying && overrunMs < maxExtensionMs;\n if (shouldExtendAdBreak) {\n this.timing.scheduleAdStopCountdown(checkIntervalMs);\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Ad break boundary reached (overrun=${overrunMs}ms) - hard-stopping ads and resuming stream`\n );\n }\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad prefetch\n // ───────────────────────────────────────────────────────────────\n startAdPrefetch(marker, fragmentSn, cueKey) {\n if (this.adBreak.pendingAdBreak || this.adBreak.inAdBreak) return;\n const scheduled = this.adConfig.findCurrentOrNextBreak(this.video.currentTime * 1e3);\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n if (this.debug) console.warn(\"[StormcloudVideoPlayer] No VAST URL available for prefetch\");\n return;\n }\n this.adConfig.beginNewAdPod();\n this.adConfig.podAssignedByPrefetch = true;\n const breakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : void 0;\n const generatedUrls = [this.generatePodVastUrl(baseVastUrl, breakDurationMs)];\n this.adBreak.pendingAdBreak = {\n marker,\n ...fragmentSn !== void 0 ? { detectedAtFragmentSn: fragmentSn } : {},\n vastUrls: generatedUrls,\n isFetching: false,\n fetchStartTime: Date.now()\n };\n this.cueManager.pendingScte35CueKey = cueKey;\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n if (fragmentSn !== void 0) detectPayload.detectedAtFragmentSn = fragmentSn;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n if (this.debug) {\n console.log(\"[PREFETCH] Starting ad prefetch for upcoming ad break\");\n console.log(`[PREFETCH] Pre-generated pod request URL`);\n }\n }\n // ───────────────────────────────────────────────────────────────\n // VMAP time-based ad breaks\n // ───────────────────────────────────────────────────────────────\n onTimeUpdate(currentTimeSec) {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const nowMs = currentTimeSec * 1e3;\n const breakToPlay = this.adConfig.findBreakForTime(nowMs);\n if (breakToPlay) {\n void this.handleVmapAdBreak(breakToPlay, nowMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad break failed gracefully:\", error);\n }\n });\n }\n }\n onVideoEnded() {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;\n const postroll = this.adConfig.vmapBreaks.find(\n (b) => b.startTimeMs === -1 && !this.adConfig.consumedVmapBreakIds.has(this.adConfig.getAdBreakKey(b))\n );\n if (postroll) {\n void this.handleVmapAdBreak(postroll, durationMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP post-roll failed gracefully:\", error);\n }\n });\n }\n }\n async handleVmapAdBreak(adBreak, nowMs) {\n const key = this.adConfig.getAdBreakKey(adBreak);\n if (this.adConfig.consumedVmapBreakIds.has(key)) return;\n const breakStartMs = this.adConfig.resolveBreakStartMs(adBreak);\n if (breakStartMs == null) return;\n const durationMs = adBreak.durationMs ?? 0;\n const endMs = breakStartMs + durationMs;\n const inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;\n if (inWindow) {\n this.adConfig.consumedVmapBreakIds.add(key);\n const tags = this.adConfig.selectVastTagsForBreak(adBreak);\n if (!tags || tags.length === 0) return;\n const first = tags[0];\n const rest = tags.slice(1);\n this.adBreak.adPodQueue = rest;\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.showAds = true;\n this.adBreak.inAdBreak = true;\n this.timing.currentAdBreakStartWallClockMs = Date.now();\n try {\n await this.adBreak.playSingleAd(first);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad request failed:\", error);\n }\n this.adBreak.handleAdPodComplete();\n }\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Public API\n // ───────────────────────────────────────────────────────────────\n getCurrentAdIndex() {\n return this.timing.currentAdIndex;\n }\n getTotalAdsInBreak() {\n return this.timing.totalAdsInBreak;\n }\n getAdRemainingMs() {\n return this.timing.getRemainingAdMs();\n }\n isAdPlaying() {\n return this.adBreak.inAdBreak && this.adPlayer.isAdPlaying();\n }\n isShowingAds() {\n return this.adBreak.showAds;\n }\n getStreamType() {\n const url = this.config.src.toLowerCase();\n if (url.includes(\".m3u8\") || url.includes(\"/hls/\") || url.includes(\"application/vnd.apple.mpegurl\")) {\n return \"hls\";\n }\n return \"other\";\n }\n shouldShowNativeControls() {\n const streamType = this.getStreamType();\n if (streamType === \"other\") {\n return !(this.config.showCustomControls ?? false);\n }\n return !!(this.config.allowNativeHls && !(this.config.showCustomControls ?? false));\n }\n isLive() {\n return this.hlsEngine.isLiveStream;\n }\n isLowLatencyStream() {\n return this.hlsEngine.isLowLatencyStream();\n }\n get videoElement() {\n return this.video;\n }\n toggleMute() {\n toggleMute(this.video, this.adPlayer, this.debug);\n }\n toggleFullscreen() {\n return toggleFullscreen(this.video, this.debug);\n }\n isMuted() {\n return isMuted(this.video, this.adPlayer);\n }\n setMuted(muted) {\n setMuted(this.video, this.adPlayer, muted, this.debug);\n }\n setVolume(volume) {\n setVolume(this.video, this.adPlayer, volume, this.debug);\n }\n getVolume() {\n return getVolume(this.video, this.adPlayer);\n }\n isFullscreen() {\n return isFullscreen();\n }\n resize() {\n resizePlayer(this.video, this.adPlayer, this.debug);\n }\n // ───────────────────────────────────────────────────────────────\n // Destroy\n // ───────────────────────────────────────────────────────────────\n destroy() {\n this.adBreak.stopContinuousFetching();\n this.timing.destroy();\n this.adBreak.clearPendingAdBreak();\n this.placeholder.destroy();\n if (this.timeUpdateHandler) {\n this.video.removeEventListener(\"timeupdate\", this.timeUpdateHandler);\n delete this.timeUpdateHandler;\n }\n if (this.endedHandler) {\n this.video.removeEventListener(\"ended\", this.endedHandler);\n delete this.endedHandler;\n }\n if (this.emptiedHandler) {\n this.video.removeEventListener(\"emptied\", this.emptiedHandler);\n delete this.emptiedHandler;\n }\n this.adConfig.destroyTracking();\n this.hlsEngine.destroy();\n this.adPlayer?.destroy();\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.palNonce.reset();\n this.adBreak.adRequestQueue = [];\n this.timing.consecutiveFailures = 0;\n }\n};\n\n// src/ui/StormcloudVideoPlayer.tsx\nvar import_fa = require(\"react-icons/fa\");\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar ExpandIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 4H4v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 9V4h-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 20h5v-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 15v5h5\" })\n ]\n }\n);\nvar CompressIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 9h5V4\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 4v5h5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 15h-5v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 20v-5H4\" })\n ]\n }\n);\nvar CRITICAL_PROPS = [\n \"src\",\n \"allowNativeHls\",\n \"isLiveStream\",\n \"licenseKey\",\n \"isVmap\",\n \"vmapUrl\",\n \"lowLatencyMode\",\n \"driftToleranceMs\",\n \"vastMode\",\n \"ctvAdRequest\"\n];\nvar CONTROLS_HIDE_DELAY = 3e3;\nvar DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;\nvar StormcloudVideoPlayerComponent = import_react.default.memo(\n (props) => {\n const {\n src,\n autoplay,\n muted,\n lowLatencyMode,\n allowNativeHls,\n isLiveStream,\n driftToleranceMs,\n immediateManifestAds,\n debugAdTiming,\n showCustomControls,\n hideLoadingIndicator,\n onVolumeToggle,\n onFullscreenToggle,\n onControlClick,\n onReady,\n wrapperClassName,\n wrapperStyle,\n className,\n style,\n controls,\n playsInline,\n preload,\n poster,\n children,\n licenseKey,\n vastMode,\n vastTagUrl,\n isVmap,\n vmapUrl,\n minSegmentsBeforePlay,\n ctvAdRequest,\n programTitle,\n ...restVideoAttrs\n } = props;\n const videoRef = (0, import_react.useRef)(null);\n const playerRef = (0, import_react.useRef)(null);\n const bufferingTimeoutRef = (0, import_react.useRef)(null);\n const controlsTimerRef = (0, import_react.useRef)(null);\n const wrapperRef = (0, import_react.useRef)(null);\n const [adStatus, setAdStatus] = import_react.default.useState({ showAds: false, currentIndex: 0, totalAds: 0, remainingSeconds: 0 });\n const [shouldShowNativeControls, setShouldShowNativeControls] = import_react.default.useState(true);\n const [isMuted2, setIsMuted] = import_react.default.useState(false);\n const [isFullscreen2, setIsFullscreen] = import_react.default.useState(false);\n const [isPlaying, setIsPlaying] = import_react.default.useState(false);\n const [currentTime, setCurrentTime] = import_react.default.useState(0);\n const [duration, setDuration] = import_react.default.useState(0);\n const [volume, setVolume2] = import_react.default.useState(1);\n const [playbackRate, setPlaybackRate] = import_react.default.useState(1);\n const [showVolumeSlider, setShowVolumeSlider] = import_react.default.useState(false);\n const [showSpeedMenu, setShowSpeedMenu] = import_react.default.useState(false);\n const [isLoading, setIsLoading] = import_react.default.useState(true);\n const [isBuffering, setIsBuffering] = import_react.default.useState(false);\n const [showCenterPlay, setShowCenterPlay] = import_react.default.useState(false);\n const [showLicenseWarning, setShowLicenseWarning] = import_react.default.useState(false);\n const [controlsVisible, setControlsVisible] = import_react.default.useState(true);\n const [viewportWidth, setViewportWidth] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerWidth : 1920\n );\n const [isPortrait, setIsPortrait] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerHeight > window.innerWidth : false\n );\n const [playerAspectRatio, setPlayerAspectRatio] = import_react.default.useState(\n DEFAULT_PLAYER_ASPECT_RATIO\n );\n const getResponsiveScale = () => {\n if (viewportWidth < 480) return 0.7;\n if (viewportWidth < 768) return 0.8;\n if (viewportWidth < 1024) return 0.9;\n return 1;\n };\n const responsiveScale = getResponsiveScale();\n const resetControlsTimer = (0, import_react.useCallback)(() => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n setControlsVisible(true);\n controlsTimerRef.current = window.setTimeout(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, CONTROLS_HIDE_DELAY);\n }, [showVolumeSlider, showSpeedMenu]);\n const handleWrapperMouseMove = (0, import_react.useCallback)(() => {\n resetControlsTimer();\n }, [resetControlsTimer]);\n const handleWrapperMouseLeave = (0, import_react.useCallback)(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, [showVolumeSlider, showSpeedMenu]);\n const formatTime = (seconds) => {\n if (!isFinite(seconds)) return \"0:00:00\";\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor(seconds % 3600 / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n };\n const handlePlayPause = () => {\n if (videoRef.current) {\n if (videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n } else {\n videoRef.current.pause();\n setShowCenterPlay(true);\n }\n }\n resetControlsTimer();\n };\n const handleCenterPlayClick = () => {\n if (videoRef.current && videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n }\n };\n const handleTimelineSeek = (e) => {\n if (videoRef.current && duration > 0 && isFinite(duration)) {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, clickX / rect.width));\n const newTime = progress * duration;\n if (isFinite(newTime) && newTime >= 0 && newTime <= duration) {\n videoRef.current.currentTime = newTime;\n }\n }\n resetControlsTimer();\n };\n const handleVolumeChange = (newVolume) => {\n if (playerRef.current && isFinite(newVolume)) {\n const clampedVolume = Math.max(0, Math.min(1, newVolume));\n playerRef.current.setVolume(clampedVolume);\n }\n };\n const handlePlaybackRateChange = (rate) => {\n if (videoRef.current && isFinite(rate) && rate > 0) {\n videoRef.current.playbackRate = rate;\n }\n setShowSpeedMenu(false);\n };\n const isHlsStream = src?.toLowerCase().includes(\".m3u8\") || src?.toLowerCase().includes(\"/hls/\");\n const isLiveUiMode = isLiveStream === true;\n const shouldShowEnhancedControls = showCustomControls && (isHlsStream ? !isLiveUiMode : true);\n const criticalPropsKey = (0, import_react.useMemo)(() => {\n return CRITICAL_PROPS.map((prop) => `${prop}:${props[prop]}`).join(\"|\");\n }, [\n src,\n allowNativeHls,\n isLiveStream,\n licenseKey,\n isVmap,\n vmapUrl,\n lowLatencyMode,\n driftToleranceMs,\n vastMode\n ]);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\") return;\n const el = videoRef.current;\n if (!el || !src) return;\n if (!licenseKey) {\n setShowLicenseWarning(true);\n setIsLoading(false);\n console.warn(\n \"StormcloudVideoPlayer: License key is required but not provided. Please set the licenseKey prop to use the player.\"\n );\n return;\n }\n setShowLicenseWarning(false);\n if (debugAdTiming) {\n console.log(\"[StormcloudUI] Initializing player, isLoading=true\");\n }\n if (playerRef.current) {\n try {\n playerRef.current.destroy();\n } catch {\n }\n playerRef.current = null;\n }\n const cfg = {\n src,\n videoElement: el\n };\n if (autoplay !== void 0) cfg.autoplay = autoplay;\n if (muted !== void 0) cfg.muted = muted;\n if (lowLatencyMode !== void 0) cfg.lowLatencyMode = lowLatencyMode;\n if (allowNativeHls !== void 0) cfg.allowNativeHls = allowNativeHls;\n if (isLiveStream !== void 0) cfg.isLiveStream = isLiveStream;\n if (driftToleranceMs !== void 0)\n cfg.driftToleranceMs = driftToleranceMs;\n if (immediateManifestAds !== void 0)\n cfg.immediateManifestAds = immediateManifestAds;\n if (debugAdTiming !== void 0) cfg.debugAdTiming = debugAdTiming;\n if (showCustomControls !== void 0)\n cfg.showCustomControls = showCustomControls;\n if (onVolumeToggle !== void 0) cfg.onVolumeToggle = onVolumeToggle;\n if (onFullscreenToggle !== void 0)\n cfg.onFullscreenToggle = onFullscreenToggle;\n if (onControlClick !== void 0) cfg.onControlClick = onControlClick;\n if (licenseKey !== void 0) cfg.licenseKey = licenseKey;\n if (vastMode !== void 0) cfg.vastMode = vastMode;\n if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;\n if (isVmap !== void 0) cfg.isVmap = isVmap;\n if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;\n if (minSegmentsBeforePlay !== void 0)\n cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;\n if (ctvAdRequest !== void 0) cfg.ctvAdRequest = ctvAdRequest;\n if (programTitle !== void 0) cfg.programTitle = programTitle;\n const player = new StormcloudVideoPlayer(cfg);\n playerRef.current = player;\n player.load().then(() => {\n const showNative = player.shouldShowNativeControls();\n setShouldShowNativeControls(showNative);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Player loaded successfully, waiting for video ready\"\n );\n }\n onReady?.(player);\n }).catch((error) => {\n console.error(\n \"StormcloudVideoPlayer: Failed to load player:\",\n error\n );\n setIsLoading(false);\n onReady?.(player);\n });\n return () => {\n try {\n player.destroy();\n } catch {\n }\n playerRef.current = null;\n };\n }, [criticalPropsKey]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n try {\n if (autoplay !== void 0 && playerRef.current.videoElement) {\n playerRef.current.videoElement.autoplay = autoplay;\n }\n if (muted !== void 0 && !playerRef.current.isShowingAds()) {\n playerRef.current.setMuted(muted);\n }\n } catch (error) {\n console.warn(\"Failed to update player properties:\", error);\n }\n }, [autoplay, muted]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n const checkAdStatus = () => {\n if (playerRef.current) {\n const showAdsFromMethod = playerRef.current.isShowingAds();\n const showAdsFromAttribute = videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n const showAds = showAdsFromMethod || showAdsFromAttribute;\n const currentIndex = playerRef.current.getCurrentAdIndex();\n const totalAds = playerRef.current.getTotalAdsInBreak();\n const remainingMs = playerRef.current.getAdRemainingMs();\n const remainingSeconds = showAds ? Math.max(0, Math.ceil(remainingMs / 1e3)) : 0;\n setAdStatus((prev) => {\n if (prev.showAds !== showAds || prev.currentIndex !== currentIndex || prev.totalAds !== totalAds || prev.remainingSeconds !== remainingSeconds) {\n if (showAds && !prev.showAds) {\n setShowCenterPlay(false);\n }\n return { showAds, currentIndex, totalAds, remainingSeconds };\n }\n return prev;\n });\n }\n };\n const interval = setInterval(checkAdStatus, 50);\n return () => clearInterval(interval);\n }, []);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\" || !playerRef.current) return;\n const handleResize = () => {\n if (playerRef.current && videoRef.current) {\n if (typeof playerRef.current.resize === \"function\") {\n playerRef.current.resize();\n }\n }\n setViewportWidth(window.innerWidth);\n setIsPortrait(window.innerHeight > window.innerWidth);\n };\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current || !videoRef.current) return;\n const updateStates = () => {\n if (playerRef.current && videoRef.current) {\n setIsMuted(playerRef.current.isMuted());\n setIsPlaying(!videoRef.current.paused);\n const currentTimeValue = videoRef.current.currentTime;\n setCurrentTime(isFinite(currentTimeValue) ? currentTimeValue : 0);\n const durationValue = videoRef.current.duration;\n setDuration(isFinite(durationValue) ? durationValue : 0);\n const volumeValue = playerRef.current.getVolume();\n setVolume2(\n isFinite(volumeValue) ? Math.max(0, Math.min(1, volumeValue)) : 1\n );\n const rateValue = videoRef.current.playbackRate;\n setPlaybackRate(\n isFinite(rateValue) && rateValue > 0 ? rateValue : 1\n );\n }\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n const interval = setInterval(updateStates, 200);\n const handleFullscreenChange = () => {\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () => {\n clearInterval(interval);\n document.removeEventListener(\n \"fullscreenchange\",\n handleFullscreenChange\n );\n };\n }, []);\n (0, import_react.useEffect)(() => {\n if (!videoRef.current) return;\n const handleLoadedMetadata = () => {\n const video2 = videoRef.current;\n if (video2) {\n if (video2.videoWidth > 0 && video2.videoHeight > 0) {\n setPlayerAspectRatio(video2.videoWidth / video2.videoHeight);\n }\n void video2.offsetHeight;\n }\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadedmetadata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadedData = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadeddata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadStart = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadstart, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleCanPlay = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplay, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleCanPlayThrough = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplaythrough, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleWaiting = () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n }\n bufferingTimeoutRef.current = window.setTimeout(() => {\n setIsBuffering(true);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video buffering detected (after 300ms delay), readyState:\",\n videoRef.current?.readyState,\n \"- showing spinner, isBuffering=true\"\n );\n }\n }, 300);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: waiting, readyState:\",\n videoRef.current?.readyState,\n \"- buffering delay started (300ms)\"\n );\n }\n };\n const handlePlaying = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n setShowCenterPlay(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: playing, readyState:\",\n videoRef.current?.readyState,\n \"- playback started, isLoading=false, isBuffering=false\"\n );\n }\n };\n const handlePause = () => {\n const isAdActive = playerRef.current?.isShowingAds() || videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n if (playerRef.current && !isAdActive) {\n setShowCenterPlay(true);\n } else {\n setShowCenterPlay(false);\n }\n };\n const handleEnded = () => {\n setShowCenterPlay(true);\n };\n const video = videoRef.current;\n video.addEventListener(\"loadstart\", handleLoadStart);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.addEventListener(\"canplay\", handleCanPlay);\n video.addEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.addEventListener(\"waiting\", handleWaiting);\n video.addEventListener(\"playing\", handlePlaying);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n if (video.paused) {\n setShowCenterPlay(true);\n }\n return () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n video.removeEventListener(\"loadstart\", handleLoadStart);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n video.removeEventListener(\"canplay\", handleCanPlay);\n video.removeEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.removeEventListener(\"waiting\", handleWaiting);\n video.removeEventListener(\"playing\", handlePlaying);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, [debugAdTiming]);\n (0, import_react.useEffect)(() => {\n setPlayerAspectRatio(DEFAULT_PLAYER_ASPECT_RATIO);\n }, [src]);\n (0, import_react.useEffect)(() => {\n return () => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n };\n }, []);\n const progressPercent = duration > 0 ? currentTime / duration * 100 : 0;\n const VolumeIcon = isMuted2 || volume === 0 ? import_fa.FaVolumeMute : volume < 0.5 ? import_fa.FaVolumeDown : import_fa.FaVolumeUp;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"style\", { children: `\n @keyframes sc-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes sc-loading-glow {\n 0%, 100% { opacity: 0.85; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.05); }\n }\n @keyframes sc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n }\n @keyframes sc-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .sc-wrapper:fullscreen,\n .sc-wrapper:has(*:fullscreen) {\n border-radius: 0 !important;\n box-shadow: none !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n z-index: 999999 !important;\n background: #000 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .sc-ctrl-btn {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n padding: 8px;\n transition: background 0.15s ease, opacity 0.15s ease;\n opacity: 0.9;\n }\n .sc-ctrl-btn:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.1);\n }\n .sc-ctrl-btn:active {\n opacity: 0.7;\n }\n .sc-controls-bar {\n transition: opacity 0.35s ease, transform 0.35s ease;\n }\n .sc-progress-track:hover .sc-progress-thumb {\n transform: translate(-50%, -50%) scale(1) !important;\n }\n .sc-loading-hidden .sc-loading-indicator {\n display: none !important;\n }\n ` }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n ref: wrapperRef,\n className: `sc-wrapper ${wrapperClassName || \"\"}`,\n onMouseMove: handleWrapperMouseMove,\n onMouseLeave: handleWrapperMouseLeave,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: isFullscreen2 ? \"fixed\" : \"relative\",\n top: isFullscreen2 ? 0 : void 0,\n left: isFullscreen2 ? 0 : void 0,\n overflow: \"hidden\",\n width: isFullscreen2 ? \"100vw\" : \"100%\",\n height: isFullscreen2 ? \"100vh\" : \"auto\",\n minHeight: isFullscreen2 ? \"100vh\" : \"auto\",\n aspectRatio: isFullscreen2 ? void 0 : playerAspectRatio,\n maxWidth: isFullscreen2 ? \"100vw\" : \"100%\",\n maxHeight: isFullscreen2 ? \"100vh\" : \"none\",\n zIndex: isFullscreen2 ? 999999 : void 0,\n backgroundColor: \"#000\",\n borderRadius: isFullscreen2 ? 0 : void 0,\n boxShadow: isFullscreen2 ? \"none\" : void 0,\n ...wrapperStyle\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"video\",\n {\n ref: videoRef,\n className,\n style: {\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: isFullscreen2 ? \"100%\" : \"none\",\n objectFit: isFullscreen2 ? \"cover\" : \"contain\",\n backgroundColor: \"#000\",\n aspectRatio: isFullscreen2 ? \"unset\" : void 0,\n ...style\n },\n controls: shouldShowNativeControls && controls && !showCustomControls,\n playsInline,\n preload,\n poster,\n ...restVideoAttrs,\n children\n }\n ),\n (isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-loading-indicator\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 20,\n width: `${Math.max(34, 38 * responsiveScale)}px`,\n height: `${Math.max(34, 38 * responsiveScale)}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n animation: \"sc-loading-glow 1.4s ease-in-out infinite\",\n filter: \"drop-shadow(0 6px 14px rgba(0, 0, 0, 0.55))\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n border: \"3px solid rgba(255, 255, 255, 0.25)\",\n borderTopColor: \"#ff0000\",\n borderRightColor: \"rgba(255, 255, 255, 0.85)\",\n animation: \"sc-spin 0.8s linear infinite\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"7px\",\n height: \"7px\",\n borderRadius: \"50%\",\n background: \"#ff0000\",\n boxShadow: \"0 0 10px rgba(255, 0, 0, 0.65)\"\n }\n }\n )\n ]\n }\n ),\n showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 25,\n background: \"rgba(220, 38, 38, 0.92)\",\n backdropFilter: \"blur(24px)\",\n color: \"white\",\n padding: \"28px 36px\",\n borderRadius: \"14px\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n boxShadow: \"0 24px 64px rgba(0, 0, 0, 0.5)\",\n textAlign: \"center\",\n maxWidth: \"400px\",\n margin: \"0 16px\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { fontSize: \"18px\", fontWeight: \"700\", marginBottom: \"10px\", letterSpacing: \"-0.02em\" }, children: \"License Key Required\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { fontSize: \"13px\", lineHeight: \"1.6\", color: \"rgba(255, 255, 255, 0.85)\" }, children: [\n \"Please provide a valid license key to use the Stormcloud Video Player.\",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"br\", {}),\n \"Contact your administrator for licensing information.\"\n ] })\n ]\n }\n ),\n adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${12 * responsiveScale}px`,\n left: `${12 * responsiveScale}px`,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n pointerEvents: \"none\",\n animation: \"sc-fade-in 0.3s ease\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n background: \"rgba(234, 179, 8, 0.95)\",\n color: \"#111\",\n padding: `${4 * responsiveScale}px ${12 * responsiveScale}px`,\n borderRadius: \"6px\",\n fontSize: `${11 * responsiveScale}px`,\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n boxShadow: \"0 2px 12px rgba(234, 179, 8, 0.35)\"\n },\n children: `Ad ${Math.max(1, adStatus.currentIndex)}`\n }\n )\n }\n ),\n showCenterPlay && !isLoading && !isBuffering && !showLicenseWarning && !adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: handleCenterPlayClick,\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 15,\n cursor: \"pointer\",\n background: \"rgba(0, 0, 0, 0.55)\",\n backdropFilter: \"blur(8px)\",\n borderRadius: \"50%\",\n width: `${92 * responsiveScale}px`,\n height: `${92 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.2s ease, transform 0.2s ease\",\n animation: \"sc-fade-in 0.2s ease\"\n },\n onMouseEnter: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.72)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1.06)\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.55)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1)\";\n },\n title: \"Play\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n import_fa.FaPlay,\n {\n size: Math.max(24, 32 * responsiveScale),\n color: \"white\",\n style: { marginLeft: \"4px\" }\n }\n )\n }\n ),\n shouldShowEnhancedControls && !showLicenseWarning ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n background: \"linear-gradient(0deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.35) 60%, transparent 100%)\",\n padding: `${20 * responsiveScale}px ${12 * responsiveScale}px ${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible || adStatus.showAds ? 1 : 0,\n transform: controlsVisible || adStatus.showAds ? \"translateY(0)\" : \"translateY(6px)\",\n pointerEvents: controlsVisible || adStatus.showAds ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-progress-track\",\n style: {\n width: \"100%\",\n height: \"3px\",\n background: \"rgba(255, 255, 255, 0.2)\",\n borderRadius: \"1.5px\",\n marginBottom: `${8 * responsiveScale}px`,\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"height 0.1s ease\"\n },\n onClick: handleTimelineSeek,\n onMouseEnter: (e) => {\n e.currentTarget.style.height = \"5px\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.height = \"3px\";\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"1.5px\",\n width: `${progressPercent}%`,\n transition: \"width 0.15s linear\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n className: \"sc-progress-thumb\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%) scale(0)\",\n width: \"13px\",\n height: \"13px\",\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 4px rgba(0, 0, 0, 0.3)\",\n transition: \"transform 0.1s ease, left 0.15s linear\"\n }\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"white\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: handlePlayPause,\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isPlaying ? \"Pause\" : \"Play\",\n children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPause, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPlay, { size: Math.max(14, 18 * responsiveScale), style: { marginLeft: \"2px\" } })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n paddingRight: `${6 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${8 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"Roboto, 'Segoe UI', Arial, sans-serif\",\n color: \"rgba(255, 255, 255, 0.9)\",\n display: viewportWidth < 480 ? \"none\" : \"block\",\n fontVariantNumeric: \"tabular-nums\",\n userSelect: \"none\",\n marginLeft: `${4 * responsiveScale}px`\n },\n children: [\n formatTime(currentTime),\n \" \",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"span\", { style: { color: \"rgba(255,255,255,0.5)\" }, children: \"/\" }),\n \" \",\n formatTime(duration)\n ]\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { position: \"relative\", display: viewportWidth < 600 ? \"none\" : \"block\" }, children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n setShowSpeedMenu(!showSpeedMenu);\n resetControlsTimer();\n },\n style: {\n padding: `${6 * responsiveScale}px ${10 * responsiveScale}px`,\n borderRadius: `${6 * responsiveScale}px`,\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"'SF Mono', 'Cascadia Code', monospace\",\n fontWeight: \"600\",\n minHeight: `${32 * responsiveScale}px`\n },\n title: \"Playback Speed\",\n children: [\n playbackRate,\n \"x\"\n ]\n }\n ),\n showSpeedMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"8px\",\n background: \"rgba(0, 0, 0, 0.8)\",\n backdropFilter: \"blur(24px)\",\n WebkitBackdropFilter: \"blur(24px)\",\n borderRadius: \"10px\",\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n minWidth: \"80px\",\n boxShadow: \"0 12px 40px rgba(0, 0, 0, 0.5)\",\n animation: \"sc-fade-in 0.15s ease\"\n },\n children: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2].map((speed) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n onClick: () => handlePlaybackRateChange(speed),\n style: {\n display: \"block\",\n width: \"100%\",\n padding: `${8 * responsiveScale}px ${14 * responsiveScale}px`,\n background: playbackRate === speed ? \"rgba(255, 255, 255, 0.12)\" : \"transparent\",\n border: \"none\",\n color: playbackRate === speed ? \"#fff\" : \"rgba(255, 255, 255, 0.7)\",\n cursor: \"pointer\",\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Mono', monospace\",\n fontWeight: playbackRate === speed ? \"700\" : \"500\",\n textAlign: \"center\",\n transition: \"background 0.15s ease, color 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.target.style.color = \"#fff\";\n }\n },\n onMouseLeave: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"transparent\";\n e.target.style.color = \"rgba(255, 255, 255, 0.7)\";\n }\n },\n children: [\n speed,\n \"x\"\n ]\n },\n speed\n ))\n }\n )\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ]\n }\n )\n ]\n }\n ) : showCustomControls && !showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${10 * responsiveScale}px`,\n left: `${10 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transition: \"opacity 0.35s ease\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: \"#ff3b30\",\n animation: \"sc-pulse 1.5s ease-in-out infinite\",\n flexShrink: 0\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"span\",\n {\n style: {\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Pro Display', 'Segoe UI', Arial, sans-serif\",\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n color: \"#fff\",\n textShadow: \"0 1px 3px rgba(0,0,0,0.6)\",\n userSelect: \"none\"\n },\n children: \"LIVE\"\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: `${10 * responsiveScale}px`,\n right: `${10 * responsiveScale}px`,\n display: \"flex\",\n flexDirection: isPortrait ? \"column\" : \"row\",\n alignItems: isPortrait ? \"flex-end\" : \"center\",\n gap: `${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transform: controlsVisible ? \"translateY(0)\" : \"translateY(4px)\",\n pointerEvents: controlsVisible ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n background: \"rgba(0, 0, 0, 0.6)\",\n borderRadius: `${18 * responsiveScale}px`,\n padding: \"2px\",\n paddingRight: `${8 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${10 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`,\n background: \"rgba(0, 0, 0, 0.6)\"\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ] }),\n onControlClick && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: onControlClick,\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n cursor: \"pointer\"\n }\n }\n )\n ]\n }\n )\n ] });\n },\n (prevProps, nextProps) => {\n for (const prop of CRITICAL_PROPS) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const uiProps = [\n \"autoplay\",\n \"muted\",\n \"controls\",\n \"showCustomControls\",\n \"className\",\n \"style\",\n \"wrapperClassName\",\n \"wrapperStyle\",\n \"playsInline\",\n \"preload\",\n \"poster\",\n \"children\"\n ];\n for (const prop of uiProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const callbackProps = [\n \"onReady\",\n \"onVolumeToggle\",\n \"onFullscreenToggle\",\n \"onControlClick\"\n ];\n for (const prop of callbackProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n return true;\n }\n);\n\n// src/StormcloudPlayer.tsx\nvar import_react6 = __toESM(require(\"react\"), 1);\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_react2 = require(\"react\");\nvar lazy = import_react2.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 supportsWebKitPresentationMode = () => {\n if (typeof window === \"undefined\") return false;\n const video = document.createElement(\"video\");\n return \"webkitSupportsPresentationMode\" in video;\n};\nvar randomString = () => {\n return Math.random().toString(36).substr(2, 9);\n};\nvar parseQuery = (url) => {\n const query = {};\n const queryString = url.split(\"?\")[1] || \"\";\n if (!queryString) return query;\n const manualParse = (qs) => {\n qs.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n try {\n query[decodeURIComponent(key)] = value ? decodeURIComponent(value.replace(/\\+/g, \" \")) : \"\";\n } catch (e) {\n query[key] = value || \"\";\n }\n }\n });\n };\n if (typeof URLSearchParams !== \"undefined\") {\n try {\n const params = new URLSearchParams(queryString);\n params.forEach((value, key) => {\n query[key] = value;\n });\n return query;\n } catch (e) {\n manualParse(queryString);\n }\n } else {\n manualParse(queryString);\n }\n return query;\n};\nvar merge = (target, ...sources) => {\n if (!sources.length) return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return merge(target, ...sources);\n};\nvar isObject = (item) => {\n return item && typeof item === \"object\" && !Array.isArray(item);\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);\nvar SUPPORTS_HLS = () => {\n if (!IS_BROWSER) return false;\n const video = document.createElement(\"video\");\n return Boolean(video.canPlayType(\"application/vnd.apple.mpegurl\"));\n};\nvar SUPPORTS_DASH = () => {\n if (!IS_BROWSER) return false;\n const video = document.createElement(\"video\");\n return Boolean(video.canPlayType(\"application/dash+xml\"));\n};\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_react3 = require(\"react\");\nvar HlsPlayer = class extends import_react3.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_react4 = require(\"react\");\nvar FilePlayer = class extends import_react4.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_react5 = __toESM(require(\"react\"), 1);\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react5.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_react5.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_react6.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_react6.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_react6.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_react6.default.createElement(\n Wrapper,\n {\n ref: wrapperRef,\n style: { ...style, width, height },\n ...attributes\n },\n import_react6.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 DEFAULT_TRACKING_INGEST_CONFIG,\n IS_BROWSER,\n IS_GLOBAL,\n IS_IOS,\n IS_SAFARI,\n SUPPORTS_DASH,\n SUPPORTS_HLS,\n StormcloudPlayer,\n StormcloudVideoPlayer,\n StormcloudVideoPlayerComponent,\n applyTrackingIngestConfig,\n buildAnalyticsContext,\n canPlay,\n configureTrackingIngest,\n createHlsAdPlayer,\n createPalNonceManager,\n createStormcloudPlayer,\n detectBrowser,\n getBrowserConfigOverrides,\n getBrowserID,\n getClientInfo,\n ingestPlayerTracking,\n initializePolyfills,\n isMediaStream,\n isTrackingIngestEnabled,\n lazy,\n logBrowserInfo,\n merge,\n omit,\n parseQuery,\n players,\n randomString,\n requiresMediaPipelineResetAfterAds,\n sendAdDetectTracking,\n sendAdImpressionTracking,\n sendAdLoadedTracking,\n sendHeartbeat,\n sendInitialTracking,\n supportsFeature,\n supportsModernJS,\n supportsWebKitPresentationMode,\n trackingIngestConfig\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\index.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","index_exports","DEFAULT_TRACKING_INGEST_CONFIG","IS_BROWSER","IS_GLOBAL","IS_IOS","IS_SAFARI","SUPPORTS_DASH","SUPPORTS_HLS","StormcloudPlayer","StormcloudPlayer_default","StormcloudVideoPlayer","StormcloudVideoPlayerComponent","applyTrackingIngestConfig","buildAnalyticsContext","canPlay","configureTrackingIngest","createHlsAdPlayer","createPalNonceManager","createStormcloudPlayer","default","detectBrowser","getBrowserConfigOverrides","getBrowserID","getClientInfo","ingestPlayerTracking","initializePolyfills","isMediaStream","isTrackingIngestEnabled","lazy","logBrowserInfo","merge","omit","parseQuery","players","players_default","randomString","requiresMediaPipelineResetAfterAds","sendAdDetectTracking","sendAdImpressionTracking","sendAdLoadedTracking","sendHeartbeat","sendInitialTracking","supportsFeature","supportsModernJS","supportsWebKitPresentationMode","trackingIngestConfig","module","exports","import_react","require","import_hls","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","version","majorVersion","isSmartTV","isLegacyTV","supportsModernJS2","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","browser","overrides","allowNativeHls","pauseContentDuringAds","Array","assign","forEach","String","includes","e","debug","console","log","feature","TextEncoder","fetch","crypto","subtle","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","Math","floor","random","formatPlayhead","seconds","Number","isFinite","total","hh","padStart","mm","ss","ms","resolveMacroValues","ctx","values","set","adPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","round","deviceId","deviceIdType","limitAdTracking","pageUrl","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","url","replace","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","map","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","trimmed","endsWith","percent","offsetPercent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","BEACON_TIMEOUT_MS","inFlightBeacons","VAST_ERROR_MEDIA_DISPLAY","VAST_ERROR_WRAPPER_TIMEOUT","VAST_ERROR_WRAPPER_LIMIT","VAST_ERROR_WRAPPER_NO_ADS","VAST_ERROR_NO_SUPPORTED_MEDIA","VERIFICATION_NOT_SUPPORTED_REASON","VIEWABLE_MIN_VISIBLE_RATIO","VIEWABLE_MIN_CONTINUOUS_S","toVastMediaErrorCode","error","code","contentVideo","options","adPlaying","originalMutedState","originalVolume","max","min","volume","listeners","mainHlsInstance","AD_CONTAINER_PROP","AD_VIDEO_PROP","FRAME_COUNTER_RELIABLE_PROP","RVFC_RELIABLE_PROP","adVideoElement","adHls","adContainerEl","adEventHandlers","containerHandlers","currentAd","currentAdMediaFile","podAds","podIndex","preloadedAds","preloadingAds","destroyed","pendingTimeouts","STALL_TIMEOUT_MS","STALL_CHECK_INTERVAL_MS","BLACKFRAME_MIN_PLAYBACK_S","stallWatchdogId","lastAdProgressTime","lastAdProgressPosition","sawDecodedVideoFrame","videoFrameCallbackHandle","pendingPlayPromise","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","emit","event","payload","fn","warn","buildTrackingMacroContext","options2","ad","context","currentTime","type","clientWidth","clientHeight","location","href","fireTrackingPixels","urls","macroContext","trackingUrl","img","Image","add","timeoutId","release","clearTimeout","onload","onerror","delete","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","bitrate","level","selectBestMediaFile","mediaFiles","Error","firstFile","mainQuality","scoredFiles","file","widthDiff","abs","heightDiff","resolutionDiff","fileBitrate","bitrateDiff","score","sort","a","b","bestMatch","resolution","isHlsMediaFile","mediaFile","toLowerCase","isProgressiveMediaFile","startsWith","isAudioMediaFile","collectVideoMediaFiles","linear","verbose","mediaFileElements","querySelectorAll","mf","index","getAttribute","apiFramework","toUpperCase","bitrateAttr","bitrateValue","hasExplicitDimensions","push","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","collectLinearTracking","into","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","keys","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","errorUrls","parseVastXml","adElements","documentElement","find","parsed","parseAdElement","vastAdTagUri","wrapper","trackingUrls2","linear2","trackingUrls","rules","followAdditionalWrappers","inLine","candidate","files","id","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","requestVast","response","creds","mode","headers","referrerPolicy","ok","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","substring","fetchAndParsePod","trimmedXml","empty","resolveAd","podElements","buffet","ads","filter","shift","createAdVideoElement","video","document","createElement","style","position","left","top","objectFit","backgroundColor","playsInline","muted","setupAdEventListeners","onTimeUpdate","noteAdProgress","sampleViewability","threshold","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","creativeView","adId","onEnded","settleViewability","advanceToNextPodAd","handleAdComplete","onError","reportCurrentAdError","handleAdError","onVolumeChange","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","window","open","fireNotUsedForUnplayedAds","notUsed","now","inView","visibilityState","paused","handleFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onInteraction","onFullscreenChange","IntersectionObserver","entries","entry","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","startAdPlayback","playPromise","play","catch","finally","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","loadCurrentAdMedia","isHlsAd","isSupported","enableWorker","lowLatencyMode","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","canPlayType","clearStallWatchdog","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","onPresentedFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","releaseAdDecoder","display","pointerEvents","continueLiveStreamDuringAds","visibility","opacity","initialize","container","right","bottom","alignItems","justifyContent","zIndex","parentElement","requestAds","preloaded","reject","resolve","contentVolume","stop","previousMutedState","clear","isAdPlaying","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","setAdVolume","clamped","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getLoadedAdId","getPodAdCount","getPodTotalDurationMs","reduce","PRIVATE_HOST_PATTERNS","isLocalDevHost","host","some","pattern","toDevSafeUrl","rawUrl","protocol","cleanPath","pathname","PAL_SDK_URL","_nonceLoader","_nonceLoaderAllowStorage","_palLoadPromise","loadPalSdk","goog","pal","existing","timeout","script","async","setAttribute","head","getOrCreateNonceLoader","allowStorage","consentSettings","ConsentSettings","NonceLoader","currentNonce","currentNonceManager","generateNonce","loader","request","manager","NonceRequest","adWillAutoPlay","adWillPlayMuted","playerVolume","continuousPlayback","descriptionUrl","iconsSupported","playerType","playerVersion","supportedApiFrameworks","ppid","sessionId","JSON","stringify","loadNonceManager","getNonce","getCurrentNonce","injectNonce","searchParams","base","sep","sendPlaybackStart","sendPlaybackEnd","sendAdClick","sendAdTouch","reset","enabled","baseUrl","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","licenseKey","body","method","Authorization","status","CTV_SESSION_STORAGE_KEY","WEB_SESSION_STORAGE_KEY","inMemoryWebSessionId","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","ANDROID_ID_TYPES","resolveVastEnvironmentSignals","isCtv","platformLat","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","realDeviceId","readStoredDeviceId","readStoredString","inferDeviceIdType","readStoredLimitAdTracking","dpid","getOrCreateStoredUuid","deviceTypeHint","resolveDeviceTypeHint","getOrCreateCtvSessionId","webSessionId","getOrCreateWebSessionId","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","gameconsole","stb","settopbox","SET_TOP_BOX_UA","GAME_CONSOLE_UA","CONNECTED_TV_UA","FEATURE_PHONE_UA","override","readDeviceTypeHintOverride","inferDeviceTypeHint","fallback","maxTouchPoints","fromGlobal","normalizeDeviceTypeHint","__STORMCLOUD_DTH__","getNativeBridgeSources","normalized","safeCall","isInteger","thisArg","isEquivalentDeviceIdType","tagType","runtimeType","tag","runtime","resolveNativeDeviceId","includeStored","isMacroPlaceholder","isZeroedAdId","storageKey","readPersistentId","writePersistentId","createUuid","sessionStorage","getItem","setItem","readCookie","localStorage","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","prefix","cookie","part","decodeURIComponent","slice","bytes","randomUUID","Uint8Array","getRandomValues","seed","performanceNow","i","hex","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","t","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","AiryTV","Android","webOS","tizen","amazon","Boolean","result","normalizeBoolean","cachedBrowserId","config","debugAdTiming","isLiveStream","inputStreamType","screen","vendor","memory","deviceMemory","hardwareConcurrency","screenInfo","availWidth","availHeight","orientation","pixelDepth","deviceType","brand","os","model","isAndroid","isWebView","isWebApp","webosMatch","tizenMatch","tvMatch","androidModelMatch","outerHeight","outerWidth","matchMedia","matches","standalone","angle","domain","origin","path","language","languages","join","cookieEnabled","doNotTrack","referrer","sha256Hex","input","encodedData","utf8","buffer","hashBuffer","hash","char","fallbackHash","timestamp","digest","encode","unescape","charCodeAt","padEnd","resolvePlayerIdentitySeed","clientInfo","nativeDeviceId","persistedId","canPublish","buildPlayerMetricEvent","flags","playerId","captureAt","player_id","device_type","ad_loaded","adLoaded","ad_detect","adDetect","capture_at","input_stream_type","metricEvent","events","adDetectInfo","adLoadedInfo","adImpressionInfo","ad_played_count","ad_url","adUrl","heartbeatData","polyfillURLSearchParams","URLSearchParamsPolyfill","init","params","parseQueryString","append","query","cleanQuery","param","decodedKey","safeDecodeURIComponent","decodedValue","str","getAll","callback","polyfillTextEncoder","TextEncoderPolyfill","encoding","charcode","polyfillPromiseFinally","constructor","then","polyfillObjectAssign","sources","TypeError","nextSource","nextKey","polyfillArrayFrom","arrayLike","mapFn","items","len","polyfillStringStartsWith","search","pos","polyfillStringEndsWith","polyfillStringIncludes","UNEXPANDED_MACRO_PATTERN","INVALID_VAST_PARAM_KEY","EXAMPLE_COM_URL","CTV_UNSUPPORTED_PARAMS","INLINE_DEVICE_MACRO_REPLACEMENTS","getValue","correlator","isMacroPlaceholder2","generateCorrelator","buf","Uint32Array","MAX_SAFE_INTEGER","expandInlineMacroPlaceholders","applyDeviceIdentityParams","runtimeId","tagRdid","tagLat","latValue","tagRdidValid","tagTypeValid","removeBrokenAppNameOrphans","toDelete","_value","suffix","normalizeVastTagUrl","raw","anValue","orphanFragments","reconstructed","_match","val","applyVastMacros","expandedUrl","replaceCorrelatorFallback","streamCorrelator","pod","podMinDurationMs","podMaxDurationMs","podMaxAds","existingUrl","consent","gdpr","gdprConsent","usPrivacy","adTest","programTitle","channelName","staleKeys","correlatorRegex","fetchConsentSignals","timeoutMs","signals","tasks","tcfApi","__tcfapi","settled","tcData","success","eventStatus","gdprApplies","storageAllowed","purpose","consents","tcString","listenerId","uspApi","__uspapi","uspString","parseCueOutDuration","num","dStr","d","parseCueOutCont","res","elapsedMatch","durationMatch","elapsed","slashMatch","parseAttributeList","attrs","regex","exec","rawVal","toNumber","isManifestBasedMarker","marker","id3","splice_command_type","decodeId3ValueToText","decoder","TextDecoder","decode","out","fromCharCode","getFragmentStartSeconds","frag","candidates","startPTS","parseScte35FromId3","cueOutMatch","arg","dur","ptsSeconds","durationSeconds","cueOutContMatch","cont","cueInMatch","daterangeMatch","hasScteOut","hasScteIn","klass","bin","parseScte35Binary","normalizeFragmentPayload","ArrayBuffer","isView","view","byteOffset","byteLength","detectTsPacketFormat","packetSizes","packetSize","tsPayloadOffset","matchedPackets","packetStart","getPsiSectionStart","payloadUnitStart","pointerField","sectionStart","getPsiSectionLength","parsePatSection","pmtPids","sectionLength","sectionEnd","programNumber","pid","descriptorsIdentifyScte35","end","descriptorStart","descriptorEnd","registration","parsePmtSection","tsScte35Pids","programInfoLength","streamType","elementaryPid","esInfoLength","hasProcessedTsScte35Section","section","processedSections","checksum","size","firstKey","next","addScte35SectionMarker","markers","appendScte35Bytes","assemblers","assembler","expectedLength","collectScte35SectionsFromPayload","previousAssembler","subarray","tableId","totalLength","parseScte35FromTsPackets","packetInfo","sectionAssemblers","tsStart","secondByte","thirdByte","fourthByte","adaptationFieldControl","hasPayload","payloadStart","adaptationLength","payloadEnd","BitReader","bytePos","bitPos","readBits","numBits","remainingInByte","toRead","currentByte","mask","bits","skipBits","bytePosition","readSpliceTime","r","ptsAdjustmentTicks","timeSpecifiedFlag","high","low","ptsTicks","markerTypeFromSegmentationTypeId","segmentationTypeId","parseScte35SegmentationDescriptor","descriptor","identifier","segmentationEventId","cancelIndicator","programSegmentationFlag","segmentationDurationFlag","componentCount","durationTicks","segmentationUpidLength","markerType","parseScte35SegmentationDescriptors","descriptorLoopLength","descriptorOffset","descriptorTag","descriptorLength","descriptorDataStart","descriptorDataEnd","descriptorMarker","ptsAdjHigh","ptsAdjLow","spliceCommandLength","spliceCommandType","spliceEventId","commandBodyStart","cancel","outOfNetwork","programSpliceFlag","durationFlag","spliceImmediateFlag","componentPtsSeconds","expectedDescriptorOffset","splice_event_id","segmentation_event_id","Scte35CueManager","callbacks","pendingScte35Cues","recentScte35CueKeys","recentScte35CueLimit","processedTsScte35Sections","pendingScte35CueKey","pendingScte35CueKeyValue","activeScte35BreakKey","activeScte35BreakKeyValue","scheduledScte35BreakKey","scheduledScte35BreakKeyValue","createScte35CueContext","readiness","sn","fragmentSn","fragmentStartSec","fragmentStartSeconds","onScte35Cue","cue","createScte35Cue","pendingKey","getPendingScte35CueKey","trimRecentScte35CueMaps","onEarlyStartCue","shouldAcceptScte35EndCue","inAdBreak","isInAdBreak","hasRecentlyHandledScte35Cue","markScte35CueHandled","onPlaybackCue","activatePendingScte35CuesForFragment","matchingCues","getScte35CueKey","getScte35MarkerRaw","toIdentityString","daterangeId","ID","scteValue","isStrongScte35CueKey","recentKey","AdConfigManager","vmapBreaks","consumedVmapBreakIds","viewCorrelator","consentSignals","podCounter","podAssignedByPrefetch","lastHeartbeatTime","defaultPodMaxAds","defaultPodMaxDurationMs","isVmapEnabled","isVmap","vmapUrl","fetchAdConfiguration","vastMode","vastEndpoint","apiUrl","imaPayload","decodedPayload","numberAds","fetchAndParseVmap","apiVastTagUrl","json","ima","vast","cue_tones","number_ads","apiNumberAds","vmapXml","parseVmapToBreaks","doc","VMAP_NS","adBreakNodes","getElementsByTagNameNS","getElementsByTagName","localName","node","timeOffsetRaw","startTimeMs","parseVmapTimeOffsetToMs","adTagNode","adTagUrl","breakId","aStart","bStart","timeOffset","hms","hours","minutes","millis","ratio","durationSec","getAdBreakKey","adBreak","resolveBreakStartMs","findCurrentOrNextBreak","nowMs","schedule","tol","driftToleranceMs","breakStartMs","findBreakForTime","durationMs","selectVastTagsForBreak","beginNewAdPod","resolvePodParams","breakDurationMs","maxDurationMs","maxAds","minDurationMs","podExactDuration","getPalDescriptionUrl","generatePodVastUrl","podParams","adPlayer","palNonce","envSignals","ctvAdRequest","urlWithMacros","autoplay","finalUrl","initializeTracking","heartbeatInterval","sendHeartbeatIfNeeded","destroyTracking","AdTimingService","adRequestWatchdogToken","adFailsafeToken","ptsDriftEmaMs","adBreakPlayedDurationMs","adBreakEpoch","adRequestTokenCounter","activeAdRequestToken","currentAdIndex","totalAdsInBreak","totalAdRequestsInBreak","maxTotalAdRequestsPerBreak","lastAdRequestTime","consecutiveFailures","maxConsecutiveFailures","minAdRequestIntervalMs","backoffBaseMs","maxBackoffMs","defaultMinRemainingMsToStartAd","failedVastUrls","temporaryFailureUrls","temporaryFailureCooldownMs","globalConsecutiveNoFills","globalNoFillThreshold","globalNoFillCooldownUntil","globalNoFillBackoffBaseMs","globalNoFillBackoffMaxMs","globalLastGamRequestTime","globalMinGamIntervalMs","scheduleAdStopCountdown","remainingMs","clearAdStopTimer","ensureAdStoppedByTimer","adStopTimerId","onAdStopTimerFired","scheduleAdStartIn","delayMs","cueKey","clearAdStartTimer","onAdStartTimerFired","adStartTimerId","updatePtsDrift","ptsSecondsSample","sampleMs","alpha","resolveScteBreakStartWallClockMs","nowWallClockMs","estimatedCurrentPtsMs","deltaMs","setAdBreakDurationBoundary","expectedAdBreakDurationMs","currentAdBreakStartWallClockMs","scteAdBreakEndWallClockMs","scheduleAdStopAtBreakBoundary","getWallClockRemainingAdMs","endWallClockMs","getAdBreakEndWallClockMs","getDurationBudgetRemainingMs","getLoadedAdDurationMs","adController","adFitsRemainingBudget","logAdDurationDecision","accepted","remainingBudget","recordPlayedAdDuration","ensureLoadedAdFitsBudget","fits","rejectLoadedAdForDuration","markAdStarted","notePodAdStarted","getRemainingAdMs","wallClockRemaining","budgetRemaining","getMinRemainingMsToStartAd","configured","minRemainingMsToStartAd","hasTimeToStartAnotherAd","minRemaining","isTemporaryAdError","message","isUrlInCooldown","failureTime","cleanupTemporaryFailures","isGamInCooldown","recordGamNoFill","exponent","backoff","pow","resetGamNoFillCounter","enforceGlobalRateLimit","waitMs","startAdRequestWatchdog","token","clearAdRequestWatchdog","adFailsafeTimeoutMs","adRequestWatchdogId","logAdState","onWatchdogTimeout","startAdFailsafeTimer","clearAdFailsafeTimer","failsafeMs","adFailsafeTimerId","videoPaused","onFailsafeTimeout","extra","getAdState","showAds","resetForBreakEnd","PlaceholderLayer","ensureContainer","transition","show","wasHidden","offsetHeight","requestAnimationFrame","hide","removeChild","import_hls2","HlsEngine","cueManager","timing","nativeHlsMode","videoSrcProtection","reloadingLiveStream","bufferedSegmentsCount","shouldAutoplayAfterBuffering","hasInitialBufferCompleted","latencyProfileApplied","shouldUseNativeHls","getStreamType","canNative","setupNativeHls","adBehavior","isLive","setupHls","hls","backBufferLength","liveDurationInfinity","maxLiveSyncPlaybackRate","maxBufferLength","maxMaxBufferLength","maxBufferSize","maxBufferHole","highBufferWatchdogPeriod","nudgeOffset","nudgeMaxRetry","startPosition","MEDIA_ATTACHED","_","_data","minSegments","details","live","onManifestParsed","detectedLowLatencyStream","minSegmentsBeforePlay","LEVEL_LOADED","_evt","applyStreamLatencyProfile","hasPendingAdBreak","fragments","fragmentsToScan","tagList","isArray","idx","earlyDetection","FRAG_BUFFERED","err","FRAG_PARSING_METADATA","id3Tags","samples","pts","onId3Tag","FRAG_LOADED","processFragmentScte35Payload","FRAG_DECRYPTED","FRAG_CHANGED","activatePendingCuesForFragment","prog","ErrorTypes","NETWORK_ERROR","startLoad","MEDIA_ERROR","recoverMediaError","onFatalDestroy","isLowLatencyStream","isLowLatencyManifest","useLowLatency","cfg","liveSyncDuration","liveSyncDurationCount","lowLatencyModeRequested","canBlockReload","partTarget","partHoldBack","partListLength","partList","targetDuration","targetduration","hasParts","hasPartTarget","hasPartHoldBack","payloadData","getLiveSyncPosition","liveSyncPosition","restartLoadAt","stopLoad","reloadLiveStream","detachMedia","recreateDelayMs","getAdAudioVolume","toggleMute","newMutedState","restoreVolume","toggleFullscreen","requestFullscreen","isMuted","setMuted","setVolume","clampedVolume","getVolume","isFullscreen","resizePlayer","AdBreakOrchestrator","adConfig","placeholder","isShowingPlaceholder","adDetectSentForCurrentBreak","continuousFetchingActive","continuousFetchLoopRunning","adRequestQueue","adPodQueue","maxPlaceholderDurationMs","pendingAdBreak","analyticsContext","nextAdRequestUrl","baseVastUrl","remaining","attachImaEventListeners","getAdPlayer","onAdClick","onAdInteraction","adIndex","queuedUrls","tryNextAvailableAdWithRateLimit","handleAdPodComplete","errorPayload","errorMessage","vastErrorCode","cause","innerError","causeMessage","handleAdFailure","recreateAdController","shouldShowPlaceholder","preservedMutedState","preservedVolumeState","shouldContinueLiveStreamDuringAds","newAdPlayer","createAdPlayer","setAdPlayer","clearPendingAdBreak","prefetchTimerId","handleAdStart","_marker","scheduled","tags","adBreakDurationMs","currentMuted","currentVolume","podPlayed","startOptimizedPod","startContinuousFetching","podUrl","requestToken","podCount","vastUrls","vastUrl","continuousFetchLoop","epoch","maxQueueSize","newAdUrl","queuedUrlsPreview","generationDelay","stopContinuousFetching","backoffMultiplier","backoffDelay","effectiveMinInterval","timeSinceLastRequest","waitTime","tryNextAvailableAd","retryCount","nextAdUrl","maxRetries","playSingleAd","showPlaceholderAndWaitForAds","ap","playError","checkInterval","maxChecks","restoredMuted","restoredVolume","monitorLiveResumeStall","liveSyncPos","toFixed","restartHlsLoad","resumeContentPlayback","getBufferedAhead","ranges","buffered","describeVideoState","networkStates","readyStates","v","net","networkState","ready","readyState","seeking","resumeBaseline","needsReset","pollIntervalMs","graceMs","recoveryCooldownMs","maxRecoveries","maxMonitorMs","startTime","baseline","recoveries","lastRecoveryAt","listenersAttached","onMediaEvent","diagEvents","dt","cleanup","poll","advanced","playing","bufferedAhead","wedged","canRecover","reloadPos","attempt","maxAttempts","onReady","backoffMs","playResult","attached","palPlaybackStarted","browserOverrides","videoElement","startAdPrefetch","onScte35Marker","startScte35AdBreak","hlsEngine","c","palDescriptionUrl","attach","offsetWidth","prerollKey","endedHandler","onVideoEnded","timeUpdateHandler","emptiedHandler","wasPaused","Infinity","newDurationMs","detectPayload","hasPrefetchedAds","isManifest","forceImmediate","immediateManifestAds","isManifestMarker","hasPts","estCurrentPtsMs","markerPtsMs","tolerance","hasQueuedAds","activeAdRequest","checkIntervalMs","adBreakCheckIntervalMs","maxExtensionMsConfig","maxAdBreakExtensionMs","maxExtensionMs","overrunMs","shouldExtendAdBreak","generatedUrls","detectedAtFragmentSn","isFetching","fetchStartTime","currentTimeSec","breakToPlay","handleVmapAdBreak","postroll","endMs","inWindow","first","rest","getCurrentAdIndex","getTotalAdsInBreak","getAdRemainingMs","isShowingAds","shouldShowNativeControls","showCustomControls","import_fa","import_jsx_runtime","ExpandIcon","jsxs","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","focusable","children","jsx","CompressIcon","CRITICAL_PROPS","CONTROLS_HIDE_DELAY","DEFAULT_PLAYER_ASPECT_RATIO","memo","props","hideLoadingIndicator","onVolumeToggle","onFullscreenToggle","onControlClick","wrapperClassName","wrapperStyle","className","controls","preload","poster","restVideoAttrs","videoRef","useRef","playerRef","bufferingTimeoutRef","controlsTimerRef","wrapperRef","useState","currentIndex","totalAds","remainingSeconds","adStatus","setAdStatus","setShouldShowNativeControls","isMuted2","setIsMuted","isFullscreen2","setIsFullscreen","setIsPlaying","setCurrentTime","setDuration","setVolume2","playbackRate","setPlaybackRate","showVolumeSlider","setShowVolumeSlider","showSpeedMenu","setShowSpeedMenu","isLoading","setIsLoading","isBuffering","setIsBuffering","showCenterPlay","setShowCenterPlay","showLicenseWarning","setShowLicenseWarning","controlsVisible","setControlsVisible","innerWidth","viewportWidth","setViewportWidth","innerHeight","isPortrait","setIsPortrait","playerAspectRatio","setPlayerAspectRatio","getResponsiveScale","responsiveScale","resetControlsTimer","useCallback","current","handleWrapperMouseMove","handleWrapperMouseLeave","formatTime","handlePlayPause","hasValidSource","currentSrc","handleCenterPlayClick","handleTimelineSeek","rect","currentTarget","getBoundingClientRect","clickX","clientX","newTime","handleVolumeChange","newVolume","handlePlaybackRateChange","rate","isHlsStream","isLiveUiMode","shouldShowEnhancedControls","criticalPropsKey","useMemo","prop","useEffect","player","showNative","checkAdStatus","showAdsFromMethod","showAdsFromAttribute","ceil","prev","interval","handleResize","updateStates","currentTimeValue","durationValue","volumeValue","rateValue","handleLoadedMetadata","video2","handleLoadedData","handleLoadStart","handleCanPlay","handleCanPlayThrough","handleWaiting","handlePlaying","handlePause","isAdActive","handleEnded","progressPercent","VolumeIcon","FaVolumeMute","FaVolumeDown","FaVolumeUp","Fragment","ref","onMouseMove","onMouseLeave","overflow","minHeight","aspectRatio","maxWidth","maxHeight","borderRadius","boxShadow","transform","animation","inset","border","borderTopColor","borderRightColor","background","backdropFilter","color","padding","textAlign","margin","fontSize","fontWeight","marginBottom","letterSpacing","lineHeight","gap","textTransform","cursor","onMouseEnter","FaPlay","marginLeft","minWidth","FaPause","paddingRight","paddingLeft","onMouseDown","preventDefault","move","ev","r2","up","stopPropagation","fontFamily","fontVariantNumeric","userSelect","WebkitBackdropFilter","speed","flexShrink","textShadow","flexDirection","prevProps","nextProps","uiProps","callbackProps","import_react6","noop","defaultProps","loop","progressInterval","onStart","onBuffer","onBufferEnd","onDuration","onSeek","onProgress","import_react2","object","MediaStream","substr","queryString","manualParse","qs","isObject","item","globalThis","HLS_EXTENSIONS","HLS_PATHS","DASH_EXTENSIONS","VIDEO_EXTENSIONS","AUDIO_EXTENSIONS","dash","audio","import_react3","HlsPlayer","arguments","mounted","onMount","seekTo","keepPlaying","getDuration","getCurrentTime","getSecondsLoaded","getInternalPlayer","componentDidMount","componentWillUnmount","componentDidUpdate","render","Component","displayName","import_react4","FilePlayer","handlePlay","handleError","onLoaded","setLoop","enablePIP","requestPictureInPicture","disablePIP","pictureInPictureElement","exitPictureInPicture","lazyPlayer","canEnablePIP","pictureInPictureEnabled","webkitSupportsPresentationMode","import_react5","SEEK_ON_PLAY_EXPIRY","Player","isReady","loadOnReady","startOnPlay","seekOnPlay","onDurationCalled","handlePlayerMount","playedSeconds","loadedSeconds","played","prevPlayed","prevLoaded","progressTimeout","handleReady","handleDurationCheck","activePlayer","loopOnEnded","args","durationCheckTimeout","handleLoaded","forceLoad","amount","isFraction","Player2","IS_BROWSER2","IS_GLOBAL2","UniversalSuspense","Suspense","SUPPORTED_PROPS","customPlayers","playerList","_a","state","showPreview","references","getActivePlayer","getAttributes","fraction","renderActivePlayer","fallbackElement","Wrapper","attributes","addCustomPlayer","removeCustomPlayers"],"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/index.ts\nvar index_exports = {};\n__export(index_exports, {\n DEFAULT_TRACKING_INGEST_CONFIG: () => DEFAULT_TRACKING_INGEST_CONFIG,\n IS_BROWSER: () => IS_BROWSER,\n IS_GLOBAL: () => IS_GLOBAL,\n IS_IOS: () => IS_IOS,\n IS_SAFARI: () => IS_SAFARI,\n SUPPORTS_DASH: () => SUPPORTS_DASH,\n SUPPORTS_HLS: () => SUPPORTS_HLS,\n StormcloudPlayer: () => StormcloudPlayer_default,\n StormcloudVideoPlayer: () => StormcloudVideoPlayer,\n StormcloudVideoPlayerComponent: () => StormcloudVideoPlayerComponent,\n applyTrackingIngestConfig: () => applyTrackingIngestConfig,\n buildAnalyticsContext: () => buildAnalyticsContext,\n canPlay: () => canPlay,\n configureTrackingIngest: () => configureTrackingIngest,\n createHlsAdPlayer: () => createHlsAdPlayer,\n createPalNonceManager: () => createPalNonceManager,\n createStormcloudPlayer: () => createStormcloudPlayer,\n default: () => StormcloudVideoPlayerComponent,\n detectBrowser: () => detectBrowser,\n getBrowserConfigOverrides: () => getBrowserConfigOverrides,\n getBrowserID: () => getBrowserID,\n getClientInfo: () => getClientInfo,\n ingestPlayerTracking: () => ingestPlayerTracking,\n initializePolyfills: () => initializePolyfills,\n isMediaStream: () => isMediaStream,\n isTrackingIngestEnabled: () => isTrackingIngestEnabled,\n lazy: () => lazy,\n logBrowserInfo: () => logBrowserInfo,\n merge: () => merge,\n omit: () => omit,\n parseQuery: () => parseQuery,\n players: () => players_default,\n randomString: () => randomString,\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds,\n sendAdDetectTracking: () => sendAdDetectTracking,\n sendAdImpressionTracking: () => sendAdImpressionTracking,\n sendAdLoadedTracking: () => sendAdLoadedTracking,\n sendHeartbeat: () => sendHeartbeat,\n sendInitialTracking: () => sendInitialTracking,\n supportsFeature: () => supportsFeature,\n supportsModernJS: () => supportsModernJS,\n supportsWebKitPresentationMode: () => supportsWebKitPresentationMode,\n trackingIngestConfig: () => trackingIngestConfig\n});\nmodule.exports = __toCommonJS(index_exports);\n\n// src/ui/StormcloudVideoPlayer.tsx\nvar import_react = __toESM(require(\"react\"), 1);\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS2 = 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 supportsModernJS2 = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS2 = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS2 = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS2 = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS: supportsModernJS2,\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 supportsModernJS() {\n try {\n return typeof Promise !== \"undefined\" && typeof Map !== \"undefined\" && typeof Set !== \"undefined\" && typeof Array.from !== \"undefined\" && typeof Object.assign !== \"undefined\" && typeof Array.prototype.forEach !== \"undefined\" && typeof String.prototype.includes !== \"undefined\";\n } catch (e) {\n return false;\n }\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}\nfunction supportsFeature(feature) {\n switch (feature) {\n case \"urlsearchparams\":\n return typeof URLSearchParams !== \"undefined\";\n case \"textencoder\":\n return typeof TextEncoder !== \"undefined\";\n case \"promises\":\n return typeof Promise !== \"undefined\";\n case \"fetch\":\n return typeof fetch !== \"undefined\";\n case \"crypto\":\n return typeof crypto !== \"undefined\" && typeof crypto.subtle !== \"undefined\";\n default:\n return false;\n }\n}\n\n// src/utils/vastTrackingMacros.ts\nvar VAST_MACRO_PATTERN = /\\[([A-Z][A-Z0-9_]*)\\]/g;\nvar CACHEBUSTING_ALIASES = /\\[CACHEBUSTER\\]|\\[cachebuster\\]|\\[timestamp\\]|\\[random\\]|\\[INSERT_RANDOM_NUMBER\\]|%%CACHEBUSTER%%|%%CACHEBUST%%|\\$\\{CACHEBUSTER\\}|\\$\\{CACHEBUSTING\\}|\\{cachebuster\\}|\\{random\\}/g;\nvar KNOWN_VAST_MACROS = /* @__PURE__ */ new Set([\n \"ADCATEGORIES\",\n \"ADCOUNT\",\n \"ADPLAYHEAD\",\n \"ADSERVINGID\",\n \"ADTYPE\",\n \"APIFRAMEWORKS\",\n \"APPBUNDLE\",\n \"ASSETURI\",\n \"BLOCKEDADCATEGORIES\",\n \"BREAKMAXADLENGTH\",\n \"BREAKMAXADS\",\n \"BREAKMAXDURATION\",\n \"BREAKMINADLENGTH\",\n \"BREAKPOSITION\",\n \"CACHEBUSTING\",\n \"CLICKPOS\",\n \"CLICKTYPE\",\n \"CLIENTUA\",\n \"CONTENTID\",\n \"CONTENTPLAYHEAD\",\n \"CONTENTURI\",\n \"DEVICEIP\",\n \"DEVICEUA\",\n \"DOMAIN\",\n \"ERRORCODE\",\n \"EXTENSIONS\",\n \"GDPRCONSENT\",\n \"IFA\",\n \"IFATYPE\",\n \"INVENTORYSTATE\",\n \"LATLONG\",\n \"LIMITADTRACKING\",\n \"MEDIAMIME\",\n \"MEDIAPLAYHEAD\",\n \"OMIDPARTNER\",\n \"PAGEURL\",\n \"PLACEMENTTYPE\",\n \"PLAYERCAPABILITIES\",\n \"PLAYERSIZE\",\n \"PLAYERSTATE\",\n \"PODSEQUENCE\",\n \"REASON\",\n \"REGULATIONS\",\n \"SERVERSIDE\",\n \"SERVERUA\",\n \"TIMESTAMP\",\n \"TRANSACTIONID\",\n \"UNIVERSALADID\",\n \"VASTVERSIONS\",\n \"VERIFICATIONVENDORS\"\n]);\nfunction generateCachebuster() {\n return String(Math.floor(Math.random() * 9e7) + 1e7);\n}\nfunction formatPlayhead(seconds) {\n if (seconds == null || !Number.isFinite(seconds) || seconds < 0) {\n return void 0;\n }\n const total = Math.floor(seconds);\n const hh = String(Math.floor(total / 3600)).padStart(2, \"0\");\n const mm = String(Math.floor(total % 3600 / 60)).padStart(2, \"0\");\n const ss = String(total % 60).padStart(2, \"0\");\n const ms = String(Math.floor((seconds - total) * 1e3)).padStart(3, \"0\");\n return `${hh}:${mm}:${ss}.${ms}`;\n}\nfunction resolveMacroValues(ctx) {\n const values = /* @__PURE__ */ new Map();\n const set = (key, value) => {\n if (value != null && value !== \"\") values.set(key, value);\n };\n const adPlayhead = formatPlayhead(ctx.adPlayheadSeconds);\n set(\"ADPLAYHEAD\", adPlayhead);\n set(\"MEDIAPLAYHEAD\", adPlayhead);\n set(\"CONTENTPLAYHEAD\", formatPlayhead(ctx.contentPlayheadSeconds));\n set(\"ASSETURI\", ctx.assetUri);\n set(\"MEDIAMIME\", ctx.mediaMime);\n set(\"TIMESTAMP\", (/* @__PURE__ */ new Date()).toISOString());\n set(\"SERVERSIDE\", \"0\");\n if (ctx.errorCode != null && ctx.errorCode !== \"\") {\n set(\"ERRORCODE\", String(ctx.errorCode));\n }\n if (ctx.playerWidth != null && ctx.playerHeight != null) {\n set(\"PLAYERSIZE\", `${Math.round(ctx.playerWidth)},${Math.round(ctx.playerHeight)}`);\n }\n set(\"IFA\", ctx.deviceId);\n set(\"IFATYPE\", ctx.deviceIdType);\n if (ctx.limitAdTracking != null) {\n set(\"LIMITADTRACKING\", ctx.limitAdTracking ? \"1\" : \"0\");\n }\n set(\"PAGEURL\", ctx.pageUrl);\n if (ctx.pageUrl) {\n try {\n set(\"DOMAIN\", new URL(ctx.pageUrl).hostname);\n } catch {\n }\n }\n set(\"CLIENTUA\", ctx.clientUa);\n set(\"DEVICEUA\", ctx.clientUa);\n if (ctx.podSequence != null) {\n set(\"PODSEQUENCE\", String(ctx.podSequence));\n }\n set(\"ADSERVINGID\", ctx.adServingId);\n if (ctx.reason != null && ctx.reason !== \"\") {\n set(\"REASON\", String(ctx.reason));\n }\n return values;\n}\nfunction substituteVastTrackingMacros(url, ctx = {}) {\n if (!url) return url;\n const values = resolveMacroValues(ctx);\n return url.replace(CACHEBUSTING_ALIASES, () => generateCachebuster()).replace(VAST_MACRO_PATTERN, (match, name) => {\n if (name === \"CACHEBUSTING\") return generateCachebuster();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n return KNOWN_VAST_MACROS.has(name) ? \"\" : match;\n });\n}\n\n// src/sdk/hlsAdPlayer.ts\nvar LINEAR_TRACKING_EVENTS = [\n \"creativeView\",\n \"loaded\",\n \"start\",\n \"firstQuartile\",\n \"midpoint\",\n \"thirdQuartile\",\n \"complete\",\n \"mute\",\n \"unmute\",\n \"pause\",\n \"resume\",\n \"fullscreen\",\n \"exitFullscreen\",\n \"playerExpand\",\n \"playerCollapse\",\n \"notUsed\"\n];\nfunction textOf(el) {\n const value = el?.textContent?.trim();\n return value ? value : void 0;\n}\nfunction parseVastTime(value) {\n if (!value) return void 0;\n const parts = value.trim().split(\":\");\n if (parts.length !== 3) return void 0;\n const [h, m, s] = parts.map((p) => parseFloat(p));\n if (![h, m, s].every((n) => n !== void 0 && Number.isFinite(n))) {\n return void 0;\n }\n return h * 3600 + m * 60 + s;\n}\nfunction parseProgressOffset(offset) {\n if (!offset) return void 0;\n const trimmed = offset.trim();\n if (trimmed.endsWith(\"%\")) {\n const percent = parseFloat(trimmed);\n return Number.isFinite(percent) ? { offsetPercent: percent } : void 0;\n }\n const seconds = parseVastTime(trimmed);\n return seconds !== void 0 ? { offsetSeconds: seconds } : void 0;\n}\nvar MAX_VAST_WRAPPER_DEPTH = 5;\nvar BEACON_TIMEOUT_MS = 3e4;\nvar inFlightBeacons = /* @__PURE__ */ new Set();\nvar VAST_ERROR_MEDIA_DISPLAY = 405;\nvar VAST_ERROR_WRAPPER_TIMEOUT = 301;\nvar VAST_ERROR_WRAPPER_LIMIT = 302;\nvar VAST_ERROR_WRAPPER_NO_ADS = 303;\nvar VAST_ERROR_NO_SUPPORTED_MEDIA = 403;\nvar VERIFICATION_NOT_SUPPORTED_REASON = 2;\nvar VIEWABLE_MIN_VISIBLE_RATIO = 0.5;\nvar VIEWABLE_MIN_CONTINUOUS_S = 2;\nfunction toVastMediaErrorCode(error) {\n switch (error?.code) {\n case 1:\n return 400;\n case 2:\n return 401;\n case 4:\n return 403;\n default:\n return VAST_ERROR_MEDIA_DISPLAY;\n }\n}\nfunction createHlsAdPlayer(contentVideo, options) {\n let adPlaying = false;\n let originalMutedState = false;\n let originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));\n const listeners = /* @__PURE__ */ new Map();\n const mainHlsInstance = options?.mainHlsInstance;\n const AD_CONTAINER_PROP = \"__stormcloudAdContainer\";\n const AD_VIDEO_PROP = \"__stormcloudAdVideo\";\n const FRAME_COUNTER_RELIABLE_PROP = \"__stormcloudFrameCounterReliable\";\n const RVFC_RELIABLE_PROP = \"__stormcloudRvfcReliable\";\n let adVideoElement = contentVideo[AD_VIDEO_PROP] ?? void 0;\n let adHls;\n let adContainerEl = contentVideo[AD_CONTAINER_PROP] ?? void 0;\n let adEventHandlers = [];\n let containerHandlers = [];\n let currentAd;\n let currentAdMediaFile;\n let podAds = [];\n let podIndex = 0;\n const preloadedAds = /* @__PURE__ */ new Map();\n const preloadingAds = /* @__PURE__ */ new Map();\n let destroyed = false;\n let pendingTimeouts = [];\n const STALL_TIMEOUT_MS = 4e3;\n const STALL_CHECK_INTERVAL_MS = 1e3;\n const BLACKFRAME_MIN_PLAYBACK_S = 1.5;\n let stallWatchdogId;\n let lastAdProgressTime = 0;\n let lastAdProgressPosition = 0;\n let sawDecodedVideoFrame = false;\n let videoFrameCallbackHandle;\n let pendingPlayPromise;\n function createTrackingState() {\n return {\n impression: false,\n loaded: false,\n start: false,\n firstQuartile: false,\n midpoint: false,\n thirdQuartile: false,\n complete: false,\n viewabilitySettled: false,\n lastMuted: void 0,\n progressFired: /* @__PURE__ */ new Set()\n };\n }\n let trackingFired = createTrackingState();\n const resolvedAds = /* @__PURE__ */ new Set();\n let viewObserver;\n let visibleRatio = 0;\n let continuousVisibleS = 0;\n let lastViewSampleTime;\n let lastPlayerExpanded = false;\n let documentHandlers = [];\n function emit(event, payload) {\n const set = listeners.get(event);\n if (!set) return;\n for (const fn of Array.from(set)) {\n try {\n fn(payload);\n } catch (error) {\n console.warn(\n `[HlsAdPlayer] Error in event listener for ${event}:`,\n error\n );\n }\n }\n }\n function buildTrackingMacroContext(options2 = {}) {\n const { errorCode, reason } = options2;\n const ad = options2.ad ?? currentAd;\n const context = {\n adPlayheadSeconds: adVideoElement?.currentTime,\n contentPlayheadSeconds: contentVideo.currentTime,\n assetUri: currentAdMediaFile?.url,\n mediaMime: currentAdMediaFile?.type,\n playerWidth: adVideoElement?.clientWidth || adContainerEl?.clientWidth,\n playerHeight: adVideoElement?.clientHeight || adContainerEl?.clientHeight\n };\n if (errorCode != null) {\n context.errorCode = errorCode;\n }\n if (typeof navigator !== \"undefined\" && navigator.userAgent) {\n context.clientUa = navigator.userAgent;\n }\n if (typeof location !== \"undefined\" && location.href) {\n context.pageUrl = location.href;\n }\n if (podAds.length > 0) {\n context.podSequence = podIndex + 1;\n }\n if (ad?.adServingId) {\n context.adServingId = ad.adServingId;\n }\n if (reason != null) {\n context.reason = reason;\n }\n return context;\n }\n function fireTrackingPixels(urls, options2) {\n if (!urls || urls.length === 0) return;\n const macroContext = buildTrackingMacroContext(options2);\n urls.forEach((url) => {\n try {\n const trackingUrl = substituteVastTrackingMacros(url, macroContext);\n const img = new Image(1, 1);\n inFlightBeacons.add(img);\n let timeoutId;\n const release = () => {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n img.onload = null;\n img.onerror = null;\n inFlightBeacons.delete(img);\n };\n img.onload = release;\n img.onerror = release;\n timeoutId = setTimeout(release, BEACON_TIMEOUT_MS);\n img.src = trackingUrl;\n console.log(`[HlsAdPlayer] Fired tracking pixel: ${trackingUrl}`);\n } catch (error) {\n console.warn(`[HlsAdPlayer] Error firing tracking pixel:`, error);\n }\n });\n }\n function getMainStreamQuality() {\n if (!mainHlsInstance || !mainHlsInstance.levels) {\n return null;\n }\n const currentLevel = mainHlsInstance.currentLevel;\n if (currentLevel === -1 || !mainHlsInstance.levels[currentLevel]) {\n const autoLevel = mainHlsInstance.loadLevel;\n if (autoLevel !== -1 && mainHlsInstance.levels[autoLevel]) {\n const level2 = mainHlsInstance.levels[autoLevel];\n return {\n width: level2.width || 1920,\n height: level2.height || 1080,\n bitrate: level2.bitrate || 5e6\n };\n }\n return null;\n }\n const level = mainHlsInstance.levels[currentLevel];\n return {\n width: level.width || 1920,\n height: level.height || 1080,\n bitrate: level.bitrate || 5e6\n };\n }\n function selectBestMediaFile(mediaFiles) {\n if (mediaFiles.length === 0) {\n throw new Error(\"No media files available\");\n }\n const firstFile = mediaFiles[0];\n if (!firstFile) {\n throw new Error(\"No media files available\");\n }\n if (mediaFiles.length === 1) {\n return firstFile;\n }\n const mainQuality = getMainStreamQuality();\n if (!mainQuality) {\n console.log(\n \"[HlsAdPlayer] No main stream quality info, using first media file\"\n );\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Main stream quality:\", mainQuality);\n const scoredFiles = mediaFiles.map((file) => {\n const widthDiff = Math.abs(file.width - mainQuality.width);\n const heightDiff = Math.abs(file.height - mainQuality.height);\n const resolutionDiff = widthDiff + heightDiff;\n const fileBitrate = (file.bitrate || 5e3) * 1e3;\n const bitrateDiff = Math.abs(fileBitrate - mainQuality.bitrate);\n const score = resolutionDiff * 2 + bitrateDiff / 1e3;\n return { file, score, resolutionDiff, bitrateDiff };\n });\n scoredFiles.sort((a, b) => a.score - b.score);\n const bestMatch = scoredFiles[0];\n if (!bestMatch) {\n console.log(\"[HlsAdPlayer] No best match found, using first media file\");\n return firstFile;\n }\n console.log(\"[HlsAdPlayer] Selected media file:\", {\n url: bestMatch.file.url,\n resolution: `${bestMatch.file.width}x${bestMatch.file.height}`,\n bitrate: bestMatch.file.bitrate,\n score: bestMatch.score,\n resolutionDiff: bestMatch.resolutionDiff,\n bitrateDiff: bestMatch.bitrateDiff\n });\n return bestMatch.file;\n }\n function isHlsMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type === \"application/x-mpegurl\" || type === \"application/vnd.apple.mpegurl\" || type.includes(\"mpegurl\") || url.includes(\".m3u8\");\n }\n function isProgressiveMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = mediaFile.url.toLowerCase();\n return type.startsWith(\"video/\") || url.endsWith(\".mp4\") || url.includes(\".mp4?\");\n }\n function isAudioMediaFile(mediaFile) {\n const type = mediaFile.type.toLowerCase();\n const url = (mediaFile.url.toLowerCase().split(\"?\")[0] || \"\").trim();\n return type.startsWith(\"audio/\") || url.endsWith(\".mp3\") || url.endsWith(\".aac\") || url.endsWith(\".m4a\") || url.endsWith(\".ogg\") || url.endsWith(\".oga\") || url.endsWith(\".opus\") || url.endsWith(\".wav\") || url.endsWith(\".weba\");\n }\n function collectVideoMediaFiles(linear, verbose) {\n const mediaFileElements = linear.querySelectorAll(\n \":scope > MediaFiles > MediaFile\"\n );\n const mediaFiles = [];\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Found ${mediaFileElements.length} MediaFile element(s) in VAST XML`\n );\n }\n mediaFileElements.forEach((mf, index) => {\n const type = mf.getAttribute(\"type\") || \"\";\n const url = mf.textContent?.trim() || \"\";\n const width = mf.getAttribute(\"width\") || \"\";\n const height = mf.getAttribute(\"height\") || \"\";\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index}: type=\"${type}\", url=\"${url}\", width=\"${width}\", height=\"${height}\"`\n );\n }\n if (!url) {\n if (verbose) {\n console.warn(`[HlsAdPlayer] MediaFile ${index} has empty URL`);\n }\n return;\n }\n const apiFramework = (mf.getAttribute(\"apiFramework\") || \"\").toUpperCase();\n if (apiFramework === \"VPAID\") {\n if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (VPAID creatives are not supported)`\n );\n }\n return;\n }\n const bitrateAttr = mf.getAttribute(\"bitrate\");\n const bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;\n const mediaFile = {\n url,\n type,\n width: parseInt(width || \"1920\", 10),\n height: parseInt(height || \"1080\", 10),\n bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0\n };\n if (isAudioMediaFile(mediaFile)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (audio-only, type=\"${type}\") \\u2014 audio ads are not played to avoid a black screen`\n );\n return;\n }\n const hasExplicitDimensions = mf.getAttribute(\"width\") != null && mf.getAttribute(\"height\") != null;\n if (!isHlsMediaFile(mediaFile) && hasExplicitDimensions && (mediaFile.width <= 1 || mediaFile.height <= 1)) {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (degenerate dimensions ${mediaFile.width}x${mediaFile.height}, type=\"${type}\") \\u2014 likely an audio-only placeholder rendition`\n );\n return;\n }\n if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {\n mediaFiles.push(mediaFile);\n if (verbose) {\n console.log(\n `[HlsAdPlayer] Added ${isHlsMediaFile(mediaFile) ? \"HLS\" : \"progressive\"} MediaFile: ${url}`\n );\n }\n } else if (verbose) {\n console.log(\n `[HlsAdPlayer] MediaFile ${index} ignored (type=\"${type}\" is not supported)`\n );\n }\n });\n return mediaFiles;\n }\n function createEmptyTrackingUrls() {\n const urls = {\n impression: [],\n clickTracking: [],\n error: [],\n viewable: [],\n notViewable: [],\n viewUndetermined: [],\n verificationNotExecuted: [],\n progress: []\n };\n for (const event of LINEAR_TRACKING_EVENTS) {\n urls[event] = [];\n }\n return urls;\n }\n function pushUrls(target, elements) {\n elements.forEach((el) => {\n const url = textOf(el);\n if (url) target.push(url);\n });\n }\n function collectLinearTracking(linear, into) {\n linear.querySelectorAll(\":scope > TrackingEvents > Tracking\").forEach((el) => {\n const event = el.getAttribute(\"event\");\n const url = textOf(el);\n if (!event || !url) return;\n if (event === \"progress\") {\n const offset = parseProgressOffset(el.getAttribute(\"offset\"));\n if (offset) into.progress.push({ url, ...offset });\n return;\n }\n if (LINEAR_TRACKING_EVENTS.indexOf(event) !== -1) {\n into[event].push(url);\n }\n });\n pushUrls(\n into.clickTracking,\n linear.querySelectorAll(\":scope > VideoClicks > ClickTracking\")\n );\n }\n function collectAdLevelTracking(adBody, into) {\n pushUrls(into.impression, adBody.querySelectorAll(\":scope > Impression\"));\n pushUrls(into.error, adBody.querySelectorAll(\":scope > Error\"));\n pushUrls(\n into.viewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > Viewable\")\n );\n pushUrls(\n into.notViewable,\n adBody.querySelectorAll(\":scope > ViewableImpression > NotViewable\")\n );\n pushUrls(\n into.viewUndetermined,\n adBody.querySelectorAll(\":scope > ViewableImpression > ViewUndetermined\")\n );\n adBody.querySelectorAll(\n ':scope > AdVerifications > Verification, :scope > Extensions > Extension[type=\"AdVerifications\"] > AdVerifications > Verification'\n ).forEach((verification) => {\n pushUrls(\n into.verificationNotExecuted,\n verification.querySelectorAll(\n ':scope > TrackingEvents > Tracking[event=\"verificationNotExecuted\"]'\n )\n );\n });\n }\n function mergeTrackingUrls(target, source) {\n const targetLists = target;\n const sourceLists = source;\n for (const key of Object.keys(targetLists)) {\n const incoming = sourceLists[key];\n if (incoming && incoming.length > 0) {\n targetLists[key] = targetLists[key].concat(incoming);\n }\n }\n return target;\n }\n function parseXml(xmlString) {\n const xmlDoc = new DOMParser().parseFromString(xmlString, \"text/xml\");\n const parserError = xmlDoc.querySelector(\"parsererror\");\n if (parserError) {\n console.error(\n \"[HlsAdPlayer] XML parsing error (malformed VAST XML):\",\n parserError.textContent\n );\n return null;\n }\n return xmlDoc;\n }\n function getAdSequence(adElement) {\n const sequence = parseInt(adElement.getAttribute(\"sequence\") || \"\", 10);\n return Number.isFinite(sequence) ? sequence : void 0;\n }\n function emptyVastResult(root) {\n const errorUrls = [];\n pushUrls(errorUrls, root.querySelectorAll(\":scope > Error\"));\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_WRAPPER_NO_ADS };\n }\n function parseVastXml(xmlString) {\n try {\n const xmlDoc = parseXml(xmlString);\n if (!xmlDoc) return { type: \"empty\" };\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n const adElement = adElements.find((el) => getAdSequence(el) === void 0) ?? adElements[0];\n if (!adElement) {\n console.warn(\n `[HlsAdPlayer] No Ad element found in VAST ${root.getAttribute(\"version\") ?? \"\"} response`\n );\n return emptyVastResult(root);\n }\n const parsed = parseAdElement(adElement, true);\n if (parsed.type === \"wrapper\") {\n console.log(\n `[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ${parsed.vastAdTagUri}`\n );\n }\n return parsed;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing VAST XML:\", error);\n return { type: \"empty\" };\n }\n }\n function parseAdElement(adElement, verbose = false) {\n try {\n const wrapper = adElement.querySelector(\":scope > Wrapper\");\n if (wrapper) {\n const vastAdTagUri = textOf(\n wrapper.querySelector(\":scope > VASTAdTagURI\")\n );\n if (!vastAdTagUri) {\n console.warn(\"[HlsAdPlayer] <Wrapper> has no VASTAdTagURI\");\n return { type: \"empty\" };\n }\n const trackingUrls2 = createEmptyTrackingUrls();\n collectAdLevelTracking(wrapper, trackingUrls2);\n wrapper.querySelectorAll(\":scope > Creatives > Creative > Linear\").forEach((linear2) => collectLinearTracking(linear2, trackingUrls2));\n return {\n type: \"wrapper\",\n vastAdTagUri,\n trackingUrls: trackingUrls2,\n rules: {\n followAdditionalWrappers: wrapper.getAttribute(\"followAdditionalWrappers\") !== \"false\"\n }\n };\n }\n const inLine = adElement.querySelector(\":scope > InLine\");\n if (!inLine) {\n console.warn(\"[HlsAdPlayer] <Ad> has neither <InLine> nor <Wrapper>\");\n return { type: \"empty\" };\n }\n const errorUrls = [];\n pushUrls(errorUrls, inLine.querySelectorAll(\":scope > Error\"));\n if (adElement.getAttribute(\"conditionalAd\") === \"true\") {\n console.warn(\"[HlsAdPlayer] Skipping conditional <Ad> (VPAID-only)\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n let linear;\n let mediaFiles = [];\n for (const candidate of Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear\")\n )) {\n const files = collectVideoMediaFiles(candidate, verbose);\n if (files.length > 0) {\n linear = candidate;\n mediaFiles = files;\n break;\n }\n }\n if (!linear) {\n console.warn(\"[HlsAdPlayer] No supported linear media files in <Ad>\");\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n const trackingUrls = createEmptyTrackingUrls();\n collectAdLevelTracking(inLine, trackingUrls);\n collectLinearTracking(linear, trackingUrls);\n return {\n type: \"inline\",\n ad: {\n id: adElement.getAttribute(\"id\") || \"unknown\",\n title: textOf(inLine.querySelector(\":scope > AdTitle\")) || \"Ad\",\n duration: parseVastTime(textOf(linear.querySelector(\":scope > Duration\"))) ?? 30,\n mediaFiles,\n trackingUrls,\n clickThrough: textOf(\n linear.querySelector(\":scope > VideoClicks > ClickThrough\")\n ),\n adServingId: textOf(inLine.querySelector(\":scope > AdServingId\"))\n }\n };\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error parsing <Ad> element:\", error);\n return { type: \"empty\" };\n }\n }\n async function fetchVastXml(vastTagUrl, credentials = \"include\") {\n const requestVast = (creds) => fetch(vastTagUrl, {\n mode: \"cors\",\n credentials: creds,\n headers: {\n \"Accept\": \"application/xml, text/xml, */*\"\n },\n referrerPolicy: \"no-referrer-when-downgrade\"\n });\n let response;\n try {\n response = await requestVast(credentials);\n } catch (error) {\n if (credentials !== \"omit\") {\n console.warn(\n `[HlsAdPlayer] VAST fetch failed with credentials=\"${credentials}\", retrying without credentials:`,\n error\n );\n response = await requestVast(\"omit\");\n } else {\n throw error;\n }\n }\n if (!response.ok) {\n throw new Error(`Failed to fetch VAST: ${response.statusText}`);\n }\n return response.text();\n }\n async function fetchAndParseVastAd(vastTagUrl, depth = 0, accumulatedTracking = createEmptyTrackingUrls(), rules = { followAdditionalWrappers: true }) {\n let vastXml;\n try {\n vastXml = await fetchVastXml(\n vastTagUrl,\n depth === 0 ? \"include\" : \"omit\"\n );\n } catch (error) {\n if (depth === 0) throw error;\n console.warn(\"[HlsAdPlayer] Wrapped VAST request failed:\", error);\n fireTrackingPixels(accumulatedTracking.error, {\n errorCode: VAST_ERROR_WRAPPER_TIMEOUT\n });\n return null;\n }\n console.log(\"[HlsAdPlayer] VAST XML received\");\n console.log(\n \"[HlsAdPlayer] VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n const parsed = parseVastXml(vastXml);\n if (parsed.type === \"empty\") {\n fireTrackingPixels(\n (parsed.errorUrls ?? []).concat(accumulatedTracking.error),\n { errorCode: parsed.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS }\n );\n return null;\n }\n if (parsed.type === \"wrapper\") {\n if (depth >= MAX_VAST_WRAPPER_DEPTH || !rules.followAdditionalWrappers) {\n console.warn(\n rules.followAdditionalWrappers ? `[HlsAdPlayer] VAST wrapper depth limit (${MAX_VAST_WRAPPER_DEPTH}) reached, aborting redirect chain` : '[HlsAdPlayer] Parent wrapper set followAdditionalWrappers=\"false\"; rejecting nested wrapper'\n );\n fireTrackingPixels(\n accumulatedTracking.error.concat(parsed.trackingUrls.error),\n { errorCode: VAST_ERROR_WRAPPER_LIMIT }\n );\n return null;\n }\n mergeTrackingUrls(accumulatedTracking, parsed.trackingUrls);\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n depth + 1,\n accumulatedTracking,\n parsed.rules\n );\n }\n mergeTrackingUrls(parsed.ad.trackingUrls, accumulatedTracking);\n return parsed.ad;\n }\n async function fetchAndParsePod(vastTagUrl) {\n const vastXml = await fetchVastXml(vastTagUrl);\n console.log(\n `[HlsAdPlayer] Pod VAST XML received (length=${vastXml.length})`\n );\n const trimmedXml = vastXml.trim();\n if (trimmedXml.length === 0) {\n console.warn(\n \"[HlsAdPlayer] Pod VAST response body is empty (no fill)\"\n );\n return [];\n }\n const xmlDoc = parseXml(vastXml);\n if (!xmlDoc) {\n console.error(\n \"[HlsAdPlayer] Pod VAST XML content (first 2000 chars):\",\n vastXml.substring(0, 2e3)\n );\n return [];\n }\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n if (adElements.length === 0) {\n console.warn(\n `[HlsAdPlayer] No <Ad> elements in VAST ${root.getAttribute(\"version\") ?? \"\"} pod response (no fill)`\n );\n const empty = emptyVastResult(root);\n if (empty.type === \"empty\" && empty.errorUrls?.length) {\n fireTrackingPixels(empty.errorUrls, {\n errorCode: empty.errorCode ?? VAST_ERROR_WRAPPER_NO_ADS\n });\n }\n return [];\n }\n const resolveAd = async (adElement) => {\n const parsed = parseAdElement(adElement);\n if (parsed.type === \"inline\") return parsed.ad;\n if (parsed.type === \"wrapper\") {\n return fetchAndParseVastAd(\n parsed.vastAdTagUri,\n 1,\n parsed.trackingUrls,\n parsed.rules\n );\n }\n if (parsed.errorUrls?.length) {\n fireTrackingPixels(parsed.errorUrls, {\n errorCode: parsed.errorCode ?? VAST_ERROR_NO_SUPPORTED_MEDIA\n });\n }\n return null;\n };\n const podElements = adElements.filter((el) => getAdSequence(el) !== void 0).sort((a, b) => getAdSequence(a) - getAdSequence(b));\n const buffet = adElements.filter((el) => getAdSequence(el) === void 0);\n const ads = [];\n if (podElements.length === 0) {\n for (const adElement of buffet) {\n const ad = await resolveAd(adElement);\n if (ad) ads.push(ad);\n }\n } else {\n for (const adElement of podElements) {\n let ad = await resolveAd(adElement);\n while (!ad && buffet.length > 0) {\n ad = await resolveAd(buffet.shift());\n }\n if (ad) ads.push(ad);\n }\n }\n console.log(\n `[HlsAdPlayer] Parsed ${ads.length} ad(s) from VAST ${root.getAttribute(\"version\") ?? \"\"} pod response`\n );\n return ads;\n }\n function createAdVideoElement() {\n const video = document.createElement(\"video\");\n video.style.position = \"absolute\";\n video.style.left = \"0\";\n video.style.top = \"0\";\n video.style.width = \"100%\";\n video.style.height = \"100%\";\n video.style.objectFit = \"contain\";\n video.style.backgroundColor = \"#000\";\n video.playsInline = true;\n video.muted = false;\n video.volume = 1;\n console.log(\n `[HlsAdPlayer] Created ad video element with volume ${video.volume}`\n );\n return video;\n }\n function setupAdEventListeners() {\n if (!adVideoElement || !currentAd) return;\n if (adEventHandlers.length > 0) return;\n const onTimeUpdate = () => {\n if (!currentAd || !adVideoElement) return;\n noteAdProgress();\n sampleViewability();\n const currentTime = adVideoElement.currentTime;\n if (trackingFired.start) {\n for (const event of currentAd.trackingUrls.progress) {\n if (trackingFired.progressFired.has(event)) continue;\n const threshold = event.offsetSeconds ?? (event.offsetPercent ?? 0) / 100 * currentAd.duration;\n if (currentTime >= threshold) {\n trackingFired.progressFired.add(event);\n fireTrackingPixels([event.url]);\n }\n }\n }\n if (!(currentAd.duration > 0)) return;\n const progress = currentTime / currentAd.duration;\n if (progress >= 0.25 && !trackingFired.firstQuartile) {\n trackingFired.firstQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.firstQuartile);\n }\n if (progress >= 0.5 && !trackingFired.midpoint) {\n trackingFired.midpoint = true;\n fireTrackingPixels(currentAd.trackingUrls.midpoint);\n }\n if (progress >= 0.75 && !trackingFired.thirdQuartile) {\n trackingFired.thirdQuartile = true;\n fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);\n }\n };\n const onLoadedMetadata = () => {\n if (!adPlaying || !adVideoElement) return;\n const { videoWidth, videoHeight } = adVideoElement;\n if (videoWidth <= 1 || videoHeight <= 1) {\n console.warn(\n `[HlsAdPlayer] Ad creative has no usable video dimensions (${videoWidth}x${videoHeight}) - skipping this creative`\n );\n handleVideoDecodeFailure();\n }\n };\n const onCanPlay = () => {\n if (!currentAd || trackingFired.loaded) return;\n trackingFired.loaded = true;\n fireTrackingPixels(currentAd.trackingUrls.loaded);\n };\n const onPlaying = () => {\n startStallWatchdog();\n if (!currentAd || !adVideoElement) return;\n if (!trackingFired.impression) {\n trackingFired.impression = true;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.impression);\n fireTrackingPixels(currentAd.trackingUrls.creativeView);\n fireTrackingPixels(currentAd.trackingUrls.verificationNotExecuted, {\n reason: VERIFICATION_NOT_SUPPORTED_REASON\n });\n emit(\"ad_impression\", {\n adId: currentAd.id,\n index: podIndex,\n total: podAds.length || 1\n });\n }\n if (trackingFired.start) return;\n trackingFired.start = true;\n trackingFired.lastMuted = adVideoElement.muted || adVideoElement.volume === 0;\n fireTrackingPixels(currentAd.trackingUrls.start);\n console.log(\"[HlsAdPlayer] Ad started playing\");\n };\n const onEnded = () => {\n if (!currentAd || trackingFired.complete) return;\n sampleViewability();\n settleViewability();\n trackingFired.complete = true;\n fireTrackingPixels(currentAd.trackingUrls.complete);\n console.log(\"[HlsAdPlayer] Ad completed\");\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdComplete();\n };\n const onError = (e) => {\n if (!adPlaying) return;\n console.error(\"[HlsAdPlayer] Ad video error:\", e);\n reportCurrentAdError(toVastMediaErrorCode(adVideoElement?.error));\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n };\n const onVolumeChange = () => {\n if (!currentAd || !adVideoElement) return;\n const muted = adVideoElement.muted || adVideoElement.volume === 0;\n if (!trackingFired.start) {\n trackingFired.lastMuted = muted;\n return;\n }\n if (muted === trackingFired.lastMuted) return;\n trackingFired.lastMuted = muted;\n fireTrackingPixels(\n muted ? currentAd.trackingUrls.mute : currentAd.trackingUrls.unmute\n );\n };\n const isTrackablePlayback = () => adPlaying && !!currentAd && !!adVideoElement && trackingFired.start && !trackingFired.complete && !adVideoElement.ended;\n const onPause = () => {\n continuousVisibleS = 0;\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.pause);\n }\n };\n const onPlay = () => {\n if (isTrackablePlayback()) {\n fireTrackingPixels(currentAd.trackingUrls.resume);\n }\n };\n adEventHandlers = [\n { type: \"timeupdate\", handler: onTimeUpdate },\n { type: \"loadedmetadata\", handler: onLoadedMetadata },\n { type: \"canplay\", handler: onCanPlay },\n { type: \"playing\", handler: onPlaying },\n { type: \"ended\", handler: onEnded },\n { type: \"error\", handler: onError },\n { type: \"volumechange\", handler: onVolumeChange },\n { type: \"pause\", handler: onPause },\n { type: \"play\", handler: onPlay }\n ];\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.addEventListener(type, handler);\n }\n }\n function teardownAdEventListeners() {\n if (adVideoElement) {\n for (const { type, handler } of adEventHandlers) {\n adVideoElement.removeEventListener(type, handler);\n }\n }\n adEventHandlers = [];\n }\n function handleAdClick() {\n if (!adPlaying || !currentAd) return;\n fireTrackingPixels(currentAd.trackingUrls.clickTracking);\n emit(\"ad_click\", { adId: currentAd.id, clickThrough: currentAd.clickThrough });\n if (currentAd.clickThrough) {\n try {\n window.open(currentAd.clickThrough, \"_blank\", \"noopener\");\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Failed to open ClickThrough URL:\", error);\n }\n }\n }\n function reportCurrentAdError(errorCode) {\n if (!currentAd) return;\n resolvedAds.add(currentAd);\n fireTrackingPixels(currentAd.trackingUrls.error, { errorCode });\n }\n function fireNotUsedForUnplayedAds() {\n for (const ad of podAds) {\n if (resolvedAds.has(ad)) continue;\n resolvedAds.add(ad);\n fireTrackingPixels(ad.trackingUrls.notUsed, { ad });\n }\n }\n function sampleViewability() {\n if (!currentAd || !adVideoElement || !viewObserver || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n const now = adVideoElement.currentTime;\n const inView = visibleRatio >= VIEWABLE_MIN_VISIBLE_RATIO && document.visibilityState === \"visible\" && !adVideoElement.paused;\n if (!inView) {\n continuousVisibleS = 0;\n } else if (lastViewSampleTime !== void 0 && now >= lastViewSampleTime) {\n continuousVisibleS += now - lastViewSampleTime;\n }\n lastViewSampleTime = now;\n if (continuousVisibleS >= VIEWABLE_MIN_CONTINUOUS_S) {\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(currentAd.trackingUrls.viewable);\n }\n }\n function settleViewability() {\n if (!currentAd || !trackingFired.impression || trackingFired.viewabilitySettled) {\n return;\n }\n trackingFired.viewabilitySettled = true;\n fireTrackingPixels(\n viewObserver ? currentAd.trackingUrls.notViewable : currentAd.trackingUrls.viewUndetermined\n );\n }\n function handleFullscreenChange() {\n if (!adPlaying || !currentAd || !adContainerEl || !trackingFired.start) return;\n const fullscreenEl = document.fullscreenElement ?? document.webkitFullscreenElement;\n const expanded = !!fullscreenEl && fullscreenEl.contains(adContainerEl);\n if (expanded === lastPlayerExpanded) return;\n lastPlayerExpanded = expanded;\n const urls = currentAd.trackingUrls;\n fireTrackingPixels(\n expanded ? urls.fullscreen.concat(urls.playerExpand) : urls.exitFullscreen.concat(urls.playerCollapse)\n );\n }\n function attachContainerHandlers() {\n if (!adContainerEl || containerHandlers.length > 0) return;\n const onClick = () => handleAdClick();\n const onInteraction = (event) => {\n if (adPlaying) emit(\"ad_interaction\", event);\n };\n containerHandlers = [\n { type: \"click\", handler: onClick },\n { type: \"mousedown\", handler: onInteraction },\n { type: \"touchstart\", handler: onInteraction }\n ];\n for (const { type, handler } of containerHandlers) {\n adContainerEl.addEventListener(type, handler);\n }\n const onFullscreenChange = () => handleFullscreenChange();\n documentHandlers = [\n { type: \"fullscreenchange\", handler: onFullscreenChange },\n { type: \"webkitfullscreenchange\", handler: onFullscreenChange }\n ];\n for (const { type, handler } of documentHandlers) {\n document.addEventListener(type, handler);\n }\n if (typeof IntersectionObserver !== \"undefined\") {\n viewObserver = new IntersectionObserver(\n (entries) => {\n const entry = entries[entries.length - 1];\n if (entry) {\n visibleRatio = entry.isIntersecting ? entry.intersectionRatio : 0;\n }\n },\n { threshold: [0, 0.25, 0.5, 0.75, 1] }\n );\n viewObserver.observe(adContainerEl);\n }\n }\n function detachContainerHandlers() {\n if (adContainerEl) {\n for (const { type, handler } of containerHandlers) {\n adContainerEl.removeEventListener(type, handler);\n }\n }\n containerHandlers = [];\n for (const { type, handler } of documentHandlers) {\n document.removeEventListener(type, handler);\n }\n documentHandlers = [];\n viewObserver?.disconnect();\n viewObserver = void 0;\n }\n function setAdPlayingFlag(isPlaying) {\n if (isPlaying) {\n contentVideo.dataset.stormcloudAdPlaying = \"true\";\n } else {\n delete contentVideo.dataset.stormcloudAdPlaying;\n }\n }\n function resetAdTracking() {\n trackingFired = createTrackingState();\n continuousVisibleS = 0;\n lastViewSampleTime = void 0;\n }\n function isRvfcSupported(video) {\n return typeof video.requestVideoFrameCallback === \"function\";\n }\n function settlePendingPlay() {\n pendingPlayPromise = void 0;\n }\n function startAdPlayback(context) {\n if (!adVideoElement) return;\n const playPromise = adVideoElement.play();\n pendingPlayPromise = playPromise;\n playPromise.catch((error) => {\n if (pendingPlayPromise !== playPromise) {\n return;\n }\n console.error(`[HlsAdPlayer] Error starting ${context}:`, error);\n handleAdError();\n }).finally(() => {\n if (pendingPlayPromise === playPromise) {\n pendingPlayPromise = void 0;\n }\n });\n }\n function prepareVideoElementForNewSource() {\n settlePendingPlay();\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n if (!adVideoElement) return;\n try {\n adVideoElement.pause();\n adVideoElement.removeAttribute(\"src\");\n adVideoElement.load();\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error preparing ad video for new source:\",\n error\n );\n }\n }\n function recreateAdVideoElement() {\n console.log(\n \"[HlsAdPlayer] Recreating ad video element (single-decoder platform)\"\n );\n teardownAdEventListeners();\n prepareVideoElementForNewSource();\n if (adVideoElement) {\n try {\n adVideoElement.remove();\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error removing ad video element:\", error);\n }\n }\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n }\n function loadCurrentAdMedia() {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n const mediaFile = selectBestMediaFile(currentAd.mediaFiles);\n if (!mediaFile) {\n throw new Error(\"No media file available for ad\");\n }\n currentAdMediaFile = mediaFile;\n const isHlsAd = isHlsMediaFile(mediaFile);\n console.log(\n `[HlsAdPlayer] Loading ${isHlsAd ? \"HLS\" : \"progressive\"} ad (pod ${podIndex + 1}/${podAds.length || 1}) from: ${mediaFile.url}`\n );\n if (isHlsAd && import_hls.default.isSupported()) {\n if (adHls) {\n adHls.destroy();\n }\n adHls = new import_hls.default({\n enableWorker: true,\n lowLatencyMode: false\n });\n adHls.loadSource(mediaFile.url);\n adHls.attachMedia(adVideoElement);\n adHls.on(import_hls.default.Events.MANIFEST_PARSED, () => {\n console.log(\"[HlsAdPlayer] HLS manifest parsed, starting playback\");\n startAdPlayback(\"HLS ad playback\");\n });\n adHls.on(import_hls.default.Events.ERROR, (_event, data) => {\n console.error(\"[HlsAdPlayer] HLS error:\", data);\n if (data.fatal) {\n handleAdError();\n }\n });\n } else if (isHlsAd && adVideoElement.canPlayType(\"application/vnd.apple.mpegurl\")) {\n adVideoElement.src = mediaFile.url;\n startAdPlayback(\"native HLS ad playback\");\n } else if (!isHlsAd && isProgressiveMediaFile(mediaFile)) {\n if (adHls) {\n adHls.destroy();\n adHls = void 0;\n }\n adVideoElement.src = mediaFile.url;\n adVideoElement.load();\n startAdPlayback(\"progressive ad playback\");\n } else {\n throw new Error(`Unsupported ad media file type: ${mediaFile.type}`);\n }\n }\n function advanceToNextPodAd() {\n if (podIndex >= podAds.length - 1) {\n return false;\n }\n settleViewability();\n podIndex++;\n currentAd = podAds[podIndex];\n currentAdMediaFile = void 0;\n resetAdTracking();\n if (currentAd) {\n console.log(\n `[HlsAdPlayer] Advancing to next pod ad (${podIndex + 1}/${podAds.length}): ${currentAd.title}, duration: ${currentAd.duration}s`\n );\n }\n clearStallWatchdog();\n if (requiresMediaPipelineResetAfterAds()) {\n recreateAdVideoElement();\n setupAdEventListeners();\n } else {\n prepareVideoElementForNewSource();\n }\n try {\n loadCurrentAdMedia();\n emit(\"pod_ad_started\", { index: podIndex, total: podAds.length });\n return true;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Failed to load next pod ad:\", error);\n return false;\n }\n }\n function clearStallWatchdog() {\n if (stallWatchdogId != null) {\n clearInterval(stallWatchdogId);\n stallWatchdogId = void 0;\n }\n cancelVideoFrameProbe();\n }\n function noteAdProgress() {\n lastAdProgressTime = Date.now();\n if (adVideoElement) {\n lastAdProgressPosition = adVideoElement.currentTime;\n }\n }\n function handleAdStall() {\n console.warn(\n \"[HlsAdPlayer] Ad playback stalled (no progress) - recovering to avoid a blank frame\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function getDecodedVideoFrameCount(video) {\n try {\n if (typeof video.getVideoPlaybackQuality === \"function\") {\n const quality = video.getVideoPlaybackQuality();\n if (quality && typeof quality.totalVideoFrames === \"number\") {\n return quality.totalVideoFrames;\n }\n }\n const legacyCount = video.webkitDecodedFrameCount;\n if (typeof legacyCount === \"number\") {\n return legacyCount;\n }\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Unable to read decoded video frame count:\",\n error\n );\n }\n return void 0;\n }\n function isFrameCounterReliable() {\n return contentVideo[FRAME_COUNTER_RELIABLE_PROP] === true;\n }\n function markFrameCounterReliable() {\n contentVideo[FRAME_COUNTER_RELIABLE_PROP] = true;\n }\n function isRvfcReliable() {\n return contentVideo[RVFC_RELIABLE_PROP] === true;\n }\n function markRvfcReliable() {\n contentVideo[RVFC_RELIABLE_PROP] = true;\n }\n function cancelVideoFrameProbe() {\n if (videoFrameCallbackHandle != null && adVideoElement && typeof adVideoElement.cancelVideoFrameCallback === \"function\") {\n try {\n adVideoElement.cancelVideoFrameCallback(\n videoFrameCallbackHandle\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error cancelling video frame callback:\",\n error\n );\n }\n }\n videoFrameCallbackHandle = void 0;\n }\n function startVideoFrameProbe() {\n cancelVideoFrameProbe();\n if (!adVideoElement) return;\n const rvfc = adVideoElement.requestVideoFrameCallback;\n if (typeof rvfc !== \"function\") return;\n const onPresentedFrame = () => {\n videoFrameCallbackHandle = void 0;\n if (!adPlaying) return;\n sawDecodedVideoFrame = true;\n markRvfcReliable();\n };\n try {\n videoFrameCallbackHandle = rvfc.call(\n adVideoElement,\n onPresentedFrame\n );\n } catch (error) {\n console.warn(\n \"[HlsAdPlayer] Error requesting video frame callback:\",\n error\n );\n videoFrameCallbackHandle = void 0;\n }\n }\n function handleVideoDecodeFailure() {\n console.warn(\n \"[HlsAdPlayer] Ad audio is advancing but no video frames decoded (black screen) - skipping this creative\"\n );\n clearStallWatchdog();\n reportCurrentAdError(VAST_ERROR_MEDIA_DISPLAY);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) {\n return;\n }\n handleAdError();\n }\n function startStallWatchdog() {\n clearStallWatchdog();\n noteAdProgress();\n sawDecodedVideoFrame = false;\n startVideoFrameProbe();\n const blackFrameDetectionEnabled = !requiresMediaPipelineResetAfterAds();\n stallWatchdogId = window.setInterval(() => {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n if (blackFrameDetectionEnabled && !sawDecodedVideoFrame && !adVideoElement.paused) {\n const decodedFrames = getDecodedVideoFrameCount(adVideoElement);\n if (decodedFrames !== void 0 && decodedFrames > 0) {\n sawDecodedVideoFrame = true;\n markFrameCounterReliable();\n } else if (adVideoElement.currentTime >= BLACKFRAME_MIN_PLAYBACK_S) {\n const timeAdvancing = adVideoElement.currentTime > lastAdProgressPosition + 0.05;\n if (isRvfcSupported(adVideoElement) && timeAdvancing && isRvfcReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n if (decodedFrames === 0 && timeAdvancing && isFrameCounterReliable()) {\n handleVideoDecodeFailure();\n return;\n }\n }\n }\n if (adVideoElement.currentTime > lastAdProgressPosition + 0.05) {\n noteAdProgress();\n return;\n }\n if (adVideoElement.paused) {\n noteAdProgress();\n return;\n }\n if (Date.now() - lastAdProgressTime >= STALL_TIMEOUT_MS) {\n handleAdStall();\n }\n }, STALL_CHECK_INTERVAL_MS);\n }\n function releaseAdDecoder() {\n prepareVideoElementForNewSource();\n if (adContainerEl) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n }\n function handleAdComplete() {\n console.log(\"[HlsAdPlayer] Handling ad completion\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode:\", error);\n });\n } else {\n console.log(\"[HlsAdPlayer] Content video already playing in live mode\");\n }\n }\n emit(\"content_resume\");\n }\n function handleAdError() {\n console.log(\"[HlsAdPlayer] Handling ad error\");\n settleViewability();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = true;\n releaseAdDecoder();\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n emit(\"ad_error\");\n }\n return {\n initialize() {\n console.log(\"[HlsAdPlayer] Initializing\");\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"30\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n contentVideo[AD_CONTAINER_PROP] = adContainerEl;\n attachContainerHandlers();\n },\n async requestAds(vastTagUrl) {\n console.log(\"[HlsAdPlayer] Requesting ads:\", vastTagUrl);\n if (adPlaying) {\n console.warn(\n \"[HlsAdPlayer] Cannot request new ads while an ad is playing\"\n );\n return Promise.reject(new Error(\"Ad already playing\"));\n }\n try {\n let ads = [];\n if (preloadedAds.has(vastTagUrl)) {\n const preloaded = preloadedAds.get(vastTagUrl);\n preloadedAds.delete(vastTagUrl);\n if (preloaded) {\n ads = [preloaded];\n }\n console.log(\n \"[HlsAdPlayer] Using preloaded VAST response:\",\n vastTagUrl\n );\n } else {\n ads = await fetchAndParsePod(vastTagUrl);\n }\n if (!ads.length) {\n console.warn(\"[HlsAdPlayer] No ads available from VAST response\");\n emit(\"ad_error\");\n return Promise.reject(new Error(\"No ads available from VAST response\"));\n }\n podAds = ads;\n podIndex = 0;\n currentAd = ads[0];\n currentAdMediaFile = void 0;\n console.log(\n `[HlsAdPlayer] Pod parsed: ${ads.length} ad(s), first=\"${currentAd?.title}\", duration=${currentAd?.duration}s`\n );\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error requesting ads:\", error);\n emit(\"ad_error\");\n return Promise.reject(error);\n }\n },\n async play() {\n if (!currentAd) {\n console.warn(\n \"[HlsAdPlayer] Cannot play: No ad loaded (no ads available)\"\n );\n return Promise.reject(new Error(\"No ad loaded\"));\n }\n console.log(\"[HlsAdPlayer] Starting ad playback\");\n try {\n if (!adVideoElement) {\n adVideoElement = createAdVideoElement();\n adContainerEl?.appendChild(adVideoElement);\n contentVideo[AD_VIDEO_PROP] = adVideoElement;\n }\n setupAdEventListeners();\n resetAdTracking();\n const contentVolume = contentVideo.volume;\n originalVolume = Math.max(\n 0,\n Math.min(1, contentVolume || originalVolume)\n );\n if (!options?.continueLiveStreamDuringAds) {\n contentVideo.pause();\n console.log(\"[HlsAdPlayer] Content paused (VOD mode)\");\n } else {\n console.log(\"[HlsAdPlayer] Content continues (Live mode)\");\n }\n console.log(\"[HlsAdPlayer] FORCE MUTING main video\");\n contentVideo.muted = true;\n adPlaying = true;\n setAdPlayingFlag(true);\n if (adVideoElement) {\n adVideoElement.volume = Math.max(0, Math.min(1, originalVolume));\n adVideoElement.muted = originalMutedState;\n console.log(\n `[HlsAdPlayer] Set ad video volume to ${adVideoElement.volume}, muted: ${adVideoElement.muted}, originalMutedState: ${originalMutedState}, contentVolume: ${contentVolume}`\n );\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n emit(\"content_pause\");\n loadCurrentAdMedia();\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error playing ad:\", error);\n handleAdError();\n return Promise.reject(error);\n }\n },\n pause() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && !adVideoElement.paused) {\n adVideoElement.pause();\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error pausing ad:\", error);\n }\n },\n resume() {\n if (!adPlaying || !adVideoElement) {\n return;\n }\n try {\n if (adVideoElement && adVideoElement.paused) {\n adVideoElement.play().catch(() => {\n });\n }\n } catch (error) {\n console.warn(\"[HlsAdPlayer] Error resuming ad:\", error);\n }\n },\n async stop() {\n console.log(\"[HlsAdPlayer] Stopping ad\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n clearStallWatchdog();\n adPlaying = false;\n setAdPlayingFlag(false);\n const previousMutedState = contentVideo.muted;\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n console.log(\n `[HlsAdPlayer] Restored mute state on stop: ${previousMutedState} -> ${originalMutedState}, volume: ${contentVideo.volume}`\n );\n releaseAdDecoder();\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n if (options?.continueLiveStreamDuringAds) {\n if (contentVideo.paused) {\n console.log(\"[HlsAdPlayer] Content video paused in live mode, resuming playback on stop\");\n contentVideo.play().catch((error) => {\n console.error(\"[HlsAdPlayer] Error resuming content playback in live mode on stop:\", error);\n });\n }\n }\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n },\n destroy() {\n console.log(\"[HlsAdPlayer] Destroying\");\n settleViewability();\n fireNotUsedForUnplayedAds();\n destroyed = true;\n clearStallWatchdog();\n for (const timeoutId of pendingTimeouts) {\n clearTimeout(timeoutId);\n }\n pendingTimeouts = [];\n adPlaying = false;\n setAdPlayingFlag(false);\n contentVideo.muted = originalMutedState;\n contentVideo.volume = Math.max(0, Math.min(1, originalVolume));\n teardownAdEventListeners();\n detachContainerHandlers();\n releaseAdDecoder();\n currentAd = void 0;\n currentAdMediaFile = void 0;\n podAds = [];\n podIndex = 0;\n listeners.clear();\n preloadedAds.clear();\n preloadingAds.clear();\n },\n isAdPlaying() {\n return adPlaying;\n },\n resize(width, height) {\n console.log(`[HlsAdPlayer] Resizing to ${width}x${height}`);\n if (adContainerEl) {\n adContainerEl.style.width = `${width}px`;\n adContainerEl.style.height = `${height}px`;\n }\n if (adVideoElement) {\n adVideoElement.style.width = `${width}px`;\n adVideoElement.style.height = `${height}px`;\n }\n },\n on(event, listener) {\n if (!listeners.has(event)) listeners.set(event, /* @__PURE__ */ new Set());\n listeners.get(event).add(listener);\n },\n off(event, listener) {\n listeners.get(event)?.delete(listener);\n },\n updateOriginalMutedState(muted, volume) {\n const nextVolume = typeof volume === \"number\" && !Number.isNaN(volume) ? Math.max(0, Math.min(1, volume)) : originalVolume;\n console.log(\n `[HlsAdPlayer] updateOriginalMutedState called: { muted: ${originalMutedState} -> ${muted}, volume: ${originalVolume} -> ${nextVolume} }`\n );\n originalMutedState = muted;\n originalVolume = nextVolume;\n },\n getOriginalMutedState() {\n return originalMutedState;\n },\n getOriginalVolume() {\n return originalVolume;\n },\n setAdVolume(volume) {\n if (adVideoElement && adPlaying) {\n const clamped = Math.max(0, Math.min(1, volume));\n adVideoElement.volume = clamped;\n adVideoElement.muted = clamped === 0;\n }\n },\n getAdVolume() {\n if (adVideoElement && adPlaying) {\n return adVideoElement.volume;\n }\n return 1;\n },\n showPlaceholder() {\n contentVideo.style.opacity = \"0\";\n contentVideo.style.visibility = \"hidden\";\n if (!adContainerEl) {\n const container = document.createElement(\"div\");\n container.style.position = \"absolute\";\n container.style.left = \"0\";\n container.style.top = \"0\";\n container.style.right = \"0\";\n container.style.bottom = \"0\";\n container.style.display = \"none\";\n container.style.alignItems = \"center\";\n container.style.justifyContent = \"center\";\n container.style.pointerEvents = \"none\";\n container.style.zIndex = \"10\";\n container.style.backgroundColor = \"#000\";\n contentVideo.parentElement?.appendChild(container);\n adContainerEl = container;\n }\n if (adContainerEl) {\n adContainerEl.style.display = \"flex\";\n adContainerEl.style.pointerEvents = \"auto\";\n }\n },\n hidePlaceholder() {\n if (adContainerEl && !adPlaying) {\n adContainerEl.style.display = \"none\";\n adContainerEl.style.pointerEvents = \"none\";\n }\n if (!adPlaying) {\n contentVideo.style.visibility = \"visible\";\n contentVideo.style.opacity = \"1\";\n }\n },\n getLoadedAdDuration() {\n return currentAd?.duration;\n },\n getLoadedAdId() {\n return currentAd?.id;\n },\n getPodAdCount() {\n return podAds.length;\n },\n getPodTotalDurationMs() {\n return podAds.reduce(\n (total, ad) => total + (ad.duration > 0 ? ad.duration * 1e3 : 0),\n 0\n );\n }\n };\n}\n\n// src/utils/devUrl.ts\nvar PRIVATE_HOST_PATTERNS = [\n /^localhost$/i,\n /^127\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^0\\.0\\.0\\.0$/,\n /^::1$/,\n /^10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,\n /^192\\.168\\.\\d{1,3}\\.\\d{1,3}$/,\n /^172\\.(1[6-9]|2\\d|3[0-1])\\.\\d{1,3}\\.\\d{1,3}$/\n];\nfunction isLocalDevHost(hostname) {\n const host = hostname.replace(/^\\[/, \"\").replace(/\\]$/, \"\").toLowerCase();\n if (!host) return false;\n if (host.endsWith(\".local\") || host.endsWith(\".localhost\")) return true;\n return PRIVATE_HOST_PATTERNS.some((pattern) => pattern.test(host));\n}\nfunction toDevSafeUrl(rawUrl) {\n if (!rawUrl) return rawUrl ?? \"\";\n let url;\n try {\n url = new URL(rawUrl);\n } catch {\n return rawUrl;\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n return rawUrl;\n }\n if (!isLocalDevHost(url.hostname)) {\n return rawUrl;\n }\n const cleanPath = url.pathname.replace(/\\/{2,}/g, \"/\") || \"/index.html\";\n return `file://${cleanPath}`;\n}\n\n// src/sdk/pal.ts\nvar PAL_SDK_URL = \"https://imasdk.googleapis.com/pal/sdkloader/pal.js\";\nvar _nonceLoader;\nvar _nonceLoaderAllowStorage;\nvar _palLoadPromise;\nfunction loadPalSdk() {\n if (typeof window !== \"undefined\" && window.goog?.pal) {\n return Promise.resolve();\n }\n if (_palLoadPromise) return _palLoadPromise;\n _palLoadPromise = new Promise((resolve, reject) => {\n const existing = document.querySelector(\n 'script[data-pal=\"true\"]'\n );\n if (existing) {\n if (window.goog?.pal) {\n resolve();\n return;\n }\n const timeout = setTimeout(\n () => reject(new Error(\"PAL SDK load timeout\")),\n 1e4\n );\n existing.addEventListener(\"load\", () => {\n clearTimeout(timeout);\n resolve();\n });\n existing.addEventListener(\"error\", () => {\n clearTimeout(timeout);\n reject(new Error(\"PAL SDK load failed\"));\n });\n return;\n }\n const script = document.createElement(\"script\");\n script.src = PAL_SDK_URL;\n script.async = true;\n script.setAttribute(\"data-pal\", \"true\");\n script.onload = () => resolve();\n script.onerror = () => reject(new Error(\"PAL SDK load failed\"));\n document.head.appendChild(script);\n });\n return _palLoadPromise;\n}\nfunction getOrCreateNonceLoader(allowStorage) {\n if (_nonceLoader && _nonceLoaderAllowStorage === allowStorage) {\n return _nonceLoader;\n }\n const goog = window.goog;\n const consentSettings = new goog.pal.ConsentSettings();\n consentSettings.allowStorage = allowStorage;\n _nonceLoader = new goog.pal.NonceLoader(consentSettings);\n _nonceLoaderAllowStorage = allowStorage;\n return _nonceLoader;\n}\nfunction createPalNonceManager() {\n let currentNonce = \"\";\n let currentNonceManager;\n return {\n async generateNonce(options = {}) {\n try {\n await loadPalSdk();\n const loader = getOrCreateNonceLoader(options.allowStorage ?? true);\n const goog = window.goog;\n const request = new goog.pal.NonceRequest();\n request.adWillAutoPlay = options.adWillAutoPlay ?? true;\n request.adWillPlayMuted = options.adWillPlayMuted ?? false;\n request.playerVolume = options.playerVolume ?? (request.adWillPlayMuted ? 0 : 1);\n request.continuousPlayback = options.continuousPlayback ?? true;\n request.descriptionUrl = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.iconsSupported = true;\n request.playerType = \"StormcloudVideoPlayer\";\n request.playerVersion = \"1.0\";\n request.supportedApiFrameworks = \"2,7,9\";\n request.url = toDevSafeUrl(\n options.descriptionUrl || (typeof window !== \"undefined\" ? window.location.href : \"\")\n );\n request.videoWidth = options.videoWidth || 640;\n request.videoHeight = options.videoHeight || 480;\n if (options.ppid) request.ppid = options.ppid;\n if (options.sessionId) request.sessionId = options.sessionId;\n console.log(\n \"[PAL] NonceRequest before generateNonce:\",\n JSON.stringify({\n adWillAutoPlay: request.adWillAutoPlay,\n adWillPlayMuted: request.adWillPlayMuted,\n playerVolume: request.playerVolume,\n continuousPlayback: request.continuousPlayback,\n descriptionUrl: request.descriptionUrl,\n iconsSupported: request.iconsSupported,\n playerType: request.playerType,\n playerVersion: request.playerVersion,\n supportedApiFrameworks: request.supportedApiFrameworks,\n url: request.url,\n videoWidth: request.videoWidth,\n videoHeight: request.videoHeight,\n ppid: request.ppid,\n sessionId: request.sessionId\n }, null, 2)\n );\n const manager = await loader.loadNonceManager(request);\n currentNonceManager = manager;\n currentNonce = manager.getNonce();\n console.log(\"[PAL] Nonce generated successfully\");\n return currentNonce;\n } catch (error) {\n console.warn(\"[PAL] Failed to generate nonce:\", error);\n currentNonce = \"\";\n currentNonceManager = void 0;\n return \"\";\n }\n },\n getCurrentNonce() {\n return currentNonce;\n },\n injectNonce(vastTagUrl) {\n if (!currentNonce || !vastTagUrl) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n url.searchParams.delete(\"paln\");\n url.searchParams.set(\"givn\", currentNonce);\n return url.toString();\n } catch {\n let base = vastTagUrl.replace(/([?&])paln=[^&]*/g, \"\").replace(/[?&]$/, \"\");\n const sep = base.includes(\"?\") ? \"&\" : \"?\";\n return `${base}${sep}givn=${encodeURIComponent(currentNonce)}`;\n }\n },\n sendPlaybackStart() {\n try {\n currentNonceManager?.sendPlaybackStart();\n } catch {\n }\n },\n sendPlaybackEnd() {\n try {\n currentNonceManager?.sendPlaybackEnd();\n } catch {\n }\n },\n sendAdClick() {\n try {\n currentNonceManager?.sendAdClick();\n } catch {\n }\n },\n sendAdTouch(event) {\n try {\n currentNonceManager?.sendAdTouch(event);\n } catch {\n }\n },\n reset() {\n currentNonce = \"\";\n currentNonceManager = void 0;\n }\n };\n}\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\nfunction applyTrackingIngestConfig(overrides) {\n Object.assign(trackingIngestConfig, overrides);\n}\nfunction configureTrackingIngest(overrides) {\n applyTrackingIngestConfig(overrides);\n}\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/vastEnvironmentSignals.ts\nvar CTV_SESSION_STORAGE_KEY = \"stormcloud.ctv.sid\";\nvar WEB_SESSION_STORAGE_KEY = \"stormcloud.web.sid\";\nvar inMemoryWebSessionId;\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar ANDROID_ID_TYPES = /* @__PURE__ */ new Set([\"aaid\", \"adid\"]);\nfunction resolveVastEnvironmentSignals(isCtv) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const realDeviceId = bridgeSignals.deviceId || (isCtv ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n let deviceId = realDeviceId;\n let deviceIdType = bridgeSignals.deviceIdType || readStoredString(\"deviceIdType\") || readStoredString(\"idtype\") || platformDevice.deviceIdType || inferDeviceIdType();\n const platformLat = bridgeSignals.deviceId ? bridgeSignals.limitAdTracking : platformDevice.limitAdTracking;\n let limitAdTracking = deviceId != null ? platformLat ?? readStoredLimitAdTracking() ?? false : void 0;\n if (!deviceId && isCtv) {\n const dpid = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (dpid) {\n deviceId = dpid;\n deviceIdType = \"dpid\";\n limitAdTracking = platformLat ?? readStoredLimitAdTracking() ?? false;\n }\n }\n const deviceTypeHint = resolveDeviceTypeHint(isCtv);\n if (isCtv) {\n return {\n isCtv: true,\n sessionId: getOrCreateCtvSessionId(),\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n }\n const webSessionId = getOrCreateWebSessionId();\n return {\n isCtv: false,\n ...webSessionId ? { sessionId: webSessionId } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {},\n deviceTypeHint\n };\n}\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar SET_TOP_BOX_UA = /LGSTB|\\bSTB\\b|STB\\d|Set-?Top|SetTopBox|TV ?Box|Kaon|Humax|Arris|Technicolor|Sagemcom|Infomir|MAG\\d{3}|KreaTV|Amino|Formuler|Dune ?HD|TiVo|MiBOX|Mi Box|SHIELD Android TV|\\bAFT[A-Z]|Roku|AppleTV|Apple TV|CrKey/i;\nvar GAME_CONSOLE_UA = /PlayStation|Xbox|Nintendo/i;\nvar CONNECTED_TV_UA = /Web0S|webOS|Tizen|SMART-TV|SmartTV|NetCast|BRAVIA|HbbTV|VIDAA|Hisense|Philips|Viera|AQUOS|Android TV|Google TV|\\bTV\\b/i;\nvar FEATURE_PHONE_UA = /KAIOS|MIDP|J2ME|Series40|Opera Mini/i;\nfunction resolveDeviceTypeHint(isCtv) {\n const override = readDeviceTypeHintOverride(isCtv);\n if (override != null) return override;\n return inferDeviceTypeHint(isCtv);\n}\nfunction inferDeviceTypeHint(isCtv) {\n const fallback = isCtv ? DEVICE_TYPE_HINT.CONNECTED_TV : DEVICE_TYPE_HINT.DESKTOP;\n if (typeof navigator === \"undefined\") return fallback;\n const ua = navigator.userAgent || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n if (SET_TOP_BOX_UA.test(ua)) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n if (GAME_CONSOLE_UA.test(ua)) return DEVICE_TYPE_HINT.GAME_CONSOLE;\n if (CONNECTED_TV_UA.test(ua) && !/Mobile/i.test(ua)) {\n return DEVICE_TYPE_HINT.CONNECTED_TV;\n }\n if (FEATURE_PHONE_UA.test(ua)) return DEVICE_TYPE_HINT.FEATURE_PHONE;\n if (/iPad/i.test(ua) || /Macintosh/i.test(ua) && maxTouchPoints > 1) {\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/iPhone|iPod/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (/Android/i.test(ua)) {\n if (/Mobile/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n if (maxTouchPoints === 0) return DEVICE_TYPE_HINT.SET_TOP_BOX;\n return DEVICE_TYPE_HINT.TABLET;\n }\n if (/Mobile|Windows Phone|BlackBerry/i.test(ua)) return DEVICE_TYPE_HINT.SMARTPHONE;\n return fallback;\n}\nfunction readDeviceTypeHintOverride(isCtv) {\n if (typeof window === \"undefined\") return void 0;\n const keys = [\"dth\", \"deviceTypeHint\"];\n const fromGlobal = normalizeDeviceTypeHint(window.__STORMCLOUD_DTH__);\n if (fromGlobal != null) return fromGlobal;\n for (const source of getNativeBridgeSources()) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeDeviceTypeHint(\n typeof value === \"function\" ? safeCall(value, source) : value\n );\n if (normalized != null) return normalized;\n }\n }\n if (!isCtv) return void 0;\n for (const key of [\"stormcloud.dth\", \"dth\"]) {\n const normalized = normalizeDeviceTypeHint(readStoredString(key));\n if (normalized != null) return normalized;\n }\n return void 0;\n}\nfunction normalizeDeviceTypeHint(value) {\n if (typeof value === \"number\") {\n return Number.isInteger(value) && value >= 1 && value <= 7 ? value : void 0;\n }\n if (typeof value !== \"string\") return void 0;\n const trimmed = value.trim();\n if (/^[1-7]$/.test(trimmed)) return parseInt(trimmed, 10);\n return DEVICE_TYPE_HINT_ALIASES[trimmed.toLowerCase().replace(/[\\s_-]/g, \"\")];\n}\nfunction safeCall(fn, thisArg) {\n try {\n return fn.call(thisArg);\n } catch {\n return void 0;\n }\n}\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction isEquivalentDeviceIdType(tagType, runtimeType) {\n if (!tagType || !runtimeType) return false;\n const tag = tagType.toLowerCase();\n const runtime = runtimeType.toLowerCase();\n if (tag === runtime) return true;\n return ANDROID_ID_TYPES.has(tag) && ANDROID_ID_TYPES.has(runtime);\n}\nfunction resolveNativeDeviceId(includeStored = true) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction getOrCreateCtvSessionId() {\n const existing = readPersistentId(CTV_SESSION_STORAGE_KEY);\n if (existing) {\n writePersistentId(CTV_SESSION_STORAGE_KEY, existing);\n return existing;\n }\n const sessionId = createUuid();\n writePersistentId(CTV_SESSION_STORAGE_KEY, sessionId);\n return sessionId;\n}\nfunction getOrCreateWebSessionId() {\n if (typeof window === \"undefined\") return void 0;\n try {\n const existing = window.sessionStorage?.getItem(WEB_SESSION_STORAGE_KEY);\n if (existing && !isMacroPlaceholder(existing)) return existing;\n } catch {\n }\n const sessionId = inMemoryWebSessionId || createUuid();\n inMemoryWebSessionId = sessionId;\n try {\n window.sessionStorage?.setItem(WEB_SESSION_STORAGE_KEY, sessionId);\n } catch {\n }\n return sessionId;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction readStoredLimitAdTracking() {\n return normalizeBoolean(\n readStoredString(\"limitAdTracking\") || readStoredString(\"limitedAdTracking\") || readStoredString(\"is_lat\")\n );\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendInitialTracking(licenseKey, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n adLoaded: false,\n adDetect: false\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending initial tracking data:\",\n error\n );\n }\n}\nasync function sendAdDetectTracking(licenseKey, adDetectInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adDetect: true,\n captureAt: adDetectInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad detect tracking:\",\n error\n );\n }\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/utils/polyfills.ts\nfunction polyfillURLSearchParams() {\n if (typeof URLSearchParams !== \"undefined\") {\n return;\n }\n class URLSearchParamsPolyfill {\n constructor(init) {\n this.params = /* @__PURE__ */ new Map();\n if (typeof init === \"string\") {\n this.parseQueryString(init);\n } else if (init instanceof URLSearchParamsPolyfill) {\n init.forEach((value, key) => {\n this.append(key, value);\n });\n }\n }\n parseQueryString(query) {\n const cleanQuery = query.startsWith(\"?\") ? query.slice(1) : query;\n if (!cleanQuery) return;\n cleanQuery.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n const decodedKey = this.safeDecodeURIComponent(key);\n const decodedValue = value ? this.safeDecodeURIComponent(value) : \"\";\n this.append(decodedKey, decodedValue);\n }\n });\n }\n safeDecodeURIComponent(str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, \" \"));\n } catch (e) {\n return str;\n }\n }\n append(name, value) {\n const values = this.params.get(name) || [];\n values.push(String(value));\n this.params.set(name, values);\n }\n delete(name) {\n this.params.delete(name);\n }\n get(name) {\n const values = this.params.get(name);\n return values && values.length > 0 && values[0] !== void 0 ? values[0] : null;\n }\n getAll(name) {\n return this.params.get(name) || [];\n }\n has(name) {\n return this.params.has(name);\n }\n set(name, value) {\n this.params.set(name, [String(value)]);\n }\n forEach(callback) {\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n callback(value, key, this);\n });\n });\n }\n toString() {\n const parts = [];\n this.params.forEach((values, key) => {\n values.forEach((value) => {\n parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);\n });\n });\n return parts.join(\"&\");\n }\n }\n window.URLSearchParams = URLSearchParamsPolyfill;\n}\nfunction polyfillTextEncoder() {\n if (typeof TextEncoder !== \"undefined\") {\n return;\n }\n class TextEncoderPolyfill {\n constructor() {\n this.encoding = \"utf-8\";\n }\n encode(str) {\n const utf8 = [];\n for (let i = 0; i < str.length; i++) {\n let charcode = str.charCodeAt(i);\n if (charcode < 128) {\n utf8.push(charcode);\n } else if (charcode < 2048) {\n utf8.push(192 | charcode >> 6, 128 | charcode & 63);\n } else if (charcode < 55296 || charcode >= 57344) {\n utf8.push(\n 224 | charcode >> 12,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n } else {\n i++;\n charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);\n utf8.push(\n 240 | charcode >> 18,\n 128 | charcode >> 12 & 63,\n 128 | charcode >> 6 & 63,\n 128 | charcode & 63\n );\n }\n }\n return new Uint8Array(utf8);\n }\n }\n window.TextEncoder = TextEncoderPolyfill;\n}\nfunction polyfillPromiseFinally() {\n if (typeof Promise !== \"undefined\" && !Promise.prototype.finally) {\n Promise.prototype.finally = function(callback) {\n const constructor = this.constructor;\n return this.then(\n (value) => constructor.resolve(callback()).then(() => value),\n (reason) => constructor.resolve(callback()).then(() => {\n throw reason;\n })\n );\n };\n }\n}\nfunction polyfillObjectAssign() {\n if (typeof Object.assign !== \"function\") {\n Object.assign = function(target, ...sources) {\n if (target == null) {\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n const to = Object(target);\n for (let i = 0; i < sources.length; i++) {\n const nextSource = sources[i];\n if (nextSource != null) {\n for (const nextKey in nextSource) {\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n}\nfunction polyfillArrayFrom() {\n if (!Array.from) {\n Array.from = function(arrayLike, mapFn, thisArg) {\n const items = Object(arrayLike);\n if (arrayLike == null) {\n throw new TypeError(\"Array.from requires an array-like object\");\n }\n const len = items.length >>> 0;\n const result = new Array(len);\n for (let i = 0; i < len; i++) {\n if (mapFn) {\n result[i] = mapFn.call(thisArg, items[i], i);\n } else {\n result[i] = items[i];\n }\n }\n return result;\n };\n }\n}\nfunction polyfillStringStartsWith() {\n if (!String.prototype.startsWith) {\n String.prototype.startsWith = function(search, pos) {\n pos = !pos || pos < 0 ? 0 : +pos;\n return this.substring(pos, pos + search.length) === search;\n };\n }\n}\nfunction polyfillStringEndsWith() {\n if (!String.prototype.endsWith) {\n String.prototype.endsWith = function(search, length) {\n if (length === void 0 || length > this.length) {\n length = this.length;\n }\n return this.substring(length - search.length, length) === search;\n };\n }\n}\nfunction polyfillStringIncludes() {\n if (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== \"number\") {\n start = 0;\n }\n if (start + search.length > this.length) {\n return false;\n }\n return this.indexOf(search, start) !== -1;\n };\n }\n}\nfunction initializePolyfills() {\n polyfillObjectAssign();\n polyfillArrayFrom();\n polyfillStringStartsWith();\n polyfillStringEndsWith();\n polyfillStringIncludes();\n polyfillURLSearchParams();\n polyfillTextEncoder();\n polyfillPromiseFinally();\n}\n\n// src/utils/vastMacros.ts\nvar UNEXPANDED_MACRO_PATTERN = /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/;\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nvar EXAMPLE_COM_URL = /example\\.com/i;\nvar CTV_UNSUPPORTED_PARAMS = [\n \"tfcd\",\n \"npa\",\n \"min_ad_duration\",\n \"max_ad_duration\",\n \"unviewed_position_start\",\n \"impl\",\n \"vad_type\",\n \"gdpr\",\n \"gdpr_consent\",\n \"us_privacy\"\n];\nvar INLINE_DEVICE_MACRO_REPLACEMENTS = [\n { pattern: /\\[RDID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IFA\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[ADVERTISING[_-]?ID(?:ENTIFIER)?\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[DEVICE[_-]?ID\\]/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\[IDTYPE\\]/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /\\{rdid\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{device[_-]?id\\}/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /\\{idtype\\}/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_IDENTIFIER_PLAIN%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%ADVERTISING_ID_OPT_OUT%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%ADVERTISING_ID_TYPE%%/gi, getValue: (ctx) => ctx.deviceIdType },\n { pattern: /%%ADVERTISING_ID%%/gi, getValue: (ctx) => ctx.deviceId },\n { pattern: /%%LIMIT_AD_TRACKING%%/gi, getValue: (ctx) => ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0 },\n { pattern: /%%SESSION_ID%%/gi, getValue: (ctx) => ctx.sessionId },\n { pattern: /%%CORRELATOR%%/gi, getValue: (ctx) => ctx.correlator }\n];\nfunction isMacroPlaceholder2(value) {\n if (value == null) return true;\n const trimmed = value.trim();\n if (!trimmed) return true;\n if (UNEXPANDED_MACRO_PATTERN.test(trimmed)) return true;\n return /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(trimmed);\n}\nfunction generateCorrelator() {\n if (typeof crypto !== \"undefined\" && crypto.getRandomValues) {\n try {\n const buf = new Uint32Array(2);\n crypto.getRandomValues(buf);\n const value = (buf[0] ?? 0) * 2097152 + ((buf[1] ?? 0) & 2097151);\n if (value > 0) {\n return String(value);\n }\n } catch {\n }\n }\n return String(Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1);\n}\nfunction expandInlineMacroPlaceholders(baseUrl, ctx) {\n let url = baseUrl;\n for (const { pattern, getValue } of INLINE_DEVICE_MACRO_REPLACEMENTS) {\n const value = getValue(ctx);\n if (value != null && value !== \"\") {\n url = url.replace(pattern, encodeURIComponent(value));\n }\n }\n return url;\n}\nfunction applyDeviceIdentityParams(params, ctx) {\n const runtimeId = ctx.deviceId?.trim();\n const runtimeType = ctx.deviceIdType?.trim() || inferDeviceIdType();\n const tagRdid = params.get(\"rdid\");\n const tagType = params.get(\"idtype\");\n const tagLat = params.get(\"is_lat\");\n const latValue = ctx.limitAdTracking != null ? ctx.limitAdTracking ? \"1\" : \"0\" : void 0;\n if (runtimeId) {\n params.set(\"rdid\", runtimeId);\n params.set(\"idtype\", runtimeType || tagType || \"aaid\");\n params.set(\"is_lat\", latValue ?? (isMacroPlaceholder2(tagLat) ? \"0\" : tagLat));\n return;\n }\n if (!ctx.isCtv) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n const tagRdidValid = Boolean(tagRdid && !isMacroPlaceholder2(tagRdid));\n const tagTypeValid = Boolean(tagType && !isMacroPlaceholder2(tagType));\n if (tagRdidValid && tagTypeValid && runtimeType && !isEquivalentDeviceIdType(tagType, runtimeType)) {\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n return;\n }\n if (tagRdidValid) {\n if (isMacroPlaceholder2(tagType) && runtimeType) {\n params.set(\"idtype\", runtimeType);\n }\n if (isMacroPlaceholder2(tagLat)) {\n params.set(\"is_lat\", latValue ?? \"0\");\n }\n return;\n }\n params.delete(\"rdid\");\n params.delete(\"idtype\");\n params.delete(\"is_lat\");\n}\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nfunction applyVastMacros(baseUrl, ctx) {\n const expandedUrl = expandInlineMacroPlaceholders(baseUrl, ctx);\n let url;\n try {\n url = new URL(normalizeVastTagUrl(expandedUrl));\n } catch {\n return replaceCorrelatorFallback(expandedUrl, ctx.correlator);\n }\n const params = url.searchParams;\n removeBrokenAppNameOrphans(params);\n params.set(\"correlator\", ctx.correlator);\n params.set(\"scor\", ctx.streamCorrelator);\n if (ctx.isCtv) {\n for (const key of CTV_UNSUPPORTED_PARAMS) {\n params.delete(key);\n }\n }\n if (ctx.pod != null) {\n params.set(\"pod\", String(ctx.pod));\n }\n params.delete(\"ppos\");\n params.delete(\"lip\");\n if (ctx.podMinDurationMs != null) {\n params.set(\"pmnd\", String(Math.max(0, Math.round(ctx.podMinDurationMs))));\n }\n if (ctx.podMaxDurationMs != null) {\n params.set(\"pmxd\", String(Math.max(0, Math.round(ctx.podMaxDurationMs))));\n }\n if (ctx.podMaxAds != null) {\n params.set(\"pmad\", String(Math.max(1, Math.round(ctx.podMaxAds))));\n }\n const existingUrl = params.get(\"url\") || \"\";\n if (EXAMPLE_COM_URL.test(existingUrl)) {\n params.delete(\"url\");\n params.delete(\"description_url\");\n }\n if (!ctx.isCtv && ctx.pageUrl) {\n if (isMacroPlaceholder2(params.get(\"url\"))) {\n params.set(\"url\", ctx.pageUrl);\n }\n if (isMacroPlaceholder2(params.get(\"description_url\"))) {\n params.set(\"description_url\", params.get(\"url\") || ctx.pageUrl);\n }\n }\n if (!ctx.isCtv) {\n params.delete(\"an\");\n params.delete(\"msid\");\n params.delete(\"sid\");\n }\n if (ctx.adWillPlayMuted != null) {\n params.set(\"vpmute\", ctx.adWillPlayMuted ? \"1\" : \"0\");\n }\n if (ctx.adWillAutoPlay != null) {\n params.set(\"vpa\", ctx.adWillAutoPlay ? \"auto\" : \"click\");\n }\n if (ctx.sessionId) {\n params.set(\"sid\", ctx.sessionId);\n }\n if (ctx.deviceTypeHint != null) {\n params.set(\"dth\", String(ctx.deviceTypeHint));\n } else if (ctx.isCtv) {\n params.set(\"dth\", \"5\");\n }\n applyDeviceIdentityParams(params, ctx);\n if (!ctx.isCtv) {\n const consent = ctx.consent;\n if (consent?.gdpr != null) {\n params.set(\"gdpr\", consent.gdpr);\n }\n if (consent?.gdprConsent != null) {\n params.set(\"gdpr_consent\", consent.gdprConsent);\n }\n if (consent?.usPrivacy != null) {\n params.set(\"us_privacy\", consent.usPrivacy);\n }\n }\n if (ctx.adTest) {\n params.set(\"adtest\", \"on\");\n }\n if (ctx.programTitle) {\n params.set(\"ct_ti\", ctx.programTitle);\n }\n if (ctx.channelName) {\n params.set(\"ct_ch\", ctx.channelName);\n }\n const staleKeys = [];\n params.forEach((value, key) => {\n if (isMacroPlaceholder2(value)) {\n staleKeys.push(key);\n }\n });\n for (const key of staleKeys) {\n params.delete(key);\n }\n removeBrokenAppNameOrphans(params);\n return url.toString();\n}\nfunction replaceCorrelatorFallback(baseUrl, correlator) {\n const correlatorRegex = /([?&])correlator=([^&]*)/;\n if (correlatorRegex.test(baseUrl)) {\n return baseUrl.replace(correlatorRegex, `$1correlator=${correlator}`);\n }\n const sep = baseUrl.includes(\"?\") ? \"&\" : \"?\";\n return `${baseUrl}${sep}correlator=${correlator}`;\n}\nfunction fetchConsentSignals(timeoutMs = 1500) {\n const signals = {};\n if (typeof window === \"undefined\") {\n return Promise.resolve(signals);\n }\n const tasks = [];\n const tcfApi = window.__tcfapi;\n if (typeof tcfApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n let settled = false;\n try {\n tcfApi(\"addEventListener\", 2, (tcData, success) => {\n if (settled) return;\n if (success && tcData && (tcData.eventStatus === \"tcloaded\" || tcData.eventStatus === \"useractioncomplete\")) {\n settled = true;\n signals.gdpr = tcData.gdprApplies ? \"1\" : \"0\";\n signals.storageAllowed = tcData.gdprApplies ? tcData.purpose?.consents?.[1] === true : true;\n if (typeof tcData.tcString === \"string\" && tcData.tcString) {\n signals.gdprConsent = tcData.tcString;\n }\n try {\n tcfApi(\"removeEventListener\", 2, () => {\n }, tcData.listenerId);\n } catch {\n }\n resolve();\n }\n });\n } catch {\n resolve();\n }\n setTimeout(() => {\n if (!settled) {\n settled = true;\n resolve();\n }\n }, timeoutMs);\n })\n );\n }\n const uspApi = window.__uspapi;\n if (typeof uspApi === \"function\") {\n tasks.push(\n new Promise((resolve) => {\n try {\n uspApi(\"getUSPData\", 1, (data, success) => {\n if (success && typeof data?.uspString === \"string\" && data.uspString) {\n signals.usPrivacy = data.uspString;\n }\n resolve();\n });\n } catch {\n resolve();\n }\n setTimeout(resolve, timeoutMs);\n })\n );\n }\n if (tasks.length === 0) {\n return Promise.resolve(signals);\n }\n return Promise.all(tasks).then(() => signals);\n}\n\n// src/player/Scte35Parser.ts\nfunction parseCueOutDuration(value) {\n const num = parseFloat(value.trim());\n if (!Number.isNaN(num)) return num;\n const match = value.match(/(?:^|[,\\s])DURATION\\s*=\\s*([0-9.]+)/i) || value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (match && match[1] != null) {\n const dStr = match[1];\n const d = parseFloat(dStr);\n return Number.isNaN(d) ? void 0 : d;\n }\n return void 0;\n}\nfunction parseCueOutCont(value) {\n const res = {};\n const elapsedMatch = value.match(/Elapsed\\s*=\\s*([0-9.]+)/i);\n const durationMatch = value.match(/Duration\\s*=\\s*([0-9.]+)/i);\n if (elapsedMatch && elapsedMatch[1] != null) {\n const e = parseFloat(elapsedMatch[1]);\n if (!Number.isNaN(e)) res.elapsed = e;\n }\n if (durationMatch && durationMatch[1] != null) {\n const d = parseFloat(durationMatch[1]);\n if (!Number.isNaN(d)) res.duration = d;\n }\n if (!(\"elapsed\" in res) || !(\"duration\" in res)) {\n const slashMatch = value.match(/([0-9.]+)\\s*\\/\\s*([0-9.]+)/);\n if (slashMatch && slashMatch[1] && slashMatch[2]) {\n const elapsed = parseFloat(slashMatch[1]);\n const duration = parseFloat(slashMatch[2]);\n if (!Number.isNaN(elapsed) && !(\"elapsed\" in res)) res.elapsed = elapsed;\n if (!Number.isNaN(duration) && !(\"duration\" in res)) res.duration = duration;\n }\n }\n if (\"elapsed\" in res || \"duration\" in res) return res;\n return void 0;\n}\nfunction parseAttributeList(value) {\n const attrs = {};\n const regex = /([A-Z0-9-]+)=((\"[^\"]*\")|([^\",]*))(?:,|$)/gi;\n let match;\n while ((match = regex.exec(value)) !== null) {\n const key = match[1] ?? \"\";\n let rawVal = match[3] ?? match[4] ?? \"\";\n if (rawVal.startsWith('\"') && rawVal.endsWith('\"')) {\n rawVal = rawVal.slice(1, -1);\n }\n if (key) {\n attrs[key] = rawVal;\n }\n }\n return attrs;\n}\nfunction toNumber(val) {\n if (val == null) return void 0;\n const n = typeof val === \"string\" ? parseFloat(val) : Number(val);\n return Number.isNaN(n) ? void 0 : n;\n}\nfunction isManifestBasedMarker(marker) {\n const raw = marker.raw;\n if (!raw) return false;\n if (raw.tag) {\n const tag = String(raw.tag);\n return tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-CUE-IN\") || tag.includes(\"EXT-X-DATERANGE\");\n }\n if (raw.id3) return false;\n if (raw.splice_command_type) return false;\n return false;\n}\nfunction decodeId3ValueToText(value) {\n try {\n if (typeof value === \"string\") return value;\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const text = decoder.decode(value);\n if (text && /[\\x20-\\x7E]/.test(text)) return text;\n let out = \"\";\n for (let i = 0; i < value.length; i++)\n out += String.fromCharCode(value[i]);\n return out;\n } catch {\n return void 0;\n }\n}\nfunction getFragmentStartSeconds(frag) {\n const candidates = [frag?.start, frag?.startPTS];\n for (const candidate of candidates) {\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n }\n return void 0;\n}\nfunction parseScte35FromId3(tag) {\n const text = decodeId3ValueToText(tag.value);\n if (!text) return void 0;\n const cueOutMatch = text.match(/EXT-X-CUE-OUT(?::([^\\r\\n]*))?/i) || text.match(/CUE-OUT(?::([^\\r\\n]*))?/i);\n if (cueOutMatch) {\n const arg = (cueOutMatch[1] ?? \"\").trim();\n const dur = parseCueOutDuration(arg);\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...dur !== void 0 ? { durationSeconds: dur } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueOutContMatch = text.match(/EXT-X-CUE-OUT-CONT:([^\\r\\n]*)/i);\n if (cueOutContMatch) {\n const arg = (cueOutContMatch[1] ?? \"\").trim();\n const cont = parseCueOutCont(arg);\n const marker = {\n type: \"progress\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...cont?.duration !== void 0 ? { durationSeconds: cont.duration } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const cueInMatch = text.match(/EXT-X-CUE-IN\\b/i) || text.match(/CUE-IN\\b/i);\n if (cueInMatch) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n const daterangeMatch = text.match(/EXT-X-DATERANGE:([^\\r\\n]*)/i);\n if (daterangeMatch) {\n const attrs = parseAttributeList(daterangeMatch[1] ?? \"\");\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n if (hasScteIn) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text, attrs }\n };\n return marker;\n }\n }\n if (/SCTE35-OUT/i.test(text)) {\n const marker = {\n type: \"start\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (/SCTE35-IN/i.test(text)) {\n const marker = {\n type: \"end\",\n ...tag.ptsSeconds !== void 0 ? { ptsSeconds: tag.ptsSeconds } : {},\n raw: { id3: text }\n };\n return marker;\n }\n if (tag.value instanceof Uint8Array) {\n const bin = parseScte35Binary(tag.value);\n if (bin) return bin;\n }\n return void 0;\n}\nfunction normalizeFragmentPayload(payload) {\n if (payload instanceof Uint8Array) {\n return payload;\n }\n if (payload instanceof ArrayBuffer) {\n return new Uint8Array(payload);\n }\n if (ArrayBuffer.isView(payload)) {\n const view = payload;\n return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n }\n return void 0;\n}\nfunction detectTsPacketFormat(data) {\n const packetSizes = [188, 192, 204];\n for (const packetSize of packetSizes) {\n const tsPayloadOffset = packetSize === 192 ? 4 : 0;\n for (let offset = 0; offset < packetSize; offset++) {\n let matchedPackets = 0;\n for (let packetStart = offset; packetStart + tsPayloadOffset < data.length && matchedPackets < 5; packetStart += packetSize) {\n if (data[packetStart + tsPayloadOffset] !== 71) {\n break;\n }\n matchedPackets++;\n }\n if (matchedPackets >= 2) {\n return { offset, packetSize, tsPayloadOffset };\n }\n }\n }\n return void 0;\n}\nfunction getPsiSectionStart(payload, payloadUnitStart) {\n if (!payloadUnitStart) {\n return void 0;\n }\n const pointerField = payload[0];\n if (pointerField == null) {\n return void 0;\n }\n const sectionStart = 1 + pointerField;\n return sectionStart < payload.length ? sectionStart : void 0;\n}\nfunction getPsiSectionLength(data, offset) {\n return ((data[offset + 1] ?? 0) & 15) << 8 | (data[offset + 2] ?? 0);\n}\nfunction parsePatSection(payload, payloadUnitStart, pmtPids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 8 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 0) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n for (let offset = sectionStart + 8; offset + 4 <= sectionEnd - 4; offset += 4) {\n const programNumber = (payload[offset] ?? 0) << 8 | (payload[offset + 1] ?? 0);\n const pid = ((payload[offset + 2] ?? 0) & 31) << 8 | (payload[offset + 3] ?? 0);\n if (programNumber !== 0) {\n pmtPids.add(pid);\n }\n }\n}\nfunction descriptorsIdentifyScte35(data, start, end) {\n let offset = start;\n while (offset + 2 <= end) {\n const tag = data[offset] ?? 0;\n const length = data[offset + 1] ?? 0;\n const descriptorStart = offset + 2;\n const descriptorEnd = descriptorStart + length;\n if (descriptorEnd > end) {\n return false;\n }\n const registration = length >= 4 ? String.fromCharCode(\n data[descriptorStart] ?? 0,\n data[descriptorStart + 1] ?? 0,\n data[descriptorStart + 2] ?? 0,\n data[descriptorStart + 3] ?? 0\n ) : \"\";\n if (tag === 138 || registration === \"CUEI\" || registration === \"SCTE\") {\n return true;\n }\n offset = descriptorEnd;\n }\n return false;\n}\nfunction parsePmtSection(payload, payloadUnitStart, tsScte35Pids) {\n const sectionStart = getPsiSectionStart(payload, payloadUnitStart);\n if (sectionStart == null || sectionStart + 12 >= payload.length) {\n return;\n }\n if (payload[sectionStart] !== 2) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, sectionStart);\n const sectionEnd = Math.min(\n payload.length,\n sectionStart + 3 + sectionLength\n );\n const programInfoLength = ((payload[sectionStart + 10] ?? 0) & 15) << 8 | (payload[sectionStart + 11] ?? 0);\n let offset = sectionStart + 12 + programInfoLength;\n while (offset + 5 <= sectionEnd - 4) {\n const streamType = payload[offset] ?? 0;\n const elementaryPid = ((payload[offset + 1] ?? 0) & 31) << 8 | (payload[offset + 2] ?? 0);\n const esInfoLength = ((payload[offset + 3] ?? 0) & 15) << 8 | (payload[offset + 4] ?? 0);\n const descriptorStart = offset + 5;\n const descriptorEnd = Math.min(descriptorStart + esInfoLength, sectionEnd - 4);\n if (streamType === 134 || streamType === 6 && descriptorsIdentifyScte35(payload, descriptorStart, descriptorEnd)) {\n tsScte35Pids.add(elementaryPid);\n }\n offset = descriptorStart + esInfoLength;\n }\n}\nfunction hasProcessedTsScte35Section(section, processedSections) {\n let checksum = 0;\n for (let i = 0; i < section.length; i++) {\n checksum = checksum * 31 + (section[i] ?? 0) >>> 0;\n }\n const key = `${section.length}:${checksum}`;\n if (processedSections.has(key)) {\n return true;\n }\n processedSections.add(key);\n if (processedSections.size > 200) {\n const firstKey = processedSections.values().next().value;\n if (firstKey) {\n processedSections.delete(firstKey);\n }\n }\n return false;\n}\nfunction addScte35SectionMarker(section, markers, processedSections) {\n if (section[0] !== 252 || hasProcessedTsScte35Section(section, processedSections)) {\n return;\n }\n const marker = parseScte35Binary(section);\n if (!marker) {\n return;\n }\n marker.raw = {\n ...typeof marker.raw === \"object\" && marker.raw ? marker.raw : {},\n source: \"ts-packet\"\n };\n markers.push(marker);\n}\nfunction appendScte35Bytes(pid, bytes, assemblers, markers, processedSections) {\n const assembler = assemblers.get(pid);\n if (!assembler) {\n return;\n }\n for (let i = 0; i < bytes.length && assembler.bytes.length < assembler.expectedLength; i++) {\n assembler.bytes.push(bytes[i] ?? 0);\n }\n if (assembler.bytes.length >= assembler.expectedLength) {\n assemblers.delete(pid);\n addScte35SectionMarker(new Uint8Array(assembler.bytes), markers, processedSections);\n }\n}\nfunction collectScte35SectionsFromPayload(pid, payload, payloadUnitStart, assemblers, markers, processedSections) {\n if (payload.length === 0) {\n return;\n }\n let offset = 0;\n if (payloadUnitStart) {\n const pointerField = payload[0] ?? 0;\n const previousAssembler = assemblers.get(pid);\n if (previousAssembler && pointerField > 0) {\n appendScte35Bytes(\n pid,\n payload.subarray(1, Math.min(1 + pointerField, payload.length)),\n assemblers,\n markers,\n processedSections\n );\n }\n assemblers.delete(pid);\n offset = 1 + pointerField;\n } else {\n appendScte35Bytes(pid, payload, assemblers, markers, processedSections);\n return;\n }\n while (offset + 3 <= payload.length) {\n const tableId = payload[offset];\n if (tableId == null || tableId === 255) {\n return;\n }\n const sectionLength = getPsiSectionLength(payload, offset);\n const totalLength = 3 + sectionLength;\n if (sectionLength <= 0 || totalLength <= 3) {\n return;\n }\n if (offset + totalLength <= payload.length) {\n addScte35SectionMarker(\n payload.subarray(offset, offset + totalLength),\n markers,\n processedSections\n );\n offset += totalLength;\n } else {\n assemblers.set(pid, {\n bytes: Array.from(payload.subarray(offset)),\n expectedLength: totalLength\n });\n return;\n }\n }\n}\nfunction parseScte35FromTsPackets(data, tsScte35Pids, pmtPids, processedSections) {\n const packetInfo = detectTsPacketFormat(data);\n if (!packetInfo) {\n return [];\n }\n const markers = [];\n const sectionAssemblers = /* @__PURE__ */ new Map();\n for (let packetStart = packetInfo.offset; packetStart + packetInfo.packetSize <= data.length; packetStart += packetInfo.packetSize) {\n const tsStart = packetStart + packetInfo.tsPayloadOffset;\n if (data[tsStart] !== 71) {\n continue;\n }\n const secondByte = data[tsStart + 1];\n const thirdByte = data[tsStart + 2];\n const fourthByte = data[tsStart + 3];\n if (secondByte == null || thirdByte == null || fourthByte == null || (secondByte & 128) !== 0) {\n continue;\n }\n const payloadUnitStart = (secondByte & 64) !== 0;\n const pid = (secondByte & 31) << 8 | thirdByte;\n const adaptationFieldControl = fourthByte >> 4 & 3;\n const hasPayload = adaptationFieldControl === 1 || adaptationFieldControl === 3;\n if (!hasPayload) {\n continue;\n }\n let payloadStart = tsStart + 4;\n if (adaptationFieldControl === 3) {\n const adaptationLength = data[payloadStart];\n if (adaptationLength == null) {\n continue;\n }\n payloadStart += 1 + adaptationLength;\n }\n const payloadEnd = Math.min(tsStart + 188, data.length);\n if (payloadStart >= payloadEnd || payloadStart >= data.length) {\n continue;\n }\n const payload = data.subarray(payloadStart, payloadEnd);\n if (pid === 0) {\n parsePatSection(payload, payloadUnitStart, pmtPids);\n } else if (pmtPids.has(pid)) {\n parsePmtSection(payload, payloadUnitStart, tsScte35Pids);\n } else if (tsScte35Pids.has(pid)) {\n collectScte35SectionsFromPayload(\n pid,\n payload,\n payloadUnitStart,\n sectionAssemblers,\n markers,\n processedSections\n );\n }\n }\n return markers;\n}\nvar BitReader = class {\n constructor(buf) {\n this.buf = buf;\n this.bytePos = 0;\n this.bitPos = 0;\n }\n readBits(numBits) {\n let result = 0;\n while (numBits > 0) {\n if (this.bytePos >= this.buf.length) return result;\n const remainingInByte = 8 - this.bitPos;\n const toRead = Math.min(numBits, remainingInByte);\n const currentByte = this.buf[this.bytePos];\n const shift = remainingInByte - toRead;\n const mask = (1 << toRead) - 1 & 255;\n const bits = currentByte >> shift & mask;\n result = result << toRead | bits;\n this.bitPos += toRead;\n if (this.bitPos >= 8) {\n this.bitPos = 0;\n this.bytePos += 1;\n }\n numBits -= toRead;\n }\n return result >>> 0;\n }\n skipBits(n) {\n this.readBits(n);\n }\n get bytePosition() {\n return this.bitPos === 0 ? this.bytePos : this.bytePos + 1;\n }\n};\nfunction readSpliceTime(r, ptsAdjustmentTicks) {\n const timeSpecifiedFlag = r.readBits(1) === 1;\n if (!timeSpecifiedFlag) {\n r.readBits(7);\n return void 0;\n }\n r.readBits(6);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const ptsTicks = (high * 4294967296 + low + ptsAdjustmentTicks) % 8589934592;\n return ptsTicks / 9e4;\n}\nfunction markerTypeFromSegmentationTypeId(segmentationTypeId) {\n switch (segmentationTypeId) {\n case 16:\n case 34:\n case 48:\n case 50:\n case 52:\n case 54:\n return \"start\";\n case 17:\n case 35:\n case 49:\n case 51:\n case 53:\n case 55:\n return \"end\";\n default:\n return void 0;\n }\n}\nfunction parseScte35SegmentationDescriptor(descriptor) {\n if (descriptor.length < 11) {\n return void 0;\n }\n const identifier = String.fromCharCode(\n descriptor[0] ?? 0,\n descriptor[1] ?? 0,\n descriptor[2] ?? 0,\n descriptor[3] ?? 0\n );\n if (identifier !== \"CUEI\") {\n return void 0;\n }\n const segmentationEventId = (descriptor[4] ?? 0) * 16777216 + ((descriptor[5] ?? 0) << 16) + ((descriptor[6] ?? 0) << 8) + (descriptor[7] ?? 0);\n const cancelIndicator = ((descriptor[8] ?? 0) & 128) !== 0;\n if (cancelIndicator) {\n return void 0;\n }\n const flags = descriptor[9] ?? 0;\n const programSegmentationFlag = (flags & 128) !== 0;\n const segmentationDurationFlag = (flags & 64) !== 0;\n let offset = 10;\n if (!programSegmentationFlag) {\n const componentCount = descriptor[offset] ?? 0;\n offset += 1 + componentCount * 6;\n if (offset > descriptor.length) {\n return void 0;\n }\n }\n let durationSeconds = void 0;\n if (segmentationDurationFlag) {\n if (offset + 5 > descriptor.length) {\n return void 0;\n }\n const durationTicks = (descriptor[offset] ?? 0) * 4294967296 + (descriptor[offset + 1] ?? 0) * 16777216 + ((descriptor[offset + 2] ?? 0) << 16) + ((descriptor[offset + 3] ?? 0) << 8) + (descriptor[offset + 4] ?? 0);\n durationSeconds = durationTicks / 9e4;\n offset += 5;\n }\n if (offset + 2 > descriptor.length) {\n return void 0;\n }\n offset += 1;\n const segmentationUpidLength = descriptor[offset] ?? 0;\n offset += 1 + segmentationUpidLength;\n if (offset >= descriptor.length) {\n return void 0;\n }\n const segmentationTypeId = descriptor[offset] ?? 0;\n const markerType = markerTypeFromSegmentationTypeId(segmentationTypeId);\n if (!markerType) {\n return void 0;\n }\n return {\n type: markerType,\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n segmentationEventId\n };\n}\nfunction parseScte35SegmentationDescriptors(data, offset) {\n if (offset + 2 > data.length) {\n return void 0;\n }\n const descriptorLoopLength = (data[offset] ?? 0) << 8 | (data[offset + 1] ?? 0);\n let descriptorOffset = offset + 2;\n const descriptorEnd = Math.min(\n data.length,\n descriptorOffset + descriptorLoopLength\n );\n while (descriptorOffset + 2 <= descriptorEnd) {\n const descriptorTag = data[descriptorOffset] ?? 0;\n const descriptorLength = data[descriptorOffset + 1] ?? 0;\n const descriptorDataStart = descriptorOffset + 2;\n const descriptorDataEnd = descriptorDataStart + descriptorLength;\n if (descriptorDataEnd > descriptorEnd) {\n return void 0;\n }\n if (descriptorTag === 2) {\n const descriptorMarker = parseScte35SegmentationDescriptor(\n data.subarray(descriptorDataStart, descriptorDataEnd)\n );\n if (descriptorMarker) {\n return descriptorMarker;\n }\n }\n descriptorOffset = descriptorDataEnd;\n }\n return void 0;\n}\nfunction parseScte35Binary(data) {\n const r = new BitReader(data);\n const tableId = r.readBits(8);\n if (tableId !== 252) return void 0;\n r.readBits(1);\n r.readBits(1);\n r.readBits(2);\n const sectionLength = r.readBits(12);\n if (sectionLength <= 0 || data.length < 3 + sectionLength) {\n return void 0;\n }\n r.readBits(8);\n r.readBits(1);\n r.readBits(6);\n const ptsAdjHigh = r.readBits(1);\n const ptsAdjLow = r.readBits(32);\n const ptsAdjustmentTicks = ptsAdjHigh * 4294967296 + ptsAdjLow;\n r.readBits(8);\n r.readBits(12);\n const spliceCommandLength = r.readBits(12);\n const spliceCommandType = r.readBits(8);\n let markerType;\n let durationSeconds = void 0;\n let ptsSeconds = void 0;\n let spliceEventId = void 0;\n const commandBodyStart = r.bytePosition;\n if (spliceCommandType === 5) {\n spliceEventId = r.readBits(32);\n const cancel = r.readBits(1) === 1;\n r.readBits(7);\n if (cancel) return void 0;\n const outOfNetwork = r.readBits(1) === 1;\n const programSpliceFlag = r.readBits(1) === 1;\n const durationFlag = r.readBits(1) === 1;\n const spliceImmediateFlag = r.readBits(1) === 1;\n r.readBits(4);\n markerType = outOfNetwork ? \"start\" : \"end\";\n if (programSpliceFlag && !spliceImmediateFlag) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else if (!programSpliceFlag) {\n const componentCount = r.readBits(8);\n for (let i = 0; i < componentCount; i++) {\n r.readBits(8);\n if (!spliceImmediateFlag) {\n const componentPtsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n if (ptsSeconds === void 0) {\n ptsSeconds = componentPtsSeconds;\n }\n }\n }\n }\n if (durationFlag) {\n r.readBits(6);\n r.readBits(1);\n const high = r.readBits(1);\n const low = r.readBits(32);\n const durationTicks = high * 4294967296 + low;\n durationSeconds = durationTicks / 9e4;\n }\n r.readBits(16);\n r.readBits(8);\n r.readBits(8);\n } else if (spliceCommandType === 6) {\n ptsSeconds = readSpliceTime(r, ptsAdjustmentTicks);\n } else {\n return void 0;\n }\n const expectedDescriptorOffset = spliceCommandLength === 4095 ? r.bytePosition : commandBodyStart + spliceCommandLength;\n const descriptorMarker = parseScte35SegmentationDescriptors(\n data,\n expectedDescriptorOffset\n );\n if (descriptorMarker) {\n markerType = descriptorMarker.type;\n if (durationSeconds === void 0) {\n durationSeconds = descriptorMarker.durationSeconds;\n }\n }\n if (!markerType) {\n return void 0;\n }\n const marker = {\n type: markerType,\n ...ptsSeconds !== void 0 ? { ptsSeconds } : {},\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: {\n splice_command_type: spliceCommandType,\n ...spliceEventId !== void 0 ? { splice_event_id: spliceEventId } : {},\n ...descriptorMarker?.segmentationEventId !== void 0 ? { segmentation_event_id: descriptorMarker.segmentationEventId } : {}\n }\n };\n return marker;\n}\n\n// src/player/Scte35CueManager.ts\nvar Scte35CueManager = class {\n constructor(debug, callbacks) {\n this.pendingScte35Cues = /* @__PURE__ */ new Map();\n this.recentScte35CueKeys = /* @__PURE__ */ new Map();\n this.recentScte35CueLimit = 200;\n this.tsScte35Pids = /* @__PURE__ */ new Set();\n this.pmtPids = /* @__PURE__ */ new Set();\n this.processedTsScte35Sections = /* @__PURE__ */ new Set();\n this.debug = debug;\n this.callbacks = callbacks;\n }\n get pendingScte35CueKey() {\n return this.pendingScte35CueKeyValue;\n }\n set pendingScte35CueKey(value) {\n this.pendingScte35CueKeyValue = value;\n }\n get activeScte35BreakKey() {\n return this.activeScte35BreakKeyValue;\n }\n set activeScte35BreakKey(value) {\n this.activeScte35BreakKeyValue = value;\n }\n get scheduledScte35BreakKey() {\n return this.scheduledScte35BreakKeyValue;\n }\n set scheduledScte35BreakKey(value) {\n this.scheduledScte35BreakKeyValue = value;\n }\n createScte35CueContext(source, readiness, frag) {\n const context = { source, readiness };\n if (typeof frag?.sn === \"number\") {\n context.fragmentSn = frag.sn;\n }\n const fragmentStartSec = getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n return context;\n }\n onScte35Cue(marker, context) {\n const cue = this.createScte35Cue(marker, context);\n const pendingKey = this.getPendingScte35CueKey(cue);\n if (context.readiness === \"early\") {\n this.pendingScte35Cues.set(pendingKey, cue);\n this.trimRecentScte35CueMaps();\n if (marker.type === \"start\") {\n this.callbacks.onEarlyStartCue(marker, context.fragmentSn, cue.key);\n }\n return;\n }\n if (marker.type === \"end\" && !this.shouldAcceptScte35EndCue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring SCTE-35 end cue\", {\n key: cue.key,\n activeScte35BreakKey: this.activeScte35BreakKeyValue,\n inAdBreak: this.callbacks.isInAdBreak(),\n source: cue.source\n });\n }\n return;\n }\n if (marker.type === \"start\" && this.hasRecentlyHandledScte35Cue(cue)) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ignoring duplicate SCTE-35 start cue\", {\n key: cue.key,\n source: cue.source\n });\n }\n return;\n }\n this.pendingScte35Cues.delete(pendingKey);\n this.markScte35CueHandled(cue);\n this.callbacks.onPlaybackCue(marker, cue.key);\n }\n activatePendingScte35CuesForFragment(frag) {\n const fragmentSn = typeof frag?.sn === \"number\" ? frag.sn : void 0;\n if (fragmentSn === void 0) {\n return;\n }\n const matchingCues = Array.from(this.pendingScte35Cues.entries()).filter(\n ([, cue]) => cue.fragmentSn === fragmentSn\n );\n matchingCues.forEach(([pendingKey, cue]) => {\n this.pendingScte35Cues.delete(pendingKey);\n const context = {\n source: cue.source,\n readiness: \"playback\"\n };\n context.fragmentSn = fragmentSn;\n const fragmentStartSec = cue.fragmentStartSeconds ?? getFragmentStartSeconds(frag);\n if (fragmentStartSec !== void 0) {\n context.fragmentStartSeconds = fragmentStartSec;\n }\n this.onScte35Cue(cue.marker, context);\n });\n }\n createScte35Cue(marker, context) {\n const cue = {\n marker,\n source: context.source,\n readiness: context.readiness,\n key: this.getScte35CueKey(marker, context)\n };\n if (context.fragmentSn !== void 0) {\n cue.fragmentSn = context.fragmentSn;\n }\n if (context.fragmentStartSeconds !== void 0) {\n cue.fragmentStartSeconds = context.fragmentStartSeconds;\n }\n return cue;\n }\n getScte35CueKey(marker, context) {\n const raw = this.getScte35MarkerRaw(marker);\n const spliceEventId = this.toIdentityString(raw?.splice_event_id);\n if (spliceEventId) {\n return `splice:${spliceEventId}`;\n }\n const segmentationEventId = this.toIdentityString(raw?.segmentation_event_id);\n if (segmentationEventId) {\n return `segmentation:${segmentationEventId}`;\n }\n const daterangeId = this.toIdentityString(raw?.attrs?.ID);\n if (daterangeId) {\n return `daterange:${daterangeId}`;\n }\n const scteValue = this.toIdentityString(raw?.attrs?.[\"SCTE35-OUT\"]) || this.toIdentityString(raw?.attrs?.[\"SCTE35-IN\"]);\n if (scteValue) {\n return `daterange-scte:${scteValue}`;\n }\n if (typeof marker.ptsSeconds === \"number\" && Number.isFinite(marker.ptsSeconds)) {\n return `pts:${Math.round(marker.ptsSeconds * 2) / 2}`;\n }\n if (context.fragmentSn !== void 0) {\n return `fragment:${context.fragmentSn}`;\n }\n return `${context.source}:wallclock:${Math.floor(Date.now() / 1e3)}`;\n }\n getPendingScte35CueKey(cue) {\n return `${cue.marker.type}:${cue.key}:${cue.fragmentSn !== void 0 ? cue.fragmentSn : \"unknown\"}`;\n }\n getScte35MarkerRaw(marker) {\n return typeof marker.raw === \"object\" && marker.raw !== null ? marker.raw : {};\n }\n toIdentityString(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n return void 0;\n }\n isStrongScte35CueKey(key) {\n return !!(key && (key.startsWith(\"splice:\") || key.startsWith(\"segmentation:\") || key.startsWith(\"daterange:\") || key.startsWith(\"daterange-scte:\")));\n }\n hasRecentlyHandledScte35Cue(cue) {\n if (this.activeScte35BreakKeyValue === cue.key || this.scheduledScte35BreakKeyValue === cue.key) {\n return true;\n }\n const recentKey = `${cue.marker.type}:${cue.key}`;\n return this.recentScte35CueKeys.has(recentKey);\n }\n markScte35CueHandled(cue) {\n this.recentScte35CueKeys.set(`${cue.marker.type}:${cue.key}`, Date.now());\n this.trimRecentScte35CueMaps();\n }\n trimRecentScte35CueMaps() {\n while (this.recentScte35CueKeys.size > this.recentScte35CueLimit) {\n const firstKey = this.recentScte35CueKeys.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.recentScte35CueKeys.delete(firstKey);\n }\n while (this.pendingScte35Cues.size > this.recentScte35CueLimit) {\n const firstKey = this.pendingScte35Cues.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.pendingScte35Cues.delete(firstKey);\n }\n }\n shouldAcceptScte35EndCue(cue) {\n if (!this.callbacks.isInAdBreak()) {\n return false;\n }\n if (this.isStrongScte35CueKey(this.activeScte35BreakKeyValue) && this.isStrongScte35CueKey(cue.key) && this.activeScte35BreakKeyValue !== cue.key) {\n return false;\n }\n return true;\n }\n};\n\n// src/player/AdConfigManager.ts\nvar AdConfigManager = class {\n constructor(config, video) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds = /* @__PURE__ */ new Set();\n this.streamCorrelator = generateCorrelator();\n this.viewCorrelator = generateCorrelator();\n this.consentSignals = {};\n this.podCounter = 0;\n this.podAssignedByPrefetch = false;\n this.lastHeartbeatTime = 0;\n this.defaultPodMaxAds = 6;\n this.defaultPodMaxDurationMs = 12e4;\n this.config = config;\n this.video = video;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n isVmapEnabled() {\n return !!(this.config.isVmap && this.config.vmapUrl?.trim());\n }\n async fetchAdConfiguration() {\n if (this.isVmapEnabled()) {\n await this.fetchAndParseVmap(this.config.vmapUrl);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VMAP mode enabled\");\n }\n return;\n }\n const vastMode = this.config.vastMode || \"default\";\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] VAST mode:\", vastMode);\n }\n if (vastMode === \"adstorm\") {\n if (!this.config.licenseKey) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] AdStorm mode requires a license key\"\n );\n }\n return;\n }\n const vastEndpoint = `https://adstorm.co/api-adstorm-dev/adstorm/vast/${this.config.licenseKey}`;\n this.apiVastTagUrl = vastEndpoint;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using AdStorm VAST endpoint (adstorm mode):\",\n vastEndpoint\n );\n }\n return;\n }\n if (this.config.vastTagUrl) {\n this.apiVastTagUrl = normalizeVastTagUrl(this.config.vastTagUrl);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Using custom VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n return;\n }\n const apiUrl = \"https://adstorm.co/api-adstorm-dev/adstorm/ads/web\";\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Fetching ad configuration from:\",\n apiUrl\n );\n }\n const headers = {};\n if (this.config.licenseKey) {\n headers[\"Authorization\"] = `Bearer ${this.config.licenseKey}`;\n }\n const response = await fetch(apiUrl, { headers });\n if (!response.ok) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Failed to fetch ad configuration: ${response.status}`\n );\n }\n return;\n }\n const data = await response.json();\n const imaPayload = data.response?.ima?.[\"publisherdesk.ima\"]?.payload;\n if (imaPayload) {\n let decodedPayload = imaPayload;\n try {\n decodedPayload = decodeURIComponent(imaPayload);\n } catch {\n console.warn(\"[StormcloudVideoPlayer] imaPayload was not URI-encoded; using as-is:\", imaPayload);\n }\n console.log(\"[StormcloudVideoPlayer] Raw VAST tag URL (from API):\", decodedPayload);\n this.apiVastTagUrl = normalizeVastTagUrl(decodedPayload);\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Normalized VAST tag URL:\",\n this.apiVastTagUrl\n );\n }\n } else {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response\"\n );\n }\n }\n const numberAds = data.response?.options?.vast?.cue_tones?.number_ads;\n if (numberAds != null && numberAds > 0) {\n this.apiNumberAds = numberAds;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Number of ads per break from API:\",\n this.apiNumberAds\n );\n }\n }\n }\n async fetchAndParseVmap(vmapUrl) {\n if (!vmapUrl.trim()) {\n return;\n }\n try {\n const response = await fetch(vmapUrl);\n if (!response.ok) {\n throw new Error(`Failed to fetch VMAP (${response.status})`);\n }\n const vmapXml = await response.text();\n this.vmapBreaks = this.parseVmapToBreaks(vmapXml);\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Loaded ${this.vmapBreaks.length} VMAP ad break(s) from:`,\n vmapUrl\n );\n }\n } catch (error) {\n this.vmapBreaks = [];\n this.consumedVmapBreakIds.clear();\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to load VMAP:\", error);\n }\n }\n }\n parseVmapToBreaks(vmapXml) {\n if (typeof DOMParser === \"undefined\") {\n return [];\n }\n const doc = new DOMParser().parseFromString(vmapXml, \"application/xml\");\n if (doc.querySelector(\"parsererror\")) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Invalid VMAP XML received\");\n }\n return [];\n }\n const VMAP_NS = \"http://www.iab.net/videosuite/vmap\";\n let adBreakNodes = Array.from(doc.getElementsByTagNameNS(VMAP_NS, \"AdBreak\"));\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(\n doc.querySelectorAll(\"AdBreak, vmap\\\\:AdBreak\")\n );\n }\n if (adBreakNodes.length === 0) {\n adBreakNodes = Array.from(doc.getElementsByTagName(\"*\")).filter(\n (el) => el.localName === \"AdBreak\"\n );\n }\n const parsed = [];\n adBreakNodes.forEach((node, index) => {\n const timeOffsetRaw = (node.getAttribute(\"timeOffset\") || \"\").trim();\n const startTimeMs = this.parseVmapTimeOffsetToMs(timeOffsetRaw);\n if (startTimeMs == null) {\n return;\n }\n let adTagNode = node.getElementsByTagNameNS(VMAP_NS, \"AdTagURI\")[0];\n if (!adTagNode) {\n adTagNode = node.querySelector(\"AdTagURI, vmap\\\\:AdTagURI\") ?? void 0;\n }\n const adTagUrl = (adTagNode?.textContent || \"\").trim();\n if (!adTagUrl) {\n return;\n }\n const breakId = node.getAttribute(\"breakId\") || `vmap-break-${index}-${timeOffsetRaw || \"unknown\"}`;\n parsed.push({\n id: breakId,\n startTimeMs,\n vastTagUrl: adTagUrl\n });\n });\n parsed.sort((a, b) => {\n const aStart = a.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : a.startTimeMs;\n const bStart = b.startTimeMs < 0 ? Number.MAX_SAFE_INTEGER : b.startTimeMs;\n return aStart - bStart;\n });\n return parsed;\n }\n parseVmapTimeOffsetToMs(timeOffset) {\n if (!timeOffset) {\n return void 0;\n }\n const normalized = timeOffset.trim().toLowerCase();\n if (normalized === \"start\") {\n return 0;\n }\n if (normalized === \"end\") {\n return -1;\n }\n const hms = timeOffset.match(\n /^(\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?$/\n );\n if (hms) {\n const [, hh, mm, ss, ms = \"0\"] = hms;\n const hours = Number(hh);\n const minutes = Number(mm);\n const seconds = Number(ss);\n const millis = Number(ms.padEnd(3, \"0\").slice(0, 3));\n return (hours * 3600 + minutes * 60 + seconds) * 1e3 + millis;\n }\n const percent = timeOffset.match(/^(\\d+(?:\\.\\d+)?)%$/);\n if (percent) {\n const ratio = Number(percent[1]) / 100;\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3 * ratio);\n }\n return void 0;\n }\n return void 0;\n }\n getAdBreakKey(adBreak) {\n if (adBreak.id) {\n return adBreak.id;\n }\n return `${adBreak.startTimeMs}-${adBreak.vastTagUrl || \"\"}`;\n }\n resolveBreakStartMs(adBreak) {\n if (adBreak.startTimeMs >= 0) {\n return adBreak.startTimeMs;\n }\n if (adBreak.startTimeMs === -1) {\n const durationSec = this.video.duration;\n if (Number.isFinite(durationSec) && durationSec > 0) {\n return Math.floor(durationSec * 1e3);\n }\n }\n return void 0;\n }\n findCurrentOrNextBreak(nowMs) {\n const schedule = this.vmapBreaks;\n let candidate;\n const tol = this.config.driftToleranceMs ?? 1e3;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (breakStartMs <= nowMs + tol && (candidate == null || breakStartMs > (this.resolveBreakStartMs(candidate) ?? 0))) {\n candidate = b;\n }\n }\n return candidate;\n }\n findBreakForTime(nowMs) {\n const schedule = this.vmapBreaks;\n for (const b of schedule) {\n if (this.consumedVmapBreakIds.has(this.getAdBreakKey(b))) {\n continue;\n }\n const breakStartMs = this.resolveBreakStartMs(b);\n if (breakStartMs == null) {\n continue;\n }\n if (b.durationMs) {\n const end = breakStartMs + b.durationMs;\n if (nowMs >= breakStartMs && nowMs < end) {\n return b;\n }\n continue;\n }\n if (nowMs >= breakStartMs) {\n return b;\n }\n }\n return void 0;\n }\n selectVastTagsForBreak(b) {\n if (!b || !b.vastTagUrl) return void 0;\n if (b.vastTagUrl.includes(\",\")) {\n return b.vastTagUrl.split(\",\").map((s) => s.trim()).filter((s) => s.length > 0);\n }\n return [b.vastTagUrl];\n }\n beginNewAdPod() {\n this.podCounter++;\n }\n resolvePodParams(breakDurationMs) {\n const maxDurationMs = breakDurationMs != null && breakDurationMs > 0 ? breakDurationMs : this.config.podMaxDurationMs != null && this.config.podMaxDurationMs > 0 ? this.config.podMaxDurationMs : this.defaultPodMaxDurationMs;\n const maxAds = this.config.podMaxAds && this.config.podMaxAds > 0 ? this.config.podMaxAds : this.apiNumberAds && this.apiNumberAds > 0 ? this.apiNumberAds : this.defaultPodMaxAds;\n const minDurationMs = this.config.podExactDuration && maxDurationMs != null ? maxDurationMs : 0;\n return { maxAds, minDurationMs, maxDurationMs };\n }\n getPalDescriptionUrl() {\n if (!this.apiVastTagUrl) return void 0;\n try {\n const params = new URL(this.apiVastTagUrl).searchParams;\n return params.get(\"description_url\") || params.get(\"url\") || void 0;\n } catch {\n return void 0;\n }\n }\n generatePodVastUrl(baseUrl, podParams, adPlayer, palNonce, inAdBreak) {\n const adWillPlayMuted = inAdBreak ? adPlayer.getOriginalMutedState() : this.video.muted;\n const envSignals = resolveVastEnvironmentSignals(!!this.config.ctvAdRequest);\n const urlWithMacros = applyVastMacros(baseUrl, {\n correlator: this.viewCorrelator,\n streamCorrelator: this.streamCorrelator,\n pod: this.podCounter > 0 ? this.podCounter : void 0,\n podMaxAds: podParams.maxAds,\n podMinDurationMs: podParams.minDurationMs,\n podMaxDurationMs: podParams.maxDurationMs,\n isCtv: envSignals.isCtv,\n pageUrl: !envSignals.isCtv && typeof window !== \"undefined\" ? toDevSafeUrl(window.location.href) : void 0,\n adWillPlayMuted,\n adWillAutoPlay: !!this.config.autoplay,\n sessionId: envSignals.isCtv || this.consentSignals.storageAllowed !== false ? envSignals.sessionId : void 0,\n deviceId: envSignals.deviceId,\n deviceIdType: envSignals.deviceIdType,\n limitAdTracking: envSignals.limitAdTracking,\n deviceTypeHint: envSignals.deviceTypeHint,\n adTest: this.config.adTest,\n ...this.config.programTitle ? { programTitle: this.config.programTitle } : {},\n ...this.config.channelName ? { channelName: this.config.channelName } : {},\n consent: this.consentSignals\n });\n const finalUrl = palNonce.injectNonce(urlWithMacros);\n console.log(\n `[StormcloudVideoPlayer] Resolved optimized-pod request URL (pod=${this.podCounter}, pmad=${podParams.maxAds}, pmnd=${podParams.minDurationMs}, pmxd=${podParams.maxDurationMs ?? \"?\"}):`,\n finalUrl\n );\n return finalUrl;\n }\n // --- Tracking ---\n initializeTracking() {\n sendInitialTracking(this.config.licenseKey, buildAnalyticsContext(this.config)).then(() => {\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n }).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send initial tracking:\",\n error\n );\n }\n this.heartbeatInterval = window.setInterval(() => {\n this.sendHeartbeatIfNeeded();\n }, 5e3);\n });\n }\n sendHeartbeatIfNeeded() {\n const now = Date.now();\n if (!this.lastHeartbeatTime || now - this.lastHeartbeatTime > 3e4) {\n this.lastHeartbeatTime = now;\n sendHeartbeat(this.config.licenseKey, buildAnalyticsContext(this.config)).catch((error) => {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to send heartbeat:\",\n error\n );\n }\n });\n }\n }\n destroyTracking() {\n if (this.heartbeatInterval) {\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = void 0;\n }\n }\n};\n\n// src/player/AdTimingService.ts\nvar AdTimingService = class {\n constructor(config, video, callbacks) {\n this.adRequestWatchdogToken = null;\n this.adFailsafeToken = null;\n this.ptsDriftEmaMs = 0;\n this.adBreakPlayedDurationMs = 0;\n this.adBreakEpoch = 0;\n this.adRequestTokenCounter = 0;\n this.activeAdRequestToken = null;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.totalAdRequestsInBreak = 0;\n this.maxTotalAdRequestsPerBreak = 10;\n this.lastAdRequestTime = 0;\n this.consecutiveFailures = 0;\n this.maxConsecutiveFailures = 5;\n this.minAdRequestIntervalMs = 3e3;\n this.backoffBaseMs = 1e3;\n this.maxBackoffMs = 15e3;\n this.defaultMinRemainingMsToStartAd = 4e3;\n this.failedVastUrls = /* @__PURE__ */ new Set();\n this.temporaryFailureUrls = /* @__PURE__ */ new Map();\n this.temporaryFailureCooldownMs = 3e4;\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillThreshold = 3;\n this.globalNoFillCooldownUntil = 0;\n this.globalNoFillBackoffBaseMs = 5e3;\n this.globalNoFillBackoffMaxMs = 6e4;\n this.globalLastGamRequestTime = 0;\n this.globalMinGamIntervalMs = 3e3;\n this.config = config;\n this.video = video;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n // --- Ad stop timer ---\n scheduleAdStopCountdown(remainingMs) {\n this.clearAdStopTimer();\n const ms = Math.max(0, Math.floor(remainingMs));\n if (ms === 0) {\n this.ensureAdStoppedByTimer();\n return;\n }\n this.adStopTimerId = window.setTimeout(() => {\n this.ensureAdStoppedByTimer();\n }, ms);\n }\n clearAdStopTimer() {\n if (this.adStopTimerId != null) {\n clearTimeout(this.adStopTimerId);\n this.adStopTimerId = void 0;\n }\n }\n ensureAdStoppedByTimer() {\n this.adStopTimerId = void 0;\n this.callbacks.onAdStopTimerFired();\n }\n // --- Ad start timer ---\n scheduleAdStartIn(delayMs, marker = { type: \"start\" }, cueKey) {\n this.clearAdStartTimer();\n const ms = Math.max(0, Math.floor(delayMs));\n if (ms === 0) {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n return;\n }\n this.adStartTimerId = window.setTimeout(() => {\n this.callbacks.onAdStartTimerFired(marker, cueKey);\n }, ms);\n }\n clearAdStartTimer() {\n if (this.adStartTimerId != null) {\n clearTimeout(this.adStartTimerId);\n this.adStartTimerId = void 0;\n }\n }\n // --- PTS drift ---\n updatePtsDrift(ptsSecondsSample) {\n const sampleMs = (this.video.currentTime - ptsSecondsSample) * 1e3;\n if (!Number.isFinite(sampleMs) || Math.abs(sampleMs) > 6e4) return;\n const alpha = 0.1;\n this.ptsDriftEmaMs = this.ptsDriftEmaMs * (1 - alpha) + sampleMs * alpha;\n }\n resolveScteBreakStartWallClockMs(marker) {\n const nowWallClockMs = Date.now();\n if (typeof marker.ptsSeconds !== \"number\") {\n return nowWallClockMs;\n }\n const nowMs = this.video.currentTime * 1e3;\n const estimatedCurrentPtsMs = nowMs - this.ptsDriftEmaMs;\n const deltaMs = marker.ptsSeconds * 1e3 - estimatedCurrentPtsMs;\n if (!Number.isFinite(deltaMs)) {\n return nowWallClockMs;\n }\n return nowWallClockMs + Math.floor(deltaMs);\n }\n // --- Duration boundary ---\n setAdBreakDurationBoundary(durationMs) {\n this.expectedAdBreakDurationMs = durationMs;\n if (durationMs != null && this.currentAdBreakStartWallClockMs != null) {\n this.scteAdBreakEndWallClockMs = this.currentAdBreakStartWallClockMs + durationMs;\n } else {\n this.scteAdBreakEndWallClockMs = void 0;\n }\n }\n scheduleAdStopAtBreakBoundary() {\n if (this.expectedAdBreakDurationMs == null) {\n return;\n }\n this.scheduleAdStopCountdown(this.getWallClockRemainingAdMs());\n }\n // --- Duration budget ---\n getWallClockRemainingAdMs() {\n const endWallClockMs = this.getAdBreakEndWallClockMs();\n if (endWallClockMs != null) {\n return Math.max(0, endWallClockMs - Date.now());\n }\n return 0;\n }\n getAdBreakEndWallClockMs() {\n if (this.scteAdBreakEndWallClockMs != null) {\n return this.scteAdBreakEndWallClockMs;\n }\n if (this.expectedAdBreakDurationMs == null || this.currentAdBreakStartWallClockMs == null) {\n return void 0;\n }\n return this.currentAdBreakStartWallClockMs + this.expectedAdBreakDurationMs;\n }\n getDurationBudgetRemainingMs() {\n if (this.expectedAdBreakDurationMs == null) {\n return 0;\n }\n return Math.max(0, this.expectedAdBreakDurationMs - this.adBreakPlayedDurationMs);\n }\n getLoadedAdDurationMs(adController) {\n const durationSec = adController.getLoadedAdDuration?.();\n if (durationSec == null || durationSec <= 0) {\n return 0;\n }\n return Math.round(durationSec * 1e3);\n }\n adFitsRemainingBudget(durationMs) {\n if (durationMs <= 0) {\n return true;\n }\n return durationMs <= this.getDurationBudgetRemainingMs();\n }\n logAdDurationDecision(accepted, durationMs, adController) {\n if (!this.debug) {\n return;\n }\n const remainingBudget = this.getDurationBudgetRemainingMs();\n const adId = adController.getLoadedAdId?.() ?? \"unknown\";\n if (accepted) {\n console.log(\n `[AD-DURATION] Accepted ad id=${adId}, duration=${durationMs}ms, budget remaining after play=${Math.max(0, remainingBudget - durationMs)}ms`\n );\n } else {\n console.log(\n `[AD-DURATION] Rejected ad id=${adId}, duration=${durationMs}ms exceeds remaining budget=${remainingBudget}ms \\u2014 requesting another ad`\n );\n }\n }\n recordPlayedAdDuration(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n if (durationMs <= 0) {\n return;\n }\n this.adBreakPlayedDurationMs += durationMs;\n if (this.debug) {\n console.log(\n `[AD-DURATION] Played ${durationMs}ms \\u2014 total played=${this.adBreakPlayedDurationMs}ms / ${this.expectedAdBreakDurationMs ?? \"?\"}ms`\n );\n }\n }\n ensureLoadedAdFitsBudget(adController) {\n const durationMs = this.getLoadedAdDurationMs(adController);\n const fits = this.adFitsRemainingBudget(durationMs);\n this.logAdDurationDecision(fits, durationMs, adController);\n return fits;\n }\n rejectLoadedAdForDuration(adController) {\n try {\n adController.destroy();\n } catch {\n }\n }\n markAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n this.totalAdRequestsInBreak++;\n this.lastAdRequestTime = Date.now();\n }\n notePodAdStarted() {\n this.currentAdIndex++;\n this.totalAdsInBreak = this.currentAdIndex;\n }\n getRemainingAdMs() {\n const wallClockRemaining = this.getWallClockRemainingAdMs();\n const budgetRemaining = this.getDurationBudgetRemainingMs();\n if (this.expectedAdBreakDurationMs == null) {\n return wallClockRemaining;\n }\n return Math.min(wallClockRemaining, budgetRemaining);\n }\n getMinRemainingMsToStartAd() {\n const configured = this.config.minRemainingMsToStartAd;\n if (typeof configured === \"number\" && configured >= 0) {\n return configured;\n }\n return this.defaultMinRemainingMsToStartAd;\n }\n hasTimeToStartAnotherAd() {\n const minRemaining = this.getMinRemainingMsToStartAd();\n return this.getWallClockRemainingAdMs() > minRemaining && this.getDurationBudgetRemainingMs() > minRemaining;\n }\n // --- Circuit breaker ---\n isTemporaryAdError(error) {\n const message = error?.message?.toLowerCase() || \"\";\n if (message.includes(\"no ads available\") || message.includes(\"no fill\") || message.includes(\"nofill\")) {\n return true;\n }\n if (message.includes(\"timeout\")) {\n return true;\n }\n if (message.includes(\"rate limit\") || message.includes(\"too many requests\")) {\n return true;\n }\n if (message.includes(\"ad playback error\")) {\n return true;\n }\n return false;\n }\n isUrlInCooldown(vastTagUrl) {\n const failureTime = this.temporaryFailureUrls.get(vastTagUrl);\n if (failureTime == null) {\n return false;\n }\n const elapsed = Date.now() - failureTime;\n if (elapsed >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(vastTagUrl);\n return false;\n }\n return true;\n }\n cleanupTemporaryFailures() {\n const now = Date.now();\n for (const [url, timestamp] of this.temporaryFailureUrls) {\n if (now - timestamp >= this.temporaryFailureCooldownMs) {\n this.temporaryFailureUrls.delete(url);\n }\n }\n }\n isGamInCooldown() {\n return Date.now() < this.globalNoFillCooldownUntil;\n }\n recordGamNoFill() {\n this.globalConsecutiveNoFills++;\n if (this.globalConsecutiveNoFills >= this.globalNoFillThreshold) {\n const exponent = this.globalConsecutiveNoFills - this.globalNoFillThreshold;\n const backoff = Math.min(\n this.globalNoFillBackoffBaseMs * Math.pow(2, exponent),\n this.globalNoFillBackoffMaxMs\n );\n this.globalNoFillCooldownUntil = Date.now() + backoff;\n if (this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] GAM cooldown activated: ${backoff}ms (${this.globalConsecutiveNoFills} consecutive no-fills)`\n );\n }\n }\n }\n resetGamNoFillCounter() {\n if (this.globalConsecutiveNoFills > 0 && this.debug) {\n console.log(\n `[CIRCUIT-BREAKER] Resetting no-fill counter (was ${this.globalConsecutiveNoFills})`\n );\n }\n this.globalConsecutiveNoFills = 0;\n this.globalNoFillCooldownUntil = 0;\n }\n async enforceGlobalRateLimit() {\n const now = Date.now();\n const elapsed = now - this.globalLastGamRequestTime;\n if (elapsed < this.globalMinGamIntervalMs) {\n const waitMs = this.globalMinGamIntervalMs - elapsed;\n if (this.debug) {\n console.log(`[RATE-LIMIT] Waiting ${waitMs}ms before next GAM request`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n }\n this.globalLastGamRequestTime = Date.now();\n }\n // --- Watchdog ---\n startAdRequestWatchdog(token) {\n this.clearAdRequestWatchdog();\n const timeoutMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adRequestWatchdogToken = token;\n this.adRequestWatchdogId = window.setTimeout(() => {\n if (this.adRequestWatchdogToken !== token) {\n return;\n }\n this.adRequestWatchdogId = void 0;\n this.adRequestWatchdogToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_request_timeout\", { token, timeoutMs });\n this.callbacks.onWatchdogTimeout();\n }, timeoutMs);\n this.logAdState(\"ad_request_watchdog_started\", { token, timeoutMs });\n }\n clearAdRequestWatchdog() {\n if (this.adRequestWatchdogId != null) {\n clearTimeout(this.adRequestWatchdogId);\n this.adRequestWatchdogId = void 0;\n }\n if (this.adRequestWatchdogToken != null) {\n this.logAdState(\"ad_request_watchdog_cleared\", {\n token: this.adRequestWatchdogToken\n });\n this.adRequestWatchdogToken = null;\n }\n }\n // --- Failsafe ---\n startAdFailsafeTimer(token) {\n this.clearAdFailsafeTimer();\n const failsafeMs = this.config.adFailsafeTimeoutMs ?? 1e4;\n this.adFailsafeToken = token;\n this.adFailsafeTimerId = window.setTimeout(() => {\n if (this.adFailsafeToken !== token) {\n return;\n }\n this.adFailsafeTimerId = void 0;\n this.adFailsafeToken = null;\n if (this.activeAdRequestToken === token) {\n this.activeAdRequestToken = null;\n }\n this.logAdState(\"ad_failsafe_triggered\", {\n token,\n failsafeMs,\n videoPaused: this.video.paused\n });\n this.callbacks.onFailsafeTimeout();\n }, failsafeMs);\n this.logAdState(\"ad_failsafe_started\", { token, failsafeMs });\n }\n clearAdFailsafeTimer() {\n if (this.adFailsafeTimerId != null) {\n clearTimeout(this.adFailsafeTimerId);\n this.logAdState(\"ad_failsafe_cleared\", { token: this.adFailsafeToken });\n this.adFailsafeTimerId = void 0;\n }\n this.adFailsafeToken = null;\n }\n logAdState(event, extra = {}) {\n if (!this.debug) {\n return;\n }\n const { inAdBreak, showAds, adPlaying } = this.callbacks.getAdState();\n console.log(\"[StormcloudVideoPlayer][AdState]\", {\n event,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n showAds,\n adPlaying,\n inAdBreak,\n activeAdRequestToken: this.activeAdRequestToken,\n ...extra\n });\n }\n // --- Reset for ad break end ---\n resetForBreakEnd() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdRequestWatchdog();\n this.clearAdFailsafeTimer();\n this.activeAdRequestToken = null;\n this.expectedAdBreakDurationMs = void 0;\n this.currentAdBreakStartWallClockMs = void 0;\n this.scteAdBreakEndWallClockMs = void 0;\n this.adBreakPlayedDurationMs = 0;\n this.currentAdIndex = 0;\n this.totalAdsInBreak = 0;\n this.consecutiveFailures = 0;\n this.globalConsecutiveNoFills = 0;\n this.adBreakEpoch++;\n }\n destroy() {\n this.clearAdStopTimer();\n this.clearAdStartTimer();\n this.clearAdFailsafeTimer();\n this.clearAdRequestWatchdog();\n }\n};\n\n// src/player/PlaceholderLayer.ts\nvar PlaceholderLayer = class {\n constructor(video, debug) {\n this.video = video;\n this.debug = debug;\n }\n ensureContainer() {\n if (this.container) {\n return;\n }\n const el = document.createElement(\"div\");\n el.style.position = \"absolute\";\n el.style.left = \"0\";\n el.style.top = \"0\";\n el.style.right = \"0\";\n el.style.bottom = \"0\";\n el.style.display = \"none\";\n el.style.alignItems = \"center\";\n el.style.justifyContent = \"center\";\n el.style.pointerEvents = \"none\";\n el.style.zIndex = \"5\";\n el.style.backgroundColor = \"#000\";\n el.style.transition = \"opacity 0.3s ease-in-out\";\n el.style.opacity = \"0\";\n if (!this.video.parentElement) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Video element has no parent for placeholder container\");\n }\n return;\n }\n this.video.parentElement.appendChild(el);\n this.container = el;\n }\n show() {\n this.ensureContainer();\n if (!this.container) {\n return;\n }\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video when showing placeholder\");\n }\n }\n const wasHidden = this.container.style.display === \"none\" || this.container.style.opacity === \"0\";\n if (wasHidden) {\n this.container.style.transition = \"none\";\n } else {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n this.container.style.backgroundColor = \"#000\";\n this.container.style.display = \"flex\";\n this.container.offsetHeight;\n this.container.style.opacity = \"1\";\n this.container.style.pointerEvents = \"auto\";\n if (wasHidden) {\n requestAnimationFrame(() => {\n if (this.container) {\n this.container.style.transition = \"opacity 0.3s ease-in-out\";\n }\n });\n }\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder layer (between content and ad layer)\");\n }\n }\n hide() {\n if (!this.container) {\n return;\n }\n this.container.style.opacity = \"0\";\n setTimeout(() => {\n if (this.container) {\n this.container.style.display = \"none\";\n this.container.style.pointerEvents = \"none\";\n this.container.style.backgroundColor = \"#000\";\n }\n }, 300);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder layer\");\n }\n }\n destroy() {\n if (this.container) {\n if (this.container.parentElement) {\n this.container.parentElement.removeChild(this.container);\n }\n this.container = void 0;\n }\n }\n};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\nvar HlsEngine = class {\n constructor(config, video, cueManager, timing, callbacks) {\n this.isLiveStream = false;\n this.nativeHlsMode = false;\n this.videoSrcProtection = null;\n this.reloadingLiveStream = false;\n this.bufferedSegmentsCount = 0;\n this.shouldAutoplayAfterBuffering = false;\n this.hasInitialBufferCompleted = false;\n this.latencyProfileApplied = false;\n this.config = config;\n this.video = video;\n this.cueManager = cueManager;\n this.timing = timing;\n this.callbacks = callbacks;\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n shouldUseNativeHls(getStreamType) {\n const streamType = getStreamType();\n if (streamType === \"other\") {\n return true;\n }\n const canNative = this.video.canPlayType(\"application/vnd.apple.mpegurl\");\n return !!(this.config.allowNativeHls && canNative);\n }\n async setupNativeHls() {\n this.nativeHlsMode = true;\n this.videoSrcProtection = this.config.src;\n this.video.src = this.config.src;\n this.isLiveStream = this.config.isLiveStream ?? (this.config.lowLatencyMode ?? false);\n if (this.debug) {\n const adBehavior = this.isLiveStream ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\n \"[StormcloudVideoPlayer] Using native HLS playback:\",\n {\n isLive: this.isLiveStream,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n }\n );\n }\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n setupHls() {\n this.hls = new import_hls2.default({\n enableWorker: true,\n backBufferLength: 30,\n liveDurationInfinity: true,\n lowLatencyMode: !!this.config.lowLatencyMode,\n maxLiveSyncPlaybackRate: 1.1,\n maxBufferLength: 30,\n maxMaxBufferLength: 600,\n maxBufferSize: 60 * 1e3 * 1e3,\n maxBufferHole: 1,\n highBufferWatchdogPeriod: 2,\n nudgeOffset: 0.2,\n nudgeMaxRetry: 5,\n startPosition: -1\n });\n this.hls.on(import_hls2.default.Events.MEDIA_ATTACHED, () => {\n this.hls?.loadSource(this.config.src);\n });\n this.hls.on(import_hls2.default.Events.MANIFEST_PARSED, async (_, _data) => {\n this.isLiveStream = this.config.isLiveStream ?? (this.hls?.levels?.some(\n (level) => level?.details?.live === true || level?.details?.type === \"LIVE\"\n ) ?? false);\n await this.callbacks.onManifestParsed(this.isLiveStream);\n this.bufferedSegmentsCount = 0;\n this.hasInitialBufferCompleted = false;\n this.shouldAutoplayAfterBuffering = !!this.config.autoplay;\n this.latencyProfileApplied = false;\n this.detectedLowLatencyStream = void 0;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Waiting for\",\n minSegments,\n \"segments to buffer before playback\"\n );\n }\n if (minSegments === 0 || !this.config.autoplay) {\n this.hasInitialBufferCompleted = true;\n if (this.config.autoplay) {\n await this.video.play()?.catch(() => {\n });\n }\n }\n this.reloadingLiveStream = false;\n });\n this.hls.on(import_hls2.default.Events.LEVEL_LOADED, (_evt, data) => {\n this.applyStreamLatencyProfile(data?.details);\n if (this.callbacks.isInAdBreak() || this.callbacks.hasPendingAdBreak()) {\n return;\n }\n const details = data?.details;\n if (!details || !details.fragments || details.fragments.length === 0) {\n return;\n }\n const fragmentsToScan = Math.min(5, details.fragments.length);\n for (let i = 0; i < fragmentsToScan; i++) {\n const frag = details.fragments[i];\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) continue;\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT\") || tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = tag.includes(\"EXT-X-DATERANGE\") ? parseAttributeList(value) : {};\n const hasScteOut = tag.includes(\"EXT-X-CUE-OUT\") || \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n if (hasScteOut) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value, earlyDetection: true }\n };\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] EARLY SCTE-35 DETECTION: Ad break marker found in fragment\", i, \"- starting pre-fetch (NOT playing yet)\");\n }\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"early\", frag)\n });\n return;\n }\n }\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_BUFFERED, async (_evt, _data) => {\n if (this.hasInitialBufferCompleted) {\n return;\n }\n this.bufferedSegmentsCount++;\n const minSegments = this.config.minSegmentsBeforePlay ?? 2;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Buffered segment ${this.bufferedSegmentsCount}/${minSegments}`\n );\n }\n if (this.bufferedSegmentsCount >= minSegments) {\n this.hasInitialBufferCompleted = true;\n if (this.shouldAutoplayAfterBuffering) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Initial buffer complete (${this.bufferedSegmentsCount} segments). Starting playback.`\n );\n }\n await this.video.play()?.catch((err) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Autoplay failed:\", err);\n }\n });\n }\n }\n });\n this.hls.on(import_hls2.default.Events.FRAG_PARSING_METADATA, (_evt, data) => {\n const id3Tags = (data?.samples || []).map((s) => ({\n key: \"ID3\",\n value: s?.data,\n ptsSeconds: s?.pts\n }));\n id3Tags.forEach((tag) => this.onId3Tag(tag));\n });\n this.hls.on(import_hls2.default.Events.FRAG_LOADED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_DECRYPTED, (_evt, data) => {\n this.processFragmentScte35Payload(\n data?.payload,\n typeof data?.frag?.sn === \"number\" ? data.frag.sn : void 0,\n getFragmentStartSeconds(data?.frag)\n );\n });\n this.hls.on(import_hls2.default.Events.FRAG_CHANGED, (_evt, data) => {\n const frag = data?.frag;\n const tagList = frag?.tagList;\n if (!Array.isArray(tagList)) {\n this.callbacks.activatePendingCuesForFragment(frag);\n return;\n }\n for (const entry of tagList) {\n let tag = \"\";\n let value = \"\";\n if (Array.isArray(entry)) {\n tag = String(entry[0] ?? \"\");\n value = String(entry[1] ?? \"\");\n } else if (typeof entry === \"string\") {\n const idx = entry.indexOf(\":\");\n if (idx >= 0) {\n tag = entry.substring(0, idx);\n value = entry.substring(idx + 1);\n } else {\n tag = entry;\n value = \"\";\n }\n }\n if (!tag) continue;\n if (tag.includes(\"EXT-X-CUE-OUT-CONT\")) {\n const prog = parseCueOutCont(value);\n const marker = {\n type: \"progress\",\n ...prog?.duration !== void 0 ? { durationSeconds: prog.duration } : {},\n ...prog?.elapsed !== void 0 ? { ptsSeconds: prog.elapsed } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-OUT\")) {\n const durationSeconds = parseCueOutDuration(value);\n const marker = {\n type: \"start\",\n ...durationSeconds !== void 0 ? { durationSeconds } : {},\n raw: { tag, value }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n } else if (tag.includes(\"EXT-X-CUE-IN\")) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n } else if (tag.includes(\"EXT-X-DATERANGE\")) {\n const attrs = parseAttributeList(value);\n const hasScteOut = \"SCTE35-OUT\" in attrs || attrs[\"SCTE35-OUT\"] !== void 0;\n const hasScteIn = \"SCTE35-IN\" in attrs || attrs[\"SCTE35-IN\"] !== void 0;\n const klass = String(attrs[\"CLASS\"] ?? \"\");\n const duration = toNumber(attrs[\"DURATION\"]);\n if (hasScteOut || /com\\.apple\\.hls\\.cue/i.test(klass)) {\n const marker = {\n type: \"start\",\n ...duration !== void 0 ? { durationSeconds: duration } : {},\n raw: { tag, value, attrs }\n };\n this.callbacks.onScte35Cue(marker, {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n });\n }\n if (hasScteIn) {\n this.callbacks.onScte35Cue(\n { type: \"end\", raw: { tag, value, attrs } },\n {\n ...this.cueManager.createScte35CueContext(\"manifest\", \"playback\", frag)\n }\n );\n }\n }\n }\n this.callbacks.activatePendingCuesForFragment(frag);\n });\n this.hls.on(import_hls2.default.Events.ERROR, (_evt, data) => {\n if (data?.fatal) {\n switch (data.type) {\n case import_hls2.default.ErrorTypes.NETWORK_ERROR:\n this.hls?.startLoad();\n break;\n case import_hls2.default.ErrorTypes.MEDIA_ERROR:\n this.hls?.recoverMediaError();\n break;\n default:\n this.callbacks.onFatalDestroy();\n break;\n }\n }\n });\n this.hls.attachMedia(this.video);\n }\n isLowLatencyStream() {\n return this.detectedLowLatencyStream;\n }\n applyStreamLatencyProfile(details) {\n if (this.latencyProfileApplied || !this.hls) {\n return;\n }\n if (!details) {\n return;\n }\n if (details.live !== true) {\n this.latencyProfileApplied = true;\n this.detectedLowLatencyStream = false;\n return;\n }\n const isLowLatencyManifest = this.isLowLatencyManifest(details);\n const useLowLatency = isLowLatencyManifest && !!this.config.lowLatencyMode;\n this.detectedLowLatencyStream = useLowLatency;\n this.latencyProfileApplied = true;\n const cfg = this.hls.config;\n if (useLowLatency) {\n cfg.maxLiveSyncPlaybackRate = 1.5;\n cfg.maxBufferHole = 0.5;\n delete cfg.liveSyncDuration;\n } else {\n cfg.maxLiveSyncPlaybackRate = 1.1;\n cfg.maxBufferHole = 1;\n delete cfg.liveSyncDuration;\n cfg.liveSyncDurationCount = 3;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live latency profile: ${useLowLatency ? \"LL-HLS (low latency)\" : \"standard live (stability)\"}`,\n {\n isLowLatencyManifest,\n lowLatencyModeRequested: !!this.config.lowLatencyMode,\n canBlockReload: details.canBlockReload,\n partTarget: details.partTarget,\n partHoldBack: details.partHoldBack,\n partListLength: Array.isArray(details.partList) ? details.partList.length : 0,\n targetDuration: details.targetduration ?? details.targetDuration,\n maxLiveSyncPlaybackRate: cfg.maxLiveSyncPlaybackRate,\n maxBufferHole: cfg.maxBufferHole\n }\n );\n }\n }\n isLowLatencyManifest(details) {\n if (!details) {\n return false;\n }\n const hasParts = Array.isArray(details.partList) && details.partList.length > 0;\n const hasPartTarget = typeof details.partTarget === \"number\" && details.partTarget > 0;\n const hasPartHoldBack = typeof details.partHoldBack === \"number\" && details.partHoldBack > 0;\n const canBlockReload = details.canBlockReload === true;\n return hasParts || hasPartTarget || hasPartHoldBack || canBlockReload;\n }\n onId3Tag(tag) {\n if (typeof tag.ptsSeconds === \"number\") {\n this.timing.updatePtsDrift(tag.ptsSeconds);\n }\n const marker = parseScte35FromId3(tag);\n if (marker) {\n this.callbacks.onScte35Cue(marker, {\n source: \"id3\",\n readiness: \"playback\"\n });\n }\n }\n processFragmentScte35Payload(payloadData, fragmentSn, fragmentStartSeconds) {\n const payload = normalizeFragmentPayload(payloadData);\n if (!payload) {\n return;\n }\n const markers = parseScte35FromTsPackets(\n payload,\n this.cueManager.tsScte35Pids,\n this.cueManager.pmtPids,\n this.cueManager.processedTsScte35Sections\n );\n markers.forEach((marker) => {\n const context = {\n source: \"ts\",\n readiness: \"early\"\n };\n if (fragmentSn !== void 0) {\n context.fragmentSn = fragmentSn;\n }\n if (fragmentStartSeconds !== void 0) {\n context.fragmentStartSeconds = fragmentStartSeconds;\n }\n this.callbacks.onScte35Cue(marker, context);\n });\n }\n getLiveSyncPosition() {\n const pos = this.hls?.liveSyncPosition;\n return typeof pos === \"number\" && Number.isFinite(pos) ? pos : void 0;\n }\n restartLoadAt(position) {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.stopLoad();\n this.hls.startLoad(position);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to restart HLS load at live edge:\", error);\n }\n }\n }\n recoverMediaError() {\n if (!this.hls) {\n return;\n }\n try {\n this.hls.recoverMediaError();\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] recoverMediaError() failed:\", error);\n }\n }\n }\n reloadLiveStream() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \\u2192 reset video \\u2192 fresh setupHls)\"\n );\n }\n try {\n this.reloadingLiveStream = true;\n hls.stopLoad();\n hls.detachMedia();\n hls.destroy();\n this.hls = void 0;\n try {\n this.video.removeAttribute(\"src\");\n this.video.load();\n } catch (error) {\n console.warn(\"[StormcloudVideoPlayer] video.load() threw after src removal:\", error);\n }\n } catch (error) {\n this.reloadingLiveStream = false;\n this.hls = void 0;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to tear down during hard-reload:\", error);\n }\n return;\n }\n const recreateDelayMs = 600;\n window.setTimeout(() => {\n if (this.hls) {\n this.reloadingLiveStream = false;\n return;\n }\n try {\n this.setupHls();\n } catch (error) {\n this.reloadingLiveStream = false;\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:\", error);\n }\n }\n }, recreateDelayMs);\n }\n destroy() {\n this.hls?.destroy();\n this.hls = void 0;\n }\n};\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\nfunction toggleMute(video, adPlayer, debug) {\n if (adPlayer.isAdPlaying()) {\n const newMutedState = !adPlayer.getOriginalMutedState();\n const restoreVolume = adPlayer.getOriginalVolume() || 1;\n adPlayer.updateOriginalMutedState(newMutedState, video.volume);\n adPlayer.setAdVolume(newMutedState ? 0 : restoreVolume);\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] Mute toggle during ad - immediately applied:\",\n newMutedState\n );\n }\n } else {\n video.muted = !video.muted;\n adPlayer.updateOriginalMutedState(video.muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Muted:\", video.muted);\n }\n }\n}\nfunction toggleFullscreen(video, debug) {\n return new Promise((resolve, reject) => {\n if (!document.fullscreenElement) {\n const container = video.parentElement;\n if (!container) {\n reject(new Error(\"No parent container found for fullscreen\"));\n return;\n }\n container.requestFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Entered fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\"[StormcloudVideoPlayer] Fullscreen error:\", err);\n }\n reject(err);\n });\n } else {\n document.exitFullscreen().then(() => {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Exited fullscreen\");\n }\n resolve();\n }).catch((err) => {\n if (debug) {\n console.error(\n \"[StormcloudVideoPlayer] Exit fullscreen error:\",\n err\n );\n }\n reject(err);\n });\n }\n });\n}\nfunction isMuted(video, adPlayer) {\n if (adPlayer.isAdPlaying()) {\n return adPlayer.getOriginalMutedState();\n }\n return video.muted;\n}\nfunction setMuted(video, adPlayer, muted, debug) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying && muted === video.muted) {\n if (debug) {\n console.log(\n \"[StormcloudVideoPlayer] setMuted reflective update during ad ignored\",\n { muted }\n );\n }\n return;\n }\n video.muted = muted;\n if (adPlaying) {\n adPlayer.updateOriginalMutedState(muted, video.volume);\n adPlayer.setAdVolume(muted ? 0 : 1);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted applied during ad\", {\n muted\n });\n }\n return;\n }\n adPlayer.updateOriginalMutedState(muted, video.volume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setMuted called:\", muted);\n }\n}\nfunction setVolume(video, adPlayer, volume, debug) {\n const clampedVolume = Math.max(0, Math.min(1, volume));\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n adPlayer.setAdVolume(clampedVolume);\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume applied during ad\", {\n volume: clampedVolume\n });\n }\n } else {\n video.volume = clampedVolume;\n video.muted = clampedVolume === 0;\n adPlayer.updateOriginalMutedState(clampedVolume === 0, clampedVolume);\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] setVolume called:\", clampedVolume);\n }\n }\n}\nfunction getVolume(video, adPlayer) {\n const adPlaying = adPlayer.isAdPlaying();\n if (adPlaying) {\n return adPlayer.getAdVolume();\n }\n return video.volume;\n}\nfunction isFullscreen() {\n return !!document.fullscreenElement;\n}\nfunction resizePlayer(video, adPlayer, debug) {\n if (debug) {\n console.log(\"[StormcloudVideoPlayer] Resizing player\");\n }\n if (adPlayer && adPlayer.isAdPlaying()) {\n const width = video.clientWidth || 640;\n const height = video.clientHeight || 480;\n if (debug) {\n console.log(\n `[StormcloudVideoPlayer] Resizing ads manager to ${width}x${height}`\n );\n }\n adPlayer.resize(width, height);\n }\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.adRequestQueue = [];\n this.adPodQueue = [];\n this.maxPlaceholderDurationMs = 5e3;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const adPlayer = this.host.getAdPlayer();\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"all_ads_completed\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.inAdBreak) {\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n let errorMessage = \"Ad playback failed\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure();\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n { source: \"hls\", adIndex: this.timing.currentAdIndex, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] content_resume event: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n this.handleAdPodComplete();\n }\n });\n }\n recreateAdController() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Recreating AdController for new ad\");\n }\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n async handleAdStart(_marker) {\n const scheduled = this.adConfig.findCurrentOrNextBreak(\n this.host.video.currentTime * 1e3\n );\n if (scheduled) {\n this.adConfig.consumedVmapBreakIds.add(this.adConfig.getAdBreakKey(scheduled));\n }\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n this.clearPendingAdBreak();\n return;\n }\n const adBreakDurationMs = _marker.durationSeconds != null ? _marker.durationSeconds * 1e3 : scheduled?.durationMs;\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[CONTINUOUS-FETCH] ${mode} MODE: Target duration=${adBreakDurationMs}ms`\n );\n }\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n const podPlayed = await this.startOptimizedPod(\n baseVastUrl,\n adBreakDurationMs,\n currentMuted,\n currentVolume\n );\n if (!podPlayed) {\n if (this.debug) {\n console.log(\"[POD] Initial pod request did not fill; attempting top-up pod request\");\n }\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n await this.tryNextAvailableAdWithRateLimit();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs, currentMuted, currentVolume) {\n let podUrl;\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.continuousFetchingActive = false;\n this.recreateAdController();\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n await adPlayer.requestAds(podUrl);\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) {\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n return false;\n }\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: podUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await adPlayer.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(currentMuted ? 0 : currentVolume);\n this.timing.consecutiveFailures = 0;\n this.continuousFetchingActive = true;\n this.startContinuousFetching(baseVastUrl);\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(podUrl, Date.now());\n }\n this.continuousFetchingActive = true;\n this.recreateAdController();\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Continuous fetching\n // ───────────────────────────────────────────────────────────────\n startContinuousFetching(baseVastUrl) {\n if (!this.continuousFetchingActive) {\n return;\n }\n if (this.continuousFetchLoopRunning) {\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Fetch loop already running, skipping duplicate start\");\n }\n return;\n }\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Starting continuous ad fetching loop\");\n }\n this.continuousFetchLoopRunning = true;\n this.continuousFetchLoop(baseVastUrl);\n }\n async continuousFetchLoop(baseVastUrl) {\n const epoch = this.timing.adBreakEpoch;\n while (this.continuousFetchingActive && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (remaining <= this.timing.getMinRemainingMsToStartAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough ad break time left (wall=${this.timing.getWallClockRemainingAdMs()}ms, budget=${this.timing.getDurationBudgetRemainingMs()}ms), stopping URL generation`);\n }\n break;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, stopping URL generation\");\n }\n break;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), stopping URL generation`);\n }\n break;\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Maximum ad requests reached (${this.timing.maxTotalAdRequestsPerBreak}), stopping`);\n }\n break;\n }\n const maxQueueSize = 5;\n if (this.adRequestQueue.length >= maxQueueSize) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] URL queue full (${this.adRequestQueue.length}), waiting...`);\n }\n await new Promise((resolve) => setTimeout(resolve, 1e3));\n continue;\n }\n const newAdUrl = this.nextAdRequestUrl(baseVastUrl);\n if (!newAdUrl || this.timing.failedVastUrls.has(newAdUrl) || this.timing.isUrlInCooldown(newAdUrl)) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n continue;\n }\n if (this.debug) {\n const queuedUrlsPreview = [...this.adRequestQueue, newAdUrl];\n console.log(\n `[CONTINUOUS-FETCH] Queued VAST URL (queue size: ${queuedUrlsPreview.length})`,\n { queuedUrls: queuedUrlsPreview }\n );\n }\n this.adRequestQueue.push(newAdUrl);\n const generationDelay = this.timing.consecutiveFailures > 0 ? Math.min(1e3 * Math.pow(2, this.timing.consecutiveFailures), 5e3) : 500;\n await new Promise((resolve) => setTimeout(resolve, generationDelay));\n }\n this.continuousFetchLoopRunning = false;\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] URL generation loop ended (queued: ${this.adRequestQueue.length})`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n }\n stopContinuousFetching() {\n this.continuousFetchingActive = false;\n this.continuousFetchLoopRunning = false;\n this.placeholder.hide();\n if (this.debug) {\n console.log(\"[CONTINUOUS-FETCH] Stopping continuous ad fetching\");\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad iteration\n // ───────────────────────────────────────────────────────────────\n async tryNextAvailableAdWithRateLimit() {\n if (!this.inAdBreak) {\n return;\n }\n const epoch = this.timing.adBreakEpoch;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n }\n this.handleAdPodComplete();\n return;\n }\n const backoffMultiplier = Math.pow(2, this.timing.consecutiveFailures);\n const backoffDelay = Math.min(this.timing.backoffBaseMs * backoffMultiplier, this.timing.maxBackoffMs);\n const effectiveMinInterval = this.timing.minAdRequestIntervalMs + (this.timing.consecutiveFailures > 0 ? backoffDelay : 0);\n const timeSinceLastRequest = Date.now() - this.timing.lastAdRequestTime;\n if (timeSinceLastRequest < effectiveMinInterval) {\n const waitTime = effectiveMinInterval - timeSinceLastRequest;\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Rate limiting: waiting ${waitTime}ms before next request (backoff: ${this.timing.consecutiveFailures} failures)`);\n }\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n }\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) {\n return;\n }\n return this.tryNextAvailableAd(0);\n }\n async tryNextAvailableAd(retryCount = 0) {\n if (!this.inAdBreak) {\n return;\n }\n const remaining = this.timing.getRemainingAdMs();\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Not enough time remaining (${remaining}ms) to start another ad, ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) {\n console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, ending ad break gracefully\");\n }\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Too many consecutive failures (${this.timing.consecutiveFailures}), ending ad break`);\n }\n this.handleAdPodComplete();\n return;\n }\n this.timing.cleanupTemporaryFailures();\n while (this.adRequestQueue.length > 0) {\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping permanently-failed URL, trying next...\");\n continue;\n }\n if (this.timing.isUrlInCooldown(nextAdUrl)) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping URL in cooldown (recent no-fill), trying next...\");\n continue;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Requesting next ad via HLS ad player (${this.timing.currentAdIndex + 1}, ${this.adRequestQueue.length} remaining in queue)`);\n }\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad request failed:\", errorMessage);\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n const maxRetries = 3;\n if (this.continuousFetchingActive && retryCount < maxRetries && remaining > 2e3) {\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Queue empty, waiting for URLs... (${retryCount + 1}/${maxRetries})`);\n }\n await new Promise((resolve) => setTimeout(resolve, 500));\n await this.tryNextAvailableAd(retryCount + 1);\n return;\n }\n if (!this.isShowingPlaceholder && remaining > 1e3) {\n this.showPlaceholderAndWaitForAds();\n } else {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] No more ads available, ending ad break\");\n this.handleAdPodComplete();\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n async playSingleAd(vastTagUrl) {\n const adPlayer = this.host.getAdPlayer();\n if (adPlayer.isAdPlaying()) return;\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n this.recreateAdController();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.timing.startAdRequestWatchdog(requestToken);\n try {\n await this.timing.enforceGlobalRateLimit();\n this.timing.lastAdRequestTime = Date.now();\n const ap = this.host.getAdPlayer();\n await ap.requestAds(vastTagUrl);\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: vastTagUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.clearAdRequestWatchdog();\n if (this.timing.activeAdRequestToken !== requestToken) return;\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n this.timing.rejectLoadedAdForDuration(ap);\n this.recreateAdController();\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n try {\n this.timing.startAdFailsafeTimer(requestToken);\n await ap.play();\n this.timing.markAdStarted();\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.consecutiveFailures = 0;\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (playError) {\n if (this.debug) console.error(\"[AD-ERROR] Failed to play ad:\", playError);\n if (this.timing.isTemporaryAdError(playError)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary play error - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent play error - URL blacklisted\");\n }\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw playError;\n }\n } catch (error) {\n const errorMessage = error?.message || \"\";\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", errorMessage);\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n if (this.debug) console.log(\"[AD-ERROR] Temporary error (no-fill/timeout) - URL can be retried after cooldown\");\n } else {\n this.timing.failedVastUrls.add(vastTagUrl);\n if (this.debug) console.log(\"[AD-ERROR] Permanent error - URL blacklisted:\", errorMessage);\n }\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Placeholder wait\n // ───────────────────────────────────────────────────────────────\n async showPlaceholderAndWaitForAds() {\n const remaining = this.timing.getRemainingAdMs();\n const waitTime = Math.min(this.maxPlaceholderDurationMs, remaining);\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.log(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping placeholder wait\");\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Skipping placeholder - too many consecutive failures\");\n this.handleAdPodComplete();\n return;\n }\n if (waitTime < 1e3) {\n this.handleAdPodComplete();\n return;\n }\n if (this.debug) {\n console.log(`[CONTINUOUS-FETCH] Showing placeholder for ${waitTime}ms while waiting for ad URLs`);\n }\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n const checkInterval = 300;\n const maxChecks = Math.floor(waitTime / checkInterval);\n for (let i = 0; i < maxChecks; i++) {\n await new Promise((resolve) => setTimeout(resolve, checkInterval));\n if (!this.inAdBreak) return;\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Too many failures during placeholder wait\");\n break;\n }\n if (!this.timing.hasTimeToStartAnotherAd()) {\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Not enough time remaining during placeholder wait, ending ad break\");\n break;\n }\n while (this.adRequestQueue.length > 0) {\n if (!this.timing.hasTimeToStartAnotherAd()) break;\n const nextAdUrl = this.adRequestQueue.shift();\n if (!nextAdUrl) continue;\n if (this.timing.failedVastUrls.has(nextAdUrl)) continue;\n if (this.timing.isUrlInCooldown(nextAdUrl)) continue;\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Ad URL available, requesting via HLS ad player\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n try {\n await this.playSingleAd(nextAdUrl);\n this.timing.consecutiveFailures = 0;\n } catch (error) {\n const errorMessage = error.message;\n if (errorMessage.includes(\"ad_duration_exceeds_budget\")) {\n await this.tryNextAvailableAdWithRateLimit();\n return;\n }\n if (!errorMessage.includes(\"permanently failed\") && !errorMessage.includes(\"in cooldown\")) {\n this.timing.consecutiveFailures++;\n }\n await this.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n }\n if (this.debug) console.log(\"[CONTINUOUS-FETCH] Placeholder timeout, ending ad break\");\n this.isShowingPlaceholder = false;\n this.host.getAdPlayer().hidePlaceholder();\n this.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n handleAdPodComplete() {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\");\n }\n this.timing.resetForBreakEnd();\n this.stopContinuousFetching();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.adRequestQueue = [];\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.host.getAdPlayer().stop().catch(() => {\n });\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure() {\n this.timing.consecutiveFailures++;\n this.timing.recordGamNoFill();\n const remaining = this.timing.getRemainingAdMs();\n if (this.debug) {\n console.log(\n `[CONTINUOUS-FETCH] Ad failure: remaining=${remaining}ms, queued ads=${this.adRequestQueue.length}, consecutiveFailures=${this.timing.consecutiveFailures}`,\n this.adRequestQueue.length > 0 ? { queuedUrls: [...this.adRequestQueue] } : {}\n );\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.log(`[CONTINUOUS-FETCH] Max consecutive failures reached (${this.timing.consecutiveFailures}), ending ad break gracefully`);\n this.handleAdPodComplete();\n return;\n }\n if (this.timing.hasTimeToStartAnotherAd()) {\n this.tryNextAvailableAdWithRateLimit();\n } else {\n if (this.debug) console.log(\"[AD-ERROR] Ad failed and not enough time remaining for another ad. Failed URLs:\", this.timing.failedVastUrls.size);\n this.handleAdPodComplete();\n }\n }\n};\n\n// src/player/StormcloudVideoPlayer.ts\nvar StormcloudVideoPlayer = class {\n constructor(config) {\n this.attached = false;\n this.palPlaybackStarted = false;\n initializePolyfills();\n const browserOverrides = getBrowserConfigOverrides();\n this.config = { ...browserOverrides, ...config };\n this.video = config.videoElement;\n logBrowserInfo(config.debugAdTiming);\n this.adPlayer = this.createAdPlayer(false);\n this.palNonce = createPalNonceManager();\n this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {\n onEarlyStartCue: (marker, fragmentSn, cueKey) => {\n this.startAdPrefetch(marker, fragmentSn, cueKey);\n },\n onPlaybackCue: (marker, cueKey) => {\n this.onScte35Marker(marker, cueKey);\n },\n isInAdBreak: () => this.adBreak.inAdBreak\n });\n this.adConfig = new AdConfigManager(this.config, this.video);\n this.timing = new AdTimingService(this.config, this.video, {\n onAdStopTimerFired: () => this.onAdStopTimerFired(),\n onAdStartTimerFired: (marker, cueKey) => {\n this.startScte35AdBreak(\n marker,\n cueKey,\n marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs\n );\n },\n onWatchdogTimeout: () => this.adBreak.handleAdFailure(),\n onFailsafeTimeout: () => this.adBreak.handleAdFailure(),\n getAdState: () => ({\n inAdBreak: this.adBreak.inAdBreak,\n showAds: this.adBreak.showAds,\n adPlaying: this.adPlayer.isAdPlaying()\n })\n });\n this.placeholder = new PlaceholderLayer(this.video, !!this.config.debugAdTiming);\n this.hlsEngine = new HlsEngine(this.config, this.video, this.cueManager, this.timing, {\n onManifestParsed: async (isLive) => this.onManifestParsed(isLive),\n onScte35Cue: (marker, context) => this.cueManager.onScte35Cue(marker, context),\n activatePendingCuesForFragment: (frag) => this.cueManager.activatePendingScte35CuesForFragment(frag),\n onFatalDestroy: () => this.destroy(),\n isInAdBreak: () => this.adBreak.inAdBreak,\n hasPendingAdBreak: () => this.adBreak.pendingAdBreak !== null\n });\n this.adBreak = new AdBreakOrchestrator(\n {\n config: this.config,\n video: this.video,\n getAdPlayer: () => this.adPlayer,\n setAdPlayer: (p) => {\n this.adPlayer = p;\n },\n createAdPlayer: (c) => this.createAdPlayer(c),\n shouldContinueLiveStreamDuringAds: () => this.shouldContinueLiveStreamDuringAds(),\n isLiveStream: () => this.hlsEngine.isLiveStream,\n getLiveSyncPosition: () => this.hlsEngine.getLiveSyncPosition(),\n restartHlsLoad: (position) => this.hlsEngine.restartLoadAt(position),\n reloadLiveStream: () => this.hlsEngine.reloadLiveStream(),\n recoverMediaError: () => this.hlsEngine.recoverMediaError(),\n requiresMediaPipelineResetAfterAds: () => requiresMediaPipelineResetAfterAds(),\n generatePodVastUrl: (base, breakDurationMs) => this.generatePodVastUrl(base, breakDurationMs),\n onAdClick: () => this.palNonce.sendAdClick(),\n onAdInteraction: (event) => this.palNonce.sendAdTouch(event)\n },\n this.timing,\n this.adConfig,\n this.cueManager,\n this.placeholder\n );\n }\n get debug() {\n return !!this.config.debugAdTiming;\n }\n createAdPlayer(continueLiveStreamDuringAds) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Creating HLS ad player\");\n }\n return createHlsAdPlayer(this.video, {\n continueLiveStreamDuringAds,\n ...this.config.licenseKey ? { licenseKey: this.config.licenseKey } : {},\n ...this.hlsEngine?.hls ? { mainHlsInstance: this.hlsEngine.hls } : {}\n });\n }\n generatePodVastUrl(baseUrl, breakDurationMs) {\n const podParams = this.adConfig.resolvePodParams(breakDurationMs);\n return this.adConfig.generatePodVastUrl(\n baseUrl,\n podParams,\n this.adPlayer,\n this.palNonce,\n this.adBreak.inAdBreak\n );\n }\n // ───────────────────────────────────────────────────────────────\n // Lifecycle\n // ───────────────────────────────────────────────────────────────\n async load() {\n if (!this.attached) {\n this.attach();\n }\n try {\n await this.adConfig.fetchAdConfiguration();\n } catch (error) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to fetch ad configuration:\",\n error\n );\n }\n }\n const palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;\n fetchConsentSignals().catch(() => ({})).then((signals) => {\n this.adConfig.consentSignals = signals;\n const muted = this.video.muted;\n return this.palNonce.generateNonce({\n videoWidth: this.video.offsetWidth || this.video.clientWidth || 640,\n videoHeight: this.video.offsetHeight || this.video.clientHeight || 480,\n adWillAutoPlay: !!this.config.autoplay,\n adWillPlayMuted: muted,\n playerVolume: muted ? 0 : this.video.volume,\n continuousPlayback: this.config.lowLatencyMode ?? false,\n ...palDescriptionUrl ? { descriptionUrl: palDescriptionUrl } : {},\n ...signals.storageAllowed != null ? { allowStorage: signals.storageAllowed } : {}\n });\n }).catch(() => {\n });\n this.adConfig.initializeTracking();\n if (this.hlsEngine.shouldUseNativeHls(() => this.getStreamType())) {\n await this.hlsEngine.setupNativeHls();\n const continueLiveStreamDuringAds = this.shouldContinueLiveStreamDuringAds();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Native HLS ad behavior:\", {\n isLive: this.hlsEngine.isLiveStream,\n continueLiveStreamDuringAds\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(continueLiveStreamDuringAds);\n this.adPlayer.initialize();\n return;\n }\n this.hlsEngine.setupHls();\n }\n async onManifestParsed(isLive) {\n if (this.hlsEngine.reloadingLiveStream) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Manifest re-parsed after hard reload \\u2014 skipping ad-player setup\");\n }\n return;\n }\n if (!this.adConfig.isVmapEnabled() && !isLive && this.adConfig.vmapBreaks.length === 0 && this.adConfig.apiVastTagUrl) {\n const prerollKey = \"synthetic-vod-preroll\";\n if (!this.adConfig.consumedVmapBreakIds.has(prerollKey)) {\n this.adConfig.vmapBreaks = [\n { id: prerollKey, startTimeMs: 0, vastTagUrl: this.adConfig.apiVastTagUrl }\n ];\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Injected synthetic VOD preroll from apiVastTagUrl\"\n );\n }\n }\n }\n if (this.debug) {\n const adBehavior = this.shouldContinueLiveStreamDuringAds() ? \"live (main video continues muted during ads)\" : \"vod (main video pauses during ads)\";\n console.log(\"[StormcloudVideoPlayer] Stream type detected:\", {\n isLive,\n allowNativeHls: this.config.allowNativeHls,\n adBehavior\n });\n }\n this.adPlayer.destroy();\n this.adPlayer = this.createAdPlayer(this.shouldContinueLiveStreamDuringAds());\n this.adPlayer.initialize();\n }\n attach() {\n if (this.attached) return;\n this.attached = true;\n this.video.autoplay = !!this.config.autoplay;\n this.video.muted = !!this.config.muted;\n this.adPlayer.initialize();\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.attachImaEventListeners();\n this.video.addEventListener(\"play\", () => {\n if (!this.palPlaybackStarted && !this.adPlayer.isAdPlaying()) {\n this.palPlaybackStarted = true;\n this.palNonce.sendPlaybackStart();\n }\n });\n this.endedHandler = () => {\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.onVideoEnded();\n };\n this.video.addEventListener(\"ended\", this.endedHandler);\n this.video.addEventListener(\"mousedown\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.video.addEventListener(\"touchstart\", (e) => {\n this.palNonce.sendAdTouch(e);\n });\n this.timeUpdateHandler = () => {\n this.onTimeUpdate(this.video.currentTime);\n };\n this.video.addEventListener(\"timeupdate\", this.timeUpdateHandler);\n this.emptiedHandler = () => {\n if (this.hlsEngine.nativeHlsMode && this.hlsEngine.videoSrcProtection && !this.adPlayer.isAdPlaying()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Video src was cleared, restoring:\",\n this.hlsEngine.videoSrcProtection\n );\n }\n const currentTime = this.video.currentTime;\n const wasPaused = this.video.paused;\n this.video.src = this.hlsEngine.videoSrcProtection;\n this.video.currentTime = currentTime;\n if (!wasPaused) {\n this.video.play().catch(() => {\n });\n }\n }\n };\n this.video.addEventListener(\"emptied\", this.emptiedHandler);\n }\n shouldContinueLiveStreamDuringAds() {\n if (this.config.pauseContentDuringAds) {\n return false;\n }\n if (this.hlsEngine.isLiveStream) {\n return true;\n }\n const duration = this.video.duration;\n if (!Number.isFinite(duration) || duration === Infinity) {\n return true;\n }\n return false;\n }\n // ───────────────────────────────────────────────────────────────\n // SCTE-35 marker orchestration\n // ───────────────────────────────────────────────────────────────\n onScte35Marker(marker, cueKey) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 marker detected:\", {\n type: marker.type,\n ptsSeconds: marker.ptsSeconds,\n durationSeconds: marker.durationSeconds,\n currentTime: this.video.currentTime,\n raw: marker.raw,\n hasPendingAdBreak: !!this.adBreak.pendingAdBreak\n });\n }\n if (marker.type === \"start\") {\n if (this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n const newDurationMs = marker.durationSeconds * 1e3;\n if (this.timing.expectedAdBreakDurationMs == null || newDurationMs > this.timing.expectedAdBreakDurationMs) {\n this.timing.setAdBreakDurationBoundary(newDurationMs);\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Updated ad break duration from subsequent marker: ${newDurationMs}ms, remaining: ${this.timing.getWallClockRemainingAdMs()}ms`\n );\n }\n }\n }\n return;\n }\n if (!this.adBreak.adDetectSentForCurrentBreak) {\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n }\n const hasPrefetchedAds = this.adBreak.pendingAdBreak && this.adBreak.pendingAdBreak.vastUrls.length > 0;\n const durationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.adBreak.pendingAdBreak?.marker.durationSeconds != null ? this.adBreak.pendingAdBreak.marker.durationSeconds * 1e3 : void 0;\n const isManifest = isManifestBasedMarker(marker);\n const forceImmediate = this.config.immediateManifestAds ?? true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad start decision:\", {\n isManifestMarker: isManifest,\n forceImmediate,\n hasPts: typeof marker.ptsSeconds === \"number\",\n hasPrefetchedAds\n });\n }\n if (isManifest && forceImmediate) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Starting ad immediately (manifest-based)${hasPrefetchedAds ? \" with prefetched ads\" : \"\"}`\n );\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n } else if (typeof marker.ptsSeconds === \"number\") {\n const tol = this.config.driftToleranceMs ?? 1e3;\n const nowMs = this.video.currentTime * 1e3;\n const estCurrentPtsMs = nowMs - this.timing.ptsDriftEmaMs;\n const deltaMs = Math.floor(marker.ptsSeconds * 1e3 - estCurrentPtsMs);\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] PTS-based timing calculation:\", {\n nowMs,\n estCurrentPtsMs,\n markerPtsMs: marker.ptsSeconds * 1e3,\n deltaMs,\n tolerance: tol\n });\n }\n if (deltaMs > tol) {\n if (this.debug) {\n console.log(`[StormcloudVideoPlayer] Scheduling ad start in ${deltaMs}ms`);\n }\n this.timing.expectedAdBreakDurationMs = durationMs;\n this.cueManager.scheduledScte35BreakKey = cueKey;\n this.timing.scheduleAdStartIn(deltaMs, marker, cueKey);\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (within tolerance)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n } else {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad immediately (fallback)\");\n }\n this.timing.clearAdStartTimer();\n this.startScte35AdBreak(marker, cueKey, durationMs);\n }\n return;\n }\n if (marker.type === \"progress\" && this.adBreak.inAdBreak) {\n if (marker.durationSeconds != null) {\n this.timing.setAdBreakDurationBoundary(marker.durationSeconds * 1e3);\n }\n this.timing.scheduleAdStopAtBreakBoundary();\n if (!this.adPlayer.isAdPlaying() && this.timing.activeAdRequestToken === null && this.adBreak.adRequestQueue.length > 0 && this.timing.hasTimeToStartAnotherAd()) {\n this.adBreak.tryNextAvailableAdWithRateLimit();\n }\n return;\n }\n if (marker.type === \"end\") {\n if (!this.video.muted) {\n this.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on SCTE end marker\");\n }\n }\n const remaining = this.timing.getRemainingAdMs();\n const adPlaying = this.adPlayer.isAdPlaying();\n const hasQueuedAds = this.adBreak.adRequestQueue.length > 0;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] SCTE-35 end marker received:\", {\n remaining,\n adPlaying,\n hasQueuedAds,\n activeAdRequest: this.timing.activeAdRequestToken !== null\n });\n }\n this.timing.scteAdBreakEndWallClockMs = Date.now();\n this.timing.clearAdStartTimer();\n this.timing.clearAdStopTimer();\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n return;\n }\n }\n startScte35AdBreak(marker, cueKey, durationMs) {\n this.adBreak.inAdBreak = true;\n this.cueManager.activeScte35BreakKey = cueKey ?? this.cueManager.pendingScte35CueKey;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.timing.currentAdBreakStartWallClockMs = this.timing.resolveScteBreakStartWallClockMs(marker);\n this.timing.setAdBreakDurationBoundary(durationMs);\n this.adBreak.handleAdStart(marker);\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n onAdStopTimerFired() {\n if (!this.adBreak.inAdBreak) return;\n const adPlaying = this.adPlayer.isAdPlaying();\n const checkIntervalMs = Math.max(\n 250,\n Math.floor(this.config.adBreakCheckIntervalMs ?? 1e3)\n );\n const maxExtensionMsConfig = this.config.maxAdBreakExtensionMs;\n const maxExtensionMs = typeof maxExtensionMsConfig === \"number\" && maxExtensionMsConfig > 0 ? maxExtensionMsConfig : 0;\n const endWallClockMs = this.timing.getAdBreakEndWallClockMs() ?? Date.now();\n const overrunMs = Math.max(0, Date.now() - endWallClockMs);\n const shouldExtendAdBreak = adPlaying && overrunMs < maxExtensionMs;\n if (shouldExtendAdBreak) {\n this.timing.scheduleAdStopCountdown(checkIntervalMs);\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Ad break boundary reached (overrun=${overrunMs}ms) - hard-stopping ads and resuming stream`\n );\n }\n if (adPlaying) {\n this.adPlayer.stop().catch(() => {\n });\n }\n this.adBreak.handleAdPodComplete();\n }\n // ───────────────────────────────────────────────────────────────\n // Ad prefetch\n // ───────────────────────────────────────────────────────────────\n startAdPrefetch(marker, fragmentSn, cueKey) {\n if (this.adBreak.pendingAdBreak || this.adBreak.inAdBreak) return;\n const scheduled = this.adConfig.findCurrentOrNextBreak(this.video.currentTime * 1e3);\n const tags = this.adConfig.selectVastTagsForBreak(scheduled);\n let baseVastUrl;\n if (tags && tags.length > 0 && tags[0]) {\n baseVastUrl = tags[0];\n } else if (this.adConfig.apiVastTagUrl) {\n baseVastUrl = this.adConfig.apiVastTagUrl;\n } else {\n if (this.debug) console.warn(\"[StormcloudVideoPlayer] No VAST URL available for prefetch\");\n return;\n }\n this.adConfig.beginNewAdPod();\n this.adConfig.podAssignedByPrefetch = true;\n const breakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : void 0;\n const generatedUrls = [this.generatePodVastUrl(baseVastUrl, breakDurationMs)];\n this.adBreak.pendingAdBreak = {\n marker,\n ...fragmentSn !== void 0 ? { detectedAtFragmentSn: fragmentSn } : {},\n vastUrls: generatedUrls,\n isFetching: false,\n fetchStartTime: Date.now()\n };\n this.cueManager.pendingScte35CueKey = cueKey;\n this.adBreak.adDetectSentForCurrentBreak = true;\n const detectPayload = {};\n if (marker.durationSeconds != null) detectPayload.durationSeconds = marker.durationSeconds;\n if (marker.ptsSeconds != null) detectPayload.ptsSeconds = marker.ptsSeconds;\n if (fragmentSn !== void 0) detectPayload.detectedAtFragmentSn = fragmentSn;\n sendAdDetectTracking(this.config.licenseKey, { source: \"scte35\", timestamp: (/* @__PURE__ */ new Date()).toISOString(), ...detectPayload }, buildAnalyticsContext(this.config)).catch(() => {\n });\n if (this.debug) {\n console.log(\"[PREFETCH] Starting ad prefetch for upcoming ad break\");\n console.log(`[PREFETCH] Pre-generated pod request URL`);\n }\n }\n // ───────────────────────────────────────────────────────────────\n // VMAP time-based ad breaks\n // ───────────────────────────────────────────────────────────────\n onTimeUpdate(currentTimeSec) {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const nowMs = currentTimeSec * 1e3;\n const breakToPlay = this.adConfig.findBreakForTime(nowMs);\n if (breakToPlay) {\n void this.handleVmapAdBreak(breakToPlay, nowMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad break failed gracefully:\", error);\n }\n });\n }\n }\n onVideoEnded() {\n if (!this.adConfig.isVmapEnabled() || this.adConfig.vmapBreaks.length === 0) return;\n if (this.adPlayer.isAdPlaying() || this.adBreak.inAdBreak) return;\n const durationMs = Number.isFinite(this.video.duration) ? Math.floor(this.video.duration * 1e3) : 0;\n const postroll = this.adConfig.vmapBreaks.find(\n (b) => b.startTimeMs === -1 && !this.adConfig.consumedVmapBreakIds.has(this.adConfig.getAdBreakKey(b))\n );\n if (postroll) {\n void this.handleVmapAdBreak(postroll, durationMs).catch((error) => {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP post-roll failed gracefully:\", error);\n }\n });\n }\n }\n async handleVmapAdBreak(adBreak, nowMs) {\n const key = this.adConfig.getAdBreakKey(adBreak);\n if (this.adConfig.consumedVmapBreakIds.has(key)) return;\n const breakStartMs = this.adConfig.resolveBreakStartMs(adBreak);\n if (breakStartMs == null) return;\n const durationMs = adBreak.durationMs ?? 0;\n const endMs = breakStartMs + durationMs;\n const inWindow = durationMs > 0 ? nowMs >= breakStartMs && nowMs < endMs : nowMs >= breakStartMs;\n if (inWindow) {\n this.adConfig.consumedVmapBreakIds.add(key);\n const tags = this.adConfig.selectVastTagsForBreak(adBreak);\n if (!tags || tags.length === 0) return;\n const first = tags[0];\n const rest = tags.slice(1);\n this.adBreak.adPodQueue = rest;\n this.adPlayer.updateOriginalMutedState(this.video.muted, this.video.volume);\n this.adBreak.showAds = true;\n this.adBreak.inAdBreak = true;\n this.timing.currentAdBreakStartWallClockMs = Date.now();\n try {\n await this.adBreak.playSingleAd(first);\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] VMAP ad request failed:\", error);\n }\n this.adBreak.handleAdPodComplete();\n }\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Public API\n // ───────────────────────────────────────────────────────────────\n getCurrentAdIndex() {\n return this.timing.currentAdIndex;\n }\n getTotalAdsInBreak() {\n return this.timing.totalAdsInBreak;\n }\n getAdRemainingMs() {\n return this.timing.getRemainingAdMs();\n }\n isAdPlaying() {\n return this.adBreak.inAdBreak && this.adPlayer.isAdPlaying();\n }\n isShowingAds() {\n return this.adBreak.showAds;\n }\n getStreamType() {\n const url = this.config.src.toLowerCase();\n if (url.includes(\".m3u8\") || url.includes(\"/hls/\") || url.includes(\"application/vnd.apple.mpegurl\")) {\n return \"hls\";\n }\n return \"other\";\n }\n shouldShowNativeControls() {\n const streamType = this.getStreamType();\n if (streamType === \"other\") {\n return !(this.config.showCustomControls ?? false);\n }\n return !!(this.config.allowNativeHls && !(this.config.showCustomControls ?? false));\n }\n isLive() {\n return this.hlsEngine.isLiveStream;\n }\n isLowLatencyStream() {\n return this.hlsEngine.isLowLatencyStream();\n }\n get videoElement() {\n return this.video;\n }\n toggleMute() {\n toggleMute(this.video, this.adPlayer, this.debug);\n }\n toggleFullscreen() {\n return toggleFullscreen(this.video, this.debug);\n }\n isMuted() {\n return isMuted(this.video, this.adPlayer);\n }\n setMuted(muted) {\n setMuted(this.video, this.adPlayer, muted, this.debug);\n }\n setVolume(volume) {\n setVolume(this.video, this.adPlayer, volume, this.debug);\n }\n getVolume() {\n return getVolume(this.video, this.adPlayer);\n }\n isFullscreen() {\n return isFullscreen();\n }\n resize() {\n resizePlayer(this.video, this.adPlayer, this.debug);\n }\n // ───────────────────────────────────────────────────────────────\n // Destroy\n // ───────────────────────────────────────────────────────────────\n destroy() {\n this.adBreak.stopContinuousFetching();\n this.timing.destroy();\n this.adBreak.clearPendingAdBreak();\n this.placeholder.destroy();\n if (this.timeUpdateHandler) {\n this.video.removeEventListener(\"timeupdate\", this.timeUpdateHandler);\n delete this.timeUpdateHandler;\n }\n if (this.endedHandler) {\n this.video.removeEventListener(\"ended\", this.endedHandler);\n delete this.endedHandler;\n }\n if (this.emptiedHandler) {\n this.video.removeEventListener(\"emptied\", this.emptiedHandler);\n delete this.emptiedHandler;\n }\n this.adConfig.destroyTracking();\n this.hlsEngine.destroy();\n this.adPlayer?.destroy();\n if (this.palPlaybackStarted) {\n this.palPlaybackStarted = false;\n this.palNonce.sendPlaybackEnd();\n }\n this.palNonce.reset();\n this.adBreak.adRequestQueue = [];\n this.timing.consecutiveFailures = 0;\n }\n};\n\n// src/ui/StormcloudVideoPlayer.tsx\nvar import_fa = require(\"react-icons/fa\");\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar ExpandIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 4H4v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 9V4h-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 20h5v-5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 15v5h5\" })\n ]\n }\n);\nvar CompressIcon = ({ size = 18 }) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"svg\",\n {\n width: size,\n height: size,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n \"aria-hidden\": \"true\",\n focusable: \"false\",\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M4 9h5V4\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M15 4v5h5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M20 15h-5v5\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"path\", { d: \"M9 20v-5H4\" })\n ]\n }\n);\nvar CRITICAL_PROPS = [\n \"src\",\n \"allowNativeHls\",\n \"isLiveStream\",\n \"licenseKey\",\n \"isVmap\",\n \"vmapUrl\",\n \"lowLatencyMode\",\n \"driftToleranceMs\",\n \"vastMode\",\n \"ctvAdRequest\"\n];\nvar CONTROLS_HIDE_DELAY = 3e3;\nvar DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;\nvar StormcloudVideoPlayerComponent = import_react.default.memo(\n (props) => {\n const {\n src,\n autoplay,\n muted,\n lowLatencyMode,\n allowNativeHls,\n isLiveStream,\n driftToleranceMs,\n immediateManifestAds,\n debugAdTiming,\n showCustomControls,\n hideLoadingIndicator,\n onVolumeToggle,\n onFullscreenToggle,\n onControlClick,\n onReady,\n wrapperClassName,\n wrapperStyle,\n className,\n style,\n controls,\n playsInline,\n preload,\n poster,\n children,\n licenseKey,\n vastMode,\n vastTagUrl,\n isVmap,\n vmapUrl,\n minSegmentsBeforePlay,\n ctvAdRequest,\n programTitle,\n channelName,\n ...restVideoAttrs\n } = props;\n const videoRef = (0, import_react.useRef)(null);\n const playerRef = (0, import_react.useRef)(null);\n const bufferingTimeoutRef = (0, import_react.useRef)(null);\n const controlsTimerRef = (0, import_react.useRef)(null);\n const wrapperRef = (0, import_react.useRef)(null);\n const [adStatus, setAdStatus] = import_react.default.useState({ showAds: false, currentIndex: 0, totalAds: 0, remainingSeconds: 0 });\n const [shouldShowNativeControls, setShouldShowNativeControls] = import_react.default.useState(true);\n const [isMuted2, setIsMuted] = import_react.default.useState(false);\n const [isFullscreen2, setIsFullscreen] = import_react.default.useState(false);\n const [isPlaying, setIsPlaying] = import_react.default.useState(false);\n const [currentTime, setCurrentTime] = import_react.default.useState(0);\n const [duration, setDuration] = import_react.default.useState(0);\n const [volume, setVolume2] = import_react.default.useState(1);\n const [playbackRate, setPlaybackRate] = import_react.default.useState(1);\n const [showVolumeSlider, setShowVolumeSlider] = import_react.default.useState(false);\n const [showSpeedMenu, setShowSpeedMenu] = import_react.default.useState(false);\n const [isLoading, setIsLoading] = import_react.default.useState(true);\n const [isBuffering, setIsBuffering] = import_react.default.useState(false);\n const [showCenterPlay, setShowCenterPlay] = import_react.default.useState(false);\n const [showLicenseWarning, setShowLicenseWarning] = import_react.default.useState(false);\n const [controlsVisible, setControlsVisible] = import_react.default.useState(true);\n const [viewportWidth, setViewportWidth] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerWidth : 1920\n );\n const [isPortrait, setIsPortrait] = import_react.default.useState(\n typeof window !== \"undefined\" ? window.innerHeight > window.innerWidth : false\n );\n const [playerAspectRatio, setPlayerAspectRatio] = import_react.default.useState(\n DEFAULT_PLAYER_ASPECT_RATIO\n );\n const getResponsiveScale = () => {\n if (viewportWidth < 480) return 0.7;\n if (viewportWidth < 768) return 0.8;\n if (viewportWidth < 1024) return 0.9;\n return 1;\n };\n const responsiveScale = getResponsiveScale();\n const resetControlsTimer = (0, import_react.useCallback)(() => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n setControlsVisible(true);\n controlsTimerRef.current = window.setTimeout(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, CONTROLS_HIDE_DELAY);\n }, [showVolumeSlider, showSpeedMenu]);\n const handleWrapperMouseMove = (0, import_react.useCallback)(() => {\n resetControlsTimer();\n }, [resetControlsTimer]);\n const handleWrapperMouseLeave = (0, import_react.useCallback)(() => {\n if (!showVolumeSlider && !showSpeedMenu) {\n setControlsVisible(false);\n }\n }, [showVolumeSlider, showSpeedMenu]);\n const formatTime = (seconds) => {\n if (!isFinite(seconds)) return \"0:00:00\";\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor(seconds % 3600 / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n return `${hours}:${minutes.toString().padStart(2, \"0\")}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n };\n const handlePlayPause = () => {\n if (videoRef.current) {\n if (videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n } else {\n videoRef.current.pause();\n setShowCenterPlay(true);\n }\n }\n resetControlsTimer();\n };\n const handleCenterPlayClick = () => {\n if (videoRef.current && videoRef.current.paused) {\n const hasValidSource = videoRef.current.src || videoRef.current.currentSrc && videoRef.current.currentSrc !== \"\" || videoRef.current.readyState >= 1;\n if (hasValidSource) {\n videoRef.current.play()?.catch((error) => {\n console.error(\"[StormcloudVideoPlayer] Failed to play:\", error);\n });\n setShowCenterPlay(false);\n } else {\n console.warn(\n \"[StormcloudVideoPlayer] Cannot play: video has no valid source\"\n );\n }\n }\n };\n const handleTimelineSeek = (e) => {\n if (videoRef.current && duration > 0 && isFinite(duration)) {\n const rect = e.currentTarget.getBoundingClientRect();\n const clickX = e.clientX - rect.left;\n const progress = Math.max(0, Math.min(1, clickX / rect.width));\n const newTime = progress * duration;\n if (isFinite(newTime) && newTime >= 0 && newTime <= duration) {\n videoRef.current.currentTime = newTime;\n }\n }\n resetControlsTimer();\n };\n const handleVolumeChange = (newVolume) => {\n if (playerRef.current && isFinite(newVolume)) {\n const clampedVolume = Math.max(0, Math.min(1, newVolume));\n playerRef.current.setVolume(clampedVolume);\n }\n };\n const handlePlaybackRateChange = (rate) => {\n if (videoRef.current && isFinite(rate) && rate > 0) {\n videoRef.current.playbackRate = rate;\n }\n setShowSpeedMenu(false);\n };\n const isHlsStream = src?.toLowerCase().includes(\".m3u8\") || src?.toLowerCase().includes(\"/hls/\");\n const isLiveUiMode = isLiveStream === true;\n const shouldShowEnhancedControls = showCustomControls && (isHlsStream ? !isLiveUiMode : true);\n const criticalPropsKey = (0, import_react.useMemo)(() => {\n return CRITICAL_PROPS.map((prop) => `${prop}:${props[prop]}`).join(\"|\");\n }, [\n src,\n allowNativeHls,\n isLiveStream,\n licenseKey,\n isVmap,\n vmapUrl,\n lowLatencyMode,\n driftToleranceMs,\n vastMode\n ]);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\") return;\n const el = videoRef.current;\n if (!el || !src) return;\n if (!licenseKey) {\n setShowLicenseWarning(true);\n setIsLoading(false);\n console.warn(\n \"StormcloudVideoPlayer: License key is required but not provided. Please set the licenseKey prop to use the player.\"\n );\n return;\n }\n setShowLicenseWarning(false);\n if (debugAdTiming) {\n console.log(\"[StormcloudUI] Initializing player, isLoading=true\");\n }\n if (playerRef.current) {\n try {\n playerRef.current.destroy();\n } catch {\n }\n playerRef.current = null;\n }\n const cfg = {\n src,\n videoElement: el\n };\n if (autoplay !== void 0) cfg.autoplay = autoplay;\n if (muted !== void 0) cfg.muted = muted;\n if (lowLatencyMode !== void 0) cfg.lowLatencyMode = lowLatencyMode;\n if (allowNativeHls !== void 0) cfg.allowNativeHls = allowNativeHls;\n if (isLiveStream !== void 0) cfg.isLiveStream = isLiveStream;\n if (driftToleranceMs !== void 0)\n cfg.driftToleranceMs = driftToleranceMs;\n if (immediateManifestAds !== void 0)\n cfg.immediateManifestAds = immediateManifestAds;\n if (debugAdTiming !== void 0) cfg.debugAdTiming = debugAdTiming;\n if (showCustomControls !== void 0)\n cfg.showCustomControls = showCustomControls;\n if (onVolumeToggle !== void 0) cfg.onVolumeToggle = onVolumeToggle;\n if (onFullscreenToggle !== void 0)\n cfg.onFullscreenToggle = onFullscreenToggle;\n if (onControlClick !== void 0) cfg.onControlClick = onControlClick;\n if (licenseKey !== void 0) cfg.licenseKey = licenseKey;\n if (vastMode !== void 0) cfg.vastMode = vastMode;\n if (vastTagUrl !== void 0) cfg.vastTagUrl = vastTagUrl;\n if (isVmap !== void 0) cfg.isVmap = isVmap;\n if (vmapUrl !== void 0) cfg.vmapUrl = vmapUrl;\n if (minSegmentsBeforePlay !== void 0)\n cfg.minSegmentsBeforePlay = minSegmentsBeforePlay;\n if (ctvAdRequest !== void 0) cfg.ctvAdRequest = ctvAdRequest;\n if (programTitle !== void 0) cfg.programTitle = programTitle;\n if (channelName !== void 0) cfg.channelName = channelName;\n const player = new StormcloudVideoPlayer(cfg);\n playerRef.current = player;\n player.load().then(() => {\n const showNative = player.shouldShowNativeControls();\n setShouldShowNativeControls(showNative);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Player loaded successfully, waiting for video ready\"\n );\n }\n onReady?.(player);\n }).catch((error) => {\n console.error(\n \"StormcloudVideoPlayer: Failed to load player:\",\n error\n );\n setIsLoading(false);\n onReady?.(player);\n });\n return () => {\n try {\n player.destroy();\n } catch {\n }\n playerRef.current = null;\n };\n }, [criticalPropsKey]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n try {\n if (autoplay !== void 0 && playerRef.current.videoElement) {\n playerRef.current.videoElement.autoplay = autoplay;\n }\n if (muted !== void 0 && !playerRef.current.isShowingAds()) {\n playerRef.current.setMuted(muted);\n }\n } catch (error) {\n console.warn(\"Failed to update player properties:\", error);\n }\n }, [autoplay, muted]);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current) return;\n const checkAdStatus = () => {\n if (playerRef.current) {\n const showAdsFromMethod = playerRef.current.isShowingAds();\n const showAdsFromAttribute = videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n const showAds = showAdsFromMethod || showAdsFromAttribute;\n const currentIndex = playerRef.current.getCurrentAdIndex();\n const totalAds = playerRef.current.getTotalAdsInBreak();\n const remainingMs = playerRef.current.getAdRemainingMs();\n const remainingSeconds = showAds ? Math.max(0, Math.ceil(remainingMs / 1e3)) : 0;\n setAdStatus((prev) => {\n if (prev.showAds !== showAds || prev.currentIndex !== currentIndex || prev.totalAds !== totalAds || prev.remainingSeconds !== remainingSeconds) {\n if (showAds && !prev.showAds) {\n setShowCenterPlay(false);\n }\n return { showAds, currentIndex, totalAds, remainingSeconds };\n }\n return prev;\n });\n }\n };\n const interval = setInterval(checkAdStatus, 50);\n return () => clearInterval(interval);\n }, []);\n (0, import_react.useEffect)(() => {\n if (typeof window === \"undefined\" || !playerRef.current) return;\n const handleResize = () => {\n if (playerRef.current && videoRef.current) {\n if (typeof playerRef.current.resize === \"function\") {\n playerRef.current.resize();\n }\n }\n setViewportWidth(window.innerWidth);\n setIsPortrait(window.innerHeight > window.innerWidth);\n };\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n (0, import_react.useEffect)(() => {\n if (!playerRef.current || !videoRef.current) return;\n const updateStates = () => {\n if (playerRef.current && videoRef.current) {\n setIsMuted(playerRef.current.isMuted());\n setIsPlaying(!videoRef.current.paused);\n const currentTimeValue = videoRef.current.currentTime;\n setCurrentTime(isFinite(currentTimeValue) ? currentTimeValue : 0);\n const durationValue = videoRef.current.duration;\n setDuration(isFinite(durationValue) ? durationValue : 0);\n const volumeValue = playerRef.current.getVolume();\n setVolume2(\n isFinite(volumeValue) ? Math.max(0, Math.min(1, volumeValue)) : 1\n );\n const rateValue = videoRef.current.playbackRate;\n setPlaybackRate(\n isFinite(rateValue) && rateValue > 0 ? rateValue : 1\n );\n }\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n const interval = setInterval(updateStates, 200);\n const handleFullscreenChange = () => {\n setIsFullscreen(\n document.fullscreenElement === wrapperRef.current\n );\n };\n document.addEventListener(\"fullscreenchange\", handleFullscreenChange);\n return () => {\n clearInterval(interval);\n document.removeEventListener(\n \"fullscreenchange\",\n handleFullscreenChange\n );\n };\n }, []);\n (0, import_react.useEffect)(() => {\n if (!videoRef.current) return;\n const handleLoadedMetadata = () => {\n const video2 = videoRef.current;\n if (video2) {\n if (video2.videoWidth > 0 && video2.videoHeight > 0) {\n setPlayerAspectRatio(video2.videoWidth / video2.videoHeight);\n }\n void video2.offsetHeight;\n }\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadedmetadata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadedData = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadeddata, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleLoadStart = () => {\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: loadstart, readyState:\",\n videoRef.current?.readyState\n );\n }\n };\n const handleCanPlay = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplay, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleCanPlayThrough = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: canplaythrough, readyState:\",\n videoRef.current?.readyState,\n \"- clearing loading state, isLoading=false\"\n );\n }\n };\n const handleWaiting = () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n }\n bufferingTimeoutRef.current = window.setTimeout(() => {\n setIsBuffering(true);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video buffering detected (after 300ms delay), readyState:\",\n videoRef.current?.readyState,\n \"- showing spinner, isBuffering=true\"\n );\n }\n }, 300);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: waiting, readyState:\",\n videoRef.current?.readyState,\n \"- buffering delay started (300ms)\"\n );\n }\n };\n const handlePlaying = () => {\n setIsLoading(false);\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n setIsBuffering(false);\n setShowCenterPlay(false);\n if (debugAdTiming) {\n console.log(\n \"[StormcloudUI] Video event: playing, readyState:\",\n videoRef.current?.readyState,\n \"- playback started, isLoading=false, isBuffering=false\"\n );\n }\n };\n const handlePause = () => {\n const isAdActive = playerRef.current?.isShowingAds() || videoRef.current?.dataset?.stormcloudAdPlaying === \"true\";\n if (playerRef.current && !isAdActive) {\n setShowCenterPlay(true);\n } else {\n setShowCenterPlay(false);\n }\n };\n const handleEnded = () => {\n setShowCenterPlay(true);\n };\n const video = videoRef.current;\n video.addEventListener(\"loadstart\", handleLoadStart);\n video.addEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.addEventListener(\"loadeddata\", handleLoadedData);\n video.addEventListener(\"canplay\", handleCanPlay);\n video.addEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.addEventListener(\"waiting\", handleWaiting);\n video.addEventListener(\"playing\", handlePlaying);\n video.addEventListener(\"pause\", handlePause);\n video.addEventListener(\"ended\", handleEnded);\n if (video.paused) {\n setShowCenterPlay(true);\n }\n return () => {\n if (bufferingTimeoutRef.current) {\n clearTimeout(bufferingTimeoutRef.current);\n bufferingTimeoutRef.current = null;\n }\n video.removeEventListener(\"loadstart\", handleLoadStart);\n video.removeEventListener(\"loadedmetadata\", handleLoadedMetadata);\n video.removeEventListener(\"loadeddata\", handleLoadedData);\n video.removeEventListener(\"canplay\", handleCanPlay);\n video.removeEventListener(\"canplaythrough\", handleCanPlayThrough);\n video.removeEventListener(\"waiting\", handleWaiting);\n video.removeEventListener(\"playing\", handlePlaying);\n video.removeEventListener(\"pause\", handlePause);\n video.removeEventListener(\"ended\", handleEnded);\n };\n }, [debugAdTiming]);\n (0, import_react.useEffect)(() => {\n setPlayerAspectRatio(DEFAULT_PLAYER_ASPECT_RATIO);\n }, [src]);\n (0, import_react.useEffect)(() => {\n return () => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n };\n }, []);\n const progressPercent = duration > 0 ? currentTime / duration * 100 : 0;\n const VolumeIcon = isMuted2 || volume === 0 ? import_fa.FaVolumeMute : volume < 0.5 ? import_fa.FaVolumeDown : import_fa.FaVolumeUp;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"style\", { children: `\n @keyframes sc-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n }\n @keyframes sc-loading-glow {\n 0%, 100% { opacity: 0.85; transform: scale(1); }\n 50% { opacity: 1; transform: scale(1.05); }\n }\n @keyframes sc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n }\n @keyframes sc-fade-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n .sc-wrapper:fullscreen,\n .sc-wrapper:has(*:fullscreen) {\n border-radius: 0 !important;\n box-shadow: none !important;\n width: 100vw !important;\n height: 100vh !important;\n max-width: 100vw !important;\n max-height: 100vh !important;\n position: fixed !important;\n top: 0 !important;\n left: 0 !important;\n z-index: 999999 !important;\n background: #000 !important;\n display: flex !important;\n align-items: center !important;\n justify-content: center !important;\n }\n .sc-ctrl-btn {\n background: none;\n border: none;\n color: #fff;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n padding: 8px;\n transition: background 0.15s ease, opacity 0.15s ease;\n opacity: 0.9;\n }\n .sc-ctrl-btn:hover {\n opacity: 1;\n background: rgba(255, 255, 255, 0.1);\n }\n .sc-ctrl-btn:active {\n opacity: 0.7;\n }\n .sc-controls-bar {\n transition: opacity 0.35s ease, transform 0.35s ease;\n }\n .sc-progress-track:hover .sc-progress-thumb {\n transform: translate(-50%, -50%) scale(1) !important;\n }\n .sc-loading-hidden .sc-loading-indicator {\n display: none !important;\n }\n ` }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n ref: wrapperRef,\n className: `sc-wrapper ${wrapperClassName || \"\"}`,\n onMouseMove: handleWrapperMouseMove,\n onMouseLeave: handleWrapperMouseLeave,\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n position: isFullscreen2 ? \"fixed\" : \"relative\",\n top: isFullscreen2 ? 0 : void 0,\n left: isFullscreen2 ? 0 : void 0,\n overflow: \"hidden\",\n width: isFullscreen2 ? \"100vw\" : \"100%\",\n height: isFullscreen2 ? \"100vh\" : \"auto\",\n minHeight: isFullscreen2 ? \"100vh\" : \"auto\",\n aspectRatio: isFullscreen2 ? void 0 : playerAspectRatio,\n maxWidth: isFullscreen2 ? \"100vw\" : \"100%\",\n maxHeight: isFullscreen2 ? \"100vh\" : \"none\",\n zIndex: isFullscreen2 ? 999999 : void 0,\n backgroundColor: \"#000\",\n borderRadius: isFullscreen2 ? 0 : void 0,\n boxShadow: isFullscreen2 ? \"none\" : void 0,\n ...wrapperStyle\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"video\",\n {\n ref: videoRef,\n className,\n style: {\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n maxWidth: \"100%\",\n maxHeight: isFullscreen2 ? \"100%\" : \"none\",\n objectFit: isFullscreen2 ? \"cover\" : \"contain\",\n backgroundColor: \"#000\",\n aspectRatio: isFullscreen2 ? \"unset\" : void 0,\n ...style\n },\n controls: shouldShowNativeControls && controls && !showCustomControls,\n playsInline,\n preload,\n poster,\n ...restVideoAttrs,\n children\n }\n ),\n (isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-loading-indicator\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 20,\n width: `${Math.max(34, 38 * responsiveScale)}px`,\n height: `${Math.max(34, 38 * responsiveScale)}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n animation: \"sc-loading-glow 1.4s ease-in-out infinite\",\n filter: \"drop-shadow(0 6px 14px rgba(0, 0, 0, 0.55))\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n border: \"3px solid rgba(255, 255, 255, 0.25)\",\n borderTopColor: \"#ff0000\",\n borderRightColor: \"rgba(255, 255, 255, 0.85)\",\n animation: \"sc-spin 0.8s linear infinite\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"7px\",\n height: \"7px\",\n borderRadius: \"50%\",\n background: \"#ff0000\",\n boxShadow: \"0 0 10px rgba(255, 0, 0, 0.65)\"\n }\n }\n )\n ]\n }\n ),\n showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 25,\n background: \"rgba(220, 38, 38, 0.92)\",\n backdropFilter: \"blur(24px)\",\n color: \"white\",\n padding: \"28px 36px\",\n borderRadius: \"14px\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n boxShadow: \"0 24px 64px rgba(0, 0, 0, 0.5)\",\n textAlign: \"center\",\n maxWidth: \"400px\",\n margin: \"0 16px\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { fontSize: \"18px\", fontWeight: \"700\", marginBottom: \"10px\", letterSpacing: \"-0.02em\" }, children: \"License Key Required\" }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { fontSize: \"13px\", lineHeight: \"1.6\", color: \"rgba(255, 255, 255, 0.85)\" }, children: [\n \"Please provide a valid license key to use the Stormcloud Video Player.\",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"br\", {}),\n \"Contact your administrator for licensing information.\"\n ] })\n ]\n }\n ),\n adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${12 * responsiveScale}px`,\n left: `${12 * responsiveScale}px`,\n zIndex: 50,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n pointerEvents: \"none\",\n animation: \"sc-fade-in 0.3s ease\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n background: \"rgba(234, 179, 8, 0.95)\",\n color: \"#111\",\n padding: `${4 * responsiveScale}px ${12 * responsiveScale}px`,\n borderRadius: \"6px\",\n fontSize: `${11 * responsiveScale}px`,\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n boxShadow: \"0 2px 12px rgba(234, 179, 8, 0.35)\"\n },\n children: `Ad ${Math.max(1, adStatus.currentIndex)}`\n }\n )\n }\n ),\n showCenterPlay && !isLoading && !isBuffering && !showLicenseWarning && !adStatus.showAds && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: handleCenterPlayClick,\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n zIndex: 15,\n cursor: \"pointer\",\n background: \"rgba(0, 0, 0, 0.55)\",\n backdropFilter: \"blur(8px)\",\n borderRadius: \"50%\",\n width: `${92 * responsiveScale}px`,\n height: `${92 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.2s ease, transform 0.2s ease\",\n animation: \"sc-fade-in 0.2s ease\"\n },\n onMouseEnter: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.72)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1.06)\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.background = \"rgba(0, 0, 0, 0.55)\";\n e.currentTarget.style.transform = \"translate(-50%, -50%) scale(1)\";\n },\n title: \"Play\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n import_fa.FaPlay,\n {\n size: Math.max(24, 32 * responsiveScale),\n color: \"white\",\n style: { marginLeft: \"4px\" }\n }\n )\n }\n ),\n shouldShowEnhancedControls && !showLicenseWarning ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: 0,\n left: 0,\n right: 0,\n background: \"linear-gradient(0deg, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.35) 60%, transparent 100%)\",\n padding: `${20 * responsiveScale}px ${12 * responsiveScale}px ${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible || adStatus.showAds ? 1 : 0,\n transform: controlsVisible || adStatus.showAds ? \"translateY(0)\" : \"translateY(6px)\",\n pointerEvents: controlsVisible || adStatus.showAds ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-progress-track\",\n style: {\n width: \"100%\",\n height: \"3px\",\n background: \"rgba(255, 255, 255, 0.2)\",\n borderRadius: \"1.5px\",\n marginBottom: `${8 * responsiveScale}px`,\n cursor: \"pointer\",\n position: \"relative\",\n transition: \"height 0.1s ease\"\n },\n onClick: handleTimelineSeek,\n onMouseEnter: (e) => {\n e.currentTarget.style.height = \"5px\";\n },\n onMouseLeave: (e) => {\n e.currentTarget.style.height = \"3px\";\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"1.5px\",\n width: `${progressPercent}%`,\n transition: \"width 0.15s linear\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n className: \"sc-progress-thumb\",\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${progressPercent}%`,\n transform: \"translate(-50%, -50%) scale(0)\",\n width: \"13px\",\n height: \"13px\",\n background: adStatus.showAds ? \"#f5c518\" : \"#ff0000\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 4px rgba(0, 0, 0, 0.3)\",\n transition: \"transform 0.1s ease, left 0.15s linear\"\n }\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n color: \"white\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: handlePlayPause,\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isPlaying ? \"Pause\" : \"Play\",\n children: isPlaying ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPause, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_fa.FaPlay, { size: Math.max(14, 18 * responsiveScale), style: { marginLeft: \"2px\" } })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n paddingRight: `${6 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${8 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"Roboto, 'Segoe UI', Arial, sans-serif\",\n color: \"rgba(255, 255, 255, 0.9)\",\n display: viewportWidth < 480 ? \"none\" : \"block\",\n fontVariantNumeric: \"tabular-nums\",\n userSelect: \"none\",\n marginLeft: `${4 * responsiveScale}px`\n },\n children: [\n formatTime(currentTime),\n \" \",\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"span\", { style: { color: \"rgba(255,255,255,0.5)\" }, children: \"/\" }),\n \" \",\n formatTime(duration)\n ]\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n gap: `${8 * responsiveScale}px`\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\"div\", { style: { position: \"relative\", display: viewportWidth < 600 ? \"none\" : \"block\" }, children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n setShowSpeedMenu(!showSpeedMenu);\n resetControlsTimer();\n },\n style: {\n padding: `${6 * responsiveScale}px ${10 * responsiveScale}px`,\n borderRadius: `${6 * responsiveScale}px`,\n fontSize: `${13 * responsiveScale}px`,\n fontFamily: \"'SF Mono', 'Cascadia Code', monospace\",\n fontWeight: \"600\",\n minHeight: `${32 * responsiveScale}px`\n },\n title: \"Playback Speed\",\n children: [\n playbackRate,\n \"x\"\n ]\n }\n ),\n showSpeedMenu && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"8px\",\n background: \"rgba(0, 0, 0, 0.8)\",\n backdropFilter: \"blur(24px)\",\n WebkitBackdropFilter: \"blur(24px)\",\n borderRadius: \"10px\",\n border: \"1px solid rgba(255, 255, 255, 0.1)\",\n overflow: \"hidden\",\n minWidth: \"80px\",\n boxShadow: \"0 12px 40px rgba(0, 0, 0, 0.5)\",\n animation: \"sc-fade-in 0.15s ease\"\n },\n children: [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2].map((speed) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"button\",\n {\n onClick: () => handlePlaybackRateChange(speed),\n style: {\n display: \"block\",\n width: \"100%\",\n padding: `${8 * responsiveScale}px ${14 * responsiveScale}px`,\n background: playbackRate === speed ? \"rgba(255, 255, 255, 0.12)\" : \"transparent\",\n border: \"none\",\n color: playbackRate === speed ? \"#fff\" : \"rgba(255, 255, 255, 0.7)\",\n cursor: \"pointer\",\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Mono', monospace\",\n fontWeight: playbackRate === speed ? \"700\" : \"500\",\n textAlign: \"center\",\n transition: \"background 0.15s ease, color 0.15s ease\"\n },\n onMouseEnter: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"rgba(255, 255, 255, 0.08)\";\n e.target.style.color = \"#fff\";\n }\n },\n onMouseLeave: (e) => {\n if (playbackRate !== speed) {\n e.target.style.background = \"transparent\";\n e.target.style.color = \"rgba(255, 255, 255, 0.7)\";\n }\n },\n children: [\n speed,\n \"x\"\n ]\n },\n speed\n ))\n }\n )\n ] }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ]\n }\n )\n ]\n }\n ) : showCustomControls && !showLicenseWarning && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: `${10 * responsiveScale}px`,\n left: `${10 * responsiveScale}px`,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transition: \"opacity 0.35s ease\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: \"8px\",\n height: \"8px\",\n borderRadius: \"50%\",\n background: \"#ff3b30\",\n animation: \"sc-pulse 1.5s ease-in-out infinite\",\n flexShrink: 0\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"span\",\n {\n style: {\n fontSize: `${12 * responsiveScale}px`,\n fontFamily: \"'SF Pro Display', 'Segoe UI', Arial, sans-serif\",\n fontWeight: 700,\n letterSpacing: \"0.08em\",\n color: \"#fff\",\n textShadow: \"0 1px 3px rgba(0,0,0,0.6)\",\n userSelect: \"none\"\n },\n children: \"LIVE\"\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n className: \"sc-controls-bar\",\n style: {\n position: \"absolute\",\n bottom: `${10 * responsiveScale}px`,\n right: `${10 * responsiveScale}px`,\n display: \"flex\",\n flexDirection: isPortrait ? \"column\" : \"row\",\n alignItems: isPortrait ? \"flex-end\" : \"center\",\n gap: `${8 * responsiveScale}px`,\n zIndex: 10,\n opacity: controlsVisible ? 1 : 0,\n transform: controlsVisible ? \"translateY(0)\" : \"translateY(4px)\",\n pointerEvents: controlsVisible ? \"auto\" : \"none\"\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n display: \"flex\",\n alignItems: \"center\",\n background: \"rgba(0, 0, 0, 0.6)\",\n borderRadius: `${18 * responsiveScale}px`,\n padding: \"2px\",\n paddingRight: `${8 * responsiveScale}px`\n },\n onMouseEnter: () => setShowVolumeSlider(true),\n onMouseLeave: () => setShowVolumeSlider(false),\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (playerRef.current) playerRef.current.toggleMute();\n onVolumeToggle?.();\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`\n },\n title: isMuted2 ? \"Unmute\" : \"Mute\",\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VolumeIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n width: showVolumeSlider ? `${68 * responsiveScale}px` : \"0px\",\n overflow: \"hidden\",\n transition: \"width 0.2s cubic-bezier(0.4, 0, 0.2, 1)\",\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: showVolumeSlider ? `${3 * responsiveScale}px` : \"0\",\n paddingRight: showVolumeSlider ? `${10 * responsiveScale}px` : \"0\"\n },\n children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(\n \"div\",\n {\n style: {\n position: \"relative\",\n width: `${56 * responsiveScale}px`,\n height: \"3px\",\n cursor: \"pointer\",\n borderRadius: \"1.5px\"\n },\n onMouseDown: (e) => {\n e.preventDefault();\n const el = e.currentTarget;\n const move = (ev) => {\n const r2 = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (ev.clientX - r2.left) / r2.width)));\n };\n const up = () => {\n document.removeEventListener(\"mousemove\", move);\n document.removeEventListener(\"mouseup\", up);\n };\n document.addEventListener(\"mousemove\", move);\n document.addEventListener(\"mouseup\", up);\n const r = el.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n onClick: (e) => {\n e.stopPropagation();\n const r = e.currentTarget.getBoundingClientRect();\n handleVolumeChange(Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)));\n },\n children: [\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\"div\", { style: { position: \"absolute\", inset: 0, background: \"rgba(255, 255, 255, 0.2)\", borderRadius: \"1.5px\" } }),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n bottom: 0,\n width: `${(isMuted2 ? 0 : volume) * 100}%`,\n background: \"#fff\",\n borderRadius: \"1.5px\",\n transition: \"width 0.1s ease-out\"\n }\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n style: {\n position: \"absolute\",\n top: \"50%\",\n left: `${(isMuted2 ? 0 : volume) * 100}%`,\n transform: \"translate(-50%, -50%)\",\n width: \"12px\",\n height: \"12px\",\n background: \"#fff\",\n borderRadius: \"50%\",\n boxShadow: \"0 0 3px rgba(0, 0, 0, 0.3)\",\n transition: \"left 0.1s ease-out\"\n }\n }\n )\n ]\n }\n )\n }\n )\n ]\n }\n ),\n /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"button\",\n {\n className: \"sc-ctrl-btn\",\n onClick: () => {\n if (onFullscreenToggle) {\n onFullscreenToggle();\n } else if (wrapperRef.current) {\n if (!document.fullscreenElement) {\n wrapperRef.current.requestFullscreen().catch(() => {\n });\n } else {\n document.exitFullscreen().catch(() => {\n });\n }\n }\n resetControlsTimer();\n },\n style: {\n padding: `${8 * responsiveScale}px`,\n borderRadius: \"50%\",\n minWidth: `${36 * responsiveScale}px`,\n minHeight: `${36 * responsiveScale}px`,\n background: \"rgba(0, 0, 0, 0.6)\"\n },\n title: isFullscreen2 ? \"Exit Fullscreen\" : \"Enter Fullscreen\",\n children: isFullscreen2 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CompressIcon, { size: Math.max(14, 18 * responsiveScale) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ExpandIcon, { size: Math.max(14, 18 * responsiveScale) })\n }\n )\n ]\n }\n )\n ] }),\n onControlClick && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(\n \"div\",\n {\n onClick: onControlClick,\n style: {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n cursor: \"pointer\"\n }\n }\n )\n ]\n }\n )\n ] });\n },\n (prevProps, nextProps) => {\n for (const prop of CRITICAL_PROPS) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const uiProps = [\n \"autoplay\",\n \"muted\",\n \"controls\",\n \"showCustomControls\",\n \"className\",\n \"style\",\n \"wrapperClassName\",\n \"wrapperStyle\",\n \"playsInline\",\n \"preload\",\n \"poster\",\n \"children\"\n ];\n for (const prop of uiProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n const callbackProps = [\n \"onReady\",\n \"onVolumeToggle\",\n \"onFullscreenToggle\",\n \"onControlClick\"\n ];\n for (const prop of callbackProps) {\n if (prevProps[prop] !== nextProps[prop]) {\n return false;\n }\n }\n return true;\n }\n);\n\n// src/StormcloudPlayer.tsx\nvar import_react6 = __toESM(require(\"react\"), 1);\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_react2 = require(\"react\");\nvar lazy = import_react2.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 supportsWebKitPresentationMode = () => {\n if (typeof window === \"undefined\") return false;\n const video = document.createElement(\"video\");\n return \"webkitSupportsPresentationMode\" in video;\n};\nvar randomString = () => {\n return Math.random().toString(36).substr(2, 9);\n};\nvar parseQuery = (url) => {\n const query = {};\n const queryString = url.split(\"?\")[1] || \"\";\n if (!queryString) return query;\n const manualParse = (qs) => {\n qs.split(\"&\").forEach((param) => {\n const [key, value] = param.split(\"=\");\n if (key) {\n try {\n query[decodeURIComponent(key)] = value ? decodeURIComponent(value.replace(/\\+/g, \" \")) : \"\";\n } catch (e) {\n query[key] = value || \"\";\n }\n }\n });\n };\n if (typeof URLSearchParams !== \"undefined\") {\n try {\n const params = new URLSearchParams(queryString);\n params.forEach((value, key) => {\n query[key] = value;\n });\n return query;\n } catch (e) {\n manualParse(queryString);\n }\n } else {\n manualParse(queryString);\n }\n return query;\n};\nvar merge = (target, ...sources) => {\n if (!sources.length) return target;\n const source = sources.shift();\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n merge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n return merge(target, ...sources);\n};\nvar isObject = (item) => {\n return item && typeof item === \"object\" && !Array.isArray(item);\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);\nvar SUPPORTS_HLS = () => {\n if (!IS_BROWSER) return false;\n const video = document.createElement(\"video\");\n return Boolean(video.canPlayType(\"application/vnd.apple.mpegurl\"));\n};\nvar SUPPORTS_DASH = () => {\n if (!IS_BROWSER) return false;\n const video = document.createElement(\"video\");\n return Boolean(video.canPlayType(\"application/dash+xml\"));\n};\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_react3 = require(\"react\");\nvar HlsPlayer = class extends import_react3.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_react4 = require(\"react\");\nvar FilePlayer = class extends import_react4.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_react5 = __toESM(require(\"react\"), 1);\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react5.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_react5.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_react6.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_react6.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_react6.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_react6.default.createElement(\n Wrapper,\n {\n ref: wrapperRef,\n style: { ...style, width, height },\n ...attributes\n },\n import_react6.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 DEFAULT_TRACKING_INGEST_CONFIG,\n IS_BROWSER,\n IS_GLOBAL,\n IS_IOS,\n IS_SAFARI,\n SUPPORTS_DASH,\n SUPPORTS_HLS,\n StormcloudPlayer,\n StormcloudVideoPlayer,\n StormcloudVideoPlayerComponent,\n applyTrackingIngestConfig,\n buildAnalyticsContext,\n canPlay,\n configureTrackingIngest,\n createHlsAdPlayer,\n createPalNonceManager,\n createStormcloudPlayer,\n detectBrowser,\n getBrowserConfigOverrides,\n getBrowserID,\n getClientInfo,\n ingestPlayerTracking,\n initializePolyfills,\n isMediaStream,\n isTrackingIngestEnabled,\n lazy,\n logBrowserInfo,\n merge,\n omit,\n parseQuery,\n players,\n randomString,\n requiresMediaPipelineResetAfterAds,\n sendAdDetectTracking,\n sendAdImpressionTracking,\n sendAdLoadedTracking,\n sendHeartbeat,\n sendInitialTracking,\n supportsFeature,\n supportsModernJS,\n supportsWebKitPresentationMode,\n trackingIngestConfig\n});\n"]}
|