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
package/lib/index.d.cts CHANGED
@@ -3,7 +3,7 @@ export { default as StormcloudPlayer, createStormcloudPlayer } from './Stormclou
3
3
  export { StormcloudVideoPlayer } from './player/StormcloudVideoPlayer.cjs';
4
4
  export { AdBreak, AdController, AdControllerOptions, AdDetectInfo, AdFloorLadderConfig, AdImpressionInfo, AdLoadedInfo, AdPosition, AdSchedule, ClientInfo, FloorLadderMode, HeartbeatData, ImaController, ImaControllerOptions, LateJoinPolicy, PlayerAnalyticsContext, StormcloudVideoPlayerConfig, TrackingData } from './types.cjs';
5
5
  export { AdPodConfig, DEFAULT_REQUEST_SAFETY_MS, GAM_AD_OPPORTUNITY_DURATION_MS, OptimizedPodDiagnostics, PodResponseDiagnostics } from './player/OptimizedPodRequest.cjs';
6
- export { DEFAULT_FLOOR_LADDER_BOUNDS, DEFAULT_WEB_FLOOR_LADDER_CONFIG, FloorLadderBounds, FloorLadderValidationReport, FloorSelectionContext, FloorSelector, FloorSelectorResult, FloorSource, FloorValidation, OpportunityFloor, fixedFloorSelector, generateFloorLevels, resolveFloorLadderBounds, validateFloorCents, validateFloorLadderConfig } from './player/FloorLadder.cjs';
6
+ export { DEFAULT_FLOOR_LADDER_BOUNDS, DISABLED_FLOOR_LADDER_CONFIG, FloorLadderBounds, FloorLadderValidationReport, FloorSelectionContext, FloorSelector, FloorSelectorResult, FloorSource, FloorValidation, OpportunityFloor, fixedFloorSelector, generateFloorLevels, parseApiFloorLadder, resolveFloorLadderBounds, validateFloorCents, validateFloorLadderConfig } from './player/FloorLadder.cjs';
7
7
  export { BaseStormcloudPlayerProps, OnProgressProps } from './props.cjs';
8
8
  export { canPlay } from './patterns.cjs';
9
9
  export { IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, isMediaStream, lazy, merge, omit, parseQuery, randomString, supportsWebKitPresentationMode } from './utils.cjs';
package/lib/index.d.ts CHANGED
@@ -82,13 +82,6 @@ interface StormcloudVideoPlayerConfig {
82
82
  podMaxAds?: number;
83
83
  podMaxDurationMs?: number;
84
84
  podExactDuration?: boolean;
85
- adFloorLadderEnabled?: boolean;
86
- adFloorLadder?: Partial<AdFloorLadderConfig>;
87
- adFloorMinCents?: number;
88
- adFloorMaxCents?: number;
89
- adFloorStepCents?: number;
90
- enableEdgePodRequest?: boolean;
91
- edgePodUrl?: string;
92
85
  }
93
86
  type AdPosition = "preroll" | "midroll" | "postroll";
94
87
  type FloorLadderMode = "fixed";
@@ -224,7 +217,7 @@ interface AdImpressionInfo {
224
217
  timestamp: string;
225
218
  }
226
219
 
227
- declare const DEFAULT_WEB_FLOOR_LADDER_CONFIG: Readonly<AdFloorLadderConfig>;
220
+ declare const DISABLED_FLOOR_LADDER_CONFIG: Readonly<AdFloorLadderConfig>;
228
221
  type FloorValidationReason = "not_integer" | "out_of_range" | "not_step_multiple" | "not_ready";
