stormcloud-video-player 0.2.12 → 0.2.14

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 (38) hide show
  1. package/README.md +100 -1
  2. package/dist/stormcloud-vp.min.js +2 -2
  3. package/lib/index.cjs +1206 -151
  4. package/lib/index.cjs.map +1 -1
  5. package/lib/index.d.cts +77 -2
  6. package/lib/index.d.ts +77 -2
  7. package/lib/index.js +1196 -151
  8. package/lib/index.js.map +1 -1
  9. package/lib/player/StormcloudVideoPlayer.cjs +1100 -114
  10. package/lib/player/StormcloudVideoPlayer.cjs.map +1 -1
  11. package/lib/player/StormcloudVideoPlayer.d.cts +2 -2
  12. package/lib/players/FilePlayer.cjs +14 -7
  13. package/lib/players/FilePlayer.cjs.map +1 -1
  14. package/lib/players/HlsPlayer.cjs +1108 -119
  15. package/lib/players/HlsPlayer.cjs.map +1 -1
  16. package/lib/players/HlsPlayer.d.cts +1 -1
  17. package/lib/players/index.cjs +1122 -126
  18. package/lib/players/index.cjs.map +1 -1
  19. package/lib/sdk/hlsAdPlayer.cjs +561 -0
  20. package/lib/sdk/hlsAdPlayer.cjs.map +1 -0
  21. package/lib/sdk/hlsAdPlayer.d.cts +10 -0
  22. package/lib/sdk/ima.cjs +176 -23
  23. package/lib/sdk/ima.cjs.map +1 -1
  24. package/lib/sdk/ima.d.cts +1 -1
  25. package/lib/{types-GpA_hKek.d.cts → types-mVgmKmzM.d.cts} +3 -0
  26. package/lib/ui/StormcloudVideoPlayer.cjs +1107 -119
  27. package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
  28. package/lib/ui/StormcloudVideoPlayer.d.cts +1 -1
  29. package/lib/utils/browserCompat.cjs +229 -0
  30. package/lib/utils/browserCompat.cjs.map +1 -0
  31. package/lib/utils/browserCompat.d.cts +36 -0
  32. package/lib/utils/polyfills.cjs +253 -0
  33. package/lib/utils/polyfills.cjs.map +1 -0
  34. package/lib/utils/polyfills.d.cts +11 -0
  35. package/lib/utils/tracking.cjs +10 -9
  36. package/lib/utils/tracking.cjs.map +1 -1
  37. package/lib/utils/tracking.d.cts +1 -1
  38. package/package.json +1 -1
package/lib/index.d.cts CHANGED
@@ -1,5 +1,6 @@
1
1
  import React, { CSSProperties, lazy as lazy$1 } from 'react';
2
2
  import * as csstype from 'csstype';
3
+ import Hls from 'hls.js';
3
4
 
4
5
  type LateJoinPolicy = "play_remaining" | "skip_to_content";
