@j0hanz/fetch-url-mcp 1.11.6 → 1.11.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.
Files changed (63) hide show
  1. package/README.md +25 -33
  2. package/dist/http/auth.d.ts.map +1 -1
  3. package/dist/http/auth.js +1 -1
  4. package/dist/http/health.d.ts.map +1 -1
  5. package/dist/http/health.js +0 -2
  6. package/dist/http/native.d.ts.map +1 -1
  7. package/dist/http/native.js +0 -25
  8. package/dist/lib/config.d.ts +0 -7
  9. package/dist/lib/config.d.ts.map +1 -1
  10. package/dist/lib/config.js +5 -11
  11. package/dist/lib/core.d.ts +0 -3
  12. package/dist/lib/core.d.ts.map +1 -1
  13. package/dist/lib/core.js +0 -7
  14. package/dist/lib/fetch-pipeline.d.ts +1 -14
  15. package/dist/lib/fetch-pipeline.d.ts.map +1 -1
  16. package/dist/lib/fetch-pipeline.js +4 -149
  17. package/dist/lib/http.d.ts +0 -3
  18. package/dist/lib/http.d.ts.map +1 -1
  19. package/dist/lib/http.js +4 -108
  20. package/dist/lib/mcp-interop.d.ts.map +1 -1
  21. package/dist/lib/mcp-interop.js +13 -11
  22. package/dist/lib/session.d.ts.map +1 -1
  23. package/dist/lib/session.js +5 -9
  24. package/dist/lib/url.d.ts +1 -1
  25. package/dist/lib/url.d.ts.map +1 -1
  26. package/dist/lib/url.js +67 -82
  27. package/dist/lib/utils.d.ts +2 -4
  28. package/dist/lib/utils.d.ts.map +1 -1
  29. package/dist/lib/utils.js +18 -44
  30. package/dist/lib/zod.d.ts.map +1 -1
  31. package/dist/lib/zod.js +11 -17
  32. package/dist/resources/index.d.ts +1 -23
  33. package/dist/resources/index.d.ts.map +1 -1
  34. package/dist/resources/index.js +3 -294
  35. package/dist/schemas.d.ts +0 -14
  36. package/dist/schemas.d.ts.map +1 -1
  37. package/dist/schemas.js +1 -77
  38. package/dist/server.d.ts.map +1 -1
  39. package/dist/server.js +1 -2
  40. package/dist/tasks/execution.js +1 -1
  41. package/dist/tasks/manager.d.ts.map +1 -1
  42. package/dist/tasks/manager.js +8 -5
  43. package/dist/tasks/owner.d.ts.map +1 -1
  44. package/dist/tasks/owner.js +4 -4
  45. package/dist/tools/fetch-url.d.ts +0 -2
  46. package/dist/tools/fetch-url.d.ts.map +1 -1
  47. package/dist/tools/fetch-url.js +12 -43
  48. package/dist/transform/html-translators.js +7 -7
  49. package/dist/transform/next-flight.d.ts.map +1 -1
  50. package/dist/transform/next-flight.js +8 -2
  51. package/dist/transform/shared.js +4 -4
  52. package/dist/transform/transform.d.ts +1 -1
  53. package/dist/transform/transform.d.ts.map +1 -1
  54. package/dist/transform/transform.js +14 -15
  55. package/dist/transform/types.d.ts +2 -2
  56. package/dist/transform/types.d.ts.map +1 -1
  57. package/dist/transform/worker-pool.d.ts +3 -3
  58. package/dist/transform/worker-pool.d.ts.map +1 -1
  59. package/dist/transform/worker-pool.js +2 -2
  60. package/package.json +1 -1
  61. package/dist/lib/cache.d.ts +0 -48
  62. package/dist/lib/cache.d.ts.map +0 -1
  63. package/dist/lib/cache.js +0 -273
@@ -1,12 +1,8 @@
1
- import { z } from 'zod';
2
- import { cachedPayloadValueSchema, extractedMetadataSchema, normalizeExtractedMetadata, normalizePageTitle, parseCachedPayload, stringifyCachedPayload, } from '../schemas.js';
3
1
  import { transformBufferToMarkdown } from '../transform/transform.js';
4
2
  import {} from '../transform/types.js';
5
- import { createCacheKey, get, isEnabled, set } from './cache.js';
6
- import { toCacheScopeId } from './cache.js';
7
- import { config, getSessionId, logDebug, logError, logWarn } from './core.js';
3
+ import { config, logDebug } from './core.js';
8
4
  import { fetchNormalizedUrlBuffer, normalizeUrl, transformToRawUrl, } from './http.js';
