stormcloud-video-player 0.8.68 → 0.8.70

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 (42) hide show
  1. package/dist/stormcloud-vp.min.js +2 -2
  2. package/lib/Player.cjs +30 -8
  3. package/lib/Player.cjs.map +1 -1
  4. package/lib/Player.d.cts +2 -1
  5. package/lib/StormcloudPlayer.cjs +6104 -5114
  6. package/lib/StormcloudPlayer.cjs.map +1 -1
  7. package/lib/StormcloudPlayer.d.cts +1 -0
  8. package/lib/index.cjs +6217 -5149
  9. package/lib/index.cjs.map +1 -1
  10. package/lib/index.d.cts +2 -1
  11. package/lib/index.d.ts +93 -2
  12. package/lib/index.js +6199 -5158
  13. package/lib/index.js.map +1 -1
  14. package/lib/player/AdBreakOrchestrator.cjs +669 -131
  15. package/lib/player/AdBreakOrchestrator.cjs.map +1 -1
  16. package/lib/player/AdBreakOrchestrator.d.cts +27 -3
  17. package/lib/player/EdgePodRequest.cjs +136 -0
  18. package/lib/player/EdgePodRequest.cjs.map +1 -0
  19. package/lib/player/EdgePodRequest.d.cts +14 -0
  20. package/lib/player/FloorLadder.cjs +578 -0
  21. package/lib/player/FloorLadder.cjs.map +1 -0
  22. package/lib/player/FloorLadder.d.cts +74 -0
  23. package/lib/player/StormcloudVideoPlayer.cjs +6104 -5114
  24. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  25. package/lib/player/StormcloudVideoPlayer.d.cts +13 -1
  26. package/lib/players/HlsPlayer.cjs +6104 -5114
  27. package/lib/players/HlsPlayer.cjs.map +1 -1
  28. package/lib/players/index.cjs +6104 -5114
  29. package/lib/players/index.cjs.map +1 -1
  30. package/lib/props.cjs +30 -8
  31. package/lib/props.cjs.map +1 -1
  32. package/lib/props.d.cts +1 -0
  33. package/lib/sdk/hlsAdPlayer.cjs +120 -19
  34. package/lib/sdk/hlsAdPlayer.cjs.map +1 -1
  35. package/lib/types.d.cts +30 -2
  36. package/lib/ui/StormcloudVideoPlayer.cjs +6169 -5129
  37. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  38. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
  39. package/lib/utils/vastMacros.cjs +4 -0
  40. package/lib/utils/vastMacros.cjs.map +1 -1
  41. package/lib/utils/vastMacros.d.cts +2 -1
  42. package/package.json +1 -1
package/lib/index.d.cts CHANGED
@@ -1,7 +1,8 @@
1
1
  export { StormcloudVideoPlayerComponent, StormcloudVideoPlayerProps, StormcloudVideoPlayerComponent as default } from './ui/StormcloudVideoPlayer.cjs';
2
2
  export { default as StormcloudPlayer, createStormcloudPlayer } from './StormcloudPlayer.cjs';
3
3
  export { StormcloudVideoPlayer } from './player/StormcloudVideoPlayer.cjs';
4
- export { AdBreak, AdController, AdControllerOptions, AdDetectInfo, AdImpressionInfo, AdLoadedInfo, AdSchedule, ClientInfo, HeartbeatData, ImaController, ImaControllerOptions, LateJoinPolicy, PlayerAnalyticsContext, StormcloudVideoPlayerConfig, TrackingData } from './types.cjs';
4
+ export { AdBreak, AdController, AdControllerOptions, AdDetectInfo, AdFloorLadderConfig, AdImpressionInfo, AdLoadedInfo, AdPosition, AdSchedule, ClientInfo, FloorLadderMode, HeartbeatData, ImaController, ImaControllerOptions, LateJoinPolicy, PlayerAnalyticsContext, StormcloudVideoPlayerConfig, TrackingData } from './types.cjs';
5
+ 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';
5
6
  export { BaseStormcloudPlayerProps, OnProgressProps } from './props.cjs';
6
7
  export { canPlay } from './patterns.cjs';
7
8
  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
@@ -50,10 +50,37 @@ interface StormcloudVideoPlayerConfig {
50
50
  podMaxAds?: number;
51
51
  podMaxDurationMs?: number;
52
52
  podExactDuration?: boolean;
53
+ adFloorLadderEnabled?: boolean;
54
+ adFloorLadder?: Partial<AdFloorLadderConfig>;
55
+ adFloorMinCents?: number;
56
+ adFloorMaxCents?: number;
57
+ adFloorStepCents?: number;
58
+ enableEdgePodRequest?: boolean;
59
+ edgePodUrl?: string;
60
+ }
61
+ type AdPosition = "preroll" | "midroll" | "postroll";
62
+ type FloorLadderMode = "fixed";
63
+ interface AdFloorLadderConfig {
64
+ enabled: boolean;
65
+ targetingKey: string;
66
+ minFloorCents: number;
67
+ maxFloorCents: number;
68
+ stepCents: number;
69
+ selectedFloorCents: number;
70
+ fallbackFloorCents: number;
71
+ readyFloorCents: number[];
72
+ mode: FloorLadderMode;
73
+ allowedPositions: AdPosition[];
74
+ targetAdUnitPath: string;
75
+ configurationVersion: string;
76
+ }
77
+ type AdRequestSource = "gam" | "edge";
78
+ interface AdRequestOptions {
79
+ source?: AdRequestSource;
53
80
  }
