@j0hanz/superfetch 1.0.2 → 1.0.5
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/README.md +345 -57
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -10
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +256 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/errors/app-error.d.ts +6 -20
- package/dist/errors/app-error.d.ts.map +1 -1
- package/dist/errors/app-error.js +7 -18
- package/dist/errors/app-error.js.map +1 -1
- package/dist/index.js +75 -62
- package/dist/index.js.map +1 -1
- package/dist/middleware/error-handler.d.ts +1 -5
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +4 -12
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts +2 -20
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +22 -47
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/prompts/index.d.ts +0 -3
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +2 -10
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/cached-content.d.ts +5 -0
- package/dist/resources/cached-content.d.ts.map +1 -0
- package/dist/resources/cached-content.js +93 -0
- package/dist/resources/cached-content.js.map +1 -0
- package/dist/resources/index.d.ts +0 -3
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +40 -5
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts +0 -4
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +11 -6
- package/dist/server.js.map +1 -1
- package/dist/services/cache.d.ts +20 -6
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +128 -20
- package/dist/services/cache.js.map +1 -1
- package/dist/services/card-extractor.d.ts +10 -0
- package/dist/services/card-extractor.d.ts.map +1 -0
- package/dist/services/card-extractor.js +194 -0
- package/dist/services/card-extractor.js.map +1 -0
- package/dist/services/extractor.d.ts +12 -19
- package/dist/services/extractor.d.ts.map +1 -1
- package/dist/services/extractor.js +60 -46
- package/dist/services/extractor.js.map +1 -1
- package/dist/services/fetcher.d.ts +13 -11
- package/dist/services/fetcher.d.ts.map +1 -1
- package/dist/services/fetcher.js +143 -54
- package/dist/services/fetcher.js.map +1 -1
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +4 -6
- package/dist/services/logger.js.map +1 -1
- package/dist/services/parser.d.ts +1 -6
- package/dist/services/parser.d.ts.map +1 -1
- package/dist/services/parser.js +57 -27
- package/dist/services/parser.js.map +1 -1
- package/dist/tools/handlers/fetch-links.tool.d.ts +6 -18
- package/dist/tools/handlers/fetch-links.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-links.tool.js +104 -79
- package/dist/tools/handlers/fetch-links.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.d.ts +6 -10
- package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.js +83 -84
- package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.d.ts +6 -12
- package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.js +51 -93
- package/dist/tools/handlers/fetch-url.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-urls.tool.d.ts +12 -0
- package/dist/tools/handlers/fetch-urls.tool.d.ts.map +1 -0
- package/dist/tools/handlers/fetch-urls.tool.js +184 -0
- package/dist/tools/handlers/fetch-urls.tool.js.map +1 -0
- package/dist/tools/index.d.ts +0 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +145 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/utils/common.d.ts +8 -0
- package/dist/tools/utils/common.d.ts.map +1 -0
- package/dist/tools/utils/common.js +35 -0
- package/dist/tools/utils/common.js.map +1 -0
- package/dist/tools/utils/fetch-pipeline.d.ts +3 -0
- package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -0
- package/dist/tools/utils/fetch-pipeline.js +78 -0
- package/dist/tools/utils/fetch-pipeline.js.map +1 -0
- package/dist/tools/utils/index.d.ts +4 -0
- package/dist/tools/utils/index.d.ts.map +1 -0
- package/dist/tools/utils/index.js +3 -0
- package/dist/tools/utils/index.js.map +1 -0
- package/dist/tools/utils/response-builder.d.ts +3 -0
- package/dist/tools/utils/response-builder.d.ts.map +1 -0
- package/dist/tools/utils/response-builder.js +24 -0
- package/dist/tools/utils/response-builder.js.map +1 -0
- package/dist/transformers/jsonl.transformer.d.ts +1 -1
- package/dist/transformers/jsonl.transformer.d.ts.map +1 -1
- package/dist/transformers/jsonl.transformer.js +2 -1
- package/dist/transformers/jsonl.transformer.js.map +1 -1
- package/dist/transformers/markdown.transformer.d.ts +1 -1
- package/dist/transformers/markdown.transformer.d.ts.map +1 -1
- package/dist/transformers/markdown.transformer.js +99 -5
- package/dist/transformers/markdown.transformer.js.map +1 -1
- package/dist/types/content.types.d.ts +11 -11
- package/dist/types/content.types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/schemas.d.ts +39 -12
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/utils/concurrency.d.ts +6 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +38 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/content-cleaner.d.ts +32 -0
- package/dist/utils/content-cleaner.d.ts.map +1 -0
- package/dist/utils/content-cleaner.js +238 -0
- package/dist/utils/content-cleaner.js.map +1 -0
- package/dist/utils/language-detector.d.ts +5 -0
- package/dist/utils/language-detector.d.ts.map +1 -0
- package/dist/utils/language-detector.js +50 -0
- package/dist/utils/language-detector.js.map +1 -0
- package/dist/utils/sanitizer.d.ts +0 -10
- package/dist/utils/sanitizer.d.ts.map +1 -1
- package/dist/utils/sanitizer.js +4 -12
- package/dist/utils/sanitizer.js.map +1 -1
- package/dist/utils/tool-error-handler.d.ts +1 -15
- package/dist/utils/tool-error-handler.d.ts.map +1 -1
- package/dist/utils/tool-error-handler.js +34 -6
- package/dist/utils/tool-error-handler.js.map +1 -1
- package/dist/utils/url-validator.d.ts +0 -8
- package/dist/utils/url-validator.d.ts.map +1 -1
- package/dist/utils/url-validator.js +17 -31
- package/dist/utils/url-validator.js.map +1 -1
- package/package.json +81 -79
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
type ContentBlockType = 'metadata' | 'heading' | 'paragraph' | 'list' | 'code' | 'table' | 'image' | 'blockquote';
|
|
2
|
+
interface ContentBlock {
|
|
3
|
+
type: ContentBlockType;
|
|
4
|
+
}
|
|
5
|
+
export interface MetadataBlock extends ContentBlock {
|
|
6
|
+
type: 'metadata';
|
|
7
|
+
title?: string | undefined;
|
|
8
|
+
description?: string | undefined;
|
|
9
|
+
author?: string | undefined;
|
|
10
|
+
url: string;
|
|
11
|
+
fetchedAt: string;
|
|
12
|
+
}
|
|
13
|
+
export interface HeadingBlock extends ContentBlock {
|
|
14
|
+
type: 'heading';
|
|
15
|
+
level: number;
|
|
16
|
+
text: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ParagraphBlock extends ContentBlock {
|
|
19
|
+
type: 'paragraph';
|
|
20
|
+
text: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ListBlock extends ContentBlock {
|
|
23
|
+
type: 'list';
|
|
24
|
+
ordered: boolean;
|
|
25
|
+
items: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface CodeBlock extends ContentBlock {
|
|
28
|
+
type: 'code';
|
|
29
|
+
language?: string | undefined;
|
|
30
|
+
text: string;
|
|
31
|
+
}
|
|
32
|
+
export interface TableBlock extends ContentBlock {
|
|
33
|
+
type: 'table';
|
|
34
|
+
headers?: string[] | undefined;
|
|
35
|
+
rows: string[][];
|
|
36
|
+
}
|
|
37
|
+
export interface ImageBlock extends ContentBlock {
|
|
38
|
+
type: 'image';
|
|
39
|
+
src: string;
|
|
40
|
+
alt?: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
export interface BlockquoteBlock extends ContentBlock {
|
|
43
|
+
type: 'blockquote';
|
|
44
|
+
text: string;
|
|
45
|
+
}
|
|
46
|
+
export type ContentBlockUnion = MetadataBlock | HeadingBlock | ParagraphBlock | ListBlock | CodeBlock | TableBlock | ImageBlock | BlockquoteBlock;
|
|
47
|
+
export interface ExtractedArticle {
|
|
48
|
+
title?: string | undefined;
|
|
49
|
+
byline?: string | undefined;
|
|
50
|
+
content: string;
|
|
51
|
+
textContent: string;
|
|
52
|
+
excerpt?: string | undefined;
|
|
53
|
+
siteName?: string | undefined;
|
|
54
|
+
}
|
|
55
|
+
export interface CacheEntry {
|
|
56
|
+
url: string;
|
|
57
|
+
content: string;
|
|
58
|
+
fetchedAt: string;
|
|
59
|
+
expiresAt: string;
|
|
60
|
+
}
|
|
61
|
+
export interface ExtractedLink {
|
|
62
|
+
href: string;
|
|
63
|
+
text: string;
|
|
64
|
+
type: 'internal' | 'external' | 'image';
|
|
65
|
+
}
|
|
66
|
+
interface RequestOptions {
|
|
67
|
+
/** Custom HTTP headers for the request */
|
|
68
|
+
customHeaders?: Record<string, string> | undefined;
|
|
69
|
+
/** Request timeout in milliseconds (1000-60000) */
|
|
70
|
+
timeout?: number | undefined;
|
|
71
|
+
/** Number of retry attempts (1-10) */
|
|
72
|
+
retries?: number | undefined;
|
|
73
|
+
}
|
|
74
|
+
export interface FetchUrlInput extends RequestOptions {
|
|
75
|
+
url: string;
|
|
76
|
+
extractMainContent?: boolean | undefined;
|
|
77
|
+
includeMetadata?: boolean | undefined;
|
|
78
|
+
maxContentLength?: number | undefined;
|
|
79
|
+
format?: 'jsonl' | 'markdown' | undefined;
|
|
80
|
+
}
|
|
81
|
+
export interface FetchLinksInput extends RequestOptions {
|
|
82
|
+
url: string;
|
|
83
|
+
includeExternal?: boolean | undefined;
|
|
84
|
+
includeInternal?: boolean | undefined;
|
|
85
|
+
maxLinks?: number | undefined;
|
|
86
|
+
filterPattern?: string | undefined;
|
|
87
|
+
includeImages?: boolean | undefined;
|
|
88
|
+
}
|
|
89
|
+
export interface FetchMarkdownInput extends RequestOptions {
|
|
90
|
+
url: string;
|
|
91
|
+
extractMainContent?: boolean | undefined;
|
|
92
|
+
includeMetadata?: boolean | undefined;
|
|
93
|
+
maxContentLength?: number | undefined;
|
|
94
|
+
generateToc?: boolean | undefined;
|
|
95
|
+
}
|
|
96
|
+
export interface FetchUrlsInput extends RequestOptions {
|
|
97
|
+
urls: string[];
|
|
98
|
+
extractMainContent?: boolean | undefined;
|
|
99
|
+
includeMetadata?: boolean | undefined;
|
|
100
|
+
maxContentLength?: number | undefined;
|
|
101
|
+
format?: 'jsonl' | 'markdown' | undefined;
|
|
102
|
+
concurrency?: number | undefined;
|
|
103
|
+
continueOnError?: boolean | undefined;
|
|
104
|
+
}
|
|
105
|
+
export interface ErrorResponse {
|
|
106
|
+
error: {
|
|
107
|
+
message: string;
|
|
108
|
+
code: string;
|
|
109
|
+
statusCode: number;
|
|
110
|
+
details?: Record<string, unknown> | undefined;
|
|
111
|
+
stack?: string | undefined;
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export interface RateLimitEntry {
|
|
115
|
+
count: number;
|
|
116
|
+
resetTime: number;
|
|
117
|
+
lastAccessed: number;
|
|
118
|
+
}
|
|
119
|
+
export interface RateLimiterOptions {
|
|
120
|
+
maxRequests: number;
|
|
121
|
+
windowMs: number;
|
|
122
|
+
cleanupIntervalMs: number;
|
|
123
|
+
}
|
|
124
|
+
export interface ExtractedMetadata {
|
|
125
|
+
title?: string | undefined;
|
|
126
|
+
description?: string | undefined;
|
|
127
|
+
author?: string | undefined;
|
|
128
|
+
}
|
|
129
|
+
export interface ExtractionResult {
|
|
130
|
+
article: ExtractedArticle | null;
|
|
131
|
+
metadata: ExtractedMetadata;
|
|
132
|
+
}
|
|
133
|
+
export type ParseableTagName = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'ul' | 'ol' | 'pre' | 'code' | 'table' | 'img' | 'blockquote';
|
|
134
|
+
export interface LinksTransformResult {
|
|
135
|
+
links: ExtractedLink[];
|
|
136
|
+
linkCount: number;
|
|
137
|
+
filtered: number;
|
|
138
|
+
truncated: boolean;
|
|
139
|
+
}
|
|
140
|
+
export interface ExtractLinksOptions {
|
|
141
|
+
includeInternal: boolean;
|
|
142
|
+
includeExternal: boolean;
|
|
143
|
+
includeImages: boolean;
|
|
144
|
+
maxLinks?: number | undefined;
|
|
145
|
+
filterPattern?: RegExp | undefined;
|
|
146
|
+
}
|
|
147
|
+
export interface TocEntry {
|
|
148
|
+
level: number;
|
|
149
|
+
text: string;
|
|
150
|
+
slug: string;
|
|
151
|
+
}
|
|
152
|
+
export interface MarkdownTransformResult {
|
|
153
|
+
markdown: string;
|
|
154
|
+
title: string | undefined;
|
|
155
|
+
toc: TocEntry[] | undefined;
|
|
156
|
+
truncated: boolean;
|
|
157
|
+
}
|
|
158
|
+
export interface TransformOptions {
|
|
159
|
+
extractMainContent: boolean;
|
|
160
|
+
includeMetadata: boolean;
|
|
161
|
+
generateToc: boolean;
|
|
162
|
+
maxContentLength?: number | undefined;
|
|
163
|
+
}
|
|
164
|
+
export interface JsonlTransformResult {
|
|
165
|
+
content: string;
|
|
166
|
+
contentBlocks: number;
|
|
167
|
+
title: string | undefined;
|
|
168
|
+
}
|
|
169
|
+
export interface SingleUrlResult {
|
|
170
|
+
url: string;
|
|
171
|
+
success: boolean;
|
|
172
|
+
title?: string | undefined;
|
|
173
|
+
content?: string | undefined;
|
|
174
|
+
contentBlocks?: number | undefined;
|
|
175
|
+
cached: boolean;
|
|
176
|
+
error?: string | undefined;
|
|
177
|
+
errorCode?: string | undefined;
|
|
178
|
+
}
|
|
179
|
+
export interface FetchPipelineOptions<T> {
|
|
180
|
+
/** URL to fetch */
|
|
181
|
+
url: string;
|
|
182
|
+
/** Cache namespace (e.g., 'url', 'links', 'markdown') */
|
|
183
|
+
cacheNamespace: string;
|
|
184
|
+
/** Optional custom HTTP headers */
|
|
185
|
+
customHeaders?: Record<string, string> | undefined;
|
|
186
|
+
/** Optional: number of retry attempts (1-10, defaults to 3) */
|
|
187
|
+
retries?: number | undefined;
|
|
188
|
+
/** Optional: AbortSignal for request cancellation */
|
|
189
|
+
signal?: AbortSignal | undefined;
|
|
190
|
+
/** Optional: per-request timeout override in milliseconds */
|
|
191
|
+
timeout?: number | undefined;
|
|
192
|
+
/** Transform function to process HTML into desired format */
|
|
193
|
+
transform: (html: string, url: string) => T;
|
|
194
|
+
/** Optional: serialize result for caching (defaults to JSON.stringify) */
|
|
195
|
+
serialize?: ((result: T) => string) | undefined;
|
|
196
|
+
/** Optional: deserialize cached content */
|
|
197
|
+
deserialize?: ((cached: string) => T) | undefined;
|
|
198
|
+
}
|
|
199
|
+
/** Result from the fetch pipeline */
|
|
200
|
+
export interface PipelineResult<T> {
|
|
201
|
+
/** The transformed data */
|
|
202
|
+
data: T;
|
|
203
|
+
/** Whether result came from cache */
|
|
204
|
+
fromCache: boolean;
|
|
205
|
+
/** The normalized URL that was fetched */
|
|
206
|
+
url: string;
|
|
207
|
+
/** Timestamp of when content was fetched/cached */
|
|
208
|
+
fetchedAt: string;
|
|
209
|
+
}
|
|
210
|
+
export interface ToolResponse<T = Record<string, unknown>> {
|
|
211
|
+
[x: string]: unknown;
|
|
212
|
+
content: {
|
|
213
|
+
type: 'text';
|
|
214
|
+
text: string;
|
|
215
|
+
}[];
|
|
216
|
+
structuredContent: T & Record<string, unknown>;
|
|
217
|
+
}
|
|
218
|
+
export interface BatchUrlResult {
|
|
219
|
+
url: string;
|
|
220
|
+
success: boolean;
|
|
221
|
+
title?: string | undefined;
|
|
222
|
+
content?: string | undefined;
|
|
223
|
+
contentBlocks?: number | undefined;
|
|
224
|
+
cached?: boolean | undefined;
|
|
225
|
+
error?: string | undefined;
|
|
226
|
+
errorCode?: string | undefined;
|
|
227
|
+
}
|
|
228
|
+
export interface BatchSummary {
|
|
229
|
+
total: number;
|
|
230
|
+
successful: number;
|
|
231
|
+
failed: number;
|
|
232
|
+
cached: number;
|
|
233
|
+
totalContentBlocks: number;
|
|
234
|
+
}
|
|
235
|
+
export interface BatchResponseContent {
|
|
236
|
+
[x: string]: unknown;
|
|
237
|
+
results: BatchUrlResult[];
|
|
238
|
+
summary: BatchSummary;
|
|
239
|
+
fetchedAt: string;
|
|
240
|
+
}
|
|
241
|
+
export interface ToolErrorResponse {
|
|
242
|
+
[x: string]: unknown;
|
|
243
|
+
content: {
|
|
244
|
+
type: 'text';
|
|
245
|
+
text: string;
|
|
246
|
+
}[];
|
|
247
|
+
structuredContent: {
|
|
248
|
+
[x: string]: unknown;
|
|
249
|
+
error: string;
|
|
250
|
+
url: string;
|
|
251
|
+
errorCode: string;
|
|
252
|
+
};
|
|
253
|
+
isError: true;
|
|
254
|
+
}
|
|
255
|
+
export {};
|
|
256
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,46 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base application error class with status code support
|
|
3
|
-
*/
|
|
4
1
|
export declare class AppError extends Error {
|
|
5
2
|
readonly statusCode: number;
|
|
6
3
|
readonly isOperational: boolean;
|
|
7
4
|
readonly code: string;
|
|
8
5
|
constructor(message: string, statusCode?: number, code?: string, isOperational?: boolean);
|
|
9
6
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Validation error (400)
|
|
12
|
-
*/
|
|
13
7
|
export declare class ValidationError extends AppError {
|
|
14
|
-
readonly details
|
|
8
|
+
readonly details: Record<string, unknown> | undefined;
|
|
15
9
|
constructor(message: string, details?: Record<string, unknown>);
|
|
16
10
|
}
|
|
17
|
-
/**
|
|
18
|
-
* URL validation error (400)
|
|
19
|
-
*/
|
|
20
11
|
export declare class UrlValidationError extends AppError {
|
|
21
12
|
readonly url: string;
|
|
22
13
|
constructor(message: string, url: string);
|
|
23
14
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Fetch error - network/HTTP errors during URL fetching
|
|
26
|
-
*/
|
|
27
15
|
export declare class FetchError extends AppError {
|
|
28
16
|
readonly url: string;
|
|
29
|
-
readonly httpStatus
|
|
17
|
+
readonly httpStatus: number | undefined;
|
|
30
18
|
constructor(message: string, url: string, httpStatus?: number);
|
|
31
19
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Rate limit error (429)
|
|
34
|
-
*/
|
|
35
20
|
export declare class RateLimitError extends AppError {
|
|
36
21
|
readonly retryAfter: number;
|
|
37
22
|
constructor(retryAfter: number);
|
|
38
23
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Timeout error (408/504)
|
|
41
|
-
*/
|
|
42
24
|
export declare class TimeoutError extends AppError {
|
|
43
25
|
readonly timeoutMs: number;
|
|
44
26
|
constructor(timeoutMs: number, isGateway?: boolean);
|
|
45
27
|
}
|
|
28
|
+
export declare class AbortError extends AppError {
|
|
29
|
+
readonly reason: string | undefined;
|
|
30
|
+
constructor(reason?: string);
|
|
31
|
+
}
|
|
46
32
|
//# sourceMappingURL=app-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-error.d.ts","sourceRoot":"","sources":["../../src/errors/app-error.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"app-error.d.ts","sourceRoot":"","sources":["../../src/errors/app-error.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGpB,OAAO,EAAE,MAAM,EACf,UAAU,SAAM,EAChB,IAAI,SAAmB,EACvB,aAAa,UAAO;CASvB;AAED,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAE1C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI/D;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIzC;AAED,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAK9D;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM;CAI/B;AAED,qBAAa,YAAa,SAAQ,QAAQ;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM,EAAE,SAAS,UAAQ;CAQjD;AAED,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;gBAExB,MAAM,CAAC,EAAE,MAAM;CAI5B"}
|
package/dist/errors/app-error.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Base application error class with status code support
|
|
3
|
-
*/
|
|
4
1
|
export class AppError extends Error {
|
|
5
2
|
statusCode;
|
|
6
3
|
isOperational;
|
|
@@ -14,9 +11,6 @@ export class AppError extends Error {
|
|
|
14
11
|
Error.captureStackTrace(this, this.constructor);
|
|
15
12
|
}
|
|
16
13
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Validation error (400)
|
|
19
|
-
*/
|
|
20
14
|
export class ValidationError extends AppError {
|
|
21
15
|
details;
|
|
22
16
|
constructor(message, details) {
|
|
@@ -24,9 +18,6 @@ export class ValidationError extends AppError {
|
|
|
24
18
|
this.details = details;
|
|
25
19
|
}
|
|
26
20
|
}
|
|
27
|
-
/**
|
|
28
|
-
* URL validation error (400)
|
|
29
|
-
*/
|
|
30
21
|
export class UrlValidationError extends AppError {
|
|
31
22
|
url;
|
|
32
23
|
constructor(message, url) {
|
|
@@ -34,9 +25,6 @@ export class UrlValidationError extends AppError {
|
|
|
34
25
|
this.url = url;
|
|
35
26
|
}
|
|
36
27
|
}
|
|
37
|
-
/**
|
|
38
|
-
* Fetch error - network/HTTP errors during URL fetching
|
|
39
|
-
*/
|
|
40
28
|
export class FetchError extends AppError {
|
|
41
29
|
url;
|
|
42
30
|
httpStatus;
|
|
@@ -46,9 +34,6 @@ export class FetchError extends AppError {
|
|
|
46
34
|
this.httpStatus = httpStatus;
|
|
47
35
|
}
|
|
48
36
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Rate limit error (429)
|
|
51
|
-
*/
|
|
52
37
|
export class RateLimitError extends AppError {
|
|
53
38
|
retryAfter;
|
|
54
39
|
constructor(retryAfter) {
|
|
@@ -56,9 +41,6 @@ export class RateLimitError extends AppError {
|
|
|
56
41
|
this.retryAfter = retryAfter;
|
|
57
42
|
}
|
|
58
43
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Timeout error (408/504)
|
|
61
|
-
*/
|
|
62
44
|
export class TimeoutError extends AppError {
|
|
63
45
|
timeoutMs;
|
|
64
46
|
constructor(timeoutMs, isGateway = false) {
|
|
@@ -66,4 +48,11 @@ export class TimeoutError extends AppError {
|
|
|
66
48
|
this.timeoutMs = timeoutMs;
|
|
67
49
|
}
|
|
68
50
|
}
|
|
51
|
+
export class AbortError extends AppError {
|
|
52
|
+
reason;
|
|
53
|
+
constructor(reason) {
|
|
54
|
+
super(reason ?? 'Request was aborted', 499, 'ABORTED');
|
|
55
|
+
this.reason = reason;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
69
58
|
//# sourceMappingURL=app-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-error.js","sourceRoot":"","sources":["../../src/errors/app-error.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"app-error.js","sourceRoot":"","sources":["../../src/errors/app-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACxB,UAAU,CAAS;IACnB,aAAa,CAAU;IACvB,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,UAAU,GAAG,GAAG,EAChB,IAAI,GAAG,gBAAgB,EACvB,aAAa,GAAG,IAAI;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,OAAO,CAAsC;IAEtD,YAAY,OAAe,EAAE,OAAiC;QAC5D,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,QAAQ;IACrC,GAAG,CAAS;IAErB,YAAY,OAAe,EAAE,GAAW;QACtC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,QAAQ;IAC7B,GAAG,CAAS;IACZ,UAAU,CAAqB;IAExC,YAAY,OAAe,EAAE,GAAW,EAAE,UAAmB;QAC3D,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,GAAG,EAAE,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,QAAQ;IACjC,UAAU,CAAS;IAE5B,YAAY,UAAkB;QAC5B,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,QAAQ;IAC/B,SAAS,CAAS;IAE3B,YAAY,SAAiB,EAAE,SAAS,GAAG,KAAK;QAC9C,KAAK,CACH,yBAAyB,SAAS,IAAI,EACtC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EACrB,SAAS,CACV,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,QAAQ;IAC7B,MAAM,CAAqB;IAEpC,YAAY,MAAe;QACzB,KAAK,CAAC,MAAM,IAAI,qBAAqB,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|