@pentoshi/clai 3.8.19 → 3.8.21
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 +8 -5
- package/dist/agent/compaction-summary.d.ts +1 -1
- package/dist/agent/compaction-summary.js +3 -2
- package/dist/agent/compaction-summary.js.map +1 -1
- package/dist/agent/context-breakdown.d.ts +37 -0
- package/dist/agent/context-breakdown.js +145 -0
- package/dist/agent/context-breakdown.js.map +1 -0
- package/dist/agent/context-manager.d.ts +29 -2
- package/dist/agent/context-manager.js +125 -17
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/continue-orient.d.ts +39 -0
- package/dist/agent/continue-orient.js +152 -0
- package/dist/agent/continue-orient.js.map +1 -0
- package/dist/agent/reliability-policy.d.ts +85 -0
- package/dist/agent/reliability-policy.js +158 -0
- package/dist/agent/reliability-policy.js.map +1 -0
- package/dist/agent/runner.js +280 -141
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/session-state.d.ts +13 -1
- package/dist/agent/session-state.js +30 -17
- package/dist/agent/session-state.js.map +1 -1
- package/dist/agent/stop-summary.d.ts +2 -2
- package/dist/agent/stop-summary.js +23 -4
- package/dist/agent/stop-summary.js.map +1 -1
- package/dist/agent/task-evidence.js +13 -0
- package/dist/agent/task-evidence.js.map +1 -1
- package/dist/agent/tool-history.d.ts +12 -0
- package/dist/agent/tool-history.js +159 -0
- package/dist/agent/tool-history.js.map +1 -1
- package/dist/agent/tool-output-formatting.d.ts +4 -0
- package/dist/agent/tool-output-formatting.js +21 -8
- package/dist/agent/tool-output-formatting.js.map +1 -1
- package/dist/app/controllers/session-compact-helper.d.ts +2 -0
- package/dist/app/controllers/session-compact-helper.js +14 -5
- package/dist/app/controllers/session-compact-helper.js.map +1 -1
- package/dist/app/controllers/session-controller.d.ts +6 -0
- package/dist/app/controllers/session-controller.js +27 -2
- package/dist/app/controllers/session-controller.js.map +1 -1
- package/dist/commands/providers.js +57 -26
- package/dist/commands/providers.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/llm/gemini.js +4 -1
- package/dist/llm/gemini.js.map +1 -1
- package/dist/llm/http.js +22 -12
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/key-rotation.d.ts +52 -0
- package/dist/llm/key-rotation.js +122 -0
- package/dist/llm/key-rotation.js.map +1 -0
- package/dist/llm/provider.d.ts +2 -0
- package/dist/llm/provider.js +8 -0
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/router.d.ts +15 -2
- package/dist/llm/router.js +318 -125
- package/dist/llm/router.js.map +1 -1
- package/dist/prompts/embedded.js +1 -1
- package/dist/prompts/embedded.js.map +1 -1
- package/dist/prompts/index.d.ts +25 -0
- package/dist/prompts/index.js +55 -7
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/system.agent.md +4 -3
- package/dist/repl/slash-commands.js +14 -8
- package/dist/repl/slash-commands.js.map +1 -1
- package/dist/repl.d.ts +4 -1
- package/dist/repl.js +12 -2
- package/dist/repl.js.map +1 -1
- package/dist/store/config.d.ts +18 -0
- package/dist/store/config.js +9 -0
- package/dist/store/config.js.map +1 -1
- package/dist/store/history.d.ts +8 -0
- package/dist/store/history.js +38 -0
- package/dist/store/history.js.map +1 -1
- package/dist/store/keys.d.ts +55 -0
- package/dist/store/keys.js +226 -21
- package/dist/store/keys.js.map +1 -1
- package/dist/store/logs.js +35 -12
- package/dist/store/logs.js.map +1 -1
- package/dist/store/paths.d.ts +13 -0
- package/dist/store/paths.js +23 -1
- package/dist/store/paths.js.map +1 -1
- package/dist/store/session-workspace.d.ts +79 -0
- package/dist/store/session-workspace.js +199 -0
- package/dist/store/session-workspace.js.map +1 -0
- package/dist/tools/definitions.js +17 -2
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/http.d.ts +10 -0
- package/dist/tools/http.js +293 -58
- package/dist/tools/http.js.map +1 -1
- package/dist/tools/pentest-workflows.js +38 -19
- package/dist/tools/pentest-workflows.js.map +1 -1
- package/dist/tools/registry.js +26 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/shell.d.ts +1 -1
- package/dist/tui/format-keys.js +29 -6
- package/dist/tui/format-keys.js.map +1 -1
- package/dist/tui-v2/app/App.js +39 -1
- package/dist/tui-v2/app/App.js.map +1 -1
- package/dist/tui-v2/app/command-handlers.js +1 -2
- package/dist/tui-v2/app/command-handlers.js.map +1 -1
- package/dist/tui-v2/app/commands/config-commands.d.ts +1 -2
- package/dist/tui-v2/app/commands/config-commands.js +1 -11
- package/dist/tui-v2/app/commands/config-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/key-commands.d.ts +1 -1
- package/dist/tui-v2/app/commands/key-commands.js +148 -63
- package/dist/tui-v2/app/commands/key-commands.js.map +1 -1
- package/dist/tui-v2/app/commands/picker-commands.js +13 -7
- package/dist/tui-v2/app/commands/picker-commands.js.map +1 -1
- package/dist/tui-v2/bootstrap/composition-root.js +8 -5
- package/dist/tui-v2/bootstrap/composition-root.js.map +1 -1
- package/dist/tui-v2/bootstrap/start-tui-v2.js +10 -4
- package/dist/tui-v2/bootstrap/start-tui-v2.js.map +1 -1
- package/dist/tui-v2/components/modal/keys-modal.d.ts +19 -0
- package/dist/tui-v2/components/modal/keys-modal.js +203 -0
- package/dist/tui-v2/components/modal/keys-modal.js.map +1 -0
- package/dist/tui-v2/components/modal/secret-modal.d.ts +3 -1
- package/dist/tui-v2/components/modal/secret-modal.js +110 -18
- package/dist/tui-v2/components/modal/secret-modal.js.map +1 -1
- package/dist/tui-v2/components/overlay/overlay-host.js +6 -2
- package/dist/tui-v2/components/overlay/overlay-host.js.map +1 -1
- package/dist/tui-v2/components/pager/pager-line.js +5 -2
- package/dist/tui-v2/components/pager/pager-line.js.map +1 -1
- package/dist/tui-v2/components/pager/pager.js +6 -3
- package/dist/tui-v2/components/pager/pager.js.map +1 -1
- package/dist/tui-v2/components/plan/use-pane-presence.d.ts +6 -4
- package/dist/tui-v2/components/plan/use-pane-presence.js +8 -45
- package/dist/tui-v2/components/plan/use-pane-presence.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-anim.d.ts +5 -4
- package/dist/tui-v2/components/toast/toast-anim.js +10 -7
- package/dist/tui-v2/components/toast/toast-anim.js.map +1 -1
- package/dist/tui-v2/components/toast/toast-host.d.ts +9 -3
- package/dist/tui-v2/components/toast/toast-host.js +124 -26
- package/dist/tui-v2/components/toast/toast-host.js.map +1 -1
- package/dist/tui-v2/components/transcript/assistant-message.js +4 -1
- package/dist/tui-v2/components/transcript/assistant-message.js.map +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js +1 -1
- package/dist/tui-v2/components/transcript/compacted-row.js.map +1 -1
- package/dist/tui-v2/components/transcript/file-diff-card.js +3 -23
- package/dist/tui-v2/components/transcript/file-diff-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/linkable-text.js +9 -2
- package/dist/tui-v2/components/transcript/linkable-text.js.map +1 -1
- package/dist/tui-v2/components/transcript/selectable-line.d.ts +22 -0
- package/dist/tui-v2/components/transcript/selectable-line.js +24 -0
- package/dist/tui-v2/components/transcript/selectable-line.js.map +1 -0
- package/dist/tui-v2/components/transcript/thinking-block.js +3 -1
- package/dist/tui-v2/components/transcript/thinking-block.js.map +1 -1
- package/dist/tui-v2/components/transcript/tool-card.d.ts +5 -3
- package/dist/tui-v2/components/transcript/tool-card.js +39 -33
- package/dist/tui-v2/components/transcript/tool-card.js.map +1 -1
- package/dist/tui-v2/components/transcript/use-click-without-drag.js +4 -1
- package/dist/tui-v2/components/transcript/use-click-without-drag.js.map +1 -1
- package/dist/tui-v2/components/transcript/user-message.js +1 -1
- package/dist/tui-v2/components/transcript/user-message.js.map +1 -1
- package/dist/tui-v2/controllers/overlay-controller.d.ts +42 -0
- package/dist/tui-v2/controllers/overlay-controller.js +53 -0
- package/dist/tui-v2/controllers/overlay-controller.js.map +1 -1
- package/dist/tui-v2/rendering/batch-sections.d.ts +15 -4
- package/dist/tui-v2/rendering/batch-sections.js +157 -64
- package/dist/tui-v2/rendering/batch-sections.js.map +1 -1
- package/dist/tui-v2/rendering/format-help.js +1 -1
- package/dist/tui-v2/rendering/format-help.js.map +1 -1
- package/dist/tui-v2/rendering/open-tool-output.js +10 -7
- package/dist/tui-v2/rendering/open-tool-output.js.map +1 -1
- package/dist/tui-v2/rendering/pager-markdown.d.ts +9 -0
- package/dist/tui-v2/rendering/pager-markdown.js +46 -0
- package/dist/tui-v2/rendering/pager-markdown.js.map +1 -1
- package/dist/tui-v2/rendering/pager-view-policy.d.ts +6 -3
- package/dist/tui-v2/rendering/pager-view-policy.js +9 -13
- package/dist/tui-v2/rendering/pager-view-policy.js.map +1 -1
- package/dist/tui-v2/rendering/sanitize-display.js +3 -1
- package/dist/tui-v2/rendering/sanitize-display.js.map +1 -1
- package/dist/tui-v2/state/transcript-reducer.js +70 -30
- package/dist/tui-v2/state/transcript-reducer.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- package/package.json +1 -1
package/dist/tools/http.js
CHANGED
|
@@ -1,9 +1,89 @@
|
|
|
1
1
|
import net from "node:net";
|
|
2
2
|
import { lookup } from "node:dns/promises";
|
|
3
|
+
import { Agent } from "undici";
|
|
3
4
|
import { isBlockedAddress } from "./web/ssrf-guard.js";
|
|
4
5
|
import { toReadableText } from "./web/readable.js";
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
/** Shared undici agent that skips cert verification (authorized pentest only). */
|
|
7
|
+
let insecureTlsAgent;
|
|
8
|
+
function getInsecureTlsAgent() {
|
|
9
|
+
if (!insecureTlsAgent) {
|
|
10
|
+
insecureTlsAgent = new Agent({
|
|
11
|
+
connect: {
|
|
12
|
+
rejectUnauthorized: false,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return insecureTlsAgent;
|
|
17
|
+
}
|
|
18
|
+
/** Flatten error + nested cause(s) for TLS code matching. */
|
|
19
|
+
function errorText(error, depth = 0) {
|
|
20
|
+
if (depth > 4 || error == null)
|
|
21
|
+
return "";
|
|
22
|
+
if (typeof error === "string")
|
|
23
|
+
return error;
|
|
24
|
+
if (error instanceof Error) {
|
|
25
|
+
const cause = error.cause !== undefined ? errorText(error.cause, depth + 1) : "";
|
|
26
|
+
const code = "code" in error && typeof error.code === "string"
|
|
27
|
+
? String(error.code)
|
|
28
|
+
: "";
|
|
29
|
+
return `${error.message} ${code} ${cause}`;
|
|
30
|
+
}
|
|
31
|
+
if (typeof error === "object") {
|
|
32
|
+
const rec = error;
|
|
33
|
+
const code = typeof rec.code === "string" ? rec.code : "";
|
|
34
|
+
const message = typeof rec.message === "string" ? rec.message : "";
|
|
35
|
+
const cause = rec.cause !== undefined ? errorText(rec.cause, depth + 1) : "";
|
|
36
|
+
try {
|
|
37
|
+
return `${message} ${code} ${cause} ${JSON.stringify(error)}`;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return `${message} ${code} ${cause}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return String(error);
|
|
44
|
+
}
|
|
45
|
+
/** True when the error is a TLS hostname/cert mismatch (common for https://IP). */
|
|
46
|
+
export function isTlsCertNameError(error) {
|
|
47
|
+
const text = errorText(error);
|
|
48
|
+
return (/ERR_TLS_CERT_ALTNAME_INVALID/i.test(text) ||
|
|
49
|
+
/Hostname\/IP does not match certificate/i.test(text) ||
|
|
50
|
+
/certificate.*altname/i.test(text) ||
|
|
51
|
+
/UNABLE_TO_VERIFY_LEAF_SIGNATURE/i.test(text) ||
|
|
52
|
+
/DEPTH_ZERO_SELF_SIGNED_CERT/i.test(text) ||
|
|
53
|
+
/SELF_SIGNED_CERT/i.test(text) ||
|
|
54
|
+
/unable to verify the first certificate/i.test(text));
|
|
55
|
+
}
|
|
56
|
+
function formatTlsNetworkError(error, url) {
|
|
57
|
+
const base = error instanceof Error ? error.message : String(error);
|
|
58
|
+
if (!isTlsCertNameError(error))
|
|
59
|
+
return base;
|
|
60
|
+
let host = url;
|
|
61
|
+
try {
|
|
62
|
+
host = new URL(url).hostname;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* keep raw */
|
|
66
|
+
}
|
|
67
|
+
const byIp = net.isIP(host.replace(/^\[|\]$/g, "")) !== 0;
|
|
68
|
+
return (`${base}\n\n` +
|
|
69
|
+
`TLS certificate did not validate for this URL` +
|
|
70
|
+
(byIp
|
|
71
|
+
? ` (you connected by IP ${host}; the cert is almost always issued for a hostname, not the IP).`
|
|
72
|
+
: `.`) +
|
|
73
|
+
`\nAuthorized testing options:\n` +
|
|
74
|
+
` 1. Retry with the hostname that matches the cert (from SAN/CN), or\n` +
|
|
75
|
+
` 2. http.fetch with insecureTls=true (or tlsInsecure=true) to skip verification and still capture evidence, or\n` +
|
|
76
|
+
` 3. shell: curl -k -i ${url}\n` +
|
|
77
|
+
`Evidence taken with insecureTls is still valid for recon; record that TLS verification was disabled.`);
|
|
78
|
+
}
|
|
79
|
+
/** Capture budget for body bytes (artifact + evidence build). Model context is capped later. */
|
|
80
|
+
const DEFAULT_MAX_BYTES = 128 * 1024;
|
|
81
|
+
/**
|
|
82
|
+
* Default retries for remote evidence: 0 so intentional 5xx/probe responses are
|
|
83
|
+
* not silently rewritten. Callers may pass retries; owned loopback still soft-
|
|
84
|
+
* retries connection refused.
|
|
85
|
+
*/
|
|
86
|
+
const DEFAULT_RETRIES = 0;
|
|
7
87
|
const RETRY_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504]);
|
|
8
88
|
const ALLOWED_METHODS = new Set([
|
|
9
89
|
"GET",
|
|
@@ -14,6 +94,11 @@ const ALLOWED_METHODS = new Set([
|
|
|
14
94
|
"DELETE",
|
|
15
95
|
"OPTIONS",
|
|
16
96
|
]);
|
|
97
|
+
/** Browser-like default UA — less fingerprint noise than clai-http-fetch/*. */
|
|
98
|
+
const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; clai/1.0; +https://github.com/pentoshi007/clai) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";
|
|
99
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
100
|
+
const MIN_TIMEOUT_MS = 3_000;
|
|
101
|
+
const MAX_TIMEOUT_MS = 60_000;
|
|
17
102
|
/**
|
|
18
103
|
* Block (or require explicit ownership confirmation for) requests that
|
|
19
104
|
* target loopback, private, link-local, or cloud-metadata addresses.
|
|
@@ -125,6 +210,11 @@ function isConnectionRefusedError(error) {
|
|
|
125
210
|
/\bother side closed\b/i.test(msg) ||
|
|
126
211
|
/\bsocket hang up\b/i.test(msg));
|
|
127
212
|
}
|
|
213
|
+
function clampTimeoutMs(value) {
|
|
214
|
+
if (value === undefined || !Number.isFinite(value))
|
|
215
|
+
return DEFAULT_TIMEOUT_MS;
|
|
216
|
+
return Math.max(MIN_TIMEOUT_MS, Math.min(MAX_TIMEOUT_MS, Math.floor(value)));
|
|
217
|
+
}
|
|
128
218
|
export async function httpFetch(url, options = {}) {
|
|
129
219
|
let target;
|
|
130
220
|
try {
|
|
@@ -177,7 +267,7 @@ export async function httpFetch(url, options = {}) {
|
|
|
177
267
|
return { ok: false, output: initialDenial, exitCode: 1 };
|
|
178
268
|
const headers = new Headers(options.headers);
|
|
179
269
|
if (!headers.has("user-agent")) {
|
|
180
|
-
headers.set("user-agent",
|
|
270
|
+
headers.set("user-agent", DEFAULT_USER_AGENT);
|
|
181
271
|
}
|
|
182
272
|
if (!headers.has("accept")) {
|
|
183
273
|
headers.set("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.5");
|
|
@@ -185,6 +275,7 @@ export async function httpFetch(url, options = {}) {
|
|
|
185
275
|
if (!headers.has("accept-language")) {
|
|
186
276
|
headers.set("accept-language", "en-US,en;q=0.8");
|
|
187
277
|
}
|
|
278
|
+
const insecureTls = Boolean(options.insecureTls);
|
|
188
279
|
const init = {
|
|
189
280
|
method,
|
|
190
281
|
headers,
|
|
@@ -193,6 +284,10 @@ export async function httpFetch(url, options = {}) {
|
|
|
193
284
|
if (options.body !== undefined && method !== "GET" && method !== "HEAD") {
|
|
194
285
|
init.body = options.body;
|
|
195
286
|
}
|
|
287
|
+
// Node undici: skip cert checks for authorized IP/lab HTTPS probes.
|
|
288
|
+
if (insecureTls && target.protocol === "https:") {
|
|
289
|
+
init.dispatcher = getInsecureTlsAgent();
|
|
290
|
+
}
|
|
196
291
|
// Local dev: try localhost / 127.0.0.1 / ::1 until one accepts (Vite dual-stack).
|
|
197
292
|
const urlCandidates = ownedLoopback && (method === "GET" || method === "HEAD")
|
|
198
293
|
? loopbackUrlCandidates(url)
|
|
@@ -201,24 +296,26 @@ export async function httpFetch(url, options = {}) {
|
|
|
201
296
|
let attempts = 0;
|
|
202
297
|
let lastNetworkError;
|
|
203
298
|
let usedUrl = url;
|
|
204
|
-
|
|
205
|
-
const
|
|
299
|
+
let redirectHops = [];
|
|
300
|
+
const timeoutMs = clampTimeoutMs(options.timeoutMs);
|
|
301
|
+
// Status retries only when caller opts in (default 0). Loopback keeps soft
|
|
302
|
+
// connection-refused retries below regardless of status-retry budget.
|
|
303
|
+
const statusRetryLimit = method === "GET" || method === "HEAD"
|
|
206
304
|
? clampRetries(options.retries ?? DEFAULT_RETRIES)
|
|
207
305
|
: 0;
|
|
208
|
-
const
|
|
209
|
-
? Math.max(
|
|
210
|
-
:
|
|
306
|
+
const connRetryLimit = ownedLoopback
|
|
307
|
+
? Math.max(statusRetryLimit, 4)
|
|
308
|
+
: statusRetryLimit;
|
|
211
309
|
try {
|
|
212
310
|
candidateLoop: for (let ci = 0; ci < urlCandidates.length; ci += 1) {
|
|
213
311
|
const candidateUrl = urlCandidates[ci];
|
|
214
312
|
usedUrl = candidateUrl;
|
|
215
|
-
// Fresh attempt counter per candidate, but keep total for the message.
|
|
216
313
|
let localAttempts = 0;
|
|
217
314
|
for (;;) {
|
|
218
315
|
attempts += 1;
|
|
219
316
|
localAttempts += 1;
|
|
220
317
|
const controller = new AbortController();
|
|
221
|
-
const timer = setTimeout(() => controller.abort(),
|
|
318
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
222
319
|
const onParentAbort = () => controller.abort();
|
|
223
320
|
if (options.signal) {
|
|
224
321
|
if (options.signal.aborted) {
|
|
@@ -229,6 +326,7 @@ export async function httpFetch(url, options = {}) {
|
|
|
229
326
|
try {
|
|
230
327
|
let requestUrl = candidateUrl;
|
|
231
328
|
let redirects = 0;
|
|
329
|
+
redirectHops = [];
|
|
232
330
|
for (;;) {
|
|
233
331
|
response = await fetch(requestUrl, {
|
|
234
332
|
...init,
|
|
@@ -239,6 +337,15 @@ export async function httpFetch(url, options = {}) {
|
|
|
239
337
|
break;
|
|
240
338
|
if (redirects >= 10)
|
|
241
339
|
throw new Error("Too many redirects (maximum 10)");
|
|
340
|
+
const setCookies = typeof response.headers.getSetCookie === "function"
|
|
341
|
+
? response.headers.getSetCookie()
|
|
342
|
+
: multiHeader(response.headers, "set-cookie");
|
|
343
|
+
redirectHops.push({
|
|
344
|
+
status: response.status,
|
|
345
|
+
url: requestUrl,
|
|
346
|
+
location,
|
|
347
|
+
setCookies,
|
|
348
|
+
});
|
|
242
349
|
const next = new URL(location, requestUrl);
|
|
243
350
|
const denial = await authorizeDestination(next);
|
|
244
351
|
if (denial)
|
|
@@ -247,13 +354,12 @@ export async function httpFetch(url, options = {}) {
|
|
|
247
354
|
requestUrl = next.toString();
|
|
248
355
|
redirects += 1;
|
|
249
356
|
}
|
|
250
|
-
if (localAttempts <=
|
|
357
|
+
if (localAttempts <= statusRetryLimit &&
|
|
251
358
|
RETRY_STATUSES.has(response.status)) {
|
|
252
359
|
await drainResponse(response);
|
|
253
360
|
await sleep(retryDelayMs(localAttempts));
|
|
254
361
|
continue;
|
|
255
362
|
}
|
|
256
|
-
// Success for this candidate
|
|
257
363
|
break candidateLoop;
|
|
258
364
|
}
|
|
259
365
|
catch (error) {
|
|
@@ -262,7 +368,7 @@ export async function httpFetch(url, options = {}) {
|
|
|
262
368
|
error.name === "AbortError" &&
|
|
263
369
|
!options.signal?.aborted;
|
|
264
370
|
const errMsg = isTimeout
|
|
265
|
-
?
|
|
371
|
+
? `Request timed out after ${timeoutMs}ms`
|
|
266
372
|
: error instanceof Error
|
|
267
373
|
? error.message
|
|
268
374
|
: String(error);
|
|
@@ -271,17 +377,16 @@ export async function httpFetch(url, options = {}) {
|
|
|
271
377
|
}
|
|
272
378
|
// Connection refused on loopback → try next address or retry.
|
|
273
379
|
if (ownedLoopback && isConnectionRefusedError(error)) {
|
|
274
|
-
if (localAttempts <=
|
|
380
|
+
if (localAttempts <= connRetryLimit) {
|
|
275
381
|
await sleep(Math.min(400 * localAttempts, 1500));
|
|
276
382
|
continue;
|
|
277
383
|
}
|
|
278
|
-
// Exhausted retries for this host — try next loopback candidate.
|
|
279
384
|
if (ci + 1 < urlCandidates.length) {
|
|
280
385
|
break; // next candidate
|
|
281
386
|
}
|
|
282
387
|
throw new Error(errMsg);
|
|
283
388
|
}
|
|
284
|
-
if (localAttempts >
|
|
389
|
+
if (localAttempts > statusRetryLimit) {
|
|
285
390
|
throw new Error(errMsg);
|
|
286
391
|
}
|
|
287
392
|
await sleep(retryDelayMs(localAttempts));
|
|
@@ -299,9 +404,10 @@ export async function httpFetch(url, options = {}) {
|
|
|
299
404
|
const tried = urlCandidates.length > 1
|
|
300
405
|
? ` (tried ${urlCandidates.join(" → ")})`
|
|
301
406
|
: "";
|
|
407
|
+
const detail = formatTlsNetworkError(error, usedUrl || url);
|
|
302
408
|
return {
|
|
303
409
|
ok: false,
|
|
304
|
-
output: `Network error after ${attempts} attempt${attempts === 1 ? "" : "s"}${tried}: ${
|
|
410
|
+
output: `Network error after ${attempts} attempt${attempts === 1 ? "" : "s"}${tried}: ${detail}`,
|
|
305
411
|
exitCode: 1,
|
|
306
412
|
};
|
|
307
413
|
}
|
|
@@ -354,59 +460,30 @@ export async function httpFetch(url, options = {}) {
|
|
|
354
460
|
}
|
|
355
461
|
}
|
|
356
462
|
else {
|
|
357
|
-
// No streaming body (eg HEAD or empty 204). Fall through with empty text.
|
|
358
463
|
collected = "";
|
|
359
464
|
}
|
|
360
|
-
const headerLines = [];
|
|
361
|
-
response.headers.forEach((v, k) => headerLines.push(`${k}: ${v}`));
|
|
362
|
-
const headerBlock = headerLines.length > 0 ? `Headers:\n${headerLines.join("\n")}\n\n` : "";
|
|
363
|
-
const truncNote = truncated
|
|
364
|
-
? `\n... (truncated at ${limit.toLocaleString()} bytes)`
|
|
365
|
-
: "";
|
|
366
465
|
const contentType = response.headers.get("content-type") ?? "";
|
|
367
466
|
const isBinary = isBinaryContentType(contentType) || isBinaryContent(collected);
|
|
368
|
-
const displayBody = isBinary
|
|
369
|
-
? `[Binary content (${contentType || "unknown content type"}) - raw body suppressed]`
|
|
370
|
-
: collected;
|
|
371
|
-
const body = method === "HEAD" ? "" : displayBody;
|
|
372
|
-
const readable = method !== "HEAD" && !isBinary && contentType.toLowerCase().includes("html")
|
|
373
|
-
? toReadableText(collected)
|
|
374
|
-
: "";
|
|
375
467
|
const finalUrl = response.url || usedUrl;
|
|
376
|
-
const
|
|
468
|
+
const evidence = formatHttpEvidence({
|
|
469
|
+
method,
|
|
377
470
|
requestedUrl: url,
|
|
471
|
+
usedUrl,
|
|
378
472
|
finalUrl,
|
|
379
|
-
probedUrl: usedUrl !== url ? usedUrl : undefined,
|
|
380
473
|
status: response.status,
|
|
381
474
|
statusText: response.statusText,
|
|
382
|
-
ok: response.ok,
|
|
383
|
-
method,
|
|
384
475
|
attempts,
|
|
385
|
-
retried: attempts > 1,
|
|
386
|
-
headers: Object.fromEntries([...response.headers.entries()].sort(([a], [b]) => a.localeCompare(b))),
|
|
387
|
-
contentType,
|
|
388
476
|
bytesRead,
|
|
389
477
|
truncated,
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
`attempts=${attempts} bytes=${bytesRead}${truncated ? ` truncated@${limit}` : ""}${usedUrl !== url ? ` via=${usedUrl}` : ""}`,
|
|
400
|
-
"",
|
|
401
|
-
"Metadata:",
|
|
402
|
-
JSON.stringify(meta, null, 2),
|
|
403
|
-
"",
|
|
404
|
-
headerBlock.trimEnd(),
|
|
405
|
-
readable ? `\nReadable content:\n${readable}\n` : "",
|
|
406
|
-
method === "HEAD" ? "" : `Raw body:\n${body}${truncNote}`,
|
|
407
|
-
]
|
|
408
|
-
.filter((part) => part !== "")
|
|
409
|
-
.join("\n");
|
|
478
|
+
limit,
|
|
479
|
+
contentType,
|
|
480
|
+
headers: response.headers,
|
|
481
|
+
body: collected,
|
|
482
|
+
isBinary,
|
|
483
|
+
redirectHops,
|
|
484
|
+
lastNetworkError,
|
|
485
|
+
insecureTls,
|
|
486
|
+
});
|
|
410
487
|
return {
|
|
411
488
|
ok: true,
|
|
412
489
|
output: evidence,
|
|
@@ -414,6 +491,164 @@ export async function httpFetch(url, options = {}) {
|
|
|
414
491
|
truncated,
|
|
415
492
|
};
|
|
416
493
|
}
|
|
494
|
+
function multiHeader(headers, name) {
|
|
495
|
+
const out = [];
|
|
496
|
+
headers.forEach((value, key) => {
|
|
497
|
+
if (key.toLowerCase() === name.toLowerCase())
|
|
498
|
+
out.push(value);
|
|
499
|
+
});
|
|
500
|
+
return out;
|
|
501
|
+
}
|
|
502
|
+
/** Headers always kept in evidence (security / fingerprint / cookies). */
|
|
503
|
+
const PRIORITY_HEADER_RE = /^(set-cookie|server|x-powered-by|x-aspnet|x-generator|x-frame-options|x-content-type-options|x-xss-protection|content-security-policy|content-type|location|www-authenticate|access-control-|strict-transport|referrer-policy|permissions-policy|cross-origin-|cache-control|via|cf-ray|x-request-id|x-amz-|x-served|link|allow|retry-after)$/i;
|
|
504
|
+
function formatHttpEvidence(input) {
|
|
505
|
+
const lines = [];
|
|
506
|
+
lines.push(`${input.status} ${input.statusText} ${input.method} ${input.finalUrl}`);
|
|
507
|
+
if (input.insecureTls) {
|
|
508
|
+
lines.push("TLS: verification DISABLED (insecureTls=true) — hostname/cert not validated; authorized-test only.");
|
|
509
|
+
}
|
|
510
|
+
if (input.redirectHops.length > 0) {
|
|
511
|
+
const chain = [
|
|
512
|
+
...input.redirectHops.map((h) => `${h.status} ${h.url} → ${h.location}`),
|
|
513
|
+
`${input.status} ${input.finalUrl}`,
|
|
514
|
+
];
|
|
515
|
+
lines.push(`redirects: ${chain.join(" → ")}`);
|
|
516
|
+
for (const hop of input.redirectHops) {
|
|
517
|
+
if (hop.setCookies.length) {
|
|
518
|
+
lines.push(` hop ${hop.status} set-cookie: ${hop.setCookies.join("; ")}`);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
const metaBits = [
|
|
523
|
+
`attempts=${input.attempts}`,
|
|
524
|
+
`bytes=${input.bytesRead}`,
|
|
525
|
+
];
|
|
526
|
+
if (input.truncated)
|
|
527
|
+
metaBits.push(`truncated@${input.limit}`);
|
|
528
|
+
if (input.usedUrl !== input.requestedUrl)
|
|
529
|
+
metaBits.push(`via=${input.usedUrl}`);
|
|
530
|
+
if (input.requestedUrl !== input.finalUrl && input.redirectHops.length === 0) {
|
|
531
|
+
metaBits.push(`requested=${input.requestedUrl}`);
|
|
532
|
+
}
|
|
533
|
+
lines.push(metaBits.join(" "));
|
|
534
|
+
if (input.finalUrl.startsWith("https:") && !input.insecureTls) {
|
|
535
|
+
lines.push("TLS: leaf cert not captured by http.fetch — use web.fetch with includeTls=true for fingerprint/SAN.");
|
|
536
|
+
}
|
|
537
|
+
// ALL response headers, always — cheap vs body and critical for pentest.
|
|
538
|
+
// Security/fingerprint headers first for scannability; remainder sorted after.
|
|
539
|
+
const allHeaders = [];
|
|
540
|
+
input.headers.forEach((v, k) => allHeaders.push([k, v]));
|
|
541
|
+
allHeaders.sort(([a], [b]) => a.localeCompare(b));
|
|
542
|
+
const priority = [];
|
|
543
|
+
const rest = [];
|
|
544
|
+
for (const [k, v] of allHeaders) {
|
|
545
|
+
const line = `${k}: ${v}`;
|
|
546
|
+
if (PRIORITY_HEADER_RE.test(k))
|
|
547
|
+
priority.push(line);
|
|
548
|
+
else
|
|
549
|
+
rest.push(line);
|
|
550
|
+
}
|
|
551
|
+
lines.push("");
|
|
552
|
+
lines.push("Headers:");
|
|
553
|
+
for (const line of priority)
|
|
554
|
+
lines.push(line);
|
|
555
|
+
for (const line of rest)
|
|
556
|
+
lines.push(line);
|
|
557
|
+
const tech = deriveTechHints(input.headers, input.body, input.contentType);
|
|
558
|
+
if (tech) {
|
|
559
|
+
lines.push("");
|
|
560
|
+
lines.push(`Tech hints: ${tech}`);
|
|
561
|
+
}
|
|
562
|
+
if (input.method !== "HEAD") {
|
|
563
|
+
lines.push("");
|
|
564
|
+
lines.push("Body:");
|
|
565
|
+
if (input.isBinary) {
|
|
566
|
+
lines.push(`[Binary content (${input.contentType || "unknown content type"}) — raw body suppressed]`);
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
const ct = input.contentType.toLowerCase();
|
|
570
|
+
const isHtml = ct.includes("html");
|
|
571
|
+
const isJson = ct.includes("json") ||
|
|
572
|
+
ct.includes("javascript") ||
|
|
573
|
+
ct.includes("xml") ||
|
|
574
|
+
ct.startsWith("text/");
|
|
575
|
+
// Single representation: readable HTML OR raw text/json — never both.
|
|
576
|
+
let bodyText = isHtml
|
|
577
|
+
? toReadableText(input.body) || input.body
|
|
578
|
+
: input.body;
|
|
579
|
+
// Error pages: keep status/headers rich, body shorter.
|
|
580
|
+
const isError = input.status >= 400;
|
|
581
|
+
const bodyCap = isError
|
|
582
|
+
? 3_000
|
|
583
|
+
: isHtml
|
|
584
|
+
? 6_000
|
|
585
|
+
: isJson
|
|
586
|
+
? 12_000
|
|
587
|
+
: 8_000;
|
|
588
|
+
// Body is the only intentional truncate — status/headers/redirects stay full.
|
|
589
|
+
if (bodyText.length > bodyCap) {
|
|
590
|
+
bodyText =
|
|
591
|
+
bodyText.slice(0, bodyCap) +
|
|
592
|
+
`\n... (body truncated at ${bodyCap.toLocaleString()} chars — headers/status above are complete; re-fetch with higher maxBytes or page if you need more body)`;
|
|
593
|
+
}
|
|
594
|
+
if (input.truncated && !bodyText.includes("capture truncated")) {
|
|
595
|
+
bodyText += `\n... (wire capture stopped at ${input.limit.toLocaleString()} bytes — raise maxBytes for more body)`;
|
|
596
|
+
}
|
|
597
|
+
lines.push(bodyText || "(empty)");
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
if (input.lastNetworkError) {
|
|
601
|
+
const err = input.lastNetworkError instanceof Error
|
|
602
|
+
? input.lastNetworkError.message
|
|
603
|
+
: String(input.lastNetworkError);
|
|
604
|
+
if (err) {
|
|
605
|
+
lines.push("");
|
|
606
|
+
lines.push(`note: earlier network error during retries: ${err}`);
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
return lines.join("\n");
|
|
610
|
+
}
|
|
611
|
+
/** Header-derived stack hints only — never invent products. */
|
|
612
|
+
function deriveTechHints(headers, body, contentType) {
|
|
613
|
+
const bits = [];
|
|
614
|
+
const server = headers.get("server");
|
|
615
|
+
if (server)
|
|
616
|
+
bits.push(`server=${server}`);
|
|
617
|
+
const powered = headers.get("x-powered-by");
|
|
618
|
+
if (powered)
|
|
619
|
+
bits.push(`x-powered-by=${powered}`);
|
|
620
|
+
const gen = headers.get("x-generator");
|
|
621
|
+
if (gen)
|
|
622
|
+
bits.push(`x-generator=${gen}`);
|
|
623
|
+
const cookies = typeof headers.getSetCookie === "function"
|
|
624
|
+
? headers.getSetCookie()
|
|
625
|
+
: multiHeader(headers, "set-cookie");
|
|
626
|
+
if (cookies.length) {
|
|
627
|
+
const names = cookies
|
|
628
|
+
.map((c) => c.split("=")[0]?.trim())
|
|
629
|
+
.filter(Boolean)
|
|
630
|
+
.slice(0, 8);
|
|
631
|
+
if (names.length)
|
|
632
|
+
bits.push(`cookies=${names.join(",")}`);
|
|
633
|
+
}
|
|
634
|
+
if (contentType)
|
|
635
|
+
bits.push(`content-type=${contentType.split(";")[0]?.trim()}`);
|
|
636
|
+
// Light path markers from body (safe, non-invented).
|
|
637
|
+
const sample = body.slice(0, 8_000);
|
|
638
|
+
if (/\/_next\//i.test(sample) || /__NEXT_DATA__/i.test(sample)) {
|
|
639
|
+
bits.push("marker=next.js");
|
|
640
|
+
}
|
|
641
|
+
else if (/wp-content|wordpress/i.test(sample)) {
|
|
642
|
+
bits.push("marker=wordpress");
|
|
643
|
+
}
|
|
644
|
+
else if (/csrfmiddlewaretoken|django/i.test(sample)) {
|
|
645
|
+
bits.push("marker=django");
|
|
646
|
+
}
|
|
647
|
+
else if (/react/i.test(sample) && /data-reactroot|__REACT/i.test(sample)) {
|
|
648
|
+
bits.push("marker=react");
|
|
649
|
+
}
|
|
650
|
+
return bits.join("; ");
|
|
651
|
+
}
|
|
417
652
|
function clampRetries(value) {
|
|
418
653
|
if (!Number.isFinite(value))
|
|
419
654
|
return DEFAULT_RETRIES;
|
package/dist/tools/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/tools/http.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,CAAC;AACrC,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAErC,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAChB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAC/C,qBAAqB,CACtB,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,8DAA8D;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,KAAK,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACzD,IACE,CAAC,KAAK,WAAW;QACjB,CAAC,KAAK,uBAAuB;QAC7B,CAAC,KAAK,eAAe;QACrB,CAAC,KAAK,cAAc;QACpB,CAAC,KAAK,WAAW;QACjB,CAAC,KAAK,KAAK;QACX,CAAC,KAAK,iBAAiB,EACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,cAAc;IACd,IAAI,kCAAkC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAExC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAQ,EAAE;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACrC,iDAAiD;YACjD,CAAC,CAAC,QAAQ,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC,CAAC;IAEF,iEAAiE;IACjE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;QAC7D,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,IAAI,KAAK,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,CAAC;SAAM,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,CACL,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC;QACvC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAChC,CAAC;AACJ,CAAC;AAaD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,UAAwB,EAAE;IAE1B,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,gCAAgC,MAAM,CAAC,QAAQ,EAAE;YACzD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,4BAA4B,MAAM,EAAE;YAC5C,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAE7E,wEAAwE;IACxE,yEAAyE;IACzE,8EAA8E;IAC9E,MAAM,oBAAoB,GAAG,KAAK,EAAE,WAAgB,EAA+B,EAAE;QACnF,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjC,OAAO,uDAAuD,QAAQ,mCAAmC,CAAC;QAC5G,CAAC;QACD,uEAAuE;QACvE,IAAI,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE,CAAC;YACrC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,iBAAiB,CAAC,CAAC;YACvF,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAAE,OAAO,+BAA+B,WAAW,CAAC,QAAQ,EAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5G,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,aAAa;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAE5E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CACT,QAAQ,EACR,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,IAAI,GAAgB;QACxB,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ;KACnB,CAAC;IACF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACxE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,kFAAkF;IAClF,MAAM,aAAa,GACjB,aAAa,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,CAAC;QACtD,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEZ,IAAI,QAA8B,CAAC;IACnC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,gBAAyB,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,yEAAyE;IACzE,MAAM,WAAW,GACf,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;QACnC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,IAAI,eAAe,CAAC;QAClD,CAAC,CAAC,CAAC,CAAC;IACR,MAAM,UAAU,GAAG,aAAa;QAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,WAAW,CAAC;IAEhB,IAAI,CAAC;QACH,aAAa,EAAE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YACnE,MAAM,YAAY,GAAG,aAAa,CAAC,EAAE,CAAE,CAAC;YACxC,OAAO,GAAG,YAAY,CAAC;YACvB,uEAAuE;YACvE,IAAI,aAAa,GAAG,CAAC,CAAC;YACtB,SAAS,CAAC;gBACR,QAAQ,IAAI,CAAC,CAAC;gBACd,aAAa,IAAI,CAAC,CAAC;gBACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;gBAC1D,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBAC3B,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;oBACtD,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAC1D,CAAC;gBACD,IAAI,CAAC;oBACH,IAAI,UAAU,GAAG,YAAY,CAAC;oBAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;oBAClB,SAAS,CAAC;wBACR,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;4BACjC,GAAG,IAAI;4BACP,MAAM,EAAE,UAAU,CAAC,MAAM;yBAC1B,CAAC,CAAC;wBACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBAClD,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC;4BAAE,MAAM;wBAC1E,IAAI,SAAS,IAAI,EAAE;4BAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;wBACxE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;wBAC3C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;wBAChD,IAAI,MAAM;4BAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;wBACpC,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9B,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC7B,SAAS,IAAI,CAAC,CAAC;oBACjB,CAAC;oBACD,IACE,aAAa,IAAI,UAAU;wBAC3B,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EACnC,CAAC;wBACD,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAC9B,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;wBACzC,SAAS;oBACX,CAAC;oBACD,6BAA6B;oBAC7B,MAAM,aAAa,CAAC;gBACtB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,gBAAgB,GAAG,KAAK,CAAC;oBACzB,MAAM,SAAS,GACb,KAAK,YAAY,KAAK;wBACtB,KAAK,CAAC,IAAI,KAAK,YAAY;wBAC3B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC3B,MAAM,MAAM,GAAG,SAAS;wBACtB,CAAC,CAAC,6BAA6B;wBAC/B,CAAC,CAAC,KAAK,YAAY,KAAK;4BACtB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;wBAC5B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,8DAA8D;oBAC9D,IAAI,aAAa,IAAI,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;wBACrD,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;4BAChC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;4BACjD,SAAS;wBACX,CAAC;wBACD,iEAAiE;wBACjE,IAAI,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;4BAClC,MAAM,CAAC,iBAAiB;wBAC1B,CAAC;wBACD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,IAAI,aAAa,GAAG,UAAU,EAAE,CAAC;wBAC/B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;oBACD,MAAM,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC3C,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,GACT,aAAa,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,WAAW,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG;YACzC,CAAC,CAAC,EAAE,CAAC;QACT,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uBAAuB,QAAQ,WAAW,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAChJ,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,yCAAyC;YACjD,QAAQ,EAAE,CAAC;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAC1C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,SAAS,GAAG,KAAK,EAAE,CAAC;gBACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI;oBAAE,MAAM;gBAChB,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,MAAM,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;gBACpC,IAAI,KAAK,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC;oBACjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC5E,SAAS,IAAI,SAAS,CAAC;oBACvB,SAAS,GAAG,IAAI,CAAC;oBACjB,IAAI,CAAC;wBACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC;wBACP,kDAAkD;oBACpD,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC;YAChC,CAAC;YACD,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,0EAA0E;QAC1E,SAAS,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,SAAS,GAAG,SAAS;QACzB,CAAC,CAAC,uBAAuB,KAAK,CAAC,cAAc,EAAE,SAAS;QACxD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IAChF,MAAM,WAAW,GAAG,QAAQ;QAC1B,CAAC,CAAC,oBAAoB,WAAW,IAAI,sBAAsB,0BAA0B;QACrF,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAClD,MAAM,QAAQ,GACZ,MAAM,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC1E,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,IAAI,OAAO,CAAC;IACzC,MAAM,IAAI,GAAG;QACX,YAAY,EAAE,GAAG;QACjB,QAAQ;QACR,SAAS,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QAChD,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM;QACN,QAAQ;QACR,OAAO,EAAE,QAAQ,GAAG,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC,WAAW,CACzB,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACvE;QACD,WAAW;QACX,SAAS;QACT,SAAS;QACT,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC1C,gBAAgB,EACd,gBAAgB,YAAY,KAAK;YAC/B,CAAC,CAAC,gBAAgB,CAAC,OAAO;YAC1B,CAAC,CAAC,gBAAgB;gBAChB,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC1B,CAAC,CAAC,SAAS;KAClB,CAAC;IACF,MAAM,QAAQ,GAAG;QACf,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,EAAE;QACvD,YAAY,QAAQ,UAAU,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7H,EAAE;QACF,WAAW;QACX,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7B,EAAE;QACF,WAAW,CAAC,OAAO,EAAE;QACrB,QAAQ,CAAC,CAAC,CAAC,wBAAwB,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE;QACpD,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,IAAI,GAAG,SAAS,EAAE;KAC1D;SACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,CAAC;QACX,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAkB;IAC7C,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,8DAA8D;IAChE,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,IAAI,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,oBAAoB;IACpE,IACE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QACvB,EAAE,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACzC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClC,qDAAqD;QACrD,IAAI,IAAI,GAAG,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAC1D,iBAAiB,EAAE,CAAC;YACpB,IAAI,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/tools/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,40 @@
|
|
|
1
1
|
import { httpFetch } from "./http.js";
|
|
2
|
-
async function runBoundedRequests(requests, options, concurrency = 4) {
|
|
2
|
+
async function runBoundedRequests(requests, options, concurrency = 4, onProgress) {
|
|
3
3
|
const results = [];
|
|
4
4
|
let cursor = 0;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
let finished = 0;
|
|
6
|
+
const total = requests.length;
|
|
7
|
+
// Heartbeats keep the runner stall watchdog alive during multi-request scans
|
|
8
|
+
// (each hop can take up to ~15s; 100 paths at concurrency 4 can take minutes).
|
|
9
|
+
const heartbeat = setInterval(() => {
|
|
10
|
+
onProgress?.(`[webDiscover] still running — ${finished}/${total} finished, ${Math.min(concurrency, total - finished)} in flight\n`);
|
|
11
|
+
}, 8_000);
|
|
12
|
+
heartbeat.unref?.();
|
|
13
|
+
try {
|
|
14
|
+
const workers = Array.from({ length: Math.min(concurrency, requests.length) }, async () => {
|
|
15
|
+
for (;;) {
|
|
16
|
+
const index = cursor++;
|
|
17
|
+
const request = requests[index];
|
|
18
|
+
if (!request)
|
|
19
|
+
return;
|
|
20
|
+
onProgress?.(`[webDiscover] #${index + 1}/${total} ${request.label} starting\n`);
|
|
21
|
+
const result = await httpFetch(request.url, {
|
|
22
|
+
method: "GET",
|
|
23
|
+
headers: request.headers,
|
|
24
|
+
maxBytes: 128 * 1024,
|
|
25
|
+
signal: options?.signal,
|
|
26
|
+
authorizeHop: options?.authorizeNetworkHop,
|
|
27
|
+
});
|
|
28
|
+
results[index] = { request, result };
|
|
29
|
+
finished += 1;
|
|
30
|
+
onProgress?.(`[webDiscover] #${index + 1}/${total} ${request.label} ${result.ok ? "ok" : "fail"} (${finished}/${total})\n`);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
await Promise.all(workers);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
clearInterval(heartbeat);
|
|
37
|
+
}
|
|
22
38
|
return results;
|
|
23
39
|
}
|
|
24
40
|
export async function discoverWebSurface(baseUrl, paths, options) {
|
|
@@ -28,7 +44,10 @@ export async function discoverWebSurface(baseUrl, paths, options) {
|
|
|
28
44
|
label: path,
|
|
29
45
|
url: new URL(path.startsWith("/") ? path : `/${path}`, base).toString(),
|
|
30
46
|
}));
|
|
31
|
-
|
|
47
|
+
options?.onOutput?.(`[webDiscover] starting ${requests.length} bounded request(s), concurrency=4\n`, "stdout");
|
|
48
|
+
const results = await runBoundedRequests(requests, options, 4, (line) => {
|
|
49
|
+
options?.onOutput?.(line, "stdout");
|
|
50
|
+
});
|
|
32
51
|
const observations = results.map(({ request, result }) => `${request.label}: ${result.ok ? "reachable" : "failed"}\n${result.output.slice(0, 2_000)}`);
|
|
33
52
|
return {
|
|
34
53
|
ok: results.some(({ result }) => result.ok),
|