stormcloud-video-player 0.8.73 → 0.8.74

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 (61) hide show
  1. package/README.md +10 -70
  2. package/dist/stormcloud-vp.min.js +1 -1
  3. package/lib/Player.d.cts +1 -0
  4. package/lib/StormcloudPlayer.cjs +987 -273
  5. package/lib/StormcloudPlayer.cjs.map +1 -1
  6. package/lib/StormcloudPlayer.d.cts +1 -0
  7. package/lib/index.cjs +998 -278
  8. package/lib/index.cjs.map +1 -1
  9. package/lib/index.d.cts +1 -0
  10. package/lib/index.d.ts +40 -3
  11. package/lib/index.js +991 -279
  12. package/lib/index.js.map +1 -1
  13. package/lib/player/AdBreakOrchestrator.cjs +767 -67
  14. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  15. package/lib/player/AdBreakOrchestrator.d.cts +7 -9
  16. package/lib/player/AdConfigManager.cjs +314 -62
  17. package/lib/player/AdConfigManager.cjs.map +1 -1
  18. package/lib/player/AdConfigManager.d.cts +7 -12
  19. package/lib/player/AdTimingService.cjs +37 -1
  20. package/lib/player/AdTimingService.cjs.map +1 -1
  21. package/lib/player/AdTimingService.d.cts +8 -1
  22. package/lib/player/EdgePodRequest.d.cts +1 -0
  23. package/lib/player/FloorLadder.d.cts +1 -0
  24. package/lib/player/HlsEngine.d.cts +1 -0
  25. package/lib/player/OptimizedPodRequest.cjs +719 -0
  26. package/lib/player/OptimizedPodRequest.cjs.map +1 -0
  27. package/lib/player/OptimizedPodRequest.d.cts +101 -0
  28. package/lib/player/PlayerControls.d.cts +1 -0
  29. package/lib/player/Scte35CueManager.d.cts +1 -0
  30. package/lib/player/Scte35Parser.d.cts +1 -0
  31. package/lib/player/StormcloudVideoPlayer.cjs +987 -273
  32. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  33. package/lib/player/StormcloudVideoPlayer.d.cts +1 -0
  34. package/lib/player/playerTypes.d.cts +1 -0
  35. package/lib/players/HlsPlayer.cjs +987 -273
  36. package/lib/players/HlsPlayer.cjs.map +1 -1
  37. package/lib/players/HlsPlayer.d.cts +1 -0
  38. package/lib/players/index.cjs +987 -273
  39. package/lib/players/index.cjs.map +1 -1
  40. package/lib/props.d.cts +1 -0
  41. package/lib/sdk/hlsAdPlayer.cjs +316 -51
  42. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  43. package/lib/sdk/hlsAdPlayer.d.cts +3 -1
  44. package/lib/sdk/pal.cjs +108 -83
  45. package/lib/sdk/pal.cjs.map +1 -1
  46. package/lib/sdk/pal.d.cts +1 -0
  47. package/lib/types.d.cts +9 -2
  48. package/lib/ui/StormcloudVideoPlayer.cjs +990 -278
  49. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  50. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
  51. package/lib/utils/ctvVastSignals.cjs +9 -7
  52. package/lib/utils/ctvVastSignals.cjs.map +1 -1
  53. package/lib/utils/tracking.cjs +17 -3
  54. package/lib/utils/tracking.cjs.map +1 -1
  55. package/lib/utils/tracking.d.cts +2 -1
  56. package/lib/utils/vastEnvironmentSignals.cjs +9 -7
  57. package/lib/utils/vastEnvironmentSignals.cjs.map +1 -1
  58. package/lib/utils/vastMacros.cjs +250 -10
  59. package/lib/utils/vastMacros.cjs.map +1 -1
  60. package/lib/utils/vastMacros.d.cts +13 -4
  61. package/package.json +5 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\player\\OptimizedPodRequest.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","OptimizedPodRequest_exports","DEFAULT_REQUEST_SAFETY_MS","GAM_AD_OPPORTUNITY_DURATION_MS","computePodResponseDiagnostics","finalizeGamRequestUrl","isOptimizedPodUrl","isPodRequestAbortedError","measureBreakCapacity","resolveAdPodConfig","resolvePodParams","validateGamRequestUrl","module","exports","DEVICE_TYPE_HINT","FEATURE_PHONE","SMARTPHONE","DESKTOP","TABLET","CONNECTED_TV","GAME_CONSOLE","SET_TOP_BOX","DEVICE_TYPE_HINT_ALIASES","featurephone","smartphone","mobile","phone","desktop","pc","tablet","ctv","tv","connectedtv","smarttv","console","gameconsole","stb","settopbox","PERSISTENT_ID_COOKIE_MAX_AGE","INVALID_VAST_PARAM_KEY","removeBrokenAppNameOrphans","params","appName","toDelete","forEach","_value","test","push","includes","split","slice","suffix","trimmed","replace","Set","delete","normalizeVastTagUrl","raw","url","URL","anValue","searchParams","orphanFragments","trim","length","reconstructed","filter","Boolean","join","set","toString","_match","prefix","val","SCVP_MACRO_DETECT","SCVP_MACRO_PATTERN","SCVP_WHOLE_VALUE_PATTERN","NESTED_QUERY_PARAM_KEYS","SCVP_POD_MACROS","safeDecode","decodeURIComponent","findScvpMacroNames","names","text","pass","_m","bracketName","parenName","add","String","toUpperCase","decoded","Array","keepNone","substituteScvpParams","values","unresolved","keep","nested","out","replaceMacro","match","whole","resolved","has","inner","URLSearchParams","map","k","v","encodeURIComponent","substituteScvpMacros","baseUrl","replaced","entries","search","append","POD_PARAM_KEYS","POSITIVE_INT","NON_NEGATIVE_INT","nonNegativeInt","Number","isFinite","Math","floor","positiveInt","config","pod","adPodConfig","requestSafetyMs","minPodDurationMs","maxAdsPerBreak","podMaxAds","maxPodDurationMs","podMaxDurationMs","exactDuration","podExactDuration","timing","nowMonoMs","scheduled","scheduledBreakDurationMs","breakStartMonoMs","endMonoMs","breakEndMonoMs","untilEnd","min","unplayed","max","playedDurationMs","elapsedBeforeGamRequestMs","remainingAtGamDispatchMs","input","capacity","pmxd","source","tagMaxDurationMs","kind","minUsable","minUsablePmxdMs","reason","pmxdCandidateMs","pmnd","pmad","podRequestAborted","message","diagnostics","error","Error","firstPositiveIntParam","getAll","some","rawUrl","ctx","nowEpochMs","Date","now","optimizedPod","base","breakId","scteBreakDurationMs","safetyReserveMs","decision","Map","substituted","finalUrl","problems","remainingMs","givn","pmxdSource","pmndSent","pmxdSent","pmadSent","palNoncePresent","gamRequestDispatchTimestamp","toISOString","strippedMacros","expect","leftover","concat","vastAdCount","totalVastCreativeDurationMs","estimatedUnusedPodMs","estimatedUnmatchedCount"],"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/OptimizedPodRequest.ts\nvar OptimizedPodRequest_exports = {};\n__export(OptimizedPodRequest_exports, {\n DEFAULT_REQUEST_SAFETY_MS: () => DEFAULT_REQUEST_SAFETY_MS,\n GAM_AD_OPPORTUNITY_DURATION_MS: () => GAM_AD_OPPORTUNITY_DURATION_MS,\n computePodResponseDiagnostics: () => computePodResponseDiagnostics,\n finalizeGamRequestUrl: () => finalizeGamRequestUrl,\n isOptimizedPodUrl: () => isOptimizedPodUrl,\n isPodRequestAbortedError: () => isPodRequestAbortedError,\n measureBreakCapacity: () => measureBreakCapacity,\n resolveAdPodConfig: () => resolveAdPodConfig,\n resolvePodParams: () => resolvePodParams,\n validateGamRequestUrl: () => validateGamRequestUrl\n});\nmodule.exports = __toCommonJS(OptimizedPodRequest_exports);\n\n// src/utils/vastEnvironmentSignals.ts\nvar DEVICE_TYPE_HINT = {\n FEATURE_PHONE: 1,\n SMARTPHONE: 2,\n DESKTOP: 3,\n TABLET: 4,\n CONNECTED_TV: 5,\n GAME_CONSOLE: 6,\n SET_TOP_BOX: 7\n};\nvar DEVICE_TYPE_HINT_ALIASES = {\n featurephone: DEVICE_TYPE_HINT.FEATURE_PHONE,\n smartphone: DEVICE_TYPE_HINT.SMARTPHONE,\n mobile: DEVICE_TYPE_HINT.SMARTPHONE,\n phone: DEVICE_TYPE_HINT.SMARTPHONE,\n desktop: DEVICE_TYPE_HINT.DESKTOP,\n pc: DEVICE_TYPE_HINT.DESKTOP,\n tablet: DEVICE_TYPE_HINT.TABLET,\n ctv: DEVICE_TYPE_HINT.CONNECTED_TV,\n tv: DEVICE_TYPE_HINT.CONNECTED_TV,\n connectedtv: DEVICE_TYPE_HINT.CONNECTED_TV,\n smarttv: DEVICE_TYPE_HINT.CONNECTED_TV,\n console: DEVICE_TYPE_HINT.GAME_CONSOLE,\n gameconsole: DEVICE_TYPE_HINT.GAME_CONSOLE,\n stb: DEVICE_TYPE_HINT.SET_TOP_BOX,\n settopbox: DEVICE_TYPE_HINT.SET_TOP_BOX\n};\nvar PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;\n\n// src/utils/vastMacros.ts\nvar INVALID_VAST_PARAM_KEY = /^\\s|\\s$/;\nfunction removeBrokenAppNameOrphans(params, appName) {\n const toDelete = [];\n params.forEach((_value, key) => {\n if (!key || INVALID_VAST_PARAM_KEY.test(key)) {\n toDelete.push(key);\n }\n });\n if (appName && appName.includes(\"&\")) {\n for (const suffix of appName.split(\"&\").slice(1)) {\n const trimmed = suffix.replace(/^\\s+/, \"\");\n if (!trimmed) continue;\n toDelete.push(suffix, ` ${trimmed}`, trimmed);\n }\n }\n for (const key of new Set(toDelete)) {\n if (key) params.delete(key);\n }\n}\nfunction normalizeVastTagUrl(raw) {\n if (!raw) return raw;\n try {\n const url = new URL(raw);\n const anValue = url.searchParams.get(\"an\");\n if (anValue !== null) {\n const orphanFragments = [];\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n orphanFragments.push(key.trim());\n }\n });\n if (orphanFragments.length > 0) {\n const reconstructed = [anValue.replace(/\\s+$/, \"\"), ...orphanFragments].filter(Boolean).join(\" & \");\n url.searchParams.forEach((_value, key) => {\n if (key && INVALID_VAST_PARAM_KEY.test(key)) {\n url.searchParams.delete(key);\n }\n });\n url.searchParams.set(\"an\", reconstructed);\n return url.toString().replace(\n /([?&]an=)([^&]*)/,\n (_match, prefix, val) => prefix + val.replace(/\\+/g, \"%20\")\n );\n }\n }\n removeBrokenAppNameOrphans(url.searchParams);\n return url.toString();\n } catch {\n return raw;\n }\n}\nvar SCVP_MACRO_DETECT = /\\[SCVP-|%5BSCVP-|\\(SCVP-|%28SCVP-/i;\nvar SCVP_MACRO_PATTERN = /\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\)/gi;\nvar SCVP_WHOLE_VALUE_PATTERN = /^\\s*(?:\\[SCVP-([A-Z0-9-]+)\\]|\\(SCVP-([A-Z0-9-]+)\\))\\s*$/i;\nvar NESTED_QUERY_PARAM_KEYS = /* @__PURE__ */ new Set([\"cust_params\"]);\nvar SCVP_POD_MACROS = /* @__PURE__ */ new Set([\"PMND\", \"PMXD\", \"PMAD\"]);\nfunction safeDecode(value) {\n try {\n return decodeURIComponent(value.replace(/\\+/g, \" \"));\n } catch {\n return value;\n }\n}\nfunction findScvpMacroNames(url) {\n if (!url) return [];\n const names = /* @__PURE__ */ new Set();\n let text = url;\n for (let pass = 0; pass < 3; pass++) {\n text.replace(SCVP_MACRO_PATTERN, (_m, bracketName, parenName) => {\n names.add(String(bracketName || parenName).toUpperCase());\n return \"\";\n });\n const decoded = safeDecode(text);\n if (decoded === text) break;\n text = decoded;\n }\n return Array.from(names);\n}\nvar keepNone = () => false;\nfunction substituteScvpParams(params, values, unresolved, keep, nested) {\n const out = [];\n const replaceMacro = (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return value;\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n };\n params.forEach((value, key) => {\n const whole = value.match(SCVP_WHOLE_VALUE_PATTERN);\n if (whole) {\n const name = String(whole[1] || whole[2]).toUpperCase();\n const resolved = values.get(name);\n if (resolved != null) {\n out.push([key, resolved]);\n } else if (keep(name)) {\n out.push([key, value]);\n } else {\n unresolved.add(name);\n }\n return;\n }\n if (!SCVP_MACRO_DETECT.test(value)) {\n out.push([key, value]);\n return;\n }\n if (!nested && NESTED_QUERY_PARAM_KEYS.has(key)) {\n const inner = substituteScvpParams(new URLSearchParams(value), values, unresolved, keep, true);\n if (inner.length > 0) {\n out.push([\n key,\n inner.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\")\n ]);\n }\n return;\n }\n out.push([key, value.replace(SCVP_MACRO_PATTERN, replaceMacro)]);\n });\n return out;\n}\nfunction substituteScvpMacros(baseUrl, values, keep = keepNone) {\n const unresolved = /* @__PURE__ */ new Set();\n let url;\n try {\n url = new URL(normalizeVastTagUrl(baseUrl));\n } catch {\n const replaced = baseUrl.replace(\n SCVP_MACRO_PATTERN,\n (match, bracketName, parenName) => {\n const name = String(bracketName || parenName).toUpperCase();\n const value = values.get(name);\n if (value != null) return encodeURIComponent(value);\n if (keep(name)) return match;\n unresolved.add(name);\n return \"\";\n }\n );\n return { url: replaced, unresolved: Array.from(unresolved) };\n }\n const entries = substituteScvpParams(url.searchParams, values, unresolved, keep, false);\n const search = new URLSearchParams();\n for (const [key, value] of entries) search.append(key, value);\n url.search = search.toString();\n return { url: url.toString(), unresolved: Array.from(unresolved) };\n}\n\n// src/player/OptimizedPodRequest.ts\nvar DEFAULT_REQUEST_SAFETY_MS = 1500;\nvar GAM_AD_OPPORTUNITY_DURATION_MS = 3e4;\nvar POD_PARAM_KEYS = [\"pmnd\", \"pmxd\", \"pmad\"];\nvar POSITIVE_INT = /^[1-9]\\d*$/;\nvar NON_NEGATIVE_INT = /^(0|[1-9]\\d*)$/;\nfunction nonNegativeInt(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0 ? Math.floor(value) : void 0;\n}\nfunction positiveInt(value) {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 1 ? Math.floor(value) : void 0;\n}\nfunction resolveAdPodConfig(config) {\n const pod = config.adPodConfig ?? {};\n return {\n requestSafetyMs: nonNegativeInt(pod.requestSafetyMs) ?? DEFAULT_REQUEST_SAFETY_MS,\n minPodDurationMs: nonNegativeInt(pod.minPodDurationMs) ?? 0,\n maxAdsPerBreak: pod.maxAdsPerBreak === void 0 ? positiveInt(config.podMaxAds) : positiveInt(pod.maxAdsPerBreak),\n maxPodDurationMs: positiveInt(pod.maxPodDurationMs) ?? positiveInt(config.podMaxDurationMs),\n exactDuration: config.podExactDuration === true\n };\n}\nfunction measureBreakCapacity(timing, nowMonoMs) {\n const scheduled = timing.scheduledBreakDurationMs;\n if (scheduled == null || !(scheduled > 0) || timing.breakStartMonoMs == null) {\n return void 0;\n }\n const endMonoMs = timing.breakEndMonoMs ?? timing.breakStartMonoMs + scheduled;\n const untilEnd = Math.min(scheduled, endMonoMs - nowMonoMs);\n const unplayed = scheduled - Math.max(0, timing.playedDurationMs);\n return {\n scheduledBreakDurationMs: scheduled,\n elapsedBeforeGamRequestMs: Math.max(0, nowMonoMs - timing.breakStartMonoMs),\n remainingAtGamDispatchMs: Math.max(0, Math.min(untilEnd, unplayed))\n };\n}\nfunction resolvePodParams(input) {\n const { capacity, config } = input;\n let pmxd;\n let source;\n if (capacity) {\n pmxd = Math.floor(capacity.remainingAtGamDispatchMs - config.requestSafetyMs);\n source = \"break_remaining\";\n } else if (config.maxPodDurationMs != null) {\n pmxd = config.maxPodDurationMs;\n source = \"configured_cap\";\n } else if (input.tagMaxDurationMs != null) {\n pmxd = input.tagMaxDurationMs;\n source = \"tag_cap\";\n } else {\n return { kind: \"omit\" };\n }\n const minUsable = Math.max(1, Math.floor(input.minUsablePmxdMs));\n if (!Number.isFinite(pmxd) || pmxd < minUsable) {\n return {\n kind: \"abort\",\n reason: capacity ? \"insufficient_break_capacity\" : \"invalid_pod_cap\",\n pmxdCandidateMs: Number.isFinite(pmxd) ? pmxd : 0\n };\n }\n const pmnd = config.exactDuration ? pmxd : Math.min(config.minPodDurationMs, pmxd);\n return { kind: \"send\", params: { pmnd, pmxd, pmad: config.maxAdsPerBreak }, source };\n}\nfunction podRequestAborted(reason, message, diagnostics) {\n const error = new Error(`Optimized pod request not sent (${reason}): ${message}`);\n error.podRequestAborted = true;\n error.reason = reason;\n error.diagnostics = diagnostics;\n return error;\n}\nfunction isPodRequestAbortedError(error) {\n return !!error && error.podRequestAborted === true;\n}\nfunction firstPositiveIntParam(params, key) {\n for (const value of params.getAll(key)) {\n if (POSITIVE_INT.test(value.trim())) return Number(value.trim());\n }\n return void 0;\n}\nfunction isOptimizedPodUrl(url) {\n if (findScvpMacroNames(url).some((name) => SCVP_POD_MACROS.has(name))) return true;\n try {\n const params = new URL(url).searchParams;\n return POD_PARAM_KEYS.some((key) => params.has(key));\n } catch {\n return false;\n }\n}\nfunction finalizeGamRequestUrl(rawUrl, ctx, nowEpochMs = Date.now()) {\n const optimizedPod = isOptimizedPodUrl(rawUrl);\n const capacity = ctx.capacity;\n const base = {\n breakId: ctx.breakId,\n optimizedPod,\n scteBreakDurationMs: capacity?.scheduledBreakDurationMs,\n elapsedBeforeGamRequestMs: capacity?.elapsedBeforeGamRequestMs,\n remainingAtGamDispatchMs: capacity?.remainingAtGamDispatchMs,\n safetyReserveMs: ctx.config.requestSafetyMs\n };\n let decision = { kind: \"omit\" };\n if (optimizedPod) {\n let tagMaxDurationMs;\n try {\n tagMaxDurationMs = firstPositiveIntParam(new URL(rawUrl).searchParams, \"pmxd\");\n } catch {\n }\n decision = resolvePodParams({\n capacity,\n config: ctx.config,\n minUsablePmxdMs: ctx.minUsablePmxdMs,\n tagMaxDurationMs\n });\n if (decision.kind === \"abort\") {\n throw podRequestAborted(\n decision.reason,\n `pmxd would be ${decision.pmxdCandidateMs}ms (minimum ${ctx.minUsablePmxdMs}ms)`,\n base\n );\n }\n }\n const pod = decision.kind === \"send\" ? decision.params : void 0;\n const values = /* @__PURE__ */ new Map();\n if (pod) {\n values.set(\"PMND\", String(pod.pmnd));\n values.set(\"PMXD\", String(pod.pmxd));\n if (pod.pmad != null) values.set(\"PMAD\", String(pod.pmad));\n }\n const substituted = substituteScvpMacros(rawUrl, values);\n let finalUrl;\n try {\n const url = new URL(normalizeVastTagUrl(substituted.url));\n if (pod) {\n url.searchParams.set(\"pmnd\", String(pod.pmnd));\n url.searchParams.set(\"pmxd\", String(pod.pmxd));\n if (pod.pmad != null) url.searchParams.set(\"pmad\", String(pod.pmad));\n else url.searchParams.delete(\"pmad\");\n } else {\n for (const key of POD_PARAM_KEYS) url.searchParams.delete(key);\n }\n finalUrl = url.toString();\n } catch {\n throw podRequestAborted(\"invalid_url\", \"GAM request URL could not be parsed\", base);\n }\n const problems = validateGamRequestUrl(finalUrl, {\n optimizedPod: !!pod,\n remainingMs: decision.kind === \"send\" && decision.source === \"break_remaining\" ? capacity?.remainingAtGamDispatchMs : void 0\n });\n if (problems.length > 0) {\n throw podRequestAborted(\"invalid_url\", problems.join(\"; \"), base);\n }\n let givn = null;\n try {\n givn = new URL(finalUrl).searchParams.get(\"givn\");\n } catch {\n }\n return {\n url: finalUrl,\n diagnostics: {\n breakId: ctx.breakId,\n optimizedPod: !!pod,\n pmxdSource: decision.kind === \"send\" ? decision.source : void 0,\n scteBreakDurationMs: capacity?.scheduledBreakDurationMs,\n elapsedBeforeGamRequestMs: capacity?.elapsedBeforeGamRequestMs,\n remainingAtGamDispatchMs: capacity?.remainingAtGamDispatchMs,\n safetyReserveMs: ctx.config.requestSafetyMs,\n pmndSent: pod?.pmnd,\n pmxdSent: pod?.pmxd,\n pmadSent: pod?.pmad,\n palNoncePresent: !!givn,\n gamRequestDispatchTimestamp: new Date(nowEpochMs).toISOString(),\n strippedMacros: substituted.unresolved.filter((name) => !SCVP_POD_MACROS.has(name))\n }\n };\n}\nfunction validateGamRequestUrl(url, expect) {\n const problems = [];\n const leftover = findScvpMacroNames(url);\n if (leftover.length > 0) problems.push(`unresolved SCVP macros: ${leftover.join(\", \")}`);\n let params;\n try {\n params = new URL(url).searchParams;\n } catch {\n return problems.concat(\"URL could not be parsed\");\n }\n for (const key of POD_PARAM_KEYS) {\n if (params.getAll(key).length > 1) problems.push(`duplicate ${key}`);\n }\n if (!expect.optimizedPod) {\n for (const key of POD_PARAM_KEYS) {\n if (params.has(key)) problems.push(`${key} present on a non-pod request`);\n }\n return problems;\n }\n const pmxd = params.get(\"pmxd\");\n const pmnd = params.get(\"pmnd\");\n const pmad = params.get(\"pmad\");\n if (pmxd == null || !POSITIVE_INT.test(pmxd)) problems.push(`pmxd must be a positive integer (got ${pmxd})`);\n if (pmnd == null || !NON_NEGATIVE_INT.test(pmnd)) problems.push(`pmnd must be a non-negative integer (got ${pmnd})`);\n if (pmxd != null && pmnd != null && Number(pmnd) > Number(pmxd)) problems.push(\"pmnd exceeds pmxd\");\n if (pmad != null && !POSITIVE_INT.test(pmad)) problems.push(`pmad must be a positive integer or absent (got ${pmad})`);\n if (expect.remainingMs != null && pmxd != null && Number(pmxd) > expect.remainingMs) {\n problems.push(`pmxd ${pmxd} exceeds remaining break ${expect.remainingMs}ms`);\n }\n return problems;\n}\nfunction computePodResponseDiagnostics(pmxdSent, vastAdCount, totalVastCreativeDurationMs) {\n const estimatedUnusedPodMs = Math.max(0, pmxdSent - totalVastCreativeDurationMs);\n return {\n vastAdCount,\n totalVastCreativeDurationMs,\n estimatedUnusedPodMs,\n estimatedUnmatchedCount: Math.floor(estimatedUnusedPodMs / GAM_AD_OPPORTUNITY_DURATION_MS)\n };\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n DEFAULT_REQUEST_SAFETY_MS,\n GAM_AD_OPPORTUNITY_DURATION_MS,\n computePodResponseDiagnostics,\n finalizeGamRequestUrl,\n isOptimizedPodUrl,\n isPodRequestAbortedError,\n measureBreakCapacity,\n resolveAdPodConfig,\n resolvePodParams,\n validateGamRequestUrl\n});\n"]}
