@openplayerjs/ads 3.4.0 → 3.4.2
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.js +6654 -3051
- package/dist/index.js.map +1 -1
- package/dist/openplayer-ads.js +1 -1
- package/dist/openplayer-ads.js.map +1 -1
- package/dist/types/ad-dom.d.ts +1 -1
- package/dist/types/ad-dom.d.ts.map +1 -1
- package/dist/types/ads.d.ts +86 -66
- package/dist/types/ads.d.ts.map +1 -1
- package/dist/types/index.d.ts +33 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/schedule.d.ts +1 -1
- package/dist/types/simid.d.ts +5 -3
- package/dist/types/simid.d.ts.map +1 -1
- package/dist/types/strategies/csai.d.ts +160 -0
- package/dist/types/strategies/csai.d.ts.map +1 -0
- package/dist/types/strategies/hybrid.d.ts +24 -0
- package/dist/types/strategies/hybrid.d.ts.map +1 -0
- package/dist/types/strategies/scte35.d.ts +28 -0
- package/dist/types/strategies/scte35.d.ts.map +1 -0
- package/dist/types/strategies/ssai.d.ts +37 -0
- package/dist/types/strategies/ssai.d.ts.map +1 -0
- package/dist/types/types.d.ts +131 -2
- package/dist/types/types.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/types/ad-dom.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export declare class AdDomManager {
|
|
|
16
16
|
private resolvedNonLinearContainer?;
|
|
17
17
|
private resolvedCompanionContainer?;
|
|
18
18
|
private sessionUnsubs;
|
|
19
|
-
constructor(overlay: HTMLDivElement, cfg: Pick<AdsPluginConfig, 'nonLinearContainer' | 'nonLinearSelector' | 'companionContainer' | 'companionSelector' | 'mountEl' | 'mountSelector'>, getAdVideo: () => HTMLVideoElement | undefined, getTracker: () => any, onSkipCallback: SkipCallback);
|
|
19
|
+
constructor(overlay: HTMLDivElement, cfg: Pick<AdsPluginConfig, 'nonLinearContainer' | 'nonLinearSelector' | 'companionContainer' | 'companionSelector' | 'mountEl' | 'mountSelector' | 'labels'>, getAdVideo: () => HTMLVideoElement | undefined, getTracker: () => any, onSkipCallback: SkipCallback);
|
|
20
20
|
addSessionUnsub(fn: () => void): void;
|
|
21
21
|
clearSession(): void;
|
|
22
22
|
resolveContainer(el?: HTMLElement, selector?: string): HTMLElement | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ad-dom.d.ts","sourceRoot":"","sources":["../../src/ad-dom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,QAkD1D;AAED,KAAK,YAAY,GAAG,MAAM,IAAI,CAAC;AAE/B,qBAAa,YAAY;IAerB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,GAAG;
|
|
1
|
+
{"version":3,"file":"ad-dom.d.ts","sourceRoot":"","sources":["../../src/ad-dom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C,wBAAgB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,QAkD1D;AAED,KAAK,YAAY,GAAG,MAAM,IAAI,CAAC;AAE/B,qBAAa,YAAY;IAerB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,cAAc;IA3BxB,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAClC,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,cAAc,CAAC;IAC/B,aAAa,CAAC,EAAE,cAAc,CAAC;IAE/B,OAAO,CAAC,0BAA0B,CAAC,CAAc;IACjD,OAAO,CAAC,0BAA0B,CAAC,CAAc;IAEjD,OAAO,CAAC,aAAa,CAAsB;gBAGjC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,IAAI,CACf,eAAe,EACb,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,mBAAmB,GACnB,SAAS,GACT,eAAe,GACf,QAAQ,CACX,EACO,UAAU,EAAE,MAAM,gBAAgB,GAAG,SAAS,EAC9C,UAAU,EAAE,MAAM,GAAG,EACrB,cAAc,EAAE,YAAY;IAKtC,eAAe,CAAC,EAAE,EAAE,MAAM,IAAI;IAI9B,YAAY;IAQZ,gBAAgB,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAS9E,qBAAqB,IAAI,WAAW,GAAG,SAAS;IAMhD,qBAAqB,IAAI,WAAW,GAAG,SAAS;IAMhD,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,WAAW;IASlD,oBAAoB,CAAC,KAAK,EAAE,gBAAgB;IAiB5C,WAAW,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM;IAoDzC,cAAc,CAAC,MAAM,EAAE,MAAM;IAY7B,OAAO,CAAC,aAAa;IAuBrB,UAAU;IAMV,qBAAqB,CAAC,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI;IAoCjH,WAAW,CACT,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,EAClC,OAAO,EAAE,gBAAgB,GAAG,SAAS,EACrC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EAC/D,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAC7B,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI;IAgC5B,eAAe;IAaf,eAAe,CAAC,QAAQ,EAAE,GAAG;IA8B7B,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,WAAW,GAAG,IAAI;IAwEnD,iCAAiC,CAAC,EAAE,EAAE,GAAG,GAAG,MAAM;IAgBlD,kBAAkB;IAmBlB,eAAe,CAAC,EAAE,EAAE,GAAG,GAAG,WAAW,GAAG,IAAI;IA8D5C,cAAc,CAAC,QAAQ,EAAE,GAAG;IAoB5B,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB;CAyBjD"}
|
package/dist/types/ads.d.ts
CHANGED
|
@@ -1,67 +1,89 @@
|
|
|
1
1
|
import type { PlayerPlugin, PluginContext } from '@openplayerjs/core';
|
|
2
|
-
import type { AdsBreakConfig, AdsEvent, AdsPluginConfig, AdsSource, AdsSourceType
|
|
2
|
+
import type { AdsBreakConfig, AdsEvent, AdsPluginConfig, AdsSource, AdsSourceType } from './types';
|
|
3
3
|
export type { AdsBreakConfig, AdsEvent, AdsPluginConfig, AdsSource, AdsSourceType };
|
|
4
|
+
/**
|
|
5
|
+
* `AdsPlugin` — thin dispatcher for ad delivery strategies.
|
|
6
|
+
*
|
|
7
|
+
* Selects an `AdSessionStrategy` based on `config.adDelivery` and delegates
|
|
8
|
+
* all lifecycle calls to it. Strategy selection:
|
|
9
|
+
*
|
|
10
|
+
* | `adDelivery` value | Strategy | Description |
|
|
11
|
+
* |--------------------|----------|-------------|
|
|
12
|
+
* | `'csai'` (default) | `CsaiAdStrategy` | Client-side insertion — fetches VAST/VMAP, renders an ad `<video>` |
|
|
13
|
+
* | `'ssai'` | `SsaiAdStrategy` | Server-side stitching — detects boundaries via SCTE-35 TextTrack cues |
|
|
14
|
+
* | `'hybrid'` | `HybridAdStrategy` | CSAI triggered by SCTE-35 OUT cues from the HLS engine |
|
|
15
|
+
*
|
|
16
|
+
* Auto-selection: if `scteSource` or `hybrid.scteSource` is provided without
|
|
17
|
+
* an explicit `adDelivery`, the mode defaults to `'hybrid'`.
|
|
18
|
+
*
|
|
19
|
+
* @example CSAI with preroll
|
|
20
|
+
* ```ts
|
|
21
|
+
* new AdsPlugin({
|
|
22
|
+
* breaks: [{ at: 'preroll', source: { type: 'VAST', src: 'https://example.com/vast.xml' } }],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example SSAI with event sink
|
|
27
|
+
* ```ts
|
|
28
|
+
* new AdsPlugin({
|
|
29
|
+
* adDelivery: 'ssai',
|
|
30
|
+
* ssai: { eventSink: (e) => console.log(e.type, e.breakId) },
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example Hybrid CSAI + SCTE-35
|
|
35
|
+
* ```ts
|
|
36
|
+
* new AdsPlugin({
|
|
37
|
+
* adDelivery: 'hybrid',
|
|
38
|
+
* hybrid: {
|
|
39
|
+
* scteSource: hlsEngine,
|
|
40
|
+
* resolveScteUrl: (cue) => `https://ads.example.com/vast?id=${cue.id}`,
|
|
41
|
+
* },
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
4
45
|
export declare class AdsPlugin implements PlayerPlugin {
|
|
5
46
|
name: string;
|
|
6
47
|
version: string;
|
|
7
48
|
capabilities: string[];
|
|
8
|
-
private
|
|
9
|
-
private
|
|
10
|
-
private
|
|
11
|
-
private overlayId;
|
|
12
|
-
private adEndPromise;
|
|
13
|
-
private cfg;
|
|
14
|
-
private overlay;
|
|
15
|
-
private adVideo?;
|
|
16
|
-
private currentBreakMeta?;
|
|
17
|
-
private vastClient;
|
|
18
|
-
private tracker?;
|
|
19
|
-
private globalUnsubs;
|
|
20
|
-
private sessionUnsubs;
|
|
21
|
-
private active;
|
|
22
|
-
private resumeAfter;
|
|
23
|
-
private contentMedia?;
|
|
24
|
-
private contentHadControls;
|
|
25
|
-
private startingBreak;
|
|
26
|
-
private userPlayIntent;
|
|
27
|
-
private forcedMuteUntilInteraction;
|
|
28
|
-
private syncingVolume;
|
|
29
|
-
private scheduler;
|
|
30
|
-
private captionMgr;
|
|
31
|
-
private _dom?;
|
|
32
|
-
private get dom();
|
|
33
|
-
private set dom(value);
|
|
34
|
-
private simidSession?;
|
|
35
|
-
private omidSession?;
|
|
49
|
+
private readonly rawConfig;
|
|
50
|
+
private strategy?;
|
|
51
|
+
private scteUnsub?;
|
|
36
52
|
constructor(config?: AdsPluginConfig);
|
|
37
53
|
setup(ctx: PluginContext): void;
|
|
38
54
|
playAds(vastUrl: string): Promise<boolean>;
|
|
39
55
|
playAdsFromXml(vastXml: string): Promise<boolean>;
|
|
40
56
|
getDueMidrollBreaks(currentTime: number): AdsBreakConfig[];
|
|
41
57
|
getDueMidrollBreak(currentTime: number): AdsBreakConfig | undefined;
|
|
58
|
+
requestSkip(reason?: 'button' | 'close' | 'api'): void;
|
|
42
59
|
destroy(): void;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
private bindScteSource;
|
|
61
|
+
private get csai();
|
|
62
|
+
private _lazyDom?;
|
|
63
|
+
private get lazyDom();
|
|
64
|
+
/** @internal */ get bus(): import("./types").PluginBus<AdsEvent> | undefined;
|
|
65
|
+
/** @internal */ get tracker(): any;
|
|
66
|
+
/** @internal */ get active(): boolean | undefined;
|
|
67
|
+
/** @internal */ set active(v: boolean | undefined);
|
|
68
|
+
/** @internal */ get overlay(): HTMLDivElement | undefined;
|
|
69
|
+
/** @internal */ get ctx(): PluginContext | undefined;
|
|
70
|
+
/** @internal */ get sessionUnsubs(): (() => void)[] | undefined;
|
|
71
|
+
/** @internal */ set sessionUnsubs(v: (() => void)[] | undefined);
|
|
72
|
+
/** @internal */ get resumeAfter(): boolean | undefined;
|
|
73
|
+
/** @internal */ get globalUnsubs(): (() => void)[];
|
|
74
|
+
/** @internal */ get adVideo(): HTMLVideoElement | undefined;
|
|
75
|
+
/** @internal */ set adVideo(v: HTMLVideoElement | undefined);
|
|
76
|
+
/** @internal */ get forcedMuteUntilInteraction(): boolean;
|
|
77
|
+
/** @internal */ set forcedMuteUntilInteraction(v: boolean);
|
|
78
|
+
/** @internal */ clearSession(): void | undefined;
|
|
79
|
+
/** @internal */ startAdPlayback(): void | undefined;
|
|
80
|
+
/** @internal */ mountAdVideo(...args: any[]): any;
|
|
81
|
+
/** @internal */ get vastClient(): any;
|
|
82
|
+
/** @internal */ set vastClient(v: any);
|
|
83
|
+
/** @internal */ shouldInterceptPreroll(): boolean | undefined;
|
|
84
|
+
/** @internal */ startBreak(...args: any[]): Promise<void> | undefined;
|
|
85
|
+
/** @internal */ startBreakGroup(...args: any[]): Promise<void> | undefined;
|
|
86
|
+
/** @internal */ playBreakFromVast(...args: any[]): Promise<boolean>;
|
|
65
87
|
/** @internal */ getVastXmlText(input: any): Promise<string>;
|
|
66
88
|
/** @internal */ normalizeVmapAdSource(adSource: any): any;
|
|
67
89
|
/** @internal */ extractVastTagUri(adTagURI: any): string | undefined;
|
|
@@ -70,7 +92,7 @@ export declare class AdsPlugin implements PlayerPlugin {
|
|
|
70
92
|
pendingPercent?: number | null;
|
|
71
93
|
};
|
|
72
94
|
/** @internal */ getVastInputFromBreak(b: AdsBreakConfig): {
|
|
73
|
-
input?: VastInput;
|
|
95
|
+
input?: import("./types").VastInput;
|
|
74
96
|
sourceType?: AdsSourceType;
|
|
75
97
|
};
|
|
76
98
|
/** @internal */ setSafeHTML(el: HTMLElement, html: string): void;
|
|
@@ -86,24 +108,22 @@ export declare class AdsPlugin implements PlayerPlugin {
|
|
|
86
108
|
/** @internal */ collectPodAds(parsed: any): import("./types").PodAd[];
|
|
87
109
|
/** @internal */ getPrerollBreak(): AdsBreakConfig | undefined;
|
|
88
110
|
/** @internal */ getBreakId(b: AdsBreakConfig): string;
|
|
89
|
-
/** @internal */ loadVmapAndMerge(existing: AdsBreakConfig[], src?: string): Promise<void>;
|
|
90
|
-
/** @internal */ get resolvedBreaks(): AdsBreakConfig[];
|
|
91
|
-
/** @internal */ set resolvedBreaks(v: AdsBreakConfig[]);
|
|
92
|
-
/** @internal */ get pendingPercentBreaks(): any[];
|
|
93
|
-
/** @internal */ set pendingPercentBreaks(v: any[]);
|
|
94
|
-
/** @internal */ get playedBreaks(): Set<string
|
|
95
|
-
/** @internal */ get vmapPending(): boolean;
|
|
96
|
-
/** @internal */ get vmapLoadPromise(): Promise<void> | null;
|
|
111
|
+
/** @internal */ loadVmapAndMerge(existing: AdsBreakConfig[], src?: string): Promise<void | undefined>;
|
|
112
|
+
/** @internal */ get resolvedBreaks(): AdsBreakConfig[] | undefined;
|
|
113
|
+
/** @internal */ set resolvedBreaks(v: AdsBreakConfig[] | undefined);
|
|
114
|
+
/** @internal */ get pendingPercentBreaks(): any[] | undefined;
|
|
115
|
+
/** @internal */ set pendingPercentBreaks(v: any[] | undefined);
|
|
116
|
+
/** @internal */ get playedBreaks(): Set<string> | undefined;
|
|
117
|
+
/** @internal */ get vmapPending(): boolean | undefined;
|
|
118
|
+
/** @internal */ get vmapLoadPromise(): Promise<void> | null | undefined;
|
|
97
119
|
/** @internal */ get pendingVmapSrc(): string | undefined;
|
|
98
|
-
/** @internal */ isXmlString(src: string): boolean;
|
|
99
|
-
/** @internal */ ensureOverlayMounted(): void;
|
|
120
|
+
/** @internal */ isXmlString(src: string): boolean | undefined;
|
|
121
|
+
/** @internal */ ensureOverlayMounted(): void | undefined;
|
|
100
122
|
/** @internal */ mountCompanions(creative: any): void;
|
|
101
123
|
/** @internal */ renderCompanion(companion: any): HTMLElement | null;
|
|
102
124
|
/** @internal */ renderNonLinear(nl: any): HTMLElement | null;
|
|
103
|
-
/** @internal */ ensureRawCaptions(mediaFileRaw: any, creative?: any): import("./types").CaptionResource[];
|
|
104
|
-
/** @internal */ attachAdCaptionTracks(adVideo: HTMLVideoElement, raw: any, creative?: any): HTMLTrackElement[];
|
|
105
|
-
private log;
|
|
106
|
-
private warn;
|
|
125
|
+
/** @internal */ ensureRawCaptions(mediaFileRaw: any, creative?: any): import("./types").CaptionResource[] | undefined;
|
|
126
|
+
/** @internal */ attachAdCaptionTracks(adVideo: HTMLVideoElement, raw: any, creative?: any): HTMLTrackElement[] | undefined;
|
|
107
127
|
}
|
|
108
128
|
export { extendAds, installAds } from './install';
|
|
109
129
|
//# sourceMappingURL=ads.d.ts.map
|
package/dist/types/ads.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/ads.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ads.d.ts","sourceRoot":"","sources":["../../src/ads.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,19 +1,46 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @openplayerjs/ads
|
|
3
3
|
*
|
|
4
|
-
* VAST / VMAP /
|
|
4
|
+
* VAST / VMAP / SSAI / Hybrid ad-serving plugin for OpenPlayerJS.
|
|
5
5
|
* Peer dependencies: @openplayerjs/core, @dailymotion/vast-client, @dailymotion/vmap
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* Delivery modes (set via `adDelivery` in `AdsPluginConfig`):
|
|
8
|
+
* - 'csai' (default) — client-side insertion; fetches VAST/VMAP, renders an ad <video>
|
|
9
|
+
* - 'ssai' — server-side stitching; detects ad boundaries via SCTE-35 TextTrack cues
|
|
10
|
+
* - 'hybrid' — CSAI triggered by SCTE-35 OUT cues from the HLS engine
|
|
11
|
+
*
|
|
12
|
+
* ESM usage (CSAI):
|
|
8
13
|
* import { AdsPlugin } from '@openplayerjs/ads';
|
|
9
|
-
* new Core(el, {
|
|
14
|
+
* new Core(el, {
|
|
15
|
+
* plugins: [new AdsPlugin({
|
|
16
|
+
* breaks: [{ at: 'preroll', source: { type: 'VAST', src: 'https://...' } }],
|
|
17
|
+
* })],
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* ESM usage (SSAI):
|
|
21
|
+
* new Core(el, {
|
|
22
|
+
* plugins: [new AdsPlugin({ adDelivery: 'ssai', ssai: { eventSink: (e) => log(e) } })],
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* ESM usage (Hybrid):
|
|
26
|
+
* new Core(el, {
|
|
27
|
+
* plugins: [new AdsPlugin({
|
|
28
|
+
* adDelivery: 'hybrid',
|
|
29
|
+
* hybrid: { scteSource: hlsEngine, resolveScteUrl: (cue) => myVastUrl(cue) },
|
|
30
|
+
* })],
|
|
31
|
+
* });
|
|
10
32
|
*
|
|
11
33
|
* UMD / CDN usage: load openplayer-ads.js after the main OpenPlayer bundle.
|
|
12
34
|
* It auto-registers itself under window.OpenPlayerPlugins.ads.
|
|
13
35
|
*/
|
|
14
36
|
export { AdsPlugin } from './ads';
|
|
15
|
-
export {
|
|
16
|
-
export { SimidSession, SIMID_PLAYER, SIMID_CREATIVE } from './simid';
|
|
37
|
+
export { extendAds, installAds } from './install';
|
|
17
38
|
export { OmidSession } from './omid';
|
|
18
|
-
export
|
|
39
|
+
export { SIMID_CREATIVE, SIMID_PLAYER, SimidSession } from './simid';
|
|
40
|
+
export { CsaiAdStrategy } from './strategies/csai';
|
|
41
|
+
export { HybridAdStrategy } from './strategies/hybrid';
|
|
42
|
+
export { decodeSplice } from './strategies/scte35';
|
|
43
|
+
export type { SpliceCommand } from './strategies/scte35';
|
|
44
|
+
export { SsaiAdStrategy } from './strategies/ssai';
|
|
45
|
+
export type { AdDeliveryMode, AdLifecycleEvent, AdsBreakConfig, AdSessionStrategy, AdsEvent, AdsPluginConfig, AdsSource, AdsSourceType, AdTagRequest, AdVerification, CsaiAdConfig, HybridAdConfig, NormalizedMediaFile, ScteOutCue, ScteSource, SsaiAdConfig, } from './types';
|
|
19
46
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,SAAS,CAAC"}
|
package/dist/types/schedule.d.ts
CHANGED
package/dist/types/simid.d.ts
CHANGED
|
@@ -119,13 +119,15 @@ export declare class SimidSession {
|
|
|
119
119
|
*/
|
|
120
120
|
private outgoingFormat;
|
|
121
121
|
private _targetOrigin;
|
|
122
|
+
/** Authoritative window to postMessage to — pinned from event.source on first valid message. */
|
|
123
|
+
private creativeWindow;
|
|
122
124
|
constructor(iframe: HTMLIFrameElement, adVideo: HTMLVideoElement, callbacks: SimidCallbacks, creativeInfo?: SimidCreativeInfo | undefined);
|
|
123
125
|
private nextMsgId;
|
|
124
126
|
/**
|
|
125
127
|
* Returns the target origin for postMessage calls to the creative iframe.
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
*
|
|
128
|
+
* Prefer the origin captured from the first incoming message (event.origin),
|
|
129
|
+
* which reflects where the iframe actually landed after any redirects.
|
|
130
|
+
* Falls back to deriving from iframe.src until the first message arrives.
|
|
129
131
|
*/
|
|
130
132
|
private getTargetOrigin;
|
|
131
133
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simid.d.ts","sourceRoot":"","sources":["../../src/simid.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAIH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;IAevB,gEAAgE;;IAEhE,8DAA8D;;CAEtD,CAAC;AAEX,8FAA8F;AAC9F,eAAO,MAAM,WAAW;;;;;;;;;;;;CAYd,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;CAgBjB,CAAC;AAyBX,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,CAC1B,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,IAAI,EACnB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KAChD,IAAI,CAAC;CACX,CAAC;AAEF,0EAA0E;AAC1E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF,qBAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"simid.d.ts","sourceRoot":"","sources":["../../src/simid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import type { PluginContext } from '@openplayerjs/core';
|
|
2
|
+
import { AdDomManager } from '../ad-dom';
|
|
3
|
+
import { CaptionManager } from '../caption-manager';
|
|
4
|
+
import { AdScheduler } from '../schedule';
|
|
5
|
+
import type { AdDeliveryMode, AdSessionStrategy, AdsBreakConfig, AdsEvent, AdsPluginConfig, AdsSource, AdsSourceType, ScteSource, VastInput } from '../types';
|
|
6
|
+
import { PluginBus } from '../types';
|
|
7
|
+
export type NormalizedCsaiConfig = {
|
|
8
|
+
sources: AdsSource[];
|
|
9
|
+
breaks: AdsBreakConfig[];
|
|
10
|
+
interceptPlayForPreroll: boolean;
|
|
11
|
+
autoPlayOnReady: boolean;
|
|
12
|
+
allowNativeControls: boolean;
|
|
13
|
+
resumeContent: boolean;
|
|
14
|
+
preferredMediaTypes: string[];
|
|
15
|
+
debug: boolean;
|
|
16
|
+
breakTolerance: number;
|
|
17
|
+
adSourcesMode: 'waterfall' | 'playlist';
|
|
18
|
+
omid: {
|
|
19
|
+
accessMode?: 'domain' | 'limited';
|
|
20
|
+
};
|
|
21
|
+
labels: {
|
|
22
|
+
skip?: string;
|
|
23
|
+
advertisement?: string;
|
|
24
|
+
adEnded?: string;
|
|
25
|
+
};
|
|
26
|
+
adDelivery: AdDeliveryMode;
|
|
27
|
+
mountEl?: HTMLElement;
|
|
28
|
+
mountSelector?: string;
|
|
29
|
+
nonLinearContainer?: HTMLElement;
|
|
30
|
+
nonLinearSelector?: string;
|
|
31
|
+
companionContainer?: HTMLElement;
|
|
32
|
+
companionSelector?: string;
|
|
33
|
+
requestInterceptor?: AdsPluginConfig['requestInterceptor'];
|
|
34
|
+
eventSink?: AdsPluginConfig['eventSink'];
|
|
35
|
+
scteSource?: ScteSource;
|
|
36
|
+
resolveScteUrl?: AdsPluginConfig['resolveScteUrl'];
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Client-side ad insertion strategy.
|
|
40
|
+
*
|
|
41
|
+
* Owns all CSAI-specific logic: scheduling, VAST fetching, ad video rendering,
|
|
42
|
+
* tracking, OMID/SIMID sessions, and break lifecycle management.
|
|
43
|
+
*
|
|
44
|
+
* `HybridAdStrategy` extends this class and adds SCTE-35 cue bridging on top.
|
|
45
|
+
*/
|
|
46
|
+
export declare class CsaiAdStrategy implements AdSessionStrategy {
|
|
47
|
+
readonly mode: AdDeliveryMode;
|
|
48
|
+
/** @internal */ ctx: PluginContext;
|
|
49
|
+
/** @internal */ bus: PluginBus<AdsEvent>;
|
|
50
|
+
/** @internal */ cfg: NormalizedCsaiConfig;
|
|
51
|
+
/** @internal */ scheduler: AdScheduler;
|
|
52
|
+
/** @internal */ captionMgr: CaptionManager;
|
|
53
|
+
/** @internal */ _dom?: AdDomManager;
|
|
54
|
+
private overlayId;
|
|
55
|
+
/** @internal */ overlay: HTMLDivElement;
|
|
56
|
+
/** @internal */ adVideo?: HTMLVideoElement;
|
|
57
|
+
private adEndPromise;
|
|
58
|
+
private adEngineDetach?;
|
|
59
|
+
private currentBreakMeta?;
|
|
60
|
+
/** @internal */ vastClient: any;
|
|
61
|
+
/** @internal */ tracker?: any;
|
|
62
|
+
private _lastCreative;
|
|
63
|
+
/** @internal */ globalUnsubs: (() => void)[];
|
|
64
|
+
/** @internal */ sessionUnsubs: (() => void)[];
|
|
65
|
+
/** @internal */ active: boolean;
|
|
66
|
+
/** @internal */ resumeAfter: boolean;
|
|
67
|
+
private contentMedia?;
|
|
68
|
+
private contentHadControls;
|
|
69
|
+
private startingBreak;
|
|
70
|
+
private userPlayIntent;
|
|
71
|
+
/** @internal */ forcedMuteUntilInteraction: boolean;
|
|
72
|
+
private syncingVolume;
|
|
73
|
+
/**
|
|
74
|
+
* @internal
|
|
75
|
+
* Dispatch proxies — AdsPlugin replaces these after init() so that
|
|
76
|
+
* `jest.spyOn(plugin, 'startBreak')` etc. can intercept scheduler calls.
|
|
77
|
+
*/
|
|
78
|
+
_dispatchStartBreak: (b: AdsBreakConfig, kind: 'preroll' | 'midroll' | 'postroll' | 'auto', opts?: {
|
|
79
|
+
suppressResume?: boolean;
|
|
80
|
+
}) => Promise<void>;
|
|
81
|
+
_dispatchStartBreakGroup: (breaks: AdsBreakConfig[], kind: 'preroll' | 'midroll' | 'postroll' | 'auto') => Promise<void>;
|
|
82
|
+
_dispatchPlayBreakFromVast: (input: VastInput, meta: {
|
|
83
|
+
kind: 'preroll' | 'midroll' | 'postroll' | 'auto' | 'manual';
|
|
84
|
+
id: string;
|
|
85
|
+
sourceType?: AdsSourceType;
|
|
86
|
+
}, opts?: {
|
|
87
|
+
suppressResumeOnError?: boolean;
|
|
88
|
+
suppressResumeOnSuccess?: boolean;
|
|
89
|
+
}) => Promise<boolean>;
|
|
90
|
+
_dispatchGetVastXmlText: (input: VastInput) => Promise<string>;
|
|
91
|
+
_dispatchBuildParsedForNonLinear: (xmlText: string) => XMLDocument | null;
|
|
92
|
+
_dispatchMountAdVideo: (contentMedia: HTMLMediaElement, mediaFile: {
|
|
93
|
+
fileURL: string;
|
|
94
|
+
raw: any;
|
|
95
|
+
}, creative?: any) => void;
|
|
96
|
+
_dispatchStartAdPlayback: () => void;
|
|
97
|
+
private simidSession?;
|
|
98
|
+
private omidSession?;
|
|
99
|
+
init(ctx: PluginContext, config: AdsPluginConfig): void;
|
|
100
|
+
destroy(): void;
|
|
101
|
+
playAds(vastUrl: string): Promise<boolean>;
|
|
102
|
+
playAdsFromXml(vastXml: string): Promise<boolean>;
|
|
103
|
+
getDueMidrollBreaks(currentTime: number): AdsBreakConfig[];
|
|
104
|
+
getDueMidrollBreak(currentTime: number): AdsBreakConfig | undefined;
|
|
105
|
+
requestSkip(reason?: 'button' | 'close' | 'api'): void;
|
|
106
|
+
/** @internal */
|
|
107
|
+
get dom(): AdDomManager;
|
|
108
|
+
/** @internal */
|
|
109
|
+
set dom(v: AdDomManager);
|
|
110
|
+
private bindPrerollInterceptors;
|
|
111
|
+
/** @internal */ shouldInterceptPreroll(): boolean;
|
|
112
|
+
private bindBreakScheduler;
|
|
113
|
+
/** @internal */ startBreak(b: AdsBreakConfig, kind: 'preroll' | 'midroll' | 'postroll' | 'auto', opts?: {
|
|
114
|
+
suppressResume?: boolean;
|
|
115
|
+
}): Promise<void>;
|
|
116
|
+
/** @internal */ startBreakGroup(breaks: AdsBreakConfig[], kind: 'preroll' | 'midroll' | 'postroll' | 'auto'): Promise<void>;
|
|
117
|
+
/** @internal */ playBreakFromVast(input: VastInput, meta: {
|
|
118
|
+
kind: 'preroll' | 'midroll' | 'postroll' | 'auto' | 'manual';
|
|
119
|
+
id: string;
|
|
120
|
+
sourceType?: AdsSourceType;
|
|
121
|
+
}, opts?: {
|
|
122
|
+
suppressResumeOnError?: boolean;
|
|
123
|
+
suppressResumeOnSuccess?: boolean;
|
|
124
|
+
}): Promise<boolean>;
|
|
125
|
+
private playNonLinearOnlyBreak;
|
|
126
|
+
private playNonLinearOnlyBreakFromXml;
|
|
127
|
+
private dismissNonLinear;
|
|
128
|
+
private mountAdVideo;
|
|
129
|
+
private bindAdSurfaceCommands;
|
|
130
|
+
private bindTrackerAndTelemetry;
|
|
131
|
+
/** @internal */ startAdPlayback(): void;
|
|
132
|
+
private waitForAdEnd;
|
|
133
|
+
/** @internal */ clearSession(): void;
|
|
134
|
+
private finish;
|
|
135
|
+
protected log(...args: any[]): void;
|
|
136
|
+
protected warn(...args: any[]): void;
|
|
137
|
+
/** @internal */ getVastXmlText(input: any): Promise<string>;
|
|
138
|
+
/** @internal */ buildParsedForNonLinearFromXml(xmlText: string): XMLDocument;
|
|
139
|
+
/** @internal */ computeSkipAtSecondsDelegate(skipOffset: string | undefined, duration: number): number | undefined;
|
|
140
|
+
/** @internal */ collectPodAdsDelegate(parsed: any): import("../types").PodAd[];
|
|
141
|
+
/** @internal */ getPrerollBreak(): AdsBreakConfig | undefined;
|
|
142
|
+
/** @internal */ getBreakId(b: AdsBreakConfig): string;
|
|
143
|
+
/** @internal */ loadVmapAndMerge(existing: AdsBreakConfig[], src?: string): Promise<void>;
|
|
144
|
+
/** @internal */ get resolvedBreaks(): AdsBreakConfig[];
|
|
145
|
+
/** @internal */ set resolvedBreaks(v: AdsBreakConfig[]);
|
|
146
|
+
/** @internal */ get pendingPercentBreaks(): any[];
|
|
147
|
+
/** @internal */ set pendingPercentBreaks(v: any[]);
|
|
148
|
+
/** @internal */ get playedBreaks(): Set<string>;
|
|
149
|
+
/** @internal */ get vmapPending(): boolean;
|
|
150
|
+
/** @internal */ get vmapLoadPromise(): Promise<void> | null;
|
|
151
|
+
/** @internal */ get pendingVmapSrc(): string | undefined;
|
|
152
|
+
/** @internal */ isXmlString(src: string): boolean;
|
|
153
|
+
/** @internal */ ensureOverlayMounted(): void;
|
|
154
|
+
/** @internal */ mountCompanions(creative: any): void;
|
|
155
|
+
/** @internal */ renderCompanion(companion: any): HTMLElement | null;
|
|
156
|
+
/** @internal */ renderNonLinear(nl: any): HTMLElement | null;
|
|
157
|
+
/** @internal */ ensureRawCaptions(mediaFileRaw: any, creative?: any): import("../types").CaptionResource[];
|
|
158
|
+
/** @internal */ attachAdCaptionTracks(adVideo: HTMLVideoElement, raw: any, creative?: any): HTMLTrackElement[];
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=csai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csai.d.ts","sourceRoot":"","sources":["../../../src/strategies/csai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AdDeliveryMode } from '../types';
|
|
2
|
+
import { CsaiAdStrategy } from './csai';
|
|
3
|
+
/**
|
|
4
|
+
* CSAI + SCTE-35 hybrid ad delivery strategy.
|
|
5
|
+
*
|
|
6
|
+
* Behaves identically to `CsaiAdStrategy` for ad rendering. The SCTE-35 cue
|
|
7
|
+
* bridging (mapping `engine.onCue` → `playAds()`) is handled by `AdsPlugin`
|
|
8
|
+
* so that spy/intercept tests can observe calls at the public API boundary.
|
|
9
|
+
*
|
|
10
|
+
* Configuration (prefer the sub-config form; flat aliases kept for backward compat):
|
|
11
|
+
* ```ts
|
|
12
|
+
* new AdsPlugin({
|
|
13
|
+
* adDelivery: 'hybrid',
|
|
14
|
+
* hybrid: {
|
|
15
|
+
* scteSource: hlsEngine, // any object with onCue?: (cue) => void
|
|
16
|
+
* resolveScteUrl: (cue) => adServerUrl(cue.id),
|
|
17
|
+
* },
|
|
18
|
+
* });
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class HybridAdStrategy extends CsaiAdStrategy {
|
|
22
|
+
readonly mode: AdDeliveryMode;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=hybrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../../src/strategies/hybrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,SAAkB,IAAI,EAAE,cAAc,CAAY;CACnD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal SCTE-35 splice_info_section decoder.
|
|
3
|
+
*
|
|
4
|
+
* Accepts the three forms a splice_info_section can arrive in:
|
|
5
|
+
* - ArrayBuffer (DataCue.data from enableID3MetadataCues)
|
|
6
|
+
* - Uint8Array (same, already sliced)
|
|
7
|
+
* - base64 string (EXT-X-DATERANGE X-SCTE35 attribute value)
|
|
8
|
+
*
|
|
9
|
+
* Only splice_insert (0x05) and time_signal (0x06) are decoded.
|
|
10
|
+
* All other command types are returned as { type: 'unknown' }.
|
|
11
|
+
*/
|
|
12
|
+
export type SpliceCommand = {
|
|
13
|
+
type: 'splice_insert';
|
|
14
|
+
outOfNetwork: boolean;
|
|
15
|
+
durationSecs: number | null;
|
|
16
|
+
autoReturn: boolean;
|
|
17
|
+
} | {
|
|
18
|
+
type: 'time_signal';
|
|
19
|
+
} | {
|
|
20
|
+
type: 'unknown';
|
|
21
|
+
commandType: number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Decode a SCTE-35 splice_info_section.
|
|
25
|
+
* Returns `null` if the buffer cannot be parsed as a valid section.
|
|
26
|
+
*/
|
|
27
|
+
export declare function decodeSplice(source: ArrayBufferLike | Uint8Array | string): SpliceCommand | null;
|
|
28
|
+
//# sourceMappingURL=scte35.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scte35.d.ts","sourceRoot":"","sources":["../../../src/strategies/scte35.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,YAAY,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,GAClG;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,GAAG,IAAI,CAsDhG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { PluginContext } from '@openplayerjs/core';
|
|
2
|
+
import type { AdSessionStrategy, AdsPluginConfig } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Server-side ad insertion strategy.
|
|
5
|
+
*
|
|
6
|
+
* Responsibilities:
|
|
7
|
+
* - Discover hls.js metadata TextTrack objects created by
|
|
8
|
+
* `enableDateRangeMetadataCues` / `enableID3MetadataCues`.
|
|
9
|
+
* - Subscribe to DOM `cuechange` events; parse SCTE-35 splice commands
|
|
10
|
+
* from active cues (DataCue ArrayBuffer path for ID3, or custom attributes
|
|
11
|
+
* for EXT-X-DATERANGE).
|
|
12
|
+
* - Track active ad breaks and emit IAB quartile events via `timeupdate`.
|
|
13
|
+
* - Report all lifecycle events through the configured `AdEventSink`.
|
|
14
|
+
*
|
|
15
|
+
* What this strategy does NOT do:
|
|
16
|
+
* - Fetch VAST/VMAP (no outbound ad-tagged network requests — ad-blocker-proof).
|
|
17
|
+
* - Render an ad <video> element (the content stream IS the ad stream).
|
|
18
|
+
* - Acquire a playback lease (the stream is continuous).
|
|
19
|
+
*/
|
|
20
|
+
export declare class SsaiAdStrategy implements AdSessionStrategy {
|
|
21
|
+
readonly mode: "ssai";
|
|
22
|
+
private ctx;
|
|
23
|
+
private sink;
|
|
24
|
+
private boundTracks;
|
|
25
|
+
private activeBreaks;
|
|
26
|
+
private cleanups;
|
|
27
|
+
init(ctx: PluginContext, config: AdsPluginConfig): void;
|
|
28
|
+
destroy(): void;
|
|
29
|
+
private scanTracks;
|
|
30
|
+
private bindTrack;
|
|
31
|
+
private handleActiveCues;
|
|
32
|
+
private processCue;
|
|
33
|
+
private startBreak;
|
|
34
|
+
private endBreak;
|
|
35
|
+
private checkQuartiles;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=ssai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssai.d.ts","sourceRoot":"","sources":["../../../src/strategies/ssai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAoB,iBAAiB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAUrF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,iBAAiB;IACtD,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEhC,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,IAAI,CAAkD;IAE9D,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,QAAQ,CAAsB;IAEtC,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IA4BvD,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,UAAU;IAiElB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,cAAc;CAkBvB"}
|