research-powerpack-mcp 3.0.14 → 3.1.1
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/clients/reddit.d.ts +9 -1
- package/dist/clients/reddit.d.ts.map +1 -1
- package/dist/clients/reddit.js +121 -41
- package/dist/clients/reddit.js.map +1 -1
- package/dist/clients/research.d.ts +16 -0
- package/dist/clients/research.d.ts.map +1 -1
- package/dist/clients/research.js +135 -31
- package/dist/clients/research.js.map +1 -1
- package/dist/clients/scraper.d.ts +27 -1
- package/dist/clients/scraper.d.ts.map +1 -1
- package/dist/clients/scraper.js +206 -101
- package/dist/clients/scraper.js.map +1 -1
- package/dist/clients/search.d.ts +15 -0
- package/dist/clients/search.d.ts.map +1 -1
- package/dist/clients/search.js +174 -52
- package/dist/clients/search.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -6
- package/dist/index.js.map +1 -1
- package/dist/services/llm-processor.d.ts +18 -0
- package/dist/services/llm-processor.d.ts.map +1 -1
- package/dist/services/llm-processor.js +174 -24
- package/dist/services/llm-processor.js.map +1 -1
- package/dist/tools/research.d.ts +5 -0
- package/dist/tools/research.d.ts.map +1 -1
- package/dist/tools/research.js +63 -18
- package/dist/tools/research.js.map +1 -1
- package/dist/tools/scrape.d.ts +5 -0
- package/dist/tools/scrape.d.ts.map +1 -1
- package/dist/tools/scrape.js +144 -81
- package/dist/tools/scrape.js.map +1 -1
- package/dist/utils/errors.d.ts +79 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +253 -22
- package/dist/utils/errors.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/errors.js
CHANGED
|
@@ -1,30 +1,261 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Robust error handling utilities for MCP server
|
|
3
|
+
* Ensures the server NEVER crashes and always returns structured responses
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Error Codes (MCP-compliant)
|
|
7
|
+
// ============================================================================
|
|
8
|
+
export const ErrorCode = {
|
|
9
|
+
// Retryable errors
|
|
10
|
+
RATE_LIMITED: 'RATE_LIMITED',
|
|
11
|
+
TIMEOUT: 'TIMEOUT',
|
|
12
|
+
NETWORK_ERROR: 'NETWORK_ERROR',
|
|
13
|
+
SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
|
|
14
|
+
// Non-retryable errors
|
|
15
|
+
AUTH_ERROR: 'AUTH_ERROR',
|
|
16
|
+
INVALID_INPUT: 'INVALID_INPUT',
|
|
17
|
+
NOT_FOUND: 'NOT_FOUND',
|
|
18
|
+
QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',
|
|
19
|
+
// Internal errors
|
|
20
|
+
INTERNAL_ERROR: 'INTERNAL_ERROR',
|
|
21
|
+
PARSE_ERROR: 'PARSE_ERROR',
|
|
22
|
+
UNKNOWN_ERROR: 'UNKNOWN_ERROR',
|
|
23
|
+
};
|
|
24
|
+
export const DEFAULT_RETRY_OPTIONS = {
|
|
25
|
+
maxRetries: 3,
|
|
26
|
+
baseDelayMs: 1000,
|
|
27
|
+
maxDelayMs: 30000,
|
|
28
|
+
retryableStatuses: [408, 429, 500, 502, 503, 504, 510],
|
|
29
|
+
};
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// Error Classification
|
|
32
|
+
// ============================================================================
|
|
33
|
+
/**
|
|
34
|
+
* Classify any error into a structured format
|
|
35
|
+
* NEVER throws - always returns a valid StructuredError
|
|
36
|
+
*/
|
|
37
|
+
export function classifyError(error) {
|
|
38
|
+
// Handle null/undefined
|
|
39
|
+
if (error == null) {
|
|
40
|
+
return {
|
|
41
|
+
code: ErrorCode.UNKNOWN_ERROR,
|
|
42
|
+
message: 'An unknown error occurred',
|
|
43
|
+
retryable: false,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Handle abort errors (timeout via AbortController)
|
|
47
|
+
if (error instanceof DOMException && error.name === 'AbortError') {
|
|
48
|
+
return {
|
|
49
|
+
code: ErrorCode.TIMEOUT,
|
|
50
|
+
message: 'Request timed out',
|
|
51
|
+
retryable: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Extract error properties safely
|
|
5
55
|
const err = error;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
56
|
+
const message = err.message || String(error);
|
|
57
|
+
const statusCode = err.response?.status || err.status;
|
|
58
|
+
const errCode = err.code;
|
|
59
|
+
const errName = err.name;
|
|
60
|
+
// Network errors (Node.js specific)
|
|
61
|
+
if (errCode === 'ECONNREFUSED' || errCode === 'ENOTFOUND' || errCode === 'ECONNRESET') {
|
|
62
|
+
return {
|
|
63
|
+
code: ErrorCode.NETWORK_ERROR,
|
|
64
|
+
message: `Network error: ${errCode}`,
|
|
65
|
+
retryable: true,
|
|
66
|
+
cause: message,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Timeout errors
|
|
70
|
+
if (errCode === 'ECONNABORTED' ||
|
|
71
|
+
errCode === 'ETIMEDOUT' ||
|
|
72
|
+
errName === 'AbortError' ||
|
|
73
|
+
message.toLowerCase().includes('timeout') ||
|
|
74
|
+
message.toLowerCase().includes('timed out')) {
|
|
75
|
+
return {
|
|
76
|
+
code: ErrorCode.TIMEOUT,
|
|
77
|
+
message: 'Request timed out',
|
|
78
|
+
retryable: true,
|
|
79
|
+
cause: message,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// HTTP status code errors
|
|
83
|
+
if (statusCode) {
|
|
84
|
+
return classifyHttpError(statusCode, message);
|
|
85
|
+
}
|
|
86
|
+
// API key errors
|
|
87
|
+
if (message.includes('API_KEY') || message.includes('api_key') || message.includes('Invalid API')) {
|
|
88
|
+
return {
|
|
89
|
+
code: ErrorCode.AUTH_ERROR,
|
|
90
|
+
message: 'API key missing or invalid',
|
|
91
|
+
retryable: false,
|
|
92
|
+
cause: message,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// Parse errors
|
|
96
|
+
if (message.includes('JSON') || message.includes('parse') || message.includes('Unexpected token')) {
|
|
97
|
+
return {
|
|
98
|
+
code: ErrorCode.PARSE_ERROR,
|
|
99
|
+
message: 'Failed to parse response',
|
|
100
|
+
retryable: false,
|
|
101
|
+
cause: message,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Default to unknown
|
|
105
|
+
return {
|
|
106
|
+
code: ErrorCode.UNKNOWN_ERROR,
|
|
107
|
+
message: message.substring(0, 500), // Truncate long messages
|
|
108
|
+
retryable: false,
|
|
109
|
+
cause: err.cause ? String(err.cause) : undefined,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Classify HTTP status codes into structured errors
|
|
114
|
+
*/
|
|
115
|
+
function classifyHttpError(status, message) {
|
|
116
|
+
switch (status) {
|
|
117
|
+
case 400:
|
|
118
|
+
return { code: ErrorCode.INVALID_INPUT, message: 'Bad request', retryable: false, statusCode: status };
|
|
119
|
+
case 401:
|
|
120
|
+
return { code: ErrorCode.AUTH_ERROR, message: 'Invalid API key', retryable: false, statusCode: status };
|
|
121
|
+
case 403:
|
|
122
|
+
return { code: ErrorCode.QUOTA_EXCEEDED, message: 'Access forbidden or quota exceeded', retryable: false, statusCode: status };
|
|
123
|
+
case 404:
|
|
124
|
+
return { code: ErrorCode.NOT_FOUND, message: 'Resource not found', retryable: false, statusCode: status };
|
|
125
|
+
case 408:
|
|
126
|
+
return { code: ErrorCode.TIMEOUT, message: 'Request timeout', retryable: true, statusCode: status };
|
|
127
|
+
case 429:
|
|
128
|
+
return { code: ErrorCode.RATE_LIMITED, message: 'Rate limit exceeded', retryable: true, statusCode: status };
|
|
129
|
+
case 500:
|
|
130
|
+
return { code: ErrorCode.INTERNAL_ERROR, message: 'Server error', retryable: true, statusCode: status };
|
|
131
|
+
case 502:
|
|
132
|
+
return { code: ErrorCode.SERVICE_UNAVAILABLE, message: 'Bad gateway', retryable: true, statusCode: status };
|
|
133
|
+
case 503:
|
|
134
|
+
return { code: ErrorCode.SERVICE_UNAVAILABLE, message: 'Service unavailable', retryable: true, statusCode: status };
|
|
135
|
+
case 504:
|
|
136
|
+
return { code: ErrorCode.TIMEOUT, message: 'Gateway timeout', retryable: true, statusCode: status };
|
|
137
|
+
case 510:
|
|
138
|
+
return { code: ErrorCode.SERVICE_UNAVAILABLE, message: 'Request canceled', retryable: true, statusCode: status };
|
|
139
|
+
default:
|
|
140
|
+
if (status >= 500) {
|
|
141
|
+
return { code: ErrorCode.SERVICE_UNAVAILABLE, message: `Server error: ${status}`, retryable: true, statusCode: status };
|
|
142
|
+
}
|
|
143
|
+
return { code: ErrorCode.UNKNOWN_ERROR, message: `HTTP ${status}: ${message}`, retryable: false, statusCode: status };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// Retry Logic with Exponential Backoff
|
|
148
|
+
// ============================================================================
|
|
149
|
+
/**
|
|
150
|
+
* Calculate delay with exponential backoff and jitter
|
|
151
|
+
*/
|
|
152
|
+
export function calculateBackoff(attempt, options) {
|
|
153
|
+
const exponentialDelay = options.baseDelayMs * Math.pow(2, attempt);
|
|
154
|
+
const jitter = Math.random() * 0.3 * exponentialDelay; // 0-30% jitter
|
|
155
|
+
return Math.min(exponentialDelay + jitter, options.maxDelayMs);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Sleep utility that respects abort signals
|
|
159
|
+
*/
|
|
160
|
+
export function sleep(ms, signal) {
|
|
161
|
+
return new Promise((resolve, reject) => {
|
|
162
|
+
if (signal?.aborted) {
|
|
163
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const timeout = setTimeout(resolve, ms);
|
|
167
|
+
signal?.addEventListener('abort', () => {
|
|
168
|
+
clearTimeout(timeout);
|
|
169
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
170
|
+
}, { once: true });
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Execute a function with retry logic
|
|
175
|
+
* NEVER throws on final failure - returns error result instead
|
|
176
|
+
*/
|
|
177
|
+
export async function withRetry(fn, options = {}) {
|
|
178
|
+
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
|
|
179
|
+
let lastError = { code: ErrorCode.UNKNOWN_ERROR, message: 'No attempts made', retryable: false };
|
|
180
|
+
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
181
|
+
const controller = new AbortController();
|
|
182
|
+
try {
|
|
183
|
+
const data = await fn(controller.signal);
|
|
184
|
+
return { success: true, data };
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
lastError = classifyError(error);
|
|
188
|
+
// Don't retry non-retryable errors
|
|
189
|
+
if (!lastError.retryable) {
|
|
190
|
+
return { success: false, error: lastError, attempts: attempt + 1 };
|
|
191
|
+
}
|
|
192
|
+
// Don't retry if we've exhausted attempts
|
|
193
|
+
if (attempt >= opts.maxRetries) {
|
|
194
|
+
return { success: false, error: lastError, attempts: attempt + 1 };
|
|
195
|
+
}
|
|
196
|
+
// Calculate backoff and wait
|
|
197
|
+
const delayMs = calculateBackoff(attempt, opts);
|
|
198
|
+
opts.onRetry?.(attempt + 1, lastError, delayMs);
|
|
199
|
+
try {
|
|
200
|
+
await sleep(delayMs);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Sleep was aborted, return immediately
|
|
204
|
+
return { success: false, error: lastError, attempts: attempt + 1 };
|
|
205
|
+
}
|
|
22
206
|
}
|
|
23
207
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
208
|
+
return { success: false, error: lastError, attempts: opts.maxRetries + 1 };
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Wrap a fetch call with timeout via AbortController
|
|
212
|
+
*/
|
|
213
|
+
export function fetchWithTimeout(url, options = {}) {
|
|
214
|
+
const { timeoutMs = 30000, signal: externalSignal, ...fetchOptions } = options;
|
|
215
|
+
const controller = new AbortController();
|
|
216
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
217
|
+
// Combine with external signal if provided
|
|
218
|
+
if (externalSignal) {
|
|
219
|
+
externalSignal.addEventListener('abort', () => controller.abort(), { once: true });
|
|
220
|
+
}
|
|
221
|
+
return fetch(url, { ...fetchOptions, signal: controller.signal }).finally(() => {
|
|
222
|
+
clearTimeout(timeoutId);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
// ============================================================================
|
|
226
|
+
// Safe Execution Wrappers
|
|
227
|
+
// ============================================================================
|
|
228
|
+
/**
|
|
229
|
+
* Safely execute any function, NEVER throws
|
|
230
|
+
*/
|
|
231
|
+
export async function safeExecute(fn, fallback) {
|
|
232
|
+
try {
|
|
233
|
+
const data = await fn();
|
|
234
|
+
return { data };
|
|
27
235
|
}
|
|
28
|
-
|
|
236
|
+
catch (error) {
|
|
237
|
+
return { data: fallback, error: classifyError(error) };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Safely parse JSON, NEVER throws
|
|
242
|
+
*/
|
|
243
|
+
export function safeJsonParse(text, fallback) {
|
|
244
|
+
try {
|
|
245
|
+
return { data: JSON.parse(text) };
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return { data: fallback, error: error instanceof Error ? error.message : String(error) };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// ============================================================================
|
|
252
|
+
// Legacy Compatibility (for existing code)
|
|
253
|
+
// ============================================================================
|
|
254
|
+
/**
|
|
255
|
+
* @deprecated Use classifyError instead
|
|
256
|
+
*/
|
|
257
|
+
export function createSimpleError(error) {
|
|
258
|
+
const structured = classifyError(error);
|
|
259
|
+
return { message: structured.message, code: structured.code };
|
|
29
260
|
}
|
|
30
261
|
//# sourceMappingURL=errors.js.map
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "research-powerpack-mcp",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "The ultimate research MCP toolkit: Reddit mining, web search with CTR aggregation, AI-powered deep research, and intelligent web scraping - all in one modular package",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|