5
6
  interface AdBreak {
@@ -28,6 +29,28 @@ interface StormcloudVideoPlayerConfig {
28
29
  onFullscreenToggle?: () => void;
29
30
  onControlClick?: () => void;
30
31
  licenseKey?: string;
32
+ adPlayerType?: 'ima' | 'hls';
33
+ vastTagUrl?: string;
34
+ vastMode?: 'adstorm' | 'default';
35
+ }
36
+ interface ImaController {
37
+ initialize: () => void;
38
+ requestAds: (vastTagUrl: string) => Promise<void>;
39
+ play: () => Promise<void>;
40
+ stop: () => Promise<void>;
41
+ destroy: () => void;
42
+ isAdPlaying: () => boolean;
43
+ resize: (width: number, height: number) => void;
44
+ on: (event: string, listener: (payload?: any) => void) => void;
45
+ off: (event: string, listener: (payload?: any) => void) => void;
46
+ updateOriginalMutedState: (muted: boolean) => void;
47
+ getOriginalMutedState: () => boolean;
48
+ setAdVolume: (volume: number) => void;
49
+ getAdVolume: () => number;
50
+ }
51
+ interface ImaControllerOptions {
52
+ maxRetries?: number;
53
+ backoffBaseMs?: number;
31
54
  }
32
55
  interface ClientInfo {
33
56
  brand: string;
@@ -85,7 +108,6 @@ declare class StormcloudVideoPlayer {
85
108
  private ptsDriftEmaMs;
86
109
  private adPodQueue;
87
110
  private apiVastTagUrl;
88
- private vastConfig;
89
111
  private lastHeartbeatTime;
90
112
  private heartbeatInterval;
91
113
  private currentAdIndex;
@@ -93,6 +115,7 @@ declare class StormcloudVideoPlayer {
93
115
  private showAds;
94
116
  private isLiveStream;
95
117
  constructor(config: StormcloudVideoPlayerConfig);
118
+ private createAdPlayer;
96
119
  load(): Promise<void>;
97
120
  private attach;
98
121
  private shouldUseNativeHls;
@@ -3744,4 +3767,56 @@ declare function getBrowserID(clientInfo: ClientInfo): Promise<string>;
3744
3767
  declare function sendInitialTracking(licenseKey?: string): Promise<void>;
3745
3768
  declare function sendHeartbeat(licenseKey?: string): Promise<void>;
3746
3769
 
3747
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, getBrowserID, getClientInfo, isMediaStream, lazy, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsWebKitPresentationMode };
3770
+ declare function initializePolyfills(): void;
3771
+
3772
+ interface NavigatorUAData {
3773
+ platform?: string;
3774
+ brands?: Array<{
3775
+ brand: string;
3776
+ version: string;
3777
+ }>;
3778
+ mobile?: boolean;
3779
+ }
3780
+ declare global {
3781
+ interface Navigator {
3782
+ userAgentData?: NavigatorUAData;
3783
+ }
3784
+ }
3785
+ interface BrowserInfo {
3786
+ name: string;
3787
+ version: string;
3788
+ majorVersion: number;
3789
+ isSmartTV: boolean;
3790
+ isLegacyTV: boolean;
3791
+ platform: string;
3792
+ supportsIMA: boolean;
3793
+ supportsModernJS: boolean;
3794
+ recommendedAdPlayer: 'ima' | 'hls';
3795
+ }
3796
+ declare function detectBrowser(): BrowserInfo;
3797
+ declare function supportsGoogleIMA(): boolean;
3798
+ declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3799
+ declare function supportsModernJS(): boolean;
3800
+ declare function logBrowserInfo(debug?: boolean): void;
3801
+ declare function getBrowserConfigOverrides(): {
3802
+ adPlayerType?: 'ima' | 'hls';
3803
+ allowNativeHls?: boolean;
3804
+ };
3805
+ declare function supportsFeature(feature: string): boolean;
3806
+
3807
+ declare global {
3808
+ interface Window {
3809
+ google?: any;
3810
+ }
3811
+ }
3812
+ declare function createImaController(video: HTMLVideoElement, options?: {
3813
+ continueLiveStreamDuringAds?: boolean;
3814
+ }): ImaController;
3815
+
3816
+ declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3817
+ continueLiveStreamDuringAds?: boolean;
3818
+ licenseKey?: string;
3819
+ mainHlsInstance?: Hls;
3820
+ }): ImaController;
3821
+
3822
+ export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createHlsAdPlayer, createImaController, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, getRecommendedAdPlayer, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsGoogleIMA, supportsModernJS, supportsWebKitPresentationMode };
package/lib/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import React, { CSSProperties, lazy as lazy$1 } from 'react';
2
2
  import * as csstype from 'csstype';
3
+ import Hls from 'hls.js';
3
4
 
4
5
  type LateJoinPolicy = "play_remaining" | "skip_to_content";
