stormcloud-video-player 0.8.75 → 0.8.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/stormcloud-vp.min.js +1 -1
  2. package/lib/Player.cjs +10 -12
  3. package/lib/Player.cjs.map +1 -1
  4. package/lib/Player.d.cts +1 -1
  5. package/lib/StormcloudPlayer.cjs +163 -78
  6. package/lib/StormcloudPlayer.cjs.map +1 -1
  7. package/lib/index.cjs +174 -133
  8. package/lib/index.cjs.map +1 -1
  9. package/lib/index.d.cts +1 -1
  10. package/lib/index.d.ts +5 -19
  11. package/lib/index.js +168 -131
  12. package/lib/index.js.map +1 -1
  13. package/lib/player/AdBreakOrchestrator.cjs +45 -13
  14. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  15. package/lib/player/AdConfigManager.cjs +17 -3
  16. package/lib/player/AdConfigManager.cjs.map +1 -1
  17. package/lib/player/AdConfigManager.d.cts +3 -0
  18. package/lib/player/EdgePodRequest.cjs +31 -1
  19. package/lib/player/EdgePodRequest.cjs.map +1 -1
  20. package/lib/player/EdgePodRequest.d.cts +21 -3
  21. package/lib/player/FloorLadder.cjs +86 -27
  22. package/lib/player/FloorLadder.cjs.map +1 -1
  23. package/lib/player/FloorLadder.d.cts +8 -7
  24. package/lib/player/StormcloudVideoPlayer.cjs +163 -78
  25. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  26. package/lib/player/StormcloudVideoPlayer.d.cts +3 -9
  27. package/lib/players/HlsPlayer.cjs +163 -78
  28. package/lib/players/HlsPlayer.cjs.map +1 -1
  29. package/lib/players/index.cjs +163 -78
  30. package/lib/players/index.cjs.map +1 -1
  31. package/lib/props.cjs +10 -12
  32. package/lib/props.cjs.map +1 -1
  33. package/lib/types.d.cts +3 -7
  34. package/lib/ui/StormcloudVideoPlayer.cjs +167 -139
  35. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  36. package/lib/utils/tracking.cjs +7 -0
  37. package/lib/utils/tracking.cjs.map +1 -1
  38. package/lib/utils/tracking.d.cts +2 -1
  39. package/package.json +1 -1
package/lib/Player.cjs CHANGED
@@ -217,21 +217,19 @@ var DEVICE_TYPE_HINT_ALIASES = {
217
217
  };
218
218
  var PERSISTENT_ID_COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5;
219
219
  // src/player/FloorLadder.ts
220
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
220
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
221
221
  enabled: false,
222
- targetingKey: "airytv_web_floor",
223
- minFloorCents: 25,
224
- maxFloorCents: 300,
225
- stepCents: 25,
226
- selectedFloorCents: 25,
227
- fallbackFloorCents: 25,
222
+ targetingKey: "",
223
+ minFloorCents: 0,
224
+ maxFloorCents: 0,
225
+ stepCents: 0,
226
+ selectedFloorCents: 0,
227
+ fallbackFloorCents: 0,
228
228
  readyFloorCents: [],
229
229
  mode: "fixed",
230
- allowedPositions: [
231
- "midroll"
232
- ],
233
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
234
- configurationVersion: "2026-09-29.1"
230
+ allowedPositions: [],
231
+ targetAdUnitPath: "",
232
+ configurationVersion: ""
235
233
  });
236
234
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
237
235
  minCents: 25,
