@mks2508/bundlp 0.1.0 → 0.1.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.
Files changed (87) hide show
  1. package/README.md +48 -1
  2. package/dist/index.d.mts +614 -0
  3. package/dist/index.d.mts.map +1 -0
  4. package/dist/index.mjs +3072 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +22 -10
  7. package/dist/core/extractor.d.ts +0 -30
  8. package/dist/core/extractor.d.ts.map +0 -1
  9. package/dist/http/client.d.ts +0 -50
  10. package/dist/http/client.d.ts.map +0 -1
  11. package/dist/http/retry.d.ts +0 -22
  12. package/dist/http/retry.d.ts.map +0 -1
  13. package/dist/index.d.ts +0 -20
  14. package/dist/index.d.ts.map +0 -1
  15. package/dist/index.js +0 -19021
  16. package/dist/innertube/client.d.ts +0 -62
  17. package/dist/innertube/client.d.ts.map +0 -1
  18. package/dist/player/ast/analyzer.d.ts +0 -16
  19. package/dist/player/ast/analyzer.d.ts.map +0 -1
  20. package/dist/player/ast/extractor.d.ts +0 -35
  21. package/dist/player/ast/extractor.d.ts.map +0 -1
  22. package/dist/player/ast/matchers.d.ts +0 -40
  23. package/dist/player/ast/matchers.d.ts.map +0 -1
  24. package/dist/player/cache.d.ts +0 -60
  25. package/dist/player/cache.d.ts.map +0 -1
  26. package/dist/player/player.d.ts +0 -49
  27. package/dist/player/player.d.ts.map +0 -1
  28. package/dist/po-token/botguard/challenge.d.ts +0 -22
  29. package/dist/po-token/botguard/challenge.d.ts.map +0 -1
  30. package/dist/po-token/botguard/client.d.ts +0 -25
  31. package/dist/po-token/botguard/client.d.ts.map +0 -1
  32. package/dist/po-token/cache/token-cache.d.ts +0 -24
  33. package/dist/po-token/cache/token-cache.d.ts.map +0 -1
  34. package/dist/po-token/index.d.ts +0 -14
  35. package/dist/po-token/index.d.ts.map +0 -1
  36. package/dist/po-token/manager.d.ts +0 -34
  37. package/dist/po-token/manager.d.ts.map +0 -1
  38. package/dist/po-token/minter/web-minter.d.ts +0 -20
  39. package/dist/po-token/minter/web-minter.d.ts.map +0 -1
  40. package/dist/po-token/policies.d.ts +0 -18
  41. package/dist/po-token/policies.d.ts.map +0 -1
  42. package/dist/po-token/providers/local.provider.d.ts +0 -26
  43. package/dist/po-token/providers/local.provider.d.ts.map +0 -1
  44. package/dist/po-token/providers/provider.interface.d.ts +0 -15
  45. package/dist/po-token/providers/provider.interface.d.ts.map +0 -1
  46. package/dist/po-token/types.d.ts +0 -160
  47. package/dist/po-token/types.d.ts.map +0 -1
  48. package/dist/result/index.d.ts +0 -6
  49. package/dist/result/index.d.ts.map +0 -1
  50. package/dist/result/result.types.d.ts +0 -14
  51. package/dist/result/result.types.d.ts.map +0 -1
  52. package/dist/result/result.utils.d.ts +0 -32
  53. package/dist/result/result.utils.d.ts.map +0 -1
  54. package/dist/streaming/dash/parser.d.ts +0 -37
  55. package/dist/streaming/dash/parser.d.ts.map +0 -1
  56. package/dist/streaming/dash/segments.d.ts +0 -58
  57. package/dist/streaming/dash/segments.d.ts.map +0 -1
  58. package/dist/streaming/decipher.d.ts +0 -24
  59. package/dist/streaming/decipher.d.ts.map +0 -1
  60. package/dist/streaming/drm.d.ts +0 -26
  61. package/dist/streaming/drm.d.ts.map +0 -1
  62. package/dist/streaming/formats.d.ts +0 -20
  63. package/dist/streaming/formats.d.ts.map +0 -1
  64. package/dist/streaming/hls/parser.d.ts +0 -10
  65. package/dist/streaming/hls/parser.d.ts.map +0 -1
  66. package/dist/streaming/hls/segments.d.ts +0 -37
  67. package/dist/streaming/hls/segments.d.ts.map +0 -1
  68. package/dist/streaming/processor.d.ts +0 -20
  69. package/dist/streaming/processor.d.ts.map +0 -1
  70. package/dist/types/error.types.d.ts +0 -12
  71. package/dist/types/error.types.d.ts.map +0 -1
  72. package/dist/types/index.d.ts +0 -8
  73. package/dist/types/index.d.ts.map +0 -1
  74. package/dist/types/innertube.types.d.ts +0 -155
  75. package/dist/types/innertube.types.d.ts.map +0 -1
  76. package/dist/types/player.types.d.ts +0 -30
  77. package/dist/types/player.types.d.ts.map +0 -1
  78. package/dist/types/video.types.d.ts +0 -112
  79. package/dist/types/video.types.d.ts.map +0 -1
  80. package/dist/utils/constants.d.ts +0 -129
  81. package/dist/utils/constants.d.ts.map +0 -1
  82. package/dist/utils/m3u8.d.ts +0 -31
  83. package/dist/utils/m3u8.d.ts.map +0 -1
  84. package/dist/utils/xml.d.ts +0 -41
  85. package/dist/utils/xml.d.ts.map +0 -1
  86. package/dist/validation/schemas.d.ts +0 -290
  87. package/dist/validation/schemas.d.ts.map +0 -1