54
81
  interface AdController {
55
82
  initialize: () => void;
56
- requestAds: (vastTagUrl: string) => Promise<void>;
83
+ requestAds: (vastTagUrl: string, options?: AdRequestOptions) => Promise<void>;
57
84
  play: () => Promise<void>;
58
85
  pause: () => void;
59
86
  resume: () => void;
@@ -74,6 +101,7 @@ interface AdController {
74
101
  getLoadedAdId?: () => string | undefined;
75
102
  getPodAdCount?: () => number;
76
103
  getPodTotalDurationMs?: () => number;
104
+ limitPodToBudget?: (maxDurationMs: number, maxAds: number) => number;
77
105
  setFunnelContext?: (context: {
78
106
  breakId?: number;
79
107
  requestId?: number;
@@ -160,6 +188,58 @@ interface AdImpressionInfo {
160
188
  timestamp: string;
161
189
  }
162
190
 
191
+ declare const DEFAULT_WEB_FLOOR_LADDER_CONFIG: Readonly<AdFloorLadderConfig>;
192
+ type FloorValidationReason = "not_integer" | "out_of_range" | "not_step_multiple" | "not_ready";
193
+ type FloorValidation = {
194
+ ok: true;
195
+ } | {
196
+ ok: false;
197
+ reason: FloorValidationReason;
198
+ };
199
+ type FloorSource = "selected" | "fallback" | "none";
200
+ /** Levels that have targeting values in GAM; the ladder config can narrow these but never widen them. */
201
+ interface FloorLadderBounds {
202
+ minCents: number;
203
+ maxCents: number;
204
+ stepCents: number;
205
+ }
206
+ declare const DEFAULT_FLOOR_LADDER_BOUNDS: Readonly<FloorLadderBounds>;
207
+ interface FloorSelectionContext {
208
+ position: AdPosition;
209
+ isCtv: boolean;
210
+ bounds: Readonly<FloorLadderBounds>;
211
+ }
212
+ interface FloorSelectorResult {
213
+ floorCents?: number;
214
+ source: FloorSource;
215
+ reason?: string;
216
+ }
217
+ interface FloorSelector {
218
+ readonly name: string;
219
+ select(config: Readonly<AdFloorLadderConfig>, context: FloorSelectionContext): FloorSelectorResult;
220
+ }
221
+ interface OpportunityFloor {
222
+ readonly status: "armed" | "skipped";
223
+ readonly floorCents: number | undefined;
224
+ readonly source: FloorSource;
225
+ readonly reason: string | undefined;
226
+ readonly selector: string;
227
+ readonly position: AdPosition;
228
+ readonly configurationVersion: string;
229
+ readonly targetingKey: string;
230
+ readonly targetAdUnitPath: string;
231
+ }
232
+ interface FloorLadderValidationReport {
233
+ ok: boolean;
234
+ levels: number[];
235
+ errors: string[];
236
+ }
237
+ declare function generateFloorLevels(minCents: number, maxCents: number, stepCents: number): number[];
238
+ declare function resolveFloorLadderBounds(overrides?: Partial<FloorLadderBounds>): FloorLadderBounds;
239
+ declare function validateFloorCents(value: unknown, config: Readonly<AdFloorLadderConfig>, bounds?: Readonly<FloorLadderBounds>): FloorValidation;
240
+ declare function validateFloorLadderConfig(config: Readonly<AdFloorLadderConfig>, bounds?: Readonly<FloorLadderBounds>): FloorLadderValidationReport;
241
+ declare const fixedFloorSelector: FloorSelector;
242
+
163
243
  declare class StormcloudVideoPlayer {
164
244
  private readonly video;
165
245
  private readonly config;
@@ -176,9 +256,20 @@ declare class StormcloudVideoPlayer {
176
256
  private readonly placeholder;
177
257
  private readonly hlsEngine;
178
258
  private readonly adBreak;
259
+ private readonly floorLadder;
260
+ private floorLadderEnabled;
261
+ private readonly edgePodBaseUrl;
179
262
  constructor(config: StormcloudVideoPlayerConfig);
180
263
  private get debug();
181
264
  private createAdPlayer;
265
+ private isCtvEnvironment;
266
+ setAdFloorLadder(update: Partial<AdFloorLadderConfig>): FloorLadderValidationReport;
267
+ setAdFloorLadderEnabled(enabled: boolean): void;
268
+ isAdFloorLadderEnabled(): boolean;
269
+ private warnOnInvalidFloorLadder;
270
+ getAdFloorLadder(): AdFloorLadderConfig;
271
+ getAdFloorBounds(): FloorLadderBounds;
272
+ setAdFloorSelector(selector: FloorSelector): void;
182
273
  private generatePodVastUrl;
183
274
  load(): Promise<void>;
184
275
  private onManifestParsed;
@@ -4041,4 +4132,4 @@ interface PalNonceManager {
4041
4132
  }
4042
4133
  declare function createPalNonceManager(): PalNonceManager;
4043
4134
 
4044
- export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdImpressionInfo, type AdLoadedInfo, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_TRACKING_INGEST_CONFIG, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, 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, getBrowserConfigOverrides, getBrowserID, getClientInfo, ingestPlayerTracking, initializePolyfills, isMediaStream, isTrackingIngestEnabled, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, requiresMediaPipelineResetAfterAds, sendAdDetectTracking, sendAdImpressionTracking, sendAdLoadedTracking, sendHeartbeat, sendInitialTracking, supportsFeature, supportsModernJS, supportsWebKitPresentationMode, trackingIngestConfig };
4135
+ export { type AdBreak, type AdController, type AdControllerOptions, type AdDetectInfo, type AdFloorLadderConfig, type AdImpressionInfo, type AdLoadedInfo, type AdPosition, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, DEFAULT_FLOOR_LADDER_BOUNDS, 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, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, type OpportunityFloor, type PalNonceManager, type PalNonceOptions, type PlayerAnalyticsContext, 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 };