@@ -1 +1 @@
1
- {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\Player.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","Player_exports","default","Player","module","exports","import_react2","require","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","DEFAULT_WEB_FLOOR_LADDER_CONFIG","freeze","enabled","targetingKey","minFloorCents","maxFloorCents","stepCents","selectedFloorCents","fallbackFloorCents","readyFloorCents","mode","allowedPositions","targetAdUnitPath","configurationVersion","DEFAULT_FLOOR_LADDER_BOUNDS","minCents","maxCents","import_hls","DEFAULT_TRACKING_INGEST_CONFIG","baseUrl","trackingIngestConfig","import_hls2","noop","defaultProps","playing","loop","controls","volume","muted","playbackRate","width","height","style","progressInterval","playsInline","autoplay","preload","poster","className","wrapperClassName","wrapperStyle","allowNativeHls","lowLatencyMode","driftToleranceMs","immediateManifestAds","debugAdTiming","showCustomControls","hideLoadingIndicator","licenseKey","isVmap","vmapUrl","adFailsafeTimeoutMs","minSegmentsBeforePlay","onStart","onPlay","onPause","onBuffer","onBufferEnd","onEnded","onError","onDuration","onSeek","onProgress","onVolumeToggle","onFullscreenToggle","onControlClick","import_react","isMediaStream","url","window","MediaStream","IS_BROWSER","document","IS_GLOBAL","globalThis","IS_IOS","test","navigator","userAgent","IS_SAFARI","SEEK_ON_PLAY_EXPIRY","arguments","mounted","isReady","isPlaying","isLoading","loadOnReady","startOnPlay","seekOnPlay","onDurationCalled","handlePlayerMount","player","progress","load","props","src","getInternalPlayer","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","duration","getDuration","played","loaded","prevPlayed","prevLoaded","progressTimeout","setTimeout","handleReady","onReady","setVolume","play","handleDurationCheck","handlePlay","setPlaybackRate","seekTo","handlePause","e","handleEnded","activePlayer","loopOnEnded","handleError","args","clearTimeout","durationCheckTimeout","handleLoaded","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","forceLoad","warn","pause","mute","unmute","setLoop","amount","type","keepPlaying","isFraction","render","Player2","createElement","onMount","onLoaded","Component","displayName"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/Player.tsx\nvar Player_exports = {};\n__export(Player_exports, {\n default: () => Player\n});\nmodule.exports = __toCommonJS(Player_exports);\nvar import_react2 = __toESM(require(\"react\"), 1);\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/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});\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\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};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\n\n// src/props.ts\nvar noop = () => {\n};\nvar defaultProps = {\n playing: false,\n loop: false,\n controls: true,\n volume: 1,\n muted: false,\n playbackRate: 1,\n width: \"100%\",\n height: \"auto\",\n style: {},\n progressInterval: 1e3,\n playsInline: false,\n autoplay: false,\n preload: \"metadata\",\n poster: \"\",\n className: \"\",\n wrapperClassName: \"\",\n wrapperStyle: {},\n allowNativeHls: false,\n lowLatencyMode: false,\n driftToleranceMs: 1e3,\n immediateManifestAds: true,\n debugAdTiming: false,\n showCustomControls: false,\n hideLoadingIndicator: false,\n licenseKey: \"\",\n isVmap: false,\n vmapUrl: \"\",\n adFailsafeTimeoutMs: 1e4,\n minSegmentsBeforePlay: 2,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onVolumeToggle: noop,\n onFullscreenToggle: noop,\n onControlClick: noop\n};\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar isMediaStream = (url) => {\n return typeof window !== \"undefined\" && window.MediaStream && url instanceof window.MediaStream;\n};\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/Player.tsx\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.isReady = false;\n this.isPlaying = false;\n this.isLoading = true;\n this.loadOnReady = null;\n this.startOnPlay = true;\n this.seekOnPlay = null;\n this.onDurationCalled = false;\n this.handlePlayerMount = (player) => {\n if (this.player) {\n this.progress();\n return;\n }\n this.player = player;\n this.player.load(this.props.src);\n this.progress();\n };\n this.getInternalPlayer = (key) => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.progress = () => {\n if (this.props.src && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0;\n const loadedSeconds = this.getSecondsLoaded();\n const duration = this.getDuration();\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration,\n loaded: 0,\n loadedSeconds: 0\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress?.(progress);\n }\n this.prevPlayed = progress.playedSeconds;\n this.prevLoaded = progress.loadedSeconds;\n }\n }\n this.progressTimeout = window.setTimeout(\n this.progress,\n this.props.progressInterval || 1e3\n );\n };\n this.handleReady = () => {\n if (!this.mounted) return;\n this.isReady = true;\n this.isLoading = false;\n const { onReady, playing, volume, muted } = this.props;\n onReady();\n if (!muted && volume !== null) {\n this.player.setVolume(volume);\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true);\n this.loadOnReady = null;\n } else if (playing) {\n this.player.play();\n }\n this.handleDurationCheck();\n };\n this.handlePlay = () => {\n this.isPlaying = true;\n this.isLoading = false;\n const { onStart, onPlay, playbackRate } = this.props;\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate);\n }\n onStart?.();\n this.startOnPlay = false;\n }\n onPlay?.();\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay);\n this.seekOnPlay = null;\n }\n this.handleDurationCheck();\n };\n this.handlePause = (e) => {\n this.isPlaying = false;\n if (!this.isLoading) {\n this.props.onPause?.(e);\n }\n };\n this.handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props;\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0);\n }\n if (!loop) {\n this.isPlaying = false;\n onEnded?.();\n }\n };\n this.handleError = (...args) => {\n this.isLoading = false;\n this.props.onError?.(args[0], args[1], args[2], args[3]);\n };\n this.handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout);\n const duration = this.getDuration();\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration?.(duration);\n this.onDurationCalled = true;\n }\n } else {\n this.durationCheckTimeout = window.setTimeout(\n this.handleDurationCheck,\n 100\n );\n }\n };\n this.handleLoaded = () => {\n this.isLoading = false;\n };\n }\n componentDidMount() {\n this.mounted = true;\n }\n componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n clearTimeout(this.durationCheckTimeout);\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (!this.player) return;\n const { src, playing, volume, muted, playbackRate, loop, activePlayer } = this.props;\n if (prevProps.src !== src) {\n if (this.isLoading && !activePlayer.forceLoad && !isMediaStream(src)) {\n console.warn(\n `StormcloudPlayer: the attempt to load ${src} is being deferred until the player has loaded`\n );\n this.loadOnReady = src || null;\n return;\n }\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(src, this.isReady);\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play();\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause();\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume);\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute();\n } else {\n this.player.unmute();\n if (volume !== null) {\n setTimeout(() => this.player.setVolume(volume));\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate);\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop);\n }\n }\n getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n seekTo(amount, type, keepPlaying) {\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(() => {\n this.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n }\n return;\n }\n const isFraction = !type ? amount > 0 && amount < 1 : type === \"fraction\";\n if (isFraction) {\n const duration = this.player.getDuration();\n if (!duration) {\n console.warn(\n \"StormcloudPlayer: could not seek using fraction \\u2013 duration not yet available\"\n );\n return;\n }\n this.player.seekTo(duration * amount, keepPlaying);\n return;\n }\n this.player.seekTo(amount, keepPlaying);\n }\n render() {\n const Player2 = this.props.activePlayer;\n if (!Player2) {\n return null;\n }\n return import_react2.default.createElement(Player2, {\n ...this.props,\n onMount: this.handlePlayerMount,\n onReady: this.handleReady,\n onPlay: this.handlePlay,\n onPause: this.handlePause,\n onEnded: this.handleEnded,\n onLoaded: this.handleLoaded,\n onError: this.handleError\n });\n }\n};\nPlayer.displayName = \"Player\";\nPlayer.defaultProps = defaultProps;\n"]}
1
+ {"version":3,"sources":["d:\\project\\stormcloud-vp\\lib\\Player.cjs"],"names":["__create","Object","create","__defProp","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__getProtoOf","getPrototypeOf","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toESM","mod","isNodeMode","__esModule","value","__toCommonJS","Player_exports","default","Player","module","exports","import_react2","require","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","DISABLED_FLOOR_LADDER_CONFIG","freeze","enabled","targetingKey","minFloorCents","maxFloorCents","stepCents","selectedFloorCents","fallbackFloorCents","readyFloorCents","mode","allowedPositions","targetAdUnitPath","configurationVersion","DEFAULT_FLOOR_LADDER_BOUNDS","minCents","maxCents","import_hls","DEFAULT_TRACKING_INGEST_CONFIG","baseUrl","trackingIngestConfig","import_hls2","noop","defaultProps","playing","loop","controls","volume","muted","playbackRate","width","height","style","progressInterval","playsInline","autoplay","preload","poster","className","wrapperClassName","wrapperStyle","allowNativeHls","lowLatencyMode","driftToleranceMs","immediateManifestAds","debugAdTiming","showCustomControls","hideLoadingIndicator","licenseKey","isVmap","vmapUrl","adFailsafeTimeoutMs","minSegmentsBeforePlay","onStart","onPlay","onPause","onBuffer","onBufferEnd","onEnded","onError","onDuration","onSeek","onProgress","onVolumeToggle","onFullscreenToggle","onControlClick","import_react","isMediaStream","url","window","MediaStream","IS_BROWSER","document","IS_GLOBAL","globalThis","IS_IOS","test","navigator","userAgent","IS_SAFARI","SEEK_ON_PLAY_EXPIRY","arguments","mounted","isReady","isPlaying","isLoading","loadOnReady","startOnPlay","seekOnPlay","onDurationCalled","handlePlayerMount","player","progress","load","props","src","getInternalPlayer","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","duration","getDuration","played","loaded","prevPlayed","prevLoaded","progressTimeout","setTimeout","handleReady","onReady","setVolume","play","handleDurationCheck","handlePlay","setPlaybackRate","seekTo","handlePause","e","handleEnded","activePlayer","loopOnEnded","handleError","args","clearTimeout","durationCheckTimeout","handleLoaded","componentDidMount","componentWillUnmount","componentDidUpdate","prevProps","forceLoad","warn","pause","mute","unmute","setLoop","amount","type","keepPlaying","isFraction","render","Player2","createElement","onMount","onLoaded","Component","displayName"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/Player.tsx\nvar Player_exports = {};\n__export(Player_exports, {\n default: () => Player\n});\nmodule.exports = __toCommonJS(Player_exports);\nvar import_react2 = __toESM(require(\"react\"), 1);\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/player/FloorLadder.ts\nvar DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({\n enabled: false,\n targetingKey: \"\",\n minFloorCents: 0,\n maxFloorCents: 0,\n stepCents: 0,\n selectedFloorCents: 0,\n fallbackFloorCents: 0,\n readyFloorCents: [],\n mode: \"fixed\",\n allowedPositions: [],\n targetAdUnitPath: \"\",\n configurationVersion: \"\"\n});\nvar DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({\n minCents: 25,\n maxCents: 300,\n stepCents: 25\n});\n\n// src/sdk/hlsAdPlayer.ts\nvar import_hls = __toESM(require(\"hls.js\"), 1);\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};\n\n// src/player/HlsEngine.ts\nvar import_hls2 = __toESM(require(\"hls.js\"), 1);\n\n// src/props.ts\nvar noop = () => {\n};\nvar defaultProps = {\n playing: false,\n loop: false,\n controls: true,\n volume: 1,\n muted: false,\n playbackRate: 1,\n width: \"100%\",\n height: \"auto\",\n style: {},\n progressInterval: 1e3,\n playsInline: false,\n autoplay: false,\n preload: \"metadata\",\n poster: \"\",\n className: \"\",\n wrapperClassName: \"\",\n wrapperStyle: {},\n allowNativeHls: false,\n lowLatencyMode: false,\n driftToleranceMs: 1e3,\n immediateManifestAds: true,\n debugAdTiming: false,\n showCustomControls: false,\n hideLoadingIndicator: false,\n licenseKey: \"\",\n isVmap: false,\n vmapUrl: \"\",\n adFailsafeTimeoutMs: 1e4,\n minSegmentsBeforePlay: 2,\n onStart: noop,\n onPlay: noop,\n onPause: noop,\n onBuffer: noop,\n onBufferEnd: noop,\n onEnded: noop,\n onError: noop,\n onDuration: noop,\n onSeek: noop,\n onProgress: noop,\n onVolumeToggle: noop,\n onFullscreenToggle: noop,\n onControlClick: noop\n};\n\n// src/utils.ts\nvar import_react = require(\"react\");\nvar isMediaStream = (url) => {\n return typeof window !== \"undefined\" && window.MediaStream && url instanceof window.MediaStream;\n};\nvar IS_BROWSER = typeof window !== \"undefined\" && window.document;\nvar IS_GLOBAL = typeof globalThis !== \"undefined\" && globalThis.window && globalThis.window.document;\nvar IS_IOS = IS_BROWSER && /iPad|iPhone|iPod/.test(navigator.userAgent);\nvar IS_SAFARI = IS_BROWSER && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\n// src/Player.tsx\nvar SEEK_ON_PLAY_EXPIRY = 5e3;\nvar Player = class extends import_react2.Component {\n constructor() {\n super(...arguments);\n this.mounted = false;\n this.isReady = false;\n this.isPlaying = false;\n this.isLoading = true;\n this.loadOnReady = null;\n this.startOnPlay = true;\n this.seekOnPlay = null;\n this.onDurationCalled = false;\n this.handlePlayerMount = (player) => {\n if (this.player) {\n this.progress();\n return;\n }\n this.player = player;\n this.player.load(this.props.src);\n this.progress();\n };\n this.getInternalPlayer = (key) => {\n if (!this.player) return null;\n return this.player.getInternalPlayer(key);\n };\n this.progress = () => {\n if (this.props.src && this.player && this.isReady) {\n const playedSeconds = this.getCurrentTime() || 0;\n const loadedSeconds = this.getSecondsLoaded();\n const duration = this.getDuration();\n if (duration) {\n const progress = {\n playedSeconds,\n played: playedSeconds / duration,\n loaded: 0,\n loadedSeconds: 0\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n if (progress.playedSeconds !== this.prevPlayed || progress.loadedSeconds !== this.prevLoaded) {\n this.props.onProgress?.(progress);\n }\n this.prevPlayed = progress.playedSeconds;\n this.prevLoaded = progress.loadedSeconds;\n }\n }\n this.progressTimeout = window.setTimeout(\n this.progress,\n this.props.progressInterval || 1e3\n );\n };\n this.handleReady = () => {\n if (!this.mounted) return;\n this.isReady = true;\n this.isLoading = false;\n const { onReady, playing, volume, muted } = this.props;\n onReady();\n if (!muted && volume !== null) {\n this.player.setVolume(volume);\n }\n if (this.loadOnReady) {\n this.player.load(this.loadOnReady, true);\n this.loadOnReady = null;\n } else if (playing) {\n this.player.play();\n }\n this.handleDurationCheck();\n };\n this.handlePlay = () => {\n this.isPlaying = true;\n this.isLoading = false;\n const { onStart, onPlay, playbackRate } = this.props;\n if (this.startOnPlay) {\n if (this.player.setPlaybackRate && playbackRate !== 1) {\n this.player.setPlaybackRate(playbackRate);\n }\n onStart?.();\n this.startOnPlay = false;\n }\n onPlay?.();\n if (this.seekOnPlay) {\n this.seekTo(this.seekOnPlay);\n this.seekOnPlay = null;\n }\n this.handleDurationCheck();\n };\n this.handlePause = (e) => {\n this.isPlaying = false;\n if (!this.isLoading) {\n this.props.onPause?.(e);\n }\n };\n this.handleEnded = () => {\n const { activePlayer, loop, onEnded } = this.props;\n if (activePlayer.loopOnEnded && loop) {\n this.seekTo(0);\n }\n if (!loop) {\n this.isPlaying = false;\n onEnded?.();\n }\n };\n this.handleError = (...args) => {\n this.isLoading = false;\n this.props.onError?.(args[0], args[1], args[2], args[3]);\n };\n this.handleDurationCheck = () => {\n clearTimeout(this.durationCheckTimeout);\n const duration = this.getDuration();\n if (duration) {\n if (!this.onDurationCalled) {\n this.props.onDuration?.(duration);\n this.onDurationCalled = true;\n }\n } else {\n this.durationCheckTimeout = window.setTimeout(\n this.handleDurationCheck,\n 100\n );\n }\n };\n this.handleLoaded = () => {\n this.isLoading = false;\n };\n }\n componentDidMount() {\n this.mounted = true;\n }\n componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n clearTimeout(this.durationCheckTimeout);\n this.mounted = false;\n }\n componentDidUpdate(prevProps) {\n if (!this.player) return;\n const { src, playing, volume, muted, playbackRate, loop, activePlayer } = this.props;\n if (prevProps.src !== src) {\n if (this.isLoading && !activePlayer.forceLoad && !isMediaStream(src)) {\n console.warn(\n `StormcloudPlayer: the attempt to load ${src} is being deferred until the player has loaded`\n );\n this.loadOnReady = src || null;\n return;\n }\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(src, this.isReady);\n }\n if (!prevProps.playing && playing && !this.isPlaying) {\n this.player.play();\n }\n if (prevProps.playing && !playing && this.isPlaying) {\n this.player.pause();\n }\n if (prevProps.volume !== volume && volume !== null) {\n this.player.setVolume(volume);\n }\n if (prevProps.muted !== muted) {\n if (muted) {\n this.player.mute();\n } else {\n this.player.unmute();\n if (volume !== null) {\n setTimeout(() => this.player.setVolume(volume));\n }\n }\n }\n if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(playbackRate);\n }\n if (prevProps.loop !== loop && this.player.setLoop) {\n this.player.setLoop(loop);\n }\n }\n getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n seekTo(amount, type, keepPlaying) {\n if (!this.isReady) {\n if (amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(() => {\n this.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n }\n return;\n }\n const isFraction = !type ? amount > 0 && amount < 1 : type === \"fraction\";\n if (isFraction) {\n const duration = this.player.getDuration();\n if (!duration) {\n console.warn(\n \"StormcloudPlayer: could not seek using fraction \\u2013 duration not yet available\"\n );\n return;\n }\n this.player.seekTo(duration * amount, keepPlaying);\n return;\n }\n this.player.seekTo(amount, keepPlaying);\n }\n render() {\n const Player2 = this.props.activePlayer;\n if (!Player2) {\n return null;\n }\n return import_react2.default.createElement(Player2, {\n ...this.props,\n onMount: this.handlePlayerMount,\n onReady: this.handleReady,\n onPlay: this.handlePlay,\n onPause: this.handlePause,\n onEnded: this.handleEnded,\n onLoaded: this.handleLoaded,\n onError: this.handleError\n });\n }\n};\nPlayer.displayName = \"Player\";\nPlayer.defaultProps = defaultProps;\n"]}
package/lib/Player.d.cts CHANGED
@@ -11,7 +11,7 @@ interface PlayerProps extends BaseStormcloudPlayerProps {
11
11
  }
12
12
  declare class Player extends Component<PlayerProps> {
13
13
  static displayName: string;
14
- static defaultProps: Required<Omit<BaseStormcloudPlayerProps, "ctvAdRequest" | "onReady" | keyof React.VideoHTMLAttributes<HTMLVideoElement>>>;
14
+ static defaultProps: Required<Omit<BaseStormcloudPlayerProps, "ctvAdRequest" | keyof React.VideoHTMLAttributes<HTMLVideoElement> | "onReady">>;
15
15
  private mounted;
16
16
  private isReady;
17
17
  private isPlaying;
@@ -1733,21 +1733,19 @@ function fetchConsentSignals() {
1733
1733
  });
1734
1734
  }
1735
1735
  // src/player/FloorLadder.ts
1736
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
1736
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
1737
1737
  enabled: false,
1738
- targetingKey: "airytv_web_floor",
1739
- minFloorCents: 25,
1740
- maxFloorCents: 300,
1741
- stepCents: 25,
1742
- selectedFloorCents: 25,
1743
- fallbackFloorCents: 25,
1738
+ targetingKey: "",
1739
+ minFloorCents: 0,
1740
+ maxFloorCents: 0,
1741
+ stepCents: 0,
1742
+ selectedFloorCents: 0,
1743
+ fallbackFloorCents: 0,
1744
1744
  readyFloorCents: [],
1745
1745
  mode: "fixed",
1746
- allowedPositions: [
1747
- "midroll"
1748
- ],
1749
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
1750
- configurationVersion: "2026-09-29.1"
1746
+ allowedPositions: [],
1747
+ targetAdUnitPath: "",
1748
+ configurationVersion: ""
1751
1749
  });
