@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.
Files changed (215) hide show
  1. package/AGENTS.md +14 -10
  2. package/CLAUDE.md +14 -10
  3. package/README.md +3 -3
  4. package/biome.json +1 -1
  5. package/changelog/0.11.x/0.11.2.md +98 -0
  6. package/changelog/0.11.x/0.11.3.md +49 -0
  7. package/dist/config/index.d.ts.map +1 -1
  8. package/dist/config/index.js +3 -13
  9. package/dist/config/index.js.map +1 -1
  10. package/dist/config/logLevelAlias.d.ts +15 -0
  11. package/dist/config/logLevelAlias.d.ts.map +1 -0
  12. package/dist/config/logLevelAlias.js +30 -0
  13. package/dist/config/logLevelAlias.js.map +1 -0
  14. package/dist/core/app.d.ts +37 -14
  15. package/dist/core/app.d.ts.map +1 -1
  16. package/dist/core/app.js +56 -23
  17. package/dist/core/app.js.map +1 -1
  18. package/dist/core/context.d.ts +10 -0
  19. package/dist/core/context.d.ts.map +1 -1
  20. package/dist/core/context.js +10 -1
  21. package/dist/core/context.js.map +1 -1
  22. package/dist/core/index.d.ts +1 -1
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/worker.d.ts.map +1 -1
  26. package/dist/core/worker.js +35 -18
  27. package/dist/core/worker.js.map +1 -1
  28. package/dist/logs/combined.log +16 -8
  29. package/dist/logs/error.log +12 -4
  30. package/dist/mcp-server/elicitation.d.ts +64 -0
  31. package/dist/mcp-server/elicitation.d.ts.map +1 -0
  32. package/dist/mcp-server/elicitation.js +81 -0
  33. package/dist/mcp-server/elicitation.js.map +1 -0
  34. package/dist/mcp-server/protocolSession.d.ts +34 -0
  35. package/dist/mcp-server/protocolSession.d.ts.map +1 -0
  36. package/dist/mcp-server/protocolSession.js +13 -0
  37. package/dist/mcp-server/protocolSession.js.map +1 -0
  38. package/dist/mcp-server/resources/resource-registration.d.ts +2 -1
  39. package/dist/mcp-server/resources/resource-registration.d.ts.map +1 -1
  40. package/dist/mcp-server/resources/resource-registration.js +6 -2
  41. package/dist/mcp-server/resources/resource-registration.js.map +1 -1
  42. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts +7 -12
  43. package/dist/mcp-server/resources/utils/resourceHandlerFactory.d.ts.map +1 -1
  44. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js +24 -31
  45. package/dist/mcp-server/resources/utils/resourceHandlerFactory.js.map +1 -1
  46. package/dist/mcp-server/server.d.ts +3 -0
  47. package/dist/mcp-server/server.d.ts.map +1 -1
  48. package/dist/mcp-server/server.js +12 -2
  49. package/dist/mcp-server/server.js.map +1 -1
  50. package/dist/mcp-server/tools/tool-registration.d.ts +2 -1
  51. package/dist/mcp-server/tools/tool-registration.d.ts.map +1 -1
  52. package/dist/mcp-server/tools/tool-registration.js +6 -2
  53. package/dist/mcp-server/tools/tool-registration.js.map +1 -1
  54. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts +7 -13
  55. package/dist/mcp-server/tools/utils/toolHandlerFactory.d.ts.map +1 -1
  56. package/dist/mcp-server/tools/utils/toolHandlerFactory.js +11 -44
  57. package/dist/mcp-server/tools/utils/toolHandlerFactory.js.map +1 -1
  58. package/dist/mcp-server/transports/http/httpErrorHandler.js +1 -1
  59. package/dist/mcp-server/transports/http/httpErrorHandler.js.map +1 -1
  60. package/dist/mcp-server/transports/http/httpServer.d.ts +2 -2
  61. package/dist/mcp-server/transports/http/httpServer.d.ts.map +1 -1
  62. package/dist/mcp-server/transports/http/httpServer.js.map +1 -1
  63. package/dist/mcp-server/transports/http/httpTransport.d.ts +2 -2
  64. package/dist/mcp-server/transports/http/httpTransport.d.ts.map +1 -1
  65. package/dist/mcp-server/transports/http/httpTransport.js +113 -55
  66. package/dist/mcp-server/transports/http/httpTransport.js.map +1 -1
  67. package/dist/mcp-server/transports/http/sessionStore.d.ts +17 -0
  68. package/dist/mcp-server/transports/http/sessionStore.d.ts.map +1 -1
  69. package/dist/mcp-server/transports/http/sessionStore.js +71 -0
  70. package/dist/mcp-server/transports/http/sessionStore.js.map +1 -1
  71. package/dist/mcp-server/transports/manager.d.ts +2 -6
  72. package/dist/mcp-server/transports/manager.d.ts.map +1 -1
  73. package/dist/mcp-server/transports/manager.js +4 -0
  74. package/dist/mcp-server/transports/manager.js.map +1 -1
  75. package/dist/services/canvas/core/CanvasRegistry.d.ts +2 -2
  76. package/dist/services/canvas/core/CanvasRegistry.d.ts.map +1 -1
  77. package/dist/services/canvas/core/CanvasRegistry.js +14 -3
  78. package/dist/services/canvas/core/CanvasRegistry.js.map +1 -1
  79. package/dist/services/canvas/core/DataCanvas.d.ts +1 -1
  80. package/dist/services/canvas/core/DataCanvas.d.ts.map +1 -1
  81. package/dist/services/canvas/core/DataCanvas.js +2 -2
  82. package/dist/services/canvas/core/DataCanvas.js.map +1 -1
  83. package/dist/services/canvas/providers/duckdb/DuckdbProvider.d.ts.map +1 -1
  84. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js +11 -3
  85. package/dist/services/canvas/providers/duckdb/DuckdbProvider.js.map +1 -1
  86. package/dist/services/canvas/providers/duckdb/exportWriter.d.ts.map +1 -1
  87. package/dist/services/canvas/providers/duckdb/exportWriter.js +23 -2
  88. package/dist/services/canvas/providers/duckdb/exportWriter.js.map +1 -1
  89. package/dist/services/mirror/core/defineMirror.d.ts.map +1 -1
  90. package/dist/services/mirror/core/defineMirror.js +18 -7
  91. package/dist/services/mirror/core/defineMirror.js.map +1 -1
  92. package/dist/services/mirror/core/runner.d.ts.map +1 -1
  93. package/dist/services/mirror/core/runner.js +3 -0
  94. package/dist/services/mirror/core/runner.js.map +1 -1
  95. package/dist/services/mirror/index.d.ts +1 -1
  96. package/dist/services/mirror/index.d.ts.map +1 -1
  97. package/dist/services/mirror/index.js.map +1 -1
  98. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts +20 -0
  99. package/dist/services/mirror/sqlite/sqliteMirrorStore.d.ts.map +1 -1
  100. package/dist/services/mirror/sqlite/sqliteMirrorStore.js +92 -8
  101. package/dist/services/mirror/sqlite/sqliteMirrorStore.js.map +1 -1
  102. package/dist/storage/core/StorageService.d.ts.map +1 -1
  103. package/dist/storage/core/StorageService.js +4 -1
  104. package/dist/storage/core/StorageService.js.map +1 -1
  105. package/dist/storage/core/storageValidation.d.ts +8 -0
  106. package/dist/storage/core/storageValidation.d.ts.map +1 -1
  107. package/dist/storage/core/storageValidation.js +22 -0
  108. package/dist/storage/core/storageValidation.js.map +1 -1
  109. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts +1 -1
  110. package/dist/storage/providers/inMemory/inMemoryProvider.d.ts.map +1 -1
  111. package/dist/storage/providers/inMemory/inMemoryProvider.js +67 -25
  112. package/dist/storage/providers/inMemory/inMemoryProvider.js.map +1 -1
  113. package/dist/testing/fuzz.d.ts.map +1 -1
  114. package/dist/testing/fuzz.js +33 -14
  115. package/dist/testing/fuzz.js.map +1 -1
  116. package/dist/testing/index.d.ts +45 -13
  117. package/dist/testing/index.d.ts.map +1 -1
  118. package/dist/testing/index.js +29 -76
  119. package/dist/testing/index.js.map +1 -1
  120. package/dist/testing/vitest.d.ts +12 -3
  121. package/dist/testing/vitest.d.ts.map +1 -1
  122. package/dist/testing/vitest.js +3 -0
  123. package/dist/testing/vitest.js.map +1 -1
  124. package/dist/utils/formatting/diffFormatter.d.ts +5 -5
  125. package/dist/utils/formatting/diffFormatter.d.ts.map +1 -1
  126. package/dist/utils/formatting/diffFormatter.js +1 -1
  127. package/dist/utils/formatting/diffFormatter.js.map +1 -1
  128. package/dist/utils/formatting/tableFormatter.d.ts +3 -3
  129. package/dist/utils/formatting/tableFormatter.d.ts.map +1 -1
  130. package/dist/utils/formatting/tableFormatter.js +1 -1
  131. package/dist/utils/formatting/tableFormatter.js.map +1 -1
  132. package/dist/utils/formatting/treeFormatter.d.ts +3 -3
  133. package/dist/utils/formatting/treeFormatter.d.ts.map +1 -1
  134. package/dist/utils/formatting/treeFormatter.js +1 -1
  135. package/dist/utils/formatting/treeFormatter.js.map +1 -1
  136. package/dist/utils/index.d.ts +1 -1
  137. package/dist/utils/index.d.ts.map +1 -1
  138. package/dist/utils/index.js +1 -1
  139. package/dist/utils/index.js.map +1 -1
  140. package/dist/utils/metrics/tokenCounter.d.ts +3 -3
  141. package/dist/utils/metrics/tokenCounter.d.ts.map +1 -1
  142. package/dist/utils/metrics/tokenCounter.js.map +1 -1
  143. package/dist/utils/network/fetchWithTimeout.d.ts +50 -21
  144. package/dist/utils/network/fetchWithTimeout.d.ts.map +1 -1
  145. package/dist/utils/network/fetchWithTimeout.js +299 -90
  146. package/dist/utils/network/fetchWithTimeout.js.map +1 -1
  147. package/dist/utils/network/httpError.d.ts.map +1 -1
  148. package/dist/utils/network/httpError.js +2 -2
  149. package/dist/utils/network/httpError.js.map +1 -1
  150. package/dist/utils/network/responseBody.d.ts +35 -0
  151. package/dist/utils/network/responseBody.d.ts.map +1 -0
  152. package/dist/utils/network/responseBody.js +104 -0
  153. package/dist/utils/network/responseBody.js.map +1 -0
  154. package/dist/utils/network/retry.d.ts +2 -2
  155. package/dist/utils/network/retry.d.ts.map +1 -1
  156. package/dist/utils/pagination/pagination.d.ts +3 -3
  157. package/dist/utils/pagination/pagination.d.ts.map +1 -1
  158. package/dist/utils/pagination/pagination.js.map +1 -1
  159. package/dist/utils/parsing/csvParser.d.ts +2 -2
  160. package/dist/utils/parsing/csvParser.d.ts.map +1 -1
  161. package/dist/utils/parsing/csvParser.js +1 -1
  162. package/dist/utils/parsing/csvParser.js.map +1 -1
  163. package/dist/utils/parsing/dateParser.d.ts +11 -7
  164. package/dist/utils/parsing/dateParser.d.ts.map +1 -1
  165. package/dist/utils/parsing/dateParser.js +8 -4
  166. package/dist/utils/parsing/dateParser.js.map +1 -1
  167. package/dist/utils/parsing/frontmatterParser.d.ts +6 -3
  168. package/dist/utils/parsing/frontmatterParser.d.ts.map +1 -1
  169. package/dist/utils/parsing/frontmatterParser.js +9 -9
  170. package/dist/utils/parsing/frontmatterParser.js.map +1 -1
  171. package/dist/utils/parsing/htmlExtractor.d.ts +8 -3
  172. package/dist/utils/parsing/htmlExtractor.d.ts.map +1 -1
  173. package/dist/utils/parsing/htmlExtractor.js +7 -7
  174. package/dist/utils/parsing/htmlExtractor.js.map +1 -1
  175. package/dist/utils/parsing/index.d.ts +1 -0
  176. package/dist/utils/parsing/index.d.ts.map +1 -1
  177. package/dist/utils/parsing/index.js +1 -0
  178. package/dist/utils/parsing/index.js.map +1 -1
  179. package/dist/utils/parsing/inputBudget.d.ts +35 -0
  180. package/dist/utils/parsing/inputBudget.d.ts.map +1 -0
  181. package/dist/utils/parsing/inputBudget.js +79 -0
  182. package/dist/utils/parsing/inputBudget.js.map +1 -0
  183. package/dist/utils/parsing/jsonParser.d.ts +6 -3
  184. package/dist/utils/parsing/jsonParser.d.ts.map +1 -1
  185. package/dist/utils/parsing/jsonParser.js +8 -8
  186. package/dist/utils/parsing/jsonParser.js.map +1 -1
  187. package/dist/utils/parsing/pdfParser.d.ts +41 -19
  188. package/dist/utils/parsing/pdfParser.d.ts.map +1 -1
  189. package/dist/utils/parsing/pdfParser.js +86 -60
  190. package/dist/utils/parsing/pdfParser.js.map +1 -1
  191. package/dist/utils/parsing/xmlParser.d.ts +4 -2
  192. package/dist/utils/parsing/xmlParser.d.ts.map +1 -1
  193. package/dist/utils/parsing/xmlParser.js +6 -7
  194. package/dist/utils/parsing/xmlParser.js.map +1 -1
  195. package/dist/utils/parsing/yamlParser.d.ts +4 -2
  196. package/dist/utils/parsing/yamlParser.d.ts.map +1 -1
  197. package/dist/utils/parsing/yamlParser.js +6 -7
  198. package/dist/utils/parsing/yamlParser.js.map +1 -1
  199. package/dist/utils/security/rateLimiter.d.ts +2 -2
  200. package/dist/utils/security/rateLimiter.d.ts.map +1 -1
  201. package/dist/utils/security/rateLimiter.js +1 -1
  202. package/dist/utils/security/rateLimiter.js.map +1 -1
  203. package/dist/utils/telemetry/trace.d.ts +3 -3
  204. package/dist/utils/telemetry/trace.d.ts.map +1 -1
  205. package/dist/utils/telemetry/trace.js.map +1 -1
  206. package/package.json +17 -15
  207. package/skills/add-test/SKILL.md +2 -2
  208. package/skills/api-auth/SKILL.md +5 -5
  209. package/skills/api-context/SKILL.md +13 -12
  210. package/skills/api-testing/SKILL.md +29 -10
  211. package/skills/api-utils/SKILL.md +4 -2
  212. package/skills/api-utils/references/parsing.md +3 -2
  213. package/skills/git-wrapup/SKILL.md +22 -1
  214. package/templates/AGENTS.md +1 -1
  215. 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
