recker 1.0.19 → 1.0.20-next.963881c

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.
@@ -1,3 +1,2 @@
1
- #!/usr/bin/env node
2
1
  export {};
3
2
  //# sourceMappingURL=index.d.ts.map
package/dist/cli/index.js CHANGED
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env node
2
1
  import { program } from 'commander';
3
2
  import { promises as fs } from 'node:fs';
4
3
  import { join } from 'node:path';
@@ -725,7 +724,7 @@ ${colors.gray('Status:')} ${statusIcon}
725
724
  .command('generate-dmarc')
726
725
  .description('Generate a DMARC record interactively')
727
726
  .option('-p, --policy <policy>', 'Policy: none, quarantine, reject', 'none')
728
- .option('-sp, --subdomain-policy <policy>', 'Subdomain policy')
727
+ .option('--subdomain-policy <policy>', 'Subdomain policy')
729
728
  .option('--pct <percent>', 'Percentage of emails to apply policy', '100')
730
729
  .option('--rua <emails>', 'Aggregate report email(s), comma-separated')
731
730
  .option('--ruf <emails>', 'Forensic report email(s), comma-separated')
@@ -880,6 +879,295 @@ ${colors.bold(colors.yellow('Examples:'))}
880
879
  const { startLoadDashboard } = await import('./tui/load-dashboard.js');
881
880
  await startLoadDashboard({ url, users, duration, mode, http2, rampUp });
882
881
  });
