recker 1.0.26 → 1.0.27

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 (171) hide show
  1. package/dist/browser/browser/cache.d.ts +40 -0
  2. package/dist/browser/browser/cache.js +199 -0
  3. package/dist/browser/browser/crypto.d.ts +24 -0
  4. package/dist/browser/browser/crypto.js +80 -0
  5. package/dist/browser/browser/index.d.ts +31 -0
  6. package/dist/browser/browser/index.js +31 -0
  7. package/dist/browser/browser/recker.d.ts +26 -0
  8. package/dist/browser/browser/recker.js +61 -0
  9. package/dist/browser/cache/basic-file-storage.d.ts +12 -0
  10. package/dist/browser/cache/basic-file-storage.js +50 -0
  11. package/dist/browser/cache/memory-limits.d.ts +20 -0
  12. package/dist/browser/cache/memory-limits.js +96 -0
  13. package/dist/browser/cache/memory-storage.d.ts +132 -0
  14. package/dist/browser/cache/memory-storage.js +454 -0
  15. package/dist/browser/cache.d.ts +40 -0
  16. package/dist/browser/cache.js +199 -0
  17. package/dist/browser/constants/http-status.d.ts +73 -0
  18. package/dist/browser/constants/http-status.js +156 -0
  19. package/dist/browser/cookies/memory-cookie-jar.d.ts +30 -0
  20. package/dist/browser/cookies/memory-cookie-jar.js +210 -0
  21. package/dist/browser/core/client.d.ts +118 -0
  22. package/dist/browser/core/client.js +667 -0
  23. package/dist/browser/core/errors.d.ts +142 -0
  24. package/dist/browser/core/errors.js +308 -0
  25. package/dist/browser/core/index.d.ts +5 -0
  26. package/dist/browser/core/index.js +5 -0
  27. package/dist/browser/core/request-promise.d.ts +23 -0
  28. package/dist/browser/core/request-promise.js +82 -0
  29. package/dist/browser/core/request.d.ts +20 -0
  30. package/dist/browser/core/request.js +76 -0
  31. package/dist/browser/core/response.d.ts +34 -0
  32. package/dist/browser/core/response.js +178 -0
  33. package/dist/browser/crypto.d.ts +24 -0
  34. package/dist/browser/crypto.js +80 -0
  35. package/dist/browser/index.d.ts +31 -0
  36. package/dist/browser/index.js +31 -0
  37. package/dist/browser/plugins/auth/api-key.d.ts +8 -0
  38. package/dist/browser/plugins/auth/api-key.js +27 -0
  39. package/dist/browser/plugins/auth/auth0.d.ts +33 -0
  40. package/dist/browser/plugins/auth/auth0.js +94 -0
  41. package/dist/browser/plugins/auth/aws-sigv4.d.ts +10 -0
  42. package/dist/browser/plugins/auth/aws-sigv4.js +88 -0
  43. package/dist/browser/plugins/auth/azure-ad.d.ts +48 -0
  44. package/dist/browser/plugins/auth/azure-ad.js +152 -0
  45. package/dist/browser/plugins/auth/basic.d.ts +7 -0
  46. package/dist/browser/plugins/auth/basic.js +13 -0
  47. package/dist/browser/plugins/auth/bearer.d.ts +8 -0
  48. package/dist/browser/plugins/auth/bearer.js +17 -0
  49. package/dist/browser/plugins/auth/cognito.d.ts +45 -0
  50. package/dist/browser/plugins/auth/cognito.js +208 -0
  51. package/dist/browser/plugins/auth/digest.d.ts +8 -0
  52. package/dist/browser/plugins/auth/digest.js +100 -0
  53. package/dist/browser/plugins/auth/firebase.d.ts +32 -0
  54. package/dist/browser/plugins/auth/firebase.js +195 -0
  55. package/dist/browser/plugins/auth/github-app.d.ts +36 -0
  56. package/dist/browser/plugins/auth/github-app.js +170 -0
  57. package/dist/browser/plugins/auth/google-service-account.d.ts +49 -0
  58. package/dist/browser/plugins/auth/google-service-account.js +172 -0
  59. package/dist/browser/plugins/auth/index.d.ts +15 -0
  60. package/dist/browser/plugins/auth/index.js +15 -0
  61. package/dist/browser/plugins/auth/mtls.d.ts +37 -0
  62. package/dist/browser/plugins/auth/mtls.js +140 -0
  63. package/dist/browser/plugins/auth/oauth2.d.ts +8 -0
  64. package/dist/browser/plugins/auth/oauth2.js +26 -0
  65. package/dist/browser/plugins/auth/oidc.d.ts +55 -0
  66. package/dist/browser/plugins/auth/oidc.js +222 -0
  67. package/dist/browser/plugins/auth/okta.d.ts +47 -0
  68. package/dist/browser/plugins/auth/okta.js +157 -0
  69. package/dist/browser/plugins/auth.d.ts +1 -0
  70. package/dist/browser/plugins/auth.js +1 -0
  71. package/dist/browser/plugins/cache.d.ts +15 -0
  72. package/dist/browser/plugins/cache.js +486 -0
  73. package/dist/browser/plugins/circuit-breaker.d.ts +13 -0
  74. package/dist/browser/plugins/circuit-breaker.js +100 -0
  75. package/dist/browser/plugins/compression.d.ts +4 -0
  76. package/dist/browser/plugins/compression.js +130 -0
  77. package/dist/browser/plugins/cookie-jar.d.ts +5 -0
  78. package/dist/browser/plugins/cookie-jar.js +72 -0
  79. package/dist/browser/plugins/dedup.d.ts +5 -0
  80. package/dist/browser/plugins/dedup.js +35 -0
  81. package/dist/browser/plugins/graphql.d.ts +13 -0
  82. package/dist/browser/plugins/graphql.js +58 -0
  83. package/dist/browser/plugins/grpc-web.d.ts +79 -0
  84. package/dist/browser/plugins/grpc-web.js +261 -0
  85. package/dist/browser/plugins/hls.d.ts +105 -0
  86. package/dist/browser/plugins/hls.js +395 -0
  87. package/dist/browser/plugins/jsonrpc.d.ts +75 -0
  88. package/dist/browser/plugins/jsonrpc.js +143 -0
  89. package/dist/browser/plugins/logger.d.ts +13 -0
  90. package/dist/browser/plugins/logger.js +108 -0
  91. package/dist/browser/plugins/odata.d.ts +181 -0
  92. package/dist/browser/plugins/odata.js +564 -0
  93. package/dist/browser/plugins/pagination.d.ts +16 -0
  94. package/dist/browser/plugins/pagination.js +105 -0
  95. package/dist/browser/plugins/rate-limit.d.ts +15 -0
  96. package/dist/browser/plugins/rate-limit.js +162 -0
  97. package/dist/browser/plugins/retry.d.ts +14 -0
  98. package/dist/browser/plugins/retry.js +116 -0
  99. package/dist/browser/plugins/scrape.d.ts +21 -0
  100. package/dist/browser/plugins/scrape.js +82 -0
  101. package/dist/browser/plugins/server-timing.d.ts +7 -0
  102. package/dist/browser/plugins/server-timing.js +24 -0
  103. package/dist/browser/plugins/soap.d.ts +72 -0
  104. package/dist/browser/plugins/soap.js +347 -0
  105. package/dist/browser/plugins/xml.d.ts +9 -0
  106. package/dist/browser/plugins/xml.js +194 -0
  107. package/dist/browser/plugins/xsrf.d.ts +9 -0
  108. package/dist/browser/plugins/xsrf.js +48 -0
  109. package/dist/browser/recker.d.ts +26 -0
  110. package/dist/browser/recker.js +61 -0
  111. package/dist/browser/runner/request-runner.d.ts +46 -0
  112. package/dist/browser/runner/request-runner.js +89 -0
  113. package/dist/browser/scrape/document.d.ts +44 -0
  114. package/dist/browser/scrape/document.js +210 -0
  115. package/dist/browser/scrape/element.d.ts +49 -0
  116. package/dist/browser/scrape/element.js +176 -0
  117. package/dist/browser/scrape/extractors.d.ts +16 -0
  118. package/dist/browser/scrape/extractors.js +356 -0
  119. package/dist/browser/scrape/types.d.ts +107 -0
  120. package/dist/browser/scrape/types.js +1 -0
  121. package/dist/browser/transport/fetch.d.ts +11 -0
  122. package/dist/browser/transport/fetch.js +143 -0
  123. package/dist/browser/transport/undici.d.ts +38 -0
  124. package/dist/browser/transport/undici.js +897 -0
  125. package/dist/browser/types/ai.d.ts +267 -0
  126. package/dist/browser/types/ai.js +1 -0
  127. package/dist/browser/types/index.d.ts +351 -0
  128. package/dist/browser/types/index.js +1 -0
  129. package/dist/browser/types/logger.d.ts +16 -0
  130. package/dist/browser/types/logger.js +66 -0
  131. package/dist/browser/types/udp.d.ts +138 -0
  132. package/dist/browser/types/udp.js +1 -0
  133. package/dist/browser/utils/agent-manager.d.ts +29 -0
  134. package/dist/browser/utils/agent-manager.js +160 -0
  135. package/dist/browser/utils/body.d.ts +10 -0
  136. package/dist/browser/utils/body.js +148 -0
  137. package/dist/browser/utils/charset.d.ts +15 -0
  138. package/dist/browser/utils/charset.js +169 -0
  139. package/dist/browser/utils/concurrency.d.ts +20 -0
  140. package/dist/browser/utils/concurrency.js +120 -0
  141. package/dist/browser/utils/dns.d.ts +6 -0
  142. package/dist/browser/utils/dns.js +26 -0
  143. package/dist/browser/utils/header-parser.d.ts +94 -0
  144. package/dist/browser/utils/header-parser.js +617 -0
  145. package/dist/browser/utils/html-cleaner.d.ts +1 -0
  146. package/dist/browser/utils/html-cleaner.js +21 -0
  147. package/dist/browser/utils/link-header.d.ts +69 -0
  148. package/dist/browser/utils/link-header.js +190 -0
  149. package/dist/browser/utils/optional-require.d.ts +19 -0
  150. package/dist/browser/utils/optional-require.js +105 -0
  151. package/dist/browser/utils/progress.d.ts +8 -0
  152. package/dist/browser/utils/progress.js +82 -0
  153. package/dist/browser/utils/request-pool.d.ts +22 -0
  154. package/dist/browser/utils/request-pool.js +101 -0
  155. package/dist/browser/utils/sse.d.ts +7 -0
  156. package/dist/browser/utils/sse.js +67 -0
  157. package/dist/browser/utils/streaming.d.ts +17 -0
  158. package/dist/browser/utils/streaming.js +84 -0
  159. package/dist/browser/utils/try-fn.d.ts +3 -0
  160. package/dist/browser/utils/try-fn.js +59 -0
  161. package/dist/browser/utils/user-agent.d.ts +44 -0
  162. package/dist/browser/utils/user-agent.js +100 -0
  163. package/dist/browser/utils/whois.d.ts +32 -0
  164. package/dist/browser/utils/whois.js +246 -0
  165. package/dist/browser/websocket/client.d.ts +65 -0
  166. package/dist/browser/websocket/client.js +313 -0
  167. package/dist/cli/index.d.ts +1 -0
  168. package/dist/cli/index.js +1 -0
  169. package/dist/transport/fetch.d.ts +7 -1
  170. package/dist/transport/fetch.js +58 -76
  171. package/package.json +34 -2