1752
1750
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
1753
1751
  minCents: 25,
@@ -1766,15 +1764,6 @@ function generateFloorLevels(minCents, maxCents, stepCents) {
1766
1764
  }
1767
1765
  return levels;
1768
1766
  }
1769
- function resolveFloorLadderBounds() {
1770
- var overrides = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
1771
- var _overrides_minCents, _overrides_maxCents, _overrides_stepCents;
1772
- return {
1773
- minCents: (_overrides_minCents = overrides.minCents) !== null && _overrides_minCents !== void 0 ? _overrides_minCents : DEFAULT_FLOOR_LADDER_BOUNDS.minCents,
1774
- maxCents: (_overrides_maxCents = overrides.maxCents) !== null && _overrides_maxCents !== void 0 ? _overrides_maxCents : DEFAULT_FLOOR_LADDER_BOUNDS.maxCents,
1775
- stepCents: (_overrides_stepCents = overrides.stepCents) !== null && _overrides_stepCents !== void 0 ? _overrides_stepCents : DEFAULT_FLOOR_LADDER_BOUNDS.stepCents
1776
- };
1777
- }
1778
1767
  function validateFloorCents(value, config) {
1779
1768
  var bounds = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : DEFAULT_FLOOR_LADDER_BOUNDS;
1780
1769
  if (!isInteger(value)) return {
@@ -1906,7 +1895,6 @@ function resolveOpportunityFloor(config, context) {
1906
1895
  if (!config.enabled) return skipped("disabled");
1907
1896
  var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
1908
1897
  if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
1909
- if (context.isCtv) return skipped("ctv_excluded");
1910
1898
  if (!config.targetingKey) return skipped("missing_targeting_key");
1911
1899
  if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
1912
1900
  var result;
@@ -2060,15 +2048,80 @@ function mergeDefined(target, update) {
2060
2048
  }
2061
2049
  return copyConfig(next);
2062
2050
  }
2051
+ var AD_POSITIONS = [
2052
+ "preroll",
2053
+ "midroll",
2054
+ "postroll"
2055
+ ];
2056
+ function finiteNumber(value) {
2057
+ return typeof value === "number" && isFinite(value) ? value : void 0;
2058
+ }
2059
+ function parseApiFloorLadder(raw) {
2060
+ if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
2061
+ var src = raw;
2062
+ var out = {};
2063
+ if (typeof src.enabled === "boolean") out.enabled = src.enabled;
2064
+ if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
2065
+ if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
2066
+ if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
2067
+ if (typeof src.mode === "string") out.mode = src.mode;
2068
+ var min = finiteNumber(src.minFloorCents);
2069
+ var max = finiteNumber(src.maxFloorCents);
2070
+ var step = finiteNumber(src.stepCents);
2071
+ var selected = finiteNumber(src.selectedFloorCents);
2072
+ var fallback = finiteNumber(src.fallbackFloorCents);
2073
+ if (min !== void 0) out.minFloorCents = min;
2074
+ if (max !== void 0) out.maxFloorCents = max;
2075
+ if (step !== void 0) out.stepCents = step;
2076
+ if (selected !== void 0) out.selectedFloorCents = selected;
2077
+ if (fallback !== void 0) out.fallbackFloorCents = fallback;
2078
+ if (Array.isArray(src.readyFloorCents)) {
2079
+ out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
2080
+ return finiteNumber(cents) !== void 0;
2081
+ });
2082
+ }
2083
+ if (Array.isArray(src.allowedPositions)) {
2084
+ out.allowedPositions = src.allowedPositions.filter(function(position) {
2085
+ return AD_POSITIONS.indexOf(position) !== -1;
2086
+ });
2087
+ }
2088
+ return out;
2089
+ }
2063
2090
  var FloorLadderController = /*#__PURE__*/ function() {
2064
- function FloorLadderController(initial, bounds) {
2065
- var selector = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : fixedFloorSelector;
2091
+ function FloorLadderController() {
2092
+ var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
2066
2093
  _class_call_check(this, FloorLadderController);
2067
- this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);
2068
- this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));
2094
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2095
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2069
2096
  this.selector = selector;