9
- import { getErrorMessage, isObject, withSignal } from './utils.js';
5
+ import { withSignal } from './utils.js';
10
6
  export { withSignal };
11
7
  const TRUNCATION_MARKER = '...[truncated]';
12
8
  function getOpenCodeFence(content) {
@@ -114,101 +110,6 @@ function resolveNormalizedUrl(url) {
114
110
  transformed: transformedResult.transformed,
115
111
  };
116
112
  }
117
- function logCacheMiss(reason, cacheNamespace, normalizedUrl, error) {
118
- // Deserialize exceptions indicate data corruption or schema drift —
119
- // use logError so they surface in monitoring, not just debug logs.
120
- const log = reason === 'deserialize exception'
121
- ? logError
122
- : reason.startsWith('deserialize')
123
- ? logWarn
124
- : logDebug;
125
- log(`Cache miss due to ${reason}`, {
126
- namespace: cacheNamespace,
127
- url: normalizedUrl,
128
- ...(error ? { error: getErrorMessage(error) } : {}),
129
- });
130
- }
131
- function attemptCacheRetrieval(cacheKey, deserialize, cacheNamespace, normalizedUrl) {
132
- if (!cacheKey)
133
- return null;
134
- const cached = get(cacheKey, { scopeId: toCacheScopeId(getSessionId()) });
135
- if (!cached)
136
- return null;
137
- if (!deserialize) {
138
- logCacheMiss('missing deserializer', cacheNamespace, normalizedUrl);
139
- return null;
140
- }
141
- let data;
142
- try {
143
- data = deserialize(cached.content);
144
- }
145
- catch (error) {
146
- logCacheMiss('deserialize exception', cacheNamespace, normalizedUrl, error);
147
- return null;
148
- }
149
- if (data === undefined) {
150
- logCacheMiss('deserialize failure', cacheNamespace, normalizedUrl);
151
- return null;
152
- }
153
- logDebug('Cache hit', { namespace: cacheNamespace, url: normalizedUrl });
154
- const finalUrl = cached.url !== normalizedUrl ? cached.url : undefined;
155
- return {
156
- data,
157
- fromCache: true,
158
- url: normalizedUrl,
159
- ...(finalUrl ? { finalUrl } : {}),
160
- fetchedAt: cached.fetchedAt,
161
- cacheKey,
162
- };
163
- }
164
- function restoreCachedPipelineResult(options, resolvedUrl, cacheKey) {
165
- if (options.forceRefresh)
166
- return null;
167
- options.onStage?.('check_cache');
168
- const cachedResult = attemptCacheRetrieval(cacheKey, options.deserialize, options.cacheNamespace, resolvedUrl.normalizedUrl);
169
- if (!cachedResult)
170
- return null;
171
- options.onStage?.('cache_hit');
172
- options.onStage?.('cache_restore');
173
- return { ...cachedResult, originalUrl: resolvedUrl.originalUrl };
174
- }
175
- function persistCacheEntry(cacheKey, data, serialize, normalizedUrl, cacheNamespace) {
176
- const serializer = serialize ?? JSON.stringify;
177
- const dataRecord = isObject(data)
178
- ? data
179
- : undefined;
180
- const title = typeof dataRecord?.title === 'string' ? dataRecord.title : undefined;
181
- const metadata = {
182
- url: normalizedUrl,
183
- scopeIds: [toCacheScopeId(getSessionId())],
184
- ...(title === undefined ? {} : { title }),
185
- };
186
- try {
187
- set(cacheKey, serializer(data), metadata);
188
- }
189
- catch (error) {
190
- logWarn('Failed to persist cache entry', {
191
- namespace: cacheNamespace,
192
- url: normalizedUrl,
193
- error: getErrorMessage(error),
194
- });
195
- }
196
- }
197
- function persistCacheTargets(requestedUrl, finalUrl, cacheKey, data, options) {
198
- if (!cacheKey)
199
- return;
200
- const targets = new Map();
201
- targets.set(cacheKey, finalUrl ?? requestedUrl);
202
- if (finalUrl && finalUrl !== requestedUrl) {
203
- const finalCacheKey = createCacheKey(options.cacheNamespace, finalUrl, options.cacheVary);
204
- if (finalCacheKey) {
205
- targets.set(finalCacheKey, finalUrl);
206
- }
207
- }
208
- for (const [key, url] of targets) {
209
- persistCacheEntry(key, data, options.serialize, url, options.cacheNamespace);
210
- }
211
- }
212
113
  export async function executeFetchPipeline(options) {
213
114
  options.onStage?.('resolve_url');
214
115
  const resolvedUrl = resolveNormalizedUrl(options.url);
@@ -217,10 +118,6 @@ export async function executeFetchPipeline(options) {
217
118
  original: resolvedUrl.originalUrl,
218
119
  });
