@cyanheads/mcp-ts-core 0.11.1 → 0.11.3
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/AGENTS.md +14 -10
- package/CLAUDE.md +14 -10
- package/README.md +3 -3
- package/biome.json +1 -1
- package/changelog/0.11.x/0.11.2.md +98 -0
- package/changelog/0.11.x/0.11.3.md +49 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -13
- package/dist/config/index.js.map +1 -1
- package/dist/config/logLevelAlias.d.ts +15 -0
- package/dist/config/logLevelAlias.d.ts.map +1 -0
- package/dist/config/logLevelAlias.js +30 -0
- package/dist/config/logLevelAlias.js.map +1 -0
- package/dist/core/app.d.ts +37 -14
- package/dist/core/app.d.ts.map +1 -1
- package/dist/core/app.js +56 -23
- package/dist/core/app.js.map +1 -1
- package/dist/core/context.d.ts +10 -0
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +10 -1
- package/dist/core/context.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/worker.d.ts.map +1 -1
- package/dist/core/worker.js +35 -18
- package/dist/core/worker.js.map +1 -1
- package/dist/logs/combined.log +16 -8
- package/dist/logs/error.log +12 -4
- package/dist/mcp-server/elicitation.d.ts +64 -0
- package/dist/mcp-server/elicitation.d.ts.map +1 -0
- package/dist/mcp-server/elicitation.js +81 -0
- package/dist/mcp-server/elicitation.js.map +1 -0
- package/dist/mcp-server/protocolSession.d.ts +34 -0
- package/dist/mcp-server/protocolSession.d.ts.map +1 -0
- package/dist/mcp-server/protocolSession.js +13 -0
- package/dist/mcp-server/protocolSession.js.map +1 -0
- package/dist/mcp-server/resources/resource-registration.d.ts +2 -1
- package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
- package/dist/mcp-server/resources/resource-registration.js +6 -2
- package/dist/mcp-server/resources/resource-registration.js.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +7 -12
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +24 -31
- package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
- package/dist/mcp-server/server.d.ts +3 -0
- package/dist/mcp-server/server.d.ts.map +1 -1
- package/dist/mcp-server/server.js +12 -2
- package/dist/mcp-server/server.js.map +1 -1
- package/dist/mcp-server/tools/tool-registration.d.ts +2 -1
- package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-registration.js +6 -2
- package/dist/mcp-server/tools/tool-registration.js.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +7 -13
- package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js +11 -44
- package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.js +1 -1
- package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
- package/dist/mcp-server/transports/http/httpServer.d.ts +2 -2
- package/dist/mcp-server/transports/http/httpServer.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpServer.js.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.d.ts +2 -2
- package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/httpTransport.js +113 -55
- package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
- package/dist/mcp-server/transports/http/sessionStore.d.ts +17 -0
- package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -1
- package/dist/mcp-server/transports/http/sessionStore.js +71 -0
- package/dist/mcp-server/transports/http/sessionStore.js.map +1 -1
- package/dist/mcp-server/transports/manager.d.ts +2 -6
- package/dist/mcp-server/transports/manager.d.ts.map +1 -1
- package/dist/mcp-server/transports/manager.js +4 -0
- package/dist/mcp-server/transports/manager.js.map +1 -1
- package/dist/services/canvas/core/CanvasRegistry.d.ts +2 -2
- package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
- package/dist/services/canvas/core/CanvasRegistry.js +14 -3
- package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
- package/dist/services/canvas/core/DataCanvas.d.ts +1 -1
- package/dist/services/canvas/core/DataCanvas.d.ts.map +1 -1
- package/dist/services/canvas/core/DataCanvas.js +2 -2
- package/dist/services/canvas/core/DataCanvas.js.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +11 -3
- package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
- package/dist/services/canvas/providers/duckdb/exportWriter.d.ts.map +1 -1
- package/dist/services/canvas/providers/duckdb/exportWriter.js +23 -2
- package/dist/services/canvas/providers/duckdb/exportWriter.js.map +1 -1
- package/dist/services/mirror/core/defineMirror.d.ts.map +1 -1
- package/dist/services/mirror/core/defineMirror.js +18 -7
- package/dist/services/mirror/core/defineMirror.js.map +1 -1
- package/dist/services/mirror/core/runner.d.ts.map +1 -1
- package/dist/services/mirror/core/runner.js +3 -0
- package/dist/services/mirror/core/runner.js.map +1 -1
- package/dist/services/mirror/index.d.ts +1 -1
- package/dist/services/mirror/index.d.ts.map +1 -1
- package/dist/services/mirror/index.js.map +1 -1
- package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts +20 -0
- package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts.map +1 -1
- package/dist/services/mirror/sqlite/sqliteMirrorStore.js +92 -8
- package/dist/services/mirror/sqlite/sqliteMirrorStore.js.map +1 -1
- package/dist/storage/core/StorageService.d.ts.map +1 -1
- package/dist/storage/core/StorageService.js +4 -1
- package/dist/storage/core/StorageService.js.map +1 -1
- package/dist/storage/core/storageValidation.d.ts +8 -0
- package/dist/storage/core/storageValidation.d.ts.map +1 -1
- package/dist/storage/core/storageValidation.js +22 -0
- package/dist/storage/core/storageValidation.js.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
- package/dist/storage/providers/inMemory/inMemoryProvider.js +67 -25
- package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
- package/dist/testing/fuzz.d.ts.map +1 -1
- package/dist/testing/fuzz.js +33 -14
- package/dist/testing/fuzz.js.map +1 -1
- package/dist/testing/index.d.ts +45 -13
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +29 -76
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/vitest.d.ts +12 -3
- package/dist/testing/vitest.d.ts.map +1 -1
- package/dist/testing/vitest.js +3 -0
- package/dist/testing/vitest.js.map +1 -1
- package/dist/utils/formatting/diffFormatter.d.ts +5 -5
- package/dist/utils/formatting/diffFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/diffFormatter.js +1 -1
- package/dist/utils/formatting/diffFormatter.js.map +1 -1
- package/dist/utils/formatting/tableFormatter.d.ts +3 -3
- package/dist/utils/formatting/tableFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/tableFormatter.js +1 -1
- package/dist/utils/formatting/tableFormatter.js.map +1 -1
- package/dist/utils/formatting/treeFormatter.d.ts +3 -3
- package/dist/utils/formatting/treeFormatter.d.ts.map +1 -1
- package/dist/utils/formatting/treeFormatter.js +1 -1
- package/dist/utils/formatting/treeFormatter.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/metrics/tokenCounter.d.ts +3 -3
- package/dist/utils/metrics/tokenCounter.d.ts.map +1 -1
- package/dist/utils/metrics/tokenCounter.js.map +1 -1
- package/dist/utils/network/fetchWithTimeout.d.ts +50 -21
- package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
- package/dist/utils/network/fetchWithTimeout.js +299 -90
- package/dist/utils/network/fetchWithTimeout.js.map +1 -1
- package/dist/utils/network/httpError.d.ts.map +1 -1
- package/dist/utils/network/httpError.js +2 -2
- package/dist/utils/network/httpError.js.map +1 -1
- package/dist/utils/network/responseBody.d.ts +35 -0
- package/dist/utils/network/responseBody.d.ts.map +1 -0
- package/dist/utils/network/responseBody.js +104 -0
- package/dist/utils/network/responseBody.js.map +1 -0
- package/dist/utils/network/retry.d.ts +2 -2
- package/dist/utils/network/retry.d.ts.map +1 -1
- package/dist/utils/pagination/pagination.d.ts +3 -3
- package/dist/utils/pagination/pagination.d.ts.map +1 -1
- package/dist/utils/pagination/pagination.js.map +1 -1
- package/dist/utils/parsing/csvParser.d.ts +2 -2
- package/dist/utils/parsing/csvParser.d.ts.map +1 -1
- package/dist/utils/parsing/csvParser.js +1 -1
- package/dist/utils/parsing/csvParser.js.map +1 -1
- package/dist/utils/parsing/dateParser.d.ts +11 -7
- package/dist/utils/parsing/dateParser.d.ts.map +1 -1
- package/dist/utils/parsing/dateParser.js +8 -4
- package/dist/utils/parsing/dateParser.js.map +1 -1
- package/dist/utils/parsing/frontmatterParser.d.ts +6 -3
- package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -1
- package/dist/utils/parsing/frontmatterParser.js +9 -9
- package/dist/utils/parsing/frontmatterParser.js.map +1 -1
- package/dist/utils/parsing/htmlExtractor.d.ts +8 -3
- package/dist/utils/parsing/htmlExtractor.d.ts.map +1 -1
- package/dist/utils/parsing/htmlExtractor.js +7 -7
- package/dist/utils/parsing/htmlExtractor.js.map +1 -1
- package/dist/utils/parsing/index.d.ts +1 -0
- package/dist/utils/parsing/index.d.ts.map +1 -1
- package/dist/utils/parsing/index.js +1 -0
- package/dist/utils/parsing/index.js.map +1 -1
- package/dist/utils/parsing/inputBudget.d.ts +35 -0
- package/dist/utils/parsing/inputBudget.d.ts.map +1 -0
- package/dist/utils/parsing/inputBudget.js +79 -0
- package/dist/utils/parsing/inputBudget.js.map +1 -0
- package/dist/utils/parsing/jsonParser.d.ts +6 -3
- package/dist/utils/parsing/jsonParser.d.ts.map +1 -1
- package/dist/utils/parsing/jsonParser.js +8 -8
- package/dist/utils/parsing/jsonParser.js.map +1 -1
- package/dist/utils/parsing/pdfParser.d.ts +41 -19
- package/dist/utils/parsing/pdfParser.d.ts.map +1 -1
- package/dist/utils/parsing/pdfParser.js +86 -60
- package/dist/utils/parsing/pdfParser.js.map +1 -1
- package/dist/utils/parsing/xmlParser.d.ts +4 -2
- package/dist/utils/parsing/xmlParser.d.ts.map +1 -1
- package/dist/utils/parsing/xmlParser.js +6 -7
- package/dist/utils/parsing/xmlParser.js.map +1 -1
- package/dist/utils/parsing/yamlParser.d.ts +4 -2
- package/dist/utils/parsing/yamlParser.d.ts.map +1 -1
- package/dist/utils/parsing/yamlParser.js +6 -7
- package/dist/utils/parsing/yamlParser.js.map +1 -1
- package/dist/utils/security/rateLimiter.d.ts +2 -2
- package/dist/utils/security/rateLimiter.d.ts.map +1 -1
- package/dist/utils/security/rateLimiter.js +1 -1
- package/dist/utils/security/rateLimiter.js.map +1 -1
- package/dist/utils/telemetry/trace.d.ts +3 -3
- package/dist/utils/telemetry/trace.d.ts.map +1 -1
- package/dist/utils/telemetry/trace.js.map +1 -1
- package/package.json +17 -15
- package/skills/add-test/SKILL.md +2 -2
- package/skills/api-auth/SKILL.md +5 -5
- package/skills/api-context/SKILL.md +13 -12
- package/skills/api-testing/SKILL.md +29 -10
- package/skills/api-utils/SKILL.md +4 -2
- package/skills/api-utils/references/parsing.md +3 -2
- package/skills/git-wrapup/SKILL.md +22 -1
- package/templates/AGENTS.md +1 -1
- package/templates/CLAUDE.md +1 -1
|
@@ -7,9 +7,33 @@ import { JsonRpcErrorCode, McpError, serviceUnavailable, timeout, validationErro
|
|
|
7
7
|
import { logger } from '../../utils/internal/logger.js';
|
|
8
8
|
import { runtimeCaps } from '../../utils/internal/runtime.js';
|
|
9
9
|
import { httpStatusToErrorCode } from '../../utils/network/httpError.js';
|
|
10
|
+
import { readBoundedResponseText } from '../../utils/network/responseBody.js';
|
|
10
11
|
import { createHistogram } from '../../utils/telemetry/metrics.js';
|
|
11
|
-
/**
|
|
12
|
+
/** Default captured bytes of an upstream error response body. Keeps tool errors from poisoning the agent's context. */
|
|
12
13
|
const ERROR_BODY_LIMIT = 500;
|
|
14
|
+
/**
|
|
15
|
+
* Bytes of an error body the capture may *read* to locate its end. Well above
|
|
16
|
+
* {@link ERROR_BODY_LIMIT} so a document that wraps its diagnostic in a preamble
|
|
17
|
+
* is seen whole and captured head + tail; anything still streaming at this
|
|
18
|
+
* ceiling falls back to a head-only capture.
|
|
19
|
+
*/
|
|
20
|
+
const ERROR_BODY_SCAN_LIMIT = 16_384;
|
|
21
|
+
/**
|
|
22
|
+
* Statuses the Fetch spec defines as carrying a null body. Runtimes disagree on
|
|
23
|
+
* what `fetch` hands back for them — Node yields `body: null`, Bun yields an
|
|
24
|
+
* empty stream — and `new Response(stream, { status })` throws on Node for
|
|
25
|
+
* exactly this set, so these responses are returned untouched.
|
|
26
|
+
*/
|
|
27
|
+
const NULL_BODY_STATUS = new Set([204, 205, 304]);
|
|
28
|
+
/**
|
|
29
|
+
* Reads the optional `operation` label off a context argument. It is an ad-hoc
|
|
30
|
+
* field of the `RequestContext` bag, absent from both `RequestContextLike` and
|
|
31
|
+
* the handler-facing `Context`.
|
|
32
|
+
*/
|
|
33
|
+
function contextOperation(context) {
|
|
34
|
+
const operation = context.operation;
|
|
35
|
+
return typeof operation === 'string' ? operation : undefined;
|
|
36
|
+
}
|
|
13
37
|
let clientDurationHistogram;
|
|
14
38
|
function getHttpClientMetrics() {
|
|
15
39
|
clientDurationHistogram ??= createHistogram('http.client.request.duration', 'Duration of outbound HTTP requests', 's');
|
|
@@ -45,28 +69,108 @@ function redactUrl(url) {
|
|
|
45
69
|
}
|
|
46
70
|
}
|
|
47
71
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
72
|
+
* Parse a dotted-decimal IPv4 address. URL parsing canonicalizes unusual IPv4
|
|
73
|
+
* spellings (integer, octal, hexadecimal) before this point; DNS answers are
|
|
74
|
+
* already dotted decimal.
|
|
51
75
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
76
|
+
function parseIpv4(ip) {
|
|
77
|
+
const parts = ip.split('.');
|
|
78
|
+
if (parts.length !== 4)
|
|
79
|
+
return;
|
|
80
|
+
const octets = parts.map((part) => (/^\d{1,3}$/.test(part) ? Number(part) : Number.NaN));
|
|
81
|
+
if (octets.some((octet) => !Number.isInteger(octet) || octet < 0 || octet > 255))
|
|
82
|
+
return;
|
|
83
|
+
return octets;
|
|
84
|
+
}
|
|
61
85
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
86
|
+
* IPv4 destinations that are not globally routable unicast. Includes private,
|
|
87
|
+
* shared, loopback, link-local, protocol-assignment, documentation,
|
|
88
|
+
* benchmarking, multicast, reserved, and limited-broadcast space.
|
|
65
89
|
*/
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
90
|
+
function isNonGlobalIpv4(ip) {
|
|
91
|
+
const octets = parseIpv4(ip);
|
|
92
|
+
if (!octets)
|
|
93
|
+
return false;
|
|
94
|
+
const [a, b, c, d] = octets;
|
|
95
|
+
if (a === 0 || a === 10 || a === 127)
|
|
96
|
+
return true;
|
|
97
|
+
if (a === 100 && b >= 64 && b <= 127)
|
|
98
|
+
return true; // RFC 6598 shared/CGNAT
|
|
99
|
+
if (a === 169 && b === 254)
|
|
100
|
+
return true; // Link-local / cloud metadata
|
|
101
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
102
|
+
return true;
|
|
103
|
+
if (a === 192 && b === 168)
|
|
104
|
+
return true;
|
|
105
|
+
if (a === 192 && b === 0 && c === 0)
|
|
106
|
+
return d !== 9 && d !== 10;
|
|
107
|
+
if (a === 192 && b === 0 && c === 2)
|
|
108
|
+
return true; // TEST-NET-1
|
|
109
|
+
if (a === 192 && b === 88 && c === 99)
|
|
110
|
+
return d !== 2; // Deprecated 6to4 relay
|
|
111
|
+
if (a === 198 && (b === 18 || b === 19))
|
|
112
|
+
return true; // Benchmarking
|
|
113
|
+
if (a === 198 && b === 51 && c === 100)
|
|
114
|
+
return true; // TEST-NET-2
|
|
115
|
+
if (a === 203 && b === 0 && c === 113)
|
|
116
|
+
return true; // TEST-NET-3
|
|
117
|
+
return a >= 224; // Multicast (224/4), reserved (240/4), limited broadcast
|
|
118
|
+
}
|
|
119
|
+
/** Convert a conventional or compressed IPv6 address to a 128-bit integer. */
|
|
120
|
+
function ipv6ToBigInt(ip) {
|
|
121
|
+
let lower = ip.toLowerCase();
|
|
122
|
+
if (!lower.includes(':') || lower.includes('%'))
|
|
123
|
+
return;
|
|
124
|
+
// DNS APIs may retain dotted-decimal notation in an IPv4-embedded address,
|
|
125
|
+
// while URL parsing canonicalizes it to two hexadecimal segments.
|
|
126
|
+
if (lower.includes('.')) {
|
|
127
|
+
const finalColon = lower.lastIndexOf(':');
|
|
128
|
+
const embedded = parseIpv4(lower.slice(finalColon + 1));
|
|
129
|
+
if (!embedded)
|
|
130
|
+
return;
|
|
131
|
+
const [a, b, c, d] = embedded;
|
|
132
|
+
lower = `${lower.slice(0, finalColon + 1)}${((a << 8) | b).toString(16)}:${((c << 8) | d).toString(16)}`;
|
|
133
|
+
}
|
|
134
|
+
const halves = lower.split('::');
|
|
135
|
+
if (halves.length > 2)
|
|
136
|
+
return;
|
|
137
|
+
const head = halves[0] ? halves[0].split(':') : [];
|
|
138
|
+
const tail = halves[1] ? halves[1].split(':') : [];
|
|
139
|
+
const missing = 8 - head.length - tail.length;
|
|
140
|
+
if ((halves.length === 1 && missing !== 0) || (halves.length === 2 && missing < 1))
|
|
141
|
+
return;
|
|
142
|
+
const segments = [...head, ...Array.from({ length: missing }, () => '0'), ...tail];
|
|
143
|
+
if (segments.length !== 8 || segments.some((part) => !/^[0-9a-f]{1,4}$/.test(part)))
|
|
144
|
+
return;
|
|
145
|
+
return segments.reduce((value, part) => (value << 16n) | BigInt(`0x${part}`), 0n);
|
|
146
|
+
}
|
|
147
|
+
function isInIpv6Cidr(value, network, prefixLength) {
|
|
148
|
+
const networkValue = ipv6ToBigInt(network);
|
|
149
|
+
if (networkValue === undefined)
|
|
150
|
+
return false;
|
|
151
|
+
const shift = 128n - BigInt(prefixLength);
|
|
152
|
+
return value >> shift === networkValue >> shift;
|
|
153
|
+
}
|
|
154
|
+
/** Non-global/reserved ranges within the otherwise globally routed 2000::/3 block. */
|
|
155
|
+
const NON_GLOBAL_IPV6_CIDRS = [
|
|
156
|
+
['2001::', 32], // Teredo transition space
|
|
157
|
+
['2001:2::', 48], // Benchmarking
|
|
158
|
+
['2001:10::', 28], // ORCHID
|
|
159
|
+
['2001:20::', 28], // ORCHIDv2
|
|
160
|
+
['2001:db8::', 32], // Documentation
|
|
161
|
+
['2002::', 16], // Deprecated 6to4 transition space
|
|
162
|
+
['3fff::', 20], // Documentation
|
|
69
163
|
];
|
|
164
|
+
function isNonGlobalIpv6(ip) {
|
|
165
|
+
const value = ipv6ToBigInt(ip);
|
|
166
|
+
if (value === undefined)
|
|
167
|
+
return false;
|
|
168
|
+
// Current globally routable IPv6 unicast allocation. This rejects unspecified,
|
|
169
|
+
// loopback, IPv4-compatible, discard-only, ULA, site/link-local, and multicast.
|
|
170
|
+
if (!isInIpv6Cidr(value, '2000::', 3))
|
|
171
|
+
return true;
|
|
172
|
+
return NON_GLOBAL_IPV6_CIDRS.some(([network, prefix]) => isInIpv6Cidr(value, network, prefix));
|
|
173
|
+
}
|
|
70
174
|
const PRIVATE_HOSTNAMES = new Set(['localhost', 'metadata.google.internal', 'metadata.internal']);
|
|
71
175
|
/** Maximum number of redirects to follow when rejectPrivateIPs is enabled. */
|
|
72
176
|
const MAX_SSRF_REDIRECTS = 5;
|
|
@@ -90,29 +194,42 @@ function extractMappedIpv4(lower) {
|
|
|
90
194
|
return;
|
|
91
195
|
}
|
|
92
196
|
/**
|
|
93
|
-
* Checks whether an IP address (v4 or v6, including IPv4-mapped IPv6)
|
|
94
|
-
*
|
|
197
|
+
* Checks whether an IP address (v4 or v6, including IPv4-mapped IPv6) is not a
|
|
198
|
+
* globally routable unicast destination.
|
|
95
199
|
*
|
|
96
|
-
* IPv4-mapped IPv6 addresses are unwrapped and run through the IPv4
|
|
97
|
-
*
|
|
98
|
-
*
|
|
200
|
+
* IPv4-mapped IPv6 addresses are unwrapped and run through the IPv4 check, so
|
|
201
|
+
* the full RFC 1918 / CGNAT / link-local space is covered automatically without
|
|
202
|
+
* duplicating the ranges.
|
|
99
203
|
*
|
|
100
204
|
* @param ip - The IP address string to check (bare, no brackets).
|
|
101
|
-
* @returns `true` if the address is
|
|
205
|
+
* @returns `true` if the address is not globally routable unicast, `false` otherwise.
|
|
102
206
|
*/
|
|
103
|
-
function
|
|
104
|
-
if (
|
|
207
|
+
function isNonGlobalIP(ip) {
|
|
208
|
+
if (isNonGlobalIpv4(ip))
|
|
105
209
|
return true;
|
|
106
210
|
const lower = ip.toLowerCase();
|
|
107
|
-
if (lower === '::1' || lower === '0:0:0:0:0:0:0:1')
|
|
108
|
-
return true;
|
|
109
211
|
const mapped = extractMappedIpv4(lower);
|
|
110
212
|
if (mapped !== undefined)
|
|
111
|
-
return
|
|
112
|
-
return
|
|
213
|
+
return isNonGlobalIpv4(mapped);
|
|
214
|
+
return isNonGlobalIpv6(lower);
|
|
215
|
+
}
|
|
216
|
+
/** Parses a URL, rejecting anything that isn't a well-formed `http:`/`https:` target. */
|
|
217
|
+
function parseHttpUrl(urlString) {
|
|
218
|
+
let parsed;
|
|
219
|
+
try {
|
|
220
|
+
parsed = new URL(urlString);
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// Don't echo the raw string — it failed to parse and may carry a secret query.
|
|
224
|
+
throw validationError('Invalid URL: could not be parsed.');
|
|
225
|
+
}
|
|
226
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
227
|
+
throw validationError('Only HTTP and HTTPS URLs are allowed.');
|
|
228
|
+
}
|
|
229
|
+
return parsed;
|
|
113
230
|
}
|
|
114
231
|
/**
|
|
115
|
-
* Validates that
|
|
232
|
+
* Validates that an HTTP(S) URL does not target non-global or reserved IP space.
|
|
116
233
|
*
|
|
117
234
|
* Performs three checks in order:
|
|
118
235
|
* 1. Known private hostnames (`localhost`, `metadata.google.internal`, etc.)
|
|
@@ -131,25 +248,18 @@ function isPrivateIP(ip) {
|
|
|
131
248
|
*
|
|
132
249
|
* @param urlString - The fully-qualified URL string to validate.
|
|
133
250
|
* @throws {McpError} `ValidationError` if the URL is malformed, the hostname is a known
|
|
134
|
-
* internal name, the literal IP is
|
|
251
|
+
* internal name, the literal IP is non-global, or DNS resolves to a non-global address.
|
|
135
252
|
*/
|
|
136
253
|
async function assertNotPrivateUrl(urlString) {
|
|
137
|
-
|
|
138
|
-
try {
|
|
139
|
-
parsed = new URL(urlString);
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
// Don't echo the raw string — it failed to parse and may carry a secret query.
|
|
143
|
-
throw validationError('Invalid URL: could not be parsed.');
|
|
144
|
-
}
|
|
254
|
+
const parsed = parseHttpUrl(urlString);
|
|
145
255
|
const hostname = parsed.hostname.replace(/^\[|\]$/g, ''); // Strip IPv6 brackets
|
|
146
256
|
// Check known private hostnames
|
|
147
257
|
if (PRIVATE_HOSTNAMES.has(hostname.toLowerCase())) {
|
|
148
258
|
throw validationError(`Request to private/internal hostname blocked: ${hostname}`);
|
|
149
259
|
}
|
|
150
260
|
// Check literal IP (v4, v6, or IPv4-mapped IPv6)
|
|
151
|
-
if (
|
|
152
|
-
throw validationError(`Request to
|
|
261
|
+
if (isNonGlobalIP(hostname)) {
|
|
262
|
+
throw validationError(`Request to non-global/reserved IP blocked: ${hostname}`);
|
|
153
263
|
}
|
|
154
264
|
// `node:dns/promises` is available in Node, Bun, and Workers under
|
|
155
265
|
// `nodejs_compat`. `isNode` covers all three.
|
|
@@ -170,7 +280,7 @@ async function assertNotPrivateUrl(urlString) {
|
|
|
170
280
|
* not a guarantee.
|
|
171
281
|
*
|
|
172
282
|
* @param hostname - The bare hostname to resolve (no brackets, no port).
|
|
173
|
-
* @throws {McpError} `ValidationError` if any resolved address is
|
|
283
|
+
* @throws {McpError} `ValidationError` if any resolved address is non-global.
|
|
174
284
|
*/
|
|
175
285
|
async function assertDnsNotPrivate(hostname) {
|
|
176
286
|
try {
|
|
@@ -184,8 +294,8 @@ async function assertDnsNotPrivate(hostname) {
|
|
|
184
294
|
...(ipv6Results.status === 'fulfilled' ? ipv6Results.value : []),
|
|
185
295
|
];
|
|
186
296
|
for (const ip of resolvedIPs) {
|
|
187
|
-
if (
|
|
188
|
-
throw validationError(`DNS resolved ${hostname} to
|
|
297
|
+
if (isNonGlobalIP(ip)) {
|
|
298
|
+
throw validationError(`DNS resolved ${hostname} to non-global IP ${ip} — SSRF blocked`);
|
|
189
299
|
}
|
|
190
300
|
}
|
|
191
301
|
}
|
|
@@ -195,6 +305,54 @@ async function assertDnsNotPrivate(hostname) {
|
|
|
195
305
|
// DNS resolution failures (ENOTFOUND, etc.) are not SSRF — let fetch handle them
|
|
196
306
|
}
|
|
197
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Re-wraps a 2xx response so the request deadline keeps covering the body.
|
|
310
|
+
*
|
|
311
|
+
* `fetch` resolves once headers arrive, so a deadline disarmed at that point
|
|
312
|
+
* leaves the caller's `.text()`/`.json()` unbounded — a peer that answers
|
|
313
|
+
* promptly and then stalls the stream holds the exchange open indefinitely.
|
|
314
|
+
* The returned response streams through a passthrough that reports back when
|
|
315
|
+
* the body closes, errors, or is cancelled, which is what disarms the deadline;
|
|
316
|
+
* until then an expiring deadline aborts the stream mid-read and the caller's
|
|
317
|
+
* body read rejects with the classified failure from `classify`.
|
|
318
|
+
*
|
|
319
|
+
* `new Response` cannot carry `url`/`redirected`/`type` across, so they are
|
|
320
|
+
* restored onto the wrapper — a caller following redirects still sees the final
|
|
321
|
+
* URL, and the response reports the same kind it did before the passthrough.
|
|
322
|
+
*/
|
|
323
|
+
function withBodyDeadline(response, body, deadline) {
|
|
324
|
+
const source = body.getReader();
|
|
325
|
+
const monitored = new ReadableStream({
|
|
326
|
+
async pull(controller) {
|
|
327
|
+
try {
|
|
328
|
+
const { done, value } = await source.read();
|
|
329
|
+
if (done) {
|
|
330
|
+
deadline.settle();
|
|
331
|
+
controller.close();
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
controller.enqueue(value);
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
deadline.settle();
|
|
338
|
+
controller.error(deadline.classify(error));
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
cancel(reason) {
|
|
342
|
+
deadline.settle();
|
|
343
|
+
return source.cancel(reason);
|
|
344
|
+
},
|
|
345
|
+
});
|
|
346
|
+
const wrapped = new Response(monitored, {
|
|
347
|
+
status: response.status,
|
|
348
|
+
statusText: response.statusText,
|
|
349
|
+
headers: response.headers,
|
|
350
|
+
});
|
|
351
|
+
Object.defineProperty(wrapped, 'url', { value: response.url, configurable: true });
|
|
352
|
+
Object.defineProperty(wrapped, 'redirected', { value: response.redirected, configurable: true });
|
|
353
|
+
Object.defineProperty(wrapped, 'type', { value: response.type, configurable: true });
|
|
354
|
+
return wrapped;
|
|
355
|
+
}
|
|
198
356
|
/**
|
|
199
357
|
* Fetches a resource with a configurable timeout and optional SSRF protection.
|
|
200
358
|
*
|
|
@@ -203,32 +361,49 @@ async function assertDnsNotPrivate(hostname) {
|
|
|
203
361
|
* early cancellation by the caller. The two signals are composed — whichever fires
|
|
204
362
|
* first wins.
|
|
205
363
|
*
|
|
364
|
+
* `timeoutMs` bounds the **whole exchange**, headers and body. `fetch` resolves
|
|
365
|
+
* once headers arrive, so on a 2xx the deadline is handed to the response body:
|
|
366
|
+
* the returned `Response` streams through a passthrough that disarms the
|
|
367
|
+
* deadline when the body closes, errors, or is cancelled. A body still pending
|
|
368
|
+
* when the deadline expires is aborted mid-read and the caller's
|
|
369
|
+
* `.text()`/`.json()` rejects with the same `Timeout` `McpError` the header
|
|
370
|
+
* phase would have thrown. A caller that never reads the body has its stream
|
|
371
|
+
* aborted at the deadline rather than held open.
|
|
372
|
+
*
|
|
206
373
|
* When `options.rejectPrivateIPs` is `true`, the target URL is validated before the
|
|
207
374
|
* request is sent, and all redirects are followed manually with per-hop SSRF checks
|
|
208
375
|
* (up to 5 hops). This mode forces `redirect: 'manual'` on the underlying fetch.
|
|
209
376
|
*
|
|
210
|
-
* Non-2xx responses are treated as errors. The response body is
|
|
211
|
-
*
|
|
212
|
-
* upstream returns an HTML error page
|
|
213
|
-
* whose code is mapped from the HTTP status via
|
|
214
|
-
* (e.g. 400 → `InvalidParams`, 403 → `Forbidden`,
|
|
215
|
-
* `RateLimited`, 5xx →
|
|
377
|
+
* Non-2xx responses are treated as errors. The response body is captured under a
|
|
378
|
+
* byte budget (`options.errorBodyLimit`, default {@link ERROR_BODY_LIMIT}) to avoid
|
|
379
|
+
* context-window poisoning when an upstream returns an HTML error page, logged,
|
|
380
|
+
* and wrapped in a `McpError` whose code is mapped from the HTTP status via
|
|
381
|
+
* {@link httpStatusToErrorCode} (e.g. 400 → `InvalidParams`, 403 → `Forbidden`,
|
|
382
|
+
* 404 → `NotFound`, 429 → `RateLimited`, 5xx →
|
|
383
|
+
* `ServiceUnavailable`/`InternalError`/`Timeout`).
|
|
216
384
|
*
|
|
217
385
|
* @param url - The URL to fetch (string or `URL` instance).
|
|
218
|
-
* @param timeoutMs - Maximum duration in milliseconds before the
|
|
386
|
+
* @param timeoutMs - Maximum duration in milliseconds before the exchange is aborted.
|
|
219
387
|
* @param context - Log bindings for correlated logging (`requestId`, `operation`, etc.).
|
|
220
|
-
*
|
|
221
|
-
* such as `signal`, `log`, `state`, and protocol
|
|
222
|
-
* `options.signal = ctx.signal` explicitly to wire cancellation.
|
|
388
|
+
* Accepts the handler `Context` as well as a `RequestContext` bag — the logger
|
|
389
|
+
* strips non-serializable fields such as `signal`, `log`, `state`, and protocol
|
|
390
|
+
* method handles. Pass `options.signal = ctx.signal` explicitly to wire cancellation.
|
|
223
391
|
* @param options - Optional fetch configuration extending `RequestInit`.
|
|
224
392
|
* - `rejectPrivateIPs`: Block requests to private/internal IP space (SSRF protection).
|
|
225
393
|
* - `signal`: External `AbortSignal` to cancel the request independently of the timeout.
|
|
394
|
+
* - `errorBodyLimit`: Bytes of a non-2xx body captured into `error.data.body`.
|
|
226
395
|
* - All other standard `RequestInit` fields (method, headers, body, etc.) are forwarded.
|
|
227
|
-
* @returns A promise resolving to the `Response` object on HTTP 2xx.
|
|
228
|
-
*
|
|
229
|
-
* and `
|
|
230
|
-
*
|
|
231
|
-
* @throws {McpError} `
|
|
396
|
+
* @returns A promise resolving to the `Response` object on HTTP 2xx. On a response
|
|
397
|
+
* carrying a body this is a wrapper around the original: status, statusText,
|
|
398
|
+
* headers, `url`, `redirected`, and `type` are preserved, and the body streams
|
|
399
|
+
* through unchanged under the deadline.
|
|
400
|
+
* @throws {McpError} `ValidationError` for a non-HTTP(S) URL, or if the URL targets
|
|
401
|
+
* a non-global/reserved address and `rejectPrivateIPs` is enabled.
|
|
402
|
+
* @throws {McpError} `Timeout` if the exchange exceeds `timeoutMs`. Raised from the
|
|
403
|
+
* call itself when the deadline expires before headers, and from the body read
|
|
404
|
+
* when it expires during the stream.
|
|
405
|
+
* @throws {McpError} `InternalError` if the request is cancelled via the external
|
|
406
|
+
* signal — likewise from the body read when the cancellation lands mid-stream.
|
|
232
407
|
* @throws {McpError} A status-mapped code (`InvalidParams`/`Unauthorized`/`Forbidden`/
|
|
233
408
|
* `NotFound`/`RateLimited`/`ServiceUnavailable`/...) if the server returns a non-2xx
|
|
234
409
|
* status. `error.data` carries `{ status, statusText, body, retryAfter? }` — plus the
|
|
@@ -263,14 +438,15 @@ async function assertDnsNotPrivate(hostname) {
|
|
|
263
438
|
*/
|
|
264
439
|
export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
265
440
|
const urlString = url.toString();
|
|
266
|
-
|
|
441
|
+
const parsedUrl = parseHttpUrl(urlString);
|
|
442
|
+
// SSRF protection: reject non-global/internal targets when enabled
|
|
267
443
|
if (options?.rejectPrivateIPs) {
|
|
268
444
|
await assertNotPrivateUrl(urlString);
|
|
269
445
|
}
|
|
270
446
|
const operationDescription = `fetch ${options?.method || 'GET'} ${redactUrl(urlString)}`;
|
|
271
447
|
logger.debug(`Attempting ${operationDescription} with ${timeoutMs}ms timeout.`, context);
|
|
272
448
|
// Strip custom options before passing to native fetch
|
|
273
|
-
const { rejectPrivateIPs: rejectPrivate, signal: externalSignal, expectedStatuses, ...fetchInit } = options ?? {};
|
|
449
|
+
const { rejectPrivateIPs: rejectPrivate, signal: externalSignal, expectedStatuses, errorBodyLimit = ERROR_BODY_LIMIT, ...fetchInit } = options ?? {};
|
|
274
450
|
// When SSRF protection is active, handle redirects manually to validate each hop
|
|
275
451
|
if (rejectPrivate) {
|
|
276
452
|
fetchInit.redirect = 'manual';
|
|
@@ -294,8 +470,36 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
294
470
|
const fetchSignal = externalSignal
|
|
295
471
|
? AbortSignal.any([controller.signal, externalSignal])
|
|
296
472
|
: controller.signal;
|
|
473
|
+
/**
|
|
474
|
+
* Set once the deadline has been handed to the response body, so the `finally`
|
|
475
|
+
* below leaves it armed for the caller's read instead of disarming it at return.
|
|
476
|
+
*/
|
|
477
|
+
let deadlineFollowsBody = false;
|
|
478
|
+
const errorIdentity = {
|
|
479
|
+
requestId: context.requestId,
|
|
480
|
+
operation: contextOperation(context),
|
|
481
|
+
};
|
|
482
|
+
const timeoutFailure = () => {
|
|
483
|
+
logger.error(`${operationDescription} timed out after ${timeoutMs}ms.`, {
|
|
484
|
+
...context,
|
|
485
|
+
errorSource: 'FetchTimeout',
|
|
486
|
+
});
|
|
487
|
+
return timeout(`${operationDescription} timed out.`, {
|
|
488
|
+
...errorIdentity,
|
|
489
|
+
errorSource: 'FetchTimeout',
|
|
490
|
+
});
|
|
491
|
+
};
|
|
492
|
+
const abortedFailure = () => {
|
|
493
|
+
logger.info(`${operationDescription} aborted by caller.`, {
|
|
494
|
+
...context,
|
|
495
|
+
errorSource: 'FetchAborted',
|
|
496
|
+
});
|
|
497
|
+
return new McpError(JsonRpcErrorCode.InternalError, `${operationDescription} was aborted.`, {
|
|
498
|
+
...errorIdentity,
|
|
499
|
+
errorSource: 'FetchAborted',
|
|
500
|
+
});
|
|
501
|
+
};
|
|
297
502
|
const startTime = performance.now();
|
|
298
|
-
const parsedUrl = new URL(urlString);
|
|
299
503
|
const method = (fetchInit.method ?? 'GET').toUpperCase();
|
|
300
504
|
let statusCode = 0;
|
|
301
505
|
try {
|
|
@@ -326,8 +530,9 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
326
530
|
}
|
|
327
531
|
statusCode = response.status;
|
|
328
532
|
if (!response.ok) {
|
|
329
|
-
const
|
|
330
|
-
|
|
533
|
+
const responseBody = await readBoundedResponseText(response, errorBodyLimit, {
|
|
534
|
+
scanBytes: ERROR_BODY_SCAN_LIMIT,
|
|
535
|
+
}).catch(() => 'Could not read response body');
|
|
331
536
|
// Callers that treat a status as expected (e.g. 404 → empty result) get a
|
|
332
537
|
// debug line instead of error; the thrown McpError below is unchanged.
|
|
333
538
|
const logMessage = `Fetch failed for ${redactUrl(currentUrl)} with status ${response.status}.`;
|
|
@@ -347,8 +552,7 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
347
552
|
const code = httpStatusToErrorCode(response.status) ?? JsonRpcErrorCode.InternalError;
|
|
348
553
|
const retryAfter = response.headers.get('retry-after');
|
|
349
554
|
throw new McpError(code, `Fetch failed for ${redactUrl(currentUrl)}. Status: ${response.status}`, {
|
|
350
|
-
|
|
351
|
-
operation: context.operation,
|
|
555
|
+
...errorIdentity,
|
|
352
556
|
// Canonical (Fetch `Response`-aligned) field names.
|
|
353
557
|
status: response.status,
|
|
354
558
|
statusText: response.statusText,
|
|
@@ -362,7 +566,28 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
362
566
|
});
|
|
363
567
|
}
|
|
364
568
|
logger.debug(`Successfully fetched ${redactUrl(currentUrl)}. Status: ${response.status}`, context);
|
|
365
|
-
return
|
|
569
|
+
// Nothing left to read (HEAD, 204, …) — the exchange is over, disarm at return.
|
|
570
|
+
if (!response.body || NULL_BODY_STATUS.has(response.status))
|
|
571
|
+
return response;
|
|
572
|
+
deadlineFollowsBody = true;
|
|
573
|
+
/**
|
|
574
|
+
* The deadline now outlives this call, so it must stop holding the event
|
|
575
|
+
* loop open: a caller that reads the status and drops the response would
|
|
576
|
+
* otherwise pin the runtime for the rest of `timeoutMs`. Unref'd, the
|
|
577
|
+
* abort still fires in any process with work left to do — a server, which
|
|
578
|
+
* is where a stalled socket actually needs closing.
|
|
579
|
+
*/
|
|
580
|
+
timeoutId.unref?.();
|
|
581
|
+
return withBodyDeadline(response, response.body, {
|
|
582
|
+
settle: () => clearTimeout(timeoutId),
|
|
583
|
+
classify: (error) => {
|
|
584
|
+
if (controller.signal.reason === timeoutReason)
|
|
585
|
+
return timeoutFailure();
|
|
586
|
+
if (fetchSignal.aborted)
|
|
587
|
+
return abortedFailure();
|
|
588
|
+
return error;
|
|
589
|
+
},
|
|
590
|
+
});
|
|
366
591
|
}
|
|
367
592
|
}
|
|
368
593
|
catch (error) {
|
|
@@ -380,29 +605,13 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
380
605
|
* the generic network-error wrapper below.
|
|
381
606
|
*/
|
|
382
607
|
if (controller.signal.reason === timeoutReason) {
|
|
383
|
-
|
|
384
|
-
...context,
|
|
385
|
-
errorSource: 'FetchTimeout',
|
|
386
|
-
});
|
|
387
|
-
throw timeout(`${operationDescription} timed out.`, {
|
|
388
|
-
requestId: context.requestId,
|
|
389
|
-
operation: context.operation,
|
|
390
|
-
errorSource: 'FetchTimeout',
|
|
391
|
-
});
|
|
608
|
+
throw timeoutFailure();
|
|
392
609
|
}
|
|
393
610
|
// External signal abort (e.g. client disconnect) — not a timeout. The
|
|
394
611
|
// `AbortError` fallback covers an abort raised somewhere other than the
|
|
395
612
|
// two signals composed here, such as a response body stream.
|
|
396
613
|
if (fetchSignal.aborted || (error instanceof Error && error.name === 'AbortError')) {
|
|
397
|
-
|
|
398
|
-
...context,
|
|
399
|
-
errorSource: 'FetchAborted',
|
|
400
|
-
});
|
|
401
|
-
throw new McpError(JsonRpcErrorCode.InternalError, `${operationDescription} was aborted.`, {
|
|
402
|
-
requestId: context.requestId,
|
|
403
|
-
operation: context.operation,
|
|
404
|
-
errorSource: 'FetchAborted',
|
|
405
|
-
});
|
|
614
|
+
throw abortedFailure();
|
|
406
615
|
}
|
|
407
616
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
408
617
|
logger.error(`Network error during ${operationDescription}: ${errorMessage}`, {
|
|
@@ -414,14 +623,14 @@ export async function fetchWithTimeout(url, timeoutMs, context, options) {
|
|
|
414
623
|
throw error;
|
|
415
624
|
}
|
|
416
625
|
throw serviceUnavailable(`Network error during ${operationDescription}: ${errorMessage}`, {
|
|
417
|
-
|
|
418
|
-
operation: context.operation,
|
|
626
|
+
...errorIdentity,
|
|
419
627
|
originalErrorName: error instanceof Error ? error.name : 'UnknownError',
|
|
420
628
|
errorSource: 'FetchNetworkErrorWrapper',
|
|
421
629
|
});
|
|
422
630
|
}
|
|
423
631
|
finally {
|
|
424
|
-
|
|
632
|
+
if (!deadlineFollowsBody)
|
|
633
|
+
clearTimeout(timeoutId);
|
|
425
634
|
const durationS = (performance.now() - startTime) / 1000;
|
|
426
635
|
const attrs = {
|
|
427
636
|
'http.request.method': method,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchWithTimeout.js","sourceRoot":"","sources":["../../../src/utils/network/fetchWithTimeout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fetchWithTimeout.js","sourceRoot":"","sources":["../../../src/utils/network/fetchWithTimeout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpError.d.ts","sourceRoot":"","sources":["../../../src/utils/network/httpError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"httpError.d.ts","sourceRoot":"","sources":["../../../src/utils/network/httpError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAGtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAqClF;AAED,uDAAuD;AACvD,MAAM,WAAW,4BAA4B;IAC3C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;IAChE;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,QAAQ,CAAC,CAkDnB"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* @module src/utils/network/httpError
|
|
6
6
|
*/
|
|
7
7
|
import { JsonRpcErrorCode, McpError } from '../../types-global/errors.js';
|
|
8
|
+
import { readBoundedResponseText } from '../../utils/network/responseBody.js';
|
|
8
9
|
/**
|
|
9
10
|
* Maps an HTTP status code to a `JsonRpcErrorCode`. Covers the full client/server
|
|
10
11
|
* 4xx/5xx range, with specific mappings for the codes most upstream APIs use to
|
|
@@ -121,8 +122,7 @@ export async function httpErrorFromResponse(response, options = {}) {
|
|
|
121
122
|
let body;
|
|
122
123
|
if (captureBody) {
|
|
123
124
|
try {
|
|
124
|
-
|
|
125
|
-
body = raw.length > bodyLimit ? `${raw.slice(0, bodyLimit)}…` : raw;
|
|
125
|
+
body = await readBoundedResponseText(response, bodyLimit);
|
|
126
126
|
}
|
|
127
127
|
catch {
|
|
128
128
|
/* body unreadable (already consumed, network error mid-stream) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpError.js","sourceRoot":"","sources":["../../../src/utils/network/httpError.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"httpError.js","sourceRoot":"","sources":["../../../src/utils/network/httpError.ts"],"names":[],"mappings":"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"}
|