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/index.cjs CHANGED
@@ -412,8 +412,8 @@ __export(index_exports, {
412
412
  DEFAULT_TRACKING_INGEST_CONFIG: function DEFAULT_TRACKING_INGEST_CONFIG1() {
413
413
  return DEFAULT_TRACKING_INGEST_CONFIG;
414
414
  },
415
- DEFAULT_WEB_FLOOR_LADDER_CONFIG: function DEFAULT_WEB_FLOOR_LADDER_CONFIG1() {
416
- return DEFAULT_WEB_FLOOR_LADDER_CONFIG;
415
+ DISABLED_FLOOR_LADDER_CONFIG: function DISABLED_FLOOR_LADDER_CONFIG1() {
416
+ return DISABLED_FLOOR_LADDER_CONFIG;
417
417
  },
418
418
  GAM_AD_OPPORTUNITY_DURATION_MS: function GAM_AD_OPPORTUNITY_DURATION_MS1() {
419
419
  return GAM_AD_OPPORTUNITY_DURATION_MS;
@@ -511,6 +511,9 @@ __export(index_exports, {
511
511
  omit: function omit1() {
512
512
  return omit;
513
513
  },
514
+ parseApiFloorLadder: function parseApiFloorLadder1() {
515
+ return parseApiFloorLadder;
516
+ },
514
517
  parseQuery: function parseQuery1() {
515
518
  return parseQuery;
516
519
  },
@@ -1884,21 +1887,19 @@ function fetchConsentSignals() {
1884
1887
  });
1885
1888
  }
1886
1889
  // src/player/FloorLadder.ts
1887
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
1890
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
1888
1891
  enabled: false,
1889
- targetingKey: "airytv_web_floor",
1890
- minFloorCents: 25,
1891
- maxFloorCents: 300,
1892
- stepCents: 25,
1893
- selectedFloorCents: 25,
1894
- fallbackFloorCents: 25,
1892
+ targetingKey: "",
1893
+ minFloorCents: 0,
1894
+ maxFloorCents: 0,
1895
+ stepCents: 0,
1896
+ selectedFloorCents: 0,
1897
+ fallbackFloorCents: 0,
1895
1898
  readyFloorCents: [],
1896
1899
  mode: "fixed",
1897
- allowedPositions: [
1898
- "midroll"
1899
- ],
1900
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
1901
- configurationVersion: "2026-09-29.1"
1900
+ allowedPositions: [],
1901
+ targetAdUnitPath: "",
1902
+ configurationVersion: ""
1902
1903
  });
1903
1904
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
1904
1905
  minCents: 25,
@@ -2057,7 +2058,6 @@ function resolveOpportunityFloor(config, context) {
2057
2058
  if (!config.enabled) return skipped("disabled");
2058
2059
  var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
2059
2060
  if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
2060
- if (context.isCtv) return skipped("ctv_excluded");
2061
2061
  if (!config.targetingKey) return skipped("missing_targeting_key");
2062
2062
  if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
2063
2063
  var result;
@@ -2211,15 +2211,80 @@ function mergeDefined(target, update) {
2211
2211
  }
2212
2212
  return copyConfig(next);
2213
2213
  }
2214
+ var AD_POSITIONS = [
2215
+ "preroll",
2216
+ "midroll",
2217
+ "postroll"
2218
+ ];
2219
+ function finiteNumber(value) {
2220
+ return typeof value === "number" && isFinite(value) ? value : void 0;
2221
+ }
2222
+ function parseApiFloorLadder(raw) {
2223
+ if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
2224
+ var src = raw;
2225
+ var out = {};
2226
+ if (typeof src.enabled === "boolean") out.enabled = src.enabled;
2227
+ if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
2228
+ if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
2229
+ if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
2230
+ if (typeof src.mode === "string") out.mode = src.mode;
2231
+ var min = finiteNumber(src.minFloorCents);
2232
+ var max = finiteNumber(src.maxFloorCents);
2233
+ var step = finiteNumber(src.stepCents);
2234
+ var selected = finiteNumber(src.selectedFloorCents);
2235
+ var fallback = finiteNumber(src.fallbackFloorCents);
2236
+ if (min !== void 0) out.minFloorCents = min;
2237
+ if (max !== void 0) out.maxFloorCents = max;
2238
+ if (step !== void 0) out.stepCents = step;
2239
+ if (selected !== void 0) out.selectedFloorCents = selected;
2240
+ if (fallback !== void 0) out.fallbackFloorCents = fallback;
2241
+ if (Array.isArray(src.readyFloorCents)) {
2242
+ out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
2243
+ return finiteNumber(cents) !== void 0;
2244
+ });
2245
+ }
2246
+ if (Array.isArray(src.allowedPositions)) {
2247
+ out.allowedPositions = src.allowedPositions.filter(function(position) {
2248
+ return AD_POSITIONS.indexOf(position) !== -1;
2249
+ });
2250
+ }
2251
+ return out;
2252
+ }
2214
2253
  var FloorLadderController = /*#__PURE__*/ function() {
2215
- function FloorLadderController(initial, bounds) {
2216
- var selector = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : fixedFloorSelector;
2254
+ function FloorLadderController() {
2255
+ var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
2217
2256
  _class_call_check(this, FloorLadderController);
2218
- this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);
2219
- this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));
2257
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2258
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2220
2259
  this.selector = selector;
