stormcloud-video-player 0.8.74 → 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 (40) 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/StormcloudPlayer.cjs +165 -79
  5. package/lib/StormcloudPlayer.cjs.map +1 -1
  6. package/lib/index.cjs +176 -134
  7. package/lib/index.cjs.map +1 -1
  8. package/lib/index.d.cts +1 -1
  9. package/lib/index.d.ts +5 -19
  10. package/lib/index.js +170 -132
  11. package/lib/index.js.map +1 -1
  12. package/lib/player/AdBreakOrchestrator.cjs +45 -13
  13. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  14. package/lib/player/AdConfigManager.cjs +19 -4
  15. package/lib/player/AdConfigManager.cjs.map +1 -1
  16. package/lib/player/AdConfigManager.d.cts +3 -0
  17. package/lib/player/EdgePodRequest.cjs +31 -1
  18. package/lib/player/EdgePodRequest.cjs.map +1 -1
  19. package/lib/player/EdgePodRequest.d.cts +21 -3
  20. package/lib/player/FloorLadder.cjs +86 -27
  21. package/lib/player/FloorLadder.cjs.map +1 -1
  22. package/lib/player/FloorLadder.d.cts +8 -7
  23. package/lib/player/StormcloudVideoPlayer.cjs +165 -79
  24. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  25. package/lib/player/StormcloudVideoPlayer.d.cts +3 -9
  26. package/lib/players/HlsPlayer.cjs +165 -79
  27. package/lib/players/HlsPlayer.cjs.map +1 -1
  28. package/lib/players/index.cjs +165 -79
  29. package/lib/players/index.cjs.map +1 -1
  30. package/lib/props.cjs +10 -12
  31. package/lib/props.cjs.map +1 -1
  32. package/lib/types.d.cts +3 -7
  33. package/lib/ui/StormcloudVideoPlayer.cjs +169 -140
  34. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  35. package/lib/utils/tracking.cjs +7 -0
  36. package/lib/utils/tracking.cjs.map +1 -1
  37. package/lib/utils/tracking.d.cts +2 -1
  38. package/lib/utils/vastMacros.cjs +2 -1
  39. package/lib/utils/vastMacros.cjs.map +1 -1
  40. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { StormcloudVideoPlayerConfig, AdFloorLadderConfig } from '../types.cjs';
2
- import { FloorLadderValidationReport, FloorLadderBounds, FloorSelector } from './FloorLadder.cjs';
2
+ import { FloorLadderBounds, FloorSelector } from './FloorLadder.cjs';
3
3
  import './OptimizedPodRequest.cjs';
4
4
 
5
5
  declare class StormcloudVideoPlayer {
@@ -19,19 +19,13 @@ declare class StormcloudVideoPlayer {
19
19
  private readonly hlsEngine;
20
20
  private readonly adBreak;
21
21
  private readonly floorLadder;
22
- private floorLadderEnabled;
23
22
  private edgePodBaseUrl;
24
23
  constructor(config: StormcloudVideoPlayerConfig);
25
24
  private get debug();
26
25
  private createAdPlayer;
27
- private isCtvEnvironment;
28
- setAdFloorLadder(update: Partial<AdFloorLadderConfig>): FloorLadderValidationReport;
29
- setAdFloorLadderEnabled(enabled: boolean): void;
26
+ private applyFloorLadderFromApi;
30
27
  isAdFloorLadderEnabled(): boolean;
31
- setEdgePodRequest(update: {
32
- enableEdgePodRequest?: boolean;
33
- edgePodUrl?: string;
34
- }): void;
28
+ private applyEdgePodFromApi;
35
29
  getEdgePodUrl(): string | undefined;
36
30
  private warnOnInvalidFloorLadder;
37
31
  getAdFloorLadder(): AdFloorLadderConfig;
@@ -1392,9 +1392,10 @@ function resolveScvpMacroValues(ctx) {
1392
1392
  var deviceId = (_ctx_deviceId = ctx.deviceId) === null || _ctx_deviceId === void 0 ? void 0 : _ctx_deviceId.trim();
1393
1393
  var deviceIdType = deviceId ? ((_ctx_deviceIdType = ctx.deviceIdType) === null || _ctx_deviceIdType === void 0 ? void 0 : _ctx_deviceIdType.trim()) || inferDeviceIdType() : void 0;
1394
1394
  if (deviceId && deviceIdType) {
1395
+ var _toFlag;
1395
1396
  set("RDID", deviceId);
1396
1397
  set("IDTYPE", deviceIdType);
1397
- set("IS-LAT", toFlag(ctx.limitAdTracking));
1398
+ set("IS-LAT", (_toFlag = toFlag(ctx.limitAdTracking)) !== null && _toFlag !== void 0 ? _toFlag : "0");
1398
1399
  }
1399
1400
  set("SID", ctx.sessionId);
1400
1401
  set("DTH", ctx.deviceTypeHint);
@@ -1729,21 +1730,19 @@ function fetchConsentSignals() {
1729
1730
  });
1730
1731
  }
1731
1732
  // src/player/FloorLadder.ts
1732
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
1733
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
1733
1734
  enabled: false,
1734
- targetingKey: "airytv_web_floor",
1735
- minFloorCents: 25,
1736
- maxFloorCents: 300,
1737
- stepCents: 25,
1738
- selectedFloorCents: 25,
1739
- fallbackFloorCents: 25,
1735
+ targetingKey: "",
1736
+ minFloorCents: 0,
1737
+ maxFloorCents: 0,
1738
+ stepCents: 0,
1739
+ selectedFloorCents: 0,
1740
+ fallbackFloorCents: 0,
1740
1741
  readyFloorCents: [],
1741
1742
  mode: "fixed",
1742
- allowedPositions: [
1743
- "midroll"
1744
- ],
1745
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
1746
- configurationVersion: "2026-09-29.1"
1743
+ allowedPositions: [],
1744
+ targetAdUnitPath: "",
1745
+ configurationVersion: ""
1747
1746
  });