219
120
  }
220
- const cacheKey = createCacheKey(options.cacheNamespace, resolvedUrl.normalizedUrl, options.cacheVary);
221
- const cachedResult = restoreCachedPipelineResult(options, resolvedUrl, cacheKey);
222
- if (cachedResult)
223
- return cachedResult;
224
121
  options.onStage?.('fetch_remote');
225
122
  logDebug('Fetching URL', { url: resolvedUrl.normalizedUrl });
226
123
  const { buffer, encoding, truncated, finalUrl } = await fetchNormalizedUrlBuffer(resolvedUrl.normalizedUrl, withSignal(options.signal));
@@ -228,26 +125,14 @@ export async function executeFetchPipeline(options) {
228
125
  options.onStage?.('transform_start');
229
126
  const resolvedFinalUrl = finalUrl || resolvedUrl.normalizedUrl;
230
127
  const data = await options.transform({ buffer, encoding, ...(truncated ? { truncated: true } : {}) }, resolvedFinalUrl);
231
- if (isEnabled()) {
232
- persistCacheTargets(resolvedUrl.normalizedUrl, finalUrl, cacheKey, data, options);
233
- }
234
128
  return {
235
129
  data,
236
- fromCache: false,
237
130
  url: resolvedUrl.normalizedUrl,
238
131
  originalUrl: resolvedUrl.originalUrl,
239
132
  ...(finalUrl ? { finalUrl } : {}),
240
133
  fetchedAt: new Date().toISOString(),
241
- cacheKey,
242
134
  };
243
135
  }
