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.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
@@ -1664,21 +1664,19 @@ function fetchConsentSignals() {
1664
1664
  });
1665
1665
  }
1666
1666
  // src/player/FloorLadder.ts
1667
- var DEFAULT_WEB_FLOOR_LADDER_CONFIG = Object.freeze({
1667
+ var DISABLED_FLOOR_LADDER_CONFIG = Object.freeze({
1668
1668
  enabled: false,
1669
- targetingKey: "airytv_web_floor",
1670
- minFloorCents: 25,
1671
- maxFloorCents: 300,
1672
- stepCents: 25,
1673
- selectedFloorCents: 25,
1674
- fallbackFloorCents: 25,
1669
+ targetingKey: "",
1670
+ minFloorCents: 0,
1671
+ maxFloorCents: 0,
1672
+ stepCents: 0,
1673
+ selectedFloorCents: 0,
1674
+ fallbackFloorCents: 0,
1675
1675
  readyFloorCents: [],
1676
1676
  mode: "fixed",
1677
- allowedPositions: [
1678
- "midroll"
1679
- ],
1680
- targetAdUnitPath: "/21821455290/airytvadx/airytv-web",
1681
- configurationVersion: "2026-09-29.1"
1677
+ allowedPositions: [],
1678
+ targetAdUnitPath: "",
1679
+ configurationVersion: ""
1682
1680
  });
1683
1681
  var DEFAULT_FLOOR_LADDER_BOUNDS = Object.freeze({
1684
1682
  minCents: 25,
@@ -1837,7 +1835,6 @@ function resolveOpportunityFloor(config, context) {
1837
1835
  if (!config.enabled) return skipped("disabled");
1838
1836
  var positions = Array.isArray(config.allowedPositions) ? config.allowedPositions : [];
1839
1837
  if (positions.indexOf(context.position) === -1) return skipped("position_not_allowed");
1840
- if (context.isCtv) return skipped("ctv_excluded");
1841
1838
  if (!config.targetingKey) return skipped("missing_targeting_key");
1842
1839
  if (!config.targetAdUnitPath) return skipped("missing_target_ad_unit");
1843
1840
  var result;
@@ -1991,16 +1988,81 @@ function mergeDefined(target, update) {
1991
1988
  }
1992
1989
  return copyConfig(next);
1993
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
+ }
1994
2030
  var FloorLadderController = /*#__PURE__*/ function() {
1995
2031
  "use strict";
1996
- function FloorLadderController(initial, bounds) {
1997
- 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;
1998
2034
  _class_call_check(this, FloorLadderController);
1999
- this.config = mergeDefined(copyConfig(DEFAULT_WEB_FLOOR_LADDER_CONFIG), initial);
2000
- this.bounds = Object.freeze(resolveFloorLadderBounds(bounds));
2035
+ this.bounds = DEFAULT_FLOOR_LADDER_BOUNDS;
2036
+ this.config = copyConfig(DISABLED_FLOOR_LADDER_CONFIG);
2001
2037
  this.selector = selector;
2002
2038
  }
2003
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
+ },
2004
2066
  {
2005
2067
  key: "get",
2006
2068
  value: function get() {
@@ -2013,13 +2075,6 @@ var FloorLadderController = /*#__PURE__*/ function() {
2013
2075
  return _object_spread({}, this.bounds);
2014
2076
  }
2015
2077
  },
2016
- {
2017
- key: "update",
2018
- value: function update(update) {
2019
- this.config = mergeDefined(this.config, update);
2020
- return validateFloorLadderConfig(this.config, this.bounds);
2021
- }
2022
- },
2023
2078
  {
2024
2079
  key: "validate",
2025
2080
  value: function validate() {
@@ -6281,6 +6336,9 @@ function resolvePlayerIdentitySeed(clientInfo) {
6281
6336
  }
6282
6337
  return "fingerprint:".concat(JSON.stringify(clientInfo));
6283
6338
  }
6339
+ function getCachedBrowserId() {
6340
+ return cachedBrowserId !== null && cachedBrowserId !== void 0 ? cachedBrowserId : void 0;
6341
+ }
6284
6342
  function getBrowserID(clientInfo) {
6285
6343
  return _async_to_generator(function() {
6286
6344
  return _ts_generator(this, function(_state) {
@@ -7955,7 +8013,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
7955
8013
  key: "fetchAdConfiguration",
7956
8014
  value: function fetchAdConfiguration() {
7957
8015
  return _async_to_generator(function() {
7958
- 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;
7959
8017
  return _ts_generator(this, function(_state) {
7960
8018
  switch(_state.label){
7961
8019
  case 0:
@@ -8015,7 +8073,21 @@ var AdConfigManager = /*#__PURE__*/ function() {
8015
8073
  ];
8016
8074
  case 4:
8017
8075
  data = _state.sent();
8018
- 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;
8019
8091
  if (imaPayload) {
8020
8092
  decodedPayload = imaPayload;
8021
8093
  try {
@@ -8033,7 +8105,7 @@ var AdConfigManager = /*#__PURE__*/ function() {
8033
8105
  console.warn("[StormcloudVideoPlayer] No VAST tag URL found in /ads/web response");
8034
8106
  }
8035
8107
  }
8036
- 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;
8037
8109
  if (numberAds != null && numberAds > 0) {
8038
8110
  this.apiNumberAds = numberAds;
8039
8111
  if (this.debug) {
@@ -9870,7 +9942,23 @@ function resolveEdgePodBaseUrl(config) {
9870
9942
  return void 0;
9871
9943
  }
9872
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
+ }
9873
9960
  function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9961
+ var context = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {};
9874
9962
  var url = new URL(baseUrl);
9875
9963
  var maxMs = Math.max(0, Math.floor(remainingMs));
9876
9964
  var maxAds = Math.max(1, Math.min(EDGE_POD_MAX_ADS, Math.floor(remainingAdLimit)));
@@ -9878,6 +9966,16 @@ function buildEdgePodUrl(baseUrl, remainingMs, remainingAdLimit) {
9878
9966
  url.searchParams.set("pmad", String(maxAds));
9879
9967
  url.searchParams.set("duration", String(Math.floor(maxMs / 1e3)));
9880
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);
9881
9979
  return url.toString();
9882
9980
  }
9883
9981
  function classifyEdgeVastResponse(result) {
@@ -10766,7 +10864,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
10766
10864
  return void 0;
10767
10865
  }
10768
10866
  try {
10769
- 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
+ }));
10770
10873
  } catch (unused) {
10771
10874
  this.markEdgeExhausted("invalid_edge_url");
10772
10875
  return void 0;
@@ -12277,14 +12380,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12277
12380
  this.config = _object_spread({}, browserOverrides, config);
12278
12381
  this.video = config.videoElement;
12279
12382
  logBrowserInfo(config.debugAdTiming);
12280
- var floorBounds = {};
12281
- if (this.config.adFloorMinCents != null) floorBounds.minCents = this.config.adFloorMinCents;
12282
- if (this.config.adFloorMaxCents != null) floorBounds.maxCents = this.config.adFloorMaxCents;
12283
- if (this.config.adFloorStepCents != null) floorBounds.stepCents = this.config.adFloorStepCents;
12284
- this.floorLadder = new FloorLadderController(this.config.adFloorLadder, floorBounds);
12285
- this.floorLadderEnabled = this.config.adFloorLadderEnabled === true;
12286
- this.warnOnInvalidFloorLadder(this.floorLadder.validate());
12287
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12383
+ this.floorLadder = new FloorLadderController();
12288
12384
  this.adPlayer = this.createAdPlayer(false);
12289
12385
  this.palNonce = createPalNonceManager();
12290
12386
  this.cueManager = new Scte35CueManager(!!this.config.debugAdTiming, {
@@ -12391,9 +12487,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12391
12487
  return _this.edgePodBaseUrl;
12392
12488
  },
12393
12489
  getFloorSnapshot: function getFloorSnapshot(position) {
12394
- return _this.floorLadderEnabled ? _this.floorLadder.snapshotFor({
12395
- position: position,
12396
- isCtv: _this.isCtvEnvironment()
12490
+ return _this.floorLadder.isEnabled() ? _this.floorLadder.snapshotFor({
12491
+ position: position
12397
12492
  }) : void 0;
12398
12493
  },
12399
12494
  onAdClick: function onAdClick() {
@@ -12430,45 +12525,42 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12430
12525
  }
12431
12526
  },
12432
12527
  {
12433
- key: "isCtvEnvironment",
12434
- value: function isCtvEnvironment() {
12435
- if (this.config.ctvAdRequest) return true;
12436
- var hint = inferDeviceTypeHint(false);
12437
- return hint === DEVICE_TYPE_HINT.CONNECTED_TV || hint === DEVICE_TYPE_HINT.SET_TOP_BOX;
12438
- }
12439
- },
12440
- {
12441
- key: "setAdFloorLadder",
12442
- value: function setAdFloorLadder(update) {
12443
- 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);
12444
12536
  this.warnOnInvalidFloorLadder(report);
12445
- return report;
12446
- }
12447
- },
12448
- {
12449
- key: "setAdFloorLadderEnabled",
12450
- value: function setAdFloorLadderEnabled(enabled) {
12451
- this.floorLadderEnabled = enabled;
12452
- 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
+ }
12453
12544
  }
12454
12545
  },
12455
12546
  {
12456
12547
  key: "isAdFloorLadderEnabled",
12457
12548
  value: function isAdFloorLadderEnabled() {
12458
- return this.floorLadderEnabled;
12549
+ return this.floorLadder.isEnabled();
12459
12550
  }
12460
12551
  },
12461
12552
  {
12462
- key: "setEdgePodRequest",
12463
- value: function setEdgePodRequest(update) {
12464
- if (update.enableEdgePodRequest === this.config.enableEdgePodRequest && update.edgePodUrl === this.config.edgePodUrl) {
12465
- 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)");
12466
12563
  }
12467
- if (update.enableEdgePodRequest === void 0) delete this.config.enableEdgePodRequest;
12468
- else this.config.enableEdgePodRequest = update.enableEdgePodRequest;
12469
- if (update.edgePodUrl === void 0) delete this.config.edgePodUrl;
12470
- else this.config.edgePodUrl = update.edgePodUrl;
12471
- this.edgePodBaseUrl = resolveEdgePodBaseUrl(this.config);
12472
12564
  }
12473
12565
  },
12474
12566
  {
@@ -12481,7 +12573,7 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12481
12573
  key: "warnOnInvalidFloorLadder",
12482
12574
  value: function warnOnInvalidFloorLadder(report) {
12483
12575
  var config = this.floorLadder.get();
12484
- if (report.ok || !this.floorLadderEnabled || !config.enabled) return;
12576
+ if (report.ok || !config.enabled) return;
12485
12577
  console.warn("[AdBreak][FLOOR] configuration has issues; invalid floors will not be sent", {
12486
12578
  errors: report.errors,
12487
12579
  configurationVersion: config.configurationVersion,
@@ -12556,6 +12648,8 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
12556
12648
  4
12557
12649
  ];
12558
12650
  case 4:
12651
+ this.applyFloorLadderFromApi();
12652
+ this.applyEdgePodFromApi();
12559
12653
  palDescriptionUrl = this.config.ctvAdRequest ? this.adConfig.getPalDescriptionUrl() : void 0;
12560
12654
  fetchConsentSignals().catch(function() {
12561
12655
  return {};
@@ -13309,15 +13403,12 @@ var CRITICAL_PROPS = [
13309
13403
  "vmapUrl",
13310
13404
  "lowLatencyMode",
13311
13405
  "driftToleranceMs",
13312
- "ctvAdRequest",
13313
- "adFloorMinCents",
13314
- "adFloorMaxCents",
13315
- "adFloorStepCents"
13406
+ "ctvAdRequest"
13316
13407
  ];
13317
13408
  var CONTROLS_HIDE_DELAY = 3e3;
13318
13409
  var DEFAULT_PLAYER_ASPECT_RATIO = 16 / 9;
13319
13410
  var StormcloudVideoPlayerComponent = React.memo(function(props) {
13320
- 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, [
13321
13412
  "src",
13322
13413
  "autoplay",
13323
13414
  "muted",
@@ -13354,19 +13445,10 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13354
13445
  "minRemainingMsToStartAd",
13355
13446
  "minRemainingMsToRequestAd",
13356
13447
  "maxNoFillsPerBreak",
13357
- "maxAdBreakExtensionMs",
13358
- "adFloorLadderEnabled",
13359
- "adFloorLadder",
13360
- "adFloorMinCents",
13361
- "adFloorMaxCents",
13362
- "adFloorStepCents",
13363
- "enableEdgePodRequest",
13364
- "edgePodUrl"
13448
+ "maxAdBreakExtensionMs"
13365
13449
  ]);
13366
- var adFloorLadderKey = JSON.stringify(adFloorLadder !== null && adFloorLadder !== void 0 ? adFloorLadder : null);
13367
13450
  var videoRef = useRef(null);
13368
13451
  var playerRef = useRef(null);
13369
- var appliedFloorLadderKeyRef = useRef(null);
13370
13452
  var bufferingTimeoutRef = useRef(null);
13371
13453
  var controlsTimerRef = useRef(null);
13372
13454
  var wrapperRef = useRef(null);
@@ -13508,10 +13590,7 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13508
13590
  isVmap,
13509
13591
  vmapUrl,
13510
13592
  lowLatencyMode,
13511
- driftToleranceMs,
13512
- adFloorMinCents,
13513
- adFloorMaxCents,
13514
- adFloorStepCents
13593
+ driftToleranceMs
13515
13594
  ]);
13516
13595
  useEffect(function() {
13517
13596
  if (typeof window === "undefined") return;
@@ -13562,16 +13641,8 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13562
13641
  if (minRemainingMsToRequestAd !== void 0) cfg.minRemainingMsToRequestAd = minRemainingMsToRequestAd;
13563
13642
  if (maxNoFillsPerBreak !== void 0) cfg.maxNoFillsPerBreak = maxNoFillsPerBreak;
13564
13643
  if (maxAdBreakExtensionMs !== void 0) cfg.maxAdBreakExtensionMs = maxAdBreakExtensionMs;
13565
- if (adFloorLadderEnabled !== void 0) cfg.adFloorLadderEnabled = adFloorLadderEnabled;
13566
- if (adFloorLadder !== void 0) cfg.adFloorLadder = adFloorLadder;
13567
- if (adFloorMinCents !== void 0) cfg.adFloorMinCents = adFloorMinCents;
13568
- if (adFloorMaxCents !== void 0) cfg.adFloorMaxCents = adFloorMaxCents;
13569
- if (adFloorStepCents !== void 0) cfg.adFloorStepCents = adFloorStepCents;
13570
- if (enableEdgePodRequest !== void 0) cfg.enableEdgePodRequest = enableEdgePodRequest;
13571
- if (edgePodUrl !== void 0) cfg.edgePodUrl = edgePodUrl;
13572
13644
  var player = new StormcloudVideoPlayer(cfg);
13573
13645
  playerRef.current = player;
13574
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13575
13646
  player.load().then(function() {
13576
13647
  var showNative = player.shouldShowNativeControls();
13577
13648
  setShouldShowNativeControls(showNative);
@@ -13609,33 +13680,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
13609
13680
  autoplay,
13610
13681
  muted
13611
13682
  ]);
13612
- useEffect(function() {
13613
- if (!playerRef.current || adFloorLadder === void 0) return;
13614
- if (appliedFloorLadderKeyRef.current === adFloorLadderKey) return;
13615
- appliedFloorLadderKeyRef.current = adFloorLadderKey;
13616
- playerRef.current.setAdFloorLadder(adFloorLadder);
13617
- }, [
13618
- adFloorLadderKey
13619
- ]);
13620
- useEffect(function() {
13621
- if (!playerRef.current) return;
13622
- var enabled = adFloorLadderEnabled === true;
13623
- if (playerRef.current.isAdFloorLadderEnabled() === enabled) return;
13624
- playerRef.current.setAdFloorLadderEnabled(enabled);
13625
- }, [
13626
- adFloorLadderEnabled
13627
- ]);
13628
- useEffect(function() {
13629
- if (!playerRef.current) return;
13630
- playerRef.current.setEdgePodRequest(_object_spread({}, enableEdgePodRequest !== void 0 ? {
13631
- enableEdgePodRequest: enableEdgePodRequest
13632
- } : {}, edgePodUrl !== void 0 ? {
13633
- edgePodUrl: edgePodUrl
13634
- } : {}));
13635
- }, [
13636
- enableEdgePodRequest,
13637
- edgePodUrl
13638
- ]);
13639
13683
  useEffect(function() {
13640
13684
  if (!playerRef.current) return;
13641
13685
  var checkAdStatus = function checkAdStatus() {
@@ -14625,7 +14669,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
14625
14669
  ]
14626
14670
  });
14627
14671
  }, function(prevProps, nextProps) {
14628
- var _prevProps_adFloorLadder, _nextProps_adFloorLadder;
14629
14672
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
14630
14673
  try {
14631
14674
  for(var _iterator = CRITICAL_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
@@ -14712,12 +14755,6 @@ var StormcloudVideoPlayerComponent = React.memo(function(props) {
14712
14755
  }
14713
14756
  }
14714
14757
  }
14715
- if (prevProps.adFloorLadderEnabled !== nextProps.adFloorLadderEnabled || prevProps.enableEdgePodRequest !== nextProps.enableEdgePodRequest || prevProps.edgePodUrl !== nextProps.edgePodUrl) {
14716
- return false;
14717
- }
14718
- 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)) {
14719
- return false;
14720
- }
14721
14758
  return true;
14722
14759
  });
14723
14760
  // src/StormcloudPlayer.tsx
@@ -15891,5 +15928,5 @@ var createStormcloudPlayer = function createStormcloudPlayer(playerList, fallbac
15891
15928
  };
15892
15929
  var StormcloudPlayer = createStormcloudPlayer(players_default, players_default[players_default.length - 1]);
15893
15930
  var StormcloudPlayer_default = StormcloudPlayer;
15894
- 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 };
15895
15932
  //# sourceMappingURL=index.js.map