@@ -0,0 +1,101 @@
1
+ interface AdPodConfig {
2
+ requestSafetyMs?: number;
3
+ minPodDurationMs?: number;
4
+ maxAdsPerBreak?: number | null;
5
+ maxPodDurationMs?: number;
6
+ }
7
+ interface ResolvedAdPodConfig {
8
+ requestSafetyMs: number;
9
+ minPodDurationMs: number;
10
+ maxAdsPerBreak: number | undefined;
11
+ maxPodDurationMs: number | undefined;
12
+ exactDuration: boolean;
13
+ }
14
+ declare const DEFAULT_REQUEST_SAFETY_MS = 1500;
15
+ declare const GAM_AD_OPPORTUNITY_DURATION_MS = 30000;
16
+ declare function resolveAdPodConfig(config: {
17
+ adPodConfig?: AdPodConfig | undefined;
18
+ podMaxAds?: number | undefined;
19
+ podMaxDurationMs?: number | undefined;
20
+ podExactDuration?: boolean | undefined;
21
+ }): ResolvedAdPodConfig;
22
+ interface BreakTimingSnapshot {
23
+ scheduledBreakDurationMs: number | undefined;
24
+ breakStartMonoMs: number | undefined;
25
+ breakEndMonoMs: number | undefined;
26
+ playedDurationMs: number;
27
+ }
28
+ interface BreakCapacity {
29
+ scheduledBreakDurationMs: number;
30
+ elapsedBeforeGamRequestMs: number;
31
+ remainingAtGamDispatchMs: number;
32
+ }
33
+ declare function measureBreakCapacity(timing: BreakTimingSnapshot, nowMonoMs: number): BreakCapacity | undefined;
34
+ interface PodParams {
35
+ pmnd: number;
36
+ pmxd: number;
37
+ pmad: number | undefined;
38
+ }
39
+ type PmxdSource = "break_remaining" | "configured_cap" | "tag_cap";
40
+ type PodParamDecision = {
41
+ kind: "send";
42
+ params: PodParams;
43
+ source: PmxdSource;
44
+ } | {
45
+ kind: "omit";
46
+ } | {
47
+ kind: "abort";
48
+ reason: string;
49
+ pmxdCandidateMs: number;
50
+ };
51
+ declare function resolvePodParams(input: {
52
+ capacity: BreakCapacity | undefined;
53
+ config: ResolvedAdPodConfig;
54
+ minUsablePmxdMs: number;
55
+ tagMaxDurationMs?: number | undefined;
56
+ }): PodParamDecision;
57
+ interface GamDispatchContext {
58
+ breakId: number;
59
+ capacity: BreakCapacity | undefined;
60
+ config: ResolvedAdPodConfig;
61
+ minUsablePmxdMs: number;
62
+ }
63
+ interface OptimizedPodDiagnostics {
64
+ breakId: number;
65
+ optimizedPod: boolean;
66
+ pmxdSource: PmxdSource | undefined;
67
+ scteBreakDurationMs: number | undefined;
68
+ elapsedBeforeGamRequestMs: number | undefined;
69
+ remainingAtGamDispatchMs: number | undefined;
70
+ safetyReserveMs: number;
71
+ pmndSent: number | undefined;
72
+ pmxdSent: number | undefined;
73
+ pmadSent: number | undefined;
74
+ palNoncePresent: boolean;
75
+ gamRequestDispatchTimestamp: string;
76
+ strippedMacros: string[];
77
+ }
78
+ interface PodResponseDiagnostics {
79
+ vastAdCount: number;
80
+ totalVastCreativeDurationMs: number;
81
+ estimatedUnusedPodMs: number;
82
+ estimatedUnmatchedCount: number;
83
+ }
84
+ interface PodRequestAbortedError extends Error {
85
+ podRequestAborted: true;
86
+ reason: string;
87
+ diagnostics: Partial<OptimizedPodDiagnostics>;
88
+ }
89
+ declare function isPodRequestAbortedError(error: unknown): error is PodRequestAbortedError;
90
+ declare function isOptimizedPodUrl(url: string): boolean;
91
+ declare function finalizeGamRequestUrl(rawUrl: string, ctx: GamDispatchContext, nowEpochMs?: number): {
92
+ url: string;
93
+ diagnostics: OptimizedPodDiagnostics;
94
+ };
95
+ declare function validateGamRequestUrl(url: string, expect: {
96
+ optimizedPod: boolean;
97
+ remainingMs?: number | undefined;
98
+ }): string[];
99
+ declare function computePodResponseDiagnostics(pmxdSent: number, vastAdCount: number, totalVastCreativeDurationMs: number): PodResponseDiagnostics;
100
+
101
+ export { type AdPodConfig, type BreakCapacity, type BreakTimingSnapshot, DEFAULT_REQUEST_SAFETY_MS, GAM_AD_OPPORTUNITY_DURATION_MS, type GamDispatchContext, type OptimizedPodDiagnostics, type PmxdSource, type PodParamDecision, type PodParams, type PodRequestAbortedError, type PodResponseDiagnostics, type ResolvedAdPodConfig, computePodResponseDiagnostics, finalizeGamRequestUrl, isOptimizedPodUrl, isPodRequestAbortedError, measureBreakCapacity, resolveAdPodConfig, resolvePodParams, validateGamRequestUrl };
@@ -1,4 +1,5 @@
1
1
  import { AdController } from '../types.cjs';
2
+ import './OptimizedPodRequest.cjs';
2
3
 
3
4
  declare function getAdAudioVolume(adPlayer: AdController): number;
4
5
  declare function toggleMute(video: HTMLVideoElement, adPlayer: AdController, debug: boolean): void;
@@ -1,5 +1,6 @@
1
1
  import { Scte35Marker } from '../types.cjs';
2
2
  import { Scte35CueSource, Scte35CueReadiness, Scte35CueContext } from './playerTypes.cjs';
3
+ import './OptimizedPodRequest.cjs';
3
4
 
4
5
  interface Scte35CueManagerCallbacks {
5
6
  onEarlyStartCue(marker: Scte35Marker, fragmentSn: number | undefined, cueKey: string): void;
@@ -1,4 +1,5 @@
1
1
  import { Scte35Marker, Id3TagInfo } from '../types.cjs';
2
+ import './OptimizedPodRequest.cjs';
2
3
 
3
4
  declare function parseCueOutDuration(value: string): number | undefined;
4
5
  declare function parseCueOutCont(value: string): {