@j0hanz/superfetch 1.2.0 → 1.2.2
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/README.md +18 -204
- package/dist/config/constants.d.ts +0 -1
- package/dist/config/constants.js +0 -1
- package/dist/config/formatting.d.ts +0 -1
- package/dist/config/formatting.d.ts.map +1 -1
- package/dist/config/formatting.js +1 -3
- package/dist/config/formatting.js.map +1 -1
- package/dist/config/index.d.ts +1 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -11
- package/dist/config/index.js.map +1 -1
- package/dist/config/types/content.d.ts +0 -1
- package/dist/config/types/content.js +0 -1
- package/dist/config/types/runtime.d.ts +0 -1
- package/dist/config/types/runtime.js +0 -1
- package/dist/config/types/tools.d.ts +0 -1
- package/dist/config/types/tools.js +0 -1
- package/dist/errors/app-error.d.ts +0 -1
- package/dist/errors/app-error.js +0 -1
- package/dist/http/auth.d.ts +0 -1
- package/dist/http/auth.js +0 -1
- package/dist/http/cors.d.ts +0 -1
- package/dist/http/cors.js +0 -1
- package/dist/http/download-routes.d.ts +1 -2
- package/dist/http/download-routes.d.ts.map +1 -1
- package/dist/http/download-routes.js +2 -2
- package/dist/http/mcp-routes.d.ts +0 -1
- package/dist/http/mcp-routes.js +0 -1
- package/dist/http/mcp-session-helpers.d.ts +0 -1
- package/dist/http/mcp-session-helpers.js +0 -1
- package/dist/http/mcp-session.d.ts +1 -2
- package/dist/http/mcp-session.d.ts.map +1 -1
- package/dist/http/mcp-session.js +0 -1
- package/dist/http/mcp-validation.d.ts +1 -2
- package/dist/http/mcp-validation.d.ts.map +1 -1
- package/dist/http/mcp-validation.js +6 -27
- package/dist/http/mcp-validation.js.map +1 -1
- package/dist/http/rate-limit.d.ts +1 -2
- package/dist/http/rate-limit.d.ts.map +1 -1
- package/dist/http/rate-limit.js +0 -1
- package/dist/http/rate-limit.js.map +1 -1
- package/dist/http/server-middleware.d.ts +0 -1
- package/dist/http/server-middleware.d.ts.map +1 -1
- package/dist/http/server-middleware.js +60 -4
- package/dist/http/server-middleware.js.map +1 -1
- package/dist/http/server.d.ts +0 -1
- package/dist/http/server.js +0 -1
- package/dist/http/session-cleanup.d.ts +0 -1
- package/dist/http/session-cleanup.js +0 -1
- package/dist/http/sessions.d.ts +1 -2
- package/dist/http/sessions.d.ts.map +1 -1
- package/dist/http/sessions.js +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/middleware/error-handler.d.ts +0 -1
- package/dist/middleware/error-handler.js +0 -1
- package/dist/resources/cached-content.d.ts +0 -1
- package/dist/resources/cached-content.js +0 -1
- package/dist/resources/index.d.ts +0 -1
- package/dist/resources/index.js +0 -1
- package/dist/server.d.ts +0 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -3
- package/dist/server.js.map +1 -1
- package/dist/services/cache.d.ts +2 -2
- package/dist/services/cache.d.ts.map +1 -1
- package/dist/services/cache.js +4 -2
- package/dist/services/context.d.ts +2 -1
- package/dist/services/context.js +10 -1
- package/dist/services/extractor.d.ts +1 -2
- package/dist/services/extractor.d.ts.map +1 -1
- package/dist/services/extractor.js +0 -1
- package/dist/services/fetcher/agents.d.ts +0 -1
- package/dist/services/fetcher/agents.js +55 -2
- package/dist/services/fetcher/errors.d.ts +0 -1
- package/dist/services/fetcher/errors.js +0 -1
- package/dist/services/fetcher/interceptors.d.ts +0 -1
- package/dist/services/fetcher/interceptors.js +44 -24
- package/dist/services/fetcher/redirects.d.ts +0 -1
- package/dist/services/fetcher/redirects.js +2 -3
- package/dist/services/fetcher/response.d.ts +1 -2
- package/dist/services/fetcher/response.js +28 -16
- package/dist/services/fetcher/retry-policy.d.ts +0 -1
- package/dist/services/fetcher/retry-policy.js +0 -1
- package/dist/services/fetcher.d.ts +2 -2
- package/dist/services/fetcher.d.ts.map +1 -1
- package/dist/services/fetcher.js +9 -7
- package/dist/services/fetcher.js.map +1 -1
- package/dist/services/logger.d.ts +1 -2
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +0 -1
- package/dist/services/parser.d.ts +5 -2
- package/dist/services/parser.d.ts.map +1 -1
- package/dist/services/parser.js +72 -3
- package/dist/tools/handlers/fetch-markdown.tool.d.ts +1 -2
- package/dist/tools/handlers/fetch-markdown.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-markdown.tool.js +34 -3
- package/dist/tools/handlers/fetch-markdown.tool.js.map +1 -1
- package/dist/tools/handlers/fetch-single.shared.d.ts +5 -3
- package/dist/tools/handlers/fetch-single.shared.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-single.shared.js +8 -4
- package/dist/tools/handlers/fetch-single.shared.js.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.d.ts +1 -2
- package/dist/tools/handlers/fetch-url.tool.d.ts.map +1 -1
- package/dist/tools/handlers/fetch-url.tool.js +36 -3
- package/dist/tools/index.d.ts +0 -1
- package/dist/tools/index.js +0 -1
- package/dist/tools/schemas.d.ts +32 -33
- package/dist/tools/schemas.js +21 -5
- package/dist/tools/utils/cache-vary.d.ts +0 -1
- package/dist/tools/utils/cache-vary.d.ts.map +1 -1
- package/dist/tools/utils/cache-vary.js +7 -25
- package/dist/tools/utils/cache-vary.js.map +1 -1
- package/dist/tools/utils/common.d.ts +2 -3
- package/dist/tools/utils/common.d.ts.map +1 -1
- package/dist/tools/utils/common.js +6 -7
- package/dist/tools/utils/common.js.map +1 -1
- package/dist/tools/utils/content-transform.d.ts +1 -3
- package/dist/tools/utils/content-transform.d.ts.map +1 -1
- package/dist/tools/utils/content-transform.js +73 -8
- package/dist/tools/utils/content-transform.js.map +1 -1
- package/dist/tools/utils/fetch-pipeline.d.ts +1 -2
- package/dist/tools/utils/fetch-pipeline.d.ts.map +1 -1
- package/dist/tools/utils/fetch-pipeline.js +18 -22
- package/dist/tools/utils/inline-content.d.ts +0 -1
- package/dist/tools/utils/inline-content.js +0 -1
- package/dist/transformers/jsonl.transformer.d.ts +1 -2
- package/dist/transformers/jsonl.transformer.d.ts.map +1 -1
- package/dist/transformers/jsonl.transformer.js +0 -1
- package/dist/transformers/jsonl.transformer.js.map +1 -1
- package/dist/transformers/markdown.transformer.d.ts +1 -2
- package/dist/transformers/markdown.transformer.d.ts.map +1 -1
- package/dist/transformers/markdown.transformer.js +8 -1
- package/dist/utils/code-language.d.ts +0 -1
- package/dist/utils/code-language.js +0 -1
- package/dist/utils/content-cleaner.d.ts +0 -1
- package/dist/utils/content-cleaner.js +0 -1
- package/dist/utils/crypto.d.ts +0 -1
- package/dist/utils/crypto.js +0 -1
- package/dist/utils/download-url.d.ts +1 -2
- package/dist/utils/download-url.d.ts.map +1 -1
- package/dist/utils/download-url.js +0 -1
- package/dist/utils/error-utils.d.ts +0 -1
- package/dist/utils/error-utils.js +1 -3
- package/dist/utils/filename-generator.d.ts +0 -1
- package/dist/utils/filename-generator.js +0 -1
- package/dist/utils/header-normalizer.d.ts +0 -1
- package/dist/utils/header-normalizer.js +0 -1
- package/dist/utils/html-truncator.d.ts +0 -1
- package/dist/utils/html-truncator.js +0 -1
- package/dist/utils/sanitizer.d.ts +0 -1
- package/dist/utils/sanitizer.js +0 -1
- package/dist/utils/tool-error-handler.d.ts +1 -2
- package/dist/utils/tool-error-handler.d.ts.map +1 -1
- package/dist/utils/tool-error-handler.js +0 -1
- package/dist/utils/url-validator.d.ts +6 -3
- package/dist/utils/url-validator.d.ts.map +1 -1
- package/dist/utils/url-validator.js +49 -11
- package/dist/utils/url-validator.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export declare function readResponseText(response: Response, url: string, maxBytes: number): Promise<{
|
|
1
|
+
export declare function readResponseText(response: Response, url: string, maxBytes: number, signal?: AbortSignal): Promise<{
|
|
2
2
|
text: string;
|
|
3
3
|
size: number;
|
|
4
4
|
}>;
|
|
5
|
-
//# sourceMappingURL=response.d.ts.map
|
|
@@ -9,31 +9,43 @@ function assertContentLengthWithinLimit(response, url, maxBytes) {
|
|
|
9
9
|
}
|
|
10
10
|
throw new FetchError(`Response exceeds maximum size of ${maxBytes} bytes`, url);
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
function throwIfReadAborted(url, signal) {
|
|
13
|
+
if (!signal?.aborted)
|
|
14
|
+
return;
|
|
15
|
+
throw new FetchError('Request was aborted during response read', url, 499, {
|
|
16
|
+
reason: 'aborted',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function readStreamWithLimit(stream, url, maxBytes, signal) {
|
|
13
20
|
const reader = stream.getReader();
|
|
14
21
|
const decoder = new TextDecoder();
|
|
15
22
|
let total = 0;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const chunks = [];
|
|
24
|
+
try {
|
|
25
|
+
for (;;) {
|
|
26
|
+
throwIfReadAborted(url, signal);
|
|
27
|
+
const { value, done } = await reader.read();
|
|
28
|
+
if (done)
|
|
29
|
+
break;
|
|
30
|
+
total += value.byteLength;
|
|
31
|
+
if (total > maxBytes) {
|
|
32
|
+
await reader.cancel();
|
|
33
|
+
throw new FetchError(`Response exceeds maximum size of ${maxBytes} bytes`, url);
|
|
34
|
+
}
|
|
35
|
+
chunks.push(decoder.decode(value, { stream: true }));
|
|
25
36
|
}
|
|
26
|
-
|
|
37
|
+
chunks.push(decoder.decode());
|
|
38
|
+
return { text: chunks.join(''), size: total };
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
reader.releaseLock();
|
|
27
42
|
}
|
|
28
|
-
text += decoder.decode();
|
|
29
|
-
return { text, size: total };
|
|
30
43
|
}
|
|
31
|
-
export async function readResponseText(response, url, maxBytes) {
|
|
44
|
+
export async function readResponseText(response, url, maxBytes, signal) {
|
|
32
45
|
assertContentLengthWithinLimit(response, url, maxBytes);
|
|
33
46
|
if (!response.body) {
|
|
34
47
|
const text = await response.text();
|
|
35
48
|
return { text, size: Buffer.byteLength(text) };
|
|
36
49
|
}
|
|
37
|
-
return readStreamWithLimit(response.body, url, maxBytes);
|
|
50
|
+
return readStreamWithLimit(response.body, url, maxBytes, signal);
|
|
38
51
|
}
|
|
39
|
-
//# sourceMappingURL=response.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { FetchOptions } from '../config/types.js';
|
|
1
|
+
import type { FetchOptions } from '../config/types/runtime.js';
|
|
2
2
|
import { destroyAgents } from './fetcher/agents.js';
|
|
3
3
|
export { destroyAgents };
|
|
4
4
|
export declare function fetchUrlWithRetry(url: string, options?: FetchOptions, maxRetries?: number): Promise<string>;
|
|
5
|
-
|
|
5
|
+
export declare function fetchNormalizedUrlWithRetry(normalizedUrl: string, options?: FetchOptions, maxRetries?: number): Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EAAE,aAAa,EAAc,MAAM,qBAAqB,CAAC;AAehE,OAAO,EAAE,aAAa,EAAE,CAAC;AA8FzB,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,YAAY,EACtB,UAAU,SAAI,GACb,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
package/dist/services/fetcher.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { config } from '../config/index.js';
|
|
2
|
+
import { normalizeHeaderRecord } from '../utils/header-normalizer.js';
|
|
2
3
|
import { validateAndNormalizeUrl } from '../utils/url-validator.js';
|
|
3
4
|
import { destroyAgents, dispatcher } from './fetcher/agents.js';
|
|
4
5
|
import { createHttpError, createRateLimitError, mapFetchError, } from './fetcher/errors.js';
|
|
5
|
-
import { sanitizeHeaders } from './fetcher/headers.js';
|
|
6
6
|
import { recordFetchError, recordFetchResponse, startFetchTelemetry, } from './fetcher/interceptors.js';
|
|
7
7
|
import { fetchWithRedirects } from './fetcher/redirects.js';
|
|
8
8
|
import { readResponseText } from './fetcher/response.js';
|
|
@@ -17,7 +17,7 @@ const DEFAULT_HEADERS = {
|
|
|
17
17
|
};
|
|
18
18
|
function buildHeaders(customHeaders) {
|
|
19
19
|
const headers = new Headers(DEFAULT_HEADERS);
|
|
20
|
-
const sanitized =
|
|
20
|
+
const sanitized = normalizeHeaderRecord(customHeaders, config.security.blockedHeaders);
|
|
21
21
|
if (sanitized) {
|
|
22
22
|
for (const [key, value] of Object.entries(sanitized)) {
|
|
23
23
|
headers.set(key, value);
|
|
@@ -39,7 +39,7 @@ function buildRequestInit(headers, signal) {
|
|
|
39
39
|
dispatcher,
|
|
40
40
|
};
|
|
41
41
|
}
|
|
42
|
-
async function handleFetchResponse(response, finalUrl, telemetry) {
|
|
42
|
+
async function handleFetchResponse(response, finalUrl, telemetry, signal) {
|
|
43
43
|
if (response.status === 429) {
|
|
44
44
|
void response.body?.cancel();
|
|
45
45
|
throw createRateLimitError(finalUrl, response.headers.get('retry-after'));
|
|
@@ -48,7 +48,7 @@ async function handleFetchResponse(response, finalUrl, telemetry) {
|
|
|
48
48
|
void response.body?.cancel();
|
|
49
49
|
throw createHttpError(finalUrl, response.status, response.statusText);
|
|
50
50
|
}
|
|
51
|
-
const { text, size } = await readResponseText(response, finalUrl, config.fetcher.maxContentLength);
|
|
51
|
+
const { text, size } = await readResponseText(response, finalUrl, config.fetcher.maxContentLength, signal);
|
|
52
52
|
recordFetchResponse(telemetry, response, size);
|
|
53
53
|
return text;
|
|
54
54
|
}
|
|
@@ -57,7 +57,7 @@ async function fetchWithTelemetry(normalizedUrl, requestInit, timeoutMs) {
|
|
|
57
57
|
try {
|
|
58
58
|
const { response, url: finalUrl } = await fetchWithRedirects(normalizedUrl, requestInit, config.fetcher.maxRedirects);
|
|
59
59
|
telemetry.url = finalUrl;
|
|
60
|
-
return await handleFetchResponse(response, finalUrl, telemetry);
|
|
60
|
+
return await handleFetchResponse(response, finalUrl, telemetry, requestInit.signal ?? undefined);
|
|
61
61
|
}
|
|
62
62
|
catch (error) {
|
|
63
63
|
const mapped = mapFetchError(error, normalizedUrl, timeoutMs);
|
|
@@ -67,7 +67,10 @@ async function fetchWithTelemetry(normalizedUrl, requestInit, timeoutMs) {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
export async function fetchUrlWithRetry(url, options, maxRetries = 3) {
|
|
70
|
-
const normalizedUrl = validateAndNormalizeUrl(url);
|
|
70
|
+
const normalizedUrl = await validateAndNormalizeUrl(url);
|
|
71
|
+
return fetchNormalizedUrlWithRetry(normalizedUrl, options, maxRetries);
|
|
72
|
+
}
|
|
73
|
+
export async function fetchNormalizedUrlWithRetry(normalizedUrl, options, maxRetries = 3) {
|
|
71
74
|
const context = buildRequestContext(options);
|
|
72
75
|
return executeWithRetry(normalizedUrl, maxRetries, async () => runFetch(normalizedUrl, context), context.signal);
|
|
73
76
|
}
|
|
@@ -83,4 +86,3 @@ async function runFetch(normalizedUrl, context) {
|
|
|
83
86
|
const requestInit = buildRequestInit(context.headers, signal);
|
|
84
87
|
return fetchWithTelemetry(normalizedUrl, requestInit, context.timeoutMs);
|
|
85
88
|
}
|
|
86
|
-
//# sourceMappingURL=fetcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/services/fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { LogMetadata } from '../config/types.js';
|
|
1
|
+
import type { LogMetadata } from '../config/types/runtime.js';
|
|
2
2
|
export declare function logInfo(message: string, meta?: LogMetadata): void;
|
|
3
3
|
export declare function logDebug(message: string, meta?: LogMetadata): void;
|
|
4
4
|
export declare function logWarn(message: string, meta?: LogMetadata): void;
|
|
5
5
|
export declare function logError(message: string, error?: Error | LogMetadata): void;
|
|
6
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAkCxE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIlE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,IAAI,CAIjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG,IAAI,CAS3E"}
|
package/dist/services/logger.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import type { ContentBlockUnion } from '../config/types.js';
|
|
1
|
+
import type { ContentBlockUnion, ExtractedMetadata } from '../config/types/content.js';
|
|
2
2
|
export declare function parseHtml(html: string): ContentBlockUnion[];
|
|
3
|
-
|
|
3
|
+
export declare function parseHtmlWithMetadata(html: string): {
|
|
4
|
+
blocks: ContentBlockUnion[];
|
|
5
|
+
metadata: ExtractedMetadata;
|
|
6
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/services/parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,iBAAiB,EAOlB,MAAM,
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/services/parser.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAGV,iBAAiB,EAOlB,MAAM,4BAA4B,CAAC;AAoPpC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAS3D"}
|
package/dist/services/parser.js
CHANGED
|
@@ -7,6 +7,60 @@ import { truncateHtml } from '../utils/html-truncator.js';
|
|
|
7
7
|
import { sanitizeText } from '../utils/sanitizer.js';
|
|
8
8
|
import { logWarn } from './logger.js';
|
|
9
9
|
const CONTENT_SELECTOR = 'h1, h2, h3, h4, h5, h6, p, ul, ol, pre, code:not(pre code), table, img, blockquote';
|
|
10
|
+
function createMetaCollectorState() {
|
|
11
|
+
return {
|
|
12
|
+
title: {},
|
|
13
|
+
description: {},
|
|
14
|
+
author: {},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function resolveMetaField(state, field) {
|
|
18
|
+
const sources = state[field];
|
|
19
|
+
return sources.og ?? sources.twitter ?? sources.standard;
|
|
20
|
+
}
|
|
21
|
+
function extractMetadata($) {
|
|
22
|
+
const state = createMetaCollectorState();
|
|
23
|
+
$('meta').each((_, element) => {
|
|
24
|
+
const content = $(element).attr('content')?.trim();
|
|
25
|
+
if (!content)
|
|
26
|
+
return;
|
|
27
|
+
const property = $(element).attr('property');
|
|
28
|
+
if (property?.startsWith('og:')) {
|
|
29
|
+
const key = property.replace('og:', '');
|
|
30
|
+
if (key === 'title')
|
|
31
|
+
state.title.og = content;
|
|
32
|
+
if (key === 'description')
|
|
33
|
+
state.description.og = content;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const name = $(element).attr('name');
|
|
37
|
+
if (name?.startsWith('twitter:')) {
|
|
38
|
+
const key = name.replace('twitter:', '');
|
|
39
|
+
if (key === 'title')
|
|
40
|
+
state.title.twitter = content;
|
|
41
|
+
if (key === 'description')
|
|
42
|
+
state.description.twitter = content;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (name === 'description') {
|
|
46
|
+
state.description.standard = content;
|
|
47
|
+
}
|
|
48
|
+
if (name === 'author') {
|
|
49
|
+
state.author.standard = content;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (!state.title.standard) {
|
|
53
|
+
const titleText = $('title').first().text().trim();
|
|
54
|
+
if (titleText) {
|
|
55
|
+
state.title.standard = titleText;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
title: resolveMetaField(state, 'title'),
|
|
60
|
+
description: resolveMetaField(state, 'description'),
|
|
61
|
+
author: resolveMetaField(state, 'author'),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
10
64
|
function parseHeading($, element) {
|
|
11
65
|
const rawText = sanitizeText($(element).text());
|
|
12
66
|
const text = cleanHeading(rawText);
|
|
@@ -173,6 +227,10 @@ function loadHtml(html) {
|
|
|
173
227
|
return null;
|
|
174
228
|
}
|
|
175
229
|
}
|
|
230
|
+
function prepareCheerio(html) {
|
|
231
|
+
const processedHtml = truncateHtml(html);
|
|
232
|
+
return loadHtml(processedHtml);
|
|
233
|
+
}
|
|
176
234
|
function removeNoiseElements($) {
|
|
177
235
|
$('script, style, noscript, iframe, svg').remove();
|
|
178
236
|
}
|
|
@@ -198,11 +256,22 @@ function safeParseElement($, element) {
|
|
|
198
256
|
export function parseHtml(html) {
|
|
199
257
|
if (!html || typeof html !== 'string')
|
|
200
258
|
return [];
|
|
201
|
-
const
|
|
202
|
-
const $ = loadHtml(processedHtml);
|
|
259
|
+
const $ = prepareCheerio(html);
|
|
203
260
|
if (!$)
|
|
204
261
|
return [];
|
|
205
262
|
removeNoiseElements($);
|
|
206
263
|
return filterBlocks(collectBlocks($));
|
|
207
264
|
}
|
|
208
|
-
|
|
265
|
+
export function parseHtmlWithMetadata(html) {
|
|
266
|
+
if (!html || typeof html !== 'string') {
|
|
267
|
+
return { blocks: [], metadata: {} };
|
|
268
|
+
}
|
|
269
|
+
const $ = prepareCheerio(html);
|
|
270
|
+
if (!$) {
|
|
271
|
+
return { blocks: [], metadata: {} };
|
|
272
|
+
}
|
|
273
|
+
const metadata = extractMetadata($);
|
|
274
|
+
removeNoiseElements($);
|
|
275
|
+
const blocks = filterBlocks(collectBlocks($));
|
|
276
|
+
return { blocks, metadata };
|
|
277
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { FetchMarkdownInput, ToolResponseBase } from '../../config/types.js';
|
|
1
|
+
import type { FetchMarkdownInput, ToolResponseBase } from '../../config/types/tools.js';
|
|
2
2
|
export declare const FETCH_MARKDOWN_TOOL_NAME = "fetch-markdown";
|
|
3
3
|
export declare const FETCH_MARKDOWN_TOOL_DESCRIPTION = "Fetches a webpage and converts it to clean Markdown format with optional frontmatter and content length limits";
|
|
4
4
|
export declare function fetchMarkdownToolHandler(input: FetchMarkdownInput): Promise<ToolResponseBase>;
|
|
5
|
-
//# sourceMappingURL=fetch-markdown.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-markdown.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-markdown.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAElB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAuBrC,eAAO,MAAM,wBAAwB,mBAAmB,CAAC;AACzD,eAAO,MAAM,+BAA+B,mHACsE,CAAC;AA0GnH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
|
|
@@ -1,13 +1,44 @@
|
|
|
1
|
+
import { config } from '../../config/index.js';
|
|
1
2
|
import { logDebug, logError } from '../../services/logger.js';
|
|
2
3
|
import { createToolErrorResponse, handleToolError, } from '../../utils/tool-error-handler.js';
|
|
3
4
|
import { transformHtmlToMarkdown } from '../utils/content-transform.js';
|
|
4
5
|
import { applyInlineResultToStructuredContent, buildToolContentBlocks, getFileDownloadInfo, getInlineErrorResponse, performSharedFetch, } from './fetch-single.shared.js';
|
|
5
6
|
export const FETCH_MARKDOWN_TOOL_NAME = 'fetch-markdown';
|
|
6
7
|
export const FETCH_MARKDOWN_TOOL_DESCRIPTION = 'Fetches a webpage and converts it to clean Markdown format with optional frontmatter and content length limits';
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return value !== null && typeof value === 'object';
|
|
10
|
+
}
|
|
11
|
+
function deserializeMarkdownPipelineResult(cached) {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(cached);
|
|
14
|
+
if (!isRecord(parsed))
|
|
15
|
+
return undefined;
|
|
16
|
+
const { content, markdown, title, truncated } = parsed;
|
|
17
|
+
if (typeof content !== 'string')
|
|
18
|
+
return undefined;
|
|
19
|
+
if (typeof markdown !== 'string')
|
|
20
|
+
return undefined;
|
|
21
|
+
if (title !== undefined && typeof title !== 'string')
|
|
22
|
+
return undefined;
|
|
23
|
+
if (truncated !== undefined && typeof truncated !== 'boolean') {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const resolvedTitle = typeof title === 'string' ? title : undefined;
|
|
27
|
+
return {
|
|
28
|
+
content,
|
|
29
|
+
markdown,
|
|
30
|
+
title: resolvedTitle,
|
|
31
|
+
truncated: truncated ?? false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
7
38
|
function resolveMarkdownOptions(input) {
|
|
8
39
|
return {
|
|
9
|
-
extractMainContent: input.extractMainContent ??
|
|
10
|
-
includeMetadata: input.includeMetadata ??
|
|
40
|
+
extractMainContent: input.extractMainContent ?? config.extraction.extractMainContent,
|
|
41
|
+
includeMetadata: input.includeMetadata ?? config.extraction.includeMetadata,
|
|
11
42
|
maxContentLength: input.maxContentLength,
|
|
12
43
|
};
|
|
13
44
|
}
|
|
@@ -48,6 +79,7 @@ async function fetchMarkdownPipeline(url, input, options, transformOptions) {
|
|
|
48
79
|
retries: input.retries,
|
|
49
80
|
timeout: input.timeout,
|
|
50
81
|
transform: buildMarkdownTransform(transformOptions),
|
|
82
|
+
deserialize: deserializeMarkdownPipelineResult,
|
|
51
83
|
});
|
|
52
84
|
}
|
|
53
85
|
function buildMarkdownResponse(pipeline, inlineResult, fileDownload) {
|
|
@@ -87,4 +119,3 @@ async function executeFetchMarkdown(input) {
|
|
|
87
119
|
: null;
|
|
88
120
|
return buildMarkdownResponse(pipeline, inlineResult, fileDownload);
|
|
89
121
|
}
|
|
90
|
-
//# sourceMappingURL=fetch-markdown.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-markdown.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-markdown.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-markdown.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { PipelineResult, ToolContentBlock
|
|
2
|
-
import type { FileDownloadInfo } from '../../config/types.js';
|
|
1
|
+
import type { PipelineResult, ToolContentBlock } from '../../config/types/runtime.js';
|
|
2
|
+
import type { FileDownloadInfo, ToolResponseBase } from '../../config/types/tools.js';
|
|
3
3
|
import { applyInlineContentLimit } from '../utils/inline-content.js';
|
|
4
4
|
type SharedFetchFormat = 'jsonl' | 'markdown';
|
|
5
5
|
interface SharedFetchOptions<T extends {
|
|
@@ -10,10 +10,13 @@ interface SharedFetchOptions<T extends {
|
|
|
10
10
|
readonly extractMainContent: boolean;
|
|
11
11
|
readonly includeMetadata: boolean;
|
|
12
12
|
readonly maxContentLength?: number;
|
|
13
|
+
readonly cacheVariant?: string;
|
|
13
14
|
readonly customHeaders?: Record<string, string>;
|
|
14
15
|
readonly retries?: number;
|
|
15
16
|
readonly timeout?: number;
|
|
16
17
|
readonly transform: (html: string, normalizedUrl: string) => T;
|
|
18
|
+
readonly serialize?: (result: T) => string;
|
|
19
|
+
readonly deserialize?: (cached: string) => T | undefined;
|
|
17
20
|
}
|
|
18
21
|
export declare function performSharedFetch<T extends {
|
|
19
22
|
content: string;
|
|
@@ -32,4 +35,3 @@ export declare function getInlineErrorResponse(inlineResult: InlineResult, url:
|
|
|
32
35
|
export declare function applyInlineResultToStructuredContent(structuredContent: Record<string, unknown>, inlineResult: InlineResult, contentKey: string): void;
|
|
33
36
|
export declare function buildToolContentBlocks(structuredContent: Record<string, unknown>, fromCache: boolean, inlineResult: InlineResult, resourceName: string, cacheKey?: string | null, fullContent?: string, format?: SharedFetchFormat, url?: string, title?: string): ToolContentBlock[];
|
|
34
37
|
export {};
|
|
35
|
-
//# sourceMappingURL=fetch-single.shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-single.shared.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"fetch-single.shared.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EACjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE,KAAK,iBAAiB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE9C,UAAU,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC,CAAC;CAChE;AAED,wBAAsB,kBAAkB,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EACpE,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAC7B,OAAO,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,YAAY,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CAC1D,CAAC,CA8BD;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtE,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,eAAe,GACvB,gBAAgB,GAAG,IAAI,CAMzB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,MAAM,GACV,gBAAgB,GAAG,IAAI,CAGzB;AAED,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,MAAM,GACjB,IAAI,CAaN;AAyDD,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,iBAAiB,EAC1B,GAAG,CAAC,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,gBAAgB,EAAE,CA+BpB"}
|
|
@@ -12,6 +12,7 @@ export async function performSharedFetch(options) {
|
|
|
12
12
|
extractMainContent: options.extractMainContent,
|
|
13
13
|
includeMetadata: options.includeMetadata,
|
|
14
14
|
maxContentLength: options.maxContentLength,
|
|
15
|
+
...(options.cacheVariant ? { variant: options.cacheVariant } : {}),
|
|
15
16
|
...(options.format === 'markdown' ? {} : { contentBlocks: true }),
|
|
16
17
|
}, options.customHeaders);
|
|
17
18
|
const pipeline = await executeFetchPipeline({
|
|
@@ -22,6 +23,8 @@ export async function performSharedFetch(options) {
|
|
|
22
23
|
timeout: options.timeout,
|
|
23
24
|
cacheVary,
|
|
24
25
|
transform: options.transform,
|
|
26
|
+
serialize: options.serialize,
|
|
27
|
+
deserialize: options.deserialize,
|
|
25
28
|
});
|
|
26
29
|
const inlineResult = applyInlineContentLimit(pipeline.data.content, pipeline.cacheKey ?? null, options.format);
|
|
27
30
|
return { pipeline, inlineResult };
|
|
@@ -89,10 +92,12 @@ export function buildToolContentBlocks(structuredContent, fromCache, inlineResul
|
|
|
89
92
|
text: serializeStructuredContent(structuredContent, fromCache),
|
|
90
93
|
};
|
|
91
94
|
const blocks = [textBlock];
|
|
92
|
-
//
|
|
95
|
+
// Embed full content in stdio mode; HTTP mode relies on inline content or links.
|
|
93
96
|
const mimeType = format === 'markdown' ? 'text/markdown' : 'application/jsonl';
|
|
94
|
-
const contentToEmbed =
|
|
95
|
-
|
|
97
|
+
const contentToEmbed = config.runtime.httpMode
|
|
98
|
+
? inlineResult.content
|
|
99
|
+
: (fullContent ?? inlineResult.content);
|
|
100
|
+
if (typeof contentToEmbed === 'string' && url) {
|
|
96
101
|
const embeddedResource = buildEmbeddedResource(contentToEmbed, mimeType, url, title);
|
|
97
102
|
if (embeddedResource) {
|
|
98
103
|
blocks.push(embeddedResource);
|
|
@@ -105,4 +110,3 @@ export function buildToolContentBlocks(structuredContent, fromCache, inlineResul
|
|
|
105
110
|
}
|
|
106
111
|
return blocks;
|
|
107
112
|
}
|
|
108
|
-
//# sourceMappingURL=fetch-single.shared.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-single.shared.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-single.shared.js","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-single.shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { FetchUrlInput, ToolResponseBase } from '../../config/types.js';
|
|
1
|
+
import type { FetchUrlInput, ToolResponseBase } from '../../config/types/tools.js';
|
|
2
2
|
export declare const FETCH_URL_TOOL_NAME = "fetch-url";
|
|
3
3
|
export declare const FETCH_URL_TOOL_DESCRIPTION = "Fetches a webpage and converts it to AI-readable JSONL format with semantic content blocks. Supports custom headers, retries, and content length limits.";
|
|
4
4
|
export declare function fetchUrlToolHandler(input: FetchUrlInput): Promise<ToolResponseBase>;
|
|
5
|
-
//# sourceMappingURL=fetch-url.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-url.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-url.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/fetch-url.tool.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAqBrC,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,0BAA0B,6JACqH,CAAC;AAoH7J,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAU3B"}
|
|
@@ -1,13 +1,45 @@
|
|
|
1
|
+
import { config } from '../../config/index.js';
|
|
1
2
|
import { logDebug, logError } from '../../services/logger.js';
|
|
2
3
|
import { createToolErrorResponse, handleToolError, } from '../../utils/tool-error-handler.js';
|
|
3
4
|
import { transformHtmlToJsonl, transformHtmlToMarkdownWithBlocks, } from '../utils/content-transform.js';
|
|
4
5
|
import { applyInlineResultToStructuredContent, buildToolContentBlocks, getInlineErrorResponse, performSharedFetch, } from './fetch-single.shared.js';
|
|
5
6
|
export const FETCH_URL_TOOL_NAME = 'fetch-url';
|
|
6
7
|
export const FETCH_URL_TOOL_DESCRIPTION = 'Fetches a webpage and converts it to AI-readable JSONL format with semantic content blocks. Supports custom headers, retries, and content length limits.';
|
|
8
|
+
function isRecord(value) {
|
|
9
|
+
return value !== null && typeof value === 'object';
|
|
10
|
+
}
|
|
11
|
+
function deserializeJsonlTransformResult(cached) {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(cached);
|
|
14
|
+
if (!isRecord(parsed))
|
|
15
|
+
return undefined;
|
|
16
|
+
const { content, contentBlocks, title, truncated } = parsed;
|
|
17
|
+
if (typeof content !== 'string')
|
|
18
|
+
return undefined;
|
|
19
|
+
if (typeof contentBlocks !== 'number' || !Number.isFinite(contentBlocks)) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
if (title !== undefined && typeof title !== 'string')
|
|
23
|
+
return undefined;
|
|
24
|
+
if (truncated !== undefined && typeof truncated !== 'boolean') {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const resolvedTitle = typeof title === 'string' ? title : undefined;
|
|
28
|
+
return {
|
|
29
|
+
content,
|
|
30
|
+
contentBlocks,
|
|
31
|
+
title: resolvedTitle,
|
|
32
|
+
...(truncated !== undefined ? { truncated } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
7
39
|
function resolveFetchUrlOptions(input) {
|
|
8
40
|
return {
|
|
9
|
-
extractMainContent: input.extractMainContent ??
|
|
10
|
-
includeMetadata: input.includeMetadata ??
|
|
41
|
+
extractMainContent: input.extractMainContent ?? config.extraction.extractMainContent,
|
|
42
|
+
includeMetadata: input.includeMetadata ?? config.extraction.includeMetadata,
|
|
11
43
|
maxContentLength: input.maxContentLength,
|
|
12
44
|
format: input.format ?? 'jsonl',
|
|
13
45
|
};
|
|
@@ -54,7 +86,9 @@ async function fetchUrlPipeline(url, input, options) {
|
|
|
54
86
|
customHeaders: input.customHeaders,
|
|
55
87
|
retries: input.retries,
|
|
56
88
|
timeout: input.timeout,
|
|
89
|
+
cacheVariant: options.format === 'markdown' ? 'markdown-with-blocks' : undefined,
|
|
57
90
|
transform: buildFetchUrlTransform(options),
|
|
91
|
+
deserialize: deserializeJsonlTransformResult,
|
|
58
92
|
});
|
|
59
93
|
}
|
|
60
94
|
function buildFetchUrlResponse(pipeline, inlineResult, format) {
|
|
@@ -86,4 +120,3 @@ async function executeFetchUrl(input) {
|
|
|
86
120
|
return inlineError;
|
|
87
121
|
return buildFetchUrlResponse(pipeline, inlineResult, options.format);
|
|
88
122
|
}
|
|
89
|
-
//# sourceMappingURL=fetch-url.tool.js.map
|
package/dist/tools/index.d.ts
CHANGED
package/dist/tools/index.js
CHANGED