1748
1747
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
1749
1748
  minCents: 25,
@@ -1762,15 +1761,6 @@ function generateFloorLevels(minCents, maxCents, stepCents) {
1762
1761
  }
1763
1762
  return levels;
1764
1763
  }
1765
- function resolveFloorLadderBounds() {
1766
- var overrides = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
1767
- var _overrides_minCents, _overrides_maxCents, _overrides_stepCents;
1768
- return {
1769
- minCents: (_overrides_minCents = overrides.minCents) !== null && _overrides_minCents !== void 0 ? _overrides_minCents : DEFAULT_FLOOR_LADDER_BOUNDS.minCents,
1770
- maxCents: (_overrides_maxCents = overrides.maxCents) !== null && _overrides_maxCents !== void 0 ? _overrides_maxCents : DEFAULT_FLOOR_LADDER_BOUNDS.maxCents,
1771
- stepCents: (_overrides_stepCents = overrides.stepCents) !== null && _overrides_stepCents !== void 0 ? _overrides_stepCents : DEFAULT_FLOOR_LADDER_BOUNDS.stepCents
1772
- };
1773
- }
1774
1764
  function validateFloorCents(value, config) {
1775
1765
  var bounds = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : DEFAULT_FLOOR_LADDER_BOUNDS;
1776
1766
  if (!isInteger(value)) return {
@@ -1902,7 +1892,6 @@ function resolveOpportunityFloor(config, context) {
1902
1892
  if (!config.enabled) return skipped("disabled");
1903
1893
  var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
1904
1894
  if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
1905
- if (context.isCtv) return skipped("ctv_excluded");
1906
1895
  if (!config.targetingKey) return skipped("missing_targeting_key");
1907
1896
  if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
1908
1897
  var result;
@@ -2056,15 +2045,80 @@ function mergeDefined(target, update) {
2056
2045
  }
2057
2046
  return copyConfig(next);
2058
2047
  }
2048
+ var AD_POSITIONS = [
2049
+ "preroll",
2050
+ "midroll",
2051
+ "postroll"
2052
+ ];
2053
+ function finiteNumber(value) {
2054
+ return typeof value === "number" && isFinite(value) ? value : void 0;
2055
+ }
2056
+ function parseApiFloorLadder(raw) {
2057
+ if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
2058
+ var src = raw;
2059
+ var out = {};
2060
+ if (typeof src.enabled === "boolean") out.enabled = src.enabled;
2061
+ if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
2062
+ if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
2063
+ if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
2064
+ if (typeof src.mode === "string") out.mode = src.mode;
2065
+ var min = finiteNumber(src.minFloorCents);
2066
+ var max = finiteNumber(src.maxFloorCents);
2067
+ var step = finiteNumber(src.stepCents);
2068
+ var selected = finiteNumber(src.selectedFloorCents);
2069
+ var fallback = finiteNumber(src.fallbackFloorCents);
2070
+ if (min !== void 0) out.minFloorCents = min;
2071
+ if (max !== void 0) out.maxFloorCents = max;
2072
+ if (step !== void 0) out.stepCents = step;
2073
+ if (selected !== void 0) out.selectedFloorCents = selected;
2074
+ if (fallback !== void 0) out.fallbackFloorCents = fallback;
2075
+ if (Array.isArray(src.readyFloorCents)) {
2076
+ out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
2077
+ return finiteNumber(cents) !== void 0;
2078
+ });
2079
+ }
2080
+ if (Array.isArray(src.allowedPositions)) {
2081
+ out.allowedPositions = src.allowedPositions.filter(function(position) {
2082
+ return AD_POSITIONS.indexOf(position) !== -1;
2083
+ });
2084
+ }
2085
+ return out;
2086
+ }
2059
2087
  var FloorLadderController = /*#__PURE__*/ function() {
2060
- function FloorLadderController(initial, bounds) {
2061
- var selector = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : fixedFloorSelector;
2088
+ function FloorLadderController() {
2089
+ var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
2062
2090
  _class_call_check(this, FloorLadderController);
2063
- this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);
2064
- this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));
2091
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2092
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2065
2093
  this.selector = selector;
