@j0hanz/fetch-url-mcp 1.12.7 → 1.12.8
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/http/auth.d.ts +2 -2
- package/dist/http/auth.d.ts.map +1 -1
- package/dist/http/auth.js +4 -5
- package/dist/http/index.d.ts +6 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +5 -0
- package/dist/http/native.d.ts +73 -0
- package/dist/http/native.d.ts.map +1 -1
- package/dist/http/native.js +554 -10
- package/dist/http/rate-limit.d.ts +1 -1
- package/dist/http/rate-limit.d.ts.map +1 -1
- package/dist/http/rate-limit.js +3 -4
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -6
- package/dist/lib/config.js +2 -2
- package/dist/lib/core.d.ts +56 -4
- package/dist/lib/core.d.ts.map +1 -1
- package/dist/lib/core.js +155 -4
- package/dist/lib/error/classes.d.ts +19 -0
- package/dist/lib/error/classes.d.ts.map +1 -0
- package/dist/lib/error/classes.js +107 -0
- package/dist/lib/error/classify.d.ts +4 -0
- package/dist/lib/error/classify.d.ts.map +1 -0
- package/dist/lib/error/classify.js +154 -0
- package/dist/lib/error/codes.d.ts +23 -0
- package/dist/lib/error/codes.d.ts.map +1 -0
- package/dist/lib/error/codes.js +22 -0
- package/dist/lib/error/index.d.ts +6 -0
- package/dist/lib/error/index.d.ts.map +1 -0
- package/dist/lib/error/index.js +5 -0
- package/dist/lib/{error-messages.d.ts → error/messages.d.ts} +2 -2
- package/dist/lib/error/messages.d.ts.map +1 -0
- package/dist/lib/{error-messages.js → error/messages.js} +2 -2
- package/dist/lib/{tool-errors.d.ts → error/payload.d.ts} +7 -13
- package/dist/lib/error/payload.d.ts.map +1 -0
- package/dist/lib/error/payload.js +108 -0
- package/dist/lib/mcp-interop.d.ts.map +1 -1
- package/dist/lib/mcp-interop.js +4 -6
- package/dist/lib/net/http.d.ts.map +1 -0
- package/dist/lib/{http.js → net/http.js} +4 -7
- package/dist/lib/net/index.d.ts +4 -0
- package/dist/lib/net/index.d.ts.map +1 -0
- package/dist/lib/net/index.js +3 -0
- package/dist/lib/{fetch-pipeline.d.ts → net/pipeline.d.ts} +3 -3
- package/dist/lib/net/pipeline.d.ts.map +1 -0
- package/dist/lib/{fetch-pipeline.js → net/pipeline.js} +3 -5
- package/dist/lib/{url.d.ts → net/url.d.ts} +1 -1
- package/dist/lib/net/url.d.ts.map +1 -0
- package/dist/lib/{url.js → net/url.js} +3 -5
- package/dist/lib/utils.d.ts +2 -18
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +29 -104
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +8 -5
- package/dist/schemas.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -9
- package/dist/tasks/index.d.ts +2 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +1 -0
- package/dist/tasks/manager.d.ts +123 -1
- package/dist/tasks/manager.d.ts.map +1 -1
- package/dist/tasks/manager.js +745 -10
- package/dist/tools/{fetch-url.d.ts → index.d.ts} +4 -5
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/{fetch-url.js → index.js} +6 -8
- package/dist/transform/index.d.ts +279 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +5234 -0
- package/package.json +2 -2
- package/dist/cli.d.ts +0 -19
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -65
- package/dist/http/health.d.ts +0 -8
- package/dist/http/health.d.ts.map +0 -1
- package/dist/http/health.js +0 -152
- package/dist/http/helpers.d.ts +0 -68
- package/dist/http/helpers.d.ts.map +0 -1
- package/dist/http/helpers.js +0 -402
- package/dist/lib/error-codes.d.ts +0 -13
- package/dist/lib/error-codes.d.ts.map +0 -1
- package/dist/lib/error-codes.js +0 -12
- package/dist/lib/error-messages.d.ts.map +0 -1
- package/dist/lib/fetch-pipeline.d.ts.map +0 -1
- package/dist/lib/http.d.ts.map +0 -1
- package/dist/lib/logger-names.d.ts +0 -16
- package/dist/lib/logger-names.d.ts.map +0 -1
- package/dist/lib/logger-names.js +0 -15
- package/dist/lib/session.d.ts +0 -44
- package/dist/lib/session.d.ts.map +0 -1
- package/dist/lib/session.js +0 -137
- package/dist/lib/tool-errors.d.ts.map +0 -1
- package/dist/lib/tool-errors.js +0 -253
- package/dist/lib/url.d.ts.map +0 -1
- package/dist/lib/zod.d.ts +0 -3
- package/dist/lib/zod.d.ts.map +0 -1
- package/dist/lib/zod.js +0 -27
- package/dist/tasks/call-contract.d.ts +0 -25
- package/dist/tasks/call-contract.d.ts.map +0 -1
- package/dist/tasks/call-contract.js +0 -59
- package/dist/tasks/execution.d.ts +0 -16
- package/dist/tasks/execution.d.ts.map +0 -1
- package/dist/tasks/execution.js +0 -241
- package/dist/tasks/handlers.d.ts +0 -11
- package/dist/tasks/handlers.d.ts.map +0 -1
- package/dist/tasks/handlers.js +0 -157
- package/dist/tasks/owner.d.ts +0 -43
- package/dist/tasks/owner.d.ts.map +0 -1
- package/dist/tasks/owner.js +0 -144
- package/dist/tasks/registry.d.ts +0 -20
- package/dist/tasks/registry.d.ts.map +0 -1
- package/dist/tasks/registry.js +0 -40
- package/dist/tasks/waiters.d.ts +0 -27
- package/dist/tasks/waiters.d.ts.map +0 -1
- package/dist/tasks/waiters.js +0 -114
- package/dist/tools/fetch-url.d.ts.map +0 -1
- package/dist/transform/dom-prep.d.ts +0 -16
- package/dist/transform/dom-prep.d.ts.map +0 -1
- package/dist/transform/dom-prep.js +0 -1287
- package/dist/transform/html-translators.d.ts +0 -5
- package/dist/transform/html-translators.d.ts.map +0 -1
- package/dist/transform/html-translators.js +0 -697
- package/dist/transform/markdown-cleanup.d.ts +0 -10
- package/dist/transform/markdown-cleanup.d.ts.map +0 -1
- package/dist/transform/markdown-cleanup.js +0 -542
- package/dist/transform/metadata.d.ts +0 -18
- package/dist/transform/metadata.d.ts.map +0 -1
- package/dist/transform/metadata.js +0 -462
- package/dist/transform/next-flight.d.ts +0 -2
- package/dist/transform/next-flight.d.ts.map +0 -1
- package/dist/transform/next-flight.js +0 -374
- package/dist/transform/shared.d.ts +0 -8
- package/dist/transform/shared.d.ts.map +0 -1
- package/dist/transform/shared.js +0 -137
- package/dist/transform/transform.d.ts +0 -38
- package/dist/transform/transform.d.ts.map +0 -1
- package/dist/transform/transform.js +0 -1042
- package/dist/transform/types.d.ts +0 -124
- package/dist/transform/types.d.ts.map +0 -1
- package/dist/transform/types.js +0 -5
- package/dist/transform/worker-pool.d.ts +0 -76
- package/dist/transform/worker-pool.d.ts.map +0 -1
- package/dist/transform/worker-pool.js +0 -725
- /package/dist/lib/{http.d.ts → net/http.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../src/lib/error/codes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAEX,eAAO,MAAM,aAAa;;;;;;;;;CAShB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const SystemErrors = {
|
|
2
|
+
EBLOCKED: 'EBLOCKED',
|
|
3
|
+
ETIMEOUT: 'ETIMEOUT',
|
|
4
|
+
EINVAL: 'EINVAL',
|
|
5
|
+
ENODATA: 'ENODATA',
|
|
6
|
+
EBADREDIRECT: 'EBADREDIRECT',
|
|
7
|
+
EUNSUPPORTEDPROTOCOL: 'EUNSUPPORTEDPROTOCOL',
|
|
8
|
+
FETCH_ERROR: 'FETCH_ERROR',
|
|
9
|
+
ABORTED: 'ABORTED',
|
|
10
|
+
QUEUE_FULL: 'queue_full',
|
|
11
|
+
VALIDATION_ERROR: 'VALIDATION_ERROR',
|
|
12
|
+
};
|
|
13
|
+
export const ErrorCategory = {
|
|
14
|
+
UPSTREAM_TIMEOUT: 'upstream_timeout',
|
|
15
|
+
UPSTREAM_ABORTED: 'upstream_aborted',
|
|
16
|
+
UPSTREAM_RATE_LIMITED: 'upstream_rate_limited',
|
|
17
|
+
UPSTREAM_HTTP_ERROR: 'upstream_http_error',
|
|
18
|
+
QUEUE_FULL: 'queue_full',
|
|
19
|
+
FETCH_ERROR: 'fetch_error',
|
|
20
|
+
VALIDATION_ERROR: 'validation_error',
|
|
21
|
+
MCP_ERROR: 'mcp_error',
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/error/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CodedError } from './
|
|
1
|
+
import { CodedError } from './classes.js';
|
|
2
2
|
export declare function blockedIpError(target: string, reason: 'cloud-metadata' | 'private'): CodedError;
|
|
3
3
|
export declare function blockedHostError(hostname: string): CodedError;
|
|
4
4
|
export declare function blockedCnameError(hostname: string, cname: string): CodedError;
|
|
@@ -10,4 +10,4 @@ export declare function invalidUrlError(): CodedError;
|
|
|
10
10
|
export declare function invalidRedirectError(): CodedError;
|
|
11
11
|
export declare function redirectCredentialsError(): CodedError;
|
|
12
12
|
export declare function unsupportedProtocolError(protocol: string): CodedError;
|
|
13
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lib/error/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK1C,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,UAAU,CAUZ;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM7D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAM7E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM5D;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAM9D;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMtE;AAED,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED,wBAAgB,eAAe,IAAI,UAAU,CAG5C;AAID,wBAAgB,oBAAoB,IAAI,UAAU,CAMjD;AAED,wBAAgB,wBAAwB,IAAI,UAAU,CAMrD;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMrE"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { CodedError } from './classes.js';
|
|
2
|
+
import { SystemErrors } from './codes.js';
|
|
3
3
|
// ── DNS / Network ──────────────────────────────────────────────────
|
|
4
4
|
export function blockedIpError(target, reason) {
|
|
5
5
|
const detail = reason === 'cloud-metadata'
|
|
@@ -16,24 +16,18 @@ export interface ToolErrorPayload extends Record<string, unknown> {
|
|
|
16
16
|
details?: Record<string, unknown>;
|
|
17
17
|
data?: unknown;
|
|
18
18
|
}
|
|
19
|
-
export
|
|
19
|
+
export interface ToolErrorExtra {
|
|
20
20
|
category?: string;
|
|
21
21
|
code?: string | number;
|
|
22
22
|
statusCode?: number;
|
|
23
23
|
upstreamMessage?: string;
|
|
24
24
|
details?: Record<string, unknown>;
|
|
25
25
|
data?: unknown;
|
|
26
|
-
}
|
|
27
|
-
export declare function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
statusCode?: number;
|
|
31
|
-
upstreamMessage?: string;
|
|
32
|
-
details?: Record<string, unknown>;
|
|
33
|
-
data?: unknown;
|
|
34
|
-
}): ToolErrorPayload;
|
|
26
|
+
}
|
|
27
|
+
export declare function sanitizeToolErrorDetails(details: Readonly<Record<string, unknown>>): Record<string, unknown> | undefined;
|
|
28
|
+
export declare function createToolErrorResponse(message: string, url: string, extra?: ToolErrorExtra): ToolErrorResponse;
|
|
29
|
+
export declare function createToolErrorPayload(message: string, url: string, extra?: ToolErrorExtra): ToolErrorPayload;
|
|
35
30
|
export declare function tryReadToolErrorPayload(value: unknown): ToolErrorPayload | undefined;
|
|
36
31
|
export declare function tryReadToolErrorMessage(value: unknown): string | undefined;
|
|
37
|
-
export declare function
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=tool-errors.d.ts.map
|
|
32
|
+
export declare function stripMcpErrorPrefix(message: string): string;
|
|
33
|
+
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/lib/error/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAOzE,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmBD,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAqBrC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,cAAc,GACrB,iBAAiB,CAOnB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,cAAc,GACrB,gBAAgB,CAgBlB;AAiBD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,gBAAgB,GAAG,SAAS,CA2B9B;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE1E;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import {} from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { isObject } from '../utils.js';
|
|
4
|
+
import { SystemErrors } from './codes.js';
|
|
5
|
+
const toolErrorPayloadSchema = z.strictObject({
|
|
6
|
+
error: z.string(),
|
|
7
|
+
url: z.string(),
|
|
8
|
+
category: z.string().optional(),
|
|
9
|
+
code: z.union([z.string(), z.number()]).optional(),
|
|
10
|
+
statusCode: z.number().int().optional(),
|
|
11
|
+
upstreamMessage: z.string().optional(),
|
|
12
|
+
details: z.record(z.string(), z.unknown()).optional(),
|
|
13
|
+
data: z.unknown().optional(),
|
|
14
|
+
});
|
|
15
|
+
const PUBLIC_ERROR_REASONS = new Set([
|
|
16
|
+
'aborted',
|
|
17
|
+
SystemErrors.QUEUE_FULL,
|
|
18
|
+
'timeout',
|
|
19
|
+
]);
|
|
20
|
+
export function sanitizeToolErrorDetails(details) {
|
|
21
|
+
const sanitized = {};
|
|
22
|
+
const { retryAfter, timeout, reason } = details;
|
|
23
|
+
if (typeof retryAfter === 'number' ||
|
|
24
|
+
typeof retryAfter === 'string' ||
|
|
25
|
+
retryAfter === null) {
|
|
26
|
+
sanitized['retryAfter'] = retryAfter;
|
|
27
|
+
}
|
|
28
|
+
if (typeof timeout === 'number' && Number.isFinite(timeout) && timeout >= 0) {
|
|
29
|
+
sanitized['timeout'] = timeout;
|
|
30
|
+
}
|
|
31
|
+
if (typeof reason === 'string' && PUBLIC_ERROR_REASONS.has(reason)) {
|
|
32
|
+
sanitized['reason'] = reason;
|
|
33
|
+
}
|
|
34
|
+
return Object.keys(sanitized).length > 0 ? sanitized : undefined;
|
|
35
|
+
}
|
|
36
|
+
export function createToolErrorResponse(message, url, extra) {
|
|
37
|
+
const errorContent = createToolErrorPayload(message, url, extra);
|
|
38
|
+
return {
|
|
39
|
+
content: [{ type: 'text', text: JSON.stringify(errorContent) }],
|
|
40
|
+
isError: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function createToolErrorPayload(message, url, extra) {
|
|
44
|
+
const payload = {
|
|
45
|
+
error: message,
|
|
46
|
+
url,
|
|
47
|
+
};
|
|
48
|
+
if (extra?.category !== undefined)
|
|
49
|
+
payload.category = extra.category;
|
|
50
|
+
if (extra?.code !== undefined)
|
|
51
|
+
payload.code = extra.code;
|
|
52
|
+
if (extra?.statusCode !== undefined)
|
|
53
|
+
payload.statusCode = extra.statusCode;
|
|
54
|
+
if (extra?.upstreamMessage !== undefined) {
|
|
55
|
+
payload.upstreamMessage = extra.upstreamMessage;
|
|
56
|
+
}
|
|
57
|
+
if (extra?.details)
|
|
58
|
+
payload.details = extra.details;
|
|
59
|
+
if (extra?.data !== undefined)
|
|
60
|
+
payload.data = extra.data;
|
|
61
|
+
return payload;
|
|
62
|
+
}
|
|
63
|
+
function normalizeToolErrorPayload(value) {
|
|
64
|
+
return createToolErrorPayload(value.error, value.url, {
|
|
65
|
+
...(value.category !== undefined ? { category: value.category } : {}),
|
|
66
|
+
...(value.code !== undefined ? { code: value.code } : {}),
|
|
67
|
+
...(value.statusCode !== undefined ? { statusCode: value.statusCode } : {}),
|
|
68
|
+
...(value.upstreamMessage !== undefined
|
|
69
|
+
? { upstreamMessage: value.upstreamMessage }
|
|
70
|
+
: {}),
|
|
71
|
+
...(value.details ? { details: value.details } : {}),
|
|
72
|
+
...(value.data !== undefined ? { data: value.data } : {}),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export function tryReadToolErrorPayload(value) {
|
|
76
|
+
if (!isObject(value))
|
|
77
|
+
return undefined;
|
|
78
|
+
const structuredContent = toolErrorPayloadSchema.safeParse(value['structuredContent']);
|
|
79
|
+
if (structuredContent.success) {
|
|
80
|
+
return normalizeToolErrorPayload(structuredContent.data);
|
|
81
|
+
}
|
|
82
|
+
const { content } = value;
|
|
83
|
+
if (!Array.isArray(content) || content.length === 0)
|
|
84
|
+
return undefined;
|
|
85
|
+
const firstBlock = content[0];
|
|
86
|
+
if (!isObject(firstBlock))
|
|
87
|
+
return undefined;
|
|
88
|
+
if (firstBlock['type'] !== 'text')
|
|
89
|
+
return undefined;
|
|
90
|
+
if (typeof firstBlock['text'] !== 'string')
|
|
91
|
+
return undefined;
|
|
92
|
+
try {
|
|
93
|
+
const payload = toolErrorPayloadSchema.safeParse(JSON.parse(firstBlock['text']));
|
|
94
|
+
return payload.success
|
|
95
|
+
? normalizeToolErrorPayload(payload.data)
|
|
96
|
+
: undefined;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
export function tryReadToolErrorMessage(value) {
|
|
103
|
+
return tryReadToolErrorPayload(value)?.error;
|
|
104
|
+
}
|
|
105
|
+
const mcpErrorPrefixPattern = /^MCP error -?\d+:\s*/;
|
|
106
|
+
export function stripMcpErrorPrefix(message) {
|
|
107
|
+
return message.replace(mcpErrorPrefixPattern, '');
|
|
108
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mcp-interop.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
import { ListToolsRequestSchema, ListToolsResultSchema, McpError, } from '@modelcontextprotocol/sdk/types.js';
|
|
1
2
|
import { setTimeout as setTimeoutPromise } from 'node:timers/promises';
|
|
2
|
-
import { ListToolsRequestSchema, ListToolsResultSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
-
import { McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
4
3
|
import { z } from 'zod';
|
|
5
|
-
import { logError, logWarn } from './core.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { formatZodError } from './zod.js';
|
|
4
|
+
import { logError, Loggers, logWarn } from './core.js';
|
|
5
|
+
import { getErrorMessage } from './error/index.js';
|
|
6
|
+
import { formatZodError, isObject } from './utils.js';
|
|
9
7
|
export function createMcpError(code, message, data) {
|
|
10
8
|
const error = new McpError(code, message, data);
|
|
11
9
|
error.message = message;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../src/lib/net/http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAwBhD,OAAO,EAQL,KAAK,eAAe,EAErB,MAAM,UAAU,CAAC;AAywClB,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoKD,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AA6ND,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE/C;AACD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAEA;AACD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AACD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAE9D;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AACD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,qBAAqB,CAEvB;AACD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,QAAQ,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,IAAI,CAEN;AACD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CAEN;AACD,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC,CAE7D;AACD,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,QAAQ,EAClB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CASzC;AACD,wBAAsB,kBAAkB,CACtC,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AACD,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC;IACT,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAED"}
|
|
@@ -7,13 +7,10 @@ import {} from 'node:stream/web';
|
|
|
7
7
|
import tls from 'node:tls';
|
|
8
8
|
import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
|
|
9
9
|
import { Agent } from 'undici';
|
|
10
|
-
import { config, getOperationId, getRequestId, logDebug, logError, logWarn, redactUrl, } from '
|
|
11
|
-
import { SystemErrors } from '
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { isIP } from './url.js';
|
|
15
|
-
import { BLOCKED_HOST_SUFFIXES, createDnsPreflight, IpBlocker, RawUrlTransformer, SafeDnsResolver, UrlNormalizer, } from './url.js';
|
|
16
|
-
import { composeAbortSignal, FetchError, isAbortError, isError, isObject, isSystemError, toError, } from './utils.js';
|
|
10
|
+
import { config, getOperationId, getRequestId, logDebug, logError, Loggers, logWarn, redactUrl, } from '../core.js';
|
|
11
|
+
import { FetchError, invalidRedirectError, isAbortError, isError, isSystemError, redirectCredentialsError, SystemErrors, toError, unsupportedProtocolError, } from '../error/index.js';
|
|
12
|
+
import { composeAbortSignal, isObject } from '../utils.js';
|
|
13
|
+
import { BLOCKED_HOST_SUFFIXES, createDnsPreflight, IpBlocker, isIP, RawUrlTransformer, SafeDnsResolver, UrlNormalizer, } from './url.js';
|
|
17
14
|
// ═══════════════════════════════════════════════════════════════════
|
|
18
15
|
// ENCODING DETECTION
|
|
19
16
|
// ═══════════════════════════════════════════════════════════════════
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/net/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type MarkdownTransformResult } from '
|
|
2
|
-
import { withSignal } from '
|
|
1
|
+
import { type MarkdownTransformResult } from '../../transform/index.js';
|
|
2
|
+
import { withSignal } from '../utils.js';
|
|
3
3
|
export { withSignal };
|
|
4
4
|
export interface InlineContentResult {
|
|
5
5
|
content?: string;
|
|
@@ -46,4 +46,4 @@ export declare function performSharedFetch(options: MarkdownFetchOptions, deps?:
|
|
|
46
46
|
pipeline: PipelineResult<MarkdownPipelineResult>;
|
|
47
47
|
inlineResult: InlineContentResult;
|
|
48
48
|
}>;
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/lib/net/pipeline.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,uBAAuB,EAE7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC,OAAO,EAAE,UAAU,EAAE,CAAC;AAGtB,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,UAAU,mBAAmB;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmGD,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,MAAM,GAAG,SAAS,CAQpB;AAyBD,UAAU,oBAAoB,CAAC,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC5C,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACxE;AACD,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC;IACR,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,iBAAiB,GACjB,gBAAgB,GAChB,iBAAiB,CAAC;AAmBtB,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAC/B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAqD5B;AAED,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAwBF,eAAO,MAAM,iBAAiB,GAC5B,OAAO,mBAAmB,EAC1B,KAAK,MAAM,EACX,SAAS,WAAW,KACnB,OAAO,CAAC,sBAAsB,CAchC,CAAC;AAEF,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,MAAM,KAClB,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC/D;AACD,UAAU,eAAe;IACvB,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,oBAAoB,CAAC;CAC7D;AAMD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC,sBAAsB,CAAC,CAAC;IACjD,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC,CAyBD"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { transformBufferToMarkdown } from '
|
|
2
|
-
import {} from '../
|
|
3
|
-
import {
|
|
1
|
+
import { transformBufferToMarkdown, } from '../../transform/index.js';
|
|
2
|
+
import { config, logDebug, Loggers } from '../core.js';
|
|
3
|
+
import { withSignal } from '../utils.js';
|
|
4
4
|
import { fetchNormalizedUrlBuffer, normalizeUrl, transformToRawUrl, } from './http.js';
|
|
5
|
-
import { Loggers } from './logger-names.js';
|
|
6
|
-
import { withSignal } from './utils.js';
|
|
7
5
|
export { withSignal };
|
|
8
6
|
const TRUNCATION_MARKER = '...[truncated]';
|
|
9
7
|
function getOpenCodeFence(content) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/lib/net/url.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import dns from 'node:dns';
|
|
2
2
|
import { BlockList, isIP, SocketAddress } from 'node:net';
|
|
3
3
|
import { domainToASCII } from 'node:url';
|
|
4
|
-
import { config, logDebug } from '
|
|
5
|
-
import { SystemErrors } from '
|
|
6
|
-
import {
|
|
7
|
-
import { Loggers } from './logger-names.js';
|
|
8
|
-
import { CodedError, composeAbortSignal, isError, isSystemError, } from './utils.js';
|
|
4
|
+
import { config, logDebug, Loggers } from '../core.js';
|
|
5
|
+
import { blockedCnameError, blockedHostError, blockedIpError, CodedError, dnsNoResultsError, dnsTimeoutError, invalidAddressFamilyError, invalidHostnameError, invalidUrlError, isError, isSystemError, SystemErrors, } from '../error/index.js';
|
|
6
|
+
import { composeAbortSignal } from '../utils.js';
|
|
9
7
|
const DNS_LOOKUP_TIMEOUT_MS = 5000;
|
|
10
8
|
const CNAME_LOOKUP_MAX_DEPTH = 5;
|
|
11
9
|
async function withTimeout(promise, timeoutMs, onTimeout, signal, onAbort) {
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,24 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
export declare function composeAbortSignal(signal?: AbortSignal, timeoutMs?: number): AbortSignal | undefined;
|
|
2
3
|
export declare function parseUrlOrNull(input: string, base?: string): URL | null;
|
|
3
|
-
export declare function throwIfAborted(signal: AbortSignal | undefined, url: string, stage: string): void;
|
|
4
|
-
export declare function createAbortError(url: string, stage: string): FetchError;
|
|
5
4
|
export declare function timingSafeEqualUtf8(a: string, b: string): boolean;
|
|
6
5
|
export declare function hmacSha256Hex(key: string | Uint8Array, input: string | Uint8Array): string;
|
|
7
|
-
export declare class FetchError extends Error {
|
|
8
|
-
readonly url: string;
|
|
9
|
-
readonly statusCode: number;
|
|
10
|
-
readonly code: string;
|
|
11
|
-
readonly details: Readonly<Record<string, unknown>>;
|
|
12
|
-
constructor(message: string, url: string, httpStatus?: number, details?: Record<string, unknown>, options?: ErrorOptions);
|
|
13
|
-
}
|
|
14
|
-
export declare function getErrorMessage(error: unknown): string;
|
|
15
|
-
export declare function toError(error: unknown): Error;
|
|
16
|
-
export declare function isAbortError(error: unknown): boolean;
|
|
17
|
-
export declare class CodedError extends Error {
|
|
18
|
-
readonly code: string;
|
|
19
|
-
constructor(message: string, code: string, options?: ErrorOptions);
|
|
20
|
-
}
|
|
21
|
-
export declare function isSystemError(error: unknown): error is NodeJS.ErrnoException;
|
|
22
6
|
interface TunableHttpServer {
|
|
23
7
|
headersTimeout?: number;
|
|
24
8
|
requestTimeout?: number;
|
|
@@ -46,7 +30,6 @@ export declare function createUnrefTimeout<T>(timeoutMs: number, value: T): Canc
|
|
|
46
30
|
export declare function startAbortableIntervalLoop<T>(intervalMs: number, value: T, options: IntervalLoopOptions<T>): void;
|
|
47
31
|
export declare function isObject(value: unknown): value is Record<PropertyKey, unknown>;
|
|
48
32
|
export declare function compactContext<T extends object>(obj: T): Partial<T>;
|
|
49
|
-
export declare function isError(value: unknown): value is Error;
|
|
50
33
|
interface HtmlNode {
|
|
51
34
|
readonly tagName?: string | undefined;
|
|
52
35
|
readonly nodeName?: string | undefined;
|
|
@@ -97,5 +80,6 @@ export interface IconInfo {
|
|
|
97
80
|
export declare function buildOptionalIcons(iconInfo?: IconInfo): {
|
|
98
81
|
icons: IconInfo[];
|
|
99
82
|
} | Record<string, never>;
|
|
83
|
+
export declare function formatZodError(error: z.ZodError): string;
|
|
100
84
|
export {};
|
|
101
85
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
2
|
import { createHmac, timingSafeEqual } from 'node:crypto';
|
|
3
3
|
import { setInterval as setIntervalPromise, setTimeout as setTimeoutPromise, } from 'node:timers/promises';
|
|
4
|
-
import {
|
|
5
|
-
import { config, logDebug, logWarn } from './core.js';
|
|
6
|
-
import {
|
|
7
|
-
import { Loggers } from './logger-names.js';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { config, logDebug, Loggers, logWarn } from './core.js';
|
|
6
|
+
import { isAbortError } from './error/index.js';
|
|
8
7
|
const textEncoder = new TextEncoder();
|
|
9
|
-
const UNKNOWN_ERROR_MESSAGE = 'Unknown error';
|
|
10
8
|
export function composeAbortSignal(signal, timeoutMs) {
|
|
11
9
|
const timeoutSignal = timeoutMs && timeoutMs > 0 ? AbortSignal.timeout(timeoutMs) : undefined;
|
|
12
10
|
if (signal && timeoutSignal) {
|
|
@@ -17,25 +15,6 @@ export function composeAbortSignal(signal, timeoutMs) {
|
|
|
17
15
|
export function parseUrlOrNull(input, base) {
|
|
18
16
|
return URL.parse(input, base);
|
|
19
17
|
}
|
|
20
|
-
export function throwIfAborted(signal, url, stage) {
|
|
21
|
-
if (!signal?.aborted)
|
|
22
|
-
return;
|
|
23
|
-
if (signal.reason instanceof Error && signal.reason.name === 'TimeoutError') {
|
|
24
|
-
const error = new FetchError('Request timeout', url, 504, {
|
|
25
|
-
reason: 'timeout',
|
|
26
|
-
stage,
|
|
27
|
-
});
|
|
28
|
-
throw error;
|
|
29
|
-
}
|
|
30
|
-
throw createAbortError(url, stage);
|
|
31
|
-
}
|
|
32
|
-
export function createAbortError(url, stage) {
|
|
33
|
-
const error = new FetchError('Request was canceled', url, 499, {
|
|
34
|
-
reason: 'aborted',
|
|
35
|
-
stage,
|
|
36
|
-
});
|
|
37
|
-
return error;
|
|
38
|
-
}
|
|
39
18
|
export function timingSafeEqualUtf8(a, b) {
|
|
40
19
|
const aBuf = textEncoder.encode(a);
|
|
41
20
|
const bBuf = textEncoder.encode(b);
|
|
@@ -46,77 +25,6 @@ export function timingSafeEqualUtf8(a, b) {
|
|
|
46
25
|
export function hmacSha256Hex(key, input) {
|
|
47
26
|
return createHmac('sha256', key).update(input).digest('hex');
|
|
48
27
|
}
|
|
49
|
-
const DEFAULT_HTTP_STATUS = 502;
|
|
50
|
-
export class FetchError extends Error {
|
|
51
|
-
url;
|
|
52
|
-
statusCode;
|
|
53
|
-
code;
|
|
54
|
-
details;
|
|
55
|
-
constructor(message, url, httpStatus, details = {}, options) {
|
|
56
|
-
super(message, options);
|
|
57
|
-
this.url = url;
|
|
58
|
-
this.name = 'FetchError';
|
|
59
|
-
this.statusCode = httpStatus ?? DEFAULT_HTTP_STATUS;
|
|
60
|
-
this.details = Object.freeze({ url, httpStatus, ...details });
|
|
61
|
-
const explicitCode = this.details['code'];
|
|
62
|
-
if (typeof explicitCode === 'string') {
|
|
63
|
-
this.code = explicitCode;
|
|
64
|
-
}
|
|
65
|
-
else if (httpStatus) {
|
|
66
|
-
this.code = `HTTP_${httpStatus}`;
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
this.code = SystemErrors.FETCH_ERROR;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export function getErrorMessage(error) {
|
|
74
|
-
if (isError(error))
|
|
75
|
-
return error.message;
|
|
76
|
-
if (typeof error === 'string' && error.length > 0)
|
|
77
|
-
return error;
|
|
78
|
-
if (isObject(error) &&
|
|
79
|
-
typeof error['message'] === 'string' &&
|
|
80
|
-
error['message'].length > 0) {
|
|
81
|
-
return error['message'];
|
|
82
|
-
}
|
|
83
|
-
if (error === null || error === undefined)
|
|
84
|
-
return UNKNOWN_ERROR_MESSAGE;
|
|
85
|
-
try {
|
|
86
|
-
return inspect(error, {
|
|
87
|
-
depth: 2,
|
|
88
|
-
maxStringLength: 200,
|
|
89
|
-
breakLength: Infinity,
|
|
90
|
-
compact: true,
|
|
91
|
-
colors: false,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
catch {
|
|
95
|
-
return UNKNOWN_ERROR_MESSAGE;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export function toError(error) {
|
|
99
|
-
return isError(error) ? error : new Error(getErrorMessage(error));
|
|
100
|
-
}
|
|
101
|
-
export function isAbortError(error) {
|
|
102
|
-
return isError(error) && error.name === 'AbortError';
|
|
103
|
-
}
|
|
104
|
-
export class CodedError extends Error {
|
|
105
|
-
code;
|
|
106
|
-
constructor(message, code, options) {
|
|
107
|
-
super(message, options);
|
|
108
|
-
this.code = code;
|
|
109
|
-
this.name = 'CodedError';
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
export function isSystemError(error) {
|
|
113
|
-
if (!isError(error))
|
|
114
|
-
return false;
|
|
115
|
-
if (!('code' in error))
|
|
116
|
-
return false;
|
|
117
|
-
const { code } = error;
|
|
118
|
-
return typeof code === 'string';
|
|
119
|
-
}
|
|
120
28
|
const DROP_LOG_INTERVAL_MS = 10_000;
|
|
121
29
|
export function applyHttpServerTuning(server) {
|
|
122
30
|
const { headersTimeoutMs, requestTimeoutMs, keepAliveTimeoutMs, keepAliveTimeoutBufferMs, maxHeadersCount, maxConnections, } = config.server.http;
|
|
@@ -207,15 +115,6 @@ export function isObject(value) {
|
|
|
207
115
|
export function compactContext(obj) {
|
|
208
116
|
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
|
|
209
117
|
}
|
|
210
|
-
export function isError(value) {
|
|
211
|
-
const maybeIsError = Error.isError;
|
|
212
|
-
if (typeof maybeIsError === 'function') {
|
|
213
|
-
const result = maybeIsError(value);
|
|
214
|
-
if (typeof result === 'boolean')
|
|
215
|
-
return result;
|
|
216
|
-
}
|
|
217
|
-
return value instanceof Error;
|
|
218
|
-
}
|
|
219
118
|
export function isHtmlNode(value) {
|
|
220
119
|
return (isObject(value) &&
|
|
221
120
|
('nodeType' in value || 'nodeName' in value || 'tagName' in value));
|
|
@@ -340,3 +239,29 @@ export function buildOptionalIcons(iconInfo) {
|
|
|
340
239
|
],
|
|
341
240
|
};
|
|
342
241
|
}
|
|
242
|
+
function formatPathSegment(segment) {
|
|
243
|
+
if (typeof segment === 'number')
|
|
244
|
+
return `[${segment}]`;
|
|
245
|
+
if (typeof segment === 'string')
|
|
246
|
+
return segment;
|
|
247
|
+
return segment.description ?? '<symbol>';
|
|
248
|
+
}
|
|
249
|
+
function formatIssuePath(path) {
|
|
250
|
+
return path.reduce((acc, segment) => {
|
|
251
|
+
const isNum = typeof segment === 'number';
|
|
252
|
+
const formatted = formatPathSegment(segment);
|
|
253
|
+
return acc ? `${acc}${isNum ? '' : '.'}${formatted}` : formatted;
|
|
254
|
+
}, '');
|
|
255
|
+
}
|
|
256
|
+
export function formatZodError(error) {
|
|
257
|
+
const parts = error.issues.map((issue) => {
|
|
258
|
+
const path = formatIssuePath(issue.path);
|
|
259
|
+
return path ? `${path}: ${issue.message}` : issue.message;
|
|
260
|
+
});
|
|
261
|
+
const uniqueParts = [
|
|
262
|
+
...new Set(parts.filter((val) => val.trim().length > 0)),
|
|
263
|
+
];
|
|
264
|
+
if (uniqueParts.length > 0)
|
|
265
|
+
return uniqueParts.join('; ');
|
|
266
|
+
return z.prettifyError(error).replace(/\s+/g, ' ').trim() || 'Invalid input';
|
|
267
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIpE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI,CAwBN;AAED,eAAO,MAAM,WAAW,iEAKd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,SAAS,GACf,MAAM,GAAG,SAAS,CAIpB;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAKR;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAmChD;AAiBD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI,CA2BN"}
|
package/dist/resources/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { config } from '../lib/core.js';
|
|
4
4
|
import { buildOptionalIcons } from '../lib/utils.js';
|
|
5
|
-
import { FETCH_URL_TOOL_NAME } from '../tools/
|
|
5
|
+
import { FETCH_URL_TOOL_NAME } from '../tools/index.js';
|
|
6
6
|
export function registerInstructionResource(server, instructions, iconInfo) {
|
|
7
7
|
server.registerResource('fetch-url-mcp-instructions', 'internal://instructions', {
|
|
8
8
|
title: 'Server Instructions',
|
|
@@ -68,10 +68,13 @@ export function buildServerInstructions() {
|
|
|
68
68
|
- Notifications: opt-in. Set \`TASKS_STATUS_NOTIFICATIONS=true\`.
|
|
69
69
|
|
|
70
70
|
# Errors
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
71
|
+
- VALIDATION_ERROR: invalid/blocked URL. Do not retry.
|
|
72
|
+
- FETCH_ERROR: network failure. Retry once with backoff.
|
|
73
|
+
- UPSTREAM_HTTP_ERROR: upstream HTTP error. Retry only for 5xx.
|
|
74
|
+
- UPSTREAM_RATE_LIMITED: upstream returned 429. Back off and retry.
|
|
75
|
+
- UPSTREAM_TIMEOUT: upstream request timed out. Retry with backoff.
|
|
76
|
+
- UPSTREAM_ABORTED: request was cancelled. Retry if needed.
|
|
77
|
+
- MCP_ERROR: internal protocol error. Do not retry.
|
|
75
78
|
- queue_full: worker pool busy. Wait and retry, or use task mode.`;
|
|
76
79
|
}
|
|
77
80
|
function buildTopicSchema() {
|
package/dist/schemas.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import type { ExtractedMetadata } from './transform/
|
|
2
|
+
import type { ExtractedMetadata } from './transform/index.js';
|
|
3
3
|
export declare const extractedMetadataSchema: z.ZodType<ExtractedMetadata>;
|
|
4
4
|
export declare function normalizeExtractedMetadata(value: unknown): ExtractedMetadata | undefined;
|
|
5
5
|
export declare function normalizePageTitle(value: unknown): string | undefined;
|