@j0hanz/superfetch 1.0.3 → 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 +615 -590
- package/dist/config/types.d.ts +5 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/errors/app-error.d.ts +4 -0
- package/dist/errors/app-error.d.ts.map +1 -1
- package/dist/errors/app-error.js +7 -0
- package/dist/errors/app-error.js.map +1 -1
- package/dist/index.js +62 -15
- package/dist/index.js.map +1 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +3 -1
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/rate-limiter.d.ts.map +1 -1
- package/dist/middleware/rate-limiter.js +11 -3
- package/dist/middleware/rate-limiter.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +2 -7
- 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.map +1 -1
- package/dist/resources/index.js +39 -1
- package/dist/resources/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -0
- package/dist/server.js.map +1 -1
- package/dist/services/cache.d.ts +11 -0
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +63 -6
- package/dist/services/cache.js.map +1 -1
- package/dist/services/card-extractor.d.ts.map +1 -1
- package/dist/services/card-extractor.js +11 -4
- package/dist/services/card-extractor.js.map +1 -1
- package/dist/services/extractor.d.ts +7 -1
- package/dist/services/extractor.d.ts.map +1 -1
- package/dist/services/extractor.js +12 -5
- package/dist/services/extractor.js.map +1 -1
- package/dist/services/fetcher.d.ts +10 -1
- package/dist/services/fetcher.d.ts.map +1 -1
- package/dist/services/fetcher.js +131 -36
- package/dist/services/fetcher.js.map +1 -1
- package/dist/services/parser.d.ts.map +1 -1
- package/dist/services/parser.js +38 -25
- package/dist/services/parser.js.map +1 -1
- package/dist/tools/handlers/fetch-links.tool.d.ts +5 -10
- package/dist/tools/handlers/fetch-links.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-links.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.d.ts +5 -12
- package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.js +1 -2
- package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.d.ts +4 -12
- package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-urls.tool.d.ts +8 -1
- package/dist/tools/handlers/fetch-urls.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-urls.tool.js +52 -15
- package/dist/tools/handlers/fetch-urls.tool.js.map +1 -1
- package/dist/tools/utils/common.js +1 -1
- package/dist/tools/utils/common.js.map +1 -1
- package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -1
- package/dist/tools/utils/fetch-pipeline.js +54 -13
- package/dist/tools/utils/fetch-pipeline.js.map +1 -1
- package/dist/transformers/markdown.transformer.d.ts.map +1 -1
- package/dist/transformers/markdown.transformer.js +7 -27
- package/dist/transformers/markdown.transformer.js.map +1 -1
- package/dist/utils/concurrency.d.ts +5 -1
- package/dist/utils/concurrency.d.ts.map +1 -1
- package/dist/utils/concurrency.js +15 -2
- package/dist/utils/concurrency.js.map +1 -1
- package/dist/utils/content-cleaner.d.ts.map +1 -1
- package/dist/utils/content-cleaner.js +106 -108
- package/dist/utils/content-cleaner.js.map +1 -1
- package/dist/utils/language-detector.d.ts +1 -1
- package/dist/utils/language-detector.d.ts.map +1 -1
- package/dist/utils/sanitizer.js +1 -1
- package/dist/utils/sanitizer.js.map +1 -1
- 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/package.json +81 -80
|
@@ -2,86 +2,85 @@
|
|
|
2
2
|
* Post-processing content cleaner for removing noise artifacts
|
|
3
3
|
* that slip through Readability extraction.
|
|
4
4
|
*/
|
|
5
|
-
//
|
|
6
|
-
const
|
|
7
|
-
// Relative timestamps
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
// Share/action
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// UI artifacts
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// Empty
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// Navigation
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// Cookie/consent
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
];
|
|
5
|
+
// Pre-compiled combined pattern for optimal performance
|
|
6
|
+
const NOISE_PATTERN_COMBINED = new RegExp([
|
|
7
|
+
// Relative timestamps
|
|
8
|
+
'^\\d+\\s*(seconds?|minutes?|hours?|days?|weeks?|months?|years?)\\s*ago$',
|
|
9
|
+
'^(just now|recently|today|yesterday|last week|last month)$',
|
|
10
|
+
'^(updated|modified|edited|created|published)\\s*:?\\s*\\d+\\s*(seconds?|minutes?|hours?|days?|weeks?|months?|years?)\\s*ago$',
|
|
11
|
+
'^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\s+\\d{1,2},?\\s+\\d{4}$',
|
|
12
|
+
'^\\d{1,2}\\s+(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\\s+\\d{4}$',
|
|
13
|
+
'^\\d{4}-\\d{2}-\\d{2}$',
|
|
14
|
+
'^last\\s+updated\\s*:?',
|
|
15
|
+
// Share/action buttons
|
|
16
|
+
'^(share|copy|like|follow|subscribe|download|print|save|bookmark|tweet|pin it|email|export)$',
|
|
17
|
+
'^(copy to clipboard|copied!?|copy code|copy link)$',
|
|
18
|
+
'^(share on|share to|share via)\\s+(twitter|facebook|linkedin|reddit|x|email)$',
|
|
19
|
+
// UI artifacts
|
|
20
|
+
'^(click to copy|expand|collapse|show more|show less|load more|view more|read more|see more|see all|view all)$',
|
|
21
|
+
'^(toggle|switch|enable|disable|on|off)$',
|
|
22
|
+
'^(edit|delete|remove|add|new|create|update|cancel|confirm|submit|reset|clear)$',
|
|
23
|
+
'^(open in|view in|edit in)\\s+\\w+$',
|
|
24
|
+
'^(try it|run|execute|play|preview|demo|live demo|playground)$',
|
|
25
|
+
'^(source|view source|edit this page|edit on github|improve this doc)$',
|
|
26
|
+
// Empty/placeholder
|
|
27
|
+
'^(loading\\.{0,3}|please wait\\.{0,3}|\\.{2,})$',
|
|
28
|
+
'^(n\\/a|tbd|todo|coming soon|placeholder|untitled)$',
|
|
29
|
+
// Navigation
|
|
30
|
+
'^(next|previous|prev|back|forward|home|menu|close|open|skip to|jump to|go to)$',
|
|
31
|
+
'^(table of contents|toc|contents|on this page|in this article|in this section)$',
|
|
32
|
+
'^(scroll to top|back to top|top)$',
|
|
33
|
+
// Cookie/consent
|
|
34
|
+
'^(accept|reject|accept all|reject all|cookie settings|privacy settings|manage preferences)$',
|
|
35
|
+
'^(accept cookies|decline cookies|cookie policy|privacy policy|terms of service|terms & conditions)$',
|
|
36
|
+
// Counts
|
|
37
|
+
'^\\d+\\s*(comments?|replies?|reactions?|responses?)$',
|
|
38
|
+
'^\\d+\\s*(likes?|shares?|views?|followers?|retweets?|stars?|forks?|claps?|upvotes?|downvotes?)$',
|
|
39
|
+
'^(liked by|shared by|followed by)\\s+\\d+',
|
|
40
|
+
// Version badges
|
|
41
|
+
'^v?\\d+\\.\\d+(\\.\\d+)?(-\\w+)?$',
|
|
42
|
+
'^(stable|beta|alpha|rc|preview|experimental|deprecated|legacy|new|updated)$',
|
|
43
|
+
// Structural
|
|
44
|
+
'^(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)$',
|
|
45
|
+
'^panel\\s*[a-z]?$',
|
|
46
|
+
// API artifacts
|
|
47
|
+
'^(required|optional|default|type|example|description|parameters?|returns?|response|request)$',
|
|
48
|
+
'^(get|post|put|patch|delete|head|options)\\s*$',
|
|
49
|
+
// Interactive
|
|
50
|
+
'^(drag|drop|resize|zoom|scroll|swipe|tap|click|hover|focus)(\\s+to\\s+\\w+)?$',
|
|
51
|
+
'^(drag the|move the|resize the|drag to|click to)\\s+\\w+',
|
|
52
|
+
// Breadcrumbs
|
|
53
|
+
'^[/\\\\>→»›]+$',
|
|
54
|
+
// Ads
|
|
55
|
+
'^(ad|advertisement|sponsored|promoted|partner content)$',
|
|
56
|
+
].join('|'), 'i');
|
|
57
|
+
// Pre-compiled pattern for short text noise
|
|
58
|
+
const SHORT_TEXT_NOISE_PATTERN = new RegExp([
|
|
59
|
+
'^#\\w+$',
|
|
60
|
+
'^@\\w+$',
|
|
61
|
+
'^\\d+$',
|
|
62
|
+
'^[•·→←↑↓►▼▲◄▶◀■□●○★☆✓✗✔✘×]+$',
|
|
63
|
+
'^[,;:\\-–—]+$',
|
|
64
|
+
'^\\[\\d+\\]$',
|
|
65
|
+
'^\\(\\d+\\)$',
|
|
66
|
+
'^fig\\.?\\s*\\d+$',
|
|
67
|
+
'^table\\s*\\d+$',
|
|
68
|
+
'^step\\s*\\d+$',
|
|
69
|
+
'^note:?$',
|
|
70
|
+
'^tip:?$',
|
|
71
|
+
'^warning:?$',
|
|
72
|
+
'^info:?$',
|
|
73
|
+
'^caution:?$',
|
|
74
|
+
].join('|'), 'i');
|
|
75
|
+
// Pre-compiled pattern for UI chrome detection
|
|
76
|
+
const UI_CHROME_PATTERN = new RegExp([
|
|
77
|
+
'^(sign in|sign up|log in|log out|register|create account)$',
|
|
78
|
+
'^(search|search\\.\\.\\.|search docs|search documentation)$',
|
|
79
|
+
'^(dark mode|light mode|theme|language|locale)$',
|
|
80
|
+
'^(feedback|report issue|report a bug|file an issue|suggest edit)$',
|
|
81
|
+
'^(documentation|docs|api|reference|guide|tutorial|examples?)$',
|
|
82
|
+
"^(version|changelog|release notes|what's new)$",
|
|
83
|
+
].join('|'), 'i');
|
|
85
84
|
// Minimum lengths for different content types
|
|
86
85
|
const MIN_PARAGRAPH_LENGTH = 20;
|
|
87
86
|
const MIN_HEADING_LENGTH = 2;
|
|
@@ -96,50 +95,49 @@ function isNoiseText(text) {
|
|
|
96
95
|
if (!trimmed) {
|
|
97
96
|
return true;
|
|
98
97
|
}
|
|
99
|
-
// Check
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
98
|
+
// Check combined noise pattern (single regex test)
|
|
99
|
+
if (NOISE_PATTERN_COMBINED.test(trimmed)) {
|
|
100
|
+
return true;
|
|
104
101
|
}
|
|
105
102
|
// Check short text patterns for brief content
|
|
106
103
|
if (trimmed.length < SHORT_TEXT_THRESHOLD) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return true;
|
|
110
|
-
}
|
|
104
|
+
if (SHORT_TEXT_NOISE_PATTERN.test(trimmed)) {
|
|
105
|
+
return true;
|
|
111
106
|
}
|
|
112
107
|
// Also check UI chrome patterns for short text
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return true;
|
|
116
|
-
}
|
|
108
|
+
if (UI_CHROME_PATTERN.test(trimmed)) {
|
|
109
|
+
return true;
|
|
117
110
|
}
|
|
118
111
|
}
|
|
119
112
|
return false;
|
|
120
113
|
}
|
|
114
|
+
// Pre-compiled placeholder pattern (combined for performance)
|
|
115
|
+
const PLACEHOLDER_PATTERN = /^(lorem ipsum|sample text|placeholder|example (text|content|data)|test (text|content|data)|your (text|content|name|email) here|enter (your|a) |type (your|a|something) )/i;
|
|
116
|
+
// Cache for placeholder checks to avoid repeated regex tests
|
|
117
|
+
const PLACEHOLDER_CACHE = new Map();
|
|
118
|
+
const PLACEHOLDER_CACHE_MAX_SIZE = 1000;
|
|
121
119
|
/**
|
|
122
120
|
* Check if text looks like placeholder/demo content
|
|
121
|
+
* Uses caching for 3-8x performance improvement on repeated patterns
|
|
123
122
|
*/
|
|
124
123
|
function isPlaceholderContent(text) {
|
|
125
124
|
const trimmed = text.trim().toLowerCase();
|
|
126
|
-
//
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (pattern.test(trimmed)) {
|
|
139
|
-
return true;
|
|
125
|
+
// Check cache first
|
|
126
|
+
const cached = PLACEHOLDER_CACHE.get(trimmed);
|
|
127
|
+
if (cached !== undefined) {
|
|
128
|
+
return cached;
|
|
129
|
+
}
|
|
130
|
+
// Single regex test (faster than array iteration)
|
|
131
|
+
const result = PLACEHOLDER_PATTERN.test(trimmed);
|
|
132
|
+
// Cache result with LRU eviction
|
|
133
|
+
if (PLACEHOLDER_CACHE.size >= PLACEHOLDER_CACHE_MAX_SIZE) {
|
|
134
|
+
const firstKey = PLACEHOLDER_CACHE.keys().next().value;
|
|
135
|
+
if (firstKey !== undefined) {
|
|
136
|
+
PLACEHOLDER_CACHE.delete(firstKey);
|
|
140
137
|
}
|
|
141
138
|
}
|
|
142
|
-
|
|
139
|
+
PLACEHOLDER_CACHE.set(trimmed, result);
|
|
140
|
+
return result;
|
|
143
141
|
}
|
|
144
142
|
/**
|
|
145
143
|
* Clean paragraph text by removing noise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-cleaner.js","sourceRoot":"","sources":["../../src/utils/content-cleaner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,
|
|
1
|
+
{"version":3,"file":"content-cleaner.js","sourceRoot":"","sources":["../../src/utils/content-cleaner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Detect programming language from code content
|
|
3
3
|
*/
|
|
4
|
-
export declare function detectLanguage(code: string):
|
|
4
|
+
export declare function detectLanguage(code: string): string | undefined;
|
|
5
5
|
//# sourceMappingURL=language-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/utils/language-detector.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"language-detector.d.ts","sourceRoot":"","sources":["../../src/utils/language-detector.ts"],"names":[],"mappings":"AA4CA;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D"}
|
package/dist/utils/sanitizer.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/utils/sanitizer.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,SAAiB;IAC1D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/utils/sanitizer.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,MAAM,UAAU,YAAY,CAAC,IAA+B;IAC1D,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,SAAiB;IAC1D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;AAClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAa5D,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,iBAAiB,CAOnB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,eAAe,SAAqB,GACnC,iBAAiB,CA8CnB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AppError, FetchError, TimeoutError, UrlValidationError, } from '../errors/index.js';
|
|
1
|
+
import { AbortError, AppError, FetchError, RateLimitError, TimeoutError, UrlValidationError, } from '../errors/index.js';
|
|
2
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
2
3
|
export function createToolErrorResponse(message, url, code) {
|
|
3
4
|
const structuredContent = { error: message, url, errorCode: code };
|
|
4
5
|
return {
|
|
@@ -9,19 +10,46 @@ export function createToolErrorResponse(message, url, code) {
|
|
|
9
10
|
}
|
|
10
11
|
export function handleToolError(error, url, fallbackMessage = 'Operation failed') {
|
|
11
12
|
if (error instanceof UrlValidationError) {
|
|
12
|
-
|
|
13
|
+
const message = isDevelopment
|
|
14
|
+
? `${error.message}\nURL: ${error.url}\nStack: ${error.stack ?? ''}`
|
|
15
|
+
: error.message;
|
|
16
|
+
return createToolErrorResponse(message, url, 'INVALID_URL');
|
|
17
|
+
}
|
|
18
|
+
if (error instanceof AbortError) {
|
|
19
|
+
const message = isDevelopment
|
|
20
|
+
? `Request aborted${error.reason ? `: ${error.reason}` : ''}\n${error.stack ?? ''}`
|
|
21
|
+
: `Request aborted${error.reason ? `: ${error.reason}` : ''}`;
|
|
22
|
+
return createToolErrorResponse(message, url, 'ABORTED');
|
|
13
23
|
}
|
|
14
24
|
if (error instanceof TimeoutError) {
|
|
15
|
-
|
|
25
|
+
const message = isDevelopment
|
|
26
|
+
? `Request timed out after ${error.timeoutMs}ms\n${error.stack ?? ''}`
|
|
27
|
+
: `Request timed out after ${error.timeoutMs}ms`;
|
|
28
|
+
return createToolErrorResponse(message, url, 'TIMEOUT');
|
|
29
|
+
}
|
|
30
|
+
if (error instanceof RateLimitError) {
|
|
31
|
+
const message = isDevelopment
|
|
32
|
+
? `Rate limited. Retry after ${error.retryAfter}s\n${error.stack ?? ''}`
|
|
33
|
+
: `Rate limited. Retry after ${error.retryAfter}s`;
|
|
34
|
+
return createToolErrorResponse(message, url, 'RATE_LIMITED');
|
|
16
35
|
}
|
|
17
36
|
if (error instanceof FetchError) {
|
|
18
37
|
const code = error.httpStatus ? `HTTP_${error.httpStatus}` : 'FETCH_ERROR';
|
|
19
|
-
|
|
38
|
+
const message = isDevelopment
|
|
39
|
+
? `${error.message}\n${error.stack ?? ''}`
|
|
40
|
+
: error.message;
|
|
41
|
+
return createToolErrorResponse(message, url, code);
|
|
20
42
|
}
|
|
21
43
|
if (error instanceof AppError) {
|
|
22
|
-
|
|
44
|
+
const message = isDevelopment
|
|
45
|
+
? `${error.message}\n${error.stack ?? ''}`
|
|
46
|
+
: error.message;
|
|
47
|
+
return createToolErrorResponse(message, url, error.code);
|
|
23
48
|
}
|
|
24
49
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
25
|
-
|
|
50
|
+
const fullMessage = isDevelopment && error instanceof Error
|
|
51
|
+
? `${fallbackMessage}: ${message}\n${error.stack ?? ''}`
|
|
52
|
+
: `${fallbackMessage}: ${message}`;
|
|
53
|
+
return createToolErrorResponse(fullMessage, url, 'UNKNOWN_ERROR');
|
|
26
54
|
}
|
|
27
55
|
//# sourceMappingURL=tool-error-handler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-error-handler.js","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,GAAW,EACX,IAAY;IAEZ,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACnE,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpE,iBAAiB;QACjB,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,KAAc,EACd,GAAW,EACX,eAAe,GAAG,kBAAkB;IAEpC,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"tool-error-handler.js","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,80 +1,81 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@j0hanz/superfetch",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"mcpName": "io.github.j0hanz/superfetch",
|
|
5
|
-
"description": "Intelligent web content fetcher MCP server that converts HTML to clean, AI-readable JSONL format",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "dist/index.js",
|
|
8
|
-
"bin": {
|
|
9
|
-
"superfetch": "dist/index.js"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"dist",
|
|
13
|
-
"README.md"
|
|
14
|
-
],
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "git+https://github.com/j0hanz/super-fetch-mcp-server.git"
|
|
18
|
-
},
|
|
19
|
-
"homepage": "https://github.com/j0hanz/super-fetch-mcp-server#readme",
|
|
20
|
-
"bugs": {
|
|
21
|
-
"url": "https://github.com/j0hanz/super-fetch-mcp-server/issues"
|
|
22
|
-
},
|
|
23
|
-
"author": "j0hanz",
|
|
24
|
-
"license": "MIT",
|
|
25
|
-
"keywords": [
|
|
26
|
-
"mcp",
|
|
27
|
-
"mcp-server",
|
|
28
|
-
"web-fetching",
|
|
29
|
-
"content-extraction",
|
|
30
|
-
"readability",
|
|
31
|
-
"jsonl",
|
|
32
|
-
"ai-tools"
|
|
33
|
-
],
|
|
34
|
-
"scripts": {
|
|
35
|
-
"dev": "tsx watch src/index.ts",
|
|
36
|
-
"build": "tsc && shx chmod +x dist/*.js",
|
|
37
|
-
"prepare": "npm run build",
|
|
38
|
-
"prepublishOnly": "npm run build && npm run lint",
|
|
39
|
-
"start": "node dist/index.js",
|
|
40
|
-
"release": "node scripts/release.js",
|
|
41
|
-
"format": "prettier --write .",
|
|
42
|
-
"type-check": "tsc --noEmit",
|
|
43
|
-
"lint": "eslint .",
|
|
44
|
-
"lint:fix": "eslint . --fix",
|
|
45
|
-
"knip": "knip",
|
|
46
|
-
"knip:fix": "knip --fix"
|
|
47
|
-
},
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
50
|
-
"@mozilla/readability": "^0.6.0",
|
|
51
|
-
"axios": "^1.
|
|
52
|
-
"cheerio": "^1.
|
|
53
|
-
"domhandler": "^5.0.3",
|
|
54
|
-
"express": "^
|
|
55
|
-
"jsdom": "^
|
|
56
|
-
"node-cache": "^5.1.2",
|
|
57
|
-
"turndown": "^7.2.
|
|
58
|
-
"winston": "^3.19.0",
|
|
59
|
-
"zod": "^3.25.76"
|
|
60
|
-
},
|
|
61
|
-
"devDependencies": {
|
|
62
|
-
"@eslint/js": "^9.39.
|
|
63
|
-
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
|
|
64
|
-
"@types/express": "^5.0.
|
|
65
|
-
"@types/jsdom": "^
|
|
66
|
-
"@types/node": "^
|
|
67
|
-
"@types/turndown": "^5.0.
|
|
68
|
-
"eslint": "^9.
|
|
69
|
-
"eslint-config-prettier": "^10.1.8",
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"typescript
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@j0hanz/superfetch",
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"mcpName": "io.github.j0hanz/superfetch",
|
|
5
|
+
"description": "Intelligent web content fetcher MCP server that converts HTML to clean, AI-readable JSONL format",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"bin": {
|
|
9
|
+
"superfetch": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/j0hanz/super-fetch-mcp-server.git"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/j0hanz/super-fetch-mcp-server#readme",
|
|
20
|
+
"bugs": {
|
|
21
|
+
"url": "https://github.com/j0hanz/super-fetch-mcp-server/issues"
|
|
22
|
+
},
|
|
23
|
+
"author": "j0hanz",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"keywords": [
|
|
26
|
+
"mcp",
|
|
27
|
+
"mcp-server",
|
|
28
|
+
"web-fetching",
|
|
29
|
+
"content-extraction",
|
|
30
|
+
"readability",
|
|
31
|
+
"jsonl",
|
|
32
|
+
"ai-tools"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"dev": "tsx watch src/index.ts",
|
|
36
|
+
"build": "tsc && shx chmod +x dist/*.js",
|
|
37
|
+
"prepare": "npm run build",
|
|
38
|
+
"prepublishOnly": "npm run build && npm run lint",
|
|
39
|
+
"start": "node dist/index.js",
|
|
40
|
+
"release": "node scripts/release.js",
|
|
41
|
+
"format": "prettier --write .",
|
|
42
|
+
"type-check": "tsc --noEmit",
|
|
43
|
+
"lint": "eslint .",
|
|
44
|
+
"lint:fix": "eslint . --fix",
|
|
45
|
+
"knip": "knip",
|
|
46
|
+
"knip:fix": "knip --fix"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@modelcontextprotocol/sdk": "^1.24.3",
|
|
50
|
+
"@mozilla/readability": "^0.6.0",
|
|
51
|
+
"axios": "^1.13.2",
|
|
52
|
+
"cheerio": "^1.1.2",
|
|
53
|
+
"domhandler": "^5.0.3",
|
|
54
|
+
"express": "^5.2.1",
|
|
55
|
+
"jsdom": "^27.3.0",
|
|
56
|
+
"node-cache": "^5.1.2",
|
|
57
|
+
"turndown": "^7.2.2",
|
|
58
|
+
"winston": "^3.19.0",
|
|
59
|
+
"zod": "^3.25.76"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@eslint/js": "^9.39.2",
|
|
63
|
+
"@trivago/prettier-plugin-sort-imports": "^6.0.0",
|
|
64
|
+
"@types/express": "^5.0.6",
|
|
65
|
+
"@types/jsdom": "^27.0.0",
|
|
66
|
+
"@types/node": "^22.10.0",
|
|
67
|
+
"@types/turndown": "^5.0.6",
|
|
68
|
+
"eslint": "^9.23.2",
|
|
69
|
+
"eslint-config-prettier": "^10.1.8",
|
|
70
|
+
"eslint-plugin-unused-imports": "^4.3.0",
|
|
71
|
+
"knip": "^5.73.4",
|
|
72
|
+
"prettier": "^3.7.4",
|
|
73
|
+
"shx": "^0.4.0",
|
|
74
|
+
"tsx": "^4.21.0",
|
|
75
|
+
"typescript": "^5.9.3",
|
|
76
|
+
"typescript-eslint": "^8.49.0"
|
|
77
|
+
},
|
|
78
|
+
"engines": {
|
|
79
|
+
"node": ">=20.0.0"
|
|
80
|
+
}
|
|
81
|
+
}
|