229
222
  type FloorValidation = {
230
223
  ok: true;
@@ -233,7 +226,6 @@ type FloorValidation = {
233
226
  reason: FloorValidationReason;
234
227
  };
235
228
  type FloorSource = "selected" | "fallback" | "none";
236
- /** Levels that have targeting values in GAM; the ladder config can narrow these but never widen them. */
237
229
  interface FloorLadderBounds {
238
230
  minCents: number;
239
231
  maxCents: number;
@@ -242,7 +234,6 @@ interface FloorLadderBounds {
242
234
  declare const DEFAULT_FLOOR_LADDER_BOUNDS: Readonly<FloorLadderBounds>;
243
235
  interface FloorSelectionContext {
244
236
  position: AdPosition;
245
- isCtv: boolean;
246
237
  bounds: Readonly<FloorLadderBounds>;
247
238
  }
248
239
  interface FloorSelectorResult {
@@ -275,6 +266,7 @@ declare function resolveFloorLadderBounds(overrides?: Partial<FloorLadderBounds>
275
266
  declare function validateFloorCents(value: unknown, config: Readonly<AdFloorLadderConfig>, bounds?: Readonly<FloorLadderBounds>): FloorValidation;
276
267
  declare function validateFloorLadderConfig(config: Readonly<AdFloorLadderConfig>, bounds?: Readonly<FloorLadderBounds>): FloorLadderValidationReport;
277
268
  declare const fixedFloorSelector: FloorSelector;
269
+ declare function parseApiFloorLadder(raw: unknown): Partial<AdFloorLadderConfig> | undefined;
278
270
 
279
271
  declare class StormcloudVideoPlayer {
280
272
  private readonly video;
@@ -293,19 +285,13 @@ declare class StormcloudVideoPlayer {
293
285
  private readonly hlsEngine;
294
286
  private readonly adBreak;
295
287
  private readonly floorLadder;
296
- private floorLadderEnabled;
297
288
  private edgePodBaseUrl;
298
289
  constructor(config: StormcloudVideoPlayerConfig);
299
290
  private get debug();
300
291
  private createAdPlayer;
301
- private isCtvEnvironment;
302
- setAdFloorLadder(update: Partial<AdFloorLadderConfig>): FloorLadderValidationReport;
303
- setAdFloorLadderEnabled(enabled: boolean): void;
292
+ private applyFloorLadderFromApi;
304
293
  isAdFloorLadderEnabled(): boolean;
305
- setEdgePodRequest(update: {
306
- enableEdgePodRequest?: boolean;
307
- edgePodUrl?: string;
308
- }): void;
294
+ private applyEdgePodFromApi;
309
295
  getEdgePodUrl(): string | undefined;
310
296
  private warnOnInvalidFloorLadder;
311
297
  getAdFloorLadder(): AdFloorLadderConfig;
@@ -4174,4 +4160,4 @@ interface PalNonceManager {
4174
4160
  }
4175
4161
  declare function createPalNonceManager(): PalNonceManager;
4176
4162
 
4177
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdFloorLadderConfig, type AdImpressionInfo, type AdLoadedInfo, type AdPodConfig, type AdPosition, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_FLOOR_LADDER_BOUNDS, DEFAULT_REQUEST_SAFETY_MS, DEFAULT_TRACKING_INGEST_CONFIG, DEFAULT_WEB_FLOOR_LADDER_CONFIG, type FloorLadderBounds, type FloorLadderMode, type FloorLadderValidationReport, type FloorSelectionContext, type FloorSelector, type FloorSelectorResult, type FloorSource, type FloorValidation, GAM_AD_OPPORTUNITY_DURATION_MS, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, type OpportunityFloor, type OptimizedPodDiagnostics, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, type PodResponseDiagnostics, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type TrackingIngestChannel, type TrackingIngestConfig, applyTrackingIngestConfig, buildAnalyticsContext, canPlay, configureTrackingIngest, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, fixedFloorSelector, generateFloorLevels, getBrowserConfigOverrides, getBrowserID, getClientInfo, ingestPlayerTracking, initializePolyfills, isMediaStream, isTrackingIngestEnabled, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, requiresMediaPipelineResetAfterAds, resolveFloorLadderBounds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, trackingIngestConfig, validateFloorCents, validateFloorLadderConfig };
4163
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdFloorLadderConfig, type AdImpressionInfo, type AdLoadedInfo, type AdPodConfig, type AdPosition, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_FLOOR_LADDER_BOUNDS, DEFAULT_REQUEST_SAFETY_MS, DEFAULT_TRACKING_INGEST_CONFIG, DISABLED_FLOOR_LADDER_CONFIG, type FloorLadderBounds, type FloorLadderMode, type FloorLadderValidationReport, type FloorSelectionContext, type FloorSelector, type FloorSelectorResult, type FloorSource, type FloorValidation, GAM_AD_OPPORTUNITY_DURATION_MS, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, type OpportunityFloor, type OptimizedPodDiagnostics, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, type PodResponseDiagnostics, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, type TrackingIngestChannel, type TrackingIngestConfig, applyTrackingIngestConfig, buildAnalyticsContext, canPlay, configureTrackingIngest, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, fixedFloorSelector, generateFloorLevels, getBrowserConfigOverrides, getBrowserID, getClientInfo, ingestPlayerTracking, initializePolyfills, isMediaStream, isTrackingIngestEnabled, lazy, logBrowserInfo, merge, omit, parseApiFloorLadder, parseQuery, players, randomString, requiresMediaPipelineResetAfterAds, resolveFloorLadderBounds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, trackingIngestConfig, validateFloorCents, validateFloorLadderConfig };
package/lib/index.js CHANGED
@@ -1326,9 +1326,10 @@ function resolveScvpMacroValues(ctx) {
1326
1326
  var deviceId = (_ctx_deviceId = ctx.deviceId) === null || _ctx_deviceId === void 0 ? void 0 : _ctx_deviceId.trim();
1327
1327
  var deviceIdType = deviceId ? ((_ctx_deviceIdType = ctx.deviceIdType) === null || _ctx_deviceIdType === void 0 ? void 0 : _ctx_deviceIdType.trim()) || inferDeviceIdType() : void 0;
1328
1328
  if (deviceId && deviceIdType) {
1329
+ var _toFlag;
1329
1330
  set("RDID", deviceId);
1330
1331
  set("IDTYPE", deviceIdType);
1331
- set("IS-LAT", toFlag(ctx.limitAdTracking));
1332
+ set("IS-LAT", (_toFlag = toFlag(ctx.limitAdTracking)) !== null && _toFlag !== void 0 ? _toFlag : "0");
1332
1333
  }
1333
1334
  set("SID", ctx.sessionId);
1334
1335
  set("DTH", ctx.deviceTypeHint);
@@ -1663,21 +1664,19 @@ function fetchConsentSignals() {
1663
1664
  });
1664
1665
  }
1665
1666
  // src/player/FloorLadder.ts
1666
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
1667
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
1667
1668
  enabled: false,
1668
- targetingKey: "airytv_web_floor",
1669
- minFloorCents: 25,
1670
- maxFloorCents: 300,
1671
- stepCents: 25,
1672
- selectedFloorCents: 25,
1673
- fallbackFloorCents: 25,
1669
+ targetingKey: "",
1670
+ minFloorCents: 0,
1671
+ maxFloorCents: 0,
1672
+ stepCents: 0,
1673
+ selectedFloorCents: 0,
1674
+ fallbackFloorCents: 0,
1674
1675
  readyFloorCents: [],
1675
1676
  mode: "fixed",
1676
- allowedPositions: [
1677
- "midroll"
1678
- ],
1679
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
1680
- configurationVersion: "2026-09-29.1"
1677
+ allowedPositions: [],
1678
+ targetAdUnitPath: "",
1679
+ configurationVersion: ""
1681
1680
  });
1682
1681
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
1683
1682
  minCents: 25,
@@ -1836,7 +1835,6 @@ function resolveOpportunityFloor(config, context) {
1836
1835
  if (!config.enabled) return skipped("disabled");
1837
1836
  var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
1838
1837
  if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
1839
- if (context.isCtv) return skipped("ctv_excluded");
1840
1838
  if (!config.targetingKey) return skipped("missing_targeting_key");
1841
1839
  if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
1842
1840
  var result;
@@ -1990,16 +1988,81 @@ function mergeDefined(target, update) {
1990
1988
  }
1991
1989
  return copyConfig(next);
1992
1990
  }
1991
+ var AD_POSITIONS = [
1992
+ "preroll",
1993
+ "midroll",
1994
+ "postroll"
1995
+ ];
1996
+ function finiteNumber(value) {
1997
+ return typeof value === "number" && isFinite(value) ? value : void 0;
1998
+ }
1999
+ function parseApiFloorLadder(raw) {
2000
+ if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object" || Array.isArray(raw)) return void 0;
2001
+ var src = raw;
2002
+ var out = {};
2003
+ if (typeof src.enabled === "boolean") out.enabled = src.enabled;
2004
+ if (typeof src.targetingKey === "string") out.targetingKey = src.targetingKey;
2005
+ if (typeof src.targetAdUnitPath === "string") out.targetAdUnitPath = src.targetAdUnitPath;
2006
+ if (typeof src.configurationVersion === "string") out.configurationVersion = src.configurationVersion;
2007
+ if (typeof src.mode === "string") out.mode = src.mode;
2008
+ var min = finiteNumber(src.minFloorCents);
2009
+ var max = finiteNumber(src.maxFloorCents);
2010
+ var step = finiteNumber(src.stepCents);
2011
+ var selected = finiteNumber(src.selectedFloorCents);
2012
+ var fallback = finiteNumber(src.fallbackFloorCents);
2013
+ if (min !== void 0) out.minFloorCents = min;
2014
+ if (max !== void 0) out.maxFloorCents = max;
2015
+ if (step !== void 0) out.stepCents = step;
2016
+ if (selected !== void 0) out.selectedFloorCents = selected;
2017
+ if (fallback !== void 0) out.fallbackFloorCents = fallback;
2018
+ if (Array.isArray(src.readyFloorCents)) {
2019
+ out.readyFloorCents = src.readyFloorCents.filter(function(cents) {
2020
+ return finiteNumber(cents) !== void 0;
2021
+ });
2022
+ }
2023
+ if (Array.isArray(src.allowedPositions)) {
2024
+ out.allowedPositions = src.allowedPositions.filter(function(position) {
2025
+ return AD_POSITIONS.indexOf(position) !== -1;
2026
+ });
2027
+ }
2028
+ return out;
2029
+ }
1993
2030
  var FloorLadderController = /*#__PURE__*/ function() {
1994
2031
  "use strict";
1995
- function FloorLadderController(initial, bounds) {
1996
- var selector = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : fixedFloorSelector;
2032
+ function FloorLadderController() {
2033
+ var selector = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : fixedFloorSelector;
1997
2034
  _class_call_check(this, FloorLadderController);
1998
- this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);
1999
- this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));
2035
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2036
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2000
2037
  this.selector = selector;
2001
2038
  }
2002
2039
  _create_class(FloorLadderController, [
2040
+ {
2041
+ key: "isEnabled",
2042
+ value: function isEnabled() {
2043
+ return this.config.enabled === true;
2044
+ }
2045
+ },
2046
+ {
2047
+ key: "applyApiConfig",
2048
+ value: function applyApiConfig(raw) {
2049
+ var parsed = parseApiFloorLadder(raw);
2050
+ this.config = mergeDefined(copyConfig(DISABLED_FLOOR_LADDER_CONFIG), parsed);
2051
+ this.bounds = Object.freeze({
2052
+ minCents: this.config.minFloorCents,
2053
+ maxCents: this.config.maxFloorCents,
2054
+ stepCents: this.config.stepCents
2055
+ });
2056
+ return validateFloorLadderConfig(this.config, this.bounds);
2057
+ }
2058
+ },
2059
+ {
2060
+ key: "reset",
2061
+ value: function reset() {
2062
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2063
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2064
+ }
2065
+ },
2003
2066
  {
2004
2067
  key: "get",
2005
2068
  value: function get() {
@@ -2012,13 +2075,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
2012
2075
  return _object_spread({}, this.bounds);
2013
2076
  }
2014
2077
  },
2015
- {
2016
- key: "update",
2017
- value: function update(update) {
2018
- this.config = mergeDefined(this.config, update);
2019
- return validateFloorLadderConfig(this.config, this.bounds);
2020
- }
2021
- },
2022
2078
  {
2023
2079
  key: "validate",
2024
2080
  value: function validate() {
@@ -6280,6 +6336,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
6280
6336
  }
6281
6337
  return "fingerprint:".concat(JSON.stringify(clientInfo));
6282
6338
  }
6339
+ function getCachedBrowserId() {
6340
+ return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
6341
+ }
6283
6342
  function getBrowserID(clientInfo) {
6284
6343
  return _async_to_generator(function() {
6285
6344
  return _ts_generator(this, function(_state) {
@@ -7954,7 +8013,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
7954
8013
  key: "fetchAdConfiguration",
7955
8014
  value: function fetchAdConfiguration() {
7956
8015
  return _async_to_generator(function() {
7957
- 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;
8016
+ 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;
7958
8017
  return _ts_generator(this, function(_state) {
7959
8018
  switch(_state.label){
7960
8019
  case 0:
@@ -8014,7 +8073,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
8014
8073
  ];
8015
8074
  case 4:
8016
8075
  data = _state.sent();
8017
- 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;
8076
+ apiEnableEdge = (_data_response = data.response) === null || _data_response === void 0 ? void 0 : _data_response.enableEdgePodRequest;
8077
+ apiEdgeUrl = (_data_response1 = data.response) === null || _data_response1 === void 0 ? void 0 : _data_response1.edgePodUrl;
8078
+ this.apiEnableEdgePodRequest = typeof apiEnableEdge === "boolean" ? apiEnableEdge : void 0;
8079
+ this.apiEdgePodUrl = typeof apiEdgeUrl === "string" ? apiEdgeUrl : void 0;
8080
+ if (this.debug) {
8081
+ console.log("[StormcloudVideoPlayer] Edge pod settings from API:", {
8082
+ enableEdgePodRequest: this.apiEnableEdgePodRequest,
8083
+ edgePodUrl: this.apiEdgePodUrl
8084
+ });
8085
+ }
8086
+ this.apiFloorLadder = (_data_response2 = data.response) === null || _data_response2 === void 0 ? void 0 : _data_response2.floorLadder;
8087
+ if (this.debug) {
8088
+ console.log(this.apiFloorLadder ? "[StormcloudVideoPlayer] Floor ladder from API:" : "[StormcloudVideoPlayer] No floorLadder block in /ads/web response", this.apiFloorLadder);
8089
+ }
8090
+ 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;
8018
8091
  if (imaPayload) {
8019
8092
  decodedPayload = imaPayload;
8020
8093
  try {
@@ -8032,7 +8105,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8032
8105
  console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
8033
8106
  }
8034
8107
  }
8035
- 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;
8108
+ 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;
8036
8109
  if (numberAds != null && numberAds > 0) {
8037
8110
  this.apiNumberAds = numberAds;
8038
8111
  if (this.debug) {
@@ -9869,7 +9942,23 @@ function resolveEdgePodBaseUrl(config) {
9869
9942
  return void 0;
9870
9943
  }
9871
9944
  }
9945
+ function resolveEdgePodRequestContext(config) {
9946
+ var extra = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
9947
+ return {
9948
+ width: extra.width,
9949
+ height: extra.height,
9950
+ playerId: extra.playerId,
9951
+ contentNetwork: config.contentNetwork,
9952
+ contentChannel: config.channelName,
9953
+ contentTitle: config.programTitle
9954
+ };
9955
+ }
9956
+ function setOptionalParam(url, key, value) {
9957
+ var trimmed = value === null || value === void 0 ? void 0 : value.trim();
9958
+ if (trimmed) url.searchParams.set(key, trimmed);
9959
+ }
9872
9960
  function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9961
+ var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
9873
9962
  var url = new URL(baseUrl);
9874
9963
  var maxMs = Math.max(0, Math.floor(remainingMs));
9875
9964
  var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
@@ -9877,6 +9966,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9877
9966
  url.searchParams.set("pmad", String(maxAds));
9878
9967
  url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
9879
9968
  url.searchParams.set("count", String(maxAds));
9969
+ if (context.width != null && Number.isFinite(context.width) && context.width > 0) {
9970
+ url.searchParams.set("width", String(Math.round(context.width)));
9971
+ }
9972
+ if (context.height != null && Number.isFinite(context.height) && context.height > 0) {
9973
+ url.searchParams.set("height", String(Math.round(context.height)));
9974
+ }
9975
+ setOptionalParam(url, "pid", context.playerId);
9976
+ setOptionalParam(url, "cn", context.contentNetwork);
9977
+ setOptionalParam(url, "cc", context.contentChannel);
9978
+ setOptionalParam(url, "ct", context.contentTitle);
9880
9979
  return url.toString();
9881
9980
  }
9882
9981
  function classifyEdgeVastResponse(result) {
@@ -10765,7 +10864,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
10765
10864
  return void 0;
10766
10865
  }
10767
10866
  try {
10768
- return buildEdgePodUrl(baseUrl, remainingMs, remainingAds);
10867
+ var playerId = getCachedBrowserId();
10868
+ return buildEdgePodUrl(baseUrl, remainingMs, remainingAds, resolveEdgePodRequestContext(this.host.config, {
10869
+ width: this.host.video.offsetWidth || this.host.video.clientWidth,
10870
+ height: this.host.video.offsetHeight || this.host.video.clientHeight,
10871
+ playerId: playerId
10872
+ }));
10769
10873
  } catch (unused) {
10770
10874
  this.markEdgeExhausted("invalid_edge_url");
10771
10875
  return void 0;
@@ -12276,14 +12380,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12276
12380
  this.config = _object_spread({}, browserOverrides, config);
12277
12381
  this.video = config.videoElement;
12278
12382
  logBrowserInfo(config.debugAdTiming);
12279
- var floorBounds = {};
12280
- if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
12281
- if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
12282
- if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
12283
- this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
12284
- this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
12285
- this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12286
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12383
+ this.floorLadder = new FloorLadderController();
12287
12384
  this.adPlayer = this.createAdPlayer(false);
12288
12385
  this.palNonce = createPalNonceManager();
12289
12386
  this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
@@ -12390,9 +12487,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12390
12487
  return _this.edgePodBaseUrl;
12391
12488
  },
12392
12489
  getFloorSnapshot: function getFloorSnapshot(position) {
12393
- return _this.floorLadderEnabled ? _this.floorLadder.snapshotFor({
12394
- position: position,
12395
- isCtv: _this.isCtvEnvironment()
12490
+ return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
12491
+ position: position
12396
12492
  }) : void 0;
12397
12493
  },
12398
12494
  onAdClick: function onAdClick() {
@@ -12429,45 +12525,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12429
12525
  }
12430
12526
  },
12431
12527
  {
12432
- key: "isCtvEnvironment",
12433
- value: function isCtvEnvironment() {
12434
- if (this.config.ctvAdRequest) return true;
12435
- var hint = inferDeviceTypeHint(false);
12436
- return hint === DEVICE_TYPE_HINT.CONNECTED_TV || hint === DEVICE_TYPE_HINT.SET_TOP_BOX;
12437
- }
12438
- },
12439
- {
12440
- key: "setAdFloorLadder",
12441
- value: function setAdFloorLadder(update) {
12442
- var report = this.floorLadder.update(update);
12528
+ key: "applyFloorLadderFromApi",
12529
+ value: function applyFloorLadderFromApi() {
12530
+ var raw = this.adConfig.apiFloorLadder;
12531
+ if (raw == null) {
12532
+ this.floorLadder.reset();
12533
+ return;
12534
+ }
12535
+ var report = this.floorLadder.applyApiConfig(raw);
12443
12536
  this.warnOnInvalidFloorLadder(report);
12444
- return report;
12445
- }
12446
- },
12447
- {
12448
- key: "setAdFloorLadderEnabled",
12449
- value: function setAdFloorLadderEnabled(enabled) {
12450
- this.floorLadderEnabled = enabled;
12451
- if (enabled) this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12537
+ if (this.debug) {
12538
+ console.log("[AdBreak][FLOOR] configuration applied from API", {
12539
+ config: this.floorLadder.get(),
12540
+ bounds: this.floorLadder.getBounds(),
12541
+ validation: report
12542
+ });
12543
+ }
12452
12544
  }
12453
12545
  },
12454
12546
  {
12455
12547
  key: "isAdFloorLadderEnabled",
12456
12548
  value: function isAdFloorLadderEnabled() {
12457
- return this.floorLadderEnabled;
12549
+ return this.floorLadder.isEnabled();
12458
12550
  }
12459
12551
  },
12460
12552
  {
12461
- key: "setEdgePodRequest",
12462
- value: function setEdgePodRequest(update) {
12463
- if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
12464
- return;
12553
+ key: "applyEdgePodFromApi",
12554
+ value: function applyEdgePodFromApi() {
12555
+ this.edgePodBaseUrl = resolveEdgePodBaseUrl({
12556
+ enableEdgePodRequest: this.adConfig.apiEnableEdgePodRequest,
12557
+ edgePodUrl: this.adConfig.apiEdgePodUrl,
12558
+ licenseKey: this.config.licenseKey
12559
+ });
12560
+ if (this.debug) {
12561
+ var _this_edgePodBaseUrl;
12562
+ console.log("[AdBreak][EDGE] edge pod base URL from API:", (_this_edgePodBaseUrl = this.edgePodBaseUrl) !== null && _this_edgePodBaseUrl !== void 0 ? _this_edgePodBaseUrl : "(disabled; GAM only)");
12465
12563
  }
12466
- if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
12467
- else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
12468
- if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
12469
- else this.config.edgePodUrl = update.edgePodUrl;
12470
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12471
12564
  }
12472
12565
  },
12473
12566
  {
@@ -12480,7 +12573,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12480
12573
  key: "warnOnInvalidFloorLadder",
12481
12574
  value: function warnOnInvalidFloorLadder(report) {
12482
12575
  var config = this.floorLadder.get();
12483
- if (report.ok || !this.floorLadderEnabled || !config.enabled) return;
12576
+ if (report.ok || !config.enabled) return;
12484
12577
  console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
12485
12578
  errors: report.errors,
12486
12579
  configurationVersion: config.configurationVersion,
@@ -12555,6 +12648,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12555
12648
  4
12556
12649
  ];
12557
12650
  case 4:
12651
+ this.applyFloorLadderFromApi();
12652
+ this.applyEdgePodFromApi();
12558
12653
  palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
12559
12654
  fetchConsentSignals().catch(function() {
12560
12655
  return {};
@@ -13308,15 +13403,12 @@ var CRITICAL_PROPS = [
13308
13403
  "vmapUrl",
13309
13404
  "lowLatencyMode",
13310
13405
  "driftToleranceMs",
13311
- "ctvAdRequest",
13312
- "adFloorMinCents",
13313
- "adFloorMaxCents",
13314
- "adFloorStepCents"
13406
+ "ctvAdRequest"
13315
13407
  ];
13316
13408
  var CONTROLS_HIDE_DELAY = 3e3;
13317
13409
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
13318
13410
  var StormcloudVideoPlayerComponent = React.memo(function(props) {
13319
- 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, [
13411
+ 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, [
13320
13412
  "src",
13321
13413
  "autoplay",
13322
13414
  "muted",
@@ -13353,19 +13445,10 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13353
13445
  "minRemainingMsToStartAd",
13354
13446
  "minRemainingMsToRequestAd",
13355
13447
  "maxNoFillsPerBreak",
13356
- "maxAdBreakExtensionMs",
13357
- "adFloorLadderEnabled",
13358
- "adFloorLadder",
13359
- "adFloorMinCents",
13360
- "adFloorMaxCents",
13361
- "adFloorStepCents",
13362
- "enableEdgePodRequest",
13363
- "edgePodUrl"
13448
+ "maxAdBreakExtensionMs"
13364
13449
  ]);
13365
- var adFloorLadderKey = JSON.stringify(adFloorLadder !== null && adFloorLadder !== void 0 ? adFloorLadder : null);
13366
13450
  var videoRef = useRef(null);
13367
13451
  var playerRef = useRef(null);
13368
- var appliedFloorLadderKeyRef = useRef(null);
13369
13452
  var bufferingTimeoutRef = useRef(null);
13370
13453
  var controlsTimerRef = useRef(null);
13371
13454
  var wrapperRef = useRef(null);
@@ -13507,10 +13590,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13507
13590
  isVmap,
13508
13591
  vmapUrl,
13509
13592
  lowLatencyMode,
13510
- driftToleranceMs,
13511
- adFloorMinCents,
13512
- adFloorMaxCents,
13513
- adFloorStepCents
13593
+ driftToleranceMs
13514
13594
  ]);
13515
13595
  useEffect(function() {
13516
13596
  if (typeof window === "undefined") return;
@@ -13561,16 +13641,8 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13561
13641
  if (minRemainingMsToRequestAd !== void 0) cfg.minRemainingMsToRequestAd = minRemainingMsToRequestAd;
13562
13642
  if (maxNoFillsPerBreak !== void 0) cfg.maxNoFillsPerBreak = maxNoFillsPerBreak;
13563
13643
  if (maxAdBreakExtensionMs !== void 0) cfg.maxAdBreakExtensionMs = maxAdBreakExtensionMs;
13564
- if (adFloorLadderEnabled !== void 0) cfg.adFloorLadderEnabled = adFloorLadderEnabled;
13565
- if (adFloorLadder !== void 0) cfg.adFloorLadder = adFloorLadder;
13566
- if (adFloorMinCents !== void 0) cfg.adFloorMinCents = adFloorMinCents;
13567
- if (adFloorMaxCents !== void 0) cfg.adFloorMaxCents = adFloorMaxCents;
13568
- if (adFloorStepCents !== void 0) cfg.adFloorStepCents = adFloorStepCents;
13569
- if (enableEdgePodRequest !== void 0) cfg.enableEdgePodRequest = enableEdgePodRequest;
13570
- if (edgePodUrl !== void 0) cfg.edgePodUrl = edgePodUrl;
13571
13644
  var player = new StormcloudVideoPlayer(cfg);
13572
13645
  playerRef.current = player;
13573
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13574
13646
  player.load().then(function() {
13575
13647
  var showNative = player.shouldShowNativeControls();
13576
13648
  setShouldShowNativeControls(showNative);
@@ -13608,33 +13680,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13608
13680
  autoplay,
13609
13681
  muted
13610
13682
  ]);
13611
- useEffect(function() {
13612
- if (!playerRef.current || adFloorLadder === void 0) return;
13613
- if (appliedFloorLadderKeyRef.current === adFloorLadderKey) return;
13614
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13615
- playerRef.current.setAdFloorLadder(adFloorLadder);
13616
- }, [
13617
- adFloorLadderKey
13618
- ]);
13619
- useEffect(function() {
13620
- if (!playerRef.current) return;
13621
- var enabled = adFloorLadderEnabled === true;
13622
- if (playerRef.current.isAdFloorLadderEnabled() === enabled) return;
13623
- playerRef.current.setAdFloorLadderEnabled(enabled);
13624
- }, [
13625
- adFloorLadderEnabled
13626
- ]);
13627
- useEffect(function() {
13628
- if (!playerRef.current) return;
13629
- playerRef.current.setEdgePodRequest(_object_spread({}, enableEdgePodRequest !== void 0 ? {
13630
- enableEdgePodRequest: enableEdgePodRequest
13631
- } : {}, edgePodUrl !== void 0 ? {
13632
- edgePodUrl: edgePodUrl
13633
- } : {}));
13634
- }, [
13635
- enableEdgePodRequest,
13636
- edgePodUrl
13637
- ]);
13638
13683
  useEffect(function() {
13639
13684
  if (!playerRef.current) return;
13640
13685
  var checkAdStatus = function checkAdStatus() {
@@ -14624,7 +14669,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
14624
14669
  ]
14625
14670
  });
14626
14671
  }, function(prevProps, nextProps) {
14627
- var _prevProps_adFloorLadder, _nextProps_adFloorLadder;
14628
14672
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14629
14673
  try {
14630
14674
  for(var _iterator = CRITICAL_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
@@ -14711,12 +14755,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
14711
14755
  }
14712
14756
  }
14713
14757
  }
14714
- if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled || prevProps.enableEdgePodRequest !== nextProps.enableEdgePodRequest || prevProps.edgePodUrl !== nextProps.edgePodUrl) {
14715
- return false;
14716
- }
14717
- 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)) {
14718
- return false;
14719
- }
14720
14758
  return true;
14721
14759
  });
14722
14760
  // src/StormcloudPlayer.tsx
@@ -15890,5 +15928,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
15890
15928
  };
15891
15929
  var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
15892
15930
  var StormcloudPlayer_default = StormcloudPlayer;
15893
- export { DEFAULT_FLOOR_LADDER_BOUNDS, DEFAULT_REQUEST_SAFETY_MS, DEFAULT_TRACKING_INGEST_CONFIG, DEFAULT_WEB_FLOOR_LADDER_CONFIG, GAM_AD_OPPORTUNITY_DURATION_MS, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyTrackingIngestConfig, buildAnalyticsContext, canPlay, configureTrackingIngest, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, fixedFloorSelector, generateFloorLevels, getBrowserConfigOverrides, getBrowserID, getClientInfo, ingestPlayerTracking, initializePolyfills, isMediaStream, isTrackingIngestEnabled, lazy, logBrowserInfo, merge, omit, parseQuery, players_default as players, randomString, requiresMediaPipelineResetAfterAds, resolveFloorLadderBounds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, trackingIngestConfig, validateFloorCents, validateFloorLadderConfig };
15931
+ export { DEFAULT_FLOOR_LADDER_BOUNDS, DEFAULT_REQUEST_SAFETY_MS, DEFAULT_TRACKING_INGEST_CONFIG, DISABLED_FLOOR_LADDER_CONFIG, GAM_AD_OPPORTUNITY_DURATION_MS, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer_default as StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, applyTrackingIngestConfig, buildAnalyticsContext, canPlay, configureTrackingIngest, createHlsAdPlayer, createPalNonceManager, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, fixedFloorSelector, generateFloorLevels, getBrowserConfigOverrides, getBrowserID, getClientInfo, ingestPlayerTracking, initializePolyfills, isMediaStream, isTrackingIngestEnabled, lazy, logBrowserInfo, merge, omit, parseApiFloorLadder, parseQuery, players_default as players, randomString, requiresMediaPipelineResetAfterAds, resolveFloorLadderBounds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, trackingIngestConfig, validateFloorCents, validateFloorLadderConfig };
15894
15932
  //# sourceMappingURL=index.js.map