2221
2260
  }
2222
2261
  _create_class(FloorLadderController, [
2262
+ {
2263
+ key: "isEnabled",
2264
+ value: function isEnabled() {
2265
+ return this.config.enabled === true;
2266
+ }
2267
+ },
2268
+ {
2269
+ key: "applyApiConfig",
2270
+ value: function applyApiConfig(raw) {
2271
+ var parsed = parseApiFloorLadder(raw);
2272
+ this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
2273
+ this.bounds = Object.freeze({
2274
+ minCents: this.config.minFloorCents,
2275
+ maxCents: this.config.maxFloorCents,
2276
+ stepCents: this.config.stepCents
2277
+ });
2278
+ return validateFloorLadderConfig(this.config, this.bounds);
2279
+ }
2280
+ },
2281
+ {
2282
+ key: "reset",
2283
+ value: function reset() {
2284
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2285
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2286
+ }
2287
+ },
2223
2288
  {
2224
2289
  key: "get",
2225
2290
  value: function get() {
@@ -2232,13 +2297,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
2232
2297
  return _object_spread({}, this.bounds);
2233
2298
  }
2234
2299
  },
2235
- {
2236
- key: "update",
2237
- value: function update(update) {
2238
- this.config = mergeDefined(this.config, update);
2239
- return validateFloorLadderConfig(this.config, this.bounds);
2240
- }
2241
- },
2242
2300
  {
2243
2301
  key: "validate",
2244
2302
  value: function validate() {
@@ -6500,6 +6558,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
6500
6558
  }
6501
6559
  return "fingerprint:".concat(JSON.stringify(clientInfo));
6502
6560
  }
6561
+ function getCachedBrowserId() {
6562
+ return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
6563
+ }
6503
6564
  function getBrowserID(clientInfo) {
6504
6565
  return _async_to_generator(function() {
6505
6566
  return _ts_generator(this, function(_state) {
@@ -8169,7 +8230,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8169
8230
  key: "fetchAdConfiguration",
8170
8231
  value: function fetchAdConfiguration() {
8171
8232
  return _async_to_generator(function() {
8172
- 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;
8233
+ 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;
8173
8234
  return _ts_generator(this, function(_state) {
8174
8235
  switch(_state.label){
8175
8236
  case 0:
@@ -8229,7 +8290,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
8229
8290
  ];
8230
8291
  case 4:
8231
8292
  data = _state.sent();
8232
- 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;
8293
+ apiEnableEdge = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.enableEdgePodRequest;
8294
+ apiEdgeUrl = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : _data_response1.edgePodUrl;
8295
+ this.apiEnableEdgePodRequest = typeof apiEnableEdge === "boolean" ? apiEnableEdge : void 0;
8296
+ this.apiEdgePodUrl = typeof apiEdgeUrl === "string" ? apiEdgeUrl : void 0;
8297
+ if (this.debug) {
8298
+ console.log("[StormcloudVideoPlayer] Edge pod settings from API:", {
8299
+ enableEdgePodRequest: this.apiEnableEdgePodRequest,
8300
+ edgePodUrl: this.apiEdgePodUrl
8301
+ });
8302
+ }
8303
+ this.apiFloorLadder = (_data_response2 = data.response) === null || _data_response2 === void 0 ? void 0 : _data_response2.floorLadder;
8304
+ if (this.debug) {
8305
+ console.log(this.apiFloorLadder ? "[StormcloudVideoPlayer] Floor ladder from API:" : "[StormcloudVideoPlayer] No floorLadder block in /ads/web response", this.apiFloorLadder);
8306
+ }
8307
+ 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;
8233
8308
  if (imaPayload) {
8234
8309
  decodedPayload = imaPayload;
8235
8310
  try {
@@ -8247,7 +8322,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8247
8322
  console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
8248
8323
  }
8249
8324
  }
8250
- 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;
8325
+ 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;
8251
8326
  if (numberAds != null && numberAds > 0) {
8252
8327
  this.apiNumberAds = numberAds;
8253
8328
  if (this.debug) {
@@ -10081,7 +10156,23 @@ function resolveEdgePodBaseUrl(config) {
10081
10156
  return void 0;
10082
10157
  }
10083
10158
  }
10159
+ function resolveEdgePodRequestContext(config) {
10160
+ var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
10161
+ return {
10162
+ width: extra.width,
10163
+ height: extra.height,
10164
+ playerId: extra.playerId,
10165
+ contentNetwork: config.contentNetwork,
10166
+ contentChannel: config.channelName,
10167
+ contentTitle: config.programTitle
10168
+ };
10169
+ }
10170
+ function setOptionalParam(url, key, value) {
10171
+ var trimmed = value === null || value === void 0 ? void 0 : value.trim();
10172
+ if (trimmed) url.searchParams.set(key, trimmed);
10173
+ }
10084
10174
  function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
10175
+ var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
10085
10176
  var url = new URL(baseUrl);
10086
10177
  var maxMs = Math.max(0, Math.floor(remainingMs));
10087
10178
  var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
@@ -10089,6 +10180,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
10089
10180
  url.searchParams.set("pmad", String(maxAds));
10090
10181
  url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
10091
10182
  url.searchParams.set("count", String(maxAds));
10183
+ if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
10184
+ url.searchParams.set("width", String(Math.round(context.width)));
10185
+ }
10186
+ if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
10187
+ url.searchParams.set("height", String(Math.round(context.height)));
10188
+ }
10189
+ setOptionalParam(url, "pid", context.playerId);
10190
+ setOptionalParam(url, "cn", context.contentNetwork);
10191
+ setOptionalParam(url, "cc", context.contentChannel);
10192
+ setOptionalParam(url, "ct", context.contentTitle);
10092
10193
  return url.toString();
10093
10194
  }
10094
10195
  function classifyEdgeVastResponse(result) {
@@ -10976,7 +11077,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
10976
11077
  return void 0;
10977
11078
  }
10978
11079
  try {
10979
- return buildEdgePodUrl(baseUrl, remainingMs, remainingAds);
11080
+ var playerId = getCachedBrowserId();
11081
+ return buildEdgePodUrl(baseUrl, remainingMs, remainingAds, resolveEdgePodRequestContext(this.host.config, {
11082
+ width: this.host.video.offsetWidth || this.host.video.clientWidth,
11083
+ height: this.host.video.offsetHeight || this.host.video.clientHeight,
11084
+ playerId: playerId
11085
+ }));
10980
11086
  } catch (unused) {
10981
11087
  this.markEdgeExhausted("invalid_edge_url");
10982
11088
  return void 0;
@@ -12486,14 +12592,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12486
12592
  this.config = _object_spread({}, browserOverrides, config);
12487
12593
  this.video = config.videoElement;
12488
12594
  logBrowserInfo(config.debugAdTiming);
12489
- var floorBounds = {};
12490
- if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
12491
- if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
12492
- if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
12493
- this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
12494
- this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
12495
- this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12496
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12595
+ this.floorLadder = new FloorLadderController();
12497
12596
  this.adPlayer = this.createAdPlayer(false);
12498
12597
  this.palNonce = createPalNonceManager();
12499
12598
  this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
@@ -12600,9 +12699,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12600
12699
  return _this.edgePodBaseUrl;
12601
12700
  },
12602
12701
  getFloorSnapshot: function getFloorSnapshot(position) {
12603
- return _this.floorLadderEnabled ? _this.floorLadder.snapshotFor({
12604
- position: position,
12605
- isCtv: _this.isCtvEnvironment()
12702
+ return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
12703
+ position: position
12606
12704
  }) : void 0;
12607
12705
  },
12608
12706
  onAdClick: function onAdClick() {
@@ -12639,45 +12737,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12639
12737
  }
12640
12738
  },
12641
12739
  {
12642
- key: "isCtvEnvironment",
12643
- value: function isCtvEnvironment() {
12644
- if (this.config.ctvAdRequest) return true;
12645
- var hint = inferDeviceTypeHint(false);
12646
- return hint === DEVICE_TYPE_HINT.CONNECTED_TV || hint === DEVICE_TYPE_HINT.SET_TOP_BOX;
12647
- }
12648
- },
12649
- {
12650
- key: "setAdFloorLadder",
12651
- value: function setAdFloorLadder(update) {
12652
- var report = this.floorLadder.update(update);
12740
+ key: "applyFloorLadderFromApi",
12741
+ value: function applyFloorLadderFromApi() {
12742
+ var raw = this.adConfig.apiFloorLadder;
12743
+ if (raw == null) {
12744
+ this.floorLadder.reset();
12745
+ return;
12746
+ }
12747
+ var report = this.floorLadder.applyApiConfig(raw);
12653
12748
  this.warnOnInvalidFloorLadder(report);
12654
- return report;
12655
- }
12656
- },
12657
- {
12658
- key: "setAdFloorLadderEnabled",
12659
- value: function setAdFloorLadderEnabled(enabled) {
12660
- this.floorLadderEnabled = enabled;
12661
- if (enabled) this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12749
+ if (this.debug) {
12750
+ console.log("[AdBreak][FLOOR] configuration applied from API", {
12751
+ config: this.floorLadder.get(),
12752
+ bounds: this.floorLadder.getBounds(),
12753
+ validation: report
12754
+ });
12755
+ }
12662
12756
  }
12663
12757
  },
12664
12758
  {
12665
12759
  key: "isAdFloorLadderEnabled",
12666
12760
  value: function isAdFloorLadderEnabled() {
12667
- return this.floorLadderEnabled;
12761
+ return this.floorLadder.isEnabled();
12668
12762
  }
12669
12763
  },
12670
12764
  {
12671
- key: "setEdgePodRequest",
12672
- value: function setEdgePodRequest(update) {
12673
- if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
12674
- return;
12765
+ key: "applyEdgePodFromApi",
12766
+ value: function applyEdgePodFromApi() {
12767
+ this.edgePodBaseUrl = resolveEdgePodBaseUrl({
12768
+ enableEdgePodRequest: this.adConfig.apiEnableEdgePodRequest,
12769
+ edgePodUrl: this.adConfig.apiEdgePodUrl,
12770
+ licenseKey: this.config.licenseKey
12771
+ });
12772
+ if (this.debug) {
12773
+ var _this_edgePodBaseUrl;
12774
+ console.log("[AdBreak][EDGE] edge pod base URL from API:", (_this_edgePodBaseUrl = this.edgePodBaseUrl) !== null && _this_edgePodBaseUrl !== void 0 ? _this_edgePodBaseUrl : "(disabled; GAM only)");
12675
12775
  }
12676
- if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
12677
- else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
12678
- if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
12679
- else this.config.edgePodUrl = update.edgePodUrl;
12680
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12681
12776
  }
12682
12777
  },
12683
12778
  {
@@ -12690,7 +12785,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12690
12785
  key: "warnOnInvalidFloorLadder",
12691
12786
  value: function warnOnInvalidFloorLadder(report) {
12692
12787
  var config = this.floorLadder.get();
12693
- if (report.ok || !this.floorLadderEnabled || !config.enabled) return;
12788
+ if (report.ok || !config.enabled) return;
12694
12789
  console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
12695
12790
  errors: report.errors,
12696
12791
  configurationVersion: config.configurationVersion,
@@ -12765,6 +12860,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12765
12860
  4
12766
12861
  ];
12767
12862
  case 4:
12863
+ this.applyFloorLadderFromApi();
12864
+ this.applyEdgePodFromApi();
12768
12865
  palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
12769
12866
  fetchConsentSignals().catch(function() {
12770
12867
  return {};
@@ -13518,15 +13615,12 @@ var CRITICAL_PROPS = [
13518
13615
  "vmapUrl",
13519
13616
  "lowLatencyMode",
13520
13617
  "driftToleranceMs",
13521
- "ctvAdRequest",
13522
- "adFloorMinCents",
13523
- "adFloorMaxCents",
13524
- "adFloorStepCents"
13618
+ "ctvAdRequest"
13525
13619
  ];
13526
13620
  var CONTROLS_HIDE_DELAY = 3e3;
13527
13621
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
13528
13622
  var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
13529
- var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, channelName = props.channelName, contentNetwork = props.contentNetwork, minRemainingMsToStartAd = props.minRemainingMsToStartAd, minRemainingMsToRequestAd = props.minRemainingMsToRequestAd, maxNoFillsPerBreak = props.maxNoFillsPerBreak, maxAdBreakExtensionMs = props.maxAdBreakExtensionMs, adFloorLadderEnabled = props.adFloorLadderEnabled, adFloorLadder = props.adFloorLadder, adFloorMinCents = props.adFloorMinCents, adFloorMaxCents = props.adFloorMaxCents, adFloorStepCents = props.adFloorStepCents, enableEdgePodRequest = props.enableEdgePodRequest, edgePodUrl = props.edgePodUrl, restVideoAttrs = _object_without_properties(props, [
13623
+ var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, isLiveStream = props.isLiveStream, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, vastTagUrl = props.vastTagUrl, isVmap = props.isVmap, vmapUrl = props.vmapUrl, minSegmentsBeforePlay = props.minSegmentsBeforePlay, ctvAdRequest = props.ctvAdRequest, programTitle = props.programTitle, channelName = props.channelName, contentNetwork = props.contentNetwork, minRemainingMsToStartAd = props.minRemainingMsToStartAd, minRemainingMsToRequestAd = props.minRemainingMsToRequestAd, maxNoFillsPerBreak = props.maxNoFillsPerBreak, maxAdBreakExtensionMs = props.maxAdBreakExtensionMs, restVideoAttrs = _object_without_properties(props, [
13530
13624
  "src",
13531
13625
  "autoplay",
13532
13626
  "muted",
@@ -13563,19 +13657,10 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
13563
13657
  "minRemainingMsToStartAd",
13564
13658
  "minRemainingMsToRequestAd",
13565
13659
  "maxNoFillsPerBreak",
13566
- "maxAdBreakExtensionMs",
13567
- "adFloorLadderEnabled",
13568
- "adFloorLadder",
13569
- "adFloorMinCents",
13570
- "adFloorMaxCents",
13571
- "adFloorStepCents",
13572
- "enableEdgePodRequest",
13573
- "edgePodUrl"
13660
+ "maxAdBreakExtensionMs"
13574
13661
  ]);
13575
- var adFloorLadderKey = JSON.stringify(adFloorLadder !== null && adFloorLadder !== void 0 ? adFloorLadder : null);
13576
13662
  var videoRef = (0, import_react.useRef)(null);
13577
13663
  var playerRef = (0, import_react.useRef)(null);
13578
- var appliedFloorLadderKeyRef = (0, import_react.useRef)(null);
13579
13664
  var bufferingTimeoutRef = (0, import_react.useRef)(null);
13580
13665
  var controlsTimerRef = (0, import_react.useRef)(null);
13581
13666
  var wrapperRef = (0, import_react.useRef)(null);
@@ -13717,10 +13802,7 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
13717
13802
  isVmap,
13718
13803
  vmapUrl,
13719
13804
  lowLatencyMode,
13720
- driftToleranceMs,
13721
- adFloorMinCents,
13722
- adFloorMaxCents,
13723
- adFloorStepCents
13805
+ driftToleranceMs
13724
13806
  ]);
13725
13807
  (0, import_react.useEffect)(function() {
13726
13808
  if (typeof window === "undefined") return;
@@ -13771,16 +13853,8 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
13771
13853
  if (minRemainingMsToRequestAd !== void 0) cfg.minRemainingMsToRequestAd = minRemainingMsToRequestAd;
13772
13854
  if (maxNoFillsPerBreak !== void 0) cfg.maxNoFillsPerBreak = maxNoFillsPerBreak;
13773
13855
  if (maxAdBreakExtensionMs !== void 0) cfg.maxAdBreakExtensionMs = maxAdBreakExtensionMs;
13774
- if (adFloorLadderEnabled !== void 0) cfg.adFloorLadderEnabled = adFloorLadderEnabled;
13775
- if (adFloorLadder !== void 0) cfg.adFloorLadder = adFloorLadder;
13776
- if (adFloorMinCents !== void 0) cfg.adFloorMinCents = adFloorMinCents;
13777
- if (adFloorMaxCents !== void 0) cfg.adFloorMaxCents = adFloorMaxCents;
13778
- if (adFloorStepCents !== void 0) cfg.adFloorStepCents = adFloorStepCents;
13779
- if (enableEdgePodRequest !== void 0) cfg.enableEdgePodRequest = enableEdgePodRequest;
13780
- if (edgePodUrl !== void 0) cfg.edgePodUrl = edgePodUrl;
13781
13856
  var player = new StormcloudVideoPlayer(cfg);
13782
13857
  playerRef.current = player;
13783
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13784
13858
  player.load().then(function() {
13785
13859
  var showNative = player.shouldShowNativeControls();
13786
13860
  setShouldShowNativeControls(showNative);
@@ -13818,33 +13892,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
13818
13892
  autoplay,
13819
13893
  muted
13820
13894
  ]);
13821
- (0, import_react.useEffect)(function() {
13822
- if (!playerRef.current || adFloorLadder === void 0) return;
13823
- if (appliedFloorLadderKeyRef.current === adFloorLadderKey) return;
13824
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13825
- playerRef.current.setAdFloorLadder(adFloorLadder);
13826
- }, [
13827
- adFloorLadderKey
13828
- ]);
13829
- (0, import_react.useEffect)(function() {
13830
- if (!playerRef.current) return;
13831
- var enabled = adFloorLadderEnabled === true;
13832
- if (playerRef.current.isAdFloorLadderEnabled() === enabled) return;
13833
- playerRef.current.setAdFloorLadderEnabled(enabled);
13834
- }, [
13835
- adFloorLadderEnabled
13836
- ]);
13837
- (0, import_react.useEffect)(function() {
13838
- if (!playerRef.current) return;
13839
- playerRef.current.setEdgePodRequest(_object_spread({}, enableEdgePodRequest !== void 0 ? {
13840
- enableEdgePodRequest: enableEdgePodRequest
13841
- } : {}, edgePodUrl !== void 0 ? {
13842
- edgePodUrl: edgePodUrl
13843
- } : {}));
13844
- }, [
13845
- enableEdgePodRequest,
13846
- edgePodUrl
13847
- ]);
13848
13895
  (0, import_react.useEffect)(function() {
13849
13896
  if (!playerRef.current) return;
13850
13897
  var checkAdStatus = function checkAdStatus() {
@@ -14834,7 +14881,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
14834
14881
  ]
14835
14882
  });
14836
14883
  }, function(prevProps, nextProps) {
14837
- var _prevProps_adFloorLadder, _nextProps_adFloorLadder;
14838
14884
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14839
14885
  try {
14840
14886
  for(var _iterator = CRITICAL_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
@@ -14921,12 +14967,6 @@ var StormcloudVideoPlayerComponent = import_react.default.memo(function(props) {
14921
14967
  }
14922
14968
  }
14923
14969
  }
14924
- if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled || prevProps.enableEdgePodRequest !== nextProps.enableEdgePodRequest || prevProps.edgePodUrl !== nextProps.edgePodUrl) {
14925
- return false;
14926
- }
14927
- if (JSON.stringify((_prevProps_adFloorLadder = prevProps.adFloorLadder) !== null && _prevProps_adFloorLadder !== void 0 ? _prevProps_adFloorLadder : null) !== JSON.stringify((_nextProps_adFloorLadder = nextProps.adFloorLadder) !== null && _nextProps_adFloorLadder !== void 0 ? _nextProps_adFloorLadder : null)) {
14928
- return false;
14929
- }
14930
14970
  return true;
14931
14971
  });
14932
14972
  // src/StormcloudPlayer.tsx
@@ -16101,7 +16141,7 @@ var StormcloudPlayer_default = StormcloudPlayer;
16101
16141
  DEFAULT_FLOOR_LADDER_BOUNDS: DEFAULT_FLOOR_LADDER_BOUNDS,
16102
16142
  DEFAULT_REQUEST_SAFETY_MS: DEFAULT_REQUEST_SAFETY_MS,
16103
16143
  DEFAULT_TRACKING_INGEST_CONFIG: DEFAULT_TRACKING_INGEST_CONFIG,
16104
- DEFAULT_WEB_FLOOR_LADDER_CONFIG: DEFAULT_WEB_FLOOR_LADDER_CONFIG,
16144
+ DISABLED_FLOOR_LADDER_CONFIG: DISABLED_FLOOR_LADDER_CONFIG,
16105
16145
  GAM_AD_OPPORTUNITY_DURATION_MS: GAM_AD_OPPORTUNITY_DURATION_MS,
16106
16146
  IS_BROWSER: IS_BROWSER,
16107
16147
  IS_GLOBAL: IS_GLOBAL,
@@ -16133,6 +16173,7 @@ var StormcloudPlayer_default = StormcloudPlayer;
16133
16173
  logBrowserInfo: logBrowserInfo,
16134
16174
  merge: merge,
16135
16175
  omit: omit,
16176
+ parseApiFloorLadder: parseApiFloorLadder,
16136
16177
  parseQuery: parseQuery,
16137
16178
  players: players,
16138
16179
  randomString: randomString,