- /** Maximum captured bytes of an upstream error response body. Keeps tool errors from poisoning the agent's context. */
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
- * IPv4 patterns for private/reserved ranges that should be blocked when
49
- * `rejectPrivateIPs` is enabled. Covers RFC 1918, loopback, link-local,
50
- * and cloud metadata endpoints.
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
- const PRIVATE_IP_PATTERNS = [
53
- /^127\./, // Loopback
54
- /^10\./, // RFC 1918 Class A
55
- /^172\.(1[6-9]|2\d|3[01])\./, // RFC 1918 Class B
56
- /^192\.168\./, // RFC 1918 Class C
57
- /^169\.254\./, // Link-local / cloud metadata
58
- /^0\./, // Current network
59
- /^100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\./, // RFC 6598 (CGNAT)
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
- * IPv6 patterns for private/reserved ranges. Anchored to a 4-hex-digit first
63
- * segment so canonical forms (e.g. `0fe8::1` → `fe8::1`) don't false-positive
64
- * against link-local/ULA prefixes.
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
- const PRIVATE_IPV6_PATTERNS = [
67
- /^fe[89ab][0-9a-f]:/i, // fe80::/10 link-local (third nibble 8/9/a/b)
68
- /^f[cd][0-9a-f]{2}:/i, // fc00::/7 ULA
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) falls
94
- * within a private or reserved range.
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 patterns,
97
- * so the full RFC 1918 / CGNAT / link-local space is covered automatically
98
- * without duplicating the table.
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 private or reserved, `false` otherwise.
205
+ * @returns `true` if the address is not globally routable unicast, `false` otherwise.
102
206
  */
103
- function isPrivateIP(ip) {
104
- if (PRIVATE_IP_PATTERNS.some((pattern) => pattern.test(ip)))
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 PRIVATE_IP_PATTERNS.some((pattern) => pattern.test(mapped));
112
- return PRIVATE_IPV6_PATTERNS.some((pattern) => pattern.test(lower));
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 a URL string does not target private or reserved IP space.
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 private, or DNS resolves to a private address.
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
- let parsed;
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 (isPrivateIP(hostname)) {
152
- throw validationError(`Request to private/reserved IP blocked: ${hostname}`);
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 private.
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 (isPrivateIP(ip)) {
188
- throw validationError(`DNS resolved ${hostname} to private IP ${ip} — SSRF blocked`);
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 read (truncated
211
- * to {@link ERROR_BODY_LIMIT} bytes to avoid context-window poisoning when an
212
- * upstream returns an HTML error page), logged, and wrapped in a `McpError`
213
- * whose code is mapped from the HTTP status via {@link httpStatusToErrorCode}
214
- * (e.g. 400 → `InvalidParams`, 403 → `Forbidden`, 404 → `NotFound`, 429 →
215
- * `RateLimited`, 5xx → `ServiceUnavailable`/`InternalError`/`Timeout`).
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 request is aborted.
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
- * Passing the handler `Context` is safe — the logger strips non-serializable fields
221
- * such as `signal`, `log`, `state`, and protocol method handles. Pass
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
- * @throws {McpError} `ValidationError` if the URL targets a private/reserved address
229
- * and `rejectPrivateIPs` is enabled.
230
- * @throws {McpError} `Timeout` if the request exceeds `timeoutMs`.
231
- * @throws {McpError} `InternalError` if the request is cancelled via the external signal.
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
- // SSRF protection: reject private/internal targets when enabled
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 rawBody = await response.text().catch(() => 'Could not read response body');
330
- const responseBody = rawBody.length > ERROR_BODY_LIMIT ? `${rawBody.slice(0, ERROR_BODY_LIMIT)}…` : rawBody;
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
- requestId: context.requestId,
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 response;
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
- logger.error(`${operationDescription} timed out after ${timeoutMs}ms.`, {
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
- logger.info(`${operationDescription} aborted by caller.`, {
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
- requestId: context.requestId,
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
- clearTimeout(timeoutId);
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;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,CAmDnB"}
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
- const raw = await response.text();
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":"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"}
1
+ {"version":3,"file":"httpError.js","sourceRoot":"","sources":["../../../src/utils/network/httpError.ts"],"names":[],"mappings":"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"}