stormcloud-video-player 0.8.77 → 0.8.79

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 (39) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs +2 -0
  3. package/lib/Player.cjs.map +1 -1
  4. package/lib/Player.d.cts +1 -1
  5. package/lib/StormcloudPlayer.cjs +230 -7
  6. package/lib/StormcloudPlayer.cjs.map +1 -1
  7. package/lib/index.cjs +230 -7
  8. package/lib/index.cjs.map +1 -1
  9. package/lib/index.d.ts +4 -1
  10. package/lib/index.js +231 -7
  11. package/lib/index.js.map +1 -1
  12. package/lib/player/AdBreakOrchestrator.cjs +5 -1
  13. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  14. package/lib/player/AdConfigManager.cjs +3 -1
  15. package/lib/player/AdConfigManager.cjs.map +1 -1
  16. package/lib/player/ContentHealthWatchdog.cjs +255 -0
  17. package/lib/player/ContentHealthWatchdog.cjs.map +1 -0
  18. package/lib/player/ContentHealthWatchdog.d.cts +40 -0
  19. package/lib/player/StormcloudVideoPlayer.cjs +230 -7
  20. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  21. package/lib/player/StormcloudVideoPlayer.d.cts +1 -0
  22. package/lib/players/HlsPlayer.cjs +230 -7
  23. package/lib/players/HlsPlayer.cjs.map +1 -1
  24. package/lib/players/index.cjs +230 -7
  25. package/lib/players/index.cjs.map +1 -1
  26. package/lib/props.cjs +2 -0
  27. package/lib/props.cjs.map +1 -1
  28. package/lib/sdk/hlsAdPlayer.cjs +16 -6
  29. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  30. package/lib/types.d.cts +2 -0
  31. package/lib/ui/StormcloudVideoPlayer.cjs +230 -7
  32. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  33. package/lib/utils/browserCompat.cjs +7 -0
  34. package/lib/utils/browserCompat.cjs.map +1 -1
  35. package/lib/utils/browserCompat.d.cts +2 -1
  36. package/lib/utils/tracking.cjs +5 -1
  37. package/lib/utils/tracking.cjs.map +1 -1
  38. package/lib/utils/tracking.d.cts +1 -1
  39. package/package.json +2 -2
