stormcloud-video-player 0.8.68 → 0.8.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/stormcloud-vp.min.js +2 -2
  2. package/lib/Player.cjs +30 -8
  3. package/lib/Player.cjs.map +1 -1
  4. package/lib/Player.d.cts +2 -1
  5. package/lib/StormcloudPlayer.cjs +6104 -5114
  6. package/lib/StormcloudPlayer.cjs.map +1 -1
  7. package/lib/StormcloudPlayer.d.cts +1 -0
  8. package/lib/index.cjs +6217 -5149
  9. package/lib/index.cjs.map +1 -1
  10. package/lib/index.d.cts +2 -1
  11. package/lib/index.d.ts +93 -2
  12. package/lib/index.js +6199 -5158
  13. package/lib/index.js.map +1 -1
  14. package/lib/player/AdBreakOrchestrator.cjs +669 -131
  15. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  16. package/lib/player/AdBreakOrchestrator.d.cts +27 -3
  17. package/lib/player/EdgePodRequest.cjs +136 -0
  18. package/lib/player/EdgePodRequest.cjs.map +1 -0
  19. package/lib/player/EdgePodRequest.d.cts +14 -0
  20. package/lib/player/FloorLadder.cjs +578 -0
  21. package/lib/player/FloorLadder.cjs.map +1 -0
  22. package/lib/player/FloorLadder.d.cts +74 -0
  23. package/lib/player/StormcloudVideoPlayer.cjs +6104 -5114
  24. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  25. package/lib/player/StormcloudVideoPlayer.d.cts +13 -1
  26. package/lib/players/HlsPlayer.cjs +6104 -5114
  27. package/lib/players/HlsPlayer.cjs.map +1 -1
  28. package/lib/players/index.cjs +6104 -5114
  29. package/lib/players/index.cjs.map +1 -1
  30. package/lib/props.cjs +30 -8
  31. package/lib/props.cjs.map +1 -1
  32. package/lib/props.d.cts +1 -0
  33. package/lib/sdk/hlsAdPlayer.cjs +120 -19
  34. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  35. package/lib/types.d.cts +30 -2
  36. package/lib/ui/StormcloudVideoPlayer.cjs +6169 -5129
  37. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  38. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
  39. package/lib/utils/vastMacros.cjs +4 -0
  40. package/lib/utils/vastMacros.cjs.map +1 -1
  41. package/lib/utils/vastMacros.d.cts +2 -1
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\hlsAdPlayer.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","hlsAdPlayer_exports","createHlsAdPlayer","module","exports","import_hls","require","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","detectBrowser","version","majorVersion","isSmartTV","isLegacyTV","supportsModernJS","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","requiresMediaPipelineResetAfterAds","browser","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","String","Math","floor","random","formatPlayhead","seconds","Number","isFinite","total","hh","padStart","mm","ss","ms","resolveMacroValues","ctx","values","set","adPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","round","deviceId","deviceIdType","limitAdTracking","pageUrl","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","url","replace","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","map","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","trimmed","endsWith","percent","offsetPercent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","VAST_REQUEST_TIMEOUT_MS","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","currentVastTagUrl","funnelContext","mediaProbe","lastPodAdElementCount","mediaCandidates","mediaCandidateIndex","mediaStartTimerId","MEDIA_START_TIMEOUT_MS","mediaStartTimeoutMs","VAST_ERROR_MEDIA_TIMEOUT","pendingVastRequests","pendingRequestAbortReason","forcedMuteByAutoplay","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","emit","event","payload","Array","fn","console","warn","SENSITIVE_URL_PARAMS","redactUrl","parsed","searchParams","keys","toLowerCase","logFunnel","stage","extra","breakId","requestId","controllerId","visibilityState","document","adId","id","podSize","vastUrl","mediaUrl","mediaType","type","muted","log","buildTrackingMacroContext","options2","ad","context","currentTime","clientWidth","clientHeight","location","href","fireTrackingPixels","urls","macroContext","forEach","trackingUrl","trackingHost","host","unexpanded","macros","img","Image","add","timeoutId","release","outcome","clearTimeout","onload","onerror","delete","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","bitrate","level","getMediaTargetQuality","mainQuality","dpr","window","devicePixelRatio","containerWidth","containerHeight","base","rankMediaCandidates","mediaFiles","probe","createElement","pageIsHttps","protocol","accepted","file","index","isHls","isHlsMediaFile","mimeForProbe","canPlay","canPlayType","playable","default","isSupported","insecure","details","candidateUrl","candidateType","hlsJs","why","score","resolutionDiff","abs","bitrateDiff","push","sort","a","b","entry","mediaFile","includes","isProgressiveMediaFile","startsWith","isAudioMediaFile","getMediaProbe","evaluateMediaFile","mf","getAttribute","delivery","codec","category","whyRejected","apiFramework","toUpperCase","bitrateAttr","bitrateValue","hasExplicitDimensions","nativeHls","whyAccepted","baseType","withCodec","collectVideoMediaFiles","linear","verbose","stats","mediaFileElements","querySelectorAll","result","fileUrl","categories","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","collectLinearTracking","into","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","errorUrls","parseVastXml","documentElement","adElements","ordered","filter","firstEmpty","entries","parseAdElement","usedAdIndex","adCount","vastAdTagUri","wrapper","trackingUrls2","linear2","trackingUrls","rules","followAdditionalWrappers","inLine","conditionalAd","rejectStats","candidate","files","top","count","mediaFileCount","rejectedByCategory","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","kind","controller","startedAt","attempt","requestVast","response","Error","AbortController","abort","now","creds","fetch","mode","headers","referrerPolicy","signal","httpStatus","status","ok","elapsedMs","aborted","errorMessage","message","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","fetchStartedAt","wrapperUrl","substring","fetchAndParsePod","trimmedXml","empty","resolveAd","podElements","buffet","resolveAll","ads","adElementCount","vastVersion","inlineCount","wrapperCount","catch","shift","createAdVideoElement","video","style","position","left","objectFit","backgroundColor","playsInline","setupAdEventListeners","onTimeUpdate","noteAdProgress","sampleViewability","threshold","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","mutedByAutoplay","candidateIndex","pixelCount","creativeView","onEnded","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","vastErrorCode","mediaErrorCode","networkState","readyState","currentSrc","recoverFromAdFailure","onMediaDiagnostic","onVolumeChange","userActivation","isActive","paused","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","open","reportCurrentAdError","fireNotUsedForUnplayedAds","notUsed","inView","handleFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onInteraction","onFullscreenChange","IntersectionObserver","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","toVastPlayErrorCode","failAdPlayback","errorName","startAdPlayback","isMutedRetry","computed","getComputedStyle","isConnected","containerDisplay","display","containerVisibility","visibility","playPromise","play","finally","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","clearMediaStartTimer","startMediaStartTimer","timeoutMs","resetVideoElementForNextSource","clearStallWatchdog","tryNextMediaCandidate","failedUrl","next","nextUrl","nextType","candidateCount","loadMediaCandidate","handleAdError","loadCurrentAdMedia","candidates","isHlsAd","enableWorker","lowLatencyMode","pipeline","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","ErrorTypes","NETWORK_ERROR","responseCode","responseText","fragUrl","frag","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","onPresentedFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","releaseAdDecoder","pointerEvents","continueLiveStreamDuringAds","opacity","initialize","container","right","bottom","alignItems","justifyContent","zIndex","parentElement","requestAds","preloaded","reject","durations","impressionUrls","adIndex","missingAdId","resolve","contentVolume","loadError","stop","previousMutedState","clear","isAdPlaying","setFunnelContext","abortPendingRequest","size","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","setAdVolume","clamped","requestedVolume","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getLoadedAdId","getPodAdCount","getPodTotalDurationMs","reduce"],"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/sdk/hlsAdPlayer.ts\nvar hlsAdPlayer_exports = {};\n__export(hlsAdPlayer_exports, {\n createHlsAdPlayer: () => createHlsAdPlayer\n});\nmodule.exports = __toCommonJS(hlsAdPlayer_exports);\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS = true;\n let webOSVersion;\n let tizenVersion;\n let chromeVersionNum;\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n if (match && match[1]) {\n version = match[1];\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = \"6.0\";\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = \"5.0\";\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = \"4.0\";\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = \"3.0\";\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = \"2.0\";\n majorVersion = 2;\n }\n } else {\n version = \"Unknown\";\n webOSVersion = void 0;\n }\n isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;\n } else if (/Tizen/i.test(ua)) {\n name = \"Samsung Tizen\";\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n tizenVersion = majorVersion;\n }\n isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else {\n if (chromeVersion > 0) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n if (chromeVersion < 50) {\n supportsModernJS = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS,\n webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum\n };\n}\nfunction requiresMediaPipelineResetAfterAds() {\n const browser = detectBrowser();\n return browser.name === \"Samsung Tizen\" && (browser.tizenVersion ?? 0) >= 5;\n}\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 VAST_REQUEST_TIMEOUT_MS = 5e3;\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 let currentVastTagUrl;\n let funnelContext = {};\n let mediaProbe;\n let lastPodAdElementCount = 0;\n let mediaCandidates = [];\n let mediaCandidateIndex = 0;\n let mediaStartTimerId;\n const MEDIA_START_TIMEOUT_MS = options?.mediaStartTimeoutMs ?? 8e3;\n const VAST_ERROR_MEDIA_TIMEOUT = 402;\n const pendingVastRequests = /* @__PURE__ */ new Set();\n let pendingRequestAbortReason;\n let forcedMuteByAutoplay = false;\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 const SENSITIVE_URL_PARAMS = /* @__PURE__ */ new Set([\n \"ppid\",\n \"rdid\",\n \"idtype\",\n \"is_lat\",\n \"ifa\",\n \"idfa\",\n \"aaid\",\n \"uid\",\n \"user_id\",\n \"userid\",\n \"device_id\",\n \"deviceid\",\n \"ip\",\n \"ua\",\n \"gdpr_consent\",\n \"us_privacy\",\n \"gpp\",\n \"addtl_consent\",\n \"cust_params\",\n \"email\"\n ]);\n function redactUrl(url) {\n if (!url) return url;\n try {\n const parsed = new URL(url);\n for (const key of Array.from(parsed.searchParams.keys())) {\n if (SENSITIVE_URL_PARAMS.has(key.toLowerCase())) {\n parsed.searchParams.set(key, \"REDACTED\");\n }\n }\n return parsed.toString();\n } catch {\n return url.split(\"?\")[0];\n }\n }\n function logFunnel(stage, extra = {}) {\n const payload = {\n stage,\n breakId: funnelContext.breakId,\n requestId: funnelContext.requestId,\n controllerId: funnelContext.controllerId,\n visibilityState: typeof document !== \"undefined\" ? document.visibilityState : void 0,\n adId: currentAd?.id,\n podIndex,\n podSize: podAds.length,\n vastUrl: redactUrl(currentVastTagUrl),\n mediaUrl: currentAdMediaFile?.url,\n mediaType: currentAdMediaFile?.type,\n muted: adVideoElement ? adVideoElement.muted : void 0,\n ...extra\n };\n console.log(`[HlsAdPlayer][FUNNEL] ${stage}`, payload);\n emit(\"ad_funnel\", payload);\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 let trackingHost;\n try {\n trackingHost = new URL(trackingUrl).host;\n } catch {\n logFunnel(\"tracking_url_invalid\", { trackingUrl: redactUrl(trackingUrl) });\n return;\n }\n const unexpanded = trackingUrl.match(/\\[[A-Z_]+\\]/g);\n if (unexpanded) {\n logFunnel(\"tracking_url_unexpanded_macro\", {\n trackingHost,\n macros: Array.from(new Set(unexpanded))\n });\n }\n const img = new Image(1, 1);\n inFlightBeacons.add(img);\n let timeoutId;\n const release = (outcome) => {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n img.onload = null;\n img.onerror = null;\n inFlightBeacons.delete(img);\n console.log(\n `[HlsAdPlayer] Tracking pixel settled (${outcome}): ${trackingUrl}`\n );\n if (outcome !== \"load\") {\n logFunnel(\"tracking_request_settled\", { reason: outcome, trackingHost });\n }\n };\n img.onload = () => release(\"load\");\n img.onerror = () => release(\"error\");\n timeoutId = setTimeout(\n () => release(\"timeout\"),\n BEACON_TIMEOUT_MS\n );\n img.src = trackingUrl;\n console.log(`[HlsAdPlayer] Fired tracking pixel: ${trackingUrl}`);\n logFunnel(\"tracking_request_created\", {\n trackingHost,\n errorCode: options2?.errorCode\n });\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 getMediaTargetQuality() {\n const mainQuality = getMainStreamQuality();\n const dpr = typeof window !== \"undefined\" && window.devicePixelRatio > 0 ? window.devicePixelRatio : 1;\n const containerWidth = (adContainerEl?.clientWidth || contentVideo.clientWidth) * dpr;\n const containerHeight = (adContainerEl?.clientHeight || contentVideo.clientHeight) * dpr;\n if (!mainQuality && !(containerWidth > 0 && containerHeight > 0)) {\n return null;\n }\n const base = mainQuality ?? {\n width: containerWidth,\n height: containerHeight,\n bitrate: 5e6\n };\n const width = containerWidth > 0 ? Math.min(base.width, containerWidth) : base.width;\n const height = containerHeight > 0 ? Math.min(base.height, containerHeight) : base.height;\n return { width, height, bitrate: base.bitrate };\n }\n function rankMediaCandidates(mediaFiles) {\n const probe = adVideoElement ?? document.createElement(\"video\");\n const pageIsHttps = typeof location !== \"undefined\" && location.protocol === \"https:\";\n const target = getMediaTargetQuality();\n const accepted = [];\n mediaFiles.forEach((file, index) => {\n const isHls = isHlsMediaFile(file);\n const mimeForProbe = isHls ? \"application/vnd.apple.mpegurl\" : file.type || \"video/mp4\";\n const canPlay = probe.canPlayType(mimeForProbe);\n const playable = isHls ? import_hls.default.isSupported() || canPlay !== \"\" : canPlay !== \"\";\n const insecure = pageIsHttps && /^http:/i.test(file.url);\n const details = {\n index,\n candidateUrl: file.url,\n candidateType: file.type,\n width: file.width,\n height: file.height,\n bitrate: file.bitrate,\n canPlayType: canPlay,\n hlsJs: isHls ? import_hls.default.isSupported() : void 0\n };\n if (!playable) {\n logFunnel(\"media_candidate\", { ...details, reason: \"rejected\", why: \"cannot_play_type\" });\n return;\n }\n let score = 0;\n if (target) {\n const resolutionDiff = Math.abs(file.width - target.width) + Math.abs(file.height - target.height);\n const bitrateDiff = Math.abs((file.bitrate || 5e3) * 1e3 - target.bitrate);\n score = resolutionDiff * 2 + bitrateDiff / 1e3;\n }\n accepted.push({ file, score, insecure });\n logFunnel(\"media_candidate\", {\n ...details,\n reason: \"accepted\",\n why: insecure ? \"insecure_http_deprioritized\" : \"playable\",\n score\n });\n });\n accepted.sort((a, b) => {\n if (a.insecure !== b.insecure) return a.insecure ? 1 : -1;\n return a.score - b.score;\n });\n return accepted.map((entry) => entry.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 getMediaProbe() {\n if (adVideoElement) return adVideoElement;\n if (!mediaProbe && typeof document !== \"undefined\") {\n mediaProbe = document.createElement(\"video\");\n }\n return mediaProbe;\n }\n function evaluateMediaFile(mf) {\n const type = mf.getAttribute(\"type\") || \"\";\n const url = mf.textContent?.trim() || \"\";\n const delivery = mf.getAttribute(\"delivery\") || void 0;\n const codec = mf.getAttribute(\"codec\") || void 0;\n if (!url) {\n return { category: \"missing_media\", whyRejected: \"empty_url\", canPlayType: \"\" };\n }\n const apiFramework = (mf.getAttribute(\"apiFramework\") || \"\").toUpperCase();\n if (apiFramework === \"VPAID\") {\n return { category: \"vpaid\", whyRejected: \"vpaid_not_supported\", canPlayType: \"\" };\n }\n try {\n const protocol = new URL(url).protocol;\n if (protocol !== \"https:\" && protocol !== \"http:\") {\n return { category: \"invalid_url\", whyRejected: `protocol_${protocol}`, canPlayType: \"\" };\n }\n } catch {\n return { category: \"invalid_url\", whyRejected: \"unparseable_url\", canPlayType: \"\" };\n }\n const bitrateAttr = mf.getAttribute(\"bitrate\");\n const bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;\n const file = {\n url,\n type,\n width: parseInt(mf.getAttribute(\"width\") || \"1920\", 10),\n height: parseInt(mf.getAttribute(\"height\") || \"1080\", 10),\n bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0,\n delivery,\n codec\n };\n if (isAudioMediaFile(file)) {\n return {\n category: \"audio_only\",\n whyRejected: type.toLowerCase().startsWith(\"audio/\") ? \"audio_mime\" : \"audio_extension\",\n canPlayType: \"\"\n };\n }\n const isHls = isHlsMediaFile(file);\n const hasExplicitDimensions = mf.getAttribute(\"width\") != null && mf.getAttribute(\"height\") != null;\n if (!isHls && hasExplicitDimensions && (file.width <= 1 || file.height <= 1)) {\n return { category: \"audio_only\", whyRejected: \"zero_dimensions\", canPlayType: \"\" };\n }\n const probe = getMediaProbe();\n if (isHls) {\n const nativeHls = probe?.canPlayType(\"application/vnd.apple.mpegurl\") ?? \"\";\n if (import_hls.default.isSupported()) {\n return { file, whyAccepted: \"hls_js\", canPlayType: nativeHls };\n }\n if (nativeHls !== \"\") {\n return { file, whyAccepted: \"native_hls\", canPlayType: nativeHls };\n }\n return { category: \"unsupported_hls\", whyRejected: \"no_hls_support\", canPlayType: nativeHls };\n }\n if (!isProgressiveMediaFile(file)) {\n return { category: \"unsupported_mime\", whyRejected: \"not_a_video_mime\", canPlayType: \"\" };\n }\n if (!probe) {\n return { file, whyAccepted: \"no_probe_available\", canPlayType: \"\" };\n }\n const baseType = type || \"video/mp4\";\n const canPlay = probe.canPlayType(baseType);\n if (canPlay === \"\") {\n return { category: \"unsupported_mime\", whyRejected: \"canPlayType_empty\", canPlayType: canPlay };\n }\n if (codec) {\n const withCodec = probe.canPlayType(`${baseType}; codecs=\"${codec}\"`);\n if (withCodec === \"\") {\n return { category: \"unsupported_codec\", whyRejected: \"codec_canPlayType_empty\", canPlayType: withCodec };\n }\n return { file, whyAccepted: `canPlayType_${withCodec}`, canPlayType: withCodec };\n }\n return { file, whyAccepted: `canPlayType_${canPlay}`, canPlayType: canPlay };\n }\n function collectVideoMediaFiles(linear, verbose, stats) {\n const mediaFileElements = linear.querySelectorAll(\n \":scope > MediaFiles > MediaFile\"\n );\n const mediaFiles = [];\n if (stats) stats.total += mediaFileElements.length;\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 result = evaluateMediaFile(mf);\n const url = mf.textContent?.trim() || \"\";\n const accepted = \"file\" in result;\n logFunnel(\"mediafile_evaluated\", {\n reason: accepted ? \"accepted\" : result.category,\n index,\n type: mf.getAttribute(\"type\") || \"\",\n delivery: mf.getAttribute(\"delivery\") || void 0,\n codec: mf.getAttribute(\"codec\") || void 0,\n apiFramework: mf.getAttribute(\"apiFramework\") || void 0,\n width: mf.getAttribute(\"width\"),\n height: mf.getAttribute(\"height\"),\n fileUrl: redactUrl(url),\n canPlayType: result.canPlayType,\n whyAccepted: accepted ? result.whyAccepted : void 0,\n whyRejected: accepted ? void 0 : result.whyRejected\n });\n if (\"file\" in result) {\n mediaFiles.push(result.file);\n return;\n }\n if (stats) {\n stats.categories[result.category] = (stats.categories[result.category] ?? 0) + 1;\n }\n if (result.category === \"audio_only\") {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (audio-only: ${result.whyRejected}, type=\"${mf.getAttribute(\"type\") || \"\"}\") \\u2014 audio-only ads are not played on video inventory`\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 if (adElements.length === 0) {\n console.warn(\n `[HlsAdPlayer] No Ad element found in VAST ${root.getAttribute(\"version\") ?? \"\"} response`\n );\n return emptyVastResult(root);\n }\n const ordered = [\n ...adElements.filter((el) => getAdSequence(el) === void 0),\n ...adElements.filter((el) => getAdSequence(el) !== void 0)\n ];\n let firstEmpty;\n for (const [index, adElement] of ordered.entries()) {\n const parsed = parseAdElement(adElement, true);\n if (parsed.type === \"empty\") {\n firstEmpty ?? (firstEmpty = parsed);\n continue;\n }\n if (index > 0) {\n logFunnel(\"vast_ad_fallback\", {\n usedAdIndex: index,\n adCount: ordered.length\n });\n }\n if (parsed.type === \"wrapper\") {\n console.log(\n `[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ${parsed.vastAdTagUri}`\n );\n }\n return parsed;\n }\n return firstEmpty ?? emptyVastResult(root);\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 logFunnel(\"vast_no_supported_media\", { reason: \"vpaid\", conditionalAd: true });\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n let linear;\n let mediaFiles = [];\n const rejectStats = { total: 0, categories: {} };\n for (const candidate of Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear\")\n )) {\n const files = collectVideoMediaFiles(candidate, verbose, rejectStats);\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 let reason = \"missing_media\";\n let top = 0;\n for (const category of Object.keys(rejectStats.categories)) {\n const count = rejectStats.categories[category] ?? 0;\n if (count > top) {\n top = count;\n reason = category;\n }\n }\n if (rejectStats.total > 0 && top === 0) reason = \"other\";\n logFunnel(\"vast_no_supported_media\", {\n reason,\n mediaFileCount: rejectStats.total,\n rejectedByCategory: rejectStats.categories\n });\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\", kind = \"gam\") {\n if (destroyed) {\n throw new Error(\"VAST request skipped: ad player destroyed\");\n }\n const controller = typeof AbortController !== \"undefined\" ? new AbortController() : void 0;\n if (controller) pendingVastRequests.add(controller);\n const timeoutId = controller ? setTimeout(() => controller.abort(), VAST_REQUEST_TIMEOUT_MS) : void 0;\n const startedAt = Date.now();\n let attempt = 0;\n const requestVast = async (creds) => {\n attempt++;\n if (kind === \"gam\") {\n logFunnel(\"gam_http_request_sent\", { attempt, credentials: creds });\n }\n const response = await fetch(vastTagUrl, {\n mode: \"cors\",\n credentials: creds,\n headers: {\n \"Accept\": \"application/xml, text/xml, */*\"\n },\n referrerPolicy: \"no-referrer-when-downgrade\",\n ...controller ? { signal: controller.signal } : {}\n });\n if (kind === \"gam\") {\n logFunnel(\"gam_response_received\", {\n attempt,\n httpStatus: response.status,\n ok: response.ok,\n elapsedMs: Date.now() - startedAt\n });\n }\n return response;\n };\n try {\n let response;\n try {\n response = await requestVast(credentials);\n } catch (error) {\n if (credentials !== \"omit\" && !controller?.signal.aborted) {\n console.warn(\n `[HlsAdPlayer] VAST fetch failed with credentials=\"${credentials}\", retrying without credentials:`,\n error\n );\n logFunnel(\"vast_credentials_retry\", {\n errorMessage: error?.message\n });\n response = await requestVast(\"omit\");\n } else {\n throw error;\n }\n }\n if (!response.ok) {\n throw new Error(\n `Failed to fetch VAST: HTTP ${response.status} ${response.statusText}`\n );\n }\n return await response.text();\n } catch (error) {\n if (controller?.signal.aborted) {\n if (pendingRequestAbortReason) {\n throw new Error(`${pendingRequestAbortReason}: ${vastTagUrl}`);\n }\n throw new Error(\n `VAST request timeout after ${VAST_REQUEST_TIMEOUT_MS}ms: ${vastTagUrl}`\n );\n }\n throw error;\n } finally {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n if (controller) pendingVastRequests.delete(controller);\n }\n }\n async function fetchAndParseVastAd(vastTagUrl, depth = 0, accumulatedTracking = createEmptyTrackingUrls(), rules = { followAdditionalWrappers: true }) {\n if (destroyed) return null;\n let vastXml;\n const fetchStartedAt = Date.now();\n try {\n vastXml = await fetchVastXml(\n vastTagUrl,\n depth === 0 ? \"include\" : \"omit\",\n depth === 0 ? \"gam\" : \"wrapper\"\n );\n } catch (error) {\n if (depth === 0) throw error;\n console.warn(\"[HlsAdPlayer] Wrapped VAST request failed:\", error);\n logFunnel(\"wrapper_fetch\", {\n reason: \"failure\",\n depth,\n wrapperUrl: redactUrl(vastTagUrl),\n elapsedMs: Date.now() - fetchStartedAt,\n errorMessage: error?.message\n });\n if (!destroyed) {\n fireTrackingPixels(accumulatedTracking.error, {\n errorCode: VAST_ERROR_WRAPPER_TIMEOUT\n });\n }\n return null;\n }\n if (destroyed) return null;\n if (depth > 0) {\n logFunnel(\"wrapper_fetch\", {\n reason: \"success\",\n depth,\n wrapperUrl: redactUrl(vastTagUrl),\n elapsedMs: Date.now() - fetchStartedAt\n });\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 logFunnel(\"inline_resolved\", { depth });\n return parsed.ad;\n }\n async function fetchAndParsePod(vastTagUrl) {\n lastPodAdElementCount = 0;\n const vastXml = await fetchVastXml(vastTagUrl);\n if (destroyed) return [];\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 logFunnel(\"vast_parsed\", { adElementCount: 0, reason: \"empty_body\" });\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 logFunnel(\"vast_parsed\", { adElementCount: 0, reason: \"xml_parse_error\" });\n return [];\n }\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n logFunnel(\"vast_parsed\", {\n reason: adElements.length > 0 ? \"has_ads\" : \"no_ads\",\n vastVersion: root.getAttribute(\"version\") ?? void 0,\n adElementCount: adElements.length,\n inlineCount: adElements.filter((el) => el.querySelector(\":scope > InLine\")).length,\n wrapperCount: adElements.filter((el) => el.querySelector(\":scope > Wrapper\")).length\n });\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\") {\n logFunnel(\"inline_resolved\", { depth: 0 });\n return parsed.ad;\n }\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 resolveAll = (elements) => Promise.all(elements.map((el) => resolveAd(el).catch(() => null)));\n const ads = [];\n if (podElements.length === 0) {\n for (const ad of await resolveAll(buffet)) {\n if (ad) ads.push(ad);\n }\n } else {\n for (let ad of await resolveAll(podElements)) {\n while (!ad && buffet.length > 0) {\n ad = await resolveAd(buffet.shift()).catch(() => null);\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 lastPodAdElementCount = adElements.length;\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 logFunnel(\"first_quartile\");\n fireTrackingPixels(currentAd.trackingUrls.firstQuartile);\n }\n if (progress >= 0.5 && !trackingFired.midpoint) {\n trackingFired.midpoint = true;\n logFunnel(\"midpoint\");\n fireTrackingPixels(currentAd.trackingUrls.midpoint);\n }\n if (progress >= 0.75 && !trackingFired.thirdQuartile) {\n trackingFired.thirdQuartile = true;\n logFunnel(\"third_quartile\");\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 logFunnel(\"playing\", {\n mutedByAutoplay: forcedMuteByAutoplay,\n candidateIndex: mediaCandidateIndex\n });\n logFunnel(\"impression_fired\", {\n pixelCount: currentAd.trackingUrls.impression.length\n });\n if (currentAd.trackingUrls.impression.length === 0) {\n console.warn(\n \"[HlsAdPlayer] Ad started but VAST contained no <Impression> URLs - GAM will not count it\"\n );\n }\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 logFunnel(\"complete\");\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 const vastErrorCode = toVastMediaErrorCode(adVideoElement?.error);\n logFunnel(\"media_error\", {\n mediaErrorCode: adVideoElement?.error?.code,\n errorMessage: adVideoElement?.error?.message,\n networkState: adVideoElement?.networkState,\n readyState: adVideoElement?.readyState,\n currentSrc: adVideoElement?.currentSrc,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n };\n const onMediaDiagnostic = (event) => {\n if (!adPlaying || !adVideoElement || trackingFired.impression) return;\n if (!adVideoElement.currentSrc) return;\n logFunnel(\"media_event\", {\n reason: event.type,\n readyState: adVideoElement.readyState,\n networkState: adVideoElement.networkState,\n currentSrc: adVideoElement.currentSrc\n });\n };\n const onVolumeChange = () => {\n if (!currentAd || !adVideoElement) return;\n if (forcedMuteByAutoplay && !adVideoElement.muted) {\n const userActivation = navigator.userActivation;\n if (userActivation && !userActivation.isActive) {\n logFunnel(\"unexpected_unmute\", { paused: adVideoElement.paused });\n }\n forcedMuteByAutoplay = false;\n }\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 { type: \"stalled\", handler: onMediaDiagnostic },\n { type: \"suspend\", handler: onMediaDiagnostic },\n { type: \"abort\", handler: onMediaDiagnostic },\n { type: \"emptied\", handler: onMediaDiagnostic }\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 toVastPlayErrorCode(error) {\n return error?.name === \"NotSupportedError\" ? VAST_ERROR_NO_SUPPORTED_MEDIA : VAST_ERROR_MEDIA_DISPLAY;\n }\n function failAdPlayback(context, error) {\n const vastErrorCode = toVastPlayErrorCode(error);\n console.error(`[HlsAdPlayer] Error starting ${context}:`, error);\n logFunnel(\"play_failed\", {\n errorName: error?.name,\n errorMessage: error?.message,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n }\n function startAdPlayback(context, isMutedRetry = false) {\n if (!adVideoElement) return;\n const computed = typeof getComputedStyle === \"function\" && adContainerEl ? getComputedStyle(adContainerEl) : void 0;\n logFunnel(isMutedRetry ? \"muted_retry\" : \"play_called\", {\n context,\n isConnected: adVideoElement.isConnected,\n clientWidth: adVideoElement.clientWidth,\n clientHeight: adVideoElement.clientHeight,\n containerDisplay: computed?.display,\n containerVisibility: computed?.visibility\n });\n const playPromise = adVideoElement.play();\n pendingPlayPromise = playPromise;\n playPromise.catch((error) => {\n if (pendingPlayPromise !== playPromise) {\n return;\n }\n logFunnel(\"play_rejected\", {\n context,\n errorName: error?.name,\n errorMessage: error?.message\n });\n if (!isMutedRetry && error?.name === \"NotAllowedError\" && adVideoElement && !adVideoElement.muted) {\n console.warn(\n `[HlsAdPlayer] Unmuted ${context} blocked by autoplay policy - retrying muted`\n );\n originalMutedState = true;\n forcedMuteByAutoplay = true;\n adVideoElement.muted = true;\n startAdPlayback(context, true);\n return;\n }\n failAdPlayback(context, error);\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 clearMediaStartTimer() {\n if (mediaStartTimerId !== void 0) {\n clearTimeout(mediaStartTimerId);\n mediaStartTimerId = void 0;\n }\n }\n function startMediaStartTimer() {\n clearMediaStartTimer();\n if (!(MEDIA_START_TIMEOUT_MS > 0)) return;\n const startedAt = Date.now();\n mediaStartTimerId = setTimeout(() => {\n mediaStartTimerId = void 0;\n if (!adPlaying || trackingFired.impression) return;\n console.warn(\n `[HlsAdPlayer] Ad media did not start playing within ${MEDIA_START_TIMEOUT_MS}ms`\n );\n logFunnel(\"play_resolved_but_never_started\", {\n timeoutMs: MEDIA_START_TIMEOUT_MS,\n elapsedMs: Date.now() - startedAt,\n readyState: adVideoElement?.readyState,\n networkState: adVideoElement?.networkState,\n currentSrc: adVideoElement?.currentSrc,\n paused: adVideoElement?.paused,\n vastErrorCode: VAST_ERROR_MEDIA_TIMEOUT\n });\n recoverFromAdFailure(VAST_ERROR_MEDIA_TIMEOUT);\n }, MEDIA_START_TIMEOUT_MS);\n }\n function resetVideoElementForNextSource() {\n clearStallWatchdog();\n if (requiresMediaPipelineResetAfterAds()) {\n recreateAdVideoElement();\n setupAdEventListeners();\n } else {\n prepareVideoElementForNewSource();\n }\n }\n function tryNextMediaCandidate() {\n if (!currentAd || trackingFired.impression) return false;\n if (mediaCandidateIndex >= mediaCandidates.length - 1) return false;\n const failedUrl = currentAdMediaFile?.url;\n mediaCandidateIndex++;\n const next = mediaCandidates[mediaCandidateIndex];\n if (!next) return false;\n logFunnel(\"media_fallback\", {\n failedUrl,\n nextUrl: next.url,\n nextType: next.type,\n candidateIndex: mediaCandidateIndex,\n candidateCount: mediaCandidates.length\n });\n resetVideoElementForNextSource();\n try {\n loadMediaCandidate(next);\n return true;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Failed to load fallback media file:\", error);\n return tryNextMediaCandidate();\n }\n }\n function recoverFromAdFailure(vastErrorCode) {\n clearMediaStartTimer();\n if (tryNextMediaCandidate()) return;\n reportCurrentAdError(vastErrorCode);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) return;\n handleAdError();\n }\n function loadCurrentAdMedia() {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n mediaCandidates = rankMediaCandidates(currentAd.mediaFiles);\n mediaCandidateIndex = 0;\n const mediaFile = mediaCandidates[0];\n if (!mediaFile) {\n logFunnel(\"media_unsupported\", {\n vastErrorCode: VAST_ERROR_NO_SUPPORTED_MEDIA,\n candidates: currentAd.mediaFiles.length\n });\n reportCurrentAdError(VAST_ERROR_NO_SUPPORTED_MEDIA);\n throw new Error(\"No media file this browser can play\");\n }\n try {\n loadMediaCandidate(mediaFile);\n } catch (error) {\n if (tryNextMediaCandidate()) return;\n reportCurrentAdError(VAST_ERROR_NO_SUPPORTED_MEDIA);\n throw error;\n }\n }\n function loadMediaCandidate(mediaFile) {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n currentAdMediaFile = mediaFile;\n const isHlsAd = isHlsMediaFile(mediaFile);\n logFunnel(\"media_selected\", {\n width: mediaFile.width,\n height: mediaFile.height,\n bitrate: mediaFile.bitrate,\n candidateIndex: mediaCandidateIndex,\n candidates: mediaCandidates.length\n });\n console.log(\n `[HlsAdPlayer] Loading ${isHlsAd ? \"HLS\" : \"progressive\"} ad (pod ${podIndex + 1}/${podAds.length || 1}) from: ${mediaFile.url}`\n );\n startMediaStartTimer();\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 logFunnel(\"media_load\", { pipeline: \"hls.js\" });\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 const vastErrorCode = data.type === import_hls.default.ErrorTypes.NETWORK_ERROR ? 401 : VAST_ERROR_MEDIA_DISPLAY;\n logFunnel(\"hls_fatal\", {\n reason: data.details,\n errorName: data.type,\n errorMessage: data.details,\n responseCode: data.response?.code,\n responseText: data.response?.text,\n fragUrl: data.frag?.url,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n }\n });\n } else if (isHlsAd && adVideoElement.canPlayType(\"application/vnd.apple.mpegurl\")) {\n logFunnel(\"media_load\", { pipeline: \"native-hls\" });\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 logFunnel(\"media_load\", { pipeline: \"progressive\" });\n adVideoElement.src = mediaFile.url;\n adVideoElement.load();\n startAdPlayback(\"progressive ad playback\");\n } else {\n clearMediaStartTimer();\n logFunnel(\"media_unsupported\", {\n vastErrorCode: VAST_ERROR_NO_SUPPORTED_MEDIA\n });\n throw new Error(`Unsupported ad media file type: ${mediaFile.type}`);\n }\n }\n function advanceToNextPodAd() {\n clearMediaStartTimer();\n while (podIndex < podAds.length - 1) {\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 resetVideoElementForNextSource();\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 }\n }\n return false;\n }\n function clearStallWatchdog() {\n clearMediaStartTimer();\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 logFunnel(\"stall\", { vastErrorCode: VAST_ERROR_MEDIA_DISPLAY });\n recoverFromAdFailure(VAST_ERROR_MEDIA_DISPLAY);\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 logFunnel(\"decode_failure\", { vastErrorCode: VAST_ERROR_MEDIA_DISPLAY });\n recoverFromAdFailure(VAST_ERROR_MEDIA_DISPLAY);\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 if (destroyed) {\n return Promise.reject(new Error(\"Ad player destroyed\"));\n }\n currentVastTagUrl = vastTagUrl;\n pendingRequestAbortReason = void 0;\n logFunnel(\"request_sent\");\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 (destroyed) {\n return Promise.reject(new Error(\"Ad player destroyed\"));\n }\n if (!ads.length && pendingRequestAbortReason) {\n throw new Error(pendingRequestAbortReason);\n }\n if (!ads.length && lastPodAdElementCount > 0) {\n console.warn(\"[HlsAdPlayer] VAST response had ads but none were playable\");\n logFunnel(\"vast_fill_rejected\", { adElementCount: lastPodAdElementCount });\n emit(\"ad_error\");\n return Promise.reject(\n new Error(\"VAST fill rejected: no playable ad in response\")\n );\n }\n if (!ads.length) {\n console.warn(\"[HlsAdPlayer] No ads available from VAST response\");\n logFunnel(\"no_fill\");\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 logFunnel(\"vast_received\", {\n adCount: ads.length,\n durations: ads.map((ad) => ad.duration),\n impressionUrls: ads.map((ad) => ad.trackingUrls.impression.length)\n });\n ads.forEach((ad, index) => {\n if (ad.trackingUrls.impression.length === 0) {\n logFunnel(\"vast_missing_impression\", { adIndex: index, missingAdId: ad.id });\n }\n });\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 logFunnel(\"request_failed\", {\n errorMessage: error?.message\n });\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 try {\n loadCurrentAdMedia();\n } catch (loadError) {\n if (!(podIndex < podAds.length - 1 && advanceToNextPodAd())) {\n throw loadError;\n }\n }\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error playing ad:\", error);\n logFunnel(\"play_failed\", { errorMessage: error?.message });\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 if (adPlaying && currentAd && !trackingFired.impression) {\n logFunnel(\"stopped_before_start\");\n }\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 if (adPlaying && currentAd && !trackingFired.impression) {\n logFunnel(\"stopped_before_start\");\n }\n settleViewability();\n fireNotUsedForUnplayedAds();\n destroyed = true;\n pendingRequestAbortReason = \"Ad player destroyed\";\n for (const controller of Array.from(pendingVastRequests)) {\n controller.abort();\n }\n pendingVastRequests.clear();\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 setFunnelContext(context) {\n funnelContext = { ...context };\n },\n abortPendingRequest(reason = \"VAST request aborted (timeout)\") {\n if (pendingVastRequests.size === 0) return;\n pendingRequestAbortReason = reason;\n for (const controller of Array.from(pendingVastRequests)) {\n controller.abort();\n }\n pendingVastRequests.clear();\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 const userActivation = navigator.userActivation;\n if (clamped > 0 && forcedMuteByAutoplay && userActivation && !userActivation.isActive) {\n logFunnel(\"unmute_blocked_without_gesture\", { requestedVolume: clamped });\n return;\n }\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// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createHlsAdPlayer\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\sdk\\hlsAdPlayer.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","hlsAdPlayer_exports","createHlsAdPlayer","module","exports","import_hls","require","getChromeVersion","ua","match","parseInt","getWebKitVersion","getPlatform","navigator","userAgentData","platform","userAgent","test","detectBrowser","version","majorVersion","isSmartTV","isLegacyTV","supportsModernJS","webOSVersion","tizenVersion","chromeVersionNum","chromeVersion","webkitVersion","parts","split","toString","Promise","Map","Set","URLSearchParams","requiresMediaPipelineResetAfterAds","browser","VAST_MACRO_PATTERN","CACHEBUSTING_ALIASES","KNOWN_VAST_MACROS","generateCachebuster","String","Math","floor","random","formatPlayhead","seconds","Number","isFinite","total","hh","padStart","mm","ss","ms","resolveMacroValues","ctx","values","set","adPlayhead","adPlayheadSeconds","contentPlayheadSeconds","assetUri","mediaMime","Date","toISOString","errorCode","playerWidth","playerHeight","round","deviceId","deviceIdType","limitAdTracking","pageUrl","URL","hostname","clientUa","podSequence","adServingId","reason","substituteVastTrackingMacros","url","replace","encodeURIComponent","has","LINEAR_TRACKING_EVENTS","textOf","el","textContent","trim","parseVastTime","length","map","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","trimmed","endsWith","percent","offsetPercent","offsetSeconds","MAX_VAST_WRAPPER_DEPTH","VAST_REQUEST_TIMEOUT_MS","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","currentVastTagUrl","funnelContext","mediaProbe","lastPodAdElementCount","mediaCandidates","mediaCandidateIndex","mediaStartTimerId","MEDIA_START_TIMEOUT_MS","mediaStartTimeoutMs","VAST_ERROR_MEDIA_TIMEOUT","pendingVastRequests","pendingRequestAbortReason","forcedMuteByAutoplay","createTrackingState","impression","loaded","start","firstQuartile","midpoint","thirdQuartile","complete","viewabilitySettled","lastMuted","progressFired","trackingFired","resolvedAds","viewObserver","visibleRatio","continuousVisibleS","lastViewSampleTime","lastPlayerExpanded","documentHandlers","emit","event","payload","Array","fn","console","warn","SENSITIVE_URL_PARAMS","redactUrl","parsed","searchParams","keys","toLowerCase","logFunnel","stage","extra","breakId","requestId","controllerId","visibilityState","document","adId","id","podSize","vastUrl","mediaUrl","mediaType","type","muted","log","buildTrackingMacroContext","options2","ad","context","currentTime","clientWidth","clientHeight","location","href","fireTrackingPixels","urls","macroContext","forEach","trackingUrl","trackingHost","host","unexpanded","macros","img","Image","add","timeoutId","release","outcome","clearTimeout","onload","onerror","delete","setTimeout","src","getMainStreamQuality","levels","currentLevel","autoLevel","loadLevel","level2","width","height","bitrate","level","getMediaTargetQuality","mainQuality","dpr","window","devicePixelRatio","containerWidth","containerHeight","base","rankMediaCandidates","mediaFiles","probe","createElement","pageIsHttps","protocol","accepted","file","index","isHls","isHlsMediaFile","mimeForProbe","canPlay","canPlayType","playable","default","isSupported","insecure","details","candidateUrl","candidateType","hlsJs","why","score","resolutionDiff","abs","bitrateDiff","push","sort","a","b","entry","mediaFile","includes","isProgressiveMediaFile","startsWith","isAudioMediaFile","getMediaProbe","evaluateMediaFile","mf","getAttribute","delivery","codec","category","whyRejected","apiFramework","toUpperCase","bitrateAttr","bitrateValue","hasExplicitDimensions","nativeHls","whyAccepted","baseType","withCodec","collectVideoMediaFiles","linear","verbose","stats","mediaFileElements","querySelectorAll","result","fileUrl","categories","createEmptyTrackingUrls","clickTracking","viewable","notViewable","viewUndetermined","verificationNotExecuted","progress","pushUrls","elements","collectLinearTracking","into","indexOf","collectAdLevelTracking","adBody","verification","mergeTrackingUrls","source","targetLists","sourceLists","incoming","concat","parseXml","xmlString","xmlDoc","DOMParser","parseFromString","parserError","querySelector","getAdSequence","adElement","sequence","emptyVastResult","root","errorUrls","parseVastXml","documentElement","adElements","ordered","filter","firstEmpty","entries","parseAdElement","usedAdIndex","adCount","vastAdTagUri","wrapper","trackingUrls2","linear2","trackingUrls","rules","followAdditionalWrappers","inLine","conditionalAd","rejectStats","candidate","files","top","count","mediaFileCount","rejectedByCategory","title","duration","clickThrough","fetchVastXml","vastTagUrl","credentials","kind","controller","startedAt","attempt","requestVast","response","Error","AbortController","abort","now","creds","fetch","mode","headers","referrerPolicy","signal","httpStatus","status","ok","elapsedMs","aborted","errorMessage","message","statusText","text","fetchAndParseVastAd","depth","accumulatedTracking","vastXml","fetchStartedAt","wrapperUrl","isEdgeEmptySentinelAd","durations","fetchAndParsePod","isEdge","trimmedXml","empty","resolveAd","candidates","podElements","buffet","resolveAll","ads","adElementCount","vastVersion","inlineCount","wrapperCount","sentinelCount","catch","shift","createAdVideoElement","video","style","position","left","objectFit","backgroundColor","playsInline","setupAdEventListeners","onTimeUpdate","noteAdProgress","sampleViewability","threshold","onLoadedMetadata","videoWidth","videoHeight","handleVideoDecodeFailure","onCanPlay","onPlaying","startStallWatchdog","mutedByAutoplay","candidateIndex","pixelCount","creativeView","onEnded","settleViewability","advanceToNextPodAd","handleAdComplete","onError","e","vastErrorCode","mediaErrorCode","networkState","readyState","currentSrc","recoverFromAdFailure","onMediaDiagnostic","onVolumeChange","userActivation","isActive","paused","mute","unmute","isTrackablePlayback","ended","onPause","pause","onPlay","resume","handler","addEventListener","teardownAdEventListeners","removeEventListener","handleAdClick","open","reportCurrentAdError","fireNotUsedForUnplayedAds","notUsed","inView","handleFullscreenChange","fullscreenEl","fullscreenElement","webkitFullscreenElement","expanded","contains","fullscreen","playerExpand","exitFullscreen","playerCollapse","attachContainerHandlers","onClick","onInteraction","onFullscreenChange","IntersectionObserver","isIntersecting","intersectionRatio","observe","detachContainerHandlers","disconnect","setAdPlayingFlag","isPlaying","dataset","stormcloudAdPlaying","resetAdTracking","isRvfcSupported","requestVideoFrameCallback","settlePendingPlay","toVastPlayErrorCode","failAdPlayback","errorName","startAdPlayback","isMutedRetry","computed","getComputedStyle","isConnected","containerDisplay","display","containerVisibility","visibility","playPromise","play","finally","prepareVideoElementForNewSource","destroy","removeAttribute","load","recreateAdVideoElement","remove","appendChild","clearMediaStartTimer","startMediaStartTimer","timeoutMs","resetVideoElementForNextSource","clearStallWatchdog","tryNextMediaCandidate","failedUrl","next","nextUrl","nextType","candidateCount","loadMediaCandidate","handleAdError","loadCurrentAdMedia","isHlsAd","enableWorker","lowLatencyMode","pipeline","loadSource","attachMedia","on","Events","MANIFEST_PARSED","ERROR","_event","data","fatal","ErrorTypes","NETWORK_ERROR","responseCode","responseText","fragUrl","frag","clearInterval","cancelVideoFrameProbe","handleAdStall","getDecodedVideoFrameCount","getVideoPlaybackQuality","quality","totalVideoFrames","legacyCount","webkitDecodedFrameCount","isFrameCounterReliable","markFrameCounterReliable","isRvfcReliable","markRvfcReliable","cancelVideoFrameCallback","startVideoFrameProbe","rvfc","onPresentedFrame","blackFrameDetectionEnabled","setInterval","decodedFrames","timeAdvancing","releaseAdDecoder","pointerEvents","continueLiveStreamDuringAds","opacity","initialize","container","right","bottom","alignItems","justifyContent","zIndex","parentElement","requestAds","requestOptions","preloaded","reject","impressionUrls","adIndex","missingAdId","resolve","contentVolume","loadError","stop","previousMutedState","clear","isAdPlaying","setFunnelContext","abortPendingRequest","size","resize","listener","off","updateOriginalMutedState","nextVolume","isNaN","getOriginalMutedState","getOriginalVolume","setAdVolume","clamped","requestedVolume","getAdVolume","showPlaceholder","hidePlaceholder","getLoadedAdDuration","getLoadedAdId","getPodAdCount","getPodTotalDurationMs","reduce","limitPodToBudget","maxDurationMs","maxAds","kept","dropped","totalMs","durationMs","keptCount","droppedCount","keptDurationMs"],"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/sdk/hlsAdPlayer.ts\nvar hlsAdPlayer_exports = {};\n__export(hlsAdPlayer_exports, {\n createHlsAdPlayer: () => createHlsAdPlayer\n});\nmodule.exports = __toCommonJS(hlsAdPlayer_exports);\nvar import_hls = __toESM(require(\"hls.js\"), 1);\n\n// src/utils/browserCompat.ts\nfunction getChromeVersion(ua) {\n const match = ua.match(/Chrome\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getWebKitVersion(ua) {\n const match = ua.match(/AppleWebKit\\/(\\d+)/);\n return match && match[1] ? parseInt(match[1], 10) : 0;\n}\nfunction getPlatform() {\n if (\"userAgentData\" in navigator && navigator.userAgentData?.platform) {\n return navigator.userAgentData.platform;\n }\n const ua = navigator.userAgent;\n if (/Mac|iPhone|iPad|iPod/i.test(ua)) {\n return /iPhone|iPad|iPod/i.test(ua) ? \"iPhone\" : \"MacIntel\";\n }\n if (/Win/i.test(ua)) {\n return \"Win32\";\n }\n if (/Linux/i.test(ua)) {\n return /Android/i.test(ua) ? \"Linux armv8l\" : \"Linux x86_64\";\n }\n if (/CrOS/i.test(ua)) {\n return \"CrOS\";\n }\n return navigator.platform || \"Unknown\";\n}\nfunction detectBrowser() {\n const ua = navigator.userAgent;\n const platform = getPlatform();\n let name = \"Unknown\";\n let version = \"0\";\n let majorVersion = 0;\n let isSmartTV = false;\n let isLegacyTV = false;\n let supportsModernJS = true;\n let webOSVersion;\n let tizenVersion;\n let chromeVersionNum;\n const chromeVersion = getChromeVersion(ua);\n const webkitVersion = getWebKitVersion(ua);\n chromeVersionNum = chromeVersion > 0 ? chromeVersion : void 0;\n if (/Web0S|webOS|LG Browser|LGSTB/i.test(ua)) {\n name = \"LG WebOS\";\n isSmartTV = true;\n let match = ua.match(/Web0S[/\\s]*([\\d.]+)/i) || ua.match(/webOS[/\\s]*([\\d.]+)/i);\n if (!match || !match[1]) {\n match = ua.match(/webOSTV[/\\s-]*([\\d.]+)/i) || ua.match(/webOS\\.TV[/\\s-]*([\\d.]+)/i);\n }\n if (match && match[1]) {\n version = match[1];\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n webOSVersion = majorVersion;\n } else if (chromeVersion > 0) {\n if (chromeVersion >= 79) {\n webOSVersion = 6;\n version = \"6.0\";\n majorVersion = 6;\n } else if (chromeVersion >= 68) {\n webOSVersion = 5;\n version = \"5.0\";\n majorVersion = 5;\n } else if (chromeVersion >= 53) {\n webOSVersion = 4;\n version = \"4.0\";\n majorVersion = 4;\n } else if (chromeVersion >= 38) {\n webOSVersion = 3;\n version = \"3.0\";\n majorVersion = 3;\n } else {\n webOSVersion = 2;\n version = \"2.0\";\n majorVersion = 2;\n }\n } else {\n version = \"Unknown\";\n webOSVersion = void 0;\n }\n isLegacyTV = webOSVersion !== void 0 && webOSVersion < 3;\n } else if (/Tizen/i.test(ua)) {\n name = \"Samsung Tizen\";\n isSmartTV = true;\n const match = ua.match(/Tizen[/\\s]*([\\d.]+)/i);\n version = match && match[1] ? match[1] : \"Unknown\";\n if (version !== \"Unknown\") {\n const parts = version.split(\".\");\n majorVersion = parts[0] ? parseInt(parts[0], 10) : 0;\n tizenVersion = majorVersion;\n }\n isLegacyTV = tizenVersion !== void 0 && tizenVersion < 3;\n } else if (/SMART-TV|SmartTV/i.test(ua)) {\n name = \"Smart TV\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else if (/NetCast/i.test(ua)) {\n name = \"LG NetCast\";\n isSmartTV = true;\n isLegacyTV = true;\n } else if (/BRAVIA/i.test(ua)) {\n name = \"Sony BRAVIA\";\n isSmartTV = true;\n isLegacyTV = chromeVersion > 0 && chromeVersion < 53;\n } else {\n if (chromeVersion > 0) {\n name = \"Chrome\";\n version = chromeVersion.toString();\n majorVersion = chromeVersion;\n if (chromeVersion < 50) {\n supportsModernJS = false;\n }\n }\n if (webkitVersion > 0 && webkitVersion < 600) {\n supportsModernJS = false;\n }\n }\n if (typeof Promise === \"undefined\" || typeof Map === \"undefined\" || typeof Set === \"undefined\") {\n supportsModernJS = false;\n }\n if (typeof URLSearchParams === \"undefined\") {\n supportsModernJS = false;\n }\n return {\n name,\n version,\n majorVersion,\n isSmartTV,\n isLegacyTV,\n platform,\n supportsModernJS,\n webOSVersion,\n tizenVersion,\n chromeVersion: chromeVersionNum\n };\n}\nfunction requiresMediaPipelineResetAfterAds() {\n const browser = detectBrowser();\n return browser.name === \"Samsung Tizen\" && (browser.tizenVersion ?? 0) >= 5;\n}\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 VAST_REQUEST_TIMEOUT_MS = 5e3;\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 let currentVastTagUrl;\n let funnelContext = {};\n let mediaProbe;\n let lastPodAdElementCount = 0;\n let mediaCandidates = [];\n let mediaCandidateIndex = 0;\n let mediaStartTimerId;\n const MEDIA_START_TIMEOUT_MS = options?.mediaStartTimeoutMs ?? 8e3;\n const VAST_ERROR_MEDIA_TIMEOUT = 402;\n const pendingVastRequests = /* @__PURE__ */ new Set();\n let pendingRequestAbortReason;\n let forcedMuteByAutoplay = false;\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 const SENSITIVE_URL_PARAMS = /* @__PURE__ */ new Set([\n \"ppid\",\n \"rdid\",\n \"idtype\",\n \"is_lat\",\n \"ifa\",\n \"idfa\",\n \"aaid\",\n \"uid\",\n \"user_id\",\n \"userid\",\n \"device_id\",\n \"deviceid\",\n \"ip\",\n \"ua\",\n \"gdpr_consent\",\n \"us_privacy\",\n \"gpp\",\n \"addtl_consent\",\n \"cust_params\",\n \"email\"\n ]);\n function redactUrl(url) {\n if (!url) return url;\n try {\n const parsed = new URL(url);\n for (const key of Array.from(parsed.searchParams.keys())) {\n if (SENSITIVE_URL_PARAMS.has(key.toLowerCase())) {\n parsed.searchParams.set(key, \"REDACTED\");\n }\n }\n return parsed.toString();\n } catch {\n return url.split(\"?\")[0];\n }\n }\n function logFunnel(stage, extra = {}) {\n const payload = {\n stage,\n breakId: funnelContext.breakId,\n requestId: funnelContext.requestId,\n controllerId: funnelContext.controllerId,\n visibilityState: typeof document !== \"undefined\" ? document.visibilityState : void 0,\n adId: currentAd?.id,\n podIndex,\n podSize: podAds.length,\n vastUrl: redactUrl(currentVastTagUrl),\n mediaUrl: currentAdMediaFile?.url,\n mediaType: currentAdMediaFile?.type,\n muted: adVideoElement ? adVideoElement.muted : void 0,\n ...extra\n };\n console.log(`[HlsAdPlayer][FUNNEL] ${stage}`, payload);\n emit(\"ad_funnel\", payload);\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 let trackingHost;\n try {\n trackingHost = new URL(trackingUrl).host;\n } catch {\n logFunnel(\"tracking_url_invalid\", { trackingUrl: redactUrl(trackingUrl) });\n return;\n }\n const unexpanded = trackingUrl.match(/\\[[A-Z_]+\\]/g);\n if (unexpanded) {\n logFunnel(\"tracking_url_unexpanded_macro\", {\n trackingHost,\n macros: Array.from(new Set(unexpanded))\n });\n }\n const img = new Image(1, 1);\n inFlightBeacons.add(img);\n let timeoutId;\n const release = (outcome) => {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n img.onload = null;\n img.onerror = null;\n inFlightBeacons.delete(img);\n console.log(\n `[HlsAdPlayer] Tracking pixel settled (${outcome}): ${trackingHost}`\n );\n if (outcome !== \"load\") {\n logFunnel(\"tracking_request_settled\", { reason: outcome, trackingHost });\n }\n };\n img.onload = () => release(\"load\");\n img.onerror = () => release(\"error\");\n timeoutId = setTimeout(\n () => release(\"timeout\"),\n BEACON_TIMEOUT_MS\n );\n img.src = trackingUrl;\n console.log(`[HlsAdPlayer] Fired tracking pixel: ${trackingHost}`);\n logFunnel(\"tracking_request_created\", {\n trackingHost,\n errorCode: options2?.errorCode\n });\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 getMediaTargetQuality() {\n const mainQuality = getMainStreamQuality();\n const dpr = typeof window !== \"undefined\" && window.devicePixelRatio > 0 ? window.devicePixelRatio : 1;\n const containerWidth = (adContainerEl?.clientWidth || contentVideo.clientWidth) * dpr;\n const containerHeight = (adContainerEl?.clientHeight || contentVideo.clientHeight) * dpr;\n if (!mainQuality && !(containerWidth > 0 && containerHeight > 0)) {\n return null;\n }\n const base = mainQuality ?? {\n width: containerWidth,\n height: containerHeight,\n bitrate: 5e6\n };\n const width = containerWidth > 0 ? Math.min(base.width, containerWidth) : base.width;\n const height = containerHeight > 0 ? Math.min(base.height, containerHeight) : base.height;\n return { width, height, bitrate: base.bitrate };\n }\n function rankMediaCandidates(mediaFiles) {\n const probe = adVideoElement ?? document.createElement(\"video\");\n const pageIsHttps = typeof location !== \"undefined\" && location.protocol === \"https:\";\n const target = getMediaTargetQuality();\n const accepted = [];\n mediaFiles.forEach((file, index) => {\n const isHls = isHlsMediaFile(file);\n const mimeForProbe = isHls ? \"application/vnd.apple.mpegurl\" : file.type || \"video/mp4\";\n const canPlay = probe.canPlayType(mimeForProbe);\n const playable = isHls ? import_hls.default.isSupported() || canPlay !== \"\" : canPlay !== \"\";\n const insecure = pageIsHttps && /^http:/i.test(file.url);\n const details = {\n index,\n candidateUrl: file.url,\n candidateType: file.type,\n width: file.width,\n height: file.height,\n bitrate: file.bitrate,\n canPlayType: canPlay,\n hlsJs: isHls ? import_hls.default.isSupported() : void 0\n };\n if (!playable) {\n logFunnel(\"media_candidate\", { ...details, reason: \"rejected\", why: \"cannot_play_type\" });\n return;\n }\n let score = 0;\n if (target) {\n const resolutionDiff = Math.abs(file.width - target.width) + Math.abs(file.height - target.height);\n const bitrateDiff = Math.abs((file.bitrate || 5e3) * 1e3 - target.bitrate);\n score = resolutionDiff * 2 + bitrateDiff / 1e3;\n }\n accepted.push({ file, score, insecure });\n logFunnel(\"media_candidate\", {\n ...details,\n reason: \"accepted\",\n why: insecure ? \"insecure_http_deprioritized\" : \"playable\",\n score\n });\n });\n accepted.sort((a, b) => {\n if (a.insecure !== b.insecure) return a.insecure ? 1 : -1;\n return a.score - b.score;\n });\n return accepted.map((entry) => entry.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 getMediaProbe() {\n if (adVideoElement) return adVideoElement;\n if (!mediaProbe && typeof document !== \"undefined\") {\n mediaProbe = document.createElement(\"video\");\n }\n return mediaProbe;\n }\n function evaluateMediaFile(mf) {\n const type = mf.getAttribute(\"type\") || \"\";\n const url = mf.textContent?.trim() || \"\";\n const delivery = mf.getAttribute(\"delivery\") || void 0;\n const codec = mf.getAttribute(\"codec\") || void 0;\n if (!url) {\n return { category: \"missing_media\", whyRejected: \"empty_url\", canPlayType: \"\" };\n }\n const apiFramework = (mf.getAttribute(\"apiFramework\") || \"\").toUpperCase();\n if (apiFramework === \"VPAID\") {\n return { category: \"vpaid\", whyRejected: \"vpaid_not_supported\", canPlayType: \"\" };\n }\n try {\n const protocol = new URL(url).protocol;\n if (protocol !== \"https:\" && protocol !== \"http:\") {\n return { category: \"invalid_url\", whyRejected: `protocol_${protocol}`, canPlayType: \"\" };\n }\n } catch {\n return { category: \"invalid_url\", whyRejected: \"unparseable_url\", canPlayType: \"\" };\n }\n const bitrateAttr = mf.getAttribute(\"bitrate\");\n const bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;\n const file = {\n url,\n type,\n width: parseInt(mf.getAttribute(\"width\") || \"1920\", 10),\n height: parseInt(mf.getAttribute(\"height\") || \"1080\", 10),\n bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0,\n delivery,\n codec\n };\n if (isAudioMediaFile(file)) {\n return {\n category: \"audio_only\",\n whyRejected: type.toLowerCase().startsWith(\"audio/\") ? \"audio_mime\" : \"audio_extension\",\n canPlayType: \"\"\n };\n }\n const isHls = isHlsMediaFile(file);\n const hasExplicitDimensions = mf.getAttribute(\"width\") != null && mf.getAttribute(\"height\") != null;\n if (!isHls && hasExplicitDimensions && (file.width <= 1 || file.height <= 1)) {\n return { category: \"audio_only\", whyRejected: \"zero_dimensions\", canPlayType: \"\" };\n }\n const probe = getMediaProbe();\n if (isHls) {\n const nativeHls = probe?.canPlayType(\"application/vnd.apple.mpegurl\") ?? \"\";\n if (import_hls.default.isSupported()) {\n return { file, whyAccepted: \"hls_js\", canPlayType: nativeHls };\n }\n if (nativeHls !== \"\") {\n return { file, whyAccepted: \"native_hls\", canPlayType: nativeHls };\n }\n return { category: \"unsupported_hls\", whyRejected: \"no_hls_support\", canPlayType: nativeHls };\n }\n if (!isProgressiveMediaFile(file)) {\n return { category: \"unsupported_mime\", whyRejected: \"not_a_video_mime\", canPlayType: \"\" };\n }\n if (!probe) {\n return { file, whyAccepted: \"no_probe_available\", canPlayType: \"\" };\n }\n const baseType = type || \"video/mp4\";\n const canPlay = probe.canPlayType(baseType);\n if (canPlay === \"\") {\n return { category: \"unsupported_mime\", whyRejected: \"canPlayType_empty\", canPlayType: canPlay };\n }\n if (codec) {\n const withCodec = probe.canPlayType(`${baseType}; codecs=\"${codec}\"`);\n if (withCodec === \"\") {\n return { category: \"unsupported_codec\", whyRejected: \"codec_canPlayType_empty\", canPlayType: withCodec };\n }\n return { file, whyAccepted: `canPlayType_${withCodec}`, canPlayType: withCodec };\n }\n return { file, whyAccepted: `canPlayType_${canPlay}`, canPlayType: canPlay };\n }\n function collectVideoMediaFiles(linear, verbose, stats) {\n const mediaFileElements = linear.querySelectorAll(\n \":scope > MediaFiles > MediaFile\"\n );\n const mediaFiles = [];\n if (stats) stats.total += mediaFileElements.length;\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 result = evaluateMediaFile(mf);\n const url = mf.textContent?.trim() || \"\";\n const accepted = \"file\" in result;\n logFunnel(\"mediafile_evaluated\", {\n reason: accepted ? \"accepted\" : result.category,\n index,\n type: mf.getAttribute(\"type\") || \"\",\n delivery: mf.getAttribute(\"delivery\") || void 0,\n codec: mf.getAttribute(\"codec\") || void 0,\n apiFramework: mf.getAttribute(\"apiFramework\") || void 0,\n width: mf.getAttribute(\"width\"),\n height: mf.getAttribute(\"height\"),\n fileUrl: redactUrl(url),\n canPlayType: result.canPlayType,\n whyAccepted: accepted ? result.whyAccepted : void 0,\n whyRejected: accepted ? void 0 : result.whyRejected\n });\n if (\"file\" in result) {\n mediaFiles.push(result.file);\n return;\n }\n if (stats) {\n stats.categories[result.category] = (stats.categories[result.category] ?? 0) + 1;\n }\n if (result.category === \"audio_only\") {\n console.warn(\n `[HlsAdPlayer] MediaFile ${index} skipped (audio-only: ${result.whyRejected}, type=\"${mf.getAttribute(\"type\") || \"\"}\") \\u2014 audio-only ads are not played on video inventory`\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 if (adElements.length === 0) {\n console.warn(\n `[HlsAdPlayer] No Ad element found in VAST ${root.getAttribute(\"version\") ?? \"\"} response`\n );\n return emptyVastResult(root);\n }\n const ordered = [\n ...adElements.filter((el) => getAdSequence(el) === void 0),\n ...adElements.filter((el) => getAdSequence(el) !== void 0)\n ];\n let firstEmpty;\n for (const [index, adElement] of ordered.entries()) {\n const parsed = parseAdElement(adElement, true);\n if (parsed.type === \"empty\") {\n firstEmpty ?? (firstEmpty = parsed);\n continue;\n }\n if (index > 0) {\n logFunnel(\"vast_ad_fallback\", {\n usedAdIndex: index,\n adCount: ordered.length\n });\n }\n if (parsed.type === \"wrapper\") {\n console.log(\n `[HlsAdPlayer] VAST wrapper detected, following VASTAdTagURI: ${redactUrl(parsed.vastAdTagUri)}`\n );\n }\n return parsed;\n }\n return firstEmpty ?? emptyVastResult(root);\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 logFunnel(\"vast_no_supported_media\", { reason: \"vpaid\", conditionalAd: true });\n return { type: \"empty\", errorUrls, errorCode: VAST_ERROR_NO_SUPPORTED_MEDIA };\n }\n let linear;\n let mediaFiles = [];\n const rejectStats = { total: 0, categories: {} };\n for (const candidate of Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear\")\n )) {\n const files = collectVideoMediaFiles(candidate, verbose, rejectStats);\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 let reason = \"missing_media\";\n let top = 0;\n for (const category of Object.keys(rejectStats.categories)) {\n const count = rejectStats.categories[category] ?? 0;\n if (count > top) {\n top = count;\n reason = category;\n }\n }\n if (rejectStats.total > 0 && top === 0) reason = \"other\";\n logFunnel(\"vast_no_supported_media\", {\n reason,\n mediaFileCount: rejectStats.total,\n rejectedByCategory: rejectStats.categories\n });\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\", kind = \"gam\") {\n if (destroyed) {\n throw new Error(\"VAST request skipped: ad player destroyed\");\n }\n const controller = typeof AbortController !== \"undefined\" ? new AbortController() : void 0;\n if (controller) pendingVastRequests.add(controller);\n const timeoutId = controller ? setTimeout(() => controller.abort(), VAST_REQUEST_TIMEOUT_MS) : void 0;\n const startedAt = Date.now();\n let attempt = 0;\n const requestVast = async (creds) => {\n attempt++;\n if (kind !== \"wrapper\") {\n logFunnel(`${kind}_http_request_sent`, { attempt, credentials: creds });\n }\n const response = await fetch(vastTagUrl, {\n mode: \"cors\",\n credentials: creds,\n headers: {\n \"Accept\": \"application/xml, text/xml, */*\"\n },\n referrerPolicy: \"no-referrer-when-downgrade\",\n ...controller ? { signal: controller.signal } : {}\n });\n if (kind !== \"wrapper\") {\n logFunnel(`${kind}_response_received`, {\n attempt,\n httpStatus: response.status,\n ok: response.ok,\n elapsedMs: Date.now() - startedAt\n });\n }\n return response;\n };\n try {\n let response;\n try {\n response = await requestVast(credentials);\n } catch (error) {\n if (credentials !== \"omit\" && !controller?.signal.aborted) {\n console.warn(\n `[HlsAdPlayer] VAST fetch failed with credentials=\"${credentials}\", retrying without credentials:`,\n error\n );\n logFunnel(\"vast_credentials_retry\", {\n errorMessage: error?.message\n });\n response = await requestVast(\"omit\");\n } else {\n throw error;\n }\n }\n if (!response.ok) {\n throw new Error(\n `Failed to fetch VAST: HTTP ${response.status} ${response.statusText}`\n );\n }\n return await response.text();\n } catch (error) {\n if (controller?.signal.aborted) {\n if (pendingRequestAbortReason) {\n throw new Error(`${pendingRequestAbortReason}: ${vastTagUrl}`);\n }\n throw new Error(\n `VAST request timeout after ${VAST_REQUEST_TIMEOUT_MS}ms: ${vastTagUrl}`\n );\n }\n throw error;\n } finally {\n if (timeoutId !== void 0) clearTimeout(timeoutId);\n if (controller) pendingVastRequests.delete(controller);\n }\n }\n async function fetchAndParseVastAd(vastTagUrl, depth = 0, accumulatedTracking = createEmptyTrackingUrls(), rules = { followAdditionalWrappers: true }) {\n if (destroyed) return null;\n let vastXml;\n const fetchStartedAt = Date.now();\n try {\n vastXml = await fetchVastXml(\n vastTagUrl,\n depth === 0 ? \"include\" : \"omit\",\n depth === 0 ? \"gam\" : \"wrapper\"\n );\n } catch (error) {\n if (depth === 0) throw error;\n console.warn(\"[HlsAdPlayer] Wrapped VAST request failed:\", error);\n logFunnel(\"wrapper_fetch\", {\n reason: \"failure\",\n depth,\n wrapperUrl: redactUrl(vastTagUrl),\n elapsedMs: Date.now() - fetchStartedAt,\n errorMessage: error?.message\n });\n if (!destroyed) {\n fireTrackingPixels(accumulatedTracking.error, {\n errorCode: VAST_ERROR_WRAPPER_TIMEOUT\n });\n }\n return null;\n }\n if (destroyed) return null;\n if (depth > 0) {\n logFunnel(\"wrapper_fetch\", {\n reason: \"success\",\n depth,\n wrapperUrl: redactUrl(vastTagUrl),\n elapsedMs: Date.now() - fetchStartedAt\n });\n }\n console.log(`[HlsAdPlayer] VAST XML received (length=${vastXml.length})`);\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 logFunnel(\"inline_resolved\", { depth });\n return parsed.ad;\n }\n function isEdgeEmptySentinelAd(adElement) {\n if ((adElement.getAttribute(\"id\") || \"\").trim().toLowerCase() === \"empty\") {\n return true;\n }\n const inLine = adElement.querySelector(\":scope > InLine\");\n if (!inLine) return false;\n if (/^no ad available$/i.test(textOf(inLine.querySelector(\":scope > AdTitle\")) ?? \"\")) {\n return true;\n }\n const durations = Array.from(\n inLine.querySelectorAll(\":scope > Creatives > Creative > Linear > Duration\")\n ).map((el) => parseVastTime(textOf(el)));\n return durations.length > 0 && durations.every((seconds) => seconds === 0);\n }\n async function fetchAndParsePod(vastTagUrl, source = \"gam\") {\n lastPodAdElementCount = 0;\n const isEdge = source === \"edge\";\n const vastXml = await fetchVastXml(vastTagUrl, isEdge ? \"omit\" : \"include\", source);\n if (destroyed) return [];\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 logFunnel(\"vast_parsed\", { adElementCount: 0, reason: \"empty_body\" });\n return [];\n }\n const xmlDoc = parseXml(vastXml);\n if (!xmlDoc) {\n logFunnel(\"vast_parsed\", { adElementCount: 0, reason: \"xml_parse_error\" });\n return [];\n }\n const root = xmlDoc.documentElement;\n const adElements = Array.from(root.querySelectorAll(\":scope > Ad\"));\n logFunnel(\"vast_parsed\", {\n reason: adElements.length > 0 ? \"has_ads\" : \"no_ads\",\n vastVersion: root.getAttribute(\"version\") ?? void 0,\n adElementCount: adElements.length,\n inlineCount: adElements.filter((el) => el.querySelector(\":scope > InLine\")).length,\n wrapperCount: adElements.filter((el) => el.querySelector(\":scope > Wrapper\")).length\n });\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\") {\n logFunnel(\"inline_resolved\", { depth: 0 });\n return parsed.ad;\n }\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 let candidates = adElements;\n if (isEdge) {\n candidates = adElements.filter((el) => !isEdgeEmptySentinelAd(el));\n if (candidates.length < adElements.length) {\n logFunnel(\"edge_empty_sentinel\", {\n sentinelCount: adElements.length - candidates.length,\n adElementCount: adElements.length\n });\n }\n }\n const podElements = candidates.filter((el) => getAdSequence(el) !== void 0).sort((a, b) => getAdSequence(a) - getAdSequence(b));\n const buffet = candidates.filter((el) => getAdSequence(el) === void 0);\n const resolveAll = (elements) => Promise.all(elements.map((el) => resolveAd(el).catch(() => null)));\n const ads = [];\n if (podElements.length === 0) {\n for (const ad of await resolveAll(buffet)) {\n if (ad) ads.push(ad);\n }\n } else {\n for (let ad of await resolveAll(podElements)) {\n while (!ad && buffet.length > 0) {\n ad = await resolveAd(buffet.shift()).catch(() => null);\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 lastPodAdElementCount = adElements.length;\n return isEdge ? ads.filter((ad) => ad.duration > 0) : 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 logFunnel(\"first_quartile\");\n fireTrackingPixels(currentAd.trackingUrls.firstQuartile);\n }\n if (progress >= 0.5 && !trackingFired.midpoint) {\n trackingFired.midpoint = true;\n logFunnel(\"midpoint\");\n fireTrackingPixels(currentAd.trackingUrls.midpoint);\n }\n if (progress >= 0.75 && !trackingFired.thirdQuartile) {\n trackingFired.thirdQuartile = true;\n logFunnel(\"third_quartile\");\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 logFunnel(\"playing\", {\n mutedByAutoplay: forcedMuteByAutoplay,\n candidateIndex: mediaCandidateIndex\n });\n logFunnel(\"impression_fired\", {\n pixelCount: currentAd.trackingUrls.impression.length\n });\n if (currentAd.trackingUrls.impression.length === 0) {\n console.warn(\n \"[HlsAdPlayer] Ad started but VAST contained no <Impression> URLs - GAM will not count it\"\n );\n }\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 logFunnel(\"complete\");\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 const vastErrorCode = toVastMediaErrorCode(adVideoElement?.error);\n logFunnel(\"media_error\", {\n mediaErrorCode: adVideoElement?.error?.code,\n errorMessage: adVideoElement?.error?.message,\n networkState: adVideoElement?.networkState,\n readyState: adVideoElement?.readyState,\n currentSrc: adVideoElement?.currentSrc,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n };\n const onMediaDiagnostic = (event) => {\n if (!adPlaying || !adVideoElement || trackingFired.impression) return;\n if (!adVideoElement.currentSrc) return;\n logFunnel(\"media_event\", {\n reason: event.type,\n readyState: adVideoElement.readyState,\n networkState: adVideoElement.networkState,\n currentSrc: adVideoElement.currentSrc\n });\n };\n const onVolumeChange = () => {\n if (!currentAd || !adVideoElement) return;\n if (forcedMuteByAutoplay && !adVideoElement.muted) {\n const userActivation = navigator.userActivation;\n if (userActivation && !userActivation.isActive) {\n logFunnel(\"unexpected_unmute\", { paused: adVideoElement.paused });\n }\n forcedMuteByAutoplay = false;\n }\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 { type: \"stalled\", handler: onMediaDiagnostic },\n { type: \"suspend\", handler: onMediaDiagnostic },\n { type: \"abort\", handler: onMediaDiagnostic },\n { type: \"emptied\", handler: onMediaDiagnostic }\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 toVastPlayErrorCode(error) {\n return error?.name === \"NotSupportedError\" ? VAST_ERROR_NO_SUPPORTED_MEDIA : VAST_ERROR_MEDIA_DISPLAY;\n }\n function failAdPlayback(context, error) {\n const vastErrorCode = toVastPlayErrorCode(error);\n console.error(`[HlsAdPlayer] Error starting ${context}:`, error);\n logFunnel(\"play_failed\", {\n errorName: error?.name,\n errorMessage: error?.message,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n }\n function startAdPlayback(context, isMutedRetry = false) {\n if (!adVideoElement) return;\n const computed = typeof getComputedStyle === \"function\" && adContainerEl ? getComputedStyle(adContainerEl) : void 0;\n logFunnel(isMutedRetry ? \"muted_retry\" : \"play_called\", {\n context,\n isConnected: adVideoElement.isConnected,\n clientWidth: adVideoElement.clientWidth,\n clientHeight: adVideoElement.clientHeight,\n containerDisplay: computed?.display,\n containerVisibility: computed?.visibility\n });\n const playPromise = adVideoElement.play();\n pendingPlayPromise = playPromise;\n playPromise.catch((error) => {\n if (pendingPlayPromise !== playPromise) {\n return;\n }\n logFunnel(\"play_rejected\", {\n context,\n errorName: error?.name,\n errorMessage: error?.message\n });\n if (!isMutedRetry && error?.name === \"NotAllowedError\" && adVideoElement && !adVideoElement.muted) {\n console.warn(\n `[HlsAdPlayer] Unmuted ${context} blocked by autoplay policy - retrying muted`\n );\n originalMutedState = true;\n forcedMuteByAutoplay = true;\n adVideoElement.muted = true;\n startAdPlayback(context, true);\n return;\n }\n failAdPlayback(context, error);\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 clearMediaStartTimer() {\n if (mediaStartTimerId !== void 0) {\n clearTimeout(mediaStartTimerId);\n mediaStartTimerId = void 0;\n }\n }\n function startMediaStartTimer() {\n clearMediaStartTimer();\n if (!(MEDIA_START_TIMEOUT_MS > 0)) return;\n const startedAt = Date.now();\n mediaStartTimerId = setTimeout(() => {\n mediaStartTimerId = void 0;\n if (!adPlaying || trackingFired.impression) return;\n console.warn(\n `[HlsAdPlayer] Ad media did not start playing within ${MEDIA_START_TIMEOUT_MS}ms`\n );\n logFunnel(\"play_resolved_but_never_started\", {\n timeoutMs: MEDIA_START_TIMEOUT_MS,\n elapsedMs: Date.now() - startedAt,\n readyState: adVideoElement?.readyState,\n networkState: adVideoElement?.networkState,\n currentSrc: adVideoElement?.currentSrc,\n paused: adVideoElement?.paused,\n vastErrorCode: VAST_ERROR_MEDIA_TIMEOUT\n });\n recoverFromAdFailure(VAST_ERROR_MEDIA_TIMEOUT);\n }, MEDIA_START_TIMEOUT_MS);\n }\n function resetVideoElementForNextSource() {\n clearStallWatchdog();\n if (requiresMediaPipelineResetAfterAds()) {\n recreateAdVideoElement();\n setupAdEventListeners();\n } else {\n prepareVideoElementForNewSource();\n }\n }\n function tryNextMediaCandidate() {\n if (!currentAd || trackingFired.impression) return false;\n if (mediaCandidateIndex >= mediaCandidates.length - 1) return false;\n const failedUrl = currentAdMediaFile?.url;\n mediaCandidateIndex++;\n const next = mediaCandidates[mediaCandidateIndex];\n if (!next) return false;\n logFunnel(\"media_fallback\", {\n failedUrl,\n nextUrl: next.url,\n nextType: next.type,\n candidateIndex: mediaCandidateIndex,\n candidateCount: mediaCandidates.length\n });\n resetVideoElementForNextSource();\n try {\n loadMediaCandidate(next);\n return true;\n } catch (error) {\n console.error(\"[HlsAdPlayer] Failed to load fallback media file:\", error);\n return tryNextMediaCandidate();\n }\n }\n function recoverFromAdFailure(vastErrorCode) {\n clearMediaStartTimer();\n if (tryNextMediaCandidate()) return;\n reportCurrentAdError(vastErrorCode);\n if (podIndex < podAds.length - 1 && advanceToNextPodAd()) return;\n handleAdError();\n }\n function loadCurrentAdMedia() {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n mediaCandidates = rankMediaCandidates(currentAd.mediaFiles);\n mediaCandidateIndex = 0;\n const mediaFile = mediaCandidates[0];\n if (!mediaFile) {\n logFunnel(\"media_unsupported\", {\n vastErrorCode: VAST_ERROR_NO_SUPPORTED_MEDIA,\n candidates: currentAd.mediaFiles.length\n });\n reportCurrentAdError(VAST_ERROR_NO_SUPPORTED_MEDIA);\n throw new Error(\"No media file this browser can play\");\n }\n try {\n loadMediaCandidate(mediaFile);\n } catch (error) {\n if (tryNextMediaCandidate()) return;\n reportCurrentAdError(VAST_ERROR_NO_SUPPORTED_MEDIA);\n throw error;\n }\n }\n function loadMediaCandidate(mediaFile) {\n if (!adVideoElement || !currentAd) {\n throw new Error(\"No ad video element or ad to load\");\n }\n currentAdMediaFile = mediaFile;\n const isHlsAd = isHlsMediaFile(mediaFile);\n logFunnel(\"media_selected\", {\n width: mediaFile.width,\n height: mediaFile.height,\n bitrate: mediaFile.bitrate,\n candidateIndex: mediaCandidateIndex,\n candidates: mediaCandidates.length\n });\n console.log(\n `[HlsAdPlayer] Loading ${isHlsAd ? \"HLS\" : \"progressive\"} ad (pod ${podIndex + 1}/${podAds.length || 1}) from: ${mediaFile.url}`\n );\n startMediaStartTimer();\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 logFunnel(\"media_load\", { pipeline: \"hls.js\" });\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 const vastErrorCode = data.type === import_hls.default.ErrorTypes.NETWORK_ERROR ? 401 : VAST_ERROR_MEDIA_DISPLAY;\n logFunnel(\"hls_fatal\", {\n reason: data.details,\n errorName: data.type,\n errorMessage: data.details,\n responseCode: data.response?.code,\n responseText: data.response?.text,\n fragUrl: data.frag?.url,\n vastErrorCode\n });\n recoverFromAdFailure(vastErrorCode);\n }\n });\n } else if (isHlsAd && adVideoElement.canPlayType(\"application/vnd.apple.mpegurl\")) {\n logFunnel(\"media_load\", { pipeline: \"native-hls\" });\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 logFunnel(\"media_load\", { pipeline: \"progressive\" });\n adVideoElement.src = mediaFile.url;\n adVideoElement.load();\n startAdPlayback(\"progressive ad playback\");\n } else {\n clearMediaStartTimer();\n logFunnel(\"media_unsupported\", {\n vastErrorCode: VAST_ERROR_NO_SUPPORTED_MEDIA\n });\n throw new Error(`Unsupported ad media file type: ${mediaFile.type}`);\n }\n }\n function advanceToNextPodAd() {\n clearMediaStartTimer();\n while (podIndex < podAds.length - 1) {\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 resetVideoElementForNextSource();\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 }\n }\n return false;\n }\n function clearStallWatchdog() {\n clearMediaStartTimer();\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 logFunnel(\"stall\", { vastErrorCode: VAST_ERROR_MEDIA_DISPLAY });\n recoverFromAdFailure(VAST_ERROR_MEDIA_DISPLAY);\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 logFunnel(\"decode_failure\", { vastErrorCode: VAST_ERROR_MEDIA_DISPLAY });\n recoverFromAdFailure(VAST_ERROR_MEDIA_DISPLAY);\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, requestOptions) {\n const source = requestOptions?.source ?? \"gam\";\n console.log(`[HlsAdPlayer] Requesting ads (${source}):`, redactUrl(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 if (destroyed) {\n return Promise.reject(new Error(\"Ad player destroyed\"));\n }\n currentVastTagUrl = vastTagUrl;\n pendingRequestAbortReason = void 0;\n logFunnel(\"request_sent\");\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, source);\n }\n if (destroyed) {\n return Promise.reject(new Error(\"Ad player destroyed\"));\n }\n if (!ads.length && pendingRequestAbortReason) {\n throw new Error(pendingRequestAbortReason);\n }\n if (!ads.length && lastPodAdElementCount > 0) {\n console.warn(\"[HlsAdPlayer] VAST response had ads but none were playable\");\n logFunnel(\"vast_fill_rejected\", { adElementCount: lastPodAdElementCount });\n emit(\"ad_error\");\n return Promise.reject(\n new Error(\"VAST fill rejected: no playable ad in response\")\n );\n }\n if (!ads.length) {\n console.warn(\"[HlsAdPlayer] No ads available from VAST response\");\n logFunnel(\"no_fill\");\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 logFunnel(\"vast_received\", {\n adCount: ads.length,\n durations: ads.map((ad) => ad.duration),\n impressionUrls: ads.map((ad) => ad.trackingUrls.impression.length)\n });\n ads.forEach((ad, index) => {\n if (ad.trackingUrls.impression.length === 0) {\n logFunnel(\"vast_missing_impression\", { adIndex: index, missingAdId: ad.id });\n }\n });\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 logFunnel(\"request_failed\", {\n errorMessage: error?.message\n });\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 try {\n loadCurrentAdMedia();\n } catch (loadError) {\n if (!(podIndex < podAds.length - 1 && advanceToNextPodAd())) {\n throw loadError;\n }\n }\n return Promise.resolve();\n } catch (error) {\n console.error(\"[HlsAdPlayer] Error playing ad:\", error);\n logFunnel(\"play_failed\", { errorMessage: error?.message });\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 if (adPlaying && currentAd && !trackingFired.impression) {\n logFunnel(\"stopped_before_start\");\n }\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 if (adPlaying && currentAd && !trackingFired.impression) {\n logFunnel(\"stopped_before_start\");\n }\n settleViewability();\n fireNotUsedForUnplayedAds();\n destroyed = true;\n pendingRequestAbortReason = \"Ad player destroyed\";\n for (const controller of Array.from(pendingVastRequests)) {\n controller.abort();\n }\n pendingVastRequests.clear();\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 setFunnelContext(context) {\n funnelContext = { ...context };\n },\n abortPendingRequest(reason = \"VAST request aborted (timeout)\") {\n if (pendingVastRequests.size === 0) return;\n pendingRequestAbortReason = reason;\n for (const controller of Array.from(pendingVastRequests)) {\n controller.abort();\n }\n pendingVastRequests.clear();\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 const userActivation = navigator.userActivation;\n if (clamped > 0 && forcedMuteByAutoplay && userActivation && !userActivation.isActive) {\n logFunnel(\"unmute_blocked_without_gesture\", { requestedVolume: clamped });\n return;\n }\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 limitPodToBudget(maxDurationMs, maxAds) {\n if (adPlaying) return podAds.length;\n const kept = [];\n const dropped = [];\n let totalMs = 0;\n for (const ad of podAds) {\n const durationMs = Math.round(ad.duration * 1e3);\n if (kept.length < maxAds && totalMs + durationMs <= maxDurationMs) {\n kept.push(ad);\n totalMs += durationMs;\n } else {\n dropped.push(ad);\n }\n }\n if (dropped.length > 0) {\n logFunnel(\"pod_trimmed_to_budget\", {\n keptCount: kept.length,\n droppedCount: dropped.length,\n keptDurationMs: totalMs,\n maxDurationMs,\n maxAds\n });\n for (const ad of dropped) {\n resolvedAds.add(ad);\n fireTrackingPixels(ad.trackingUrls.notUsed, { ad });\n }\n }\n podAds = kept;\n podIndex = 0;\n currentAd = kept[0];\n currentAdMediaFile = void 0;\n return kept.length;\n }\n };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n createHlsAdPlayer\n});\n"]}