stormcloud-video-player 0.8.68 → 0.8.69

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 (37) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs +30 -8
  3. package/lib/Player.cjs.map +1 -1
  4. package/lib/Player.d.cts +2 -1
  5. package/lib/StormcloudPlayer.cjs +5615 -5101
  6. package/lib/StormcloudPlayer.cjs.map +1 -1
  7. package/lib/StormcloudPlayer.d.cts +1 -0
  8. package/lib/index.cjs +5688 -5117
  9. package/lib/index.cjs.map +1 -1
  10. package/lib/index.d.cts +2 -1
  11. package/lib/index.d.ts +81 -1
  12. package/lib/index.js +5663 -5119
  13. package/lib/index.js.map +1 -1
  14. package/lib/player/AdBreakOrchestrator.cjs +314 -113
  15. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  16. package/lib/player/AdBreakOrchestrator.d.cts +9 -3
  17. package/lib/player/FloorLadder.cjs +578 -0
  18. package/lib/player/FloorLadder.cjs.map +1 -0
  19. package/lib/player/FloorLadder.d.cts +74 -0
  20. package/lib/player/StormcloudVideoPlayer.cjs +5615 -5101
  21. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  22. package/lib/player/StormcloudVideoPlayer.d.cts +9 -1
  23. package/lib/players/HlsPlayer.cjs +5615 -5101
  24. package/lib/players/HlsPlayer.cjs.map +1 -1
  25. package/lib/players/index.cjs +5615 -5101
  26. package/lib/players/index.cjs.map +1 -1
  27. package/lib/props.cjs +30 -8
  28. package/lib/props.cjs.map +1 -1
  29. package/lib/props.d.cts +1 -0
  30. package/lib/types.d.cts +22 -1
  31. package/lib/ui/StormcloudVideoPlayer.cjs +5634 -5091
  32. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  33. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
  34. package/lib/utils/vastMacros.cjs +4 -0
  35. package/lib/utils/vastMacros.cjs.map +1 -1
  36. package/lib/utils/vastMacros.d.cts +2 -1
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\AdBreakOrchestrator.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","AdBreakOrchestrator_exports","AdBreakOrchestrator","module","exports","DEFAULT_TRACKING_INGEST_CONFIG","enabled","baseUrl","trackingIngestConfig","isTrackingIngestEnabled","normalizeIngestBaseUrl","replace","buildTrackingIngestUrl","channel","base","ingestPlayerTracking","licenseKey","body","response","error","fetch","method","headers","Authorization","JSON","stringify","ok","console","warn","status","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","gameconsole","stb","settopbox","inferDeviceIdType","navigator","ua","userAgent","test","resolveNativeDeviceId","includeStored","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","deviceId","readStoredDeviceId","isMacroPlaceholder","isZeroedAdId","getOrCreateStoredUuid","storageKey","window","existing","readPersistentId","writePersistentId","id","createUuid","readStoredString","readCookie","localStorage","setItem","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","document","prefix","encodeURIComponent","parts","cookie","split","part","entry","trim","startsWith","decodeURIComponent","slice","length","bytes","crypto","randomUUID","Uint8Array","getRandomValues","seed","Date","now","Math","floor","performanceNow","i","random","hex","toString","padStart","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","deviceIdType","limitAdTracking","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","Set","t","has","toLowerCase","getNativeBridgeSources","source","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","AiryTV","Android","webOS","tizen","amazon","filter","Boolean","keys","result","normalized","normalizeBoolean","getItem","cachedBrowserId","buildAnalyticsContext","config","context","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","screen","platform","vendor","maxTouchPoints","memory","deviceMemory","hardwareConcurrency","screenInfo","width","height","availWidth","availHeight","orientation","type","pixelDepth","deviceType","brand","os","model","isSmartTV","isAndroid","isWebView","isWebApp","includes","webosMatch","match","tizenMatch","tvMatch","androidModelMatch","outerHeight","outerWidth","matchMedia","matches","standalone","angle","substring","domain","location","hostname","origin","path","pathname","language","languages","join","cookieEnabled","doNotTrack","referrer","visibilityState","sha256Hex","input","encodedData","utf8","buffer","hashBuffer","hash","char","fallbackHash","timestamp","subtle","digest","TextEncoder","encode","unescape","charCodeAt","Array","map","b","abs","padEnd","resolvePlayerIdentitySeed","clientInfo","nativeDeviceId","persistedId","getBrowserID","canPublish","buildPlayerMetricEvent","flags","playerId","captureAt","log","toISOString","player_id","device_type","ad_loaded","adLoaded","ad_detect","adDetect","capture_at","input_stream_type","sendAdLoadedTracking","adLoadedInfo","sendHeartbeat","sendAdImpressionTracking","adImpressionInfo","metricEvent","events","ad_played_count","ad_url","adUrl","heartbeatData","getAdAudioVolume","adPlayer","getOriginalMutedState","getOriginalVolume","GAM_AD_HOSTS","ensureVideoAdType","rawUrl","url","URL","searchParams","set","REQUEST_FAILURE_STAGES","host","timing","adConfig","cueManager","placeholder","inAdBreak","showAds","isShowingPlaceholder","adDetectSentForCurrentBreak","slotState","unusableResponsesInBreak","controllerGeneration","requestDiagnostics","Map","breakFunnel","controllerCallInFlight","playbackStartedForCurrentRequest","opportunityEpoch","adPodQueue","defaultMinRemainingMsToRequestAd","defaultMaxNoFillsPerBreak","defaultLiveMaxNoFillsPerBreak","breakDurationWaitMs","pendingAdBreak","debug","analyticsContext","nextAdRequestUrl","baseVastUrl","remaining","min","getWallClockRemainingAdMs","getDurationBudgetRemainingMs","breakDurationMs","generatePodVastUrl","attachImaEventListeners","controller","getAdPlayer","generation","on","event","handler","payload","logOrchestratorFunnel","staleControllerId","currentControllerId","notePodAdStarted","index","total","onAdClick","onAdInteraction","stage","countFunnelStage","reason","pixelCount","attempt","noteAdRequestSent","recordRequestDiagnostic","consecutiveFailures","setSlotState","markAdStarted","adIndex","currentAdIndex","currentVastUrl","catch","recordPlayedAdDuration","getRemainingAdMs","requestNextAd","errorPayload","errorMessage","errorCode","code","vastErrorCode","message","cause","innerError","causeMessage","String","handleAdFailure","clearAdFailsafeTimer","clearAdRequestWatchdog","activeAdRequestToken","resetGamNoFillCounter","expectedAdBreakDurationMs","getAdBreakEndWallClockMs","scheduleAdStopAtBreakBoundary","setAdVolume","hidePlaceholder","video","muted","recreateAdController","controllerId","requestId","currentRequestId","state","shouldShowPlaceholder","show","showPlaceholder","preservedMutedState","preservedVolumeState","destroy","continueLiveStreamDuringAds","shouldContinueLiveStreamDuringAds","newAdPlayer","createAdPlayer","setAdPlayer","initialize","updateOriginalMutedState","clearPendingAdBreak","prefetchTimerId","clearTimeout","pendingScte35CueKey","podAssignedByPrefetch","isBreakActive","getSlotState","beginVmapBreak","breakKey","breakSource","followUpBaseVastUrl","totalAdRequestsInBreak","noteOpportunity","handleAdStart","marker","adBreakDurationMs","currentMuted","currentVolume","epoch","hasPrefetchedUrl","mode","podPlayed","apiVastTagUrl","durationSeconds","failedVastUrls","clear","temporaryFailureUrls","beginNewAdPod","volume","adBreakPlayedDurationMs","totalAdsInBreak","activeScte35BreakKey","adBreakEpoch","vastUrls","waitForBreakDuration","startOptimizedPod","maxWaitMs","deadline","durationMs","Promise","resolve","setTimeout","waitedForMs","max","resolved","podUrl","prefetched","requestToken","podCount","noteVastUrlGenerated","adRequestTokenCounter","beginFunnelRequest","enforceGlobalRateLimit","isStale","startAdRequestWatchdog","callController","requestAds","getPodAdCount","recordRequestFailure","Error","vastUrl","startAdFailsafeTimer","play","next","previous","breakId","getMinRemainingMsToRequestAd","configured","minRemainingMsToRequestAd","getMinRemainingMsToStartAd","getMaxNoFillsPerBreak","maxNoFillsPerBreak","isBreakTimeBounded","getStopRequestingReason","remainingMs","maxConsecutiveFailures","maxTotalAdRequestsPerBreak","isGamInCooldown","getNextRequestDelayMs","failures","backoff","backoffBaseMs","pow","maxBackoffMs","minInterval","minAdRequestIntervalMs","sinceLast","lastAdRequestTime","trigger","why","nextAdTimerId","stopReason","decision","requestsSent","unusableResponses","handleAdPodComplete","waitMs","requestFollowUpAd","shift","playSingleAd","continueAfterRequestFailure","cancelScheduledRequest","params","adType","pod","pmad","pmnd","pmxd","vastTagUrl","diag","outcome","vastAdCount","impressionFired","recordGamNoFill","failureReason","isTemporaryAdError","add","gamRequestSent","vastHttpStatus","httpStatus","adElementCount","depth","wrapperDepth","inlineResolved","mediaCandidateCount","whyAccepted","supportedMediaCount","playStarted","finalizeRequestDiagnostics","endReason","delete","gamReturnedAdWithoutImpression","startedAt","fields","withCurrentPodBudget","rawVastTagUrl","maxMs","round","minMs","Number","isFinite","amount","extra","opportunityBreakKey","expectedDurationMs","newRequestId","requestStartedAt","setFunnelContext","isAdLoadingWithoutPlayback","isAdPlaying","noteStopBeforeStart","elapsedSinceRequestMs","handleRequestWatchdogTimeout","abortPendingRequest","ap","requestUrl","adDurationS","isUrlInCooldown","ensureLoadedAdFitsBudget","getLoadedAdDuration","adDurationMs","logBreakFunnel","funnel","count","countPrefix","reduce","indexOf","requestRetries","requests","opportunities","vastUrlsGenerated","gamResponses","requestsSuppressed","duplicates","filled","noFill","fillRejected","gamAdWithoutImpression","playbackFailedAfterFill","requestFailed","requestAbortedTimeout","credentialsRetries","wrapperFailures","noSupportedMedia","vpaidOnly","audioOnly","mediaFilesEvaluated","mediaFilesAccepted","controllerDestroys","staleCallbacks","tagAllowsAudio","missingImpression","discardedBudget","mediaCandidates","mediaRejected","mediaFallbacks","playCalled","playRejected","mutedRetry","startTimeouts","impressions","impressionUrls","trackingRequests","trackingNotLoaded","trackingUnexpandedMacros","trackingInvalidUrls","vastAdFallbacks","mediaEvents","quartile25","quartile50","quartile75","complete","stoppedBeforeStart","stoppedBeforeStartByBreakEnd","unexpectedUnmutes","unmuteBlocked","visibilityHidden","playbackFailures","stages","previousState","alreadyEnded","contentWasInterrupted","resetForBreakEnd","hide","scheduledScte35BreakKey","stop","restoredMuted","restoredVolume","style","visibility","opacity","requiresMediaPipelineResetAfterAds","reloadLiveStream","monitorLiveResumeStall","currentTime","resumeContentPlayback","liveSyncPos","getLiveSyncPosition","toFixed","restartHlsLoad","getBufferedAhead","ranges","buffered","start","end","describeVideoState","networkStates","readyStates","v","net","networkState","ready","readyState","err","push","paused","ended","seeking","resumeBaseline","needsReset","pollIntervalMs","graceMs","recoveryCooldownMs","maxRecoveries","maxMonitorMs","startTime","baseline","recoveries","lastRecoveryAt","listenersAttached","onMediaEvent","diagEvents","e","dt","addEventListener","cleanup","removeEventListener","poll","advanced","playing","elapsed","bufferedAhead","wedged","canRecover","recoverMediaError","reloadPos","maxAttempts","onReady","backoffMs","playResult"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator_exports = {};\n__export(AdBreakOrchestrator_exports, {\n AdBreakOrchestrator: () => AdBreakOrchestrator\n});\nmodule.exports = __toCommonJS(AdBreakOrchestrator_exports);\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/vastEnvironmentSignals.ts\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar 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};\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction resolveNativeDeviceId(includeStored = true) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\n\n// src/utils/vastMacros.ts\nvar GAM_AD_HOSTS = /* @__PURE__ */ new Set([\n \"pubads.g.doubleclick.net\",\n \"securepubads.g.doubleclick.net\"\n]);\nfunction ensureVideoAdType(rawUrl) {\n try {\n const url = new URL(rawUrl);\n if (!GAM_AD_HOSTS.has(url.hostname)) return rawUrl;\n if (url.searchParams.has(\"ad_type\")) return rawUrl;\n url.searchParams.set(\"ad_type\", \"video\");\n return url.toString();\n } catch {\n return rawUrl;\n }\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar REQUEST_FAILURE_STAGES = /* @__PURE__ */ new Set([\n \"no_fill\",\n \"vast_fill_rejected\",\n \"request_failed\",\n \"media_unsupported\",\n \"play_failed\",\n \"play_resolved_but_never_started\",\n \"hls_fatal\",\n \"media_error\",\n \"stall\",\n \"decode_failure\"\n]);\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.slotState = \"IDLE\";\n this.unusableResponsesInBreak = 0;\n this.controllerGeneration = 0;\n this.requestDiagnostics = /* @__PURE__ */ new Map();\n this.breakFunnel = {};\n this.controllerCallInFlight = false;\n this.playbackStartedForCurrentRequest = false;\n this.opportunityEpoch = -1;\n this.adPodQueue = [];\n this.defaultMinRemainingMsToRequestAd = 1e4;\n this.defaultMaxNoFillsPerBreak = 2;\n this.defaultLiveMaxNoFillsPerBreak = 1;\n this.breakDurationWaitMs = 300;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const controller = this.host.getAdPlayer();\n const generation = this.controllerGeneration;\n const adPlayer = {\n on: (event, handler) => {\n controller.on(event, (payload) => {\n if (generation !== this.controllerGeneration) {\n this.logOrchestratorFunnel(\"stale_callback_ignored\", {\n event,\n staleControllerId: generation,\n currentControllerId: this.controllerGeneration\n });\n return;\n }\n handler(payload);\n });\n }\n };\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"ad_funnel\", (payload) => {\n if (!payload?.stage) return;\n const stage = payload.stage;\n this.countFunnelStage(stage);\n if (payload.reason) {\n this.countFunnelStage(`${stage}:${payload.reason}`);\n }\n if (stage === \"impression_fired\" && payload.pixelCount != null) {\n this.countFunnelStage(\"impression_urls\", payload.pixelCount);\n }\n if (payload.visibilityState === \"hidden\") {\n this.countFunnelStage(\"while_hidden\");\n }\n if (stage === \"gam_http_request_sent\") {\n if (payload.attempt === 1) {\n this.timing.noteAdRequestSent();\n } else {\n this.countFunnelStage(\"gam_http_request_retry\");\n }\n }\n this.recordRequestDiagnostic(payload);\n });\n adPlayer.on(\"ad_impression\", () => {\n this.timing.consecutiveFailures = 0;\n this.setSlotState(\"PLAYING\", \"impression\");\n if (!this.playbackStartedForCurrentRequest) {\n this.playbackStartedForCurrentRequest = true;\n this.timing.markAdStarted();\n }\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n {\n source: \"hls\",\n adIndex: this.timing.currentAdIndex,\n ...this.currentVastUrl ? { adUrl: this.currentVastUrl } : {},\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n this.analyticsContext\n ).catch(() => {\n });\n });\n adPlayer.on(\"all_ads_completed\", () => {\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms`\n );\n }\n if (this.inAdBreak) {\n this.setSlotState(\"NEEDS_NEXT_AD\", \"all_ads_completed\");\n this.requestNextAd(\"all_ads_completed\");\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n if (this.controllerCallInFlight) {\n if (this.debug) {\n console.log(\"[AdBreak] ad_error during request/play; outcome reported by the caller\", errorPayload || \"\");\n }\n return;\n }\n let errorMessage = \"Ad error (no details)\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure(\"ad_error\");\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n if (this.debug) {\n console.log(\n `[AdBreak] content_resume: remaining=${this.timing.getRemainingAdMs()}ms`\n );\n }\n this.setSlotState(\"NEEDS_NEXT_AD\", \"ad_complete\");\n this.requestNextAd(\"ad_complete\");\n });\n }\n recreateAdController(reason) {\n if (reason === \"new_request\" && (this.slotState === \"REQUESTING\" || this.slotState === \"READY\")) {\n console.warn(\"[AD-CONTROLLER] destroy during active request\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: this.slotState,\n reason\n });\n }\n console.log(\"[AD-CONTROLLER] destroy\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: this.slotState,\n reason\n });\n this.countFunnelStage(`controller_destroy:${reason}`);\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n this.playbackStartedForCurrentRequest = false;\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n this.controllerGeneration++;\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (this.debug) {\n console.log(\"[AD-CONTROLLER] create\", {\n controllerId: this.controllerGeneration,\n reason\n });\n }\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n isBreakActive() {\n return this.slotState !== \"IDLE\";\n }\n getSlotState() {\n return this.slotState;\n }\n beginVmapBreak(breakKey) {\n this.breakSource = \"vmap\";\n this.followUpBaseVastUrl = void 0;\n this.unusableResponsesInBreak = 0;\n this.timing.totalAdRequestsInBreak = 0;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"vmap_break_start\");\n this.noteOpportunity(\"vmap\", breakKey);\n }\n async handleAdStart(marker) {\n if (this.slotState !== \"IDLE\") {\n this.logOrchestratorFunnel(\"duplicate_break_start\", {\n source: \"scte35\",\n state: this.slotState\n });\n return;\n }\n const baseVastUrl = this.adConfig.apiVastTagUrl;\n if (!baseVastUrl) {\n console.warn(\"[AdBreak] SCTE-35 break started but no direct VAST tag is configured\");\n this.clearPendingAdBreak();\n return;\n }\n let adBreakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs;\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n this.breakSource = \"scte35\";\n this.followUpBaseVastUrl = baseVastUrl;\n this.unusableResponsesInBreak = 0;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"scte35_break_start\");\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n this.noteOpportunity(\"scte35\", this.cueManager.activeScte35BreakKey);\n const epoch = this.timing.adBreakEpoch;\n const hasPrefetchedUrl = !!(this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0);\n if (adBreakDurationMs == null && !hasPrefetchedUrl) {\n adBreakDurationMs = await this.waitForBreakDuration(this.breakDurationWaitMs);\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n }\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[AdBreak] ${mode} break start: target duration=${adBreakDurationMs != null ? `${adBreakDurationMs}ms` : \"unknown\"}`\n );\n }\n const podPlayed = await this.startOptimizedPod(baseVastUrl, adBreakDurationMs);\n if (!podPlayed && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n this.setSlotState(\"NEEDS_NEXT_AD\", \"initial_request_failed\");\n this.requestNextAd(\"initial_request_failed\");\n }\n }\n async waitForBreakDuration(maxWaitMs) {\n const deadline = Date.now() + maxWaitMs;\n while (this.timing.expectedAdBreakDurationMs == null && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n if (!this.inAdBreak) break;\n }\n const durationMs = this.timing.expectedAdBreakDurationMs;\n this.logOrchestratorFunnel(\"break_duration_wait\", {\n waitedForMs: maxWaitMs - Math.max(0, deadline - Date.now()),\n durationMs,\n resolved: durationMs != null\n });\n return durationMs;\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs) {\n let podUrl;\n const prefetched = !!(this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0);\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.noteVastUrlGenerated(podUrl, prefetched ? \"prefetch\" : \"break_start\");\n const epoch = this.timing.adBreakEpoch;\n this.recreateAdController(\"new_request\");\n const generation = this.controllerGeneration;\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.currentVastUrl = podUrl;\n this.setSlotState(\"REQUESTING\", \"initial_pod\");\n this.beginFunnelRequest(adPlayer, requestToken, \"initial_pod\");\n try {\n await this.timing.enforceGlobalRateLimit();\n if (this.isStale(epoch, generation)) return true;\n this.timing.startAdRequestWatchdog(requestToken);\n await this.callController(() => adPlayer.requestAds(podUrl));\n this.timing.clearAdRequestWatchdog();\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", { requestId: requestToken });\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n this.recordRequestFailure(new Error(\"No ads available\"), podUrl);\n return false;\n }\n this.setSlotState(\"READY\", \"vast_ready\");\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: podUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await this.callController(() => adPlayer.play());\n if (this.isStale(epoch, generation)) return true;\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(getAdAudioVolume(adPlayer));\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", {\n requestId: requestToken,\n errorMessage: error?.message\n });\n return true;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n this.recordRequestFailure(error, podUrl);\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Next-ad scheduling (single flight)\n // ───────────────────────────────────────────────────────────────\n setSlotState(next, reason) {\n if (this.slotState === next) return;\n const previous = this.slotState;\n this.slotState = next;\n if (this.debug) {\n console.log(`[AdBreak][STATE] ${previous} -> ${next}`, {\n reason,\n breakId: this.timing.adBreakEpoch,\n requestId: this.currentRequestId,\n controllerId: this.controllerGeneration\n });\n }\n }\n isStale(epoch, generation) {\n return !this.inAdBreak || epoch !== this.timing.adBreakEpoch || generation !== this.controllerGeneration;\n }\n getMinRemainingMsToRequestAd() {\n const configured = this.host.config.minRemainingMsToRequestAd;\n const floor = this.timing.getMinRemainingMsToStartAd();\n if (typeof configured === \"number\" && configured >= 0) {\n return Math.max(configured, floor);\n }\n return Math.max(this.defaultMinRemainingMsToRequestAd, floor);\n }\n getMaxNoFillsPerBreak() {\n const configured = this.host.config.maxNoFillsPerBreak;\n if (typeof configured === \"number\" && configured > 0) return configured;\n return this.breakSource === \"scte35\" ? this.defaultLiveMaxNoFillsPerBreak : this.defaultMaxNoFillsPerBreak;\n }\n isBreakTimeBounded() {\n return this.breakSource === \"scte35\" || this.timing.expectedAdBreakDurationMs != null;\n }\n getStopRequestingReason(remainingMs) {\n if (this.breakSource === \"vmap\") {\n if (this.adPodQueue.length === 0) return \"vmap_queue_empty\";\n } else if (this.breakSource !== \"scte35\" || !this.followUpBaseVastUrl) {\n return \"no_follow_up_source\";\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n return \"max_consecutive_failures\";\n }\n if (this.unusableResponsesInBreak >= this.getMaxNoFillsPerBreak()) {\n return \"unusable_response_limit\";\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n return \"request_cap\";\n }\n if (this.timing.isGamInCooldown()) {\n return \"gam_cooldown\";\n }\n if (this.isBreakTimeBounded() && remainingMs < this.getMinRemainingMsToRequestAd()) {\n return \"insufficient_break_time\";\n }\n return void 0;\n }\n getNextRequestDelayMs() {\n const failures = this.timing.consecutiveFailures;\n const backoff = failures > 0 ? Math.min(this.timing.backoffBaseMs * Math.pow(2, failures), this.timing.maxBackoffMs) : 0;\n const minInterval = this.timing.minAdRequestIntervalMs + backoff;\n const sinceLast = Date.now() - this.timing.lastAdRequestTime;\n return Math.max(0, minInterval - sinceLast);\n }\n requestNextAd(trigger) {\n if (!this.inAdBreak) return;\n if (this.slotState !== \"NEEDS_NEXT_AD\") {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"slot_busy\"\n });\n return;\n }\n if (this.nextAdTimerId != null) {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"request_already_scheduled\"\n });\n return;\n }\n const remainingMs = this.timing.getRemainingAdMs();\n const stopReason = this.getStopRequestingReason(remainingMs);\n if (stopReason) {\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: \"end_break\",\n reason: stopReason,\n remainingMs,\n requestsSent: this.timing.totalAdRequestsInBreak,\n unusableResponses: this.unusableResponsesInBreak,\n consecutiveFailures: this.timing.consecutiveFailures\n });\n this.handleAdPodComplete(stopReason);\n return;\n }\n const waitMs = this.getNextRequestDelayMs();\n if (waitMs > 0 && this.isBreakTimeBounded() && remainingMs - waitMs < this.getMinRemainingMsToRequestAd()) {\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: \"end_break\",\n reason: \"insufficient_break_time_after_backoff\",\n remainingMs,\n waitMs\n });\n this.handleAdPodComplete(\"insufficient_break_time_after_backoff\");\n return;\n }\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: waitMs > 0 ? \"request_after_delay\" : \"request_now\",\n waitMs,\n remainingMs,\n consecutiveFailures: this.timing.consecutiveFailures\n });\n if (waitMs > 0) {\n if (!this.isShowingPlaceholder) {\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n }\n const epoch = this.timing.adBreakEpoch;\n this.nextAdTimerId = window.setTimeout(() => {\n this.nextAdTimerId = void 0;\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n this.requestNextAd(`${trigger}:after_delay`);\n }, waitMs);\n return;\n }\n void this.requestFollowUpAd(trigger);\n }\n async requestFollowUpAd(trigger) {\n let url;\n if (this.breakSource === \"vmap\") {\n url = this.adPodQueue.shift();\n } else if (this.followUpBaseVastUrl) {\n url = this.nextAdRequestUrl(this.followUpBaseVastUrl);\n }\n if (!url) return;\n this.noteVastUrlGenerated(ensureVideoAdType(url), trigger);\n const epoch = this.timing.adBreakEpoch;\n try {\n await this.playSingleAd(url, trigger);\n } catch {\n this.continueAfterRequestFailure(epoch);\n }\n }\n continueAfterRequestFailure(epoch = this.timing.adBreakEpoch) {\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"request_failed\");\n this.requestNextAd(\"after_failure\");\n }\n cancelScheduledRequest() {\n if (this.nextAdTimerId != null) {\n clearTimeout(this.nextAdTimerId);\n this.nextAdTimerId = void 0;\n }\n }\n noteVastUrlGenerated(url, source) {\n let params;\n try {\n params = new URL(url).searchParams;\n } catch {\n }\n const adType = params?.get(\"ad_type\") ?? void 0;\n this.logOrchestratorFunnel(\"vast_url_generated\", {\n requestId: void 0,\n source,\n pod: params?.get(\"pod\") ?? void 0,\n pmad: params?.get(\"pmad\") ?? void 0,\n pmnd: params?.get(\"pmnd\") ?? void 0,\n pmxd: params?.get(\"pmxd\") ?? void 0,\n adType\n });\n if (adType === \"audio\" || adType === \"audio_video\") {\n console.warn(\n `[AdBreak] VAST tag requests ad_type=${adType}; GAM may return audio-only creatives, which this video player rejects`\n );\n this.countFunnelStage(\"tag_allows_audio\");\n }\n }\n recordRequestFailure(error, vastTagUrl) {\n const diag = this.currentRequestId != null ? this.requestDiagnostics.get(this.currentRequestId) : void 0;\n const message = error?.message || \"\";\n let outcome;\n if (message.includes(\"ad_duration_exceeds_budget\")) {\n outcome = \"discarded_budget\";\n } else if (message.includes(\"VAST fill rejected\")) {\n outcome = \"fill_rejected\";\n } else if (/no ads available|no fill|nofill/i.test(message)) {\n outcome = \"no_fill\";\n } else if (/timeout/i.test(message)) {\n outcome = \"request_timeout\";\n } else if (/destroyed|aborted/i.test(message)) {\n outcome = \"request_aborted\";\n } else if (diag && (diag.vastAdCount ?? 0) > 0 && !diag.impressionFired) {\n outcome = \"playback_failed\";\n } else {\n outcome = \"request_failed\";\n }\n this.timing.consecutiveFailures++;\n if (outcome === \"no_fill\" || outcome === \"fill_rejected\" || outcome === \"discarded_budget\") {\n this.unusableResponsesInBreak++;\n }\n if (outcome === \"no_fill\") {\n this.timing.recordGamNoFill();\n }\n if (diag && !diag.failureReason) {\n diag.failureReason = `${outcome}: ${message}`;\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n } else if (outcome !== \"discarded_budget\") {\n this.timing.failedVastUrls.add(vastTagUrl);\n }\n this.countFunnelStage(`request_outcome:${outcome}`);\n this.logOrchestratorFunnel(\"request_outcome\", {\n outcome,\n errorMessage: message,\n consecutiveFailures: this.timing.consecutiveFailures,\n unusableResponsesInBreak: this.unusableResponsesInBreak\n });\n }\n // ───────────────────────────────────────────────────────────────\n // Per-request diagnostics\n // ───────────────────────────────────────────────────────────────\n recordRequestDiagnostic(payload) {\n const requestId = payload.requestId;\n if (typeof requestId !== \"number\") return;\n const diag = this.requestDiagnostics.get(requestId);\n if (!diag) return;\n switch (payload.stage) {\n case \"gam_http_request_sent\":\n diag.gamRequestSent++;\n break;\n case \"gam_response_received\":\n diag.vastHttpStatus = payload.httpStatus;\n break;\n case \"vast_parsed\":\n diag.vastAdCount = payload.adElementCount;\n break;\n case \"wrapper_fetch\":\n case \"inline_resolved\":\n if (typeof payload.depth === \"number\") {\n diag.wrapperDepth = Math.max(diag.wrapperDepth, payload.depth);\n }\n if (payload.stage === \"inline_resolved\") diag.inlineResolved = true;\n break;\n case \"mediafile_evaluated\":\n diag.mediaCandidateCount++;\n if (payload.whyAccepted) diag.supportedMediaCount++;\n break;\n case \"playing\":\n diag.playStarted = true;\n break;\n case \"impression_fired\":\n diag.impressionFired = true;\n break;\n default:\n if (REQUEST_FAILURE_STAGES.has(payload.stage) && !diag.failureReason) {\n diag.failureReason = payload.reason ? `${payload.stage}:${payload.reason}` : payload.stage;\n }\n }\n }\n finalizeRequestDiagnostics(requestId, endReason) {\n if (requestId == null) return;\n const diag = this.requestDiagnostics.get(requestId);\n if (!diag) return;\n this.requestDiagnostics.delete(requestId);\n if (!diag.impressionFired && !diag.failureReason && endReason) {\n diag.failureReason = endReason;\n }\n const gamReturnedAdWithoutImpression = (diag.vastAdCount ?? 0) > 0 && !diag.impressionFired;\n if (gamReturnedAdWithoutImpression) {\n this.countFunnelStage(\"gam_ad_without_impression\");\n }\n const { startedAt, ...fields } = diag;\n console.log(\"[AdBreak][REQUEST] summary\", {\n ...fields,\n durationMs: Date.now() - startedAt,\n gamReturnedAdWithoutImpression\n });\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n withCurrentPodBudget(rawVastTagUrl) {\n const vastTagUrl = ensureVideoAdType(rawVastTagUrl);\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (!(remaining > 0)) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n if (!url.searchParams.has(\"pmxd\")) return vastTagUrl;\n const maxMs = Math.round(remaining);\n url.searchParams.set(\"pmxd\", String(maxMs));\n const minMs = Number(url.searchParams.get(\"pmnd\"));\n if (Number.isFinite(minMs) && minMs > maxMs) {\n url.searchParams.set(\"pmnd\", String(maxMs));\n }\n return url.toString();\n } catch {\n return vastTagUrl;\n }\n }\n countFunnelStage(stage, amount = 1) {\n this.breakFunnel[stage] = (this.breakFunnel[stage] ?? 0) + amount;\n }\n logOrchestratorFunnel(stage, extra = {}) {\n this.countFunnelStage(stage);\n console.log(`[AdBreak][FUNNEL] ${stage}`, {\n breakId: this.timing.adBreakEpoch,\n requestId: this.currentRequestId,\n visibilityState: typeof document !== \"undefined\" ? document.visibilityState : void 0,\n ...extra\n });\n }\n noteOpportunity(source, breakKey) {\n if (breakKey && breakKey === this.opportunityBreakKey && this.opportunityEpoch === this.timing.adBreakEpoch) {\n this.logOrchestratorFunnel(\"duplicate_break_start\", { source, breakKey });\n return;\n }\n this.opportunityBreakKey = breakKey;\n this.opportunityEpoch = this.timing.adBreakEpoch;\n this.logOrchestratorFunnel(\"opportunity_created\", {\n source,\n breakKey,\n expectedDurationMs: this.timing.expectedAdBreakDurationMs\n });\n }\n beginFunnelRequest(adPlayer, requestToken, trigger) {\n if (this.controllerCallInFlight) {\n this.logOrchestratorFunnel(\"duplicate_request_detected\", {\n newRequestId: requestToken\n });\n }\n this.finalizeRequestDiagnostics(this.currentRequestId);\n this.currentRequestId = requestToken;\n this.requestStartedAt = Date.now();\n this.requestDiagnostics.set(requestToken, {\n breakId: this.timing.adBreakEpoch,\n requestId: requestToken,\n controllerId: this.controllerGeneration,\n trigger,\n gamRequestSent: 0,\n wrapperDepth: 0,\n inlineResolved: false,\n mediaCandidateCount: 0,\n supportedMediaCount: 0,\n playStarted: false,\n impressionFired: false,\n startedAt: Date.now()\n });\n adPlayer.setFunnelContext?.({\n breakId: this.timing.adBreakEpoch,\n requestId: requestToken,\n controllerId: this.controllerGeneration\n });\n }\n isAdLoadingWithoutPlayback() {\n return this.host.getAdPlayer().isAdPlaying() && !this.playbackStartedForCurrentRequest;\n }\n noteStopBeforeStart(reason) {\n if (!this.isAdLoadingWithoutPlayback()) return;\n this.logOrchestratorFunnel(\"ad_stopped_before_start\", {\n reason,\n elapsedSinceRequestMs: this.requestStartedAt != null ? Date.now() - this.requestStartedAt : void 0\n });\n }\n handleRequestWatchdogTimeout() {\n const adPlayer = this.host.getAdPlayer();\n if (this.controllerCallInFlight && adPlayer.abortPendingRequest) {\n this.logOrchestratorFunnel(\"request_aborted_timeout\", {\n elapsedSinceRequestMs: this.requestStartedAt != null ? Date.now() - this.requestStartedAt : void 0\n });\n adPlayer.abortPendingRequest(\n \"VAST request aborted after request watchdog timeout\"\n );\n return;\n }\n this.handleAdFailure(\"request_watchdog_timeout\");\n }\n async callController(call) {\n this.controllerCallInFlight = true;\n try {\n await call();\n } finally {\n this.controllerCallInFlight = false;\n }\n }\n async playSingleAd(vastTagUrl, trigger = \"vmap\") {\n if (this.slotState === \"REQUESTING\" || this.slotState === \"READY\" || this.slotState === \"PLAYING\" || this.slotState === \"ENDING\") {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"request_in_flight\"\n });\n return;\n }\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n this.timing.consecutiveFailures++;\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n this.timing.consecutiveFailures++;\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n const epoch = this.timing.adBreakEpoch;\n this.recreateAdController(\"new_request\");\n const generation = this.controllerGeneration;\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n const ap = this.host.getAdPlayer();\n const requestUrl = this.withCurrentPodBudget(vastTagUrl);\n this.currentVastUrl = requestUrl;\n this.setSlotState(\"REQUESTING\", trigger);\n this.beginFunnelRequest(ap, requestToken, trigger);\n try {\n await this.timing.enforceGlobalRateLimit();\n if (this.isStale(epoch, generation)) return;\n this.timing.startAdRequestWatchdog(requestToken);\n await this.callController(() => ap.requestAds(requestUrl));\n this.timing.clearAdRequestWatchdog();\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", { requestId: requestToken });\n return;\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: requestUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n const adDurationS = ap.getLoadedAdDuration?.();\n const remainingMs = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n this.logOrchestratorFunnel(\"discarded_budget\", {\n adDurationMs: adDurationS != null ? adDurationS * 1e3 : void 0,\n remainingMs\n });\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n this.setSlotState(\"READY\", \"vast_ready\");\n this.timing.startAdFailsafeTimer(requestToken);\n await this.callController(() => ap.play());\n if (this.isStale(epoch, generation)) return;\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", {\n requestId: requestToken,\n errorMessage: error?.message\n });\n return;\n }\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", error?.message);\n this.recordRequestFailure(error, vastTagUrl);\n if (error?.message === \"ad_duration_exceeds_budget\") {\n this.recreateAdController(\"discarded_budget\");\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n logBreakFunnel(endReason) {\n const funnel = this.breakFunnel;\n this.breakFunnel = {};\n if (Object.keys(funnel).length === 0) return;\n const count = (stage) => funnel[stage] ?? 0;\n const countPrefix = (prefix) => Object.keys(funnel).reduce(\n (total, stage) => stage.indexOf(prefix) === 0 ? total + (funnel[stage] ?? 0) : total,\n 0\n );\n const breakId = this.opportunityEpoch;\n const requestRetries = count(\"gam_http_request_retry\");\n const requests = count(\"gam_http_request_sent\") - requestRetries;\n if (requests > 0 && count(\"impression_fired\") === 0) {\n console.log(\"[AdBreak][FUNNEL] break_abandoned_before_start\", {\n breakId,\n requests,\n endReason\n });\n }\n console.log(\"[AdBreak][FUNNEL] Break summary\", {\n breakId,\n endReason,\n opportunities: count(\"opportunity_created\"),\n vastUrlsGenerated: count(\"vast_url_generated\"),\n requests,\n requestRetries,\n gamResponses: count(\"gam_response_received\"),\n requestsSuppressed: count(\"request_suppressed\"),\n duplicates: count(\"duplicate_request_detected\") + count(\"duplicate_break_start\"),\n filled: count(\"vast_received\"),\n noFill: count(\"no_fill\"),\n fillRejected: count(\"vast_fill_rejected\"),\n gamAdWithoutImpression: count(\"gam_ad_without_impression\"),\n playbackFailedAfterFill: count(\"request_outcome:playback_failed\"),\n requestFailed: count(\"request_failed\"),\n requestAbortedTimeout: count(\"request_aborted_timeout\"),\n credentialsRetries: count(\"vast_credentials_retry\"),\n wrapperFailures: count(\"wrapper_fetch:failure\"),\n noSupportedMedia: count(\"vast_no_supported_media\"),\n vpaidOnly: count(\"vast_no_supported_media:vpaid\"),\n audioOnly: count(\"vast_no_supported_media:audio_only\"),\n mediaFilesEvaluated: count(\"mediafile_evaluated\"),\n mediaFilesAccepted: count(\"mediafile_evaluated:accepted\"),\n controllerDestroys: countPrefix(\"controller_destroy:\"),\n staleCallbacks: count(\"stale_callback_ignored\") + count(\"stale_request_result_ignored\"),\n tagAllowsAudio: count(\"tag_allows_audio\"),\n missingImpression: count(\"vast_missing_impression\"),\n discardedBudget: count(\"discarded_budget\"),\n mediaCandidates: count(\"media_candidate:accepted\") + count(\"media_candidate:rejected\"),\n mediaRejected: count(\"media_candidate:rejected\"),\n mediaFallbacks: count(\"media_fallback\"),\n playCalled: count(\"play_called\"),\n playRejected: count(\"play_rejected\"),\n mutedRetry: count(\"muted_retry\"),\n startTimeouts: count(\"play_resolved_but_never_started\"),\n impressions: count(\"impression_fired\"),\n impressionUrls: count(\"impression_urls\"),\n trackingRequests: count(\"tracking_request_created\"),\n trackingNotLoaded: count(\"tracking_request_settled:error\") + count(\"tracking_request_settled:timeout\"),\n trackingUnexpandedMacros: count(\"tracking_url_unexpanded_macro\"),\n trackingInvalidUrls: count(\"tracking_url_invalid\"),\n vastAdFallbacks: count(\"vast_ad_fallback\"),\n mediaEvents: count(\"media_event\"),\n quartile25: count(\"first_quartile\"),\n quartile50: count(\"midpoint\"),\n quartile75: count(\"third_quartile\"),\n complete: count(\"complete\"),\n stoppedBeforeStart: count(\"stopped_before_start\"),\n stoppedBeforeStartByBreakEnd: count(\"ad_stopped_before_start\"),\n unexpectedUnmutes: count(\"unexpected_unmute\"),\n unmuteBlocked: count(\"unmute_blocked_without_gesture\"),\n visibilityHidden: count(\"while_hidden\"),\n playbackFailures: count(\"play_failed\") + count(\"media_error\") + count(\"hls_fatal\") + count(\"stall\") + count(\"decode_failure\") + count(\"media_unsupported\"),\n stages: funnel\n });\n }\n handleAdPodComplete(reason = \"unspecified\") {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\", { reason });\n }\n const previousState = this.slotState;\n const alreadyEnded = previousState === \"IDLE\" && !this.inAdBreak;\n this.setSlotState(\"ENDING\", reason);\n this.cancelScheduledRequest();\n const adPlayer = this.host.getAdPlayer();\n if (previousState === \"REQUESTING\") {\n adPlayer.abortPendingRequest?.(`VAST request aborted: ad break ended (${reason})`);\n }\n if (!alreadyEnded) {\n console.log(\"[AD-CONTROLLER] stop\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: previousState,\n reason\n });\n }\n this.finalizeRequestDiagnostics(this.currentRequestId, `break_ended:${reason}`);\n this.currentRequestId = void 0;\n const contentWasInterrupted = this.showAds || this.isShowingPlaceholder || (this.breakFunnel[\"play_called\"] ?? 0) > 0 || (this.breakFunnel[\"impression_fired\"] ?? 0) > 0;\n this.timing.resetForBreakEnd();\n this.placeholder.hide();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n adPlayer.hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.breakSource = void 0;\n this.followUpBaseVastUrl = void 0;\n this.unusableResponsesInBreak = 0;\n adPlayer.stop().catch(() => {\n });\n if (!alreadyEnded) this.logBreakFunnel(reason);\n this.setSlotState(\"IDLE\", \"break_complete\");\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n if (!contentWasInterrupted) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Live break end \\u2014 no ad was shown, leaving playback position unchanged\");\n }\n this.resumeContentPlayback();\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure(reason = \"ad_failure\") {\n if (!this.inAdBreak) return;\n if (this.slotState === \"REQUESTING\" || this.slotState === \"ENDING\") {\n this.logOrchestratorFunnel(\"failure_deferred_to_request\", {\n reason,\n state: this.slotState\n });\n return;\n }\n this.timing.consecutiveFailures++;\n const diag = this.currentRequestId != null ? this.requestDiagnostics.get(this.currentRequestId) : void 0;\n if (diag && !diag.failureReason) diag.failureReason = reason;\n if (this.debug) {\n console.log(\n `[AdBreak] Ad failure (${reason}): remaining=${this.timing.getRemainingAdMs()}ms, consecutiveFailures=${this.timing.consecutiveFailures}`\n );\n }\n this.setSlotState(\"NEEDS_NEXT_AD\", reason);\n this.requestNextAd(reason);\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AdBreakOrchestrator\n});\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\AdBreakOrchestrator.cjs"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","AdBreakOrchestrator_exports","AdBreakOrchestrator","module","exports","PLAYER_ID_STORAGE_KEY","DEVICE_ID_STORAGE_KEYS","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","inferDeviceIdType","navigator","ua","userAgent","test","resolveNativeDeviceId","includeStored","bridgeSignals","readNativeBridgeSignals","platformDevice","readPlatformNativeDeviceId","deviceId","readStoredDeviceId","isMacroPlaceholder","isZeroedAdId","getOrCreateStoredUuid","storageKey","window","existing","readPersistentId","writePersistentId","id","createUuid","readStoredString","readCookie","localStorage","setItem","writeCookie","PERSISTENT_ID_COOKIE_MAX_AGE","document","prefix","encodeURIComponent","parts","cookie","split","part","entry","trim","startsWith","decodeURIComponent","slice","length","bytes","crypto","randomUUID","Uint8Array","getRandomValues","seed","Date","now","Math","floor","performanceNow","i","random","hex","toString","padStart","performance","adinfo","webapis","tifa","getTIFA","lat","isLATEnabled","deviceIdType","limitAdTracking","webOSDev","lgudid","LGUDID","roku","Roku","rida","getPublisherUniqueId","ZEROED_AD_ID_PATTERNS","Set","t","has","toLowerCase","getNativeBridgeSources","source","contentUrl","readBridgeValue","appId","appName","readBridgeBoolean","__STORMCLOUD_CTV_AD_INFO__","__STORMCLOUD_CTV__","stormcloudCtv","AiryTV","Android","webOS","tizen","amazon","filter","Boolean","keys","result","normalized","normalizeBoolean","getItem","GAM_AD_HOSTS","ensureVideoAdType","rawUrl","url","URL","hostname","searchParams","set","DEFAULT_WEB_FLOOR_LADDER_CONFIG","freeze","enabled","targetingKey","minFloorCents","maxFloorCents","stepCents","selectedFloorCents","fallbackFloorCents","readyFloorCents","mode","allowedPositions","targetAdUnitPath","configurationVersion","DEFAULT_FLOOR_LADDER_BOUNDS","minCents","maxCents","decodeQueryComponent","replace","mergeCustParams","decoded","cents","kept","pair","indexOf","push","join","applyFloorToVastUrl","status","floorCents","applied","reason","parsed","hashIndex","beforeHash","hash","queryIndex","base","segments","insertAt","rest","segment","eq","rawKey","merged","splice","query","DEFAULT_TRACKING_INGEST_CONFIG","baseUrl","trackingIngestConfig","isTrackingIngestEnabled","normalizeIngestBaseUrl","buildTrackingIngestUrl","channel","ingestPlayerTracking","licenseKey","body","response","error","fetch","method","headers","Authorization","JSON","stringify","ok","warn","cachedBrowserId","buildAnalyticsContext","config","context","debugAdTiming","isLiveStream","inputStreamType","getClientInfo","screen","platform","vendor","maxTouchPoints","memory","deviceMemory","hardwareConcurrency","screenInfo","width","height","availWidth","availHeight","orientation","type","pixelDepth","deviceType","brand","os","model","isSmartTV","isAndroid","isWebView","isWebApp","includes","webosMatch","match","tizenMatch","tvMatch","androidModelMatch","outerHeight","outerWidth","matchMedia","matches","standalone","angle","substring","domain","location","origin","path","pathname","language","languages","cookieEnabled","doNotTrack","referrer","visibilityState","sha256Hex","input","encodedData","utf8","buffer","hashBuffer","char","fallbackHash","timestamp","subtle","digest","TextEncoder","encode","unescape","charCodeAt","Array","map","b","abs","padEnd","resolvePlayerIdentitySeed","clientInfo","nativeDeviceId","persistedId","getBrowserID","canPublish","buildPlayerMetricEvent","flags","playerId","captureAt","log","toISOString","player_id","device_type","ad_loaded","adLoaded","ad_detect","adDetect","capture_at","input_stream_type","sendAdLoadedTracking","adLoadedInfo","sendHeartbeat","sendAdImpressionTracking","adImpressionInfo","metricEvent","events","ad_played_count","ad_url","adUrl","heartbeatData","getAdAudioVolume","adPlayer","getOriginalMutedState","getOriginalVolume","REQUEST_FAILURE_STAGES","host","timing","adConfig","cueManager","placeholder","inAdBreak","showAds","isShowingPlaceholder","adDetectSentForCurrentBreak","slotState","unusableResponsesInBreak","controllerGeneration","requestDiagnostics","Map","breakFunnel","controllerCallInFlight","playbackStartedForCurrentRequest","opportunityEpoch","adPodQueue","defaultMinRemainingMsToRequestAd","defaultMaxNoFillsPerBreak","defaultLiveMaxNoFillsPerBreak","breakDurationWaitMs","pendingAdBreak","debug","analyticsContext","nextAdRequestUrl","baseVastUrl","remaining","min","getWallClockRemainingAdMs","getDurationBudgetRemainingMs","breakDurationMs","generatePodVastUrl","attachImaEventListeners","controller","getAdPlayer","generation","on","event","handler","payload","logOrchestratorFunnel","staleControllerId","currentControllerId","notePodAdStarted","index","total","onAdClick","onAdInteraction","stage","countFunnelStage","pixelCount","attempt","noteAdRequestSent","recordRequestDiagnostic","consecutiveFailures","setSlotState","markAdStarted","adIndex","currentAdIndex","currentVastUrl","catch","recordPlayedAdDuration","getRemainingAdMs","requestNextAd","errorPayload","errorMessage","errorCode","code","vastErrorCode","message","cause","innerError","causeMessage","String","handleAdFailure","clearAdFailsafeTimer","clearAdRequestWatchdog","activeAdRequestToken","resetGamNoFillCounter","expectedAdBreakDurationMs","getAdBreakEndWallClockMs","scheduleAdStopAtBreakBoundary","setAdVolume","hidePlaceholder","video","muted","recreateAdController","controllerId","requestId","currentRequestId","state","shouldShowPlaceholder","show","showPlaceholder","preservedMutedState","preservedVolumeState","destroy","continueLiveStreamDuringAds","shouldContinueLiveStreamDuringAds","newAdPlayer","createAdPlayer","setAdPlayer","initialize","updateOriginalMutedState","clearPendingAdBreak","prefetchTimerId","clearTimeout","pendingScte35CueKey","podAssignedByPrefetch","isBreakActive","getSlotState","beginVmapBreak","breakKey","position","breakSource","followUpBaseVastUrl","totalAdRequestsInBreak","noteOpportunity","handleAdStart","marker","adBreakDurationMs","currentMuted","currentVolume","epoch","hasPrefetchedUrl","podPlayed","apiVastTagUrl","durationSeconds","failedVastUrls","clear","temporaryFailureUrls","beginNewAdPod","volume","adBreakPlayedDurationMs","totalAdsInBreak","activeScte35BreakKey","adBreakEpoch","vastUrls","waitForBreakDuration","startOptimizedPod","maxWaitMs","deadline","durationMs","Promise","resolve","setTimeout","waitedForMs","max","resolved","podUrl","prefetched","requestToken","requestUrl","podCount","noteVastUrlGenerated","adRequestTokenCounter","beginFunnelRequest","applyOpportunityFloor","enforceGlobalRateLimit","isStale","startAdRequestWatchdog","callController","requestAds","getPodAdCount","recordRequestFailure","Error","vastUrl","startAdFailsafeTimer","play","next","previous","breakId","getMinRemainingMsToRequestAd","configured","minRemainingMsToRequestAd","getMinRemainingMsToStartAd","getMaxNoFillsPerBreak","maxNoFillsPerBreak","isBreakTimeBounded","getStopRequestingReason","remainingMs","maxConsecutiveFailures","maxTotalAdRequestsPerBreak","isGamInCooldown","getNextRequestDelayMs","failures","backoff","backoffBaseMs","pow","maxBackoffMs","minInterval","minAdRequestIntervalMs","sinceLast","lastAdRequestTime","trigger","why","nextAdTimerId","stopReason","decision","requestsSent","unusableResponses","handleAdPodComplete","waitMs","requestFollowUpAd","shift","playSingleAd","continueAfterRequestFailure","cancelScheduledRequest","params","adType","pod","pmad","pmnd","pmxd","vastTagUrl","diag","outcome","vastAdCount","impressionFired","recordGamNoFill","failureReason","isTemporaryAdError","add","impressionCount","requestFloorFields","gamRequestSent","vastHttpStatus","httpStatus","adElementCount","depth","wrapperDepth","inlineResolved","mediaCandidateCount","whyAccepted","supportedMediaCount","playStarted","finalizeRequestDiagnostics","endReason","delete","gamReturnedAdWithoutImpression","startedAt","fields","withCurrentPodBudget","rawVastTagUrl","maxMs","round","minMs","Number","isFinite","opportunityFloorFields","opportunityFloor","floorStatus","floorSource","floorReason","floorSelector","selector","floorConfigVersion","adPosition","floorApplied","amount","extra","opportunityBreakKey","getFloorSnapshot","expectedDurationMs","newRequestId","requestStartedAt","setFunnelContext","isAdLoadingWithoutPlayback","isAdPlaying","noteStopBeforeStart","elapsedSinceRequestMs","handleRequestWatchdogTimeout","abortPendingRequest","ap","budgetedUrl","adDurationS","isUrlInCooldown","ensureLoadedAdFitsBudget","getLoadedAdDuration","adDurationMs","logBreakFunnel","funnel","count","countPrefix","reduce","requestRetries","requests","opportunities","floorAppliedRequests","floorSkippedRequests","vastUrlsGenerated","gamResponses","requestsSuppressed","duplicates","filled","noFill","fillRejected","gamAdWithoutImpression","playbackFailedAfterFill","requestFailed","requestAbortedTimeout","credentialsRetries","wrapperFailures","noSupportedMedia","vpaidOnly","audioOnly","mediaFilesEvaluated","mediaFilesAccepted","controllerDestroys","staleCallbacks","tagAllowsAudio","missingImpression","discardedBudget","mediaCandidates","mediaRejected","mediaFallbacks","playCalled","playRejected","mutedRetry","startTimeouts","impressions","impressionUrls","trackingRequests","trackingNotLoaded","trackingUnexpandedMacros","trackingInvalidUrls","vastAdFallbacks","mediaEvents","quartile25","quartile50","quartile75","complete","stoppedBeforeStart","stoppedBeforeStartByBreakEnd","unexpectedUnmutes","unmuteBlocked","visibilityHidden","playbackFailures","stages","previousState","alreadyEnded","contentWasInterrupted","resetForBreakEnd","hide","scheduledScte35BreakKey","stop","restoredMuted","restoredVolume","style","visibility","opacity","requiresMediaPipelineResetAfterAds","reloadLiveStream","monitorLiveResumeStall","currentTime","resumeContentPlayback","liveSyncPos","getLiveSyncPosition","toFixed","restartHlsLoad","getBufferedAhead","ranges","buffered","start","end","describeVideoState","networkStates","readyStates","v","net","networkState","ready","readyState","err","paused","ended","seeking","resumeBaseline","needsReset","pollIntervalMs","graceMs","recoveryCooldownMs","maxRecoveries","maxMonitorMs","startTime","baseline","recoveries","lastRecoveryAt","listenersAttached","onMediaEvent","diagEvents","e","dt","addEventListener","cleanup","removeEventListener","poll","advanced","playing","elapsed","bufferedAhead","wedged","canRecover","recoverMediaError","reloadPos","maxAttempts","onReady","backoffMs","playResult"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\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 __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/player/AdBreakOrchestrator.ts\nvar AdBreakOrchestrator_exports = {};\n__export(AdBreakOrchestrator_exports, {\n AdBreakOrchestrator: () => AdBreakOrchestrator\n});\nmodule.exports = __toCommonJS(AdBreakOrchestrator_exports);\n\n// src/utils/vastEnvironmentSignals.ts\nvar PLAYER_ID_STORAGE_KEY = \"stormcloud.player.id\";\nvar DEVICE_ID_STORAGE_KEYS = [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"advertising_id\",\n \"deviceAdvertisingId\",\n \"aaid\",\n \"adid\",\n \"rida\",\n \"tifa\",\n \"lgudid\"\n];\nvar 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};\nfunction inferDeviceIdType() {\n if (typeof navigator === \"undefined\") {\n return void 0;\n }\n const ua = navigator.userAgent;\n if (/Roku/i.test(ua)) return \"rida\";\n if (/Tizen|Samsung/i.test(ua)) return \"tifa\";\n if (/AppleTV|Apple TV/i.test(ua)) return \"tvOS\";\n if (/AFT|Fire TV|Amazon/i.test(ua)) return \"afai\";\n if (/Web0S|webOS|LG Browser|LGSTB|LGE/i.test(ua)) return \"lgudid\";\n if (/Android|Google TV/i.test(ua)) return \"aaid\";\n if (/iPhone|iPad|iPod/i.test(ua)) return \"idfa\";\n return void 0;\n}\nfunction resolveNativeDeviceId(includeStored = true) {\n const bridgeSignals = readNativeBridgeSignals();\n const platformDevice = readPlatformNativeDeviceId();\n const deviceId = bridgeSignals.deviceId || (includeStored ? readStoredDeviceId() : void 0) || platformDevice.deviceId;\n if (!deviceId || isMacroPlaceholder(deviceId) || isZeroedAdId(deviceId)) {\n return void 0;\n }\n return deviceId;\n}\nfunction getOrCreateStoredUuid(storageKey) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n const existing = readPersistentId(storageKey);\n if (existing) {\n writePersistentId(storageKey, existing);\n return existing;\n }\n const id = createUuid();\n writePersistentId(storageKey, id);\n return id;\n}\nfunction readPersistentId(storageKey) {\n return readStoredString(storageKey) || readCookie(storageKey);\n}\nfunction writePersistentId(storageKey, value) {\n try {\n window.localStorage?.setItem(storageKey, value);\n } catch {\n }\n writeCookie(storageKey, value);\n}\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\nfunction readCookie(name) {\n if (typeof document === \"undefined\") {\n return void 0;\n }\n try {\n const prefix = encodeURIComponent(name) + \"=\";\n const parts = document.cookie ? document.cookie.split(\";\") : [];\n for (const part of parts) {\n const entry = part.trim();\n if (entry.startsWith(prefix)) {\n return decodeURIComponent(entry.slice(prefix.length)) || void 0;\n }\n }\n } catch {\n }\n return void 0;\n}\nfunction writeCookie(name, value) {\n if (typeof document === \"undefined\") {\n return;\n }\n try {\n document.cookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value) + \";path=/;max-age=\" + PERSISTENT_ID_COOKIE_MAX_AGE + \";SameSite=Lax\";\n } catch {\n }\n}\nfunction createUuid() {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\n return crypto.randomUUID();\n }\n const bytes = new Uint8Array(16);\n if (typeof crypto !== \"undefined\" && typeof crypto.getRandomValues === \"function\") {\n crypto.getRandomValues(bytes);\n } else {\n let seed = Date.now() ^ Math.floor(performanceNow() * 1e3);\n for (let i = 0; i < 16; i++) {\n seed = seed * 1103515245 + 12345 & 2147483647;\n bytes[i] = (seed ^ Math.floor(Math.random() * 256)) & 255;\n }\n }\n bytes[6] = (bytes[6] ?? 0) & 15 | 64;\n bytes[8] = (bytes[8] ?? 0) & 63 | 128;\n let hex = \"\";\n for (let i = 0; i < 16; i++) {\n hex += (bytes[i] ?? 0).toString(16).padStart(2, \"0\");\n }\n return hex.slice(0, 8) + \"-\" + hex.slice(8, 12) + \"-\" + hex.slice(12, 16) + \"-\" + hex.slice(16, 20) + \"-\" + hex.slice(20, 32);\n}\nfunction performanceNow() {\n try {\n if (typeof performance !== \"undefined\" && typeof performance.now === \"function\") {\n return performance.now();\n }\n } catch {\n }\n return 0;\n}\nfunction readPlatformNativeDeviceId() {\n if (typeof window === \"undefined\") return {};\n try {\n const adinfo = window.webapis?.adinfo;\n if (adinfo) {\n const tifa = typeof adinfo.getTIFA === \"function\" ? adinfo.getTIFA() : adinfo.tifa;\n if (typeof tifa === \"string\" && tifa && !isMacroPlaceholder(tifa)) {\n const lat = typeof adinfo.isLATEnabled === \"function\" ? adinfo.isLATEnabled() : void 0;\n return {\n deviceId: tifa,\n deviceIdType: \"tifa\",\n ...typeof lat === \"boolean\" ? { limitAdTracking: lat } : {}\n };\n }\n }\n } catch {\n }\n try {\n const webOSDev = window.webOSDev;\n if (webOSDev) {\n const lgudid = typeof webOSDev.LGUDID === \"function\" ? webOSDev.LGUDID() : webOSDev.lgudid ?? webOSDev.LGUDID;\n if (typeof lgudid === \"string\" && lgudid) {\n if (isZeroedAdId(lgudid)) {\n return { deviceIdType: \"lgudid\", limitAdTracking: true };\n }\n if (!isMacroPlaceholder(lgudid)) {\n return { deviceId: lgudid, deviceIdType: \"lgudid\", limitAdTracking: false };\n }\n }\n }\n } catch {\n }\n try {\n const roku = window.Roku;\n if (roku) {\n const rida = typeof roku.getPublisherUniqueId === \"function\" ? roku.getPublisherUniqueId() : roku.rida;\n if (typeof rida === \"string\" && rida && !isMacroPlaceholder(rida)) {\n return { deviceId: rida, deviceIdType: \"rida\", limitAdTracking: false };\n }\n }\n } catch {\n }\n return {};\n}\nvar ZEROED_AD_ID_PATTERNS = /* @__PURE__ */ new Set([\n \"38400000-8cf0-11bd-b23e-10b96e40000d\",\n \"00000000-0000-0000-0000-000000000000\"\n]);\nfunction isMacroPlaceholder(value) {\n const t = value.trim();\n return !t || /^(\\[[^\\]]*\\]|\\{[^}]*\\}|%%[^%]*%%)$/.test(t) || /^(unknown|null|undefined|none|n\\/a|\\$\\{[^}]+\\})$/i.test(t) || ZEROED_AD_ID_PATTERNS.has(t.toLowerCase());\n}\nfunction isZeroedAdId(value) {\n return ZEROED_AD_ID_PATTERNS.has(value.trim().toLowerCase());\n}\nfunction readNativeBridgeSignals() {\n for (const source of getNativeBridgeSources()) {\n const contentUrl = readBridgeValue(source, [\"contentUrl\", \"url\", \"videoUrl\", \"canonicalUrl\"]) || void 0;\n const appId = readBridgeValue(source, [\"appId\", \"msid\", \"applicationId\", \"packageName\"]) || void 0;\n const appName = readBridgeValue(source, [\"appName\", \"an\", \"applicationName\"]) || void 0;\n const deviceId = readBridgeValue(source, [\n \"rdid\",\n \"ifa\",\n \"advertisingId\",\n \"adId\",\n \"deviceId\",\n \"lgudid\",\n \"LGUDID\",\n \"tifa\",\n \"rida\",\n \"afai\",\n \"aaid\"\n ]) || void 0;\n if (!contentUrl && !deviceId && !appId && !appName) continue;\n const deviceIdType = readBridgeValue(source, [\n \"idtype\",\n \"deviceIdType\",\n \"advertisingIdType\",\n \"idType\"\n ]) || inferDeviceIdType();\n const limitAdTracking = readBridgeBoolean(source, [\n \"is_lat\",\n \"limitAdTracking\",\n \"limitedAdTracking\",\n \"lat\"\n ]);\n return {\n ...contentUrl ? { contentUrl } : {},\n ...appId ? { appId } : {},\n ...appName ? { appName } : {},\n ...deviceId ? { deviceId } : {},\n ...deviceId && deviceIdType ? { deviceIdType } : {},\n ...deviceId && limitAdTracking != null ? { limitAdTracking } : {}\n };\n }\n return {};\n}\nfunction getNativeBridgeSources() {\n if (typeof window === \"undefined\") {\n return [];\n }\n return [\n window.__STORMCLOUD_CTV_AD_INFO__,\n window.__STORMCLOUD_CTV__,\n window.stormcloudCtv,\n window.AiryTV,\n window.Android,\n window.webOS,\n window.tizen,\n window.amazon\n ].filter(Boolean);\n}\nfunction readBridgeValue(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n if (typeof value === \"string\" && value) {\n return value;\n }\n if (typeof value === \"function\") {\n try {\n const result = value.call(source);\n if (typeof result === \"string\" && result) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readBridgeBoolean(source, keys) {\n for (const key of keys) {\n const value = source?.[key];\n const normalized = normalizeBoolean(value);\n if (normalized != null) {\n return normalized;\n }\n if (typeof value === \"function\") {\n try {\n const result = normalizeBoolean(value.call(source));\n if (result != null) {\n return result;\n }\n } catch {\n }\n }\n }\n return void 0;\n}\nfunction readStoredDeviceId() {\n for (const key of DEVICE_ID_STORAGE_KEYS) {\n const value = readStoredString(key);\n if (value) {\n return value;\n }\n }\n return void 0;\n}\nfunction readStoredString(key) {\n if (typeof window === \"undefined\") {\n return void 0;\n }\n try {\n const value = window.localStorage?.getItem(key);\n return value || void 0;\n } catch {\n return void 0;\n }\n}\nfunction normalizeBoolean(value) {\n if (typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"number\") {\n return value === 1;\n }\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n if (normalized === \"1\" || normalized === \"true\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"0\" || normalized === \"false\" || normalized === \"no\") {\n return false;\n }\n }\n return void 0;\n}\n\n// src/utils/vastMacros.ts\nvar GAM_AD_HOSTS = /* @__PURE__ */ new Set([\n \"pubads.g.doubleclick.net\",\n \"securepubads.g.doubleclick.net\"\n]);\nfunction ensureVideoAdType(rawUrl) {\n try {\n const url = new URL(rawUrl);\n if (!GAM_AD_HOSTS.has(url.hostname)) return rawUrl;\n if (url.searchParams.has(\"ad_type\")) return rawUrl;\n url.searchParams.set(\"ad_type\", \"video\");\n return url.toString();\n } catch {\n return rawUrl;\n }\n}\n\n// src/player/FloorLadder.ts\nvar DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({\n enabled: false,\n targetingKey: \"airytv_web_floor\",\n minFloorCents: 25,\n maxFloorCents: 300,\n stepCents: 25,\n selectedFloorCents: 25,\n fallbackFloorCents: 25,\n readyFloorCents: [],\n mode: \"fixed\",\n allowedPositions: [\"midroll\"],\n targetAdUnitPath: \"/21821455290/airytvadx/airytv-web\",\n configurationVersion: \"2026-09-29.1\"\n});\nvar DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({\n minCents: 25,\n maxCents: 300,\n stepCents: 25\n});\nfunction decodeQueryComponent(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return void 0;\n }\n}\nfunction mergeCustParams(decoded, key, cents) {\n const prefix = `${key}=`;\n const kept = decoded.split(\"&\").filter((pair) => pair !== \"\" && pair !== key && pair.indexOf(prefix) !== 0);\n kept.push(`${prefix}${cents}`);\n return kept.join(\"&\");\n}\nfunction applyFloorToVastUrl(url, floor) {\n if (floor.status !== \"armed\" || floor.floorCents == null) {\n return { url, applied: false, reason: floor.reason };\n }\n let parsed;\n try {\n parsed = new URL(url);\n } catch {\n return { url, applied: false, reason: \"invalid_url\" };\n }\n if (!GAM_AD_HOSTS.has(parsed.hostname)) {\n return { url, applied: false, reason: \"not_gam_host\" };\n }\n if (parsed.searchParams.get(\"iu\") !== floor.targetAdUnitPath) {\n return { url, applied: false, reason: \"ad_unit_mismatch\" };\n }\n const hashIndex = url.indexOf(\"#\");\n const beforeHash = hashIndex === -1 ? url : url.slice(0, hashIndex);\n const hash = hashIndex === -1 ? \"\" : url.slice(hashIndex);\n const queryIndex = beforeHash.indexOf(\"?\");\n const base = beforeHash.slice(0, queryIndex);\n const segments = beforeHash.slice(queryIndex + 1).split(\"&\");\n const existing = [];\n let insertAt = -1;\n const rest = [];\n for (const segment of segments) {\n const eq = segment.indexOf(\"=\");\n const rawKey = eq === -1 ? segment : segment.slice(0, eq);\n if (decodeQueryComponent(rawKey) === \"cust_params\") {\n if (insertAt === -1) insertAt = rest.length;\n const value = eq === -1 ? \"\" : decodeQueryComponent(segment.slice(eq + 1));\n if (value === void 0) {\n return { url, applied: false, reason: \"malformed_cust_params\" };\n }\n if (value) existing.push(value);\n continue;\n }\n rest.push(segment);\n }\n if (insertAt === -1) insertAt = rest.length;\n const merged = mergeCustParams(existing.join(\"&\"), floor.targetingKey, floor.floorCents);\n rest.splice(insertAt, 0, `cust_params=${encodeURIComponent(merged)}`);\n const query = rest.filter((segment) => segment !== \"\").join(\"&\");\n return { url: `${base}?${query}${hash}`, applied: true, reason: void 0 };\n}\n\n// src/utils/trackingIngest.ts\nvar DEFAULT_TRACKING_INGEST_CONFIG = {\n enabled: true,\n baseUrl: \"https://player-analytics-ingest-api-760490581852.us-central1.run.app/api/adstorm/player-tracking\"\n};\nvar trackingIngestConfig = {\n ...DEFAULT_TRACKING_INGEST_CONFIG\n};\nfunction isTrackingIngestEnabled() {\n return trackingIngestConfig.enabled === true;\n}\nfunction normalizeIngestBaseUrl(baseUrl) {\n return baseUrl.replace(/\\/+$/, \"\");\n}\nfunction buildTrackingIngestUrl(channel) {\n const base = normalizeIngestBaseUrl(trackingIngestConfig.baseUrl);\n if (channel === \"impressions\") {\n return `${base}/impressions/ingest`;\n }\n return `${base}/metrics/ingest`;\n}\nasync function ingestPlayerTracking(licenseKey, channel, body) {\n if (!isTrackingIngestEnabled() || !licenseKey) {\n return false;\n }\n try {\n const response = await fetch(buildTrackingIngestUrl(channel), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `License-Key ${licenseKey}`\n },\n body: JSON.stringify(body)\n });\n if (!response.ok) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest failed (${response.status}) for ${channel}`\n );\n return false;\n }\n return true;\n } catch (error) {\n console.warn(\n `[StormcloudVideoPlayer] Tracking ingest error for ${channel}:`,\n error\n );\n return false;\n }\n}\n\n// src/utils/tracking.ts\nvar cachedBrowserId = null;\nfunction buildAnalyticsContext(config) {\n const context = {};\n if (config.debugAdTiming) {\n context.debugAdTiming = true;\n }\n if (config.isLiveStream !== void 0) {\n context.inputStreamType = config.isLiveStream ? \"live\" : \"vod\";\n }\n return context;\n}\nfunction getClientInfo() {\n const ua = navigator.userAgent;\n const platform = navigator.platform;\n const vendor = navigator.vendor || \"\";\n const maxTouchPoints = navigator.maxTouchPoints || 0;\n const memory = navigator.deviceMemory || null;\n const hardwareConcurrency = navigator.hardwareConcurrency || 1;\n const screenInfo = {\n width: screen?.width,\n height: screen?.height,\n availWidth: screen?.availWidth,\n availHeight: screen?.availHeight,\n orientation: screen?.orientation?.type || \"\",\n pixelDepth: screen?.pixelDepth\n };\n let deviceType = \"desktop\";\n let brand = \"Unknown\";\n let os = \"Unknown\";\n let model = \"\";\n let isSmartTV = false;\n let isAndroid = false;\n let isWebView = false;\n let isWebApp = false;\n if (ua.includes(\"Web0S\")) {\n brand = \"LG\";\n os = \"webOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n const webosMatch = ua.match(/Web0S\\/([^\\s]+)/);\n model = webosMatch ? `webOS ${webosMatch[1]}` : \"webOS TV\";\n } else if (ua.includes(\"Tizen\")) {\n brand = \"Samsung\";\n os = \"Tizen\";\n isSmartTV = true;\n deviceType = \"tv\";\n const tizenMatch = ua.match(/Tizen\\/([^\\s]+)/);\n const tvMatch = ua.match(/(?:Smart-TV|SMART-TV|TV)/i) ? \"Smart TV\" : \"\";\n model = tizenMatch ? `Tizen ${tizenMatch[1]} ${tvMatch}`.trim() : \"Tizen TV\";\n } else if (ua.includes(\"Philips\")) {\n brand = \"Philips\";\n os = \"Saphi\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Sharp\") || ua.includes(\"AQUOS\")) {\n brand = \"Sharp\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"Sony\") || vendor.includes(\"Sony\"))) {\n brand = \"Sony\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"Android\") && (ua.includes(\"NetCast\") || ua.includes(\"LG\"))) {\n brand = \"LG\";\n os = \"Android TV\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\" Roku\") || ua.includes(\"Roku/\")) {\n brand = \"Roku\";\n os = \"Roku OS\";\n isSmartTV = true;\n deviceType = \"tv\";\n } else if (ua.includes(\"AppleTV\")) {\n brand = \"Apple\";\n os = \"tvOS\";\n isSmartTV = true;\n deviceType = \"tv\";\n }\n if (ua.includes(\"Android\")) {\n isAndroid = true;\n os = \"Android\";\n deviceType = /Mobile/.test(ua) ? \"mobile\" : \"tablet\";\n if (ua.includes(\"Android\") && (maxTouchPoints === 0 || ua.includes(\"Google TV\") || ua.includes(\"XiaoMi\"))) {\n deviceType = \"tv\";\n isSmartTV = true;\n brand = brand === \"Unknown\" ? \"Android TV\" : brand;\n }\n const androidModelMatch = ua.match(/\\(([^)]*Android[^)]*)\\)/);\n if (androidModelMatch && androidModelMatch[1]) {\n model = androidModelMatch[1];\n }\n }\n if (/iPad|iPhone|iPod/.test(ua)) {\n os = \"iOS\";\n deviceType = \"mobile\";\n brand = \"Apple\";\n if (navigator.maxTouchPoints > 1 && /iPad/.test(ua)) {\n deviceType = \"tablet\";\n }\n }\n if (!isAndroid && !isSmartTV && !/Mobile/.test(ua)) {\n if (ua.includes(\"Windows\")) {\n os = \"Windows\";\n deviceType = \"desktop\";\n } else if (ua.includes(\"Mac\") && !/iPhone/.test(ua)) {\n os = \"macOS\";\n deviceType = \"desktop\";\n if (maxTouchPoints > 1) deviceType = \"tablet\";\n } else if (ua.includes(\"Linux\")) {\n os = \"Linux\";\n deviceType = \"desktop\";\n }\n }\n if (brand === \"Unknown\") {\n if (vendor.includes(\"Google\") || ua.includes(\"Chrome\")) brand = \"Google\";\n if (vendor.includes(\"Apple\")) brand = \"Apple\";\n if (vendor.includes(\"Samsung\") || ua.includes(\"SM-\")) brand = \"Samsung\";\n }\n isWebView = /wv|WebView|Linux; U;/.test(ua);\n if (window?.outerHeight === 0 && window?.outerWidth === 0) {\n isWebView = true;\n }\n isWebApp = window.matchMedia(\"(display-mode: standalone)\").matches || window.navigator.standalone === true || window.screen?.orientation?.angle !== void 0;\n return {\n brand,\n os,\n model: model || ua.substring(0, 50) + \"...\",\n deviceType,\n isSmartTV,\n isAndroid,\n isWebView,\n isWebApp,\n domain: window.location.hostname,\n origin: window.location.origin,\n path: window.location.pathname,\n userAgent: ua,\n vendor,\n platform,\n screen: screenInfo,\n hardwareConcurrency,\n deviceMemory: memory,\n maxTouchPoints,\n language: navigator.language,\n languages: navigator.languages?.join(\",\") || \"\",\n cookieEnabled: navigator.cookieEnabled,\n doNotTrack: navigator.doNotTrack || \"\",\n referrer: document.referrer,\n visibilityState: document.visibilityState\n };\n}\nasync function sha256Hex(input) {\n if (typeof crypto !== \"undefined\" && crypto.subtle?.digest) {\n try {\n await crypto.subtle.digest(\"SHA-256\", new Uint8Array([1, 2, 3]));\n let encodedData;\n if (typeof TextEncoder !== \"undefined\") {\n encodedData = new TextEncoder().encode(input);\n } else {\n const utf8 = unescape(encodeURIComponent(input));\n const buffer = new Uint8Array(utf8.length);\n for (let i = 0; i < utf8.length; i++) {\n buffer[i] = utf8.charCodeAt(i);\n }\n encodedData = buffer;\n }\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", encodedData);\n return Array.from(new Uint8Array(hashBuffer)).map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n } catch {\n console.warn(\n \"[StormcloudVideoPlayer] crypto.subtle not supported, using fallback hash\"\n );\n }\n }\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n const fallbackHash = Math.abs(hash).toString(16).padStart(8, \"0\");\n const timestamp = Date.now().toString(16).padStart(12, \"0\");\n const random = Math.random().toString(16).substring(2, 14).padStart(12, \"0\");\n return (fallbackHash + timestamp + random).padEnd(64, \"0\");\n}\nfunction resolvePlayerIdentitySeed(clientInfo) {\n const nativeDeviceId = resolveNativeDeviceId(clientInfo.isSmartTV);\n if (nativeDeviceId) {\n return `device:${nativeDeviceId}`;\n }\n const persistedId = getOrCreateStoredUuid(PLAYER_ID_STORAGE_KEY);\n if (persistedId) {\n return `persisted:${persistedId}`;\n }\n return `fingerprint:${JSON.stringify(clientInfo)}`;\n}\nasync function getBrowserID(clientInfo) {\n if (cachedBrowserId) {\n return cachedBrowserId;\n }\n cachedBrowserId = await sha256Hex(resolvePlayerIdentitySeed(clientInfo));\n return cachedBrowserId;\n}\nfunction canPublish(licenseKey) {\n return Boolean(isTrackingIngestEnabled() && licenseKey);\n}\nasync function buildPlayerMetricEvent(context = {}, flags = {}) {\n const clientInfo = getClientInfo();\n const debugAdTiming = !!context.debugAdTiming;\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] clientInfo: \", JSON.stringify(clientInfo, null, 2));\n }\n const playerId = await getBrowserID(clientInfo);\n if (debugAdTiming) {\n console.log(\"[StormcloudVideoPlayer] playerId: \", playerId);\n }\n const captureAt = flags.captureAt ?? (/* @__PURE__ */ new Date()).toISOString();\n return {\n player_id: playerId,\n device_type: clientInfo.deviceType,\n os: clientInfo.os.toLowerCase(),\n ad_loaded: flags.adLoaded ?? false,\n ad_detect: flags.adDetect ?? false,\n capture_at: captureAt,\n ...context.inputStreamType ? { input_stream_type: context.inputStreamType } : {}\n };\n}\nasync function sendAdLoadedTracking(licenseKey, adLoadedInfo, context = {}) {\n try {\n await sendHeartbeat(licenseKey, context, {\n adLoaded: true,\n captureAt: adLoadedInfo.timestamp\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad loaded tracking:\",\n error\n );\n }\n}\nasync function sendAdImpressionTracking(licenseKey, adImpressionInfo, context = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const metricEvent = await buildPlayerMetricEvent(context, {\n captureAt: adImpressionInfo.timestamp\n });\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [metricEvent]\n });\n await ingestPlayerTracking(licenseKey, \"impressions\", {\n events: [\n {\n player_id: metricEvent.player_id,\n ad_played_count: 1,\n ad_url: adImpressionInfo.adUrl,\n capture_at: adImpressionInfo.timestamp\n }\n ]\n });\n } catch (error) {\n console.error(\n \"[StormcloudVideoPlayer] Error sending ad impression tracking:\",\n error\n );\n }\n}\nasync function sendHeartbeat(licenseKey, context = {}, flags = {}) {\n if (!canPublish(licenseKey)) return;\n try {\n const heartbeatData = await buildPlayerMetricEvent(context, flags);\n await ingestPlayerTracking(licenseKey, \"metrics\", {\n events: [heartbeatData]\n });\n } catch (error) {\n console.error(\"[StormcloudVideoPlayer] Error sending heartbeat:\", error);\n }\n}\n\n// src/player/PlayerControls.ts\nfunction getAdAudioVolume(adPlayer) {\n return adPlayer.getOriginalMutedState() ? 0 : adPlayer.getOriginalVolume();\n}\n\n// src/player/AdBreakOrchestrator.ts\nvar REQUEST_FAILURE_STAGES = /* @__PURE__ */ new Set([\n \"no_fill\",\n \"vast_fill_rejected\",\n \"request_failed\",\n \"media_unsupported\",\n \"play_failed\",\n \"play_resolved_but_never_started\",\n \"hls_fatal\",\n \"media_error\",\n \"stall\",\n \"decode_failure\"\n]);\nvar AdBreakOrchestrator = class {\n constructor(host, timing, adConfig, cueManager, placeholder) {\n this.inAdBreak = false;\n this.showAds = false;\n this.isShowingPlaceholder = false;\n this.adDetectSentForCurrentBreak = false;\n this.slotState = \"IDLE\";\n this.unusableResponsesInBreak = 0;\n this.controllerGeneration = 0;\n this.requestDiagnostics = /* @__PURE__ */ new Map();\n this.breakFunnel = {};\n this.controllerCallInFlight = false;\n this.playbackStartedForCurrentRequest = false;\n this.opportunityEpoch = -1;\n this.adPodQueue = [];\n this.defaultMinRemainingMsToRequestAd = 1e4;\n this.defaultMaxNoFillsPerBreak = 2;\n this.defaultLiveMaxNoFillsPerBreak = 1;\n this.breakDurationWaitMs = 300;\n this.pendingAdBreak = null;\n this.host = host;\n this.timing = timing;\n this.adConfig = adConfig;\n this.cueManager = cueManager;\n this.placeholder = placeholder;\n }\n get debug() {\n return !!this.host.config.debugAdTiming;\n }\n get analyticsContext() {\n return buildAnalyticsContext(this.host.config);\n }\n // ───────────────────────────────────────────────────────────────\n // IMA event listeners\n // ───────────────────────────────────────────────────────────────\n nextAdRequestUrl(baseVastUrl) {\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n const breakDurationMs = remaining > 0 ? remaining : void 0;\n return this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n attachImaEventListeners() {\n const controller = this.host.getAdPlayer();\n const generation = this.controllerGeneration;\n const adPlayer = {\n on: (event, handler) => {\n controller.on(event, (payload) => {\n if (generation !== this.controllerGeneration) {\n this.logOrchestratorFunnel(\"stale_callback_ignored\", {\n event,\n staleControllerId: generation,\n currentControllerId: this.controllerGeneration\n });\n return;\n }\n handler(payload);\n });\n }\n };\n adPlayer.on(\"pod_ad_started\", (payload) => {\n this.timing.notePodAdStarted();\n if (this.debug) {\n console.log(\n `[POD] Playing pod ad ${payload?.index != null ? payload.index + 1 : \"?\"}/${payload?.total ?? \"?\"}`\n );\n }\n });\n adPlayer.on(\"ad_click\", () => {\n this.host.onAdClick();\n });\n adPlayer.on(\"ad_interaction\", (event) => {\n if (event) this.host.onAdInteraction(event);\n });\n adPlayer.on(\"ad_funnel\", (payload) => {\n if (!payload?.stage) return;\n const stage = payload.stage;\n this.countFunnelStage(stage);\n if (payload.reason) {\n this.countFunnelStage(`${stage}:${payload.reason}`);\n }\n if (stage === \"impression_fired\" && payload.pixelCount != null) {\n this.countFunnelStage(\"impression_urls\", payload.pixelCount);\n }\n if (payload.visibilityState === \"hidden\") {\n this.countFunnelStage(\"while_hidden\");\n }\n if (stage === \"gam_http_request_sent\") {\n if (payload.attempt === 1) {\n this.timing.noteAdRequestSent();\n } else {\n this.countFunnelStage(\"gam_http_request_retry\");\n }\n }\n this.recordRequestDiagnostic(payload);\n });\n adPlayer.on(\"ad_impression\", () => {\n this.timing.consecutiveFailures = 0;\n this.setSlotState(\"PLAYING\", \"impression\");\n if (!this.playbackStartedForCurrentRequest) {\n this.playbackStartedForCurrentRequest = true;\n this.timing.markAdStarted();\n }\n sendAdImpressionTracking(\n this.host.config.licenseKey,\n {\n source: \"hls\",\n adIndex: this.timing.currentAdIndex,\n ...this.currentVastUrl ? { adUrl: this.currentVastUrl } : {},\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n this.analyticsContext\n ).catch(() => {\n });\n });\n adPlayer.on(\"all_ads_completed\", () => {\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n const remaining = this.timing.getRemainingAdMs();\n this.timing.consecutiveFailures = 0;\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] all_ads_completed event received - remaining=${remaining}ms`\n );\n }\n if (this.inAdBreak) {\n this.setSlotState(\"NEEDS_NEXT_AD\", \"all_ads_completed\");\n this.requestNextAd(\"all_ads_completed\");\n }\n });\n adPlayer.on(\"ad_error\", (errorPayload) => {\n if (this.controllerCallInFlight) {\n if (this.debug) {\n console.log(\"[AdBreak] ad_error during request/play; outcome reported by the caller\", errorPayload || \"\");\n }\n return;\n }\n let errorMessage = \"Ad error (no details)\";\n if (errorPayload) {\n const errorCode = errorPayload.code || errorPayload.errorCode || \"unknown\";\n const vastErrorCode = errorPayload.vastErrorCode;\n const message = errorPayload.message || errorPayload.errorMessage || \"Unknown error\";\n const cause = errorPayload.cause || errorPayload.innerError || errorPayload.error;\n errorMessage = `Ad error: AdError ${errorCode}: ${message}`;\n if (vastErrorCode && vastErrorCode !== \"N/A\" && vastErrorCode !== errorCode) {\n errorMessage += ` (VAST Error Code: ${vastErrorCode})`;\n }\n if (cause) {\n const causeMessage = typeof cause === \"string\" ? cause : cause.message || String(cause);\n errorMessage += `. Caused by: ${causeMessage}`;\n }\n }\n console.error(\"[AD-ERROR]\", errorMessage, errorPayload || \"\");\n this.handleAdFailure(\"ad_error\");\n });\n adPlayer.on(\"content_pause\", () => {\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = true;\n this.timing.resetGamNoFillCounter();\n if (this.inAdBreak && this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Starting ad break timer on content_pause (first ad starting)\");\n }\n }\n this.host.getAdPlayer().setAdVolume(getAdAudioVolume(this.host.getAdPlayer()));\n if (this.isShowingPlaceholder) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Hiding placeholder - new ads starting\");\n }\n this.host.getAdPlayer().hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n });\n adPlayer.on(\"content_resume\", () => {\n if (!this.host.video.muted) {\n this.host.video.muted = true;\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Muted video on content_resume (ad ended, gap between ads)\");\n }\n }\n this.timing.clearAdFailsafeTimer();\n this.timing.clearAdRequestWatchdog();\n this.timing.activeAdRequestToken = null;\n this.showAds = false;\n if (!this.inAdBreak) {\n return;\n }\n this.timing.consecutiveFailures = 0;\n this.timing.recordPlayedAdDuration(this.host.getAdPlayer());\n if (this.debug) {\n console.log(\n `[AdBreak] content_resume: remaining=${this.timing.getRemainingAdMs()}ms`\n );\n }\n this.setSlotState(\"NEEDS_NEXT_AD\", \"ad_complete\");\n this.requestNextAd(\"ad_complete\");\n });\n }\n recreateAdController(reason) {\n if (reason === \"new_request\" && (this.slotState === \"REQUESTING\" || this.slotState === \"READY\")) {\n console.warn(\"[AD-CONTROLLER] destroy during active request\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: this.slotState,\n reason\n });\n }\n console.log(\"[AD-CONTROLLER] destroy\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: this.slotState,\n reason\n });\n this.countFunnelStage(`controller_destroy:${reason}`);\n const shouldShowPlaceholder = this.inAdBreak && this.showAds;\n const adPlayer = this.host.getAdPlayer();\n if (shouldShowPlaceholder && adPlayer) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Showing placeholder before destroying old AdController\");\n }\n this.placeholder.show();\n adPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n const preservedMutedState = adPlayer.getOriginalMutedState();\n const preservedVolumeState = adPlayer.getOriginalVolume();\n this.playbackStartedForCurrentRequest = false;\n if (adPlayer) {\n try {\n adPlayer.destroy();\n this.host.video.muted = true;\n } catch (error) {\n if (this.debug) {\n console.warn(\"[StormcloudVideoPlayer] Error destroying old AdController:\", error);\n }\n }\n }\n const continueLiveStreamDuringAds = this.host.shouldContinueLiveStreamDuringAds();\n const newAdPlayer = this.host.createAdPlayer(continueLiveStreamDuringAds);\n this.host.setAdPlayer(newAdPlayer);\n this.controllerGeneration++;\n newAdPlayer.initialize();\n newAdPlayer.updateOriginalMutedState(preservedMutedState, preservedVolumeState);\n this.attachImaEventListeners();\n if (this.debug) {\n console.log(\"[AD-CONTROLLER] create\", {\n controllerId: this.controllerGeneration,\n reason\n });\n }\n if (shouldShowPlaceholder) {\n this.placeholder.show();\n newAdPlayer.showPlaceholder();\n this.isShowingPlaceholder = true;\n }\n }\n clearPendingAdBreak() {\n if (this.prefetchTimerId != null) {\n clearTimeout(this.prefetchTimerId);\n this.prefetchTimerId = void 0;\n }\n this.pendingAdBreak = null;\n this.cueManager.pendingScte35CueKey = void 0;\n this.adConfig.podAssignedByPrefetch = false;\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break start\n // ───────────────────────────────────────────────────────────────\n isBreakActive() {\n return this.slotState !== \"IDLE\";\n }\n getSlotState() {\n return this.slotState;\n }\n beginVmapBreak(breakKey, position) {\n this.breakSource = \"vmap\";\n this.followUpBaseVastUrl = void 0;\n this.unusableResponsesInBreak = 0;\n this.timing.totalAdRequestsInBreak = 0;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"vmap_break_start\");\n this.noteOpportunity(\"vmap\", breakKey, position);\n }\n async handleAdStart(marker) {\n if (this.slotState !== \"IDLE\") {\n this.logOrchestratorFunnel(\"duplicate_break_start\", {\n source: \"scte35\",\n state: this.slotState\n });\n return;\n }\n const baseVastUrl = this.adConfig.apiVastTagUrl;\n if (!baseVastUrl) {\n console.warn(\"[AdBreak] SCTE-35 break started but no direct VAST tag is configured\");\n this.clearPendingAdBreak();\n return;\n }\n let adBreakDurationMs = marker.durationSeconds != null ? marker.durationSeconds * 1e3 : this.timing.expectedAdBreakDurationMs;\n this.timing.failedVastUrls.clear();\n this.timing.temporaryFailureUrls.clear();\n this.timing.consecutiveFailures = 0;\n this.isShowingPlaceholder = false;\n this.timing.totalAdRequestsInBreak = 0;\n this.breakSource = \"scte35\";\n this.followUpBaseVastUrl = baseVastUrl;\n this.unusableResponsesInBreak = 0;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"scte35_break_start\");\n if (this.adConfig.podAssignedByPrefetch) {\n this.adConfig.podAssignedByPrefetch = false;\n } else {\n this.adConfig.beginNewAdPod();\n }\n const currentMuted = this.host.video.muted;\n const currentVolume = this.host.video.volume;\n this.host.getAdPlayer().updateOriginalMutedState(currentMuted, currentVolume);\n this.inAdBreak = true;\n this.timing.adBreakPlayedDurationMs = 0;\n this.timing.currentAdIndex = 0;\n this.timing.totalAdsInBreak = 0;\n this.adPodQueue = [];\n this.showAds = false;\n if (this.timing.expectedAdBreakDurationMs == null && adBreakDurationMs != null) {\n this.timing.expectedAdBreakDurationMs = adBreakDurationMs;\n }\n this.noteOpportunity(\"scte35\", this.cueManager.activeScte35BreakKey, \"midroll\");\n const epoch = this.timing.adBreakEpoch;\n const hasPrefetchedUrl = !!(this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0);\n if (adBreakDurationMs == null && !hasPrefetchedUrl) {\n adBreakDurationMs = await this.waitForBreakDuration(this.breakDurationWaitMs);\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n }\n if (this.debug) {\n const mode = this.host.config.isLiveStream ? \"LIVE\" : \"VOD\";\n console.log(\n `[AdBreak] ${mode} break start: target duration=${adBreakDurationMs != null ? `${adBreakDurationMs}ms` : \"unknown\"}`\n );\n }\n const podPlayed = await this.startOptimizedPod(baseVastUrl, adBreakDurationMs);\n if (!podPlayed && this.inAdBreak && epoch === this.timing.adBreakEpoch) {\n this.setSlotState(\"NEEDS_NEXT_AD\", \"initial_request_failed\");\n this.requestNextAd(\"initial_request_failed\");\n }\n }\n async waitForBreakDuration(maxWaitMs) {\n const deadline = Date.now() + maxWaitMs;\n while (this.timing.expectedAdBreakDurationMs == null && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, 50));\n if (!this.inAdBreak) break;\n }\n const durationMs = this.timing.expectedAdBreakDurationMs;\n this.logOrchestratorFunnel(\"break_duration_wait\", {\n waitedForMs: maxWaitMs - Math.max(0, deadline - Date.now()),\n durationMs,\n resolved: durationMs != null\n });\n return durationMs;\n }\n // ───────────────────────────────────────────────────────────────\n // Optimized pod (single multi-ad request)\n // ───────────────────────────────────────────────────────────────\n async startOptimizedPod(baseVastUrl, breakDurationMs) {\n let podUrl;\n const prefetched = !!(this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0);\n if (this.pendingAdBreak && this.pendingAdBreak.vastUrls.length > 0) {\n podUrl = this.pendingAdBreak.vastUrls[0];\n this.clearPendingAdBreak();\n } else {\n podUrl = this.host.generatePodVastUrl(baseVastUrl, breakDurationMs);\n }\n if (!podUrl) {\n return false;\n }\n this.noteVastUrlGenerated(podUrl, prefetched ? \"prefetch\" : \"break_start\");\n const epoch = this.timing.adBreakEpoch;\n this.recreateAdController(\"new_request\");\n const generation = this.controllerGeneration;\n const adPlayer = this.host.getAdPlayer();\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n this.setSlotState(\"REQUESTING\", \"initial_pod\");\n this.beginFunnelRequest(adPlayer, requestToken, \"initial_pod\");\n const requestUrl = this.applyOpportunityFloor(podUrl);\n this.currentVastUrl = requestUrl;\n try {\n await this.timing.enforceGlobalRateLimit();\n if (this.isStale(epoch, generation)) return true;\n this.timing.startAdRequestWatchdog(requestToken);\n await this.callController(() => adPlayer.requestAds(requestUrl));\n this.timing.clearAdRequestWatchdog();\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", { requestId: requestToken });\n return true;\n }\n const podCount = adPlayer.getPodAdCount?.() ?? 1;\n if (podCount < 1) {\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n this.recordRequestFailure(new Error(\"No ads available\"), podUrl);\n return false;\n }\n this.setSlotState(\"READY\", \"vast_ready\");\n if (this.debug) {\n console.log(\n podCount === 1 ? \"[POD] Response contained a single ad; playing it and enabling pod top-up\" : `[POD] Optimized pod returned ${podCount} ads; playing pod in one controller`\n );\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: requestUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n this.timing.startAdFailsafeTimer(requestToken);\n await this.callController(() => adPlayer.play());\n if (this.isStale(epoch, generation)) return true;\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n adPlayer.setAdVolume(getAdAudioVolume(adPlayer));\n return true;\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", {\n requestId: requestToken,\n errorMessage: error?.message\n });\n return true;\n }\n if (this.debug) {\n console.warn(\"[POD] Optimized pod request/play failed:\", error);\n }\n this.recordRequestFailure(error, podUrl);\n return false;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Next-ad scheduling (single flight)\n // ───────────────────────────────────────────────────────────────\n setSlotState(next, reason) {\n if (this.slotState === next) return;\n const previous = this.slotState;\n this.slotState = next;\n if (this.debug) {\n console.log(`[AdBreak][STATE] ${previous} -> ${next}`, {\n reason,\n breakId: this.timing.adBreakEpoch,\n requestId: this.currentRequestId,\n controllerId: this.controllerGeneration\n });\n }\n }\n isStale(epoch, generation) {\n return !this.inAdBreak || epoch !== this.timing.adBreakEpoch || generation !== this.controllerGeneration;\n }\n getMinRemainingMsToRequestAd() {\n const configured = this.host.config.minRemainingMsToRequestAd;\n const floor = this.timing.getMinRemainingMsToStartAd();\n if (typeof configured === \"number\" && configured >= 0) {\n return Math.max(configured, floor);\n }\n return Math.max(this.defaultMinRemainingMsToRequestAd, floor);\n }\n getMaxNoFillsPerBreak() {\n const configured = this.host.config.maxNoFillsPerBreak;\n if (typeof configured === \"number\" && configured > 0) return configured;\n return this.breakSource === \"scte35\" ? this.defaultLiveMaxNoFillsPerBreak : this.defaultMaxNoFillsPerBreak;\n }\n isBreakTimeBounded() {\n return this.breakSource === \"scte35\" || this.timing.expectedAdBreakDurationMs != null;\n }\n getStopRequestingReason(remainingMs) {\n if (this.breakSource === \"vmap\") {\n if (this.adPodQueue.length === 0) return \"vmap_queue_empty\";\n } else if (this.breakSource !== \"scte35\" || !this.followUpBaseVastUrl) {\n return \"no_follow_up_source\";\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n return \"max_consecutive_failures\";\n }\n if (this.unusableResponsesInBreak >= this.getMaxNoFillsPerBreak()) {\n return \"unusable_response_limit\";\n }\n if (this.timing.totalAdRequestsInBreak >= this.timing.maxTotalAdRequestsPerBreak) {\n return \"request_cap\";\n }\n if (this.timing.isGamInCooldown()) {\n return \"gam_cooldown\";\n }\n if (this.isBreakTimeBounded() && remainingMs < this.getMinRemainingMsToRequestAd()) {\n return \"insufficient_break_time\";\n }\n return void 0;\n }\n getNextRequestDelayMs() {\n const failures = this.timing.consecutiveFailures;\n const backoff = failures > 0 ? Math.min(this.timing.backoffBaseMs * Math.pow(2, failures), this.timing.maxBackoffMs) : 0;\n const minInterval = this.timing.minAdRequestIntervalMs + backoff;\n const sinceLast = Date.now() - this.timing.lastAdRequestTime;\n return Math.max(0, minInterval - sinceLast);\n }\n requestNextAd(trigger) {\n if (!this.inAdBreak) return;\n if (this.slotState !== \"NEEDS_NEXT_AD\") {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"slot_busy\"\n });\n return;\n }\n if (this.nextAdTimerId != null) {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"request_already_scheduled\"\n });\n return;\n }\n const remainingMs = this.timing.getRemainingAdMs();\n const stopReason = this.getStopRequestingReason(remainingMs);\n if (stopReason) {\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: \"end_break\",\n reason: stopReason,\n remainingMs,\n requestsSent: this.timing.totalAdRequestsInBreak,\n unusableResponses: this.unusableResponsesInBreak,\n consecutiveFailures: this.timing.consecutiveFailures\n });\n this.handleAdPodComplete(stopReason);\n return;\n }\n const waitMs = this.getNextRequestDelayMs();\n if (waitMs > 0 && this.isBreakTimeBounded() && remainingMs - waitMs < this.getMinRemainingMsToRequestAd()) {\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: \"end_break\",\n reason: \"insufficient_break_time_after_backoff\",\n remainingMs,\n waitMs\n });\n this.handleAdPodComplete(\"insufficient_break_time_after_backoff\");\n return;\n }\n this.logOrchestratorFunnel(\"next_ad_decision\", {\n trigger,\n decision: waitMs > 0 ? \"request_after_delay\" : \"request_now\",\n waitMs,\n remainingMs,\n consecutiveFailures: this.timing.consecutiveFailures\n });\n if (waitMs > 0) {\n if (!this.isShowingPlaceholder) {\n this.isShowingPlaceholder = true;\n this.host.getAdPlayer().showPlaceholder();\n }\n const epoch = this.timing.adBreakEpoch;\n this.nextAdTimerId = window.setTimeout(() => {\n this.nextAdTimerId = void 0;\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n this.requestNextAd(`${trigger}:after_delay`);\n }, waitMs);\n return;\n }\n void this.requestFollowUpAd(trigger);\n }\n async requestFollowUpAd(trigger) {\n let url;\n if (this.breakSource === \"vmap\") {\n url = this.adPodQueue.shift();\n } else if (this.followUpBaseVastUrl) {\n url = this.nextAdRequestUrl(this.followUpBaseVastUrl);\n }\n if (!url) return;\n this.noteVastUrlGenerated(ensureVideoAdType(url), trigger);\n const epoch = this.timing.adBreakEpoch;\n try {\n await this.playSingleAd(url, trigger);\n } catch {\n this.continueAfterRequestFailure(epoch);\n }\n }\n continueAfterRequestFailure(epoch = this.timing.adBreakEpoch) {\n if (!this.inAdBreak || epoch !== this.timing.adBreakEpoch) return;\n this.setSlotState(\"NEEDS_NEXT_AD\", \"request_failed\");\n this.requestNextAd(\"after_failure\");\n }\n cancelScheduledRequest() {\n if (this.nextAdTimerId != null) {\n clearTimeout(this.nextAdTimerId);\n this.nextAdTimerId = void 0;\n }\n }\n noteVastUrlGenerated(url, source) {\n let params;\n try {\n params = new URL(url).searchParams;\n } catch {\n }\n const adType = params?.get(\"ad_type\") ?? void 0;\n this.logOrchestratorFunnel(\"vast_url_generated\", {\n requestId: void 0,\n source,\n pod: params?.get(\"pod\") ?? void 0,\n pmad: params?.get(\"pmad\") ?? void 0,\n pmnd: params?.get(\"pmnd\") ?? void 0,\n pmxd: params?.get(\"pmxd\") ?? void 0,\n adType\n });\n if (adType === \"audio\" || adType === \"audio_video\") {\n console.warn(\n `[AdBreak] VAST tag requests ad_type=${adType}; GAM may return audio-only creatives, which this video player rejects`\n );\n this.countFunnelStage(\"tag_allows_audio\");\n }\n }\n recordRequestFailure(error, vastTagUrl) {\n const diag = this.currentRequestId != null ? this.requestDiagnostics.get(this.currentRequestId) : void 0;\n const message = error?.message || \"\";\n let outcome;\n if (message.includes(\"ad_duration_exceeds_budget\")) {\n outcome = \"discarded_budget\";\n } else if (message.includes(\"VAST fill rejected\")) {\n outcome = \"fill_rejected\";\n } else if (/no ads available|no fill|nofill/i.test(message)) {\n outcome = \"no_fill\";\n } else if (/timeout/i.test(message)) {\n outcome = \"request_timeout\";\n } else if (/destroyed|aborted/i.test(message)) {\n outcome = \"request_aborted\";\n } else if (diag && (diag.vastAdCount ?? 0) > 0 && !diag.impressionFired) {\n outcome = \"playback_failed\";\n } else {\n outcome = \"request_failed\";\n }\n this.timing.consecutiveFailures++;\n if (outcome === \"no_fill\" || outcome === \"fill_rejected\" || outcome === \"discarded_budget\") {\n this.unusableResponsesInBreak++;\n }\n if (outcome === \"no_fill\") {\n this.timing.recordGamNoFill();\n }\n if (diag && !diag.failureReason) {\n diag.failureReason = `${outcome}: ${message}`;\n }\n if (this.timing.isTemporaryAdError(error)) {\n this.timing.temporaryFailureUrls.set(vastTagUrl, Date.now());\n } else if (outcome !== \"discarded_budget\") {\n this.timing.failedVastUrls.add(vastTagUrl);\n }\n this.countFunnelStage(`request_outcome:${outcome}`);\n this.logOrchestratorFunnel(\"request_outcome\", {\n outcome,\n errorMessage: message,\n consecutiveFailures: this.timing.consecutiveFailures,\n unusableResponsesInBreak: this.unusableResponsesInBreak,\n vastAdCount: diag?.vastAdCount,\n impressionCount: diag?.impressionCount,\n ...this.requestFloorFields(diag)\n });\n }\n // ───────────────────────────────────────────────────────────────\n // Per-request diagnostics\n // ───────────────────────────────────────────────────────────────\n recordRequestDiagnostic(payload) {\n const requestId = payload.requestId;\n if (typeof requestId !== \"number\") return;\n const diag = this.requestDiagnostics.get(requestId);\n if (!diag) return;\n switch (payload.stage) {\n case \"gam_http_request_sent\":\n diag.gamRequestSent++;\n break;\n case \"gam_response_received\":\n diag.vastHttpStatus = payload.httpStatus;\n break;\n case \"vast_parsed\":\n diag.vastAdCount = payload.adElementCount;\n break;\n case \"wrapper_fetch\":\n case \"inline_resolved\":\n if (typeof payload.depth === \"number\") {\n diag.wrapperDepth = Math.max(diag.wrapperDepth, payload.depth);\n }\n if (payload.stage === \"inline_resolved\") diag.inlineResolved = true;\n break;\n case \"mediafile_evaluated\":\n diag.mediaCandidateCount++;\n if (payload.whyAccepted) diag.supportedMediaCount++;\n break;\n case \"playing\":\n diag.playStarted = true;\n break;\n case \"impression_fired\":\n diag.impressionFired = true;\n diag.impressionCount++;\n break;\n default:\n if (REQUEST_FAILURE_STAGES.has(payload.stage) && !diag.failureReason) {\n diag.failureReason = payload.reason ? `${payload.stage}:${payload.reason}` : payload.stage;\n }\n }\n }\n finalizeRequestDiagnostics(requestId, endReason) {\n if (requestId == null) return;\n const diag = this.requestDiagnostics.get(requestId);\n if (!diag) return;\n this.requestDiagnostics.delete(requestId);\n if (!diag.impressionFired && !diag.failureReason && endReason) {\n diag.failureReason = endReason;\n }\n const gamReturnedAdWithoutImpression = (diag.vastAdCount ?? 0) > 0 && !diag.impressionFired;\n if (gamReturnedAdWithoutImpression) {\n this.countFunnelStage(\"gam_ad_without_impression\");\n }\n const { startedAt, ...fields } = diag;\n console.log(\"[AdBreak][REQUEST] summary\", {\n ...fields,\n durationMs: Date.now() - startedAt,\n gamReturnedAdWithoutImpression\n });\n }\n // ───────────────────────────────────────────────────────────────\n // Single ad playback\n // ───────────────────────────────────────────────────────────────\n withCurrentPodBudget(rawVastTagUrl) {\n const vastTagUrl = ensureVideoAdType(rawVastTagUrl);\n const remaining = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n if (!(remaining > 0)) return vastTagUrl;\n try {\n const url = new URL(vastTagUrl);\n if (!url.searchParams.has(\"pmxd\")) return vastTagUrl;\n const maxMs = Math.round(remaining);\n url.searchParams.set(\"pmxd\", String(maxMs));\n const minMs = Number(url.searchParams.get(\"pmnd\"));\n if (Number.isFinite(minMs) && minMs > maxMs) {\n url.searchParams.set(\"pmnd\", String(maxMs));\n }\n return url.toString();\n } catch {\n return vastTagUrl;\n }\n }\n opportunityFloorFields(floor = this.opportunityFloor) {\n if (!floor) return {};\n return {\n floorStatus: floor.status,\n floorCents: floor.floorCents,\n floorSource: floor.source,\n floorReason: floor.reason,\n floorSelector: floor.selector,\n floorConfigVersion: floor.configurationVersion,\n adPosition: floor.position\n };\n }\n requestFloorFields(diag) {\n if (!diag || diag.floorApplied === void 0) return {};\n return {\n floorApplied: diag.floorApplied,\n floorCents: diag.floorCents,\n floorSource: diag.floorSource,\n floorReason: diag.floorReason,\n floorConfigVersion: diag.floorConfigVersion\n };\n }\n applyOpportunityFloor(url) {\n const floor = this.opportunityFloor;\n if (!floor) return url;\n const result = applyFloorToVastUrl(url, floor);\n const diag = this.currentRequestId != null ? this.requestDiagnostics.get(this.currentRequestId) : void 0;\n if (diag) {\n diag.floorApplied = result.applied;\n if (result.applied && floor.floorCents != null) diag.floorCents = floor.floorCents;\n diag.floorSource = result.applied ? floor.source : \"none\";\n if (result.reason) diag.floorReason = result.reason;\n diag.floorConfigVersion = floor.configurationVersion;\n }\n if (floor.status === \"skipped\" && floor.reason === \"disabled\") {\n this.countFunnelStage(\"floor_skipped:disabled\");\n return result.url;\n }\n this.logOrchestratorFunnel(result.applied ? \"floor_applied\" : \"floor_skipped\", {\n reason: result.reason,\n floorCents: result.applied ? floor.floorCents : void 0,\n floorSource: result.applied ? floor.source : \"none\",\n floorSelector: floor.selector,\n floorConfigVersion: floor.configurationVersion,\n adPosition: floor.position\n });\n if (!result.applied && result.reason) {\n this.countFunnelStage(`floor_skipped:${result.reason}`);\n }\n return result.url;\n }\n countFunnelStage(stage, amount = 1) {\n this.breakFunnel[stage] = (this.breakFunnel[stage] ?? 0) + amount;\n }\n logOrchestratorFunnel(stage, extra = {}) {\n this.countFunnelStage(stage);\n console.log(`[AdBreak][FUNNEL] ${stage}`, {\n breakId: this.timing.adBreakEpoch,\n requestId: this.currentRequestId,\n visibilityState: typeof document !== \"undefined\" ? document.visibilityState : void 0,\n ...extra\n });\n }\n noteOpportunity(source, breakKey, position) {\n if (breakKey && breakKey === this.opportunityBreakKey && this.opportunityEpoch === this.timing.adBreakEpoch) {\n this.logOrchestratorFunnel(\"duplicate_break_start\", { source, breakKey });\n return;\n }\n this.opportunityBreakKey = breakKey;\n this.opportunityEpoch = this.timing.adBreakEpoch;\n try {\n this.opportunityFloor = this.host.getFloorSnapshot(position);\n } catch {\n this.opportunityFloor = void 0;\n }\n this.logOrchestratorFunnel(\"opportunity_created\", {\n source,\n breakKey,\n expectedDurationMs: this.timing.expectedAdBreakDurationMs,\n ...this.opportunityFloorFields()\n });\n }\n beginFunnelRequest(adPlayer, requestToken, trigger) {\n if (this.controllerCallInFlight) {\n this.logOrchestratorFunnel(\"duplicate_request_detected\", {\n newRequestId: requestToken\n });\n }\n this.finalizeRequestDiagnostics(this.currentRequestId);\n this.currentRequestId = requestToken;\n this.requestStartedAt = Date.now();\n this.requestDiagnostics.set(requestToken, {\n breakId: this.timing.adBreakEpoch,\n requestId: requestToken,\n controllerId: this.controllerGeneration,\n trigger,\n gamRequestSent: 0,\n wrapperDepth: 0,\n inlineResolved: false,\n mediaCandidateCount: 0,\n supportedMediaCount: 0,\n playStarted: false,\n impressionFired: false,\n impressionCount: 0,\n startedAt: Date.now()\n });\n adPlayer.setFunnelContext?.({\n breakId: this.timing.adBreakEpoch,\n requestId: requestToken,\n controllerId: this.controllerGeneration\n });\n }\n isAdLoadingWithoutPlayback() {\n return this.host.getAdPlayer().isAdPlaying() && !this.playbackStartedForCurrentRequest;\n }\n noteStopBeforeStart(reason) {\n if (!this.isAdLoadingWithoutPlayback()) return;\n this.logOrchestratorFunnel(\"ad_stopped_before_start\", {\n reason,\n elapsedSinceRequestMs: this.requestStartedAt != null ? Date.now() - this.requestStartedAt : void 0\n });\n }\n handleRequestWatchdogTimeout() {\n const adPlayer = this.host.getAdPlayer();\n if (this.controllerCallInFlight && adPlayer.abortPendingRequest) {\n this.logOrchestratorFunnel(\"request_aborted_timeout\", {\n elapsedSinceRequestMs: this.requestStartedAt != null ? Date.now() - this.requestStartedAt : void 0\n });\n adPlayer.abortPendingRequest(\n \"VAST request aborted after request watchdog timeout\"\n );\n return;\n }\n this.handleAdFailure(\"request_watchdog_timeout\");\n }\n async callController(call) {\n this.controllerCallInFlight = true;\n try {\n await call();\n } finally {\n this.controllerCallInFlight = false;\n }\n }\n async playSingleAd(vastTagUrl, trigger = \"vmap\") {\n if (this.slotState === \"REQUESTING\" || this.slotState === \"READY\" || this.slotState === \"PLAYING\" || this.slotState === \"ENDING\") {\n this.logOrchestratorFunnel(\"request_suppressed\", {\n trigger,\n state: this.slotState,\n why: \"request_in_flight\"\n });\n return;\n }\n if (this.timing.failedVastUrls.has(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping permanently-failed VAST URL:\", vastTagUrl);\n this.timing.consecutiveFailures++;\n throw new Error(\"VAST URL permanently failed\");\n }\n if (this.timing.isUrlInCooldown(vastTagUrl)) {\n if (this.debug) console.warn(\"[AD-ERROR] Skipping URL in cooldown (recent no-fill):\", vastTagUrl);\n this.timing.consecutiveFailures++;\n throw new Error(\"VAST URL in cooldown after no-fill\");\n }\n if (this.timing.consecutiveFailures >= this.timing.maxConsecutiveFailures) {\n if (this.debug) console.warn(\"[AD-ERROR] Too many consecutive failures, not requesting more ads\");\n throw new Error(\"Too many consecutive failures\");\n }\n if (this.timing.isGamInCooldown()) {\n if (this.debug) console.warn(\"[CIRCUIT-BREAKER] GAM in cooldown, skipping ad request\");\n throw new Error(\"GAM in cooldown\");\n }\n const epoch = this.timing.adBreakEpoch;\n this.recreateAdController(\"new_request\");\n const generation = this.controllerGeneration;\n const requestToken = ++this.timing.adRequestTokenCounter;\n this.timing.activeAdRequestToken = requestToken;\n const ap = this.host.getAdPlayer();\n const budgetedUrl = this.withCurrentPodBudget(vastTagUrl);\n this.setSlotState(\"REQUESTING\", trigger);\n this.beginFunnelRequest(ap, requestToken, trigger);\n const requestUrl = this.applyOpportunityFloor(budgetedUrl);\n this.currentVastUrl = requestUrl;\n try {\n await this.timing.enforceGlobalRateLimit();\n if (this.isStale(epoch, generation)) return;\n this.timing.startAdRequestWatchdog(requestToken);\n await this.callController(() => ap.requestAds(requestUrl));\n this.timing.clearAdRequestWatchdog();\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", { requestId: requestToken });\n return;\n }\n sendAdLoadedTracking(\n this.host.config.licenseKey,\n { source: \"hls\", vastUrl: requestUrl, timestamp: (/* @__PURE__ */ new Date()).toISOString() },\n this.analyticsContext\n ).catch(() => {\n });\n if (!this.timing.ensureLoadedAdFitsBudget(ap)) {\n const adDurationS = ap.getLoadedAdDuration?.();\n const remainingMs = Math.min(\n this.timing.getWallClockRemainingAdMs(),\n this.timing.getDurationBudgetRemainingMs()\n );\n this.logOrchestratorFunnel(\"discarded_budget\", {\n adDurationMs: adDurationS != null ? adDurationS * 1e3 : void 0,\n remainingMs\n });\n throw new Error(\"ad_duration_exceeds_budget\");\n }\n this.setSlotState(\"READY\", \"vast_ready\");\n this.timing.startAdFailsafeTimer(requestToken);\n await this.callController(() => ap.play());\n if (this.isStale(epoch, generation)) return;\n if (this.timing.expectedAdBreakDurationMs != null && this.timing.getAdBreakEndWallClockMs() == null) {\n this.timing.scheduleAdStopAtBreakBoundary();\n }\n ap.setAdVolume(getAdAudioVolume(ap));\n this.timing.temporaryFailureUrls.delete(vastTagUrl);\n } catch (error) {\n this.timing.clearAdRequestWatchdog();\n this.timing.clearAdFailsafeTimer();\n if (this.timing.activeAdRequestToken === requestToken) {\n this.timing.activeAdRequestToken = null;\n }\n if (this.isStale(epoch, generation)) {\n this.logOrchestratorFunnel(\"stale_request_result_ignored\", {\n requestId: requestToken,\n errorMessage: error?.message\n });\n return;\n }\n if (this.debug) console.error(\"[AD-ERROR] Ad request failed:\", error?.message);\n this.recordRequestFailure(error, vastTagUrl);\n if (error?.message === \"ad_duration_exceeds_budget\") {\n this.recreateAdController(\"discarded_budget\");\n }\n throw error;\n }\n }\n // ───────────────────────────────────────────────────────────────\n // Ad break completion\n // ───────────────────────────────────────────────────────────────\n logBreakFunnel(endReason) {\n const funnel = this.breakFunnel;\n this.breakFunnel = {};\n if (Object.keys(funnel).length === 0) return;\n const count = (stage) => funnel[stage] ?? 0;\n const countPrefix = (prefix) => Object.keys(funnel).reduce(\n (total, stage) => stage.indexOf(prefix) === 0 ? total + (funnel[stage] ?? 0) : total,\n 0\n );\n const breakId = this.opportunityEpoch;\n const requestRetries = count(\"gam_http_request_retry\");\n const requests = count(\"gam_http_request_sent\") - requestRetries;\n if (requests > 0 && count(\"impression_fired\") === 0) {\n console.log(\"[AdBreak][FUNNEL] break_abandoned_before_start\", {\n breakId,\n requests,\n endReason\n });\n }\n console.log(\"[AdBreak][FUNNEL] Break summary\", {\n breakId,\n endReason,\n opportunities: count(\"opportunity_created\"),\n ...this.opportunityFloorFields(),\n floorAppliedRequests: count(\"floor_applied\"),\n floorSkippedRequests: count(\"floor_skipped\") + count(\"floor_skipped:disabled\"),\n vastUrlsGenerated: count(\"vast_url_generated\"),\n requests,\n requestRetries,\n gamResponses: count(\"gam_response_received\"),\n requestsSuppressed: count(\"request_suppressed\"),\n duplicates: count(\"duplicate_request_detected\") + count(\"duplicate_break_start\"),\n filled: count(\"vast_received\"),\n noFill: count(\"no_fill\"),\n fillRejected: count(\"vast_fill_rejected\"),\n gamAdWithoutImpression: count(\"gam_ad_without_impression\"),\n playbackFailedAfterFill: count(\"request_outcome:playback_failed\"),\n requestFailed: count(\"request_failed\"),\n requestAbortedTimeout: count(\"request_aborted_timeout\"),\n credentialsRetries: count(\"vast_credentials_retry\"),\n wrapperFailures: count(\"wrapper_fetch:failure\"),\n noSupportedMedia: count(\"vast_no_supported_media\"),\n vpaidOnly: count(\"vast_no_supported_media:vpaid\"),\n audioOnly: count(\"vast_no_supported_media:audio_only\"),\n mediaFilesEvaluated: count(\"mediafile_evaluated\"),\n mediaFilesAccepted: count(\"mediafile_evaluated:accepted\"),\n controllerDestroys: countPrefix(\"controller_destroy:\"),\n staleCallbacks: count(\"stale_callback_ignored\") + count(\"stale_request_result_ignored\"),\n tagAllowsAudio: count(\"tag_allows_audio\"),\n missingImpression: count(\"vast_missing_impression\"),\n discardedBudget: count(\"discarded_budget\"),\n mediaCandidates: count(\"media_candidate:accepted\") + count(\"media_candidate:rejected\"),\n mediaRejected: count(\"media_candidate:rejected\"),\n mediaFallbacks: count(\"media_fallback\"),\n playCalled: count(\"play_called\"),\n playRejected: count(\"play_rejected\"),\n mutedRetry: count(\"muted_retry\"),\n startTimeouts: count(\"play_resolved_but_never_started\"),\n impressions: count(\"impression_fired\"),\n impressionUrls: count(\"impression_urls\"),\n trackingRequests: count(\"tracking_request_created\"),\n trackingNotLoaded: count(\"tracking_request_settled:error\") + count(\"tracking_request_settled:timeout\"),\n trackingUnexpandedMacros: count(\"tracking_url_unexpanded_macro\"),\n trackingInvalidUrls: count(\"tracking_url_invalid\"),\n vastAdFallbacks: count(\"vast_ad_fallback\"),\n mediaEvents: count(\"media_event\"),\n quartile25: count(\"first_quartile\"),\n quartile50: count(\"midpoint\"),\n quartile75: count(\"third_quartile\"),\n complete: count(\"complete\"),\n stoppedBeforeStart: count(\"stopped_before_start\"),\n stoppedBeforeStartByBreakEnd: count(\"ad_stopped_before_start\"),\n unexpectedUnmutes: count(\"unexpected_unmute\"),\n unmuteBlocked: count(\"unmute_blocked_without_gesture\"),\n visibilityHidden: count(\"while_hidden\"),\n playbackFailures: count(\"play_failed\") + count(\"media_error\") + count(\"hls_fatal\") + count(\"stall\") + count(\"decode_failure\") + count(\"media_unsupported\"),\n stages: funnel\n });\n }\n handleAdPodComplete(reason = \"unspecified\") {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Ad pod complete - cleaning up\", { reason });\n }\n const previousState = this.slotState;\n const alreadyEnded = previousState === \"IDLE\" && !this.inAdBreak;\n this.setSlotState(\"ENDING\", reason);\n this.cancelScheduledRequest();\n const adPlayer = this.host.getAdPlayer();\n if (previousState === \"REQUESTING\") {\n adPlayer.abortPendingRequest?.(`VAST request aborted: ad break ended (${reason})`);\n }\n if (!alreadyEnded) {\n console.log(\"[AD-CONTROLLER] stop\", {\n controllerId: this.controllerGeneration,\n requestId: this.currentRequestId,\n state: previousState,\n reason\n });\n }\n this.finalizeRequestDiagnostics(this.currentRequestId, `break_ended:${reason}`);\n this.currentRequestId = void 0;\n const contentWasInterrupted = this.showAds || this.isShowingPlaceholder || (this.breakFunnel[\"play_called\"] ?? 0) > 0 || (this.breakFunnel[\"impression_fired\"] ?? 0) > 0;\n this.timing.resetForBreakEnd();\n this.placeholder.hide();\n this.clearPendingAdBreak();\n if (this.isShowingPlaceholder) {\n adPlayer.hidePlaceholder();\n this.isShowingPlaceholder = false;\n }\n this.inAdBreak = false;\n this.adDetectSentForCurrentBreak = false;\n this.cueManager.activeScte35BreakKey = void 0;\n this.cueManager.scheduledScte35BreakKey = void 0;\n this.adPodQueue = [];\n this.showAds = false;\n this.breakSource = void 0;\n this.followUpBaseVastUrl = void 0;\n this.unusableResponsesInBreak = 0;\n adPlayer.stop().catch(() => {\n });\n if (!alreadyEnded) this.logBreakFunnel(reason);\n this.opportunityFloor = void 0;\n this.setSlotState(\"IDLE\", \"break_complete\");\n const restoredMuted = this.host.getAdPlayer().getOriginalMutedState();\n const restoredVolume = this.host.getAdPlayer().getOriginalVolume();\n if (this.host.video.muted !== restoredMuted) {\n this.host.video.muted = restoredMuted;\n }\n if (Math.abs(this.host.video.volume - restoredVolume) > 0.01) {\n this.host.video.volume = restoredVolume;\n }\n this.host.video.style.visibility = \"visible\";\n this.host.video.style.opacity = \"1\";\n if (this.host.isLiveStream()) {\n if (this.host.requiresMediaPipelineResetAfterAds()) {\n if (this.debug) {\n console.log(\n \"[StormcloudVideoPlayer] Live break end \\u2014 hard-reloading stream to reacquire decoder (single-decoder platform)\"\n );\n }\n this.host.reloadLiveStream();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n if (!contentWasInterrupted) {\n if (this.debug) {\n console.log(\"[StormcloudVideoPlayer] Live break end \\u2014 no ad was shown, leaving playback position unchanged\");\n }\n this.resumeContentPlayback();\n return;\n }\n const liveSyncPos = this.host.getLiveSyncPosition();\n if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live break end \\u2014 snapping to live edge: ${this.host.video.currentTime.toFixed(2)}s \\u2192 ${liveSyncPos.toFixed(2)}s`\n );\n }\n this.host.video.currentTime = liveSyncPos;\n this.host.restartHlsLoad(liveSyncPos);\n }\n this.resumeContentPlayback();\n this.monitorLiveResumeStall(this.host.video.currentTime);\n return;\n }\n this.resumeContentPlayback();\n }\n getBufferedAhead() {\n const video = this.host.video;\n const t = video.currentTime;\n const ranges = video.buffered;\n for (let i = 0; i < ranges.length; i++) {\n if (t >= ranges.start(i) - 0.5 && t <= ranges.end(i)) {\n return ranges.end(i) - t;\n }\n }\n return 0;\n }\n describeVideoState() {\n const v = this.host.video;\n const networkStates = [\"EMPTY\", \"IDLE\", \"LOADING\", \"NO_SOURCE\"];\n const readyStates = [\n \"HAVE_NOTHING\",\n \"HAVE_METADATA\",\n \"HAVE_CURRENT_DATA\",\n \"HAVE_FUTURE_DATA\",\n \"HAVE_ENOUGH_DATA\"\n ];\n const net = networkStates[v.networkState] ?? String(v.networkState);\n const ready = readyStates[v.readyState] ?? String(v.readyState);\n const err = v.error ? `code=${v.error.code}${v.error.message ? ` (${v.error.message})` : \"\"}` : \"none\";\n const ranges = [];\n for (let i = 0; i < v.buffered.length; i++) {\n ranges.push(`[${v.buffered.start(i).toFixed(2)}\\u2013${v.buffered.end(i).toFixed(2)}]`);\n }\n return `t=${v.currentTime.toFixed(2)}s paused=${v.paused} ended=${v.ended} seeking=${v.seeking} readyState=${ready} networkState=${net} error=${err} buffered=${ranges.length ? ranges.join(\",\") : \"none\"}`;\n }\n monitorLiveResumeStall(resumeBaseline) {\n const needsReset = this.host.requiresMediaPipelineResetAfterAds();\n const pollIntervalMs = 1e3;\n const graceMs = needsReset ? 8e3 : 5e3;\n const recoveryCooldownMs = needsReset ? 7e3 : 5e3;\n const maxRecoveries = 3;\n const maxMonitorMs = 45e3;\n const startTime = Date.now();\n let baseline = resumeBaseline;\n let recoveries = 0;\n let lastRecoveryAt = 0;\n const video = this.host.video;\n let listenersAttached = false;\n let onMediaEvent;\n const diagEvents = [\n \"loadstart\",\n \"loadedmetadata\",\n \"loadeddata\",\n \"canplay\",\n \"canplaythrough\",\n \"play\",\n \"playing\",\n \"pause\",\n \"waiting\",\n \"stalled\",\n \"suspend\",\n \"seeking\",\n \"seeked\",\n \"emptied\",\n \"error\",\n \"ended\"\n ];\n if (this.debug) {\n onMediaEvent = (e) => {\n const dt = ((Date.now() - startTime) / 1e3).toFixed(1);\n console.log(\n `[ResumeDiag] +${dt}s event=${e.type} \\u2014 ${this.describeVideoState()}`\n );\n };\n for (const name of diagEvents) {\n video.addEventListener(name, onMediaEvent);\n }\n listenersAttached = true;\n console.log(\n `[ResumeDiag] +0.0s monitor start \\u2014 ${this.describeVideoState()}`\n );\n }\n const cleanup = () => {\n if (listenersAttached && onMediaEvent) {\n for (const name of diagEvents) {\n video.removeEventListener(name, onMediaEvent);\n }\n listenersAttached = false;\n }\n };\n const poll = () => {\n if (this.inAdBreak) {\n cleanup();\n return;\n }\n const currentTime = video.currentTime;\n const advanced = currentTime > baseline + 0.5;\n const playing = !video.paused && video.readyState >= 3;\n if (advanced && playing) {\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Live stream resumed successfully after ad break \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n const elapsed = Date.now() - startTime;\n const bufferedAhead = this.getBufferedAhead();\n const wedged = bufferedAhead < 0.5 && !advanced;\n if (elapsed >= maxMonitorMs) {\n if (this.debug && !advanced) {\n console.warn(\n `[StormcloudVideoPlayer] Live stream failed to resume after ${(maxMonitorMs / 1e3).toFixed(0)}s \\u2014 ${this.describeVideoState()}`\n );\n }\n cleanup();\n return;\n }\n const canRecover = wedged && elapsed >= graceMs && Date.now() - lastRecoveryAt >= recoveryCooldownMs && recoveries < maxRecoveries;\n if (canRecover) {\n recoveries++;\n lastRecoveryAt = Date.now();\n if (needsReset) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n } else if (recoveries === 1) {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 calling recoverMediaError() (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.recoverMediaError();\n } else if (recoveries === 2) {\n const liveSyncPos = this.host.getLiveSyncPosition();\n const reloadPos = liveSyncPos != null && liveSyncPos > currentTime ? liveSyncPos : currentTime;\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content wedged after ad break \\u2014 restarting HLS load at ${reloadPos.toFixed(2)}s (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n if (liveSyncPos != null && liveSyncPos > currentTime) {\n video.currentTime = liveSyncPos;\n }\n this.host.restartHlsLoad(reloadPos);\n } else {\n if (this.debug) {\n console.warn(\n `[StormcloudVideoPlayer] Content still wedged after ad break \\u2014 hard-reloading live stream (recovery ${recoveries}/${maxRecoveries}) \\u2014 ${this.describeVideoState()}`\n );\n }\n this.host.reloadLiveStream();\n }\n baseline = video.currentTime;\n if (video.paused) {\n video.play()?.catch(() => {\n });\n }\n }\n window.setTimeout(poll, pollIntervalMs);\n };\n window.setTimeout(poll, pollIntervalMs);\n }\n resumeContentPlayback(attempt = 0) {\n const maxAttempts = 5;\n const video = this.host.video;\n if (!video.paused) {\n if (this.debug && attempt === 0) {\n console.log(\"[StormcloudVideoPlayer] Content video already playing after ads\");\n }\n return;\n }\n if (this.debug) {\n console.log(\n `[StormcloudVideoPlayer] Resuming content playback after ads (attempt ${attempt + 1}/${maxAttempts}, readyState=${video.readyState})`\n );\n }\n if (video.readyState < 3) {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] readyState never reached HAVE_FUTURE_DATA, forcing play()\"\n );\n }\n video.play()?.catch(() => {\n });\n return;\n }\n const onReady = () => {\n video.removeEventListener(\"canplay\", onReady);\n this.resumeContentPlayback(attempt + 1);\n };\n video.addEventListener(\"canplay\", onReady);\n const backoffMs = 500 * (attempt + 1);\n window.setTimeout(() => {\n video.removeEventListener(\"canplay\", onReady);\n if (video.paused) {\n this.resumeContentPlayback(attempt + 1);\n }\n }, backoffMs);\n return;\n }\n const playResult = video.play();\n if (playResult && typeof playResult.catch === \"function\") {\n playResult.catch((error) => {\n if (attempt + 1 >= maxAttempts) {\n if (this.debug) {\n console.warn(\n \"[StormcloudVideoPlayer] Failed to resume content playback after ads:\",\n error\n );\n }\n return;\n }\n const backoffMs = 250 * (attempt + 1);\n window.setTimeout(() => {\n this.resumeContentPlayback(attempt + 1);\n }, backoffMs);\n });\n }\n }\n handleAdFailure(reason = \"ad_failure\") {\n if (!this.inAdBreak) return;\n if (this.slotState === \"REQUESTING\" || this.slotState === \"ENDING\") {\n this.logOrchestratorFunnel(\"failure_deferred_to_request\", {\n reason,\n state: this.slotState\n });\n return;\n }\n this.timing.consecutiveFailures++;\n const diag = this.currentRequestId != null ? this.requestDiagnostics.get(this.currentRequestId) : void 0;\n if (diag && !diag.failureReason) diag.failureReason = reason;\n if (this.debug) {\n console.log(\n `[AdBreak] Ad failure (${reason}): remaining=${this.timing.getRemainingAdMs()}ms, consecutiveFailures=${this.timing.consecutiveFailures}`\n );\n }\n this.setSlotState(\"NEEDS_NEXT_AD\", reason);\n this.requestNextAd(reason);\n }\n};\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n AdBreakOrchestrator\n});\n"]}