244
- const markdownPipelineResultSchema = z.strictObject({
245
- markdown: z.string(),
246
- content: z.string(),
247
- title: z.union([z.string(), z.undefined()]),
248
- metadata: extractedMetadataSchema.optional(),
249
- truncated: z.boolean(),
250
- });
251
136
  function createMarkdownPipelineResult({ markdown: rawMarkdown, title, metadata, truncated, }) {
252
137
  const markdown = normalizeMarkdownForTruncation(rawMarkdown, truncated);
253
138
  return {
@@ -258,33 +143,9 @@ function createMarkdownPipelineResult({ markdown: rawMarkdown, title, metadata,
258
143
  truncated,
259
144
  };
260
145
  }
261
- const markdownPipelineCacheCodec = z.codec(cachedPayloadValueSchema, markdownPipelineResultSchema, {
262
- decode: (payload) => createMarkdownPipelineResult({
263
- markdown: payload.markdown,
264
- title: payload.title,
265
- metadata: payload.metadata,
266
- truncated: payload.truncated ?? false,
267
- }),
268
- encode: (result) => {
269
- const title = normalizePageTitle(result.title);
270
- const metadata = normalizeExtractedMetadata(result.metadata);
271
- return {
272
- markdown: normalizeMarkdownForTruncation(result.markdown, result.truncated),
273
- ...(title !== undefined ? { title } : {}),
274
- ...(metadata ? { metadata } : {}),
275
- truncated: result.truncated,
276
- };
277
- },
278
- });
279
- export function parseCachedMarkdownResult(cached) {
280
- const payload = parseCachedPayload(cached);
281
- if (!payload)
282
- return undefined;
283
- return z.decode(markdownPipelineCacheCodec, payload);
284
- }
285
146
  export const markdownTransform = async (input, url, signal) => {
286
147
  const result = await transformBufferToMarkdown(input.buffer, url, {
287
- includeMetadata: true,
148
+ includeMetadataFooter: true,
288
149
  encoding: input.encoding,
289
150
  ...withSignal(signal),
290
151
  ...(input.truncated ? { inputTruncated: true } : {}),
@@ -296,14 +157,8 @@ export const markdownTransform = async (input, url, signal) => {
296
157
  truncated: Boolean(result.truncated || input.truncated),
297
158
  });
298
159
  };
299
- export function serializeMarkdownResult(result) {
300
- return stringifyCachedPayload(z.encode(markdownPipelineCacheCodec, result));
301
- }
302
160
  function buildSharedFetchPipelineOptions(options) {
303
- return {
304
- ...options,
305
- cacheNamespace: 'markdown',
306
- };
161
+ return { ...options };
307
162
  }
308
163
  export async function performSharedFetch(options, deps = {}) {
309
164
  const executePipeline = deps.executeFetchPipeline ?? executeFetchPipeline;
@@ -1,8 +1,5 @@
1
- import { type ServerResponse } from 'node:http';
2
1
  import { Agent } from 'undici';
3
2
  import { type TransformResult } from './url.js';
4
- export declare function generateSafeFilename(url: string, title?: string, hashFallback?: string, extension?: string): string;
5
- export declare function handleDownload(res: ServerResponse, namespace: string, hash: string): void;
6
3
  interface FetchTelemetryContext {
7
4
  requestId: string;
8
5
  startTime: number;
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAQhD,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAehD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;AAsElB,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,SAAQ,GAChB,MAAM,CAIR;AAkBD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,cAAc,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,IAAI,CA6CN;AAkvCD,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"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/lib/http.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAmB,MAAM,QAAQ,CAAC;AAYhD,OAAO,EAOL,KAAK,eAAe,EAGrB,MAAM,UAAU,CAAC;AA2vClB,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"}
package/dist/lib/http.js CHANGED
@@ -1,119 +1,16 @@
1
1
  import { isUtf8 } from 'node:buffer';
2
- import { hash, randomUUID } from 'node:crypto';
2
+ import { randomUUID } from 'node:crypto';
3
3
  import diagnosticsChannel from 'node:diagnostics_channel';
4
- import {} from 'node:http';
5
- import { posix as pathPosix } from 'node:path';
6
4
  import { PassThrough, Readable } from 'node:stream';
7
5
  import { finished, pipeline } from 'node:stream/promises';
8
6
  import {} from 'node:stream/web';
9
7
  import tls from 'node:tls';
10
8
  import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
11
9
  import { Agent } from 'undici';
12
- import { z } from 'zod';
13
- import { parseCachedPayload, resolveCachedPayloadContent } from '../schemas.js';
14
- import { get as cacheGet, config, getOperationId, getRequestId, logDebug, logError, logWarn, redactUrl, } from './core.js';
10
+ import { config, getOperationId, getRequestId, logDebug, logError, logWarn, redactUrl, } from './core.js';
15
11
  import { isIP } from './url.js';
16
12
  import { BLOCKED_HOST_SUFFIXES, createDnsPreflight, IpBlocker, RawUrlTransformer, SafeDnsResolver, UrlNormalizer, VALIDATION_ERROR_CODE, } from './url.js';
17
13
  import { composeAbortSignal, createErrorWithCode, FetchError, isAbortError, isError, isObject, isSystemError, toError, } from './utils.js';
18
- import { formatZodError } from './zod.js';
19
- // ═══════════════════════════════════════════════════════════════════
20
- // FILENAME GENERATION & DOWNLOAD
21
- // ═══════════════════════════════════════════════════════════════════
22
- const FILENAME_RULES = {
23
- MAX_LEN: 200,
24
- UNSAFE_CHARS: /[<>:"/\\|?*\p{C}]/gu,
25
- WHITESPACE: /\s+/g,
26
- EXTENSIONS: /\.(html?|php|aspx?|jsp)$/i,
27
- };
28
- function sanitizeString(input) {
29
- return input
30
- .toLowerCase()
31
- .replace(FILENAME_RULES.UNSAFE_CHARS, '')
32
- .replace(FILENAME_RULES.WHITESPACE, '-')
33
- .replace(/-+/g, '-')
34
- .replace(/(?:^-|-$)/g, '');
35
- }
36
- function resolveUrlFilenameCandidate(url) {
37
- const parsed = new URL(url);
38
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:')
39
- return null;
40
- const basename = pathPosix.basename(parsed.pathname);
41
- if (!basename || basename === 'index')
42
- return null;
43
- const cleaned = basename.replace(FILENAME_RULES.EXTENSIONS, '');
44
- const sanitized = sanitizeString(cleaned);
45
- if (sanitized === 'index')
46
- return null;
47
- return sanitized || null;
48
- }
49
- function truncateFilenameBase(name, extension) {
50
- const maxBase = FILENAME_RULES.MAX_LEN - extension.length;
51
- return name.length > maxBase ? name.substring(0, maxBase) : name;
52
- }
53
- function resolveTitleFilenameCandidate(title) {
54
- if (!title)
55
- return null;
56
- return sanitizeString(title) || null;
57
- }
58
- function resolveFilenameBase(url, title, hashFallback) {
59
- try {
60
- const fromUrl = resolveUrlFilenameCandidate(url);
61
- if (fromUrl)
62
- return fromUrl;
63
- }
64
- catch {
65
- // Ignore URL parsing errors and continue fallbacks.
66
- }
67
- const fromTitle = resolveTitleFilenameCandidate(title);
68
- if (fromTitle)
69
- return fromTitle;
70
- if (hashFallback)
71
- return hashFallback.substring(0, 16);
72
- return `download-${hash('sha256', url, 'hex').substring(0, 16)}`;
73
- }
74
- export function generateSafeFilename(url, title, hashFallback, extension = '.md') {
75
- const name = resolveFilenameBase(url, title, hashFallback);
76
- return `${truncateFilenameBase(name, extension)}${extension}`;
77
- }
78
- const DownloadParamsSchema = z.strictObject({
79
- namespace: z.literal('markdown'),
80
- hash: z
81
- .string()
82
- .regex(/^[a-f0-9.]+$/i)
83
- .min(8)
84
- .max(64),
85
- });
86
- function writeJsonError(res, status, message, code) {
87
- res.writeHead(status, { 'Content-Type': 'application/json' });
88
- res.end(JSON.stringify({ error: message, code }));
89
- }
90
- export function handleDownload(res, namespace, hash) {
91
- const parsed = DownloadParamsSchema.safeParse({ namespace, hash });
92
- if (!parsed.success) {
93
- writeJsonError(res, 400, `Invalid download parameters: ${formatZodError(parsed.error)}`, 'BAD_REQUEST');
94
- return;
95
- }
96
- const cacheKey = `${parsed.data.namespace}:${parsed.data.hash}`;
97
- const entry = cacheGet(cacheKey, { force: true });
98
- if (!entry) {
99
- writeJsonError(res, 404, 'Not found or expired', 'NOT_FOUND');
100
- return;
101
- }
102
- const payload = parseCachedPayload(entry.content);
103
- const content = payload ? resolveCachedPayloadContent(payload) : null;
104
- if (!content) {
105
- writeJsonError(res, 404, 'Content missing', 'NOT_FOUND');
106
- return;
107
- }
108
- const fileName = generateSafeFilename(entry.url, payload?.title, parsed.data.hash);
109
- // Safe header generation — RFC 5987 encoding for non-ASCII filenames
110
- const encoded = encodeURIComponent(fileName).replace(/'/g, '%27');
111
- res.setHeader('Content-Type', 'text/markdown; charset=utf-8');
112
- res.setHeader('Content-Disposition', `attachment; filename="${fileName}"; filename*=UTF-8''${encoded}`);
113
- res.setHeader('Cache-Control', `private, max-age=${config.cache.ttl}`);
114
- res.setHeader('X-Content-Type-Options', 'nosniff');
115
- res.end(content);
116
- }
117
14
  // ═══════════════════════════════════════════════════════════════════
118
15
  // ENCODING DETECTION
119
16
  // ═══════════════════════════════════════════════════════════════════
@@ -434,9 +331,8 @@ function mapFetchError(error, fallbackUrl, timeoutMs) {
434
331
  if (isSystemError(error)) {
435
332
  return mapSystemError(error, url);
436
333
  }
437
- const err = error;
438
- const causeStr = err.cause instanceof Error ? err.cause.message : String(err.cause);
439
- return createFetchError({ kind: 'network', message: `${err.message}. Cause: ${causeStr}` }, url);
334
+ const causeStr = error.cause instanceof Error ? error.cause.message : String(error.cause);
335
+ return createFetchError({ kind: 'network', message: `${error.message}. Cause: ${causeStr}` }, url);
440
336
  }
441
337
  // ═══════════════════════════════════════════════════════════════════
442
338
  // REDIRECT FOLLOWING
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-interop.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-interop.ts"],"names":[],"mappings":"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"}
@@ -106,11 +106,13 @@ function isValidationError(error) {
106
106
  export function handleToolError(error, url, fallbackMessage = 'Operation failed') {
107
107
  if (error instanceof FetchError) {
108
108
  const { code: detailsCode, reason } = error.details;
109
- const code = (typeof detailsCode === 'string'
110
- ? detailsCode
111
- : reason === 'queue_full'
112
- ? 'queue_full'
113
- : undefined) ?? error.code;
109
+ let { code } = error;
110
+ if (typeof detailsCode === 'string') {
111
+ code = detailsCode;
112
+ }
113
+ else if (reason === 'queue_full') {
114
+ code = 'queue_full';
115
+ }
114
116
  const details = sanitizeToolErrorDetails(error.details);
115
117
  return createToolErrorResponse(error.message, url, {
116
118
  code,
@@ -129,6 +131,10 @@ export function handleToolError(error, url, fallbackMessage = 'Operation failed'
129
131
  : `${fallbackMessage}: Unknown error`;
130
132
  return createToolErrorResponse(message, url, { code });
131
133
  }
134
+ function getNestedRecord(value, key) {
135
+ const nested = value[key];
136
+ return isObject(nested) ? nested : undefined;
137
+ }
132
138
  const patchedCleanupServers = new WeakSet();
133
139
  const serverCleanupCallbacks = new WeakMap();
134
140
  function getServerCleanupCallbackSet(server) {
@@ -196,14 +202,10 @@ export function setTaskToolCallCapability(server, enabled) {
196
202
  const capabilities = Reflect.get(server.server, '_capabilities');
197
203
  if (!isObject(capabilities))
198
204
  return;
199
- const tasks = isObject(capabilities.tasks)
200
- ? capabilities.tasks
201
- : undefined;
205
+ const tasks = getNestedRecord(capabilities, 'tasks');
202
206
  if (!tasks)
203
207
  return;
204
- const requests = isObject(tasks.requests)
205
- ? tasks.requests
206
- : undefined;
208
+ const requests = getNestedRecord(tasks, 'requests');
207
209
  if (!requests)
208
210
  return;
209
211
  if (enabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAMxG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACrD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACxD,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,YAAY,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,EAAE,CAAC;IAC1D,WAAW,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;CAC7C;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAMD,KAAK,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GACnB,YAAY,CAWd;AA0FD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAErE;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAiBlE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;CAC/C,GAAG,OAAO,CAeV"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAMxG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,6BAA6B,CAAC;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACrD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;IACxD,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,YAAY,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,EAAE,CAAC;IAC1D,WAAW,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;CAC7C;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;CACvC;AAMD,KAAK,YAAY,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;AAE7C,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,YAAY,GACnB,YAAY,CAWd;AA0FD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAErE;AAMD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,WAAW,CAiBlE;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAMT;AAED,wBAAgB,qBAAqB,CAAC,EACpC,KAAK,EACL,WAAW,EACX,WAAW,GACZ,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC;CAC/C,GAAG,OAAO,CAUV"}
@@ -127,14 +127,10 @@ export function reserveSessionSlot(store, maxSessions) {
127
127
  export function ensureSessionCapacity({ store, maxSessions, evictOldest, }) {
128
128
  if (maxSessions <= 0)
129
129
  return false;
130
- const currentSize = store.size();
131
- const inflight = store.inFlight();
132
- if (currentSize + inflight < maxSessions)
130
+ if (store.size() + store.inFlight() < maxSessions)
133
131
  return true;
134
- const canFreeSlot = currentSize >= maxSessions && currentSize - 1 + inflight < maxSessions;
135
- if (!canFreeSlot)
136
- return false;
137
- if (!evictOldest(store))
138
- return false;
139
- return store.size() + store.inFlight() < maxSessions;
132
+ if (store.size() > 0 && evictOldest(store)) {
133
+ return store.size() + store.inFlight() < maxSessions;
134
+ }
135
+ return false;
140
136
  }
package/dist/lib/url.d.ts CHANGED
@@ -35,6 +35,7 @@ export declare class RawUrlTransformer {
35
35
  private isRawUrl;
36
36
  private splitParams;
37
37
  private tryTransformWithUrl;
38
+ private matchAndTransform;
38
39
  private transformGithubBlob;
39
40
  private transformGithubGist;
40
41
  private transformRawGist;
@@ -77,7 +78,6 @@ export declare class UrlNormalizer {
77
78
  };
78
79
  validateAndNormalize(urlString: string): string;
79
80
  private requireTrimmedUrl;
80
- private normalizeHostname;
81
81
  private assertHostnameAllowed;
82
82
  }
83
83
  export { isIP };
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/lib/url.ts"],"names":[],"mappings":"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"}