package/README.md CHANGED
@@ -432,10 +432,57 @@ bun run cli formats https://youtube.com/watch?v=dQw4w9WgXcQ
432
432
  # Debug extraction
433
433
  bun run cli debug https://youtube.com/watch?v=dQw4w9WgXcQ
434
434
 
435
- # Run benchmarks
435
+ # Run benchmarks (bundlp only)
436
436
  bun run cli benchmark
437
437
  ```
438
438
 
439
+ ## Benchmarking
440
+
441
+ Compare bundlp performance against other libraries (yt-dlp, YouTube.js).
442
+
443
+ ### Compare Libraries
444
+
445
+ ```bash
446
+ # Compare all three libraries on a single video
447
+ bun run cli benchmark compare <url>
448
+
449
+ # Compare specific libraries
450
+ bun run cli benchmark compare <url> -l bundlp,yt-dlp
451
+
452
+ # Specify output format
453
+ bun run cli benchmark compare <url> -o json -f results.json
454
+
455
+ # With warmup and multiple iterations
456
+ bun run cli benchmark compare <url> -w 2 -i 3
457
+ ```
458
+
459
+ **Options:**
460
+ - `-l, --libraries <libs>` - Libraries to compare (default: bundlp,yt-dlp,YouTube.js)
461
+ - `-w, --warmup <count>` - Warmup iterations (default: 1)
462
+ - `-i, --iterations <count>` - Measurement iterations (default: 1)
463
+ - `--no-validate` - Skip URL playability validation
464
+ - `-o, --output <format>` - Output format: console|json|all (default: console)
465
+ - `-f, --file <path>` - Output file path for JSON
466
+
467
+ ### Export JSON
468
+
469
+ Export video information in yt-dlp compatible JSON format.
470
+
471
+ ```bash
472
+ # Export to JSON with auto-generated filename
473
+ bun run cli benchmark export-json <url>
474
+
475
+ # Specify output file
476
+ bun run cli benchmark export-json <url> -o my-video.json
477
+ ```
478
+
479
+ The JSON includes:
480
+ - Basic video info (id, title, duration, view count)
481
+ - Format count and breakdown (video/audio/combined)
482
+ - Highest quality available
483
+ - URL playability rate
484
+ - bundlp metadata (version, extraction time, comparison results)
485
+
439
486
  ## Performance
440
487
 
441
488
  | Operation | Time (cached) | Time (fresh) |
@@ -0,0 +1,614 @@
1
+ import * as _mks2508_better_logger0 from "@mks2508/better-logger";
2
+
3
+ //#region src/result/result.types.d.ts
4
+
5
+ /**
6
+ * Result Pattern Types
7
+ * Functional error handling without exceptions
8
+ */
9
+ interface ResultOk<T> {
10
+ readonly ok: true;
11
+ readonly value: T;
12
+ }
13
+ interface ResultErr<E> {
14
+ readonly ok: false;
15
+ readonly error: E;
16
+ }
17
+ type Result<T, E> = ResultOk<T> | ResultErr<E>;
18
+ //#endregion
19
+ //#region src/result/result.utils.d.ts
20
+ /** Create a successful result */
21
+ declare const ok: <T>(value: T) => ResultOk<T>;
22
+ /** Create an error result */
23
+ declare const err: <E>(error: E) => ResultErr<E>;
24
+ /** Type guard for successful result */
25
+ declare const isOk: <T, E>(result: Result<T, E>) => result is ResultOk<T>;
26
+ /** Type guard for error result */
27
+ declare const isErr: <T, E>(result: Result<T, E>) => result is ResultErr<E>;
28
+ /** Pattern match on a Result */
29
+ declare function match<T, E, U>(result: Result<T, E>, handlers: {
30
+ ok: (value: T) => U;
31
+ err: (error: E) => U;
32
+ }): U;
33
+ /** Map over a successful result */
34
+ declare function map<T, E, U>(result: Result<T, E>, fn: (value: T) => U): Result<U, E>;
35
+ /** Map over an error result */
36
+ declare function mapErr<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
37
+ /** Chain Results (flatMap) */
38
+ declare function andThen<T, E, U>(result: Result<T, E>, fn: (value: T) => Result<U, E>): Result<U, E>;
39
+ /** Unwrap with default value */
40
+ declare function unwrapOr<T, E>(result: Result<T, E>, defaultValue: T): T;
41
+ /** Unwrap or throw */
42
+ declare function unwrap<T, E>(result: Result<T, E>): T;
43
+ /** Try to execute a function and wrap in Result */
44
+ declare function tryCatch<T, E = Error>(fn: () => T): Result<T, E>;
45
+ /** Try to execute an async function and wrap in Result */
46
+ declare function tryCatchAsync<T, E = Error>(fn: () => Promise<T>): Promise<Result<T, E>>;
47
+ //#endregion
48
+ //#region src/types/error.types.d.ts
49
+ /**
50
+ * Error Types for bundlp
51
+ */
52
+ type ErrorCode = 'INVALID_URL' | 'INVALID_CLIENT' | 'VIDEO_NOT_FOUND' | 'VIDEO_UNAVAILABLE' | 'VIDEO_PRIVATE' | 'VIDEO_REGION_BLOCKED' | 'VIDEO_AGE_RESTRICTED' | 'VIDEO_DRM_PROTECTED' | 'LOGIN_REQUIRED' | 'RATE_LIMITED' | 'PO_TOKEN_REQUIRED' | 'PO_TOKEN_EXPIRED' | 'BOTGUARD_INIT_FAILED' | 'BOTGUARD_SNAPSHOT_FAILED' | 'INTEGRITY_TOKEN_FAILED' | 'ALL_PROVIDERS_FAILED' | 'CIPHER_FAILED' | 'PLAYER_FETCH_FAILED' | 'INNERTUBE_ERROR' | 'NETWORK_ERROR' | 'PARSE_ERROR' | 'CACHE_ERROR' | 'UNKNOWN_ERROR';
53
+ interface BundlpError {
54
+ code: ErrorCode;
55
+ message: string;
56
+ cause?: unknown;
57
+ recoverable?: boolean;
58
+ }
59
+ //#endregion
60
+ //#region src/types/video.types.d.ts
61
+ /**
62
+ * Video Types for bundlp
63
+ */
64
+ interface VideoInfo {
65
+ id: string;
66
+ title: string;
67
+ description: string;
68
+ duration: number;
69
+ uploadDate?: string;
70
+ channel: ChannelInfo;
71
+ viewCount: number;
72
+ likeCount?: number;
73
+ thumbnails: Thumbnail[];
74
+ formats: FormatCollection;
75
+ subtitles: Map<string, Subtitle[]>;
76
+ chapters?: Chapter[];
77
+ isLive: boolean;
78
+ isPrivate: boolean;
79
+ }
80
+ interface ChannelInfo {
81
+ id: string;
82
+ name: string;
83
+ url: string;
84
+ }
85
+ interface Thumbnail {
86
+ url: string;
87
+ width: number;
88
+ height: number;
89
+ }
90
+ interface FormatCollection {
91
+ combined: Format[];
92
+ video: Format[];
93
+ audio: Format[];
94
+ hls?: HlsInfo;
95
+ dash?: DashInfo;
96
+ }
97
+ interface Format {
98
+ itag: number;
99
+ url: string;
100
+ mimeType: string;
101
+ codecs: string[];
102
+ bitrate?: number;
103
+ width?: number;
104
+ height?: number;
105
+ fps?: number;
106
+ qualityLabel?: string;
107
+ quality?: string;
108
+ audioQuality?: string;
109
+ audioSampleRate?: number;
110
+ audioChannels?: number;
111
+ contentLength?: number;
112
+ initRange?: {
113
+ start: string;
114
+ end: string;
115
+ };
116
+ indexRange?: {
117
+ start: string;
118
+ end: string;
119
+ };
120
+ approxDurationMs?: number;
121
+ targetDurationSec?: number;
122
+ hasDrm: boolean;
123
+ isAdaptive: boolean;
124
+ }
125
+ interface AudioFormat extends Format {
126
+ audioSampleRate: number;
127
+ audioChannels: number;
128
+ loudnessDb?: number;
129
+ }
130
+ interface VideoFormat extends Format {
131
+ width: number;
132
+ height: number;
133
+ fps: number;
134
+ qualityLabel: string;
135
+ }
136
+ interface HlsInfo {
137
+ manifestUrl: string;
138
+ variants: HlsVariant[];
139
+ }
140
+ interface HlsVariant {
141
+ url: string;
142
+ bandwidth: number;
143
+ resolution?: string;
144
+ codecs?: string;
145
+ }
146
+ interface DashInfo {
147
+ manifestUrl: string;
148
+ duration: number;
149
+ }
150
+ interface Subtitle {
151
+ url: string;
152
+ language: string;
153
+ languageName: string;
154
+ isAutoGenerated: boolean;
155
+ format: 'vtt' | 'ttml' | 'srv1' | 'srv2' | 'srv3' | 'json3';
156
+ }
157
+ interface Chapter {
158
+ title: string;
159
+ startTime: number;
160
+ endTime: number;
161
+ thumbnail?: Thumbnail;
162
+ }
163
+ interface Storyboard {
164
+ templateUrl: string;
165
+ width: number;
166
+ height: number;
167
+ count: number;
168
+ interval: number;
169
+ columns: number;
170
+ rows: number;
171
+ }
172
+ //#endregion
173
+ //#region src/types/innertube.types.d.ts
174
+ /**
175
+ * InnerTube API Types
176
+ */
177
+ type ClientName = 'WEB' | 'WEB_REMIX' | 'WEB_EMBEDDED_PLAYER' | 'WEB_KIDS' | 'ANDROID' | 'ANDROID_MUSIC' | 'iOS' | 'TVHTML5' | 'MWEB';
178
+ interface ClientConfig {
179
+ name: ClientName;
180
+ version: string;
181
+ clientId: string;
182
+ apiKey?: string;
183
+ userAgent: string;
184
+ platform?: string;
185
+ sdkVersion?: number;
186
+ deviceModel?: string;
187
+ osName?: string;
188
+ osVersion?: string;
189
+ }
190
+ interface InnerTubeContext {
191
+ client: {
192
+ clientName: string;
193
+ clientVersion: string;
194
+ hl?: string;
195
+ gl?: string;
196
+ visitorData?: string;
197
+ userAgent?: string;
198
+ platform?: string;
199
+ clientFormFactor?: string;
200
+ clientScreen?: string;
201
+ androidSdkVersion?: number;
202
+ deviceModel?: string;
203
+ osName?: string;
204
+ osVersion?: string;
205
+ };
206
+ user?: {
207
+ lockedSafetyMode: boolean;
208
+ };
209
+ request?: {
210
+ useSsl: boolean;
211
+ internalExperimentFlags?: unknown[];
212
+ };
213
+ thirdParty?: {
214
+ embedUrl: string;
215
+ };
216
+ }
217
+ interface PlayerResponse {
218
+ playabilityStatus: PlayabilityStatus;
219
+ videoDetails?: VideoDetails;
220
+ streamingData?: StreamingData;
221
+ captions?: CaptionsData;
222
+ microformat?: MicroformatData;
223
+ storyboards?: StoryboardData;
224
+ }
225
+ interface PlayabilityStatus {
226
+ status: 'OK' | 'UNPLAYABLE' | 'LOGIN_REQUIRED' | 'AGE_CHECK_REQUIRED' | 'ERROR';
227
+ reason?: string;
228
+ playableInEmbed?: boolean;
229
+ liveStreamability?: unknown;
230
+ }
231
+ interface VideoDetails {
232
+ videoId: string;
233
+ title: string;
234
+ lengthSeconds: string;
235
+ channelId: string;
236
+ shortDescription: string;
237
+ thumbnail: {
238
+ thumbnails: Array<{
239
+ url: string;
240
+ width: number;
241
+ height: number;
242
+ }>;
243
+ };
244
+ viewCount: string;
245
+ author: string;
246
+ isLiveContent: boolean;
247
+ isPrivate: boolean;
248
+ keywords?: string[];
249
+ }
250
+ interface StreamingData {
251
+ expiresInSeconds: string;
252
+ formats?: RawFormat[];
253
+ adaptiveFormats?: RawFormat[];
254
+ hlsManifestUrl?: string;
255
+ dashManifestUrl?: string;
256
+ }
257
+ interface RawFormat {
258
+ itag: number;
259
+ url?: string;
260
+ signatureCipher?: string;
261
+ cipher?: string;
262
+ mimeType: string;
263
+ bitrate: number;
264
+ width?: number;
265
+ height?: number;
266
+ fps?: number;
267
+ qualityLabel?: string;
268
+ quality: string;
269
+ audioQuality?: string;
270
+ audioSampleRate?: string;
271
+ audioChannels?: number;
272
+ contentLength?: string;
273
+ approxDurationMs?: string;
274
+ initRange?: {
275
+ start: string;
276
+ end: string;
277
+ };
278
+ indexRange?: {
279
+ start: string;
280
+ end: string;
281
+ };
282
+ lastModified?: string;
283
+ drmFamilies?: string[];
284
+ }
285
+ interface CaptionsData {
286
+ playerCaptionsTracklistRenderer?: {
287
+ captionTracks?: CaptionTrack[];
288
+ };
289
+ }
290
+ interface CaptionTrack {
291
+ baseUrl: string;
292
+ languageCode: string;
293
+ name: {
294
+ simpleText: string;
295
+ };
296
+ kind?: string;
297
+ isTranslatable?: boolean;
298
+ }
299
+ interface MicroformatData {
300
+ playerMicroformatRenderer?: {
301
+ uploadDate?: string;
302
+ publishDate?: string;
303
+ category?: string;
304
+ isFamilySafe?: boolean;
305
+ lengthSeconds?: string;
306
+ };
307
+ }
308
+ interface StoryboardData {
309
+ playerStoryboardSpecRenderer?: {
310
+ spec?: string;
311
+ };
312
+ }
313
+ //#endregion
314
+ //#region src/types/player.types.d.ts
315
+ /**
316
+ * Player Types - Cipher extraction
317
+ */
318
+ interface PlayerInfo {
319
+ playerId: string;
320
+ playerUrl: string;
321
+ signatureTimestamp: number;
322
+ sigFunction: CipherFunction;
323
+ nFunction: CipherFunction;
324
+ cachedAt: number;
325
+ }
326
+ type CipherFunction = (input: string) => string;
327
+ interface SignatureCipher {
328
+ signature: string;
329
+ signatureParam: string;
330
+ url: string;
331
+ }
332
+ //#endregion
333
+ //#region src/utils/constants.d.ts
334
+ declare const INNERTUBE_CLIENTS: {
335
+ readonly WEB: {
336
+ readonly NAME: "WEB";
337
+ readonly VERSION: "2.20250222.10.00";
338
+ readonly CLIENT_ID: 1;
339
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
340
+ readonly INNERTUBE_CONTEXT: {
341
+ readonly client: {
342
+ readonly clientName: "WEB";
343
+ readonly clientVersion: "2.20250222.10.00";
344
+ readonly platform: "DESKTOP";
345
+ };
346
+ };
347
+ readonly HEADERS: {
348
+ readonly 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
349
+ readonly 'X-YouTube-Client-Name': "1";
350
+ readonly 'X-YouTube-Client-Version': "2.20250222.10.00";
351
+ };
352
+ };
353
+ readonly ANDROID: {
354
+ readonly NAME: "ANDROID";
355
+ readonly VERSION: "19.35.36";
356
+ readonly CLIENT_ID: 3;
357
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
358
+ readonly SDK_VERSION: 33;
359
+ readonly INNERTUBE_CONTEXT: {
360
+ readonly client: {
361
+ readonly clientName: "ANDROID";
362
+ readonly clientVersion: "19.35.36";
363
+ readonly androidSdkVersion: 33;
364
+ };
365
+ };
366
+ readonly HEADERS: {
367
+ readonly 'User-Agent': "com.google.android.youtube/19.35.36(Linux; U; Android 13; en_US; SM-S908E Build/TP1A.220624.014) gzip";
368
+ readonly 'X-YouTube-Client-Name': "3";
369
+ readonly 'X-YouTube-Client-Version': "19.35.36";
370
+ };
371
+ };
372
+ readonly TV: {
373
+ readonly NAME: "TVHTML5";
374
+ readonly VERSION: "7.20250923.13.00";
375
+ readonly CLIENT_ID: 7;
376
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
377
+ readonly INNERTUBE_CONTEXT: {
378
+ readonly client: {
379
+ readonly clientName: "TVHTML5";
380
+ readonly clientVersion: "7.20250923.13.00";
381
+ readonly userAgent: "Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version";
382
+ };
383
+ };
384
+ readonly HEADERS: {
385
+ readonly 'User-Agent': "Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version";
386
+ readonly 'X-YouTube-Client-Name': "7";
387
+ readonly 'X-YouTube-Client-Version': "7.20250923.13.00";
388
+ };
389
+ };
390
+ readonly IOS: {
391
+ readonly NAME: "IOS";
392
+ readonly VERSION: "20.10.4";
393
+ readonly CLIENT_ID: 5;
394
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
395
+ readonly INNERTUBE_CONTEXT: {
396
+ readonly client: {
397
+ readonly clientName: "IOS";
398
+ readonly clientVersion: "20.10.4";
399
+ readonly deviceMake: "Apple";
400
+ readonly deviceModel: "iPhone16,2";
401
+ readonly osName: "iPhone";
402
+ readonly osVersion: "18.3.2.22D82";
403
+ };
404
+ };
405
+ readonly HEADERS: {
406
+ readonly 'User-Agent': "com.google.ios.youtube/20.10.4 (iPhone16,2; U; CPU iOS 18_3_2 like Mac OS X;)";
407
+ readonly 'X-YouTube-Client-Name': "5";
408
+ readonly 'X-YouTube-Client-Version': "20.10.4";
409
+ };
410
+ };
411
+ readonly ANDROID_SDKLESS: {
412
+ readonly NAME: "ANDROID";
413
+ readonly VERSION: "20.10.38";
414
+ readonly CLIENT_ID: 3;
415
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
416
+ readonly INNERTUBE_CONTEXT: {
417
+ readonly client: {
418
+ readonly clientName: "ANDROID";
419
+ readonly clientVersion: "20.10.38";
420
+ readonly osName: "Android";
421
+ readonly osVersion: "11";
422
+ };
423
+ };
424
+ readonly HEADERS: {
425
+ readonly 'User-Agent': "com.google.android.youtube/20.10.38 (Linux; U; Android 11) gzip";
426
+ readonly 'X-YouTube-Client-Name': "3";
427
+ readonly 'X-YouTube-Client-Version': "20.10.38";
428
+ };
429
+ };
430
+ readonly TV_EMBEDDED: {
431
+ readonly NAME: "TVHTML5_SIMPLY_EMBEDDED_PLAYER";
432
+ readonly VERSION: "2.0";
433
+ readonly CLIENT_ID: 85;
434
+ readonly API_KEY: "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";
435
+ readonly INNERTUBE_CONTEXT: {
436
+ readonly client: {
437
+ readonly clientName: "TVHTML5_SIMPLY_EMBEDDED_PLAYER";
438
+ readonly clientVersion: "2.0";
439
+ readonly clientScreen: "EMBED";
440
+ readonly platform: "TV";
441
+ };
442
+ readonly thirdParty: {
443
+ readonly embedUrl: "https://www.youtube.com/";
444
+ };
445
+ };
446
+ readonly HEADERS: {
447
+ readonly 'User-Agent': "Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version";
448
+ readonly 'X-YouTube-Client-Name': "85";
449
+ readonly 'X-YouTube-Client-Version': "2.0";
450
+ };
451
+ };
452
+ };
453
+ type ClientName$1 = keyof typeof INNERTUBE_CLIENTS;
454
+ //#endregion
455
+ //#region src/core/extractor.d.ts
456
+ interface ExtractorConfig {
457
+ poToken?: string;
458
+ cacheDir?: string;
459
+ preferredClient?: ClientName$1;
460
+ }
461
+ /**
462
+ * Main YouTube video extractor class.
463
+ * Handles video information extraction using InnerTube API.
464
+ */
465
+ declare class YouTubeExtractor {
466
+ private client;
467
+ private player;
468
+ private config;
469
+ constructor(config?: ExtractorConfig);
470
+ /**
471
+ * Extracts video information from a YouTube URL or video ID.
472
+ * @param url - YouTube URL or video ID
473
+ * @returns Result containing VideoInfo or BundlpError
474
+ */
475
+ extract(url: string): Promise<Result<VideoInfo, BundlpError>>;
476
+ private parseVideoId;
477
+ private realExtract;
478
+ private processFormats;
479
+ private assembleVideoInfo;
480
+ }
481
+ //#endregion
482
+ //#region src/utils/headers.d.ts
483
+ /**
484
+ * HTTP Headers Utilities for YouTube Downloads
485
+ *
486
+ * Provides headers needed for downloading from deciphered YouTube URLs.
487
+ * These headers are extracted from bundlp's InnerTube client configurations.
488
+ */
489
+ /**
490
+ * Get HTTP headers for downloading from deciphered YouTube URLs
491
+ * Based on the client type used for extraction
492
+ *
493
+ * @param clientType - The client type to use (WEB, ANDROID, TV, IOS)
494
+ * @returns Object with required HTTP headers for YouTube CDN requests
495
+ */
496
+ declare function getDownloadHeaders(clientType?: 'WEB' | 'ANDROID' | 'TV' | 'IOS'): Record<string, string>;
497
+ /**
498
+ * Get minimal headers that work for most YouTube CDN requests
499
+ * Use this as a fallback if full headers cause issues
500
+ *
501
+ * @returns Minimal set of headers needed for YouTube downloads
502
+ */
503
+ declare function getMinimalDownloadHeaders(): Record<string, string>;
504
+ //#endregion
505
+ //#region src/po-token/policies.d.ts
506
+ type PoTokenRequirement = 'required' | 'recommended' | 'not_required';
507
+ interface PoTokenPolicy {
508
+ GVS: PoTokenRequirement | {
509
+ HTTPS: PoTokenRequirement;
510
+ DASH: PoTokenRequirement;
511
+ HLS: PoTokenRequirement;
512
+ };
513
+ PLAYER: PoTokenRequirement;
514
+ SUBS: PoTokenRequirement;
515
+ notRequiredForPremium?: boolean;
516
+ }
517
+ //#endregion
518
+ //#region src/po-token/types.d.ts
519
+ type PoTokenContext = 'GVS' | 'PLAYER' | 'SUBS';
520
+ type TokenBindingType = 'session' | 'content';
521
+ interface PoTokenData {
522
+ token: string;
523
+ integrityToken?: string;
524
+ createdAt: number;
525
+ expiresAt: number;
526
+ refreshAt: number;
527
+ bindingType: TokenBindingType;
528
+ bindingValue: string;
529
+ client: ClientName$1;
530
+ context: PoTokenContext;
531
+ }
532
+ interface ContentBinding {
533
+ videoId?: string;
534
+ channelId?: string;
535
+ playlistId?: string;
536
+ }
537
+ //#endregion
538
+ //#region src/po-token/providers/provider.interface.d.ts
539
+ interface PoTokenProvider {
540
+ readonly name: string;
541
+ readonly priority: number;
542
+ generate(identifier: string, binding?: ContentBinding): Promise<Result<PoTokenData, BundlpError>>;
543
+ isAvailable(): Promise<boolean>;
544
+ shutdown(): void;
545
+ }
546
+ interface PoTokenProviderOptions {
547
+ timeout?: number;
548
+ cacheEnabled?: boolean;
549
+ }
550
+ //#endregion
551
+ //#region src/po-token/manager.d.ts
552
+ interface PoTokenManagerConfig {
553
+ token?: string;
554
+ cacheEnabled?: boolean;
555
+ cachePath?: string;
556
+ timeout?: number;
557
+ providers?: PoTokenProvider[];
558
+ }
559
+ declare class PoTokenManager {
560
+ private staticToken?;
561
+ private policies;
562
+ private providers;
563
+ private cache;
564
+ constructor(config?: PoTokenManagerConfig);
565
+ getToken(identifier: string, client?: ClientName$1, binding?: ContentBinding): Promise<Result<string, BundlpError>>;
566
+ getTokenData(identifier: string, client?: ClientName$1, binding?: ContentBinding): Promise<Result<PoTokenData, BundlpError>>;
567
+ getColdStartToken(identifier: string): string;
568
+ isRequired(client: ClientName$1): boolean;
569
+ needsTokenForGvs(client: ClientName$1): boolean;
570
+ getPolicy(client: ClientName$1): PoTokenPolicy | undefined;
571
+ getVisitorData(): string | undefined;
572
+ shutdown(): void;
573
+ getCacheStats(): {
574
+ total: number;
575
+ expired: number;
576
+ valid: number;
577
+ } | null;
578
+ }
579
+ //#endregion
580
+ //#region src/po-token/providers/local.provider.d.ts
581
+ declare class LocalBotGuardProvider implements PoTokenProvider {
582
+ readonly name = "local-botguard";
583
+ readonly priority = 100;
584
+ private options;
585
+ private challengeFetcher;
586
+ private client;
587
+ private challenge;
588
+ private attestation;
589
+ private integrityData;
590
+ private minter;
591
+ private initPromise;
592
+ private createdAt;
593
+ constructor(options?: PoTokenProviderOptions);
594
+ isAvailable(): Promise<boolean>;
595
+ generate(identifier: string, _binding?: ContentBinding): Promise<Result<PoTokenData, BundlpError>>;
596
+ private ensureInitialized;
597
+ private initialize;
598
+ private reset;
599
+ shutdown(): void;
600
+ getVisitorData(): string | undefined;
601
+ }
602
+ //#endregion
603
+ //#region src/utils/logger.d.ts
604
+ declare const bundlpLogger: _mks2508_better_logger0.ScopedLogger;
605
+ declare const extractorLogger: _mks2508_better_logger0.ComponentLogger;
606
+ //#endregion
607
+ //#region src/index.d.ts
608
+ /**
609
+ * Appends po_token to a download URL
610
+ */
611
+ declare function appendPoToken(url: string, poToken: string): string;
612
+ //#endregion
613
+ export { type AudioFormat, type BundlpError, type ChannelInfo, type Chapter, type ClientConfig, type ClientName, type DashInfo, type ErrorCode, type ExtractorConfig, type Format, type FormatCollection, type HlsInfo, type HlsVariant, type InnerTubeContext, LocalBotGuardProvider, type PlayerInfo, type PlayerResponse, PoTokenManager, type PoTokenManagerConfig, type Result, type ResultErr, type ResultOk, type SignatureCipher, type Storyboard, type StreamingData, type Subtitle, type Thumbnail, type VideoFormat, type VideoInfo, YouTubeExtractor, andThen, appendPoToken, bundlpLogger, err, extractorLogger, getDownloadHeaders, getMinimalDownloadHeaders, isErr, isOk, map, mapErr, match, ok, tryCatch, tryCatchAsync, unwrap, unwrapOr };
614
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/result/result.types.ts","../src/result/result.utils.ts","../src/types/error.types.ts","../src/types/video.types.ts","../src/types/innertube.types.ts","../src/types/player.types.ts","../src/utils/constants.ts","../src/core/extractor.ts","../src/utils/headers.ts","../src/po-token/policies.ts","../src/po-token/types.ts","../src/po-token/providers/provider.interface.ts","../src/po-token/manager.ts","../src/po-token/providers/local.provider.ts","../src/utils/logger.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}