@@ -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","resetGamCredentialsMode","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","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","INVALID_VAST_PARAM_KEY","removeBrokenAppNameOrphans","params","appName","toDelete","forEach","_value","push","includes","slice","suffix","trimmed","delete","normalizeVastTagUrl","raw","anValue","searchParams","orphanFragments","trim","length","reconstructed","filter","Boolean","join","_match","prefix","val","SCVP_MACRO_DETECT","SCVP_MACRO_PATTERN","SCVP_WHOLE_VALUE_PATTERN","NESTED_QUERY_PARAM_KEYS","safeDecode","decodeURIComponent","findScvpMacroNames","names","text","pass","_m","bracketName","parenName","add","toUpperCase","decoded","Array","keepNone","substituteScvpParams","unresolved","keep","nested","out","replaceMacro","whole","resolved","inner","map","k","v","substituteScvpMacros","baseUrl","replaced","entries","search","append","stripScvpMacros","isPodRequestAbortedError","error","podRequestAborted","LINEAR_TRACKING_EVENTS","textOf","el","textContent","parseVastTime","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","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","code","gamCredentialsMode","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","fn","warn","SENSITIVE_URL_PARAMS","redactUrl","parsed","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","trackingUrl","trackingHost","host","unexpanded","macros","img","Image","timeoutId","release","outcome","clearTimeout","onload","onerror","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","sort","a","b","entry","mediaFile","isProgressiveMediaFile","startsWith","isAudioMediaFile","getMediaProbe","evaluateMediaFile","mf","getAttribute","delivery","codec","category","whyRejected","apiFramework","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","firstEmpty","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","finalizeRequestUrl","controller","startedAt","attempt","resolveDispatchUrl","requestVast","response","Error","AbortController","abort","now","creds","pending","fetch","mode","headers","referrerPolicy","signal","httpStatus","status","ok","elapsedMs","aborted","errorMessage","message","statusText","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 resetGamCredentialsMode: () => resetGamCredentialsMode\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/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/utils/vastMacros.ts\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nvar SCVP_MACRO_DETECT = /\\[SCVP-|%5BSCVP-|\\(SCVP-|%28SCVP-/i;\nvar SCVP_MACRO_PATTERN = /\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\)/gi;\nvar SCVP_WHOLE_VALUE_PATTERN = /^\\s*(?:\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\))\\s*$/i;\nvar NESTED_QUERY_PARAM_KEYS = /* @__PURE__ */ new Set([\"cust_params\"]);\nfunction safeDecode(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return value;\n }\n}\nfunction findScvpMacroNames(url) {\n if (!url) return [];\n const names = /* @__PURE__ */ new Set();\n let text = url;\n for (let pass = 0; pass < 3; pass++) {\n text.replace(SCVP_MACRO_PATTERN, (_m, bracketName, parenName) => {\n names.add(String(bracketName || parenName).toUpperCase());\n return \"\";\n });\n const decoded = safeDecode(text);\n if (decoded === text) break;\n text = decoded;\n }\n return Array.from(names);\n}\nvar keepNone = () => false;\nfunction substituteScvpParams(params, values, unresolved, keep, nested) {\n const out = [];\n const replaceMacro = (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return value;\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n };\n params.forEach((value, key) => {\n const whole = value.match(SCVP_WHOLE_VALUE_PATTERN);\n if (whole) {\n const name = String(whole[1] || whole[2]).toUpperCase();\n const resolved = values.get(name);\n if (resolved != null) {\n out.push([key, resolved]);\n } else if (keep(name)) {\n out.push([key, value]);\n } else {\n unresolved.add(name);\n }\n return;\n }\n if (!SCVP_MACRO_DETECT.test(value)) {\n out.push([key, value]);\n return;\n }\n if (!nested && NESTED_QUERY_PARAM_KEYS.has(key)) {\n const inner = substituteScvpParams(new URLSearchParams(value), values, unresolved, keep, true);\n if (inner.length > 0) {\n out.push([\n key,\n inner.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\")\n ]);\n }\n return;\n }\n out.push([key, value.replace(SCVP_MACRO_PATTERN, replaceMacro)]);\n });\n return out;\n}\nfunction substituteScvpMacros(baseUrl, values, keep = keepNone) {\n const unresolved = /* @__PURE__ */ new Set();\n let url;\n try {\n url = new URL(normalizeVastTagUrl(baseUrl));\n } catch {\n const replaced = baseUrl.replace(\n SCVP_MACRO_PATTERN,\n (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n }\n );\n return { url: replaced, unresolved: Array.from(unresolved) };\n }\n const entries = substituteScvpParams(url.searchParams, values, unresolved, keep, false);\n const search = new URLSearchParams();\n for (const [key, value] of entries) search.append(key, value);\n url.search = search.toString();\n return { url: url.toString(), unresolved: Array.from(unresolved) };\n}\nfunction stripScvpMacros(url) {\n if (findScvpMacroNames(url).length === 0) return { url, unresolved: [] };\n return substituteScvpMacros(url, /* @__PURE__ */ new Map());\n}\n\n// src/player/OptimizedPodRequest.ts\nfunction isPodRequestAbortedError(error) {\n return !!error && error.podRequestAborted === true;\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}\nvar gamCredentialsMode = \"include\";\nfunction resetGamCredentialsMode() {\n gamCredentialsMode = \"include\";\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\", finalizeRequestUrl) {\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 resolveDispatchUrl = () => {\n if (kind === \"wrapper\") return vastTagUrl;\n if (finalizeRequestUrl) return finalizeRequestUrl(vastTagUrl, attempt);\n const { url, unresolved } = stripScvpMacros(vastTagUrl);\n if (unresolved.length > 0) {\n console.warn(\"[HlsAdPlayer] Removed unresolved SCVP macros before dispatch:\", unresolved.join(\", \"));\n }\n return url;\n };\n const requestVast = async (creds) => {\n attempt++;\n const pending = fetch(resolveDispatchUrl(), {\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}_http_request_sent`, { attempt, credentials: creds });\n }\n const response = await pending;\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 (kind === \"gam\" && !controller?.signal.aborted && !isPodRequestAbortedError(error)) {\n gamCredentialsMode = credentials === \"include\" ? \"omit\" : \"include\";\n console.warn(\n `[HlsAdPlayer] GAM fetch failed with credentials=\"${credentials}\"; next GAM request will use credentials=\"${gamCredentialsMode}\":`,\n error\n );\n logFunnel(\"gam_credentials_mode_changed\", {\n from: credentials,\n to: gamCredentialsMode,\n errorMessage: error?.message\n });\n }\n throw error;\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\", finalizeRequestUrl) {\n lastPodAdElementCount = 0;\n const isEdge = source === \"edge\";\n const vastXml = await fetchVastXml(\n vastTagUrl,\n isEdge ? \"omit\" : gamCredentialsMode,\n source,\n finalizeRequestUrl\n );\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, requestOptions?.finalizeRequestUrl);\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 resetGamCredentialsMode\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","resetGamCredentialsMode","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","prefersProgressiveAdMedia","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","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","INVALID_VAST_PARAM_KEY","removeBrokenAppNameOrphans","params","appName","toDelete","forEach","_value","push","includes","slice","suffix","trimmed","delete","normalizeVastTagUrl","raw","anValue","searchParams","orphanFragments","trim","length","reconstructed","filter","Boolean","join","_match","prefix","val","SCVP_MACRO_DETECT","SCVP_MACRO_PATTERN","SCVP_WHOLE_VALUE_PATTERN","NESTED_QUERY_PARAM_KEYS","safeDecode","decodeURIComponent","findScvpMacroNames","names","text","pass","_m","bracketName","parenName","add","toUpperCase","decoded","Array","keepNone","substituteScvpParams","unresolved","keep","nested","out","replaceMacro","whole","resolved","inner","map","k","v","substituteScvpMacros","baseUrl","replaced","entries","search","append","stripScvpMacros","isPodRequestAbortedError","error","podRequestAborted","LINEAR_TRACKING_EVENTS","textOf","el","textContent","parseVastTime","p","parseFloat","h","m","s","every","n","parseProgressOffset","offset","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","code","gamCredentialsMode","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","fn","warn","SENSITIVE_URL_PARAMS","redactUrl","parsed","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","trackingUrl","trackingHost","host","unexpanded","macros","img","Image","timeoutId","release","outcome","clearTimeout","onload","onerror","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","deprioritizeHls","accepted","file","index","isHls","isHlsMediaFile","mimeForProbe","canPlay","canPlayType","playable","default","isSupported","insecure","details","candidateUrl","candidateType","hlsJs","why","score","resolutionDiff","abs","bitrateDiff","deprioritizedHls","sort","a","b","entry","mediaFile","isProgressiveMediaFile","startsWith","isAudioMediaFile","getMediaProbe","evaluateMediaFile","mf","getAttribute","delivery","codec","category","whyRejected","apiFramework","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","firstEmpty","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","finalizeRequestUrl","controller","startedAt","attempt","resolveDispatchUrl","requestVast","response","Error","AbortController","abort","now","creds","pending","fetch","mode","headers","referrerPolicy","signal","httpStatus","status","ok","elapsedMs","aborted","errorMessage","message","statusText","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","previousSourceUsedHlsJs","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 resetGamCredentialsMode: () => resetGamCredentialsMode\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}\nfunction prefersProgressiveAdMedia() {\n return detectBrowser().isSmartTV;\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/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/utils/vastMacros.ts\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nvar SCVP_MACRO_DETECT = /\\[SCVP-|%5BSCVP-|\\(SCVP-|%28SCVP-/i;\nvar SCVP_MACRO_PATTERN = /\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\)/gi;\nvar SCVP_WHOLE_VALUE_PATTERN = /^\\s*(?:\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\))\\s*$/i;\nvar NESTED_QUERY_PARAM_KEYS = /* @__PURE__ */ new Set([\"cust_params\"]);\nfunction safeDecode(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return value;\n }\n}\nfunction findScvpMacroNames(url) {\n if (!url) return [];\n const names = /* @__PURE__ */ new Set();\n let text = url;\n for (let pass = 0; pass < 3; pass++) {\n text.replace(SCVP_MACRO_PATTERN, (_m, bracketName, parenName) => {\n names.add(String(bracketName || parenName).toUpperCase());\n return \"\";\n });\n const decoded = safeDecode(text);\n if (decoded === text) break;\n text = decoded;\n }\n return Array.from(names);\n}\nvar keepNone = () => false;\nfunction substituteScvpParams(params, values, unresolved, keep, nested) {\n const out = [];\n const replaceMacro = (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return value;\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n };\n params.forEach((value, key) => {\n const whole = value.match(SCVP_WHOLE_VALUE_PATTERN);\n if (whole) {\n const name = String(whole[1] || whole[2]).toUpperCase();\n const resolved = values.get(name);\n if (resolved != null) {\n out.push([key, resolved]);\n } else if (keep(name)) {\n out.push([key, value]);\n } else {\n unresolved.add(name);\n }\n return;\n }\n if (!SCVP_MACRO_DETECT.test(value)) {\n out.push([key, value]);\n return;\n }\n if (!nested && NESTED_QUERY_PARAM_KEYS.has(key)) {\n const inner = substituteScvpParams(new URLSearchParams(value), values, unresolved, keep, true);\n if (inner.length > 0) {\n out.push([\n key,\n inner.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\")\n ]);\n }\n return;\n }\n out.push([key, value.replace(SCVP_MACRO_PATTERN, replaceMacro)]);\n });\n return out;\n}\nfunction substituteScvpMacros(baseUrl, values, keep = keepNone) {\n const unresolved = /* @__PURE__ */ new Set();\n let url;\n try {\n url = new URL(normalizeVastTagUrl(baseUrl));\n } catch {\n const replaced = baseUrl.replace(\n SCVP_MACRO_PATTERN,\n (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n }\n );\n return { url: replaced, unresolved: Array.from(unresolved) };\n }\n const entries = substituteScvpParams(url.searchParams, values, unresolved, keep, false);\n const search = new URLSearchParams();\n for (const [key, value] of entries) search.append(key, value);\n url.search = search.toString();\n return { url: url.toString(), unresolved: Array.from(unresolved) };\n}\nfunction stripScvpMacros(url) {\n if (findScvpMacroNames(url).length === 0) return { url, unresolved: [] };\n return substituteScvpMacros(url, /* @__PURE__ */ new Map());\n}\n\n// src/player/OptimizedPodRequest.ts\nfunction isPodRequestAbortedError(error) {\n return !!error && error.podRequestAborted === true;\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}\nvar gamCredentialsMode = \"include\";\nfunction resetGamCredentialsMode() {\n gamCredentialsMode = \"include\";\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 deprioritizeHls = prefersProgressiveAdMedia();\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 const deprioritizedHls = deprioritizeHls && isHls;\n accepted.push({ file, score, insecure, deprioritizedHls });\n logFunnel(\"media_candidate\", {\n ...details,\n reason: \"accepted\",\n why: insecure ? \"insecure_http_deprioritized\" : deprioritizedHls ? \"hls_deprioritized_on_tv\" : \"playable\",\n score\n });\n });\n accepted.sort((a, b) => {\n if (a.insecure !== b.insecure) return a.insecure ? 1 : -1;\n if (a.deprioritizedHls !== b.deprioritizedHls) {\n return a.deprioritizedHls ? 1 : -1;\n }\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\", finalizeRequestUrl) {\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 resolveDispatchUrl = () => {\n if (kind === \"wrapper\") return vastTagUrl;\n if (finalizeRequestUrl) return finalizeRequestUrl(vastTagUrl, attempt);\n const { url, unresolved } = stripScvpMacros(vastTagUrl);\n if (unresolved.length > 0) {\n console.warn(\"[HlsAdPlayer] Removed unresolved SCVP macros before dispatch:\", unresolved.join(\", \"));\n }\n return url;\n };\n const requestVast = async (creds) => {\n attempt++;\n const pending = fetch(resolveDispatchUrl(), {\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}_http_request_sent`, { attempt, credentials: creds });\n }\n const response = await pending;\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 (kind === \"gam\" && !controller?.signal.aborted && !isPodRequestAbortedError(error)) {\n gamCredentialsMode = credentials === \"include\" ? \"omit\" : \"include\";\n console.warn(\n `[HlsAdPlayer] GAM fetch failed with credentials=\"${credentials}\"; next GAM request will use credentials=\"${gamCredentialsMode}\":`,\n error\n );\n logFunnel(\"gam_credentials_mode_changed\", {\n from: credentials,\n to: gamCredentialsMode,\n errorMessage: error?.message\n });\n }\n throw error;\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\", finalizeRequestUrl) {\n lastPodAdElementCount = 0;\n const isEdge = source === \"edge\";\n const vastXml = await fetchVastXml(\n vastTagUrl,\n isEdge ? \"omit\" : gamCredentialsMode,\n source,\n finalizeRequestUrl\n );\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(reason) {\n console.log(`[HlsAdPlayer] Recreating ad video element (${reason})`);\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 const previousSourceUsedHlsJs = adHls !== void 0;\n if (requiresMediaPipelineResetAfterAds() || previousSourceUsedHlsJs) {\n recreateAdVideoElement(\n previousSourceUsedHlsJs ? \"after hls.js source\" : \"single-decoder platform\"\n );\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, requestOptions?.finalizeRequestUrl);\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 resetGamCredentialsMode\n});\n"]}