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.
Files changed (37) hide show
  1. package/dist/clients/reddit.d.ts +9 -1
  2. package/dist/clients/reddit.d.ts.map +1 -1
  3. package/dist/clients/reddit.js +121 -41
  4. package/dist/clients/reddit.js.map +1 -1
  5. package/dist/clients/research.d.ts +16 -0
  6. package/dist/clients/research.d.ts.map +1 -1
  7. package/dist/clients/research.js +135 -31
  8. package/dist/clients/research.js.map +1 -1
  9. package/dist/clients/scraper.d.ts +27 -1
  10. package/dist/clients/scraper.d.ts.map +1 -1
  11. package/dist/clients/scraper.js +206 -101
  12. package/dist/clients/scraper.js.map +1 -1
  13. package/dist/clients/search.d.ts +15 -0
  14. package/dist/clients/search.d.ts.map +1 -1
  15. package/dist/clients/search.js +174 -52
  16. package/dist/clients/search.js.map +1 -1
  17. package/dist/index.d.ts +4 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +51 -6
  20. package/dist/index.js.map +1 -1
  21. package/dist/services/llm-processor.d.ts +18 -0
  22. package/dist/services/llm-processor.d.ts.map +1 -1
  23. package/dist/services/llm-processor.js +174 -24
  24. package/dist/services/llm-processor.js.map +1 -1
  25. package/dist/tools/research.d.ts +5 -0
  26. package/dist/tools/research.d.ts.map +1 -1
  27. package/dist/tools/research.js +63 -18
  28. package/dist/tools/research.js.map +1 -1
  29. package/dist/tools/scrape.d.ts +5 -0
  30. package/dist/tools/scrape.d.ts.map +1 -1
  31. package/dist/tools/scrape.js +144 -81
  32. package/dist/tools/scrape.js.map +1 -1
  33. package/dist/utils/errors.d.ts +79 -1
  34. package/dist/utils/errors.d.ts.map +1 -1
  35. package/dist/utils/errors.js +253 -22
  36. package/dist/utils/errors.js.map +1 -1
  37. package/package.json +1 -1
@@ -1,30 +1,261 @@
1
1
  /**
2
- * Simple error handling for API requests
2
+ * Robust error handling utilities for MCP server
3
+ * Ensures the server NEVER crashes and always returns structured responses
3
4
  */
4
- export function createSimpleError(error) {
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
- // Missing API key
7
- if (err.message?.includes('API_KEY')) {
8
- return { message: 'OPENROUTER_API_KEY environment variable required', code: 'AUTH_ERROR' };
9
- }
10
- // HTTP errors
11
- if (err.response?.status) {
12
- const status = err.response.status;
13
- switch (status) {
14
- case 401:
15
- return { message: 'Invalid API key', code: 'AUTH_ERROR' };
16
- case 429:
17
- return { message: 'Rate limit exceeded - try again later', code: 'RATE_LIMIT' };
18
- case 403:
19
- return { message: 'API quota exceeded', code: 'QUOTA_ERROR' };
20
- default:
21
- return { message: `API error: ${status}`, code: 'API_ERROR' };
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
- // Network/timeout errors
25
- if (err.code === 'ECONNABORTED' || err.message?.includes('timeout')) {
26
- return { message: 'Request timeout - research may take up to 30 minutes', code: 'TIMEOUT' };
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
- return { message: err.message || 'Unknown error occurred', code: 'UNKNOWN_ERROR' };
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
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAG,KAA4E,CAAC;IAEzF,kBAAkB;IAClB,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,kDAAkD,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAC7F,CAAC;IAED,cAAc;IACd,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,GAAG;gBACN,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAC5D,KAAK,GAAG;gBACN,OAAO,EAAE,OAAO,EAAE,uCAAuC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAClF,KAAK,GAAG;gBACN,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;YAChE;gBACE,OAAO,EAAE,OAAO,EAAE,cAAc,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,OAAO,EAAE,OAAO,EAAE,sDAAsD,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC9F,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,wBAAwB,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;AACrF,CAAC"}
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.0.14",
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",