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.
- package/dist/browser/browser/cache.d.ts +40 -0
- package/dist/browser/browser/cache.js +199 -0
- package/dist/browser/browser/crypto.d.ts +24 -0
- package/dist/browser/browser/crypto.js +80 -0
- package/dist/browser/browser/index.d.ts +31 -0
- package/dist/browser/browser/index.js +31 -0
- package/dist/browser/browser/recker.d.ts +26 -0
- package/dist/browser/browser/recker.js +61 -0
- package/dist/browser/cache/basic-file-storage.d.ts +12 -0
- package/dist/browser/cache/basic-file-storage.js +50 -0
- package/dist/browser/cache/memory-limits.d.ts +20 -0
- package/dist/browser/cache/memory-limits.js +96 -0
- package/dist/browser/cache/memory-storage.d.ts +132 -0
- package/dist/browser/cache/memory-storage.js +454 -0
- package/dist/browser/cache.d.ts +40 -0
- package/dist/browser/cache.js +199 -0
- package/dist/browser/constants/http-status.d.ts +73 -0
- package/dist/browser/constants/http-status.js +156 -0
- package/dist/browser/cookies/memory-cookie-jar.d.ts +30 -0
- package/dist/browser/cookies/memory-cookie-jar.js +210 -0
- package/dist/browser/core/client.d.ts +118 -0
- package/dist/browser/core/client.js +667 -0
- package/dist/browser/core/errors.d.ts +142 -0
- package/dist/browser/core/errors.js +308 -0
- package/dist/browser/core/index.d.ts +5 -0
- package/dist/browser/core/index.js +5 -0
- package/dist/browser/core/request-promise.d.ts +23 -0
- package/dist/browser/core/request-promise.js +82 -0
- package/dist/browser/core/request.d.ts +20 -0
- package/dist/browser/core/request.js +76 -0
- package/dist/browser/core/response.d.ts +34 -0
- package/dist/browser/core/response.js +178 -0
- package/dist/browser/crypto.d.ts +24 -0
- package/dist/browser/crypto.js +80 -0
- package/dist/browser/index.d.ts +31 -0
- package/dist/browser/index.js +31 -0
- package/dist/browser/plugins/auth/api-key.d.ts +8 -0
- package/dist/browser/plugins/auth/api-key.js +27 -0
- package/dist/browser/plugins/auth/auth0.d.ts +33 -0
- package/dist/browser/plugins/auth/auth0.js +94 -0
- package/dist/browser/plugins/auth/aws-sigv4.d.ts +10 -0
- package/dist/browser/plugins/auth/aws-sigv4.js +88 -0
- package/dist/browser/plugins/auth/azure-ad.d.ts +48 -0
- package/dist/browser/plugins/auth/azure-ad.js +152 -0
- package/dist/browser/plugins/auth/basic.d.ts +7 -0
- package/dist/browser/plugins/auth/basic.js +13 -0
- package/dist/browser/plugins/auth/bearer.d.ts +8 -0
- package/dist/browser/plugins/auth/bearer.js +17 -0
- package/dist/browser/plugins/auth/cognito.d.ts +45 -0
- package/dist/browser/plugins/auth/cognito.js +208 -0
- package/dist/browser/plugins/auth/digest.d.ts +8 -0
- package/dist/browser/plugins/auth/digest.js +100 -0
- package/dist/browser/plugins/auth/firebase.d.ts +32 -0
- package/dist/browser/plugins/auth/firebase.js +195 -0
- package/dist/browser/plugins/auth/github-app.d.ts +36 -0
- package/dist/browser/plugins/auth/github-app.js +170 -0
- package/dist/browser/plugins/auth/google-service-account.d.ts +49 -0
- package/dist/browser/plugins/auth/google-service-account.js +172 -0
- package/dist/browser/plugins/auth/index.d.ts +15 -0
- package/dist/browser/plugins/auth/index.js +15 -0
- package/dist/browser/plugins/auth/mtls.d.ts +37 -0
- package/dist/browser/plugins/auth/mtls.js +140 -0
- package/dist/browser/plugins/auth/oauth2.d.ts +8 -0
- package/dist/browser/plugins/auth/oauth2.js +26 -0
- package/dist/browser/plugins/auth/oidc.d.ts +55 -0
- package/dist/browser/plugins/auth/oidc.js +222 -0
- package/dist/browser/plugins/auth/okta.d.ts +47 -0
- package/dist/browser/plugins/auth/okta.js +157 -0
- package/dist/browser/plugins/auth.d.ts +1 -0
- package/dist/browser/plugins/auth.js +1 -0
- package/dist/browser/plugins/cache.d.ts +15 -0
- package/dist/browser/plugins/cache.js +486 -0
- package/dist/browser/plugins/circuit-breaker.d.ts +13 -0
- package/dist/browser/plugins/circuit-breaker.js +100 -0
- package/dist/browser/plugins/compression.d.ts +4 -0
- package/dist/browser/plugins/compression.js +130 -0
- package/dist/browser/plugins/cookie-jar.d.ts +5 -0
- package/dist/browser/plugins/cookie-jar.js +72 -0
- package/dist/browser/plugins/dedup.d.ts +5 -0
- package/dist/browser/plugins/dedup.js +35 -0
- package/dist/browser/plugins/graphql.d.ts +13 -0
- package/dist/browser/plugins/graphql.js +58 -0
- package/dist/browser/plugins/grpc-web.d.ts +79 -0
- package/dist/browser/plugins/grpc-web.js +261 -0
- package/dist/browser/plugins/hls.d.ts +105 -0
- package/dist/browser/plugins/hls.js +395 -0
- package/dist/browser/plugins/jsonrpc.d.ts +75 -0
- package/dist/browser/plugins/jsonrpc.js +143 -0
- package/dist/browser/plugins/logger.d.ts +13 -0
- package/dist/browser/plugins/logger.js +108 -0
- package/dist/browser/plugins/odata.d.ts +181 -0
- package/dist/browser/plugins/odata.js +564 -0
- package/dist/browser/plugins/pagination.d.ts +16 -0
- package/dist/browser/plugins/pagination.js +105 -0
- package/dist/browser/plugins/rate-limit.d.ts +15 -0
- package/dist/browser/plugins/rate-limit.js +162 -0
- package/dist/browser/plugins/retry.d.ts +14 -0
- package/dist/browser/plugins/retry.js +116 -0
- package/dist/browser/plugins/scrape.d.ts +21 -0
- package/dist/browser/plugins/scrape.js +82 -0
- package/dist/browser/plugins/server-timing.d.ts +7 -0
- package/dist/browser/plugins/server-timing.js +24 -0
- package/dist/browser/plugins/soap.d.ts +72 -0
- package/dist/browser/plugins/soap.js +347 -0
- package/dist/browser/plugins/xml.d.ts +9 -0
- package/dist/browser/plugins/xml.js +194 -0
- package/dist/browser/plugins/xsrf.d.ts +9 -0
- package/dist/browser/plugins/xsrf.js +48 -0
- package/dist/browser/recker.d.ts +26 -0
- package/dist/browser/recker.js +61 -0
- package/dist/browser/runner/request-runner.d.ts +46 -0
- package/dist/browser/runner/request-runner.js +89 -0
- package/dist/browser/scrape/document.d.ts +44 -0
- package/dist/browser/scrape/document.js +210 -0
- package/dist/browser/scrape/element.d.ts +49 -0
- package/dist/browser/scrape/element.js +176 -0
- package/dist/browser/scrape/extractors.d.ts +16 -0
- package/dist/browser/scrape/extractors.js +356 -0
- package/dist/browser/scrape/types.d.ts +107 -0
- package/dist/browser/scrape/types.js +1 -0
- package/dist/browser/transport/fetch.d.ts +11 -0
- package/dist/browser/transport/fetch.js +143 -0
- package/dist/browser/transport/undici.d.ts +38 -0
- package/dist/browser/transport/undici.js +897 -0
- package/dist/browser/types/ai.d.ts +267 -0
- package/dist/browser/types/ai.js +1 -0
- package/dist/browser/types/index.d.ts +351 -0
- package/dist/browser/types/index.js +1 -0
- package/dist/browser/types/logger.d.ts +16 -0
- package/dist/browser/types/logger.js +66 -0
- package/dist/browser/types/udp.d.ts +138 -0
- package/dist/browser/types/udp.js +1 -0
- package/dist/browser/utils/agent-manager.d.ts +29 -0
- package/dist/browser/utils/agent-manager.js +160 -0
- package/dist/browser/utils/body.d.ts +10 -0
- package/dist/browser/utils/body.js +148 -0
- package/dist/browser/utils/charset.d.ts +15 -0
- package/dist/browser/utils/charset.js +169 -0
- package/dist/browser/utils/concurrency.d.ts +20 -0
- package/dist/browser/utils/concurrency.js +120 -0
- package/dist/browser/utils/dns.d.ts +6 -0
- package/dist/browser/utils/dns.js +26 -0
- package/dist/browser/utils/header-parser.d.ts +94 -0
- package/dist/browser/utils/header-parser.js +617 -0
- package/dist/browser/utils/html-cleaner.d.ts +1 -0
- package/dist/browser/utils/html-cleaner.js +21 -0
- package/dist/browser/utils/link-header.d.ts +69 -0
- package/dist/browser/utils/link-header.js +190 -0
- package/dist/browser/utils/optional-require.d.ts +19 -0
- package/dist/browser/utils/optional-require.js +105 -0
- package/dist/browser/utils/progress.d.ts +8 -0
- package/dist/browser/utils/progress.js +82 -0
- package/dist/browser/utils/request-pool.d.ts +22 -0
- package/dist/browser/utils/request-pool.js +101 -0
- package/dist/browser/utils/sse.d.ts +7 -0
- package/dist/browser/utils/sse.js +67 -0
- package/dist/browser/utils/streaming.d.ts +17 -0
- package/dist/browser/utils/streaming.js +84 -0
- package/dist/browser/utils/try-fn.d.ts +3 -0
- package/dist/browser/utils/try-fn.js +59 -0
- package/dist/browser/utils/user-agent.d.ts +44 -0
- package/dist/browser/utils/user-agent.js +100 -0
- package/dist/browser/utils/whois.d.ts +32 -0
- package/dist/browser/utils/whois.js +246 -0
- package/dist/browser/websocket/client.d.ts +65 -0
- package/dist/browser/websocket/client.js +313 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/transport/fetch.d.ts +7 -1
- package/dist/transport/fetch.js +58 -76
- 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
|
+
}
|