2070
2097
  }
2071
2098
  _create_class(FloorLadderController, [
2099
+ {
2100
+ key: "isEnabled",
2101
+ value: function isEnabled() {
2102
+ return this.config.enabled === true;
2103
+ }
2104
+ },
2105
+ {
2106
+ key: "applyApiConfig",
2107
+ value: function applyApiConfig(raw) {
2108
+ var parsed = parseApiFloorLadder(raw);
2109
+ this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
2110
+ this.bounds = Object.freeze({
2111
+ minCents: this.config.minFloorCents,
2112
+ maxCents: this.config.maxFloorCents,
2113
+ stepCents: this.config.stepCents
2114
+ });
2115
+ return validateFloorLadderConfig(this.config, this.bounds);
2116
+ }
2117
+ },
2118
+ {
2119
+ key: "reset",
2120
+ value: function reset() {
2121
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2122
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2123
+ }
2124
+ },
2072
2125
  {
2073
2126
  key: "get",
2074
2127
  value: function get() {
@@ -2081,13 +2134,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
2081
2134
  return _object_spread({}, this.bounds);
2082
2135
  }
2083
2136
  },
2084
- {
2085
- key: "update",
2086
- value: function update(update) {
2087
- this.config = mergeDefined(this.config, update);
2088
- return validateFloorLadderConfig(this.config, this.bounds);
2089
- }
2090
- },
2091
2137
  {
2092
2138
  key: "validate",
2093
2139
  value: function validate() {
@@ -6320,6 +6366,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
6320
6366
  }
6321
6367
  return "fingerprint:".concat(JSON.stringify(clientInfo));
6322
6368
  }
6369
+ function getCachedBrowserId() {
6370
+ return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
6371
+ }
6323
6372
  function getBrowserID(clientInfo) {
6324
6373
  return _async_to_generator(function() {
6325
6374
  return _ts_generator(this, function(_state) {
@@ -7989,7 +8038,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
7989
8038
  key: "fetchAdConfiguration",
7990
8039
  value: function fetchAdConfiguration() {
7991
8040
  return _async_to_generator(function() {
7992
- var _data_response_ima_publisherdeskima, _data_response_ima, _data_response, _data_response_options_vast_cue_tones, _data_response_options_vast, _data_response_options, _data_response1, apiUrl, headers, response, data, imaPayload, decodedPayload, numberAds;
8041
+ var _data_response, _data_response1, _data_response2, _data_response_ima_publisherdeskima, _data_response_ima, _data_response3, _data_response_options_vast_cue_tones, _data_response_options_vast, _data_response_options, _data_response4, apiUrl, headers, response, data, apiEnableEdge, apiEdgeUrl, imaPayload, decodedPayload, numberAds;
7993
8042
  return _ts_generator(this, function(_state) {
7994
8043
  switch(_state.label){
7995
8044
  case 0:
@@ -8049,7 +8098,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
8049
8098
  ];
8050
8099
  case 4:
8051
8100
  data = _state.sent();
8052
- imaPayload = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : (_data_response_ima = _data_response.ima) === null || _data_response_ima === void 0 ? void 0 : (_data_response_ima_publisherdeskima = _data_response_ima["publisherdesk.ima"]) === null || _data_response_ima_publisherdeskima === void 0 ? void 0 : _data_response_ima_publisherdeskima.payload;
8101
+ apiEnableEdge = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.enableEdgePodRequest;
8102
+ apiEdgeUrl = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : _data_response1.edgePodUrl;
8103
+ this.apiEnableEdgePodRequest = typeof apiEnableEdge === "boolean" ? apiEnableEdge : void 0;
8104
+ this.apiEdgePodUrl = typeof apiEdgeUrl === "string" ? apiEdgeUrl : void 0;
8105
+ if (this.debug) {
8106
+ console.log("[StormcloudVideoPlayer] Edge pod settings from API:", {
8107
+ enableEdgePodRequest: this.apiEnableEdgePodRequest,
8108
+ edgePodUrl: this.apiEdgePodUrl
8109
+ });
8110
+ }
8111
+ this.apiFloorLadder = (_data_response2 = data.response) === null || _data_response2 === void 0 ? void 0 : _data_response2.floorLadder;
8112
+ if (this.debug) {
8113
+ console.log(this.apiFloorLadder ? "[StormcloudVideoPlayer] Floor ladder from API:" : "[StormcloudVideoPlayer] No floorLadder block in /ads/web response", this.apiFloorLadder);
8114
+ }
8115
+ imaPayload = (_data_response3 = data.response) === null || _data_response3 === void 0 ? void 0 : (_data_response_ima = _data_response3.ima) === null || _data_response_ima === void 0 ? void 0 : (_data_response_ima_publisherdeskima = _data_response_ima["publisherdesk.ima"]) === null || _data_response_ima_publisherdeskima === void 0 ? void 0 : _data_response_ima_publisherdeskima.payload;
8053
8116
  if (imaPayload) {
8054
8117
  decodedPayload = imaPayload;
8055
8118
  try {
@@ -8067,7 +8130,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8067
8130
  console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
8068
8131
  }
8069
8132
  }
8070
- numberAds = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : (_data_response_options = _data_response1.options) === null || _data_response_options === void 0 ? void 0 : (_data_response_options_vast = _data_response_options.vast) === null || _data_response_options_vast === void 0 ? void 0 : (_data_response_options_vast_cue_tones = _data_response_options_vast.cue_tones) === null || _data_response_options_vast_cue_tones === void 0 ? void 0 : _data_response_options_vast_cue_tones.number_ads;
8133
+ numberAds = (_data_response4 = data.response) === null || _data_response4 === void 0 ? void 0 : (_data_response_options = _data_response4.options) === null || _data_response_options === void 0 ? void 0 : (_data_response_options_vast = _data_response_options.vast) === null || _data_response_options_vast === void 0 ? void 0 : (_data_response_options_vast_cue_tones = _data_response_options_vast.cue_tones) === null || _data_response_options_vast_cue_tones === void 0 ? void 0 : _data_response_options_vast_cue_tones.number_ads;
8071
8134
  if (numberAds != null && numberAds > 0) {
8072
8135
  this.apiNumberAds = numberAds;
8073
8136
  if (this.debug) {
@@ -9901,7 +9964,23 @@ function resolveEdgePodBaseUrl(config) {
9901
9964
  return void 0;
9902
9965
  }
9903
9966
  }
9967
+ function resolveEdgePodRequestContext(config) {
9968
+ var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
9969
+ return {
9970
+ width: extra.width,
9971
+ height: extra.height,
9972
+ playerId: extra.playerId,
9973
+ contentNetwork: config.contentNetwork,
9974
+ contentChannel: config.channelName,
9975
+ contentTitle: config.programTitle
9976
+ };
9977
+ }
9978
+ function setOptionalParam(url, key, value) {
9979
+ var trimmed = value === null || value === void 0 ? void 0 : value.trim();
9980
+ if (trimmed) url.searchParams.set(key, trimmed);
9981
+ }
9904
9982
  function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9983
+ var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
9905
9984
  var url = new URL(baseUrl);
9906
9985
  var maxMs = Math.max(0, Math.floor(remainingMs));
9907
9986
  var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
@@ -9909,6 +9988,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9909
9988
  url.searchParams.set("pmad", String(maxAds));
9910
9989
  url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
9911
9990
  url.searchParams.set("count", String(maxAds));
9991
+ if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
9992
+ url.searchParams.set("width", String(Math.round(context.width)));
9993
+ }
9994
+ if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
9995
+ url.searchParams.set("height", String(Math.round(context.height)));
9996
+ }
9997
+ setOptionalParam(url, "pid", context.playerId);
9998
+ setOptionalParam(url, "cn", context.contentNetwork);
9999
+ setOptionalParam(url, "cc", context.contentChannel);
10000
+ setOptionalParam(url, "ct", context.contentTitle);
9912
10001
  return url.toString();
9913
10002
  }
9914
10003
  function classifyEdgeVastResponse(result) {
@@ -10796,7 +10885,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
10796
10885
  return void 0;
10797
10886
  }
10798
10887
  try {
10799
- return buildEdgePodUrl(baseUrl, remainingMs, remainingAds);
10888
+ var playerId = getCachedBrowserId();
10889
+ return buildEdgePodUrl(baseUrl, remainingMs, remainingAds, resolveEdgePodRequestContext(this.host.config, {
10890
+ width: this.host.video.offsetWidth || this.host.video.clientWidth,
10891
+ height: this.host.video.offsetHeight || this.host.video.clientHeight,
10892
+ playerId: playerId
10893
+ }));
10800
10894
  } catch (unused) {
10801
10895
  this.markEdgeExhausted("invalid_edge_url");
10802
10896
  return void 0;
@@ -12306,14 +12400,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12306
12400
  this.config = _object_spread({}, browserOverrides, config);
12307
12401
  this.video = config.videoElement;
12308
12402
  logBrowserInfo(config.debugAdTiming);
12309
- var floorBounds = {};
12310
- if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
12311
- if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
12312
- if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
12313
- this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
12314
- this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
12315
- this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12316
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12403
+ this.floorLadder = new FloorLadderController();
12317
12404
  this.adPlayer = this.createAdPlayer(false);
12318
12405
  this.palNonce = createPalNonceManager();
12319
12406
  this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
@@ -12420,9 +12507,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12420
12507
  return _this.edgePodBaseUrl;
12421
12508
  },
12422
12509
  getFloorSnapshot: function getFloorSnapshot(position) {
12423
- return _this.floorLadderEnabled ? _this.floorLadder.snapshotFor({
12424
- position: position,
12425
- isCtv: _this.isCtvEnvironment()
12510
+ return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
12511
+ position: position
12426
12512
  }) : void 0;
12427
12513
  },
12428
12514
  onAdClick: function onAdClick() {
@@ -12459,45 +12545,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12459
12545
  }
12460
12546
  },
12461
12547
  {
12462
- key: "isCtvEnvironment",
12463
- value: function isCtvEnvironment() {
12464
- if (this.config.ctvAdRequest) return true;
12465
- var hint = inferDeviceTypeHint(false);
12466
- return hint === DEVICE_TYPE_HINT.CONNECTED_TV || hint === DEVICE_TYPE_HINT.SET_TOP_BOX;
12467
- }
12468
- },
12469
- {
12470
- key: "setAdFloorLadder",
12471
- value: function setAdFloorLadder(update) {
12472
- var report = this.floorLadder.update(update);
12548
+ key: "applyFloorLadderFromApi",
12549
+ value: function applyFloorLadderFromApi() {
12550
+ var raw = this.adConfig.apiFloorLadder;
12551
+ if (raw == null) {
12552
+ this.floorLadder.reset();
12553
+ return;
12554
+ }
12555
+ var report = this.floorLadder.applyApiConfig(raw);
12473
12556
  this.warnOnInvalidFloorLadder(report);
12474
- return report;
12475
- }
12476
- },
12477
- {
12478
- key: "setAdFloorLadderEnabled",
12479
- value: function setAdFloorLadderEnabled(enabled) {
12480
- this.floorLadderEnabled = enabled;
12481
- if (enabled) this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12557
+ if (this.debug) {
12558
+ console.log("[AdBreak][FLOOR] configuration applied from API", {
12559
+ config: this.floorLadder.get(),
12560
+ bounds: this.floorLadder.getBounds(),
12561
+ validation: report
12562
+ });
12563
+ }
12482
12564
  }
12483
12565
  },
12484
12566
  {
12485
12567
  key: "isAdFloorLadderEnabled",
12486
12568
  value: function isAdFloorLadderEnabled() {
12487
- return this.floorLadderEnabled;
12569
+ return this.floorLadder.isEnabled();
12488
12570
  }
12489
12571
  },
12490
12572
  {
12491
- key: "setEdgePodRequest",
12492
- value: function setEdgePodRequest(update) {
12493
- if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
12494
- return;
12573
+ key: "applyEdgePodFromApi",
12574
+ value: function applyEdgePodFromApi() {
12575
+ this.edgePodBaseUrl = resolveEdgePodBaseUrl({
12576
+ enableEdgePodRequest: this.adConfig.apiEnableEdgePodRequest,
12577
+ edgePodUrl: this.adConfig.apiEdgePodUrl,
12578
+ licenseKey: this.config.licenseKey
12579
+ });
12580
+ if (this.debug) {
12581
+ var _this_edgePodBaseUrl;
12582
+ console.log("[AdBreak][EDGE] edge pod base URL from API:", (_this_edgePodBaseUrl = this.edgePodBaseUrl) !== null && _this_edgePodBaseUrl !== void 0 ? _this_edgePodBaseUrl : "(disabled; GAM only)");
12495
12583
  }
12496
- if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
12497
- else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
12498
- if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
12499
- else this.config.edgePodUrl = update.edgePodUrl;
12500
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12501
12584
  }
12502
12585
  },
12503
12586
  {
@@ -12510,7 +12593,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12510
12593
  key: "warnOnInvalidFloorLadder",
12511
12594
  value: function warnOnInvalidFloorLadder(report) {
12512
12595
  var config = this.floorLadder.get();
12513
- if (report.ok || !this.floorLadderEnabled || !config.enabled) return;
12596
+ if (report.ok || !config.enabled) return;
12514
12597
  console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
12515
12598
  errors: report.errors,
12516
12599
  configurationVersion: config.configurationVersion,
@@ -12585,6 +12668,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12585
12668
  4
12586
12669
  ];
12587
12670
  case 4:
12671
+ this.applyFloorLadderFromApi();
12672
+ this.applyEdgePodFromApi();
12588
12673
  palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
12589
12674
  fetchConsentSignals().catch(function() {
12590
12675
  return {};