recker 1.0.2-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.
Files changed (158) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +109 -0
  3. package/dist/cache/file-storage.d.ts +13 -0
  4. package/dist/cache/file-storage.d.ts.map +1 -0
  5. package/dist/cache/file-storage.js +50 -0
  6. package/dist/cache/memory-storage.d.ts +10 -0
  7. package/dist/cache/memory-storage.d.ts.map +1 -0
  8. package/dist/cache/memory-storage.js +29 -0
  9. package/dist/cache/redis-storage.d.ts +16 -0
  10. package/dist/cache/redis-storage.d.ts.map +1 -0
  11. package/dist/cache/redis-storage.js +25 -0
  12. package/dist/constants.d.ts +19 -0
  13. package/dist/constants.d.ts.map +1 -0
  14. package/dist/constants.js +18 -0
  15. package/dist/contract/index.d.ts +32 -0
  16. package/dist/contract/index.d.ts.map +1 -0
  17. package/dist/contract/index.js +67 -0
  18. package/dist/core/client.d.ts +107 -0
  19. package/dist/core/client.d.ts.map +1 -0
  20. package/dist/core/client.js +475 -0
  21. package/dist/core/errors.d.ts +19 -0
  22. package/dist/core/errors.d.ts.map +1 -0
  23. package/dist/core/errors.js +34 -0
  24. package/dist/core/request-promise.d.ts +24 -0
  25. package/dist/core/request-promise.d.ts.map +1 -0
  26. package/dist/core/request-promise.js +77 -0
  27. package/dist/core/request.d.ts +15 -0
  28. package/dist/core/request.d.ts.map +1 -0
  29. package/dist/core/request.js +44 -0
  30. package/dist/core/response.d.ts +33 -0
  31. package/dist/core/response.d.ts.map +1 -0
  32. package/dist/core/response.js +154 -0
  33. package/dist/index.d.ts +40 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +39 -0
  36. package/dist/mcp/client.d.ts +59 -0
  37. package/dist/mcp/client.d.ts.map +1 -0
  38. package/dist/mcp/client.js +195 -0
  39. package/dist/mcp/index.d.ts +3 -0
  40. package/dist/mcp/index.d.ts.map +1 -0
  41. package/dist/mcp/index.js +2 -0
  42. package/dist/mcp/types.d.ts +151 -0
  43. package/dist/mcp/types.d.ts.map +1 -0
  44. package/dist/mcp/types.js +1 -0
  45. package/dist/plugins/cache.d.ts +10 -0
  46. package/dist/plugins/cache.d.ts.map +1 -0
  47. package/dist/plugins/cache.js +72 -0
  48. package/dist/plugins/circuit-breaker.d.ts +14 -0
  49. package/dist/plugins/circuit-breaker.d.ts.map +1 -0
  50. package/dist/plugins/circuit-breaker.js +100 -0
  51. package/dist/plugins/compression.d.ts +5 -0
  52. package/dist/plugins/compression.d.ts.map +1 -0
  53. package/dist/plugins/compression.js +128 -0
  54. package/dist/plugins/cookie-jar.d.ts +6 -0
  55. package/dist/plugins/cookie-jar.d.ts.map +1 -0
  56. package/dist/plugins/cookie-jar.js +72 -0
  57. package/dist/plugins/dedup.d.ts +6 -0
  58. package/dist/plugins/dedup.d.ts.map +1 -0
  59. package/dist/plugins/dedup.js +34 -0
  60. package/dist/plugins/graphql.d.ts +13 -0
  61. package/dist/plugins/graphql.d.ts.map +1 -0
  62. package/dist/plugins/graphql.js +39 -0
  63. package/dist/plugins/har-player.d.ts +7 -0
  64. package/dist/plugins/har-player.d.ts.map +1 -0
  65. package/dist/plugins/har-player.js +53 -0
  66. package/dist/plugins/har-recorder.d.ts +7 -0
  67. package/dist/plugins/har-recorder.d.ts.map +1 -0
  68. package/dist/plugins/har-recorder.js +67 -0
  69. package/dist/plugins/logger.d.ts +11 -0
  70. package/dist/plugins/logger.d.ts.map +1 -0
  71. package/dist/plugins/logger.js +72 -0
  72. package/dist/plugins/pagination.d.ts +17 -0
  73. package/dist/plugins/pagination.d.ts.map +1 -0
  74. package/dist/plugins/pagination.js +105 -0
  75. package/dist/plugins/proxy-rotator.d.ts +8 -0
  76. package/dist/plugins/proxy-rotator.d.ts.map +1 -0
  77. package/dist/plugins/proxy-rotator.js +35 -0
  78. package/dist/plugins/rate-limit.d.ts +8 -0
  79. package/dist/plugins/rate-limit.d.ts.map +1 -0
  80. package/dist/plugins/rate-limit.js +57 -0
  81. package/dist/plugins/retry.d.ts +14 -0
  82. package/dist/plugins/retry.d.ts.map +1 -0
  83. package/dist/plugins/retry.js +92 -0
  84. package/dist/plugins/server-timing.d.ts +8 -0
  85. package/dist/plugins/server-timing.d.ts.map +1 -0
  86. package/dist/plugins/server-timing.js +24 -0
  87. package/dist/plugins/xsrf.d.ts +10 -0
  88. package/dist/plugins/xsrf.d.ts.map +1 -0
  89. package/dist/plugins/xsrf.js +48 -0
  90. package/dist/runner/request-runner.d.ts +47 -0
  91. package/dist/runner/request-runner.d.ts.map +1 -0
  92. package/dist/runner/request-runner.js +89 -0
  93. package/dist/transport/fetch.d.ts +6 -0
  94. package/dist/transport/fetch.d.ts.map +1 -0
  95. package/dist/transport/fetch.js +153 -0
  96. package/dist/transport/undici.d.ts +23 -0
  97. package/dist/transport/undici.d.ts.map +1 -0
  98. package/dist/transport/undici.js +218 -0
  99. package/dist/types/index.d.ts +251 -0
  100. package/dist/types/index.d.ts.map +1 -0
  101. package/dist/types/index.js +1 -0
  102. package/dist/utils/agent-manager.d.ts +29 -0
  103. package/dist/utils/agent-manager.d.ts.map +1 -0
  104. package/dist/utils/agent-manager.js +133 -0
  105. package/dist/utils/body.d.ts +11 -0
  106. package/dist/utils/body.d.ts.map +1 -0
  107. package/dist/utils/body.js +136 -0
  108. package/dist/utils/cert.d.ts +12 -0
  109. package/dist/utils/cert.d.ts.map +1 -0
  110. package/dist/utils/cert.js +32 -0
  111. package/dist/utils/concurrency.d.ts +21 -0
  112. package/dist/utils/concurrency.d.ts.map +1 -0
  113. package/dist/utils/concurrency.js +116 -0
  114. package/dist/utils/dns.d.ts +7 -0
  115. package/dist/utils/dns.d.ts.map +1 -0
  116. package/dist/utils/dns.js +26 -0
  117. package/dist/utils/doh.d.ts +3 -0
  118. package/dist/utils/doh.d.ts.map +1 -0
  119. package/dist/utils/doh.js +35 -0
  120. package/dist/utils/header-parser.d.ts +81 -0
  121. package/dist/utils/header-parser.d.ts.map +1 -0
  122. package/dist/utils/header-parser.js +457 -0
  123. package/dist/utils/html-cleaner.d.ts +2 -0
  124. package/dist/utils/html-cleaner.d.ts.map +1 -0
  125. package/dist/utils/html-cleaner.js +21 -0
  126. package/dist/utils/logger.d.ts +33 -0
  127. package/dist/utils/logger.d.ts.map +1 -0
  128. package/dist/utils/logger.js +160 -0
  129. package/dist/utils/progress.d.ts +4 -0
  130. package/dist/utils/progress.d.ts.map +1 -0
  131. package/dist/utils/progress.js +49 -0
  132. package/dist/utils/request-pool.d.ts +23 -0
  133. package/dist/utils/request-pool.d.ts.map +1 -0
  134. package/dist/utils/request-pool.js +100 -0
  135. package/dist/utils/sse.d.ts +8 -0
  136. package/dist/utils/sse.d.ts.map +1 -0
  137. package/dist/utils/sse.js +62 -0
  138. package/dist/utils/streaming.d.ts +18 -0
  139. package/dist/utils/streaming.d.ts.map +1 -0
  140. package/dist/utils/streaming.js +83 -0
  141. package/dist/utils/task-pool.d.ts +38 -0
  142. package/dist/utils/task-pool.js +104 -0
  143. package/dist/utils/try-fn.d.ts +4 -0
  144. package/dist/utils/try-fn.d.ts.map +1 -0
  145. package/dist/utils/try-fn.js +53 -0
  146. package/dist/utils/upload.d.ts +10 -0
  147. package/dist/utils/upload.d.ts.map +1 -0
  148. package/dist/utils/upload.js +45 -0
  149. package/dist/utils/user-agent.d.ts +45 -0
  150. package/dist/utils/user-agent.d.ts.map +1 -0
  151. package/dist/utils/user-agent.js +100 -0
  152. package/dist/utils/whois.d.ts +15 -0
  153. package/dist/utils/whois.d.ts.map +1 -0
  154. package/dist/utils/whois.js +159 -0
  155. package/dist/websocket/client.d.ts +38 -0
  156. package/dist/websocket/client.d.ts.map +1 -0
  157. package/dist/websocket/client.js +184 -0
  158. package/package.json +100 -0
