smart-web-mcp 1.3.0 → 1.3.1
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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
|
+
* Consume validated public provider responses in one bounded GET rather than discarding a first successful body and requesting it again. Redirects still receive per-hop URL/origin checks, cross-origin headers are stripped, and JSON parser errors remain failures; a provider's actual 429 remains unavailable, not a recovered page.
|
|
8
9
|
* Expose existing bounded private pre-projection comment export through explicit CLI `fetch --export-comments`; reject caller-selected paths and preserve partial inline delivery. A complete source export does not make unavailable comments readable.
|
|
9
10
|
* Preserve declared-versus-collected Reddit comment coverage for public JSON and archived threads. A readable post with fewer returned comments than its source declares remains partial, even without inline clipping; this does not recover inaccessible comments.
|
|
10
11
|
* Deliver validated Hacker News API reply trees as flat, parent-linked comment rows before inline projection or private export. Counts now refer to addressable replies, not just roots; bounded inline output still marks omitted rows partial.
|
|
@@ -406,6 +407,13 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
406
407
|
- Korean public API helpers now validate outbound URLs and redirects before fetching, blocking localhost, private, and reserved targets unless `network.allowPrivateHosts` is explicitly enabled.
|
|
407
408
|
- CI now declares read-only default repository permissions, Dependabot auto-merge pins the reusable workflow without forwarding all caller secrets, and the workflow check enforces those guards.
|
|
408
409
|
|
|
410
|
+
## [1.3.1](https://github.com/jojo-labs/smart-web/compare/v1.3.0...v1.3.1) (2026-10-03)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
### Bug Fixes
|
|
414
|
+
|
|
415
|
+
* consume validated provider responses once ([#699](https://github.com/jojo-labs/smart-web/issues/699)) ([8ca64d2](https://github.com/jojo-labs/smart-web/commit/8ca64d2f001b4fa2eb0eb5aa76b235332d57b808))
|
|
416
|
+
|
|
409
417
|
## [1.3.0](https://github.com/jojo-labs/smart-web/compare/v1.2.4...v1.3.0) (2026-10-03)
|
|
410
418
|
|
|
411
419
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { configEnabled,
|
|
1
|
+
import { configEnabled, validateOutboundUrl } from "../shared.js";
|
|
2
2
|
function localOnlyMode() {
|
|
3
3
|
return configEnabled("network.localOnly", false, { private: true });
|
|
4
4
|
}
|
|
@@ -60,40 +60,42 @@ async function enforcePolicy(url, options) {
|
|
|
60
60
|
return { ok: true };
|
|
61
61
|
}
|
|
62
62
|
export async function fetchProviderText(url, timeoutMs, init, options) {
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
ok
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
63
|
+
const controller = new AbortController();
|
|
64
|
+
const signal = init?.signal ? AbortSignal.any([init.signal, controller.signal]) : controller.signal;
|
|
65
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
66
|
+
let current = url;
|
|
67
|
+
try {
|
|
68
|
+
for (let hop = 0; hop <= 5; hop++) {
|
|
69
|
+
signal.throwIfAborted();
|
|
70
|
+
const allowed = await enforcePolicy(current, options);
|
|
71
|
+
if (!allowed.ok)
|
|
72
|
+
return { ok: false, status: 0, text: "", error: allowed.error };
|
|
73
|
+
signal.throwIfAborted();
|
|
74
|
+
const headers = isSameOrigin(current, url) ? init?.headers : sanitizeCrossOriginRedirectHeaders(init?.headers);
|
|
75
|
+
const response = await fetch(current, { ...init, ...(headers ? { headers } : {}), signal, redirect: "manual" });
|
|
76
|
+
if ([301, 302, 303, 307, 308].includes(response.status)) {
|
|
77
|
+
const location = response.headers.get("location");
|
|
78
|
+
void response.body?.cancel().catch(() => { });
|
|
79
|
+
if (hop === 5)
|
|
80
|
+
return { ok: false, status: response.status, text: "", error: { category: "block", code: "too_many_redirects", message: "Too many provider redirects" } };
|
|
81
|
+
if (!location)
|
|
82
|
+
return { ok: false, status: response.status, text: "", error: { category: "block", code: "redirect_missing_location", message: "Provider redirect omitted Location" } };
|
|
83
|
+
current = new URL(location, current).toString();
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const text = await response.text();
|
|
87
|
+
if (!response.ok)
|
|
88
|
+
return { ok: false, status: response.status, text, error: { category: "unavailable", code: "provider_fetch_failed", message: `status=${response.status}` } };
|
|
89
|
+
return { ok: true, status: response.status, text, final_url: current };
|
|
90
|
+
}
|
|
91
|
+
return { ok: false, status: 0, text: "", error: { category: "block", code: "too_many_redirects", message: "Too many provider redirects" } };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return { ok: false, status: 0, text: "", error: { category: "unavailable", code: "provider_fetch_failed", message: error instanceof Error ? error.message : String(error) } };
|
|
86
95
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
return {
|
|
90
|
-
ok: false,
|
|
91
|
-
status: result.status,
|
|
92
|
-
text: result.text,
|
|
93
|
-
error: { category: "unavailable", code: "provider_fetch_failed", message: result.error || `status=${result.status}` },
|
|
94
|
-
};
|
|
96
|
+
finally {
|
|
97
|
+
clearTimeout(timer);
|
|
95
98
|
}
|
|
96
|
-
return { ok: true, status: result.status, text: result.text, final_url: resolved.url };
|
|
97
99
|
}
|
|
98
100
|
export async function fetchProviderJson(url, timeoutMs, init, options) {
|
|
99
101
|
if (options.deadlineAt === undefined)
|
|
@@ -131,49 +133,16 @@ async function fetchProviderJsonAttempt(url, timeoutMs, init, options) {
|
|
|
131
133
|
const expired = () => init?.signal?.aborted || (options.deadlineAt !== undefined && Date.now() >= options.deadlineAt);
|
|
132
134
|
if (expired())
|
|
133
135
|
return providerDeadlineFailure();
|
|
134
|
-
const
|
|
136
|
+
const result = await fetchProviderText(url, timeoutMs, init, options);
|
|
135
137
|
if (expired())
|
|
136
138
|
return providerDeadlineFailure();
|
|
137
|
-
if (!
|
|
138
|
-
return {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
const resolved = await resolveValidatedUrl(url, resolveOptions);
|
|
142
|
-
if (expired())
|
|
143
|
-
return providerDeadlineFailure();
|
|
144
|
-
if (!resolved.ok) {
|
|
145
|
-
return {
|
|
146
|
-
ok: false,
|
|
147
|
-
status: 0,
|
|
148
|
-
text: "",
|
|
149
|
-
data: null,
|
|
150
|
-
error: { category: "block", code: resolved.reason, message: resolved.message },
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
const finalAllowed = await enforcePolicy(resolved.url, options);
|
|
154
|
-
if (expired())
|
|
155
|
-
return providerDeadlineFailure();
|
|
156
|
-
if (!finalAllowed.ok) {
|
|
157
|
-
return { ok: false, status: 0, text: "", data: null, error: finalAllowed.error };
|
|
158
|
-
}
|
|
159
|
-
const safeInit = init ? { ...init, redirect: "error" } : { redirect: "error" };
|
|
160
|
-
if (init?.headers !== undefined && !isSameOrigin(resolved.url, url)) {
|
|
161
|
-
const sanitized = sanitizeCrossOriginRedirectHeaders(init.headers);
|
|
162
|
-
if (sanitized !== undefined)
|
|
163
|
-
safeInit.headers = sanitized;
|
|
139
|
+
if (!result.ok)
|
|
140
|
+
return { ...result, data: null };
|
|
141
|
+
try {
|
|
142
|
+
return { ok: true, status: result.status, text: result.text, data: result.text ? JSON.parse(result.text) : null };
|
|
164
143
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return providerDeadlineFailure();
|
|
168
|
-
if (!result.ok) {
|
|
169
|
-
return {
|
|
170
|
-
ok: false,
|
|
171
|
-
status: result.status,
|
|
172
|
-
text: result.text,
|
|
173
|
-
data: null,
|
|
174
|
-
error: { category: "unavailable", code: "provider_fetch_failed", message: result.error || `status=${result.status}` },
|
|
175
|
-
};
|
|
144
|
+
catch (error) {
|
|
145
|
+
return { ok: false, status: result.status, text: result.text, data: null, error: { category: "unavailable", code: "provider_fetch_failed", message: error instanceof Error ? error.message : String(error) } };
|
|
176
146
|
}
|
|
177
|
-
return { ok: true, status: result.status, text: result.text, data: result.data };
|
|
178
147
|
}
|
|
179
148
|
//# sourceMappingURL=provider-policy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-policy.js","sourceRoot":"","sources":["../../src/smartfetch/provider-policy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"provider-policy.js","sourceRoot":"","sources":["../../src/smartfetch/provider-policy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smart-web-mcp",
|
|
3
3
|
"mcpName": "io.github.jojo-labs/smart-web",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.1",
|
|
5
5
|
"packageManager": "npm@11.9.0",
|
|
6
6
|
"description": "Local MCP for web search, direct-URL fetch, site crawling, docs export, and bounded smartbrowser local browser actions.",
|
|
7
7
|
"homepage": "https://github.com/jojo-labs/smart-web",
|