@@ -0,0 +1,267 @@
1
+ export type AIProvider = 'openai' | 'anthropic' | 'google' | 'replicate' | 'huggingface' | 'ollama' | 'custom';
2
+ export type MessageRole = 'system' | 'user' | 'assistant' | 'tool';
3
+ export interface ChatMessage {
4
+ role: MessageRole;
5
+ content: string | ContentPart[];
6
+ name?: string;
7
+ tool_call_id?: string;
8
+ tool_calls?: ToolCall[];
9
+ }
10
+ export type ContentPart = {
11
+ type: 'text';
12
+ text: string;
13
+ } | {
14
+ type: 'image_url';
15
+ image_url: {
16
+ url: string;
17
+ detail?: 'auto' | 'low' | 'high';
18
+ };
19
+ } | {
20
+ type: 'image';
21
+ data: Buffer | Uint8Array;
22
+ mediaType: string;
23
+ };
24
+ export interface ToolDefinition {
25
+ type: 'function';
26
+ function: {
27
+ name: string;
28
+ description: string;
29
+ parameters?: Record<string, unknown>;
30
+ };
31
+ }
32
+ export interface ToolCall {
33
+ id: string;
34
+ type: 'function';
35
+ function: {
36
+ name: string;
37
+ arguments: string;
38
+ };
39
+ }
40
+ export interface TokenUsage {
41
+ inputTokens: number;
42
+ outputTokens: number;
43
+ totalTokens: number;
44
+ cachedTokens?: number;
45
+ }
46
+ export interface CostInfo {
47
+ inputCost: number;
48
+ outputCost: number;
49
+ totalCost: number;
50
+ currency: string;
51
+ }
52
+ export interface AILatency {
53
+ ttft: number;
54
+ tps: number;
55
+ total: number;
56
+ queued?: number;
57
+ }
58
+ export interface AITimeoutOptions {
59
+ firstToken?: number;
60
+ betweenTokens?: number;
61
+ total?: number;
62
+ adaptive?: boolean;
63
+ }
64
+ export interface AIRetryOptions {
65
+ on?: Array<'rate_limit' | 'overloaded' | 'timeout' | 'context_length_exceeded' | 'server_error'>;
66
+ backoff?: 'linear' | 'exponential' | 'decorrelated';
67
+ maxAttempts?: number;
68
+ fallback?: Record<string, string>;
69
+ reduceContext?: boolean;
70
+ onRetry?: (attempt: number, error: Error) => void;
71
+ }
72
+ export type ResponseFormat = {
73
+ type: 'text';
74
+ } | {
75
+ type: 'json_object';
76
+ } | {
77
+ type: 'json_schema';
78
+ schema: Record<string, unknown>;
79
+ };
80
+ export interface ChatOptions {
81
+ provider?: AIProvider;
82
+ model?: string;
83
+ messages: ChatMessage[];
84
+ systemPrompt?: string;
85
+ temperature?: number;
86
+ topP?: number;
87
+ maxTokens?: number;
88
+ stop?: string[];
89
+ tools?: ToolDefinition[];
90
+ toolChoice?: 'auto' | 'none' | 'required' | {
91
+ type: 'function';
92
+ function: {
93
+ name: string;
94
+ };
95
+ };
96
+ responseFormat?: ResponseFormat;
97
+ timeout?: AITimeoutOptions;
98
+ retry?: AIRetryOptions;
99
+ metadata?: Record<string, unknown>;
100
+ signal?: AbortSignal;
101
+ stream?: boolean;
102
+ }
103
+ export interface EmbedOptions {
104
+ provider?: AIProvider;
105
+ model?: string;
106
+ input: string | string[];
107
+ dimensions?: number;
108
+ timeout?: number;
109
+ signal?: AbortSignal;
110
+ }
111
+ export interface AIResponse<T = string> {
112
+ content: T;
113
+ usage: TokenUsage;
114
+ latency: AILatency;
115
+ model: string;
116
+ provider: AIProvider;
117
+ cached: boolean;
118
+ finishReason?: 'stop' | 'length' | 'tool_calls' | 'content_filter';
119
+ toolCalls?: ToolCall[];
120
+ cost?: CostInfo;
121
+ raw?: unknown;
122
+ }
123
+ export interface EmbedResponse {
124
+ embeddings: number[][];
125
+ usage: TokenUsage;
126
+ model: string;
127
+ provider: AIProvider;
128
+ latency: AILatency;
129
+ }
130
+ export type StreamEventType = 'text' | 'tool_call' | 'tool_call_delta' | 'usage' | 'done' | 'error';
131
+ export interface BaseStreamEvent {
132
+ type: StreamEventType;
133
+ }
134
+ export interface TextStreamEvent extends BaseStreamEvent {
135
+ type: 'text';
136
+ content: string;
137
+ }
138
+ export interface ToolCallStreamEvent extends BaseStreamEvent {
139
+ type: 'tool_call';
140
+ toolCall: ToolCall;
141
+ }
142
+ export interface ToolCallDeltaStreamEvent extends BaseStreamEvent {
143
+ type: 'tool_call_delta';
144
+ index: number;
145
+ delta: {
146
+ arguments?: string;
147
+ };
148
+ }
149
+ export interface UsageStreamEvent extends BaseStreamEvent {
150
+ type: 'usage';
151
+ usage: TokenUsage;
152
+ }
153
+ export interface DoneStreamEvent extends BaseStreamEvent {
154
+ type: 'done';
155
+ finishReason: 'stop' | 'length' | 'tool_calls' | 'content_filter';
156
+ usage?: TokenUsage;
157
+ }
158
+ export interface ErrorStreamEvent extends BaseStreamEvent {
159
+ type: 'error';
160
+ error: Error;
161
+ }
162
+ export type StreamEvent = TextStreamEvent | ToolCallStreamEvent | ToolCallDeltaStreamEvent | UsageStreamEvent | DoneStreamEvent | ErrorStreamEvent;
163
+ export type AIStream = AsyncIterable<StreamEvent>;
164
+ export interface ProviderConfig {
165
+ apiKey?: string;
166
+ baseUrl?: string;
167
+ defaultModel?: string;
168
+ organization?: string;
169
+ projectId?: string;
170
+ headers?: Record<string, string>;
171
+ }
172
+ export interface AIClientConfig {
173
+ defaultProvider?: AIProvider;
174
+ defaultModel?: string;
175
+ providers?: Partial<Record<AIProvider, ProviderConfig>>;
176
+ timeout?: AITimeoutOptions;
177
+ retry?: AIRetryOptions;
178
+ observability?: boolean;
179
+ debug?: boolean;
180
+ }
181
+ export interface TokenRateLimitConfig {
182
+ tokensPerMinute?: number;
183
+ requestsPerMinute?: number;
184
+ strategy?: 'queue' | 'throw' | 'retry-after';
185
+ priority?: (req: ChatOptions) => 'high' | 'normal' | 'low';
186
+ }
187
+ export interface SemanticCacheConfig {
188
+ enabled?: boolean;
189
+ embedder?: string;
190
+ similarity?: number;
191
+ ttl?: number | string;
192
+ storage?: CacheStorage;
193
+ }
194
+ export interface CacheStorage {
195
+ get(key: string): Promise<unknown | undefined>;
196
+ set(key: string, value: unknown, ttl?: number): Promise<void>;
197
+ delete(key: string): Promise<void>;
198
+ }
199
+ export interface AIClient {
200
+ chat(options: ChatOptions): Promise<AIResponse>;
201
+ chat(prompt: string): Promise<AIResponse>;
202
+ stream(options: ChatOptions): Promise<AIStream>;
203
+ embed(options: EmbedOptions): Promise<EmbedResponse>;
204
+ extend(defaults: Partial<ChatOptions>): AIClient;
205
+ readonly metrics: AIMetrics;
206
+ }
207
+ export interface AIMetrics {
208
+ totalRequests: number;
209
+ totalTokens: number;
210
+ totalCost: number;
211
+ avgLatency: {
212
+ ttft: number;
213
+ total: number;
214
+ };
215
+ errorRate: number;
216
+ cacheHitRate: number;
217
+ summary(): AIMetricsSummary;
218
+ reset(): void;
219
+ }
220
+ export interface AIMetricsSummary {
221
+ totalRequests: number;
222
+ totalTokens: number;
223
+ totalCost: number;
224
+ avgLatency: {
225
+ ttft: number;
226
+ total: number;
227
+ };
228
+ errorRate: number;
229
+ cacheHitRate: number;
230
+ byModel: Record<string, {
231
+ requests: number;
232
+ tokens: number;
233
+ cost: number;
234
+ }>;
235
+ byProvider: Record<string, {
236
+ requests: number;
237
+ tokens: number;
238
+ cost: number;
239
+ }>;
240
+ }
241
+ export interface AgentTool {
242
+ name: string;
243
+ description: string;
244
+ parameters?: Record<string, unknown>;
245
+ handler: (args: Record<string, unknown>) => Promise<unknown> | unknown;
246
+ }
247
+ export interface AgentConfig {
248
+ provider?: AIProvider;
249
+ model?: string;
250
+ systemPrompt?: string;
251
+ tools?: AgentTool[];
252
+ maxIterations?: number;
253
+ iterationTimeout?: number;
254
+ }
255
+ export type AgentEventType = 'thinking' | 'tool_call' | 'tool_result' | 'text' | 'done' | 'error';
256
+ export interface AgentStreamEvent {
257
+ type: AgentEventType;
258
+ content?: string;
259
+ tool?: string;
260
+ args?: Record<string, unknown>;
261
+ result?: unknown;
262
+ error?: Error;
263
+ }
264
+ export interface Agent {
265
+ run(prompt: string): Promise<AIResponse>;
266
+ stream(prompt: string): AsyncIterable<AgentStreamEvent>;
267
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,351 @@
1
+ export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'TRACE' | 'CONNECT' | 'PURGE' | 'PROPFIND' | 'PROPPATCH' | 'MKCOL' | 'COPY' | 'MOVE' | 'LOCK' | 'UNLOCK' | 'LINK' | 'UNLINK';
2
+ export interface ProgressEvent {
3
+ loaded: number;
4
+ transferred: number;
5
+ total?: number;
6
+ percent?: number;
7
+ rate?: number;
8
+ estimated?: number;
9
+ direction?: 'upload' | 'download';
10
+ }
11
+ export type ProgressCallback = (progress: ProgressEvent) => void;
12
+ export interface TimeoutOptions {
13
+ lookup?: number;
14
+ connect?: number;
15
+ secureConnect?: number;
16
+ socket?: number;
17
+ send?: number;
18
+ response?: number;
19
+ request?: number;
20
+ }
21
+ export interface RedirectInfo {
22
+ from: string;
23
+ to: string;
24
+ status: number;
25
+ headers: Headers;
26
+ }
27
+ export interface RequestOptions {
28
+ method?: Method;
29
+ headers?: HeadersInit;
30
+ body?: BodyInit | null;
31
+ json?: any;
32
+ form?: Record<string, any>;
33
+ xml?: any;
34
+ params?: Record<string, string | number>;
35
+ signal?: AbortSignal;
36
+ throwHttpErrors?: boolean;
37
+ timeout?: number | TimeoutOptions;
38
+ onUploadProgress?: ProgressCallback;
39
+ onDownloadProgress?: ProgressCallback;
40
+ maxResponseSize?: number;
41
+ beforeRedirect?: (info: RedirectInfo) => void | false | string | Promise<void | false | string>;
42
+ maxRedirects?: number;
43
+ followRedirects?: boolean;
44
+ http2?: boolean;
45
+ }
46
+ export interface ReckerRequest {
47
+ url: string;
48
+ method: Method;
49
+ headers: Headers;
50
+ body: BodyInit | null;
51
+ signal?: AbortSignal;
52
+ throwHttpErrors?: boolean;
53
+ timeout?: TimeoutOptions;
54
+ onUploadProgress?: ProgressCallback;
55
+ onDownloadProgress?: ProgressCallback;
56
+ maxResponseSize?: number;
57
+ beforeRedirect?: (info: RedirectInfo) => void | false | string | Promise<void | false | string>;
58
+ maxRedirects?: number;
59
+ followRedirects?: boolean;
60
+ http2?: boolean;
61
+ withHeader(name: string, value: string): ReckerRequest;
62
+ withBody(body: BodyInit): ReckerRequest;
63
+ _hooks?: {
64
+ onDnsLookup?: (info: any) => void;
65
+ onTcpConnect?: (info: any) => void;
66
+ onTlsHandshake?: (info: any) => void;
67
+ onRequestSent?: () => void;
68
+ onResponseStart?: (info: any) => void;
69
+ };
70
+ }
71
+ export interface Timings {
72
+ queuing?: number;
73
+ dns?: number;
74
+ tls?: number;
75
+ tcp?: number;
76
+ firstByte?: number;
77
+ content?: number;
78
+ total?: number;
79
+ }
80
+ export interface ConcurrencyConfig {
81
+ max?: number;
82
+ requestsPerInterval?: number;
83
+ interval?: number;
84
+ runner?: {
85
+ concurrency?: number;
86
+ retries?: number;
87
+ retryDelay?: number;
88
+ };
89
+ agent?: AgentOptions & {
90
+ connections?: number | 'auto';
91
+ };
92
+ http2?: {
93
+ maxConcurrentStreams?: number | 'auto';
94
+ };
95
+ }
96
+ export interface HTTP2Settings {
97
+ headerTableSize?: number;
98
+ enablePush?: number;
99
+ initialWindowSize?: number;
100
+ maxFrameSize?: number;
101
+ maxConcurrentStreams?: number;
102
+ maxHeaderListSize?: number;
103
+ enableConnectProtocol?: number;
104
+ }
105
+ export interface ConnectionInfo {
106
+ protocol?: string;
107
+ cipher?: string;
108
+ remoteAddress?: string;
109
+ remotePort?: number;
110
+ localAddress?: string;
111
+ localPort?: number;
112
+ http2?: {
113
+ streamId?: number;
114
+ streamWeight?: number;
115
+ streamDependency?: number;
116
+ serverPush?: boolean;
117
+ settingsReceived?: boolean;
118
+ maxConcurrentStreams?: number;
119
+ currentStreams?: number;
120
+ pendingStreams?: number;
121
+ localWindowSize?: number;
122
+ remoteWindowSize?: number;
123
+ localSettings?: HTTP2Settings;
124
+ remoteSettings?: HTTP2Settings;
125
+ };
126
+ http3?: {
127
+ quicVersion?: string;
128
+ zeroRTT?: boolean;
129
+ maxStreams?: number;
130
+ handshakeConfirmed?: boolean;
131
+ };
132
+ reused?: boolean;
133
+ rtt?: number;
134
+ }
135
+ export type { Logger, MinimalLogger } from './logger.js';
136
+ export { consoleLogger, silentLogger, createLevelLogger } from './logger.js';
137
+ export interface SSEEvent {
138
+ id?: string;
139
+ event?: string;
140
+ data: string;
141
+ retry?: number;
142
+ }
143
+ export interface PaginationConfig {
144
+ pageParam?: string;
145
+ limitParam?: string;
146
+ offsetParam?: string;
147
+ resultsPath?: string;
148
+ nextCursorPath?: string;
149
+ }
150
+ export interface PageResult<T = any> {
151
+ data: T;
152
+ response: ReckerResponse;
153
+ pageNumber: number;
154
+ }
155
+ export type NextFunction = (req: ReckerRequest) => Promise<ReckerResponse>;
156
+ export type Middleware = (req: ReckerRequest, next: NextFunction) => Promise<ReckerResponse>;
157
+ export interface Transport {
158
+ dispatch(req: ReckerRequest): Promise<ReckerResponse>;
159
+ }
160
+ export interface CacheEntry {
161
+ status: number;
162
+ statusText: string;
163
+ headers: Record<string, string>;
164
+ body: string;
165
+ timestamp: number;
166
+ etag?: string;
167
+ lastModified?: string;
168
+ vary?: string;
169
+ expires?: number;
170
+ maxAge?: number;
171
+ sMaxAge?: number;
172
+ mustRevalidate?: boolean;
173
+ noCache?: boolean;
174
+ noStore?: boolean;
175
+ isPrivate?: boolean;
176
+ isPublic?: boolean;
177
+ staleWhileRevalidate?: number;
178
+ staleIfError?: number;
179
+ }
180
+ export interface CacheStorage {
181
+ get(key: string): Promise<CacheEntry | undefined | null>;
182
+ set(key: string, value: CacheEntry, ttl: number): Promise<void>;
183
+ delete(key: string): Promise<void>;
184
+ }
185
+ export type CacheStrategy = 'cache-first' | 'network-only' | 'network-first' | 'stale-while-revalidate' | 'revalidate' | 'rfc-compliant';
186
+ export type Plugin = (client: any) => void;
187
+ export type HookFunction<T = void> = (req: ReckerRequest, extra?: any) => T | Promise<T>;
188
+ export interface Hooks {
189
+ beforeRequest?: Array<(req: ReckerRequest) => ReckerRequest | void | Promise<ReckerRequest | void>>;
190
+ afterResponse?: Array<(req: ReckerRequest, res: ReckerResponse) => ReckerResponse | void | Promise<ReckerResponse | void>>;
191
+ onError?: Array<(error: Error, req: ReckerRequest) => ReckerResponse | void | Promise<ReckerResponse | void>>;
192
+ onRetry?: Array<(error: Error, attempt: number, delay: number, req: ReckerRequest) => void | Promise<void>>;
193
+ onUrlResolved?: Array<(template: string, url: string, params: Record<string, string | number>, req: ReckerRequest) => void | Promise<void>>;
194
+ onDnsLookup?: Array<(info: {
195
+ domain: string;
196
+ duration: number;
197
+ addresses?: string[];
198
+ }, req: ReckerRequest) => void>;
199
+ onTcpConnect?: Array<(info: {
200
+ remoteAddress: string;
201
+ remotePort?: number;
202
+ localAddress?: string;
203
+ localPort?: number;
204
+ duration: number;
205
+ reused?: boolean;
206
+ }, req: ReckerRequest) => void>;
207
+ onTlsHandshake?: Array<(info: {
208
+ protocol: string;
209
+ cipher: string;
210
+ duration: number;
211
+ }, req: ReckerRequest) => void>;
212
+ onSocketAssigned?: Array<(info: {
213
+ protocol: string;
214
+ reused: boolean;
215
+ remoteAddress: string;
216
+ }, req: ReckerRequest) => void>;
217
+ onRequestSent?: Array<(req: ReckerRequest) => void>;
218
+ onResponseStart?: Array<(info: {
219
+ status: number;
220
+ headers: Headers;
221
+ }, req: ReckerRequest) => void>;
222
+ }
223
+ export interface ProxyOptions {
224
+ url: string;
225
+ type?: 'http' | 'https' | 'socks4' | 'socks4a' | 'socks5';
226
+ auth?: {
227
+ username: string;
228
+ password: string;
229
+ };
230
+ headers?: Record<string, string>;
231
+ token?: string;
232
+ tunnel?: boolean;
233
+ bypass?: string[];
234
+ requestTls?: TLSOptions;
235
+ proxyTls?: TLSOptions;
236
+ http2?: boolean;
237
+ keepAliveTimeout?: number;
238
+ connectTimeout?: number;
239
+ }
240
+ export interface TLSOptions {
241
+ minVersion?: 'TLSv1' | 'TLSv1.1' | 'TLSv1.2' | 'TLSv1.3';
242
+ maxVersion?: 'TLSv1' | 'TLSv1.1' | 'TLSv1.2' | 'TLSv1.3';
243
+ ciphers?: string;
244
+ honorCipherOrder?: boolean;
245
+ ca?: string | Buffer | Array<string | Buffer>;
246
+ cert?: string | Buffer;
247
+ key?: string | Buffer;
248
+ passphrase?: string;
249
+ rejectUnauthorized?: boolean;
250
+ alpnProtocols?: string[];
251
+ servername?: string | false;
252
+ sessionTimeout?: number;
253
+ sessionIdContext?: string;
254
+ }
255
+ export interface DNSOptions {
256
+ override?: Record<string, string>;
257
+ servers?: string[];
258
+ timeout?: number;
259
+ preferIPv4?: boolean;
260
+ }
261
+ export interface XSRFOptions {
262
+ cookieName?: string;
263
+ headerName?: string;
264
+ }
265
+ export interface CookieJar {
266
+ getCookieString(url: string): Promise<string> | string;
267
+ setCookie(rawCookie: string, url: string): Promise<unknown> | unknown;
268
+ }
269
+ export interface CookieOptions {
270
+ jar?: CookieJar | boolean;
271
+ ignoreInvalid?: boolean;
272
+ }
273
+ export interface CompressionOptions {
274
+ algorithm?: 'gzip' | 'deflate' | 'br';
275
+ threshold?: number;
276
+ force?: boolean;
277
+ methods?: string[];
278
+ }
279
+ export interface HTTP2Options {
280
+ enabled?: boolean;
281
+ maxConcurrentStreams?: number;
282
+ pipelining?: number;
283
+ }
284
+ export interface AgentOptions {
285
+ connections?: number;
286
+ pipelining?: number;
287
+ keepAlive?: boolean;
288
+ keepAliveTimeout?: number;
289
+ keepAliveMaxTimeout?: number;
290
+ keepAliveTimeoutThreshold?: number;
291
+ connectTimeout?: number;
292
+ maxRequestsPerClient?: number;
293
+ maxCachedSessions?: number;
294
+ clientTtl?: number | null;
295
+ maxHeaderSize?: number;
296
+ perDomainPooling?: boolean;
297
+ localAddress?: string;
298
+ }
299
+ export interface ClientOptions {
300
+ baseUrl?: string;
301
+ headers?: HeadersInit;
302
+ middlewares?: Middleware[];
303
+ hooks?: Hooks;
304
+ plugins?: Plugin[];
305
+ transport?: Transport;
306
+ defaults?: {
307
+ params?: Record<string, string | number>;
308
+ };
309
+ pagination?: PaginationConfig;
310
+ debug?: boolean;
311
+ logger?: import('./logger.js').Logger;
312
+ proxy?: ProxyOptions | string;
313
+ tls?: TLSOptions;
314
+ dns?: DNSOptions;
315
+ xsrf?: boolean | XSRFOptions;
316
+ compression?: boolean | CompressionOptions;
317
+ http2?: boolean | HTTP2Options;
318
+ concurrency?: number | ConcurrencyConfig;
319
+ maxResponseSize?: number;
320
+ socketPath?: string;
321
+ cookies?: boolean | CookieOptions;
322
+ timeout?: number | TimeoutOptions;
323
+ observability?: boolean;
324
+ retry?: {
325
+ maxAttempts?: number;
326
+ delay?: number;
327
+ maxDelay?: number;
328
+ backoff?: 'linear' | 'exponential' | 'decorrelated';
329
+ jitter?: boolean;
330
+ statusCodes?: number[];
331
+ };
332
+ }
333
+ export interface ReckerResponse<T = unknown> {
334
+ status: number;
335
+ statusText: string;
336
+ headers: Headers;
337
+ ok: boolean;
338
+ url: string;
339
+ timings?: Timings;
340
+ connection?: ConnectionInfo;
341
+ json<R = T>(): Promise<R>;
342
+ text(): Promise<string>;
343
+ cleanText(): Promise<string>;
344
+ blob(): Promise<Blob>;
345
+ read(): ReadableStream<Uint8Array> | null;
346
+ clone(): ReckerResponse<T>;
347
+ sse(): AsyncGenerator<SSEEvent>;
348
+ download(): AsyncGenerator<ProgressEvent>;
349
+ raw: Response;
350
+ [Symbol.asyncIterator](): AsyncGenerator<Uint8Array>;
351
+ }
@@ -0,0 +1 @@
1
+ export { consoleLogger, silentLogger, createLevelLogger } from './logger.js';
@@ -0,0 +1,16 @@
1
+ export interface Logger {
2
+ debug(message: string, ...args: unknown[]): void;
3
+ debug(obj: object, message?: string, ...args: unknown[]): void;
4
+ info(message: string, ...args: unknown[]): void;
5
+ info(obj: object, message?: string, ...args: unknown[]): void;
6
+ warn(message: string, ...args: unknown[]): void;
7
+ warn(obj: object, message?: string, ...args: unknown[]): void;
8
+ error(message: string, ...args: unknown[]): void;
9
+ error(obj: object, message?: string, ...args: unknown[]): void;
10
+ }
11
+ export type MinimalLogger = Partial<Logger> & {
12
+ info: Logger['info'];
13
+ };
14
+ export declare const consoleLogger: Logger;
15
+ export declare const silentLogger: Logger;
16
+ export declare function createLevelLogger(baseLogger: Logger, minLevel: 'debug' | 'info' | 'warn' | 'error'): Logger;
@@ -0,0 +1,66 @@
1
+ export const consoleLogger = {
2
+ debug: (msgOrObj, ...args) => {
3
+ if (typeof msgOrObj === 'object') {
4
+ console.debug(msgOrObj, ...args);
5
+ }
6
+ else {
7
+ console.debug(msgOrObj, ...args);
8
+ }
9
+ },
10
+ info: (msgOrObj, ...args) => {
11
+ if (typeof msgOrObj === 'object') {
12
+ console.info(msgOrObj, ...args);
13
+ }
14
+ else {
15
+ console.info(msgOrObj, ...args);
16
+ }
17
+ },
18
+ warn: (msgOrObj, ...args) => {
19
+ if (typeof msgOrObj === 'object') {
20
+ console.warn(msgOrObj, ...args);
21
+ }
22
+ else {
23
+ console.warn(msgOrObj, ...args);
24
+ }
25
+ },
26
+ error: (msgOrObj, ...args) => {
27
+ if (typeof msgOrObj === 'object') {
28
+ console.error(msgOrObj, ...args);
29
+ }
30
+ else {
31
+ console.error(msgOrObj, ...args);
32
+ }
33
+ },
34
+ };
35
+ export const silentLogger = {
36
+ debug: () => { },
37
+ info: () => { },
38
+ warn: () => { },
39
+ error: () => { },
40
+ };
41
+ export function createLevelLogger(baseLogger, minLevel) {
42
+ const levels = { debug: 0, info: 1, warn: 2, error: 3 };
43
+ const minLevelNum = levels[minLevel];
44
+ return {
45
+ debug: (...args) => {
46
+ if (levels.debug >= minLevelNum) {
47
+ baseLogger.debug(...args);
48
+ }
49
+ },
50
+ info: (...args) => {
51
+ if (levels.info >= minLevelNum) {
52
+ baseLogger.info(...args);
53
+ }
54
+ },
55
+ warn: (...args) => {
56
+ if (levels.warn >= minLevelNum) {
57
+ baseLogger.warn(...args);
58
+ }
59
+ },
60
+ error: (...args) => {
61
+ if (levels.error >= minLevelNum) {
62
+ baseLogger.error(...args);
63
+ }
64
+ },
65
+ };
66
+ }