882
+ const serve = program.command('serve').description('Start mock servers for testing protocols');
883
+ serve
884
+ .command('http')
885
+ .description('Start a mock HTTP server')
886
+ .option('-p, --port <number>', 'Port to listen on', '3000')
887
+ .option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
888
+ .option('--echo', 'Echo request body back in response')
889
+ .option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
890
+ .option('--cors', 'Enable CORS', true)
891
+ .addHelpText('after', `
892
+ ${colors.bold(colors.yellow('Examples:'))}
893
+ ${colors.green('$ rek serve http')} ${colors.gray('Start on port 3000')}
894
+ ${colors.green('$ rek serve http -p 8080')} ${colors.gray('Start on port 8080')}
895
+ ${colors.green('$ rek serve http --echo')} ${colors.gray('Echo mode')}
896
+ ${colors.green('$ rek serve http --delay 500')} ${colors.gray('Add 500ms delay')}
897
+ `)
898
+ .action(async (options) => {
899
+ const { MockHttpServer } = await import('../testing/mock-http-server.js');
900
+ const server = await MockHttpServer.create({
901
+ port: parseInt(options.port),
902
+ host: options.host,
903
+ delay: parseInt(options.delay),
904
+ cors: options.cors,
905
+ });
906
+ if (options.echo) {
907
+ server.any('/*', (req) => ({
908
+ status: 200,
909
+ body: {
910
+ method: req.method,
911
+ path: req.path,
912
+ query: req.query,
913
+ headers: req.headers,
914
+ body: req.body,
915
+ },
916
+ }));
917
+ }
918
+ console.log(colors.green(`
919
+ ┌─────────────────────────────────────────────┐
920
+ │ ${colors.bold('Recker Mock HTTP Server')} │
921
+ ├─────────────────────────────────────────────┤
922
+ │ URL: ${colors.cyan(server.url.padEnd(37))}│
923
+ │ Mode: ${colors.yellow((options.echo ? 'Echo' : 'Default').padEnd(36))}│
924
+ │ Delay: ${colors.gray((options.delay + 'ms').padEnd(35))}│
925
+ ├─────────────────────────────────────────────┤
926
+ │ Press ${colors.bold('Ctrl+C')} to stop │
927
+ └─────────────────────────────────────────────┘
928
+ `));
929
+ server.on('request', (req) => {
930
+ console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(req.method.padEnd(7)) + req.path);
931
+ });
932
+ process.on('SIGINT', async () => {
933
+ console.log(colors.yellow('\nShutting down...'));
934
+ await server.stop();
935
+ process.exit(0);
936
+ });
937
+ });
938
+ serve
939
+ .command('websocket')
940
+ .alias('ws')
941
+ .description('Start a mock WebSocket server')
942
+ .option('-p, --port <number>', 'Port to listen on', '8080')
943
+ .option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
944
+ .option('--echo', 'Echo messages back (default: true)', true)
945
+ .option('--no-echo', 'Disable echo mode')
946
+ .option('--delay <ms>', 'Add delay to responses (milliseconds)', '0')
947
+ .addHelpText('after', `
948
+ ${colors.bold(colors.yellow('Examples:'))}
949
+ ${colors.green('$ rek serve websocket')} ${colors.gray('Start on port 8080')}
950
+ ${colors.green('$ rek serve ws -p 9000')} ${colors.gray('Start on port 9000')}
951
+ ${colors.green('$ rek serve ws --no-echo')} ${colors.gray('Disable echo')}
952
+ `)
953
+ .action(async (options) => {
954
+ const { MockWebSocketServer } = await import('../testing/mock-websocket-server.js');
955
+ const server = await MockWebSocketServer.create({
956
+ port: parseInt(options.port),
957
+ host: options.host,
958
+ echo: options.echo,
959
+ delay: parseInt(options.delay),
960
+ });
961
+ console.log(colors.green(`
962
+ ┌─────────────────────────────────────────────┐
963
+ │ ${colors.bold('Recker Mock WebSocket Server')} │
964
+ ├─────────────────────────────────────────────┤
965
+ │ URL: ${colors.cyan(server.url.padEnd(37))}│
966
+ │ Echo: ${colors.yellow((options.echo ? 'Enabled' : 'Disabled').padEnd(36))}│
967
+ │ Delay: ${colors.gray((options.delay + 'ms').padEnd(35))}│
968
+ ├─────────────────────────────────────────────┤
969
+ │ Press ${colors.bold('Ctrl+C')} to stop │
970
+ └─────────────────────────────────────────────┘
971
+ `));
972
+ server.on('connection', (client) => {
973
+ console.log(colors.green(`+ Connected: ${client.id}`));
974
+ });
975
+ server.on('message', (msg, client) => {
976
+ const data = msg.data.toString().slice(0, 50);
977
+ console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(client.id) + ` ${data}${msg.data.toString().length > 50 ? '...' : ''}`);
978
+ });
979
+ server.on('disconnect', (client) => {
980
+ console.log(colors.red(`- Disconnected: ${client.id}`));
981
+ });
982
+ process.on('SIGINT', async () => {
983
+ console.log(colors.yellow('\nShutting down...'));
984
+ await server.stop();
985
+ process.exit(0);
986
+ });
987
+ });
988
+ serve
989
+ .command('sse')
990
+ .description('Start a mock SSE (Server-Sent Events) server')
991
+ .option('-p, --port <number>', 'Port to listen on', '8081')
992
+ .option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
993
+ .option('--path <string>', 'SSE endpoint path', '/events')
994
+ .option('--heartbeat <ms>', 'Send heartbeat every N ms (0 = disabled)', '0')
995
+ .addHelpText('after', `
996
+ ${colors.bold(colors.yellow('Examples:'))}
997
+ ${colors.green('$ rek serve sse')} ${colors.gray('Start on port 8081')}
998
+ ${colors.green('$ rek serve sse -p 9000')} ${colors.gray('Start on port 9000')}
999
+ ${colors.green('$ rek serve sse --heartbeat 5000')} ${colors.gray('Send heartbeat every 5s')}
1000
+
1001
+ ${colors.bold(colors.yellow('Interactive Commands:'))}
1002
+ Type a message and press Enter to broadcast it to all clients.
1003
+ `)
1004
+ .action(async (options) => {
1005
+ const { MockSSEServer } = await import('../testing/mock-sse-server.js');
1006
+ const readline = await import('node:readline');
1007
+ const server = await MockSSEServer.create({
1008
+ port: parseInt(options.port),
1009
+ host: options.host,
1010
+ path: options.path,
1011
+ });
1012
+ if (parseInt(options.heartbeat) > 0) {
1013
+ server.startPeriodicEvents('heartbeat', parseInt(options.heartbeat));
1014
+ }
1015
+ console.log(colors.green(`
1016
+ ┌─────────────────────────────────────────────┐
1017
+ │ ${colors.bold('Recker Mock SSE Server')} │
1018
+ ├─────────────────────────────────────────────┤
1019
+ │ URL: ${colors.cyan(server.url.padEnd(37))}│
1020
+ │ Heartbeat: ${colors.yellow((options.heartbeat === '0' ? 'Disabled' : options.heartbeat + 'ms').padEnd(31))}│
1021
+ ├─────────────────────────────────────────────┤
1022
+ │ Type message + Enter to broadcast │
1023
+ │ Press ${colors.bold('Ctrl+C')} to stop │
1024
+ └─────────────────────────────────────────────┘
1025
+ `));
1026
+ server.on('connection', (client) => {
1027
+ console.log(colors.green(`+ Connected: ${client.id}`));
1028
+ });
1029
+ server.on('disconnect', (client) => {
1030
+ console.log(colors.red(`- Disconnected: ${client.id}`));
1031
+ });
1032
+ const rl = readline.createInterface({
1033
+ input: process.stdin,
1034
+ output: process.stdout,
1035
+ });
1036
+ rl.on('line', (line) => {
1037
+ if (line.trim()) {
1038
+ const sent = server.sendData(line.trim());
1039
+ console.log(colors.gray(`Broadcast to ${sent} client(s): ${line.trim()}`));
1040
+ }
1041
+ });
1042
+ process.on('SIGINT', async () => {
1043
+ console.log(colors.yellow('\nShutting down...'));
1044
+ rl.close();
1045
+ await server.stop();
1046
+ process.exit(0);
1047
+ });
1048
+ });
1049
+ serve
1050
+ .command('hls')
1051
+ .description('Start a mock HLS streaming server')
1052
+ .option('-p, --port <number>', 'Port to listen on', '8082')
1053
+ .option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
1054
+ .option('--mode <type>', 'Stream mode: vod, live, event', 'vod')
1055
+ .option('--segments <number>', 'Number of segments (VOD mode)', '10')
1056
+ .option('--duration <seconds>', 'Segment duration in seconds', '6')
1057
+ .option('--qualities <list>', 'Comma-separated quality variants', '720p,480p,360p')
1058
+ .addHelpText('after', `
1059
+ ${colors.bold(colors.yellow('Examples:'))}
1060
+ ${colors.green('$ rek serve hls')} ${colors.gray('Start VOD server')}
1061
+ ${colors.green('$ rek serve hls --mode live')} ${colors.gray('Start live stream')}
1062
+ ${colors.green('$ rek serve hls --segments 20')} ${colors.gray('VOD with 20 segments')}
1063
+ ${colors.green('$ rek serve hls --qualities 1080p,720p,480p')}
1064
+
1065
+ ${colors.bold(colors.yellow('Endpoints:'))}
1066
+ ${colors.cyan('/master.m3u8')} Master playlist (multi-quality)
1067
+ ${colors.cyan('/playlist.m3u8')} Single quality playlist
1068
+ ${colors.cyan('/<quality>/playlist.m3u8')} Quality-specific playlist
1069
+ `)
1070
+ .action(async (options) => {
1071
+ const { MockHlsServer } = await import('../testing/mock-hls-server.js');
1072
+ const http = await import('node:http');
1073
+ const port = parseInt(options.port);
1074
+ const host = options.host;
1075
+ const qualities = options.qualities.split(',').map(q => q.trim());
1076
+ const resolutions = ['1920x1080', '1280x720', '854x480', '640x360', '426x240'];
1077
+ const bandwidths = [5000000, 2500000, 1400000, 800000, 500000];
1078
+ const variants = qualities.map((name, i) => ({
1079
+ name,
1080
+ bandwidth: bandwidths[i] || 500000,
1081
+ resolution: resolutions[i] || '640x360',
1082
+ }));
1083
+ const baseUrl = `http://${host}:${port}`;
1084
+ const hlsServer = await MockHlsServer.create({
1085
+ baseUrl,
1086
+ mode: options.mode,
1087
+ segmentCount: parseInt(options.segments),
1088
+ segmentDuration: parseInt(options.duration),
1089
+ multiQuality: variants.length > 1,
1090
+ variants: variants.length > 1 ? variants : undefined,
1091
+ });
1092
+ const httpServer = http.createServer(async (req, res) => {
1093
+ const url = `${baseUrl}${req.url}`;
1094
+ try {
1095
+ const response = await hlsServer.transport.dispatch({ url, method: req.method || 'GET' });
1096
+ res.statusCode = response.status;
1097
+ response.headers.forEach((value, key) => {
1098
+ res.setHeader(key, value);
1099
+ });
1100
+ const body = await response.arrayBuffer();
1101
+ res.end(Buffer.from(body));
1102
+ }
1103
+ catch {
1104
+ res.statusCode = 404;
1105
+ res.end('Not Found');
1106
+ }
1107
+ });
1108
+ httpServer.listen(port, host, () => {
1109
+ console.log(colors.green(`
1110
+ ┌─────────────────────────────────────────────┐
1111
+ │ ${colors.bold('Recker Mock HLS Server')} │
1112
+ ├─────────────────────────────────────────────┤
1113
+ │ Master: ${colors.cyan((hlsServer.manifestUrl).padEnd(34))}│
1114
+ │ Mode: ${colors.yellow(options.mode.padEnd(36))}│
1115
+ │ Segments: ${colors.gray(options.segments.padEnd(32))}│
1116
+ │ Duration: ${colors.gray((options.duration + 's').padEnd(32))}│
1117
+ │ Qualities: ${colors.cyan(qualities.join(', ').padEnd(31))}│
1118
+ ├─────────────────────────────────────────────┤
1119
+ │ Press ${colors.bold('Ctrl+C')} to stop │
1120
+ └─────────────────────────────────────────────┘
1121
+ `));
1122
+ });
1123
+ process.on('SIGINT', async () => {
1124
+ console.log(colors.yellow('\nShutting down...'));
1125
+ httpServer.close();
1126
+ await hlsServer.stop();
1127
+ process.exit(0);
1128
+ });
1129
+ });
1130
+ serve
1131
+ .command('udp')
1132
+ .description('Start a mock UDP server')
1133
+ .option('-p, --port <number>', 'Port to listen on', '9000')
1134
+ .option('-h, --host <string>', 'Host to bind to', '127.0.0.1')
1135
+ .option('--echo', 'Echo messages back (default: true)', true)
1136
+ .option('--no-echo', 'Disable echo mode')
1137
+ .addHelpText('after', `
1138
+ ${colors.bold(colors.yellow('Examples:'))}
1139
+ ${colors.green('$ rek serve udp')} ${colors.gray('Start on port 9000')}
1140
+ ${colors.green('$ rek serve udp -p 5353')} ${colors.gray('Start on port 5353')}
1141
+ ${colors.green('$ rek serve udp --no-echo')} ${colors.gray('Disable echo')}
1142
+ `)
1143
+ .action(async (options) => {
1144
+ const { MockUDPServer } = await import('../testing/mock-udp-server.js');
1145
+ const server = new MockUDPServer({
1146
+ port: parseInt(options.port),
1147
+ host: options.host,
1148
+ echo: options.echo,
1149
+ });
1150
+ await server.start();
1151
+ console.log(colors.green(`
1152
+ ┌─────────────────────────────────────────────┐
1153
+ │ ${colors.bold('Recker Mock UDP Server')} │
1154
+ ├─────────────────────────────────────────────┤
1155
+ │ Address: ${colors.cyan(`${options.host}:${options.port}`.padEnd(33))}│
1156
+ │ Echo: ${colors.yellow((options.echo ? 'Enabled' : 'Disabled').padEnd(36))}│
1157
+ ├─────────────────────────────────────────────┤
1158
+ │ Press ${colors.bold('Ctrl+C')} to stop │
1159
+ └─────────────────────────────────────────────┘
1160
+ `));
1161
+ server.on('message', (msg) => {
1162
+ const data = msg.data.toString().slice(0, 50);
1163
+ console.log(colors.gray(`${new Date().toISOString()} `) + colors.cyan(`${msg.rinfo.address}:${msg.rinfo.port}`) + ` ${data}${msg.data.toString().length > 50 ? '...' : ''}`);
1164
+ });
1165
+ process.on('SIGINT', async () => {
1166
+ console.log(colors.yellow('\nShutting down...'));
1167
+ await server.stop();
1168
+ process.exit(0);
1169
+ });
1170
+ });
883
1171
  program