2066
2094
  }
2067
2095
  _create_class(FloorLadderController, [
2096
+ {
2097
+ key: "isEnabled",
2098
+ value: function isEnabled() {
2099
+ return this.config.enabled === true;
2100
+ }
2101
+ },
2102
+ {
2103
+ key: "applyApiConfig",
2104
+ value: function applyApiConfig(raw) {
2105
+ var parsed = parseApiFloorLadder(raw);
2106
+ this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
2107
+ this.bounds = Object.freeze({
2108
+ minCents: this.config.minFloorCents,
2109
+ maxCents: this.config.maxFloorCents,
2110
+ stepCents: this.config.stepCents
2111
+ });
2112
+ return validateFloorLadderConfig(this.config, this.bounds);
2113
+ }
2114
+ },
2115
+ {
2116
+ key: "reset",
2117
+ value: function reset() {
2118
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2119
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2120
+ }
2121
+ },
2068
2122
  {
2069
2123
  key: "get",
2070
2124
  value: function get() {
@@ -2077,13 +2131,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
2077
2131
  return _object_spread({}, this.bounds);
2078
2132
  }
2079
2133
  },
2080
- {
2081
- key: "update",
2082
- value: function update(update) {
2083
- this.config = mergeDefined(this.config, update);
2084
- return validateFloorLadderConfig(this.config, this.bounds);
2085
- }
2086
- },
2087
2134
  {
2088
2135
  key: "validate",
2089
2136
  value: function validate() {
@@ -6316,6 +6363,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
6316
6363
  }
6317
6364
  return "fingerprint:".concat(JSON.stringify(clientInfo));
6318
6365
  }
6366
+ function getCachedBrowserId() {
6367
+ return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
6368
+ }
6319
6369
  function getBrowserID(clientInfo) {
6320
6370
  return _async_to_generator(function() {
6321
6371
  return _ts_generator(this, function(_state) {
@@ -7985,7 +8035,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
7985
8035
  key: "fetchAdConfiguration",
7986
8036
  value: function fetchAdConfiguration() {
7987
8037
  return _async_to_generator(function() {
7988
- 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;
8038
+ 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;
7989
8039
  return _ts_generator(this, function(_state) {
7990
8040
  switch(_state.label){
7991
8041
  case 0:
@@ -8045,7 +8095,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
8045
8095
  ];
8046
8096
  case 4:
8047
8097
  data = _state.sent();
8048
- 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;
8098
+ apiEnableEdge = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.enableEdgePodRequest;
8099
+ apiEdgeUrl = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : _data_response1.edgePodUrl;
8100
+ this.apiEnableEdgePodRequest = typeof apiEnableEdge === "boolean" ? apiEnableEdge : void 0;
8101
+ this.apiEdgePodUrl = typeof apiEdgeUrl === "string" ? apiEdgeUrl : void 0;
8102
+ if (this.debug) {
8103
+ console.log("[StormcloudVideoPlayer] Edge pod settings from API:", {
8104
+ enableEdgePodRequest: this.apiEnableEdgePodRequest,
8105
+ edgePodUrl: this.apiEdgePodUrl
8106
+ });
8107
+ }
8108
+ this.apiFloorLadder = (_data_response2 = data.response) === null || _data_response2 === void 0 ? void 0 : _data_response2.floorLadder;
8109
+ if (this.debug) {
8110
+ console.log(this.apiFloorLadder ? "[StormcloudVideoPlayer] Floor ladder from API:" : "[StormcloudVideoPlayer] No floorLadder block in /ads/web response", this.apiFloorLadder);
8111
+ }
8112
+ 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;
8049
8113
  if (imaPayload) {
8050
8114
  decodedPayload = imaPayload;
8051
8115
  try {
@@ -8063,7 +8127,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8063
8127
  console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
8064
8128
  }
8065
8129
  }
8066
- 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;
8130
+ 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;
8067
8131
  if (numberAds != null && numberAds > 0) {
8068
8132
  this.apiNumberAds = numberAds;
8069
8133
  if (this.debug) {
@@ -9897,7 +9961,23 @@ function resolveEdgePodBaseUrl(config) {
9897
9961
  return void 0;
9898
9962
  }
9899
9963
  }
9964
+ function resolveEdgePodRequestContext(config) {
9965
+ var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
9966
+ return {
9967
+ width: extra.width,
9968
+ height: extra.height,
9969
+ playerId: extra.playerId,
9970
+ contentNetwork: config.contentNetwork,
9971
+ contentChannel: config.channelName,
9972
+ contentTitle: config.programTitle
9973
+ };
9974
+ }
9975
+ function setOptionalParam(url, key, value) {
9976
+ var trimmed = value === null || value === void 0 ? void 0 : value.trim();
9977
+ if (trimmed) url.searchParams.set(key, trimmed);
9978
+ }
9900
9979
  function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9980
+ var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
9901
9981
  var url = new URL(baseUrl);
9902
9982
  var maxMs = Math.max(0, Math.floor(remainingMs));
9903
9983
  var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
@@ -9905,6 +9985,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9905
9985
  url.searchParams.set("pmad", String(maxAds));
9906
9986
  url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
9907
9987
  url.searchParams.set("count", String(maxAds));
9988
+ if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
9989
+ url.searchParams.set("width", String(Math.round(context.width)));
9990
+ }
9991
+ if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
9992
+ url.searchParams.set("height", String(Math.round(context.height)));
9993
+ }
9994
+ setOptionalParam(url, "pid", context.playerId);
9995
+ setOptionalParam(url, "cn", context.contentNetwork);
9996
+ setOptionalParam(url, "cc", context.contentChannel);
9997
+ setOptionalParam(url, "ct", context.contentTitle);
9908
9998
  return url.toString();
9909
9999
  }
9910
10000
  function classifyEdgeVastResponse(result) {
@@ -10792,7 +10882,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
10792
10882
  return void 0;
10793
10883
  }
10794
10884
  try {
10795
- return buildEdgePodUrl(baseUrl, remainingMs, remainingAds);
10885
+ var playerId = getCachedBrowserId();
10886
+ return buildEdgePodUrl(baseUrl, remainingMs, remainingAds, resolveEdgePodRequestContext(this.host.config, {
10887
+ width: this.host.video.offsetWidth || this.host.video.clientWidth,
10888
+ height: this.host.video.offsetHeight || this.host.video.clientHeight,
10889
+ playerId: playerId
10890
+ }));
10796
10891
  } catch (unused) {
10797
10892
  this.markEdgeExhausted("invalid_edge_url");
10798
10893
  return void 0;
@@ -12302,14 +12397,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12302
12397
  this.config = _object_spread({}, browserOverrides, config);
12303
12398
  this.video = config.videoElement;
12304
12399
  logBrowserInfo(config.debugAdTiming);
12305
- var floorBounds = {};
12306
- if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
12307
- if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
12308
- if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
12309
- this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
12310
- this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
12311
- this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12312
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12400
+ this.floorLadder = new FloorLadderController();
12313
12401
  this.adPlayer = this.createAdPlayer(false);
12314
12402
  this.palNonce = createPalNonceManager();
12315
12403
  this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
@@ -12416,9 +12504,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12416
12504
  return _this.edgePodBaseUrl;
12417
12505
  },
12418
12506
  getFloorSnapshot: function getFloorSnapshot(position) {
12419
- return _this.floorLadderEnabled ? _this.floorLadder.snapshotFor({
12420
- position: position,
12421
- isCtv: _this.isCtvEnvironment()
12507
+ return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
12508
+ position: position
12422
12509
  }) : void 0;
12423
12510
  },
12424
12511
  onAdClick: function onAdClick() {
@@ -12455,45 +12542,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12455
12542
  }
12456
12543
  },
12457
12544
  {
12458
- key: "isCtvEnvironment",
12459
- value: function isCtvEnvironment() {
12460
- if (this.config.ctvAdRequest) return true;
12461
- var hint = inferDeviceTypeHint(false);
12462
- return hint === DEVICE_TYPE_HINT.CONNECTED_TV || hint === DEVICE_TYPE_HINT.SET_TOP_BOX;
12463
- }
12464
- },
12465
- {
12466
- key: "setAdFloorLadder",
12467
- value: function setAdFloorLadder(update) {
12468
- var report = this.floorLadder.update(update);
12545
+ key: "applyFloorLadderFromApi",
12546
+ value: function applyFloorLadderFromApi() {
12547
+ var raw = this.adConfig.apiFloorLadder;
12548
+ if (raw == null) {
12549
+ this.floorLadder.reset();
12550
+ return;
12551
+ }
12552
+ var report = this.floorLadder.applyApiConfig(raw);
12469
12553
  this.warnOnInvalidFloorLadder(report);
12470
- return report;
12471
- }
12472
- },
12473
- {
12474
- key: "setAdFloorLadderEnabled",
12475
- value: function setAdFloorLadderEnabled(enabled) {
12476
- this.floorLadderEnabled = enabled;
12477
- if (enabled) this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12554
+ if (this.debug) {
12555
+ console.log("[AdBreak][FLOOR] configuration applied from API", {
12556
+ config: this.floorLadder.get(),
12557
+ bounds: this.floorLadder.getBounds(),
12558
+ validation: report
12559
+ });
12560
+ }
12478
12561
  }
12479
12562
  },
12480
12563
  {
12481
12564
  key: "isAdFloorLadderEnabled",
12482
12565
  value: function isAdFloorLadderEnabled() {
12483
- return this.floorLadderEnabled;
12566
+ return this.floorLadder.isEnabled();
12484
12567
  }
12485
12568
  },
12486
12569
  {
12487
- key: "setEdgePodRequest",
12488
- value: function setEdgePodRequest(update) {
12489
- if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
12490
- return;
12570
+ key: "applyEdgePodFromApi",
12571
+ value: function applyEdgePodFromApi() {
12572
+ this.edgePodBaseUrl = resolveEdgePodBaseUrl({
12573
+ enableEdgePodRequest: this.adConfig.apiEnableEdgePodRequest,
12574
+ edgePodUrl: this.adConfig.apiEdgePodUrl,
12575
+ licenseKey: this.config.licenseKey
12576
+ });
12577
+ if (this.debug) {
12578
+ var _this_edgePodBaseUrl;
12579
+ console.log("[AdBreak][EDGE] edge pod base URL from API:", (_this_edgePodBaseUrl = this.edgePodBaseUrl) !== null && _this_edgePodBaseUrl !== void 0 ? _this_edgePodBaseUrl : "(disabled; GAM only)");
12491
12580
  }
12492
- if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
12493
- else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
12494
- if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
12495
- else this.config.edgePodUrl = update.edgePodUrl;
12496
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12497
12581
  }
12498
12582
  },
12499
12583
  {
@@ -12506,7 +12590,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12506
12590
  key: "warnOnInvalidFloorLadder",
12507
12591
  value: function warnOnInvalidFloorLadder(report) {
12508
12592
  var config = this.floorLadder.get();
12509
- if (report.ok || !this.floorLadderEnabled || !config.enabled) return;
12593
+ if (report.ok || !config.enabled) return;
12510
12594
  console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
12511
12595
  errors: report.errors,
12512
12596
  configurationVersion: config.configurationVersion,
@@ -12581,6 +12665,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12581
12665
  4
12582
12666
  ];
12583
12667
  case 4:
12668
+ this.applyFloorLadderFromApi();
12669
+ this.applyEdgePodFromApi();
12584
12670
  palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
12585
12671
  fetchConsentSignals().catch(function() {
12586
12672
  return {};