5
6
  interface AdBreak {
@@ -28,6 +29,28 @@ interface StormcloudVideoPlayerConfig {
28
29
  onFullscreenToggle?: () => void;
29
30
  onControlClick?: () => void;
30
31
  licenseKey?: string;
32
+ adPlayerType?: 'ima' | 'hls';
33
+ vastTagUrl?: string;
34
+ vastMode?: 'adstorm' | 'default';
35
+ }
36
+ interface ImaController {
37
+ initialize: () => void;
38
+ requestAds: (vastTagUrl: string) => Promise<void>;
39
+ play: () => Promise<void>;
40
+ stop: () => Promise<void>;
41
+ destroy: () => void;
42
+ isAdPlaying: () => boolean;
43
+ resize: (width: number, height: number) => void;
44
+ on: (event: string, listener: (payload?: any) => void) => void;
45
+ off: (event: string, listener: (payload?: any) => void) => void;
46
+ updateOriginalMutedState: (muted: boolean) => void;
47
+ getOriginalMutedState: () => boolean;
48
+ setAdVolume: (volume: number) => void;
49
+ getAdVolume: () => number;
50
+ }
51
+ interface ImaControllerOptions {
52
+ maxRetries?: number;
53
+ backoffBaseMs?: number;
31
54
  }
32
55
  interface ClientInfo {
33
56
  brand: string;
@@ -85,7 +108,6 @@ declare class StormcloudVideoPlayer {
85
108
  private ptsDriftEmaMs;
86
109
  private adPodQueue;
87
110
  private apiVastTagUrl;
88
- private vastConfig;
89
111
  private lastHeartbeatTime;
90
112
  private heartbeatInterval;
91
113
  private currentAdIndex;
@@ -93,6 +115,7 @@ declare class StormcloudVideoPlayer {
93
115
  private showAds;
94
116
  private isLiveStream;
95
117
  constructor(config: StormcloudVideoPlayerConfig);
118
+ private createAdPlayer;
96
119
  load(): Promise<void>;
97
120
  private attach;
98
121
  private shouldUseNativeHls;
@@ -3744,4 +3767,56 @@ declare function getBrowserID(clientInfo: ClientInfo): Promise<string>;
3744
3767
  declare function sendInitialTracking(licenseKey?: string): Promise<void>;
3745
3768
  declare function sendHeartbeat(licenseKey?: string): Promise<void>;
3746
3769
 
3747
- export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, getBrowserID, getClientInfo, isMediaStream, lazy, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsWebKitPresentationMode };
3770
+ declare function initializePolyfills(): void;
3771
+
3772
+ interface NavigatorUAData {
3773
+ platform?: string;
3774
+ brands?: Array<{
3775
+ brand: string;
3776
+ version: string;
3777
+ }>;
3778
+ mobile?: boolean;
3779
+ }
3780
+ declare global {
3781
+ interface Navigator {
3782
+ userAgentData?: NavigatorUAData;
3783
+ }
3784
+ }
3785
+ interface BrowserInfo {
3786
+ name: string;
3787
+ version: string;
3788
+ majorVersion: number;
3789
+ isSmartTV: boolean;
3790
+ isLegacyTV: boolean;
3791
+ platform: string;
3792
+ supportsIMA: boolean;
3793
+ supportsModernJS: boolean;
3794
+ recommendedAdPlayer: 'ima' | 'hls';
3795
+ }
3796
+ declare function detectBrowser(): BrowserInfo;
3797
+ declare function supportsGoogleIMA(): boolean;
3798
+ declare function getRecommendedAdPlayer(): 'ima' | 'hls';
3799
+ declare function supportsModernJS(): boolean;
3800
+ declare function logBrowserInfo(debug?: boolean): void;
3801
+ declare function getBrowserConfigOverrides(): {
3802
+ adPlayerType?: 'ima' | 'hls';
3803
+ allowNativeHls?: boolean;
3804
+ };
3805
+ declare function supportsFeature(feature: string): boolean;
3806
+
3807
+ declare global {
3808
+ interface Window {
3809
+ google?: any;
3810
+ }
3811
+ }
3812
+ declare function createImaController(video: HTMLVideoElement, options?: {
3813
+ continueLiveStreamDuringAds?: boolean;
3814
+ }): ImaController;
3815
+
3816
+ declare function createHlsAdPlayer(contentVideo: HTMLVideoElement, options?: {
3817
+ continueLiveStreamDuringAds?: boolean;
3818
+ licenseKey?: string;
3819
+ mainHlsInstance?: Hls;
3820
+ }): ImaController;
3821
+
3822
+ export { type AdBreak, type AdSchedule, type BaseStormcloudPlayerProps, type BrowserInfo, type ClientInfo, type HeartbeatData, IS_BROWSER, IS_GLOBAL, IS_IOS, IS_SAFARI, type ImaController, type ImaControllerOptions, type LateJoinPolicy, type OnProgressProps, SUPPORTS_DASH, SUPPORTS_HLS, StormcloudPlayer, StormcloudVideoPlayer, StormcloudVideoPlayerComponent, type StormcloudVideoPlayerConfig, type StormcloudVideoPlayerProps, type TrackingData, canPlay, createHlsAdPlayer, createImaController, createStormcloudPlayer, StormcloudVideoPlayerComponent as default, detectBrowser, getBrowserConfigOverrides, getBrowserID, getClientInfo, getRecommendedAdPlayer, initializePolyfills, isMediaStream, lazy, logBrowserInfo, merge, omit, parseQuery, players, randomString, sendHeartbeat, sendInitialTracking, supportsFeature, supportsGoogleIMA, supportsModernJS, supportsWebKitPresentationMode };