@@ -0,0 +1,116 @@
1
+ const DEFAULT_INTERVAL = 1000;
2
+ export function normalizeConcurrency(options) {
3
+ let config;
4
+ if (typeof options.concurrency === 'number') {
5
+ config = { max: options.concurrency };
6
+ }
7
+ else if (options.concurrency && typeof options.concurrency === 'object') {
8
+ config = options.concurrency;
9
+ }
10
+ else {
11
+ config = {};
12
+ }
13
+ const max = config.max ?? Infinity;
14
+ const requestsPerInterval = config.requestsPerInterval ?? Infinity;
15
+ const interval = config.interval ?? DEFAULT_INTERVAL;
16
+ const http2Options = parseHTTP2Options(options.http2);
17
+ const http2Enabled = http2Options.enabled ?? false;
18
+ const agentConfig = normalizeAgentConfig(config.agent, max, http2Enabled, http2Options.maxConcurrentStreams);
19
+ const http2Streams = normalizeHTTP2Streams(config.http2?.maxConcurrentStreams, max, http2Enabled);
20
+ let runnerConcurrency;
21
+ if (config.runner?.concurrency !== undefined) {
22
+ runnerConcurrency = config.runner.concurrency;
23
+ }
24
+ else if (max !== Infinity) {
25
+ runnerConcurrency = max;
26
+ }
27
+ else {
28
+ runnerConcurrency = Infinity;
29
+ }
30
+ return {
31
+ max,
32
+ requestsPerInterval,
33
+ interval,
34
+ runner: {
35
+ concurrency: runnerConcurrency,
36
+ retries: config.runner?.retries,
37
+ retryDelay: config.runner?.retryDelay,
38
+ },
39
+ agent: {
40
+ ...agentConfig,
41
+ connections: agentConfig.connections,
42
+ },
43
+ http2: {
44
+ maxConcurrentStreams: http2Streams,
45
+ },
46
+ };
47
+ }
48
+ function parseHTTP2Options(http2) {
49
+ if (!http2)
50
+ return {};
51
+ if (typeof http2 === 'boolean') {
52
+ return { enabled: http2 };
53
+ }
54
+ return http2;
55
+ }
56
+ function normalizeAgentConfig(agentConfig, maxConcurrent, http2Enabled, http2MaxStreams) {
57
+ const defaults = {
58
+ pipelining: 1,
59
+ keepAlive: true,
60
+ keepAliveTimeout: 4000,
61
+ keepAliveMaxTimeout: 600000,
62
+ connectTimeout: 10000,
63
+ perDomainPooling: true,
64
+ };
65
+ const merged = { ...defaults, ...agentConfig };
66
+ let connections;
67
+ if (agentConfig?.connections === 'auto' || agentConfig?.connections === undefined) {
68
+ connections = calculateOptimalConnections(maxConcurrent, http2Enabled, http2MaxStreams, merged.pipelining ?? 1);
69
+ }
70
+ else {
71
+ connections = agentConfig.connections;
72
+ }
73
+ return {
74
+ ...merged,
75
+ connections,
76
+ };
77
+ }
78
+ export function calculateOptimalConnections(maxConcurrent, http2Enabled, http2MaxStreams, pipelining = 1) {
79
+ if (http2Enabled) {
80
+ const streams = http2MaxStreams ?? 100;
81
+ return Math.max(1, Math.ceil(maxConcurrent / streams));
82
+ }
83
+ else {
84
+ const requestsPerConnection = pipelining > 1 ? pipelining : 2;
85
+ return Math.max(1, Math.min(Math.ceil(maxConcurrent / requestsPerConnection), 50));
86
+ }
87
+ }
88
+ function normalizeHTTP2Streams(configuredStreams, maxConcurrent, http2Enabled) {
89
+ if (!http2Enabled) {
90
+ return 100;
91
+ }
92
+ if (configuredStreams === 'auto' || configuredStreams === undefined) {
93
+ return Math.min(Math.max(maxConcurrent, 100), 200);
94
+ }
95
+ return configuredStreams;
96
+ }
97
+ export function createBatchConfig(baseConcurrency, batchConcurrency, requestCount) {
98
+ const http2Enabled = baseConcurrency.http2.maxConcurrentStreams > 0;
99
+ const connections = calculateOptimalConnections(batchConcurrency, http2Enabled, baseConcurrency.http2.maxConcurrentStreams, baseConcurrency.agent.pipelining);
100
+ const smartPipelining = requestCount > 20 && batchConcurrency > 5
101
+ ? 2
102
+ : baseConcurrency.agent.pipelining ?? 1;
103
+ return {
104
+ ...baseConcurrency,
105
+ max: batchConcurrency,
106
+ runner: {
107
+ ...baseConcurrency.runner,
108
+ concurrency: batchConcurrency,
109
+ },
110
+ agent: {
111
+ ...baseConcurrency.agent,
112
+ connections,
113
+ pipelining: smartPipelining,
114
+ },
115
+ };
116
+ }
@@ -0,0 +1,7 @@
1
+ import { DNSOptions } from '../types/index.js';
2
+ export declare function createLookupFunction(options: DNSOptions): (hostname: string, opts: any, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void;
3
+ export declare function customDNSLookup(hostname: string, options?: DNSOptions): Promise<{
4
+ address: string;
5
+ family: number;
6
+ }>;
7
+ //# sourceMappingURL=dns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns.d.ts","sourceRoot":"","sources":["../../src/utils/dns.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQ/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,UAAU,IAC9C,UAAU,MAAM,EAAE,MAAM,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,UAiB5H;AAOD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAc9H"}
@@ -0,0 +1,26 @@
1
+ import { lookup } from 'node:dns';
2
+ import { promisify } from 'node:util';
3
+ const lookupAsync = promisify(lookup);
4
+ export function createLookupFunction(options) {
5
+ return (hostname, opts, callback) => {
6
+ if (options.override && options.override[hostname]) {
7
+ const ip = options.override[hostname];
8
+ const family = ip.includes(':') ? 6 : 4;
9
+ return callback(null, ip, family);
10
+ }
11
+ lookup(hostname, opts, callback);
12
+ };
13
+ }
14
+ export async function customDNSLookup(hostname, options = {}) {
15
+ if (options.override && options.override[hostname]) {
16
+ const ip = options.override[hostname];
17
+ const family = ip.includes(':') ? 6 : 4;
18
+ return { address: ip, family };
19
+ }
20
+ const lookupOptions = {};
21
+ if (options.preferIPv4) {
22
+ lookupOptions.family = 4;
23
+ }
24
+ const result = await lookupAsync(hostname, lookupOptions);
25
+ return { address: result.address, family: result.family };
26
+ }
@@ -0,0 +1,3 @@
1
+ export type DoHProvider = 'cloudflare' | 'google' | 'quad9' | string;
2
+ export declare function createDoHLookup(provider?: DoHProvider): (hostname: string, opts: any, callback: (err: Error | null, address: string, family: number) => void) => Promise<void>;
3
+ //# sourceMappingURL=doh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doh.d.ts","sourceRoot":"","sources":["../../src/utils/doh.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAsBrE,wBAAgB,eAAe,CAAC,QAAQ,GAAE,WAA0B,IAGpD,UAAU,MAAM,EAAE,MAAM,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,mBAqClH"}
@@ -0,0 +1,35 @@
1
+ import { request } from 'undici';
2
+ const PROVIDERS = {
3
+ cloudflare: 'https://1.1.1.1/dns-query',
4
+ google: 'https://8.8.8.8/resolve',
5
+ quad9: 'https://9.9.9.9:5053/dns-query',
6
+ };
7
+ export function createDoHLookup(provider = 'cloudflare') {
8
+ const endpoint = PROVIDERS[provider] || provider;
9
+ return async (hostname, opts, callback) => {
10
+ try {
11
+ const url = new URL(endpoint);
12
+ url.searchParams.set('name', hostname);
13
+ url.searchParams.set('type', 'A');
14
+ const { body, statusCode } = await request(url, {
15
+ method: 'GET',
16
+ headers: { 'Accept': 'application/dns-json' }
17
+ });
18
+ if (statusCode !== 200) {
19
+ throw new Error(`DoH request failed with status ${statusCode}`);
20
+ }
21
+ const data = await body.json();
22
+ if (data.Status !== 0 || !data.Answer || data.Answer.length === 0) {
23
+ return callback(new Error(`DNS lookup failed for ${hostname}`), '', 4);
24
+ }
25
+ const record = data.Answer.find(r => r.type === 1);
26
+ if (record) {
27
+ return callback(null, record.data, 4);
28
+ }
29
+ callback(new Error(`No A record found for ${hostname}`), '', 4);
30
+ }
31
+ catch (err) {
32
+ callback(err, '', 0);
33
+ }
34
+ };
35
+ }
@@ -0,0 +1,81 @@
1
+ export interface CacheInfo {
2
+ hit: boolean;
3
+ status?: 'HIT' | 'MISS' | 'EXPIRED' | 'STALE' | 'BYPASS' | 'REVALIDATED';
4
+ age?: number;
5
+ maxAge?: number;
6
+ provider?: 'cloudflare' | 'fastly' | 'akamai' | 'cloudfront' | 'nginx' | 'varnish' | 'unknown';
7
+ }
8
+ export interface PlatformInfo {
9
+ provider?: string;
10
+ category?: 'cdn' | 'cloud' | 'hosting' | 'server' | 'proxy' | 'unknown';
11
+ region?: string;
12
+ server?: string;
13
+ metadata?: {
14
+ ray?: string;
15
+ requestId?: string;
16
+ pop?: string;
17
+ cacheId?: string;
18
+ traceId?: string;
19
+ [key: string]: string | number | boolean | undefined;
20
+ };
21
+ }
22
+ export interface RateLimitInfo {
23
+ limited: boolean;
24
+ limit?: number;
25
+ remaining?: number;
26
+ reset?: Date;
27
+ retryAfter?: number;
28
+ policy?: string;
29
+ }
30
+ export declare function parseCacheInfo(headers: Headers): CacheInfo;
31
+ export declare function parsePlatformInfo(headers: Headers): PlatformInfo;
32
+ export declare function parseRateLimitInfo(headers: Headers, status: number): RateLimitInfo;
33
+ export interface CompressionInfo {
34
+ encoding?: 'gzip' | 'br' | 'deflate' | 'compress' | 'identity' | string;
35
+ originalSize?: number;
36
+ compressedSize?: number;
37
+ ratio?: number;
38
+ }
39
+ export declare function parseCompressionInfo(headers: Headers): CompressionInfo;
40
+ export interface CSPInfo {
41
+ policy?: string;
42
+ directives: Record<string, string[]>;
43
+ reportOnly: boolean;
44
+ }
45
+ export declare function parseCSPInfo(headers: Headers): CSPInfo;
46
+ export interface ContentTypeInfo {
47
+ mediaType?: string;
48
+ charset?: string;
49
+ boundary?: string;
50
+ type?: string;
51
+ subtype?: string;
52
+ }
53
+ export declare function parseContentType(headers: Headers): ContentTypeInfo;
54
+ export interface AcceptInfo {
55
+ types: Array<{
56
+ mediaType: string;
57
+ q: number;
58
+ type?: string;
59
+ subtype?: string;
60
+ }>;
61
+ encodings: Array<{
62
+ encoding: string;
63
+ q: number;
64
+ }>;
65
+ languages: Array<{
66
+ language: string;
67
+ q: number;
68
+ }>;
69
+ }
70
+ export declare function parseAcceptInfo(headers: Headers): AcceptInfo;
71
+ export interface HeaderInfo {
72
+ cache: CacheInfo;
73
+ platform: PlatformInfo;
74
+ rateLimit: RateLimitInfo;
75
+ compression: CompressionInfo;
76
+ csp: CSPInfo;
77
+ contentType: ContentTypeInfo;
78
+ accept: AcceptInfo;
79
+ }
80
+ export declare function parseHeaders(headers: Headers, status: number): HeaderInfo;
81
+ //# sourceMappingURL=header-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-parser.d.ts","sourceRoot":"","sources":["../../src/utils/header-parser.ts"],"names":[],"mappings":"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"}