884
1172
  .command('mcp')
885
1173
  .description('Start MCP server for AI agents to access Recker documentation')
@@ -1716,7 +1716,7 @@ ${colors.bold('Network:')}
1716
1716
  console.log(colors.gray(` Names: ${mapData.names.length}`));
1717
1717
  console.log(colors.bold('\nOriginal sources:'));
1718
1718
  mapData.sources.forEach((source, i) => {
1719
- const hasContent = mapData.sourcesContent && mapData.sourcesContent[i];
1719
+ const hasContent = mapData.sourcesContent?.[i];
1720
1720
  const sizeInfo = hasContent
1721
1721
  ? colors.green(`[${(mapData.sourcesContent[i].length / 1024).toFixed(1)}kb]`)
1722
1722
  : colors.yellow('[no content]');
@@ -7,6 +7,7 @@ import { DedupOptions } from '../plugins/dedup.js';
7
7
  import { ReckerWebSocket, type WebSocketOptions } from '../websocket/client.js';
8
8
  import { type WhoisOptions, type WhoisResult } from '../utils/whois.js';
9
9
  import { type ScrapePromise } from '../plugins/scrape.js';
10
+ import { HlsPromise, type HlsOptions } from '../plugins/hls.js';
10
11
  interface ClientCacheConfig extends Omit<CacheOptions, 'storage'> {
11
12
  storage?: CacheStorage;
12
13
  driver?: 'memory' | 'file';
@@ -111,6 +112,7 @@ export declare class Client {
111
112
  ws(path: string, options?: WebSocketOptions): ReckerWebSocket;
112
113
  whois(query: string, options?: WhoisOptions): Promise<WhoisResult>;
113
114
  isDomainAvailable(domain: string, options?: WhoisOptions): Promise<boolean>;
115
+ hls(manifestUrl: string, options?: HlsOptions): HlsPromise;
114
116
  }
115
117
  export declare function createClient(options?: ExtendedClientOptions): Client;
116
118
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,7 @@ import { ReckerWebSocket } from '../websocket/client.js';
22
22
  import { whois as performWhois, isDomainAvailable } from '../utils/whois.js';
23
23
  import { MemoryCookieJar } from '../cookies/memory-cookie-jar.js';
24
24
  import { scrape as scrapeHelper } from '../plugins/scrape.js';
25
+ import { HlsPromise } from '../plugins/hls.js';
25
26
  export class Client {
26
27
  baseUrl;
27
28
  middlewares;
@@ -72,7 +73,7 @@ export class Client {
72
73
  if (options.transport) {
73
74
  this.transport = options.transport;
74
75
  }
75
- else if (this.baseUrl) {
76
+ else {
76
77
  let http2Options;
77
78
  if (options.http2) {
78
79
  if (typeof options.http2 === 'boolean') {
@@ -83,7 +84,7 @@ export class Client {
83
84
  }
84
85
  }
85
86
  this.agentManager = new AgentManager(this.concurrencyConfig.agent);
86
- this.transport = new UndiciTransport(this.baseUrl, {
87
+ this.transport = new UndiciTransport(this.baseUrl || undefined, {
87
88
  proxy: options.proxy,
88
89
  http2: http2Options,
89
90
  dns: options.dns,
@@ -93,11 +94,6 @@ export class Client {
93
94
  observability: options.observability
94
95
  });
95
96
  }
96
- else {
97
- throw new ConfigurationError('baseUrl is required for default UndiciTransport, or provide a custom transport.', {
98
- configKey: 'baseUrl',
99
- });
100
- }
101
97
  if (options.retry) {
102
98
  retry(options.retry)(this);
103
99
  }
@@ -662,6 +658,9 @@ export class Client {
662
658
  async isDomainAvailable(domain, options) {
663
659
  return isDomainAvailable(domain, options);
664
660
  }
661
+ hls(manifestUrl, options = {}) {
662
+ return new HlsPromise(this, manifestUrl, options);
663
+ }
665
664
  }
666
665
  export function createClient(options = {}) {
667
666
  return new Client(options);
@@ -293,7 +293,7 @@ export function cache(options = {}) {
293
293
  key = generateKey(req, baseEntry.vary);
294
294
  cachedEntry = await storage.get(key);
295
295
  }
296
- else if (baseEntry && baseEntry.body) {
296
+ else if (baseEntry?.body) {
297
297
  cachedEntry = baseEntry;
298
298
  }
299
299
  else {
@@ -1,33 +1,106 @@
1
- import { Client } from '../core/client.js';
2
- export interface Variant {
1
+ import type { Client } from '../core/client.js';
2
+ import { type WriteStream } from 'node:fs';
3
+ import { Writable } from 'node:stream';
4
+ export interface HlsVariant {
3
5
  url: string;
4
6
  bandwidth?: number;
5
7
  resolution?: string;
8
+ codecs?: string;
9
+ name?: string;
6
10
  }
7
- export interface Segment {
11
+ export interface HlsSegment {
8
12
  url: string;
9
13
  duration: number;
10
14
  sequence: number;
11
- key?: KeyInfo;
15
+ key?: HlsKeyInfo;
16
+ discontinuity?: boolean;
17
+ programDateTime?: Date;
12
18
  }
13
- export interface KeyInfo {
14
- method: string;
19
+ export interface HlsKeyInfo {
20
+ method: 'NONE' | 'AES-128' | 'SAMPLE-AES';
15
21
  uri?: string;
16
22
  iv?: string;
17
23
  }
18
- export interface HlsHooks {
19
- onManifest?: (manifest: string, url: string) => string | void;
20
- onVariantSelected?: (variants: Variant[], defaultSelected: Variant) => Variant | void;
21
- onSegment?: (segment: Segment) => Segment | void | null;
22
- onKey?: (key: KeyInfo) => KeyInfo | void;
24
+ export interface HlsPlaylist {
25
+ segments: HlsSegment[];
26
+ targetDuration: number;
27
+ mediaSequence: number;
28
+ endList: boolean;
29
+ playlistType?: 'VOD' | 'EVENT';
30
+ discontinuitySequence: number;
23
31
  }
24
- export interface HlsOptions extends HlsHooks {
32
+ export interface HlsMasterPlaylist {
33
+ variants: HlsVariant[];
34
+ isMaster: true;
35
+ }
36
+ export interface SegmentData {
37
+ sequence: number;
38
+ duration: number;
39
+ data: Uint8Array;
40
+ url: string;
41
+ downloadedAt: Date;
42
+ }
43
+ export interface HlsProgress {
44
+ downloadedSegments: number;
45
+ totalSegments?: number;
46
+ downloadedBytes: number;
47
+ currentSegment: number;
48
+ isLive: boolean;
49
+ elapsed: number;
50
+ }
51
+ export interface HlsOptions {
52
+ mode?: 'merge' | 'chunks';
53
+ format?: 'ts' | 'mp4' | 'mkv';
54
+ live?: boolean | {
55
+ duration: number;
56
+ };
57
+ quality?: 'highest' | 'lowest' | {
58
+ bandwidth?: number;
59
+ resolution?: string;
60
+ };
25
61
  concurrency?: number;
26
- merge?: boolean;
27
- live?: boolean;
28
- duration?: number;
29
- onInfo?: (message: string) => void;
62
+ onSegment?: (segment: SegmentData) => void | Promise<void>;
63
+ onProgress?: (progress: HlsProgress) => void;
30
64
  onError?: (error: Error) => void;
65
+ headers?: Record<string, string>;
66
+ }
67
+ type DownloadDest = string | ((segment: HlsSegment) => string);
68
+ export declare class HlsPromise implements Promise<void> {
69
+ private client;
70
+ private manifestUrl;
71
+ private options;
72
+ private seenSequences;
73
+ private downloadedBytes;
74
+ private downloadedSegments;
75
+ private startTime;
76
+ private aborted;
77
+ private abortController;
78
+ constructor(client: Client, manifestUrl: string, options?: HlsOptions);
79
+ get [Symbol.toStringTag](): string;
80
+ then<TResult1 = void, TResult2 = never>(onfulfilled?: ((value: void) => TResult1 | PromiseLike<TResult1>) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | null): Promise<TResult1 | TResult2>;
81
+ catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | null): Promise<void | TResult>;
82
+ finally(onfinally?: (() => void) | null): Promise<void>;
83
+ cancel(): void;
84
+ download(dest: DownloadDest): Promise<void>;
85
+ stream(): AsyncGenerator<SegmentData>;
86
+ pipe(writable: Writable | WriteStream): Promise<void>;
87
+ info(): Promise<{
88
+ master?: HlsMasterPlaylist;
89
+ playlist?: HlsPlaylist;
90
+ selectedVariant?: HlsVariant;
91
+ isLive: boolean;
92
+ totalDuration?: number;
93
+ }>;
94
+ private resolveMediaPlaylist;
95
+ private fetchMediaPlaylist;
96
+ private downloadSegment;
97
+ private downloadMerged;
98
+ private downloadChunks;
99
+ private isLiveMode;
100
+ private getMaxDuration;
101
+ private emitProgress;
102
+ private sleep;
31
103
  }
32
- export declare function downloadHls(client: Client, manifestUrl: string, outputPath: string, options?: HlsOptions): Promise<void>;
104
+ export declare function hls(client: Client, manifestUrl: string, options?: HlsOptions): HlsPromise;
105
+ export type { HlsVariant as Variant, HlsSegment as Segment, HlsKeyInfo as KeyInfo, };
33
106
  //# sourceMappingURL=hls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../src/plugins/hls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAK3C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IAEvB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAE9D,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC;IAEtF,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;IAExD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAmHD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,UAAe,iBA+JzB"}
1
+ {"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../src/plugins/hls.ts"],"names":[],"mappings":"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"}