@videts/vide 0.7.0 → 0.8.0
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/README.md +36 -215
- package/dist/chunk-DWXOYV4E.mjs +1 -0
- package/dist/chunk-H3OXPFD3.mjs +1 -0
- package/dist/dash/index.d.ts +3 -1
- package/dist/dash/index.mjs +2 -2
- package/dist/drm/index.d.ts +18 -2
- package/dist/drm/index.mjs +1 -1
- package/dist/hls/index.d.ts +3 -1
- package/dist/hls/index.mjs +2 -2
- package/dist/index.d.ts +26 -4
- package/dist/index.mjs +1 -1
- package/dist/omid/index.d.ts +2 -2
- package/dist/omid/index.mjs +2 -2
- package/dist/simid/index.d.ts +2 -2
- package/dist/simid/index.mjs +1 -1
- package/dist/ssai/index.d.ts +1 -1
- package/dist/{types-BryM58LE.d.ts → types-CAJmacV6.d.ts} +1 -1
- package/dist/{types-BxRa9Jvl.d.ts → types-vxIcXgJz.d.ts} +90 -19
- package/dist/ui/index.d.ts +3 -3
- package/dist/ui/index.mjs +2 -2
- package/dist/ui/theme.css +1 -1
- package/dist/vast/index.d.ts +3 -3
- package/dist/vast/index.mjs +1 -1
- package/dist/vide.core.global.js +1 -0
- package/dist/vide.dash.global.js +2 -0
- package/dist/vide.drm.global.js +1 -0
- package/dist/vide.global.js +2 -0
- package/dist/vide.hls.global.js +2 -0
- package/dist/vide.omid.global.js +2 -0
- package/dist/vide.simid.global.js +1 -0
- package/dist/vide.ssai.global.js +1 -0
- package/dist/vide.ui.css +864 -0
- package/dist/vide.ui.global.js +2 -0
- package/dist/vide.vast.global.js +1 -0
- package/dist/vide.vmap.global.js +1 -0
- package/dist/vmap/index.d.ts +2 -2
- package/dist/vmap/index.mjs +1 -1
- package/package.json +33 -10
package/README.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# vide
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/hogekai/vide/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/@videts/vide)
|
|
5
|
+
[](https://bundlephobia.com/package/@videts/vide)
|
|
6
|
+
|
|
7
|
+
Modular video player library. Use only what you need. Also works with `<audio>`.
|
|
8
|
+
|
|
9
|
+
**[Documentation](https://hogekai.github.io/vide/)** · **[Getting Started](https://hogekai.github.io/vide/getting-started)** · **[Demo](https://hogekai.github.io/vide/demo)**
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<video src="video.mp4"></video>
|
|
13
|
+
```
|
|
4
14
|
|
|
5
15
|
```ts
|
|
6
16
|
import { createPlayer } from "@videts/vide";
|
|
@@ -12,22 +22,6 @@ player.use(hls());
|
|
|
12
22
|
player.use(vast({ tagUrl: "https://example.com/vast.xml" }));
|
|
13
23
|
```
|
|
14
24
|
|
|
15
|
-
| Plugin | What | gzip |
|
|
16
|
-
|--------|------|-----:|
|
|
17
|
-
| `@videts/vide` | Core player | 1.7 KB |
|
|
18
|
-
| `@videts/vide/vast` | VAST 4.2 ads | 1.5 KB |
|
|
19
|
-
| `@videts/vide/vmap` | VMAP scheduling | 2.6 KB |
|
|
20
|
-
| `@videts/vide/hls` | HLS streaming | 0.6 KB |
|
|
21
|
-
| `@videts/vide/dash` | DASH streaming | 0.6 KB |
|
|
22
|
-
| `@videts/vide/drm` | DRM (Widevine + FairPlay) | 0.8 KB |
|
|
23
|
-
| `@videts/vide/ssai` | SSAI (server-side ads) | 1.4 KB |
|
|
24
|
-
| `@videts/vide/omid` | Open Measurement | 1.7 KB |
|
|
25
|
-
| `@videts/vide/simid` | Interactive ads | 2.4 KB |
|
|
26
|
-
| `@videts/vide/ui` | Headless UI | 4.7 KB |
|
|
27
|
-
| `@videts/vide/ui/theme.css` | Default theme | 3.4 KB |
|
|
28
|
-
|
|
29
|
-
> HLS and DASH plugins require `hls.js` and `dashjs` as peer dependencies.
|
|
30
|
-
|
|
31
25
|
Zero config. No data attributes. No class scanning. No side effects.
|
|
32
26
|
Web standards first — if the browser can do it, we don't reinvent it.
|
|
33
27
|
|
|
@@ -41,6 +35,10 @@ npm install @videts/vide
|
|
|
41
35
|
|
|
42
36
|
## Quick Start
|
|
43
37
|
|
|
38
|
+
```html
|
|
39
|
+
<video src="video.mp4"></video>
|
|
40
|
+
```
|
|
41
|
+
|
|
44
42
|
```ts
|
|
45
43
|
import { createPlayer } from "@videts/vide";
|
|
46
44
|
// import type { PlayerEventMap } from "@videts/vide";
|
|
@@ -68,208 +66,31 @@ player.on("statechange", ({ from, to }) => console.log(`${from} → ${to}`));
|
|
|
68
66
|
|
|
69
67
|
Plugins are explicit opt-in. Import only what you need.
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
player.src = "https://example.com/stream.m3u8";
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
```ts
|
|
88
|
-
// Pass config directly to hls.js constructor
|
|
89
|
-
player.use(hls({ hlsConfig: { maxBufferLength: 60 } }));
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### DASH Streaming
|
|
93
|
-
|
|
94
|
-
```sh
|
|
95
|
-
npm install dashjs
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
import { createPlayer } from "@videts/vide";
|
|
100
|
-
import { dash } from "@videts/vide/dash";
|
|
101
|
-
|
|
102
|
-
const player = createPlayer(document.querySelector("video")!);
|
|
103
|
-
player.use(dash());
|
|
104
|
-
|
|
105
|
-
player.src = "https://example.com/stream.mpd";
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
```ts
|
|
109
|
-
// Pass settings directly to dashjs.updateSettings()
|
|
110
|
-
player.use(dash({ dashConfig: { streaming: { buffer: { bufferTimeDefault: 20 } } } }));
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### DRM
|
|
114
|
-
|
|
115
|
-
Widevine (Chrome/Firefox/Edge) and FairPlay (Safari/iOS). The plugin detects the browser's key system automatically — just pass the license server URL.
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
import { createPlayer } from "@videts/vide";
|
|
119
|
-
import { hls } from "@videts/vide/hls";
|
|
120
|
-
import { drm } from "@videts/vide/drm";
|
|
121
|
-
|
|
122
|
-
const player = createPlayer(document.querySelector("video")!);
|
|
123
|
-
player.use(hls());
|
|
124
|
-
player.use(drm({
|
|
125
|
-
widevine: {
|
|
126
|
-
licenseUrl: "https://license.example.com/widevine",
|
|
127
|
-
},
|
|
128
|
-
fairplay: {
|
|
129
|
-
licenseUrl: "https://license.example.com/fairplay",
|
|
130
|
-
certificateUrl: "https://certificate.example.com/fairplay.cer",
|
|
131
|
-
},
|
|
132
|
-
}));
|
|
133
|
-
|
|
134
|
-
player.src = "https://example.com/encrypted-stream.m3u8";
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
Works with both HLS and DASH — plugin order doesn't matter.
|
|
138
|
-
|
|
139
|
-
```ts
|
|
140
|
-
// Custom headers for license requests (e.g. auth tokens)
|
|
141
|
-
player.use(drm({
|
|
142
|
-
widevine: {
|
|
143
|
-
licenseUrl: "https://license.example.com/widevine",
|
|
144
|
-
headers: { Authorization: "Bearer <token>" },
|
|
145
|
-
},
|
|
146
|
-
}));
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### SSAI (Server-Side Ad Insertion)
|
|
150
|
-
|
|
151
|
-
Detects ad breaks from HLS/DASH in-band metadata and fires standard ad events. No vendor SDK required.
|
|
152
|
-
|
|
153
|
-
```ts
|
|
154
|
-
import { createPlayer } from "@videts/vide";
|
|
155
|
-
import { hls } from "@videts/vide/hls";
|
|
156
|
-
import { ssai } from "@videts/vide/ssai";
|
|
157
|
-
|
|
158
|
-
const player = createPlayer(document.querySelector("video")!);
|
|
159
|
-
player.use(hls());
|
|
160
|
-
player.use(ssai());
|
|
161
|
-
|
|
162
|
-
player.on("ad:start", ({ adId }) => console.log("ad started", adId));
|
|
163
|
-
player.on("ad:end", ({ adId }) => console.log("ad ended", adId));
|
|
164
|
-
|
|
165
|
-
player.src = "https://example.com/ssai-stream.m3u8";
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
```ts
|
|
169
|
-
// Custom parser for vendor-specific metadata formats
|
|
170
|
-
player.use(ssai({
|
|
171
|
-
parser(raw) {
|
|
172
|
-
if (raw.source === "daterange" && raw.attributes["X-MY-AD"] === "true") {
|
|
173
|
-
return [{
|
|
174
|
-
id: raw.attributes.ID,
|
|
175
|
-
startTime: new Date(raw.attributes["START-DATE"]).getTime() / 1000,
|
|
176
|
-
duration: Number(raw.attributes.DURATION || 0),
|
|
177
|
-
trackingUrls: [raw.attributes["X-TRACKING-URL"]].filter(Boolean),
|
|
178
|
-
}];
|
|
179
|
-
}
|
|
180
|
-
return [];
|
|
181
|
-
},
|
|
182
|
-
}));
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### UI
|
|
186
|
-
|
|
187
|
-
Headless by default — JS creates DOM and wires behavior, styling is yours.
|
|
188
|
-
Import `theme.css` for a ready-made look, or target the BEM classes (`vide-play`, `vide-progress__bar`, …) yourself.
|
|
189
|
-
|
|
190
|
-
```ts
|
|
191
|
-
import { createPlayer } from "@videts/vide";
|
|
192
|
-
import { ui } from "@videts/vide/ui";
|
|
193
|
-
import "@videts/vide/ui/theme.css"; // optional — brings default skin
|
|
194
|
-
|
|
195
|
-
const player = createPlayer(document.querySelector("video")!);
|
|
196
|
-
player.use(ui({ container: document.getElementById("player-container")! }));
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
```ts
|
|
200
|
-
// exclude: play, progress, time, volume, fullscreen, loader, error,
|
|
201
|
-
// bigplay, poster, keyboard, clickplay, autohide,
|
|
202
|
-
// ad-countdown, ad-skip, ad-overlay, ad-label
|
|
203
|
-
player.use(ui({
|
|
204
|
-
container: el,
|
|
205
|
-
exclude: ["volume", "fullscreen"],
|
|
206
|
-
poster: "https://example.com/poster.jpg",
|
|
207
|
-
}));
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Components can also be used individually:
|
|
211
|
-
|
|
212
|
-
```ts
|
|
213
|
-
import { createPlayButton, createProgress } from "@videts/vide/ui";
|
|
214
|
-
|
|
215
|
-
const play = createPlayButton();
|
|
216
|
-
play.mount(controls);
|
|
217
|
-
play.connect(player);
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
#### UI + VAST Ads
|
|
221
|
-
|
|
222
|
-
```ts
|
|
223
|
-
import { ui } from "@videts/vide/ui";
|
|
224
|
-
import { vast } from "@videts/vide/vast";
|
|
225
|
-
|
|
226
|
-
// UI plugin provides ad components (countdown, skip, overlay, label)
|
|
227
|
-
// that integrate with VAST playback via getAdPlugin()
|
|
228
|
-
const uiPlugin = ui({ container: el });
|
|
229
|
-
player.use(uiPlugin);
|
|
230
|
-
player.use(vast({
|
|
231
|
-
tagUrl: "https://example.com/vast.xml",
|
|
232
|
-
adPlugins: uiPlugin.getAdPlugin(),
|
|
233
|
-
}));
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### VAST Ads
|
|
237
|
-
|
|
238
|
-
```ts
|
|
239
|
-
import { vast } from "@videts/vide/vast";
|
|
240
|
-
player.use(vast({ tagUrl: "https://example.com/vast.xml" }));
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### VMAP Ad Scheduling
|
|
244
|
-
|
|
245
|
-
```ts
|
|
246
|
-
import { vmap } from "@videts/vide/vmap";
|
|
247
|
-
player.use(vmap({ vmapUrl: "https://example.com/vmap.xml" }));
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
### OMID Viewability
|
|
251
|
-
|
|
252
|
-
```ts
|
|
253
|
-
import { vast } from "@videts/vide/vast";
|
|
254
|
-
import { omid } from "@videts/vide/omid";
|
|
69
|
+
| Plugin | What | gzip |
|
|
70
|
+
|--------|------|-----:|
|
|
71
|
+
| `@videts/vide` | Core player | 1.8 KB |
|
|
72
|
+
| `@videts/vide/vast` | VAST 4.2 ads | 1.6 KB |
|
|
73
|
+
| `@videts/vide/vmap` | VMAP scheduling | 2.6 KB |
|
|
74
|
+
| `@videts/vide/hls` | HLS streaming | 0.7 KB |
|
|
75
|
+
| `@videts/vide/dash` | DASH streaming | 0.6 KB |
|
|
76
|
+
| `@videts/vide/drm` | DRM (Widevine + FairPlay) | 1.7 KB |
|
|
77
|
+
| `@videts/vide/ssai` | SSAI (server-side ads) | 1.5 KB |
|
|
78
|
+
| `@videts/vide/omid` | Open Measurement | 1.7 KB |
|
|
79
|
+
| `@videts/vide/simid` | Interactive ads | 2.4 KB |
|
|
80
|
+
| `@videts/vide/ui` | Headless UI | 4.8 KB |
|
|
81
|
+
| `@videts/vide/ui/theme.css` | Default theme | 3.4 KB |
|
|
255
82
|
|
|
256
|
-
|
|
257
|
-
tagUrl: "https://example.com/vast.xml",
|
|
258
|
-
adPlugins: () => [omid({ partner: { name: "your-company", version: "1.0.0" } })],
|
|
259
|
-
}));
|
|
260
|
-
```
|
|
83
|
+
> HLS and DASH plugins require `hls.js` and `dashjs` as peer dependencies.
|
|
261
84
|
|
|
262
|
-
|
|
85
|
+
See the [plugin documentation](https://hogekai.github.io/vide/plugins/hls) for usage examples and configuration options.
|
|
263
86
|
|
|
264
|
-
|
|
265
|
-
import { vast } from "@videts/vide/vast";
|
|
266
|
-
import { simid } from "@videts/vide/simid";
|
|
87
|
+
## Documentation
|
|
267
88
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
89
|
+
- [Getting Started](https://hogekai.github.io/vide/getting-started) — install, CDN usage, basic setup
|
|
90
|
+
- [Plugin Guides](https://hogekai.github.io/vide/plugins/hls) — HLS, DASH, DRM, VAST, UI, and more
|
|
91
|
+
- [API Reference](https://hogekai.github.io/vide/api-reference/) — auto-generated from TypeScript
|
|
92
|
+
- [Browser Support](https://hogekai.github.io/vide/browser-support) — compatibility notes
|
|
93
|
+
- [Demo](https://hogekai.github.io/vide/demo) — live examples
|
|
273
94
|
|
|
274
95
|
## License
|
|
275
96
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var R=1e3,o=2e3,t=2001,E=2002,_=3e3,c=3001,e=4e3,n=4001,p=4002,r=4003;export{R as a,o as b,t as c,E as d,_ as e,c as f,e as g,n as h,p as i,r as j};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function n(r){return r>=2160?"4K":r>=1440?"1440p":r>=1080?"1080p":r>=720?"720p":r>=480?"480p":r>=360?"360p":r>=240?"240p":`${r}p`}export{n as a};
|
package/dist/dash/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { e as Plugin } from '../types-
|
|
1
|
+
import { R as RecoveryConfig, e as Plugin } from '../types-vxIcXgJz.js';
|
|
2
2
|
|
|
3
3
|
interface DashPluginOptions {
|
|
4
4
|
/** dash.js MediaPlayerSettingClass — passed to updateSettings(). */
|
|
5
5
|
dashConfig?: Record<string, unknown> | undefined;
|
|
6
|
+
/** Error recovery settings. `false` to disable. Defaults to enabled (3 retries, 3s delay, 2x backoff). */
|
|
7
|
+
recovery?: Partial<RecoveryConfig> | false | undefined;
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
/** Create a DASH streaming plugin for vide. */
|
package/dist/dash/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
export{
|
|
1
|
+
import {a}from'../chunk-H3OXPFD3.mjs';import'../chunk-DWXOYV4E.mjs';var w="application/dash+xml",L={maxRetries:3,retryDelay:3e3,backoffMultiplier:2};function T(n){try{return new URL(n,"https://placeholder.invalid").pathname.endsWith(".mpd")}catch{return n.includes(".mpd")}}function C(n){return n.toLowerCase()===w}function k(n={}){return {name:"dash",setup(e){let c=null,u=false,g=n.recovery===false?false:{...L,...n.recovery??{}},s=0,f=null,v="",l=null;function m(){f!==null&&(clearTimeout(f),f=null);}function R(a){if(g===false||u||s>=g.maxRetries||!l)return false;s++;let r=g.retryDelay*g.backoffMultiplier**(s-1);return m(),f=setTimeout(()=>{u||!l||(a.reset(),a.initialize(l,v,l.autoplay));},r),true}let p={canHandle(a,r){return r&&C(r)?true:T(a)},load(a,r){this.unload(r),E(a,r);},unload(a){m(),s=0,v="",l=null,c&&(c.destroy(),c=null);}};function E(a$1,r){v=a$1,l=r,import('dashjs').then(h=>{if(u)return;let y=h.default,t=y.MediaPlayer().create();c=t,e.setPluginData("dash",t);let b=e.getPluginData("drm");b?.dashConfig&&t.updateSettings(b.dashConfig),n.dashConfig&&t.updateSettings(n.dashConfig),t.on(y.MediaPlayer.events.ERROR,o=>{if(typeof o.error=="object"&&o.error!==null){let d=R(t);e.emit("error",{code:o.error.code,message:o.error.message,source:"dash",recoverable:d,retryCount:d?s:void 0});}else e.emit("error",{code:3001,message:`DASH error: ${String(o.error)}`,source:"dash"});}),t.on(y.MediaPlayer.events.STREAM_INITIALIZED,()=>{s>0&&(s=0,m());let d=t.getBitrateInfoListFor("video").map(i=>({id:i.qualityIndex,width:i.width,height:i.height,bitrate:i.bitrate,label:a(i.height)}));e.setPluginData("qualities",d),e.setPluginData("qualitySetter",i=>{i===-1?t.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:true}}}}):(t.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:false}}}}),t.setQualityFor("video",i,true)),e.setPluginData("autoQuality",i===-1);});}),t.on(y.MediaPlayer.events.QUALITY_CHANGE_RENDERED,o=>{if(o.mediaType!=="video")return;let i=e.qualities.find(D=>D.id===o.newQuality);if(i){e.setPluginData("currentQuality",i);let D=t.getSettings();e.setPluginData("autoQuality",D?.streaming?.abr?.autoSwitchBitrate?.video??true);}}),t.initialize(r,a$1,r.autoplay);}).catch(h=>{u||e.emit("error",{code:3e3,message:h instanceof Error?`Failed to load dashjs: ${h.message}`:"Failed to load dashjs",source:"dash"});});}return e.registerSourceHandler(p),()=>{u=true,m(),p.unload(e.el);}}}}
|
|
2
|
+
export{k as dash};
|
package/dist/drm/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { e as Plugin } from '../types-
|
|
1
|
+
import { M as MediaElement, e as Plugin } from '../types-vxIcXgJz.js';
|
|
2
2
|
|
|
3
3
|
/** Widevine DRM configuration. */
|
|
4
4
|
interface WidevineConfig {
|
|
@@ -45,7 +45,23 @@ declare function hlsDrmConfig(input: BridgeInput): Record<string, unknown>;
|
|
|
45
45
|
/** Generate dash.js settings fragment from resolved DRM info. */
|
|
46
46
|
declare function dashDrmConfig(input: BridgeInput): Record<string, unknown>;
|
|
47
47
|
|
|
48
|
+
interface EmeOptions {
|
|
49
|
+
keySystem: KeySystem;
|
|
50
|
+
licenseUrl: string;
|
|
51
|
+
certificateUrl?: string | undefined;
|
|
52
|
+
headers?: Record<string, string> | undefined;
|
|
53
|
+
prepareLicenseRequest?: ((payload: Uint8Array) => Uint8Array | Promise<Uint8Array>) | undefined;
|
|
54
|
+
processLicenseResponse?: ((response: Uint8Array) => Uint8Array | Promise<Uint8Array>) | undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Set up standalone EME (Encrypted Media Extensions) handling on a video element.
|
|
58
|
+
* This enables DRM-protected MP4 playback without hls.js or dash.js.
|
|
59
|
+
*
|
|
60
|
+
* Returns a cleanup function that removes listeners and closes sessions.
|
|
61
|
+
*/
|
|
62
|
+
declare function setupEme(videoElement: MediaElement, options: EmeOptions, onError: (err: Error) => void): () => void;
|
|
63
|
+
|
|
48
64
|
/** Create a DRM plugin for vide. */
|
|
49
65
|
declare function drm(options: DrmPluginOptions): Plugin;
|
|
50
66
|
|
|
51
|
-
export { type DrmPluginOptions, type FairPlayConfig, type KeySystem, type ResolvedDrmConfig, type WidevineConfig, dashDrmConfig, detectKeySystem, drm, hlsDrmConfig };
|
|
67
|
+
export { type DrmPluginOptions, type FairPlayConfig, type KeySystem, type ResolvedDrmConfig, type WidevineConfig, dashDrmConfig, detectKeySystem, drm, hlsDrmConfig, setupEme };
|
package/dist/drm/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
import'../chunk-DWXOYV4E.mjs';function l(e){let r={licenseUrl:e.licenseUrl,serverCertificateUrl:e.certificateUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.apple.fps.1_0":r}}}function g(e){let r={serverURL:e.licenseUrl,serverCertificateURL:e.certificateUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.apple.fps.1_0":r}}}}}function h(e){let r={licenseUrl:e.licenseUrl};if(e.headers){let t=e.headers;r.licenseXhrSetup=n=>{for(let[i,s]of Object.entries(t))n.setRequestHeader(i,s);};}return {emeEnabled:true,drmSystems:{"com.widevine.alpha":r}}}function v(e){let r={serverURL:e.licenseUrl};return e.headers&&(r.httpRequestHeaders=e.headers),{streaming:{protection:{data:{"com.widevine.alpha":r}}}}}function u(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?h(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?l(e.fairplay):{}}function y(e){return e.keySystem==="com.widevine.alpha"&&e.widevine?v(e.widevine):e.keySystem==="com.apple.fps.1_0"&&e.fairplay?g(e.fairplay):{}}var K="com.apple.fps.1_0",M=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],P=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];async function m(e){for(let r of e)try{let t=r===K?P:M;return await navigator.requestMediaKeySystemAccess(r,t),r}catch{}return null}var R="com.apple.fps.1_0",U=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}],D=[{initDataTypes:["sinf"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.42E01E"'}]}];function p(e,r,t){let n=false,i=[],s=null,a=o=>{if(n||e.mediaKeys&&e.mediaKeys!==s||!s||!o.initData)return;let f=s.createSession("temporary");i.push(f),f.generateRequest(o.initDataType,o.initData).then(()=>{},c=>{n||t(c instanceof Error?c:new Error("generateRequest failed"));}),f.addEventListener("message",c=>{n||k(c,f,r,t,()=>n);}),f.addEventListener("keystatuseschange",()=>{if(!n)for(let[,c]of f.keyStatuses)(c==="expired"||c==="internal-error")&&t(new Error(`Key status: ${c}`));});},d=r.keySystem===R?D:U;return navigator.requestMediaKeySystemAccess(r.keySystem,d).then(o=>{if(!n)return o.createMediaKeys()}).then(o=>{if(!(n||!o)&&(s=o,r.keySystem===R&&r.certificateUrl))return L(r.certificateUrl,r.headers,t,()=>n).then(f=>{if(!(n||!f))return s?.setServerCertificate(f.buffer)})}).then(()=>{n||!s||(e.mediaKeys||e.setMediaKeys(s),e.addEventListener("encrypted",a));}).catch(o=>{n||t(o instanceof Error?o:new Error("EME setup failed"));}),()=>{n=true,e.removeEventListener("encrypted",a);for(let o of i)o.close().catch(()=>{});}}async function L(e,r,t,n){try{let i=await fetch(e,r?{headers:r}:{});if(!i.ok)throw new Error(`Certificate fetch failed: ${i.status} ${i.statusText}`);let s=await i.arrayBuffer();return n()?null:new Uint8Array(s)}catch(i){return n()||t(i instanceof Error?i:new Error("Certificate fetch failed")),null}}function k(e,r,t,n,i){let s=new Uint8Array(e.message);Promise.resolve(t.prepareLicenseRequest?t.prepareLicenseRequest(s):s).then(a=>{if(!i())return fetch(t.licenseUrl,{method:"POST",body:a.buffer,...t.headers?{headers:t.headers}:{}})}).then(a=>{if(!(i()||!a)){if(!a.ok)throw new Error(`License request failed: ${a.status} ${a.statusText}`);return a.arrayBuffer()}}).then(a=>{if(i()||!a)return;let d=new Uint8Array(a);return Promise.resolve(t.processLicenseResponse?t.processLicenseResponse(d):d)}).then(a=>{if(!(i()||!a))return r.update(a.buffer)}).catch(a=>{i()||n(a instanceof Error?a:new Error("License exchange failed"));});}function B(e){return {name:"drm",setup(r){let t=false,n,i=[];return e.widevine&&i.push("com.widevine.alpha"),e.fairplay&&i.push("com.apple.fps.1_0"),i.length===0?(console.warn("[vide/drm] No DRM configuration provided"),()=>{}):(m(i).then(s=>{if(t)return;if(!s){r.emit("error",{code:4e3,message:"No supported DRM key system found",source:"drm"});return}let a={keySystem:s,widevine:e.widevine,fairplay:e.fairplay},d={keySystem:s,hlsConfig:u(a),dashConfig:y(a)};r.setPluginData("drm",d);let o=s!=="com.widevine.alpha",f=o?e.fairplay:e.widevine;if(!f)return;let c={keySystem:s,licenseUrl:f.licenseUrl,headers:f.headers,prepareLicenseRequest:f.prepareLicenseRequest,processLicenseResponse:f.processLicenseResponse};o&&(c.certificateUrl=f.certificateUrl),n=p(r.el,c,C=>{t||r.emit("error",{code:4002,message:C.message,source:"drm"});});}).catch(s=>{t||r.emit("error",{code:4001,message:s instanceof Error?`DRM detection failed: ${s.message}`:"DRM detection failed",source:"drm"});}),()=>{t=true,n?.();})}}}export{y as dashDrmConfig,m as detectKeySystem,B as drm,u as hlsDrmConfig,p as setupEme};
|
package/dist/hls/index.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { e as Plugin } from '../types-
|
|
1
|
+
import { R as RecoveryConfig, e as Plugin } from '../types-vxIcXgJz.js';
|
|
2
2
|
|
|
3
3
|
interface HlsPluginOptions {
|
|
4
4
|
/** Configuration passed directly to the hls.js constructor. */
|
|
5
5
|
hlsConfig?: Record<string, unknown> | undefined;
|
|
6
|
+
/** Error recovery settings. `false` to disable. Defaults to enabled (3 retries, 3s delay, 2x backoff). */
|
|
7
|
+
recovery?: Partial<RecoveryConfig> | false | undefined;
|
|
6
8
|
}
|
|
7
9
|
|
|
8
10
|
/** Create an HLS streaming plugin for vide. */
|
package/dist/hls/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
export{
|
|
1
|
+
import {a}from'../chunk-H3OXPFD3.mjs';import'../chunk-DWXOYV4E.mjs';var E=["application/vnd.apple.mpegurl","application/x-mpegurl"],T={maxRetries:3,retryDelay:3e3,backoffMultiplier:2};function _(r){if(r.startsWith("data:")){let e=r.indexOf(";");return e===-1?false:E.includes(r.slice(5,e).toLowerCase())}if(r.startsWith("blob:"))return r.includes(".m3u8");try{return new URL(r,"https://placeholder.invalid").pathname.endsWith(".m3u8")}catch{return r.includes(".m3u8")}}function C(r){return E.includes(r.toLowerCase())}function w(r={}){return {name:"hls",setup(e){let d=null,u=false,f=r.recovery===false?false:{...T,...r.recovery??{}},o=0,m=null;function g(){m!==null&&(clearTimeout(m),m=null);}function L(s,i){if(f===false||u||o>=f.maxRetries)return false;o++;let l=f.retryDelay*f.backoffMultiplier**(o-1);return g(),m=setTimeout(()=>{u||(i==="networkError"?s.startLoad(-1):s.recoverMediaError());},l),true}let v={canHandle(s,i){return i&&C(i)?true:_(s)},load(s,i){this.unload(i),b(s,i);},unload(s){g(),o=0,d&&(d.destroy(),d=null);}};function b(s,i){import('hls.js').then(l=>{if(u)return;let a$1=l.default;if(!a$1.isSupported()){if(i.canPlayType("application/vnd.apple.mpegurl")){i.src=s;return}e.emit("error",{code:2e3,message:"HLS is not supported in this browser",source:"hls"});return}let H=e.getPluginData("drm"),R={...r.hlsConfig??{},...H?.hlsConfig??{}},n=new a$1(R);d=n,e.setPluginData("hls",n),n.on(a$1.Events.ERROR,(h,t)=>{if(!t.fatal)return;let c=L(n,t.type);e.emit("error",{code:2002,message:`HLS fatal error: ${t.type} - ${t.details}`,source:"hls",recoverable:c,retryCount:c?o:void 0});}),n.on(a$1.Events.FRAG_LOADED,()=>{o>0&&(o=0,g());}),n.on(a$1.Events.MANIFEST_PARSED,()=>{let h=n.levels.map((t,c)=>({id:c,width:t.width,height:t.height,bitrate:t.bitrate,label:a(t.height)}));e.setPluginData("qualities",h),e.setPluginData("qualitySetter",t=>{n.currentLevel=t,e.setPluginData("autoQuality",t===-1);});}),n.on(a$1.Events.LEVEL_SWITCHED,(h,t)=>{let p=e.qualities[t.level];p&&(e.setPluginData("currentQuality",p),e.setPluginData("autoQuality",n.autoLevelEnabled));}),n.attachMedia(i),n.loadSource(s);}).catch(l=>{u||e.emit("error",{code:2001,message:l instanceof Error?`Failed to load hls.js: ${l.message}`:"Failed to load hls.js",source:"hls"});});}return e.registerSourceHandler(v),()=>{u=true,g(),v.unload(e.el);}}}}
|
|
2
|
+
export{w as hls};
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,28 @@
|
|
|
1
|
-
import { P as Player } from './types-
|
|
2
|
-
export { A as AdQuartile, E as EventBus, a as EventHandler, b as PlayerEvent, c as PlayerEventMap, d as PlayerState, e as Plugin, S as SourceHandler } from './types-
|
|
1
|
+
import { M as MediaElement, P as Player } from './types-vxIcXgJz.js';
|
|
2
|
+
export { A as AdQuartile, E as EventBus, a as EventHandler, b as PlayerEvent, c as PlayerEventMap, d as PlayerState, e as Plugin, Q as QualityLevel, R as RecoveryConfig, S as SeekableRange, f as SourceHandler, V as VideCue, g as VideTextTrack } from './types-vxIcXgJz.js';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** Create a vide player instance wrapping the given media element. */
|
|
5
|
+
declare function createPlayer(el: MediaElement): Player;
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
/** Core: HTMLMediaElement error. */
|
|
8
|
+
declare const ERR_MEDIA = 1000;
|
|
9
|
+
/** HLS: browser does not support MSE or hls.js. */
|
|
10
|
+
declare const ERR_HLS_UNSUPPORTED = 2000;
|
|
11
|
+
/** HLS: dynamic import of hls.js failed. */
|
|
12
|
+
declare const ERR_HLS_IMPORT = 2001;
|
|
13
|
+
/** HLS: fatal hls.js playback error. */
|
|
14
|
+
declare const ERR_HLS_FATAL = 2002;
|
|
15
|
+
/** DASH: dynamic import of dashjs failed. */
|
|
16
|
+
declare const ERR_DASH_IMPORT = 3000;
|
|
17
|
+
/** DASH: dashjs playback error. */
|
|
18
|
+
declare const ERR_DASH_PLAYBACK = 3001;
|
|
19
|
+
/** DRM: no supported key system found. */
|
|
20
|
+
declare const ERR_DRM_UNSUPPORTED = 4000;
|
|
21
|
+
/** DRM: key system detection failed. */
|
|
22
|
+
declare const ERR_DRM_DETECTION = 4001;
|
|
23
|
+
/** DRM: license request failed. */
|
|
24
|
+
declare const ERR_DRM_LICENSE = 4002;
|
|
25
|
+
/** DRM: certificate request failed. */
|
|
26
|
+
declare const ERR_DRM_CERTIFICATE = 4003;
|
|
27
|
+
|
|
28
|
+
export { ERR_DASH_IMPORT, ERR_DASH_PLAYBACK, ERR_DRM_CERTIFICATE, ERR_DRM_DETECTION, ERR_DRM_LICENSE, ERR_DRM_UNSUPPORTED, ERR_HLS_FATAL, ERR_HLS_IMPORT, ERR_HLS_UNSUPPORTED, ERR_MEDIA, MediaElement, Player, createPlayer };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
export{e as ERR_DASH_IMPORT,f as ERR_DASH_PLAYBACK,j as ERR_DRM_CERTIFICATE,h as ERR_DRM_DETECTION,i as ERR_DRM_LICENSE,g as ERR_DRM_UNSUPPORTED,d as ERR_HLS_FATAL,c as ERR_HLS_IMPORT,b as ERR_HLS_UNSUPPORTED,a as ERR_MEDIA}from'./chunk-DWXOYV4E.mjs';var ne={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","playing","error"],"ad:paused":["ad:playing","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function re(t,a){return ne[t].includes(a)}function ae(t){return t.readyState>=3?t.paused?"ready":"playing":t.readyState>=1?"loading":"idle"}function ie(t){let a=ae(t),g=t instanceof HTMLAudioElement,p=new Map,E=[],l=false,k=[],d=null,m=t.getAttribute("src")??"",L=false,o=new Map,h=t.duration===Number.POSITIVE_INFINITY,b=null;function x(e){let n=p.get(e);return n||(n=new Set,p.set(e,n)),n}function i(e,n){let r=p.get(e);if(r)for(let u of r)try{u(n);}catch(y){console.error("[vide] Event handler error:",y);}}function s(e){if(e===a)return;if(!re(a,e)){console.warn(`[vide] Invalid transition: ${a} \u2192 ${e}`);return}let n=a;a=e,i("statechange",{from:n,to:e});}function v(){return a==="ad:loading"||a==="ad:playing"||a==="ad:paused"}function S(){!v()&&t.paused&&s("loading");}function R(){a==="loading"&&s("ready");}function P(){v()||s("playing"),i("play",void 0);}function H(){v()||s("paused"),i("pause",void 0);}function w(){a==="playing"&&s("buffering");}function C(){(a==="buffering"||a==="ready")&&s("playing");}function I(){v()||s("ended"),i("ended",void 0);}function M(){i("timeupdate",{currentTime:t.currentTime,duration:t.duration});}function _(){let e=t.error;v()||s("error"),i("error",{code:e?.code??1e3,message:e?.message??"Unknown error",source:"core"});}function A(){let e=t.duration===Number.POSITIVE_INFINITY;e!==h&&(h=e,i("livestatechange",{isLive:e}));}t.addEventListener("durationchange",A),t.addEventListener("loadstart",S),t.addEventListener("canplay",R),t.addEventListener("play",P),t.addEventListener("pause",H),t.addEventListener("waiting",w),t.addEventListener("playing",C),t.addEventListener("ended",I),t.addEventListener("timeupdate",M),t.addEventListener("error",_);function T(e,n){return {id:n,label:e.label,language:e.language,kind:e.kind,active:e.mode==="showing"}}function V(e){if(!e)return [];let n=[];for(let r=0;r<e.length;r++){let u=e[r];n.push({startTime:u.startTime,endTime:u.endTime,text:u.text??""});}return n}let c=new Map;function Q(e){if(c.has(e))return;let n=()=>{e.mode==="showing"&&i("cuechange",{cues:V(e.activeCues)});};c.set(e,n),e.addEventListener("cuechange",n);}function j(e){let n=c.get(e);n&&(e.removeEventListener("cuechange",n),c.delete(e));}function O(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));i("texttracksavailable",{tracks:e});}function D(){for(let e=0;e<t.textTracks.length;e++)Q(t.textTracks[e]);O();}function q(e){e.track&&j(e.track),O();}let N=typeof t.textTracks.addEventListener=="function";if(N){t.textTracks.addEventListener("addtrack",D),t.textTracks.addEventListener("removetrack",q);for(let e=0;e<t.textTracks.length;e++)Q(t.textTracks[e]);}let U=new Set(["statechange","play","pause","ended","timeupdate","livestatechange","error","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","qualitiesavailable","qualitychange","texttrackchange","texttracksavailable","cuechange","destroy"]);function K(){if(t.removeEventListener("durationchange",A),t.removeEventListener("loadstart",S),t.removeEventListener("canplay",R),t.removeEventListener("play",P),t.removeEventListener("pause",H),t.removeEventListener("waiting",w),t.removeEventListener("playing",C),t.removeEventListener("ended",I),t.removeEventListener("timeupdate",M),t.removeEventListener("error",_),N){t.textTracks.removeEventListener("addtrack",D),t.textTracks.removeEventListener("removetrack",q);for(let[e,n]of c)e.removeEventListener("cuechange",n);c.clear();}}function Y(){if(d||L)return;let e=t.querySelectorAll("source");for(let n of e){let r=n.getAttribute("src"),u=n.getAttribute("type")??void 0;if(r){for(let y of k)if(y.canHandle(r,u)){d=y,m=r,s("loading"),y.load(r,t);for(let W of e)W.remove();return}}}}let f={get el(){return t},get state(){return a},on(e,n){U.has(e)?x(e).add(n):t.addEventListener(e,n);},off(e,n){U.has(e)?x(e).delete(n):t.removeEventListener(e,n);},emit:i,once(e,n){let r=u=>{f.off(e,r),n(u);};f.on(e,r);},play(){return t.play()},pause(){t.pause();},get currentTime(){return t.currentTime},set currentTime(e){t.currentTime=e;},get duration(){return t.duration},set duration(e){},get volume(){return t.volume},set volume(e){t.volume=e;},get muted(){return t.muted},set muted(e){t.muted=e;},get playbackRate(){return t.playbackRate},set playbackRate(e){t.playbackRate=e;},get paused(){return t.paused},get ended(){return t.ended},get readyState(){return t.readyState},get buffered(){return t.buffered},get seekable(){return t.seekable},get seeking(){return t.seeking},get isLive(){return l?false:t.duration===Number.POSITIVE_INFINITY},get seekableRange(){return l||t.seekable.length===0?null:{start:t.seekable.start(0),end:t.seekable.end(0)}},get qualities(){return o.get("qualities")??[]},get currentQuality(){return o.get("currentQuality")??null},get isAutoQuality(){return o.get("autoQuality")??true},get isAudio(){return g},setQuality(e){let n=o.get("qualitySetter");n&&n(e);},get textTracks(){return t.textTracks},getTextTracks(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));return e},getActiveTextTrack(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return T(t.textTracks[e],e);return null},get activeCues(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return V(t.textTracks[e].activeCues);return []},setTextTrack(e){for(let r=0;r<t.textTracks.length;r++)t.textTracks[r].mode=r===e?"showing":"disabled";let n=e>=0&&e<t.textTracks.length?T(t.textTracks[e],e):null;i("texttrackchange",{track:n});},addTextTrack(e){let n=document.createElement("track");n.src=e.src,n.label=e.label,n.srclang=e.language,n.kind=e.kind??"subtitles",e.default&&(n.default=true),t.appendChild(n);},get videoWidth(){return g?0:t.videoWidth},get videoHeight(){return g?0:t.videoHeight},get networkState(){return t.networkState},get loop(){return t.loop},set loop(e){t.loop=e;},get autoplay(){return t.autoplay},set autoplay(e){t.autoplay=e;},get poster(){return g?"":t.poster},set poster(e){g||(t.poster=e);},get preload(){return t.preload},set preload(e){t.preload=e;},get defaultPlaybackRate(){return t.defaultPlaybackRate},set defaultPlaybackRate(e){t.defaultPlaybackRate=e;},get defaultMuted(){return t.defaultMuted},set defaultMuted(e){t.defaultMuted=e;},get crossOrigin(){return t.crossOrigin},set crossOrigin(e){t.crossOrigin=e;},get controls(){return t.controls},set controls(e){t.controls=e;},get src(){return m},set src(e){if(d&&(d.unload(t),d=null),o.delete("qualities"),o.delete("currentQuality"),o.delete("autoQuality"),o.delete("qualitySetter"),b=null,L=true,m=e,!e){t.removeAttribute("src");return}for(let n of k)if(n.canHandle(e)){d=n,s("loading"),n.load(e,t);return}t.src=e;},registerSourceHandler(e){if(l){console.warn("[vide] Cannot register source handler after destroy");return}k.push(e),!L&&!d&&Y();},addEventListener(e,n,r){t.addEventListener(e,n,r);},removeEventListener(e,n,r){t.removeEventListener(e,n,r);},use(e){if(l){console.warn("[vide] Cannot use plugin after destroy");return}let n=e.setup(f);n&&E.push(n);},setPluginData(e,n){if(o.set(e,n),e==="qualities")i("qualitiesavailable",{qualities:n});else if(e==="currentQuality"){let r=n;i("qualitychange",{from:b,to:r}),b=r;}},getPluginData(e){return o.get(e)},destroy(){if(!l){l=true,d&&(d.unload(t),d=null);for(let e of E)try{e();}catch(n){console.error("[vide] Plugin cleanup error:",n);}E.length=0,i("destroy",void 0),K(),p.clear(),o.clear();}}};return f._setState=s,f}export{ie as createPlayer};
|
package/dist/omid/index.d.ts
CHANGED
package/dist/omid/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function E(e,t,r){let
|
|
2
|
-
export{
|
|
1
|
+
function E(e,t,r){let n=true;t.adEvents.loaded(t.vastProperties),t.adEvents.impressionOccurred(),t.mediaEvents.start(r,e.el.muted?0:e.el.volume);function o(i){n&&(i.quartile==="firstQuartile"?t.mediaEvents.firstQuartile():i.quartile==="midpoint"?t.mediaEvents.midpoint():i.quartile==="thirdQuartile"&&t.mediaEvents.thirdQuartile());}function s(i){n&&(i.to==="ad:paused"?t.mediaEvents.pause():i.to==="ad:playing"&&i.from==="ad:paused"&&t.mediaEvents.resume());}function d(){n&&(n=false,t.mediaEvents.complete(),t.finish());}function a(){n&&(n=false,t.mediaEvents.skipped(),t.finish());}function u(){n&&(n=false,t.error("Ad playback error"),t.finish());}function c(){n&&(n=false,t.finish());}function l(i){n&&t.mediaEvents.volumeChange(i.volume);}function p(i){if(!n)return;let v=i.fullscreen?"fullscreen":"normal";t.mediaEvents.playerStateChange(v);}return e.on("ad:quartile",o),e.on("statechange",s),e.on("ad:end",d),e.on("ad:skip",a),e.on("ad:error",u),e.on("destroy",c),e.on("ad:volumeChange",l),e.on("ad:fullscreen",p),()=>{n=false,e.off("ad:quartile",o),e.off("statechange",s),e.off("ad:end",d),e.off("ad:skip",a),e.off("ad:error",u),e.off("destroy",c),e.off("ad:volumeChange",l),e.off("ad:fullscreen",p);}}function w(e,t){return new Promise((r,n)=>{let o=document.createElement("script");o.src=e,o.async=true;let s=setTimeout(()=>{o.remove(),n(new Error(`OM SDK script load timeout: ${e}`));},t);o.onload=()=>{clearTimeout(s),r();},o.onerror=()=>{clearTimeout(s),o.remove(),n(new Error(`OM SDK script load failed: ${e}`));},document.head.appendChild(o);})}function b(){let t=globalThis.OmidSessionClient;if(!t)return null;let r=t.default??t;return typeof r.AdSession!="function"?null:r}async function h(e,t,r){let n=Date.now();if(await w(e,r),t){let s=Date.now()-n,d=Math.max(r-s,1e3);await w(t,d);}let o=b();if(!o)throw new Error("OM SDK namespace not found after script load");return o}function P(e,t,r){let n=new e.Partner(r.partner.name,r.partner.version),o=r.verifications.filter(m=>m.resourceUrl).map(m=>new e.VerificationScriptResource(m.resourceUrl,m.vendor,m.parameters,"full")),s=new e.Context(n,o,r.contentUrl,r.customReferenceData);s.setVideoElement(t);let d=t.parentElement;d&&s.setSlotElement(d),s.setServiceWindow(window);let a=new e.AdSession(s);if(a.setCreativeType("video"),a.setImpressionType("beginToRender"),!a.isSupported())throw new Error("OM SDK session not supported in this environment");let u=false,c=false,l=null;a.registerSessionObserver(m=>{m.type==="sessionStart"&&(u=true,l&&(l(true),l=null));}),a.start();let p=new e.AdEvents(a),i=new e.MediaEvents(a),v=r.position??"standalone",f=r.skipOffset!==void 0,O=r.skipOffset??-1,S=r.isAutoPlay??true,y=new e.VastProperties(f,O,S,v);return {get adEvents(){return p},get mediaEvents(){return i},get vastProperties(){return y},get started(){return u},waitForStart(m){return u?Promise.resolve(true):new Promise(g=>{l=g,setTimeout(()=>{u||(l=null,g(false));},m);})},finish(){c||(c=true,a.finish());},error(m){a.error("video",m);}}}var A="https://pagead2.googlesyndication.com/omsdk/releases/live/omweb-v1.js";function j(e){return {name:"omid",setup(t,r){let n=r.verifications??[];if(n.length===0)return;let o=false,s=null,d=null,a=e.timeout??5e3,u=e.serviceScriptUrl??A,c={...e,serviceScriptUrl:u,verifications:n,skipOffset:r.creatives[0]?.linear?.skipOffset},l=h(u,e.sessionClientUrl,a).catch(i=>i);async function p(){if(!o)try{let i=await l;if(o)return;if(i instanceof Error)throw i;let f=P(i,t.el,c);if(d=f,o){f.finish();return}let O=await f.waitForStart(a);if(o){f.finish();return}if(!O){console.warn("[vide:omid] Session start timed out"),f.finish();return}let S=Number.isFinite(t.el.duration)?t.el.duration:0;s=E(t,f,S);}catch(i){if(o)return;console.warn("[vide:omid] Failed to initialize:",i instanceof Error?i.message:String(i)),t.emit("ad:error",{error:i instanceof Error?i:new Error(String(i)),source:"omid"});}}return p(),()=>{o=true,s&&(s(),s=null),d&&(d.finish(),d=null);}}}}
|
|
2
|
+
export{j as omid};
|
package/dist/simid/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as AdPlugin } from '../types-
|
|
2
|
-
import '../types-
|
|
1
|
+
import { b as AdPlugin } from '../types-CAJmacV6.js';
|
|
2
|
+
import '../types-vxIcXgJz.js';
|
|
3
3
|
|
|
4
4
|
interface SimidPluginOptions {
|
|
5
5
|
/** Container element to mount the SIMID iframe into. */
|
package/dist/simid/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function k(t,r){let i=document.createElement("iframe");i.sandbox.add("allow-scripts","allow-same-origin"),i.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;border:none;display:none;pointer-events:auto;",i.src=t;let a=new MessageChannel,o=a.port1,l=()=>{i.contentWindow?.postMessage("simid:connect","*",[a.port2]);};i.addEventListener("load",l,{once:true}),r.appendChild(i);let m=false;return {iframe:i,port:o,show(){m||(i.style.display="");},destroy(){m||(m=true,i.removeEventListener("load",l),i.remove(),o.close());}}}function h(t,r,i,a){return {sessionId:t,messageId:r,timestamp:Date.now(),type:i,args:a}}function j(t,r,i,a){let o={messageId:i};return a!==void 0&&(o.value=a),h(t,r,"resolve",o)}function T(t,r,i,a,o){let l={errorCode:a};return o!==void 0&&(l.message=o),h(t,r,"reject",{messageId:i,value:l})}function b(t){if(typeof t!="object"||t===null)return null;let r=t;return typeof r.sessionId!="string"||typeof r.messageId!="number"||typeof r.timestamp!="number"||typeof r.type!="string"?null:{sessionId:r.sessionId,messageId:r.messageId,timestamp:r.timestamp,type:r.type,args:r.args}}function x(t){return t.type==="createSession"}function C(t){return t.type==="resolve"}function y(t){return t.type==="reject"}function L(t,r,i,a){let o=false,l="",m=0,f=[],d=new Map;function w(){return m++}function S(e,n){let s=w(),u=h(l,s,e,n);return r.postMessage(u),s}function g(e,n){let s=w();r.postMessage(j(l,s,e,n));}function M(e,n,s){let u=w();r.postMessage(T(l,u,e,n,s));}function P(e,n,s){return new Promise((u,c)=>{let v=S(e,n),I=setTimeout(()=>{d.delete(v),c(new Error(`SIMID timeout waiting for response to ${e}`));},i.handshakeTimeout);d.set(v,{resolve:p=>{clearTimeout(I),d.delete(v),u(p);},reject:p=>{clearTimeout(I),d.delete(v),c(p);}});})}function q(){let e=t.el.getBoundingClientRect();return {x:Math.round(e.x),y:Math.round(e.y),width:Math.round(e.width),height:Math.round(e.height)}}function A(){let e=q();return {videoDimensions:e,creativeDimensions:e,fullscreen:!!document.fullscreenElement,fullscreenAllowed:!!document.fullscreenEnabled,variableDurationAllowed:false,skippableState:"playerHandles",version:"1.2",muted:t.muted,volume:t.volume,navigationSupport:i.policy.navigation==="new-tab"?"playerHandles":"notSupported"}}function N(){return {adParameters:"",clickThruUrl:a.creatives[0]?.linear?.clickThrough}}function O(){return {currentTime:t.el.currentTime,duration:t.el.duration,ended:t.el.ended,muted:t.muted,paused:t.el.paused,volume:t.volume,fullscreen:!!document.fullscreenElement}}function H(){let e=t.el,n=["play","pause","playing","ended","seeking","seeked","stalled"];for(let I of n){let p=()=>{o||S(`SIMID:Media:${I}`);};e.addEventListener(I,p),f.push(()=>e.removeEventListener(I,p));}let s=()=>{o||S("SIMID:Media:timeupdate",{currentTime:e.currentTime});};e.addEventListener("timeupdate",s),f.push(()=>e.removeEventListener("timeupdate",s));let u=()=>{o||S("SIMID:Media:durationchange",{duration:e.duration});};e.addEventListener("durationchange",u),f.push(()=>e.removeEventListener("durationchange",u));let c=()=>{o||S("SIMID:Media:volumechange",{volume:e.volume,muted:e.muted});};e.addEventListener("volumechange",c),f.push(()=>e.removeEventListener("volumechange",c));let v=()=>{o||S("SIMID:Media:error",{error:e.error?.code??0,message:e.error?.message??""});};e.addEventListener("error",v),f.push(()=>e.removeEventListener("error",v));}function V(e){if(o)return;if(C(e)||y(e)){let u=e.args?.messageId;if(u!==void 0){let c=d.get(u);c&&(C(e)?c.resolve(e):c.reject(new Error(`SIMID creative rejected: ${JSON.stringify(e.args)}`)));}return}let n=e.type;if(n==="SIMID:Creative:requestPause"){i.policy.allowPause?(t.pause(),g(e.messageId)):M(e.messageId,1203,"Pause not allowed");return}if(n==="SIMID:Creative:requestPlay"){i.policy.allowPlay?(t.play(),g(e.messageId)):M(e.messageId,1203,"Play not allowed");return}if(n==="SIMID:Creative:requestResize"){i.policy.allowResize?g(e.messageId):M(e.messageId,1203,"Resize not allowed");return}if(n==="SIMID:Creative:requestNavigation"){let s=e.args;i.policy.navigation==="new-tab"&&s?.uri?(window.open(s.uri,"_blank"),g(e.messageId)):M(e.messageId,1214,"Navigation not supported");return}if(n==="SIMID:Creative:getMediaState"){g(e.messageId,O());return}if(n==="SIMID:Creative:requestSkip"){g(e.messageId),t.emit("ad:skip",{adId:a.id});return}if(n==="SIMID:Creative:requestStop"){g(e.messageId),S("SIMID:Player:adStopped",{code:4}),D(),t.emit("ad:skip",{adId:a.id});return}if(n!=="SIMID:Creative:clickThru"){if(n==="SIMID:Creative:fatalError"){t.emit("ad:error",{error:new Error(`SIMID creative fatal error: ${JSON.stringify(e.args)}`)}),D();return}if(n==="SIMID:Creative:log"){let s=e.args;console.debug("[vide:simid] creative:",s?.message);return}if(n==="SIMID:Creative:reportTracking"){g(e.messageId);return}if(n==="SIMID:Creative:requestChangeVolume"){let s=e.args;s?.volume!==void 0&&(t.volume=s.volume),s?.muted!==void 0&&(t.muted=s.muted),g(e.messageId);return}if(n==="SIMID:Creative:requestFullscreen"||n==="SIMID:Creative:requestExitFullscreen"||n==="SIMID:Creative:requestChangeAdDuration"){M(e.messageId,1203,"Not supported");return}if(n==="SIMID:Creative:expandNonlinear"||n==="SIMID:Creative:collapseNonlinear"){M(e.messageId,1203,"Not supported");return}}}function R(e){let n=b(e.data);n&&V(n);}function D(){if(!o){o=true,r.removeEventListener("message",R);for(let e of f)e();f.length=0;for(let[,e]of d)e.reject(new Error("SIMID host destroyed"));d.clear();}}async function F(){r.addEventListener("message",R),r.start();let e=await new Promise((u,c)=>{let v=setTimeout(()=>{c(new Error("SIMID handshake timeout: no createSession"));},i.handshakeTimeout),I=p=>{let E=b(p.data);!E||!x(E)||(clearTimeout(v),r.removeEventListener("message",I),u(E));};r.addEventListener("message",I);});if(o)throw new Error("SIMID host destroyed during handshake");l=e.sessionId,g(e.messageId);let n=await P("SIMID:Player:init",{environmentData:A(),creativeData:N()});if(o)throw new Error("SIMID host destroyed during handshake");if(y(n))throw new Error(`SIMID creative rejected init: ${JSON.stringify(n.args)}`);let s=await P("SIMID:Player:startCreative");if(o)throw new Error("SIMID host destroyed during handshake");if(y(s))throw new Error(`SIMID creative rejected startCreative: ${JSON.stringify(s.args)}`);H();}return {start:F,destroy:D}}var z={allowPause:true,allowPlay:true,allowResize:false,navigation:"new-tab"};function G(t){return {name:"simid",setup(r,i){let a=i.creatives.flatMap(d=>d.linear?.interactiveCreativeFiles??[]).find(d=>d.apiFramework==="SIMID");if(!a)return;let o={...z,...t.policy},l=t.handshakeTimeout??5e3,m=k(a.url,t.container),f=L(r,m.port,{policy:o,handshakeTimeout:l},i);return f.start().then(()=>m.show()).catch(d=>{r.emit("ad:error",{error:d instanceof Error?d:new Error(String(d))}),m.destroy();}),()=>{f.destroy(),m.destroy();}}}}export{G as simid};
|
|
1
|
+
function k(t,r){let i=document.createElement("iframe");i.sandbox.add("allow-scripts","allow-same-origin"),i.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;border:none;display:none;pointer-events:auto;",i.src=t;let a=new MessageChannel,o=a.port1,l=()=>{i.contentWindow?.postMessage("simid:connect","*",[a.port2]);};i.addEventListener("load",l,{once:true}),r.appendChild(i);let m=false;return {iframe:i,port:o,show(){m||(i.style.display="");},destroy(){m||(m=true,i.removeEventListener("load",l),i.remove(),o.close());}}}function h(t,r,i,a){return {sessionId:t,messageId:r,timestamp:Date.now(),type:i,args:a}}function j(t,r,i,a){let o={messageId:i};return a!==void 0&&(o.value=a),h(t,r,"resolve",o)}function T(t,r,i,a,o){let l={errorCode:a};return o!==void 0&&(l.message=o),h(t,r,"reject",{messageId:i,value:l})}function b(t){if(typeof t!="object"||t===null)return null;let r=t;return typeof r.sessionId!="string"||typeof r.messageId!="number"||typeof r.timestamp!="number"||typeof r.type!="string"?null:{sessionId:r.sessionId,messageId:r.messageId,timestamp:r.timestamp,type:r.type,args:r.args}}function x(t){return t.type==="createSession"}function C(t){return t.type==="resolve"}function y(t){return t.type==="reject"}function L(t,r,i,a){let o=false,l="",m=0,f=[],d=new Map;function w(){return m++}function S(e,n){let s=w(),u=h(l,s,e,n);return r.postMessage(u),s}function g(e,n){let s=w();r.postMessage(j(l,s,e,n));}function M(e,n,s){let u=w();r.postMessage(T(l,u,e,n,s));}function P(e,n,s){return new Promise((u,c)=>{let v=S(e,n),I=setTimeout(()=>{d.delete(v),c(new Error(`SIMID timeout waiting for response to ${e}`));},i.handshakeTimeout);d.set(v,{resolve:p=>{clearTimeout(I),d.delete(v),u(p);},reject:p=>{clearTimeout(I),d.delete(v),c(p);}});})}function q(){let e=t.el.getBoundingClientRect();return {x:Math.round(e.x),y:Math.round(e.y),width:Math.round(e.width),height:Math.round(e.height)}}function A(){let e=q();return {videoDimensions:e,creativeDimensions:e,fullscreen:!!document.fullscreenElement,fullscreenAllowed:!!document.fullscreenEnabled,variableDurationAllowed:false,skippableState:"playerHandles",version:"1.2",muted:t.muted,volume:t.volume,navigationSupport:i.policy.navigation==="new-tab"?"playerHandles":"notSupported"}}function N(){return {adParameters:"",clickThruUrl:a.creatives[0]?.linear?.clickThrough}}function O(){return {currentTime:t.el.currentTime,duration:t.el.duration,ended:t.el.ended,muted:t.muted,paused:t.el.paused,volume:t.volume,fullscreen:!!document.fullscreenElement}}function H(){let e=t.el,n=["play","pause","playing","ended","seeking","seeked","stalled"];for(let I of n){let p=()=>{o||S(`SIMID:Media:${I}`);};e.addEventListener(I,p),f.push(()=>e.removeEventListener(I,p));}let s=()=>{o||S("SIMID:Media:timeupdate",{currentTime:e.currentTime});};e.addEventListener("timeupdate",s),f.push(()=>e.removeEventListener("timeupdate",s));let u=()=>{o||S("SIMID:Media:durationchange",{duration:e.duration});};e.addEventListener("durationchange",u),f.push(()=>e.removeEventListener("durationchange",u));let c=()=>{o||S("SIMID:Media:volumechange",{volume:e.volume,muted:e.muted});};e.addEventListener("volumechange",c),f.push(()=>e.removeEventListener("volumechange",c));let v=()=>{o||S("SIMID:Media:error",{error:e.error?.code??0,message:e.error?.message??""});};e.addEventListener("error",v),f.push(()=>e.removeEventListener("error",v));}function V(e){if(o)return;if(C(e)||y(e)){let u=e.args?.messageId;if(u!==void 0){let c=d.get(u);c&&(C(e)?c.resolve(e):c.reject(new Error(`SIMID creative rejected: ${JSON.stringify(e.args)}`)));}return}let n=e.type;if(n==="SIMID:Creative:requestPause"){i.policy.allowPause?(t.pause(),g(e.messageId)):M(e.messageId,1203,"Pause not allowed");return}if(n==="SIMID:Creative:requestPlay"){i.policy.allowPlay?(t.play(),g(e.messageId)):M(e.messageId,1203,"Play not allowed");return}if(n==="SIMID:Creative:requestResize"){i.policy.allowResize?g(e.messageId):M(e.messageId,1203,"Resize not allowed");return}if(n==="SIMID:Creative:requestNavigation"){let s=e.args;i.policy.navigation==="new-tab"&&s?.uri?(window.open(s.uri,"_blank"),g(e.messageId)):M(e.messageId,1214,"Navigation not supported");return}if(n==="SIMID:Creative:getMediaState"){g(e.messageId,O());return}if(n==="SIMID:Creative:requestSkip"){g(e.messageId),t.emit("ad:skip",{adId:a.id});return}if(n==="SIMID:Creative:requestStop"){g(e.messageId),S("SIMID:Player:adStopped",{code:4}),D(),t.emit("ad:skip",{adId:a.id});return}if(n!=="SIMID:Creative:clickThru"){if(n==="SIMID:Creative:fatalError"){t.emit("ad:error",{error:new Error(`SIMID creative fatal error: ${JSON.stringify(e.args)}`),source:"simid"}),D();return}if(n==="SIMID:Creative:log"){let s=e.args;console.debug("[vide:simid] creative:",s?.message);return}if(n==="SIMID:Creative:reportTracking"){g(e.messageId);return}if(n==="SIMID:Creative:requestChangeVolume"){let s=e.args;s?.volume!==void 0&&(t.volume=s.volume),s?.muted!==void 0&&(t.muted=s.muted),g(e.messageId);return}if(n==="SIMID:Creative:requestFullscreen"||n==="SIMID:Creative:requestExitFullscreen"||n==="SIMID:Creative:requestChangeAdDuration"){M(e.messageId,1203,"Not supported");return}if(n==="SIMID:Creative:expandNonlinear"||n==="SIMID:Creative:collapseNonlinear"){M(e.messageId,1203,"Not supported");return}}}function R(e){let n=b(e.data);n&&V(n);}function D(){if(!o){o=true,r.removeEventListener("message",R);for(let e of f)e();f.length=0;for(let[,e]of d)e.reject(new Error("SIMID host destroyed"));d.clear();}}async function F(){r.addEventListener("message",R),r.start();let e=await new Promise((u,c)=>{let v=setTimeout(()=>{c(new Error("SIMID handshake timeout: no createSession"));},i.handshakeTimeout),I=p=>{let E=b(p.data);!E||!x(E)||(clearTimeout(v),r.removeEventListener("message",I),u(E));};r.addEventListener("message",I);});if(o)throw new Error("SIMID host destroyed during handshake");l=e.sessionId,g(e.messageId);let n=await P("SIMID:Player:init",{environmentData:A(),creativeData:N()});if(o)throw new Error("SIMID host destroyed during handshake");if(y(n))throw new Error(`SIMID creative rejected init: ${JSON.stringify(n.args)}`);let s=await P("SIMID:Player:startCreative");if(o)throw new Error("SIMID host destroyed during handshake");if(y(s))throw new Error(`SIMID creative rejected startCreative: ${JSON.stringify(s.args)}`);H();}return {start:F,destroy:D}}var z={allowPause:true,allowPlay:true,allowResize:false,navigation:"new-tab"};function G(t){return {name:"simid",setup(r,i){let a=i.creatives.flatMap(d=>d.linear?.interactiveCreativeFiles??[]).find(d=>d.apiFramework==="SIMID");if(!a)return;let o={...z,...t.policy},l=t.handshakeTimeout??5e3,m=k(a.url,t.container),f=L(r,m.port,{policy:o,handshakeTimeout:l},i);return f.start().then(()=>m.show()).catch(d=>{r.emit("ad:error",{error:d instanceof Error?d:new Error(String(d)),source:"simid"}),m.destroy();}),()=>{f.destroy(),m.destroy();}}}}export{G as simid};
|
package/dist/ssai/index.d.ts
CHANGED