imperium-crawl 2.3.1 → 2.5.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/README.md +146 -11
- package/dist/cli-explore.d.ts +30 -0
- package/dist/cli-explore.d.ts.map +1 -0
- package/dist/cli-explore.js +427 -0
- package/dist/cli-explore.js.map +1 -0
- package/dist/cli-recorder.d.ts +44 -0
- package/dist/cli-recorder.d.ts.map +1 -0
- package/dist/cli-recorder.js +67 -0
- package/dist/cli-recorder.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +51 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +31 -1
- package/dist/constants.js.map +1 -1
- package/dist/flows/engine.d.ts +7 -0
- package/dist/flows/engine.d.ts.map +1 -0
- package/dist/flows/engine.js +183 -0
- package/dist/flows/engine.js.map +1 -0
- package/dist/flows/index.d.ts +6 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +6 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/server.d.ts +11 -0
- package/dist/flows/server.d.ts.map +1 -0
- package/dist/flows/server.js +81 -0
- package/dist/flows/server.js.map +1 -0
- package/dist/flows/smart-target.d.ts +9 -0
- package/dist/flows/smart-target.d.ts.map +1 -0
- package/dist/flows/smart-target.js +84 -0
- package/dist/flows/smart-target.js.map +1 -0
- package/dist/flows/storage.d.ts +26 -0
- package/dist/flows/storage.d.ts.map +1 -0
- package/dist/flows/storage.js +118 -0
- package/dist/flows/storage.js.map +1 -0
- package/dist/flows/templates.d.ts +4 -0
- package/dist/flows/templates.d.ts.map +1 -0
- package/dist/flows/templates.js +35 -0
- package/dist/flows/templates.js.map +1 -0
- package/dist/flows/types.d.ts +3356 -0
- package/dist/flows/types.d.ts.map +1 -0
- package/dist/flows/types.js +133 -0
- package/dist/flows/types.js.map +1 -0
- package/dist/knowledge/index.d.ts +1 -0
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +1 -0
- package/dist/knowledge/index.js.map +1 -1
- package/dist/knowledge/record-browser.d.ts +17 -0
- package/dist/knowledge/record-browser.d.ts.map +1 -0
- package/dist/knowledge/record-browser.js +29 -0
- package/dist/knowledge/record-browser.js.map +1 -0
- package/dist/knowledge/store.d.ts +19 -0
- package/dist/knowledge/store.d.ts.map +1 -1
- package/dist/knowledge/store.js +63 -4
- package/dist/knowledge/store.js.map +1 -1
- package/dist/llm/retry.d.ts +4 -2
- package/dist/llm/retry.d.ts.map +1 -1
- package/dist/llm/retry.js +15 -4
- package/dist/llm/retry.js.map +1 -1
- package/dist/sessions/browser-connect.d.ts +30 -0
- package/dist/sessions/browser-connect.d.ts.map +1 -0
- package/dist/sessions/browser-connect.js +68 -0
- package/dist/sessions/browser-connect.js.map +1 -0
- package/dist/sessions/browser-state.d.ts +35 -0
- package/dist/sessions/browser-state.d.ts.map +1 -0
- package/dist/sessions/browser-state.js +74 -0
- package/dist/sessions/browser-state.js.map +1 -0
- package/dist/sessions/index.d.ts +1 -1
- package/dist/sessions/index.d.ts.map +1 -1
- package/dist/sessions/index.js +1 -1
- package/dist/sessions/index.js.map +1 -1
- package/dist/sessions/inject-cookies.d.ts +20 -0
- package/dist/sessions/inject-cookies.d.ts.map +1 -0
- package/dist/sessions/inject-cookies.js +57 -0
- package/dist/sessions/inject-cookies.js.map +1 -0
- package/dist/sessions/manager.d.ts +31 -1
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +97 -6
- package/dist/sessions/manager.js.map +1 -1
- package/dist/sessions/types.d.ts +2 -0
- package/dist/sessions/types.d.ts.map +1 -1
- package/dist/skills/chain.d.ts +61 -0
- package/dist/skills/chain.d.ts.map +1 -0
- package/dist/skills/chain.js +182 -0
- package/dist/skills/chain.js.map +1 -0
- package/dist/skills/conditions.d.ts +14 -0
- package/dist/skills/conditions.d.ts.map +1 -0
- package/dist/skills/conditions.js +208 -0
- package/dist/skills/conditions.js.map +1 -0
- package/dist/skills/manager.d.ts +47 -2
- package/dist/skills/manager.d.ts.map +1 -1
- package/dist/skills/manager.js.map +1 -1
- package/dist/skills/parameters.d.ts +49 -0
- package/dist/skills/parameters.d.ts.map +1 -0
- package/dist/skills/parameters.js +157 -0
- package/dist/skills/parameters.js.map +1 -0
- package/dist/snapshot/store.d.ts +8 -0
- package/dist/snapshot/store.d.ts.map +1 -1
- package/dist/snapshot/store.js +48 -0
- package/dist/snapshot/store.js.map +1 -1
- package/dist/stealth/antibot-detector.d.ts +1 -1
- package/dist/stealth/antibot-detector.d.ts.map +1 -1
- package/dist/stealth/antibot-detector.js +56 -0
- package/dist/stealth/antibot-detector.js.map +1 -1
- package/dist/stealth/browser-image-extract.d.ts +43 -0
- package/dist/stealth/browser-image-extract.d.ts.map +1 -0
- package/dist/stealth/browser-image-extract.js +268 -0
- package/dist/stealth/browser-image-extract.js.map +1 -0
- package/dist/stealth/browser.d.ts +5 -0
- package/dist/stealth/browser.d.ts.map +1 -1
- package/dist/stealth/browser.js +82 -1
- package/dist/stealth/browser.js.map +1 -1
- package/dist/stealth/chrome-profile.d.ts +1 -0
- package/dist/stealth/chrome-profile.d.ts.map +1 -1
- package/dist/stealth/chrome-profile.js +28 -5
- package/dist/stealth/chrome-profile.js.map +1 -1
- package/dist/stealth/detector.d.ts +10 -1
- package/dist/stealth/detector.d.ts.map +1 -1
- package/dist/stealth/detector.js +117 -25
- package/dist/stealth/detector.js.map +1 -1
- package/dist/stealth/headers.d.ts +1 -1
- package/dist/stealth/headers.d.ts.map +1 -1
- package/dist/stealth/headers.js +94 -2
- package/dist/stealth/headers.js.map +1 -1
- package/dist/stealth/index.d.ts +5 -0
- package/dist/stealth/index.d.ts.map +1 -1
- package/dist/stealth/index.js +257 -27
- package/dist/stealth/index.js.map +1 -1
- package/dist/stealth/proxy.d.ts +40 -1
- package/dist/stealth/proxy.d.ts.map +1 -1
- package/dist/stealth/proxy.js +90 -6
- package/dist/stealth/proxy.js.map +1 -1
- package/dist/tools/action-executor.d.ts +66 -0
- package/dist/tools/action-executor.d.ts.map +1 -0
- package/dist/tools/action-executor.js +403 -0
- package/dist/tools/action-executor.js.map +1 -0
- package/dist/tools/batch-download.d.ts +33 -0
- package/dist/tools/batch-download.d.ts.map +1 -0
- package/dist/tools/batch-download.js +208 -0
- package/dist/tools/batch-download.js.map +1 -0
- package/dist/tools/batch-scrape.d.ts +2 -2
- package/dist/tools/browser.d.ts +100 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +448 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/crawl.d.ts +2 -2
- package/dist/tools/create-skill.d.ts +2 -2
- package/dist/tools/discover-apis.d.ts +1 -1
- package/dist/tools/discover-apis.d.ts.map +1 -1
- package/dist/tools/discover-apis.js +3 -0
- package/dist/tools/discover-apis.js.map +1 -1
- package/dist/tools/download.d.ts +39 -6
- package/dist/tools/download.d.ts.map +1 -1
- package/dist/tools/download.js +248 -44
- package/dist/tools/download.js.map +1 -1
- package/dist/tools/extract.d.ts +1 -1
- package/dist/tools/image-search.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +26 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/inspect-flow.d.ts +24 -0
- package/dist/tools/inspect-flow.d.ts.map +1 -0
- package/dist/tools/inspect-flow.js +23 -0
- package/dist/tools/inspect-flow.js.map +1 -0
- package/dist/tools/instagram.d.ts +2 -2
- package/dist/tools/interact.d.ts +91 -50
- package/dist/tools/interact.d.ts.map +1 -1
- package/dist/tools/interact.js +80 -299
- package/dist/tools/interact.js.map +1 -1
- package/dist/tools/knowledge.d.ts +24 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +99 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/list-flows.d.ts +21 -0
- package/dist/tools/list-flows.d.ts.map +1 -0
- package/dist/tools/list-flows.js +18 -0
- package/dist/tools/list-flows.js.map +1 -0
- package/dist/tools/list-skills.js +1 -1
- package/dist/tools/list-skills.js.map +1 -1
- package/dist/tools/manifest.d.ts.map +1 -1
- package/dist/tools/manifest.js +48 -0
- package/dist/tools/manifest.js.map +1 -1
- package/dist/tools/monitor-websocket.d.ts +1 -1
- package/dist/tools/monitor.d.ts +46 -0
- package/dist/tools/monitor.d.ts.map +1 -0
- package/dist/tools/monitor.js +213 -0
- package/dist/tools/monitor.js.map +1 -0
- package/dist/tools/news-search.d.ts +1 -1
- package/dist/tools/pdf-extract.d.ts +38 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +244 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/query-api.d.ts +6 -6
- package/dist/tools/readability.d.ts +2 -2
- package/dist/tools/record-flow.d.ts +39 -0
- package/dist/tools/record-flow.d.ts.map +1 -0
- package/dist/tools/record-flow.js +406 -0
- package/dist/tools/record-flow.js.map +1 -0
- package/dist/tools/reddit.d.ts +4 -4
- package/dist/tools/run-flow.d.ts +54 -0
- package/dist/tools/run-flow.d.ts.map +1 -0
- package/dist/tools/run-flow.js +47 -0
- package/dist/tools/run-flow.js.map +1 -0
- package/dist/tools/run-skill.d.ts +14 -4
- package/dist/tools/run-skill.d.ts.map +1 -1
- package/dist/tools/run-skill.js +74 -0
- package/dist/tools/run-skill.js.map +1 -1
- package/dist/tools/scrape.d.ts +9 -6
- package/dist/tools/scrape.d.ts.map +1 -1
- package/dist/tools/scrape.js +19 -1
- package/dist/tools/scrape.js.map +1 -1
- package/dist/tools/screenshot.d.ts.map +1 -1
- package/dist/tools/screenshot.js +6 -0
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/search.d.ts +1 -1
- package/dist/tools/serve-flow.d.ts +36 -0
- package/dist/tools/serve-flow.d.ts.map +1 -0
- package/dist/tools/serve-flow.js +42 -0
- package/dist/tools/serve-flow.js.map +1 -0
- package/dist/tools/snapshot.d.ts +5 -5
- package/dist/tools/snapshot.d.ts.map +1 -1
- package/dist/tools/snapshot.js +3 -0
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/validate-flow.d.ts +24 -0
- package/dist/tools/validate-flow.d.ts.map +1 -0
- package/dist/tools/validate-flow.js +23 -0
- package/dist/tools/validate-flow.js.map +1 -0
- package/dist/tools/video-search.d.ts +1 -1
- package/dist/tools/watch.d.ts +68 -0
- package/dist/tools/watch.d.ts.map +1 -0
- package/dist/tools/watch.js +224 -0
- package/dist/tools/watch.js.map +1 -0
- package/dist/tools/youtube.d.ts +2 -2
- package/dist/utils/fetcher.d.ts +13 -4
- package/dist/utils/fetcher.d.ts.map +1 -1
- package/dist/utils/fetcher.js +153 -23
- package/dist/utils/fetcher.js.map +1 -1
- package/package.json +19 -5
package/dist/stealth/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { generateHeaders } from "./headers.js";
|
|
2
|
-
import { isBlocked, needsJSRendering } from "./detector.js";
|
|
2
|
+
import { isBlocked, needsJSRendering, isCaptchaPage } from "./detector.js";
|
|
3
3
|
import { detectAntiBot, parseCookieNames } from "./antibot-detector.js";
|
|
4
4
|
import { stealthFetch } from "./tls.js";
|
|
5
5
|
import { browserFetch, isPlaywrightAvailable } from "./browser.js";
|
|
@@ -7,10 +7,135 @@ import { resolveProxy } from "./proxy.js";
|
|
|
7
7
|
import { DEFAULT_TIMEOUT_MS } from "../constants.js";
|
|
8
8
|
import { getDomain } from "../utils/url.js";
|
|
9
9
|
import { getKnowledgeEngine } from "../knowledge/index.js";
|
|
10
|
+
import { getTwoCaptchaApiKey } from "../config.js";
|
|
11
|
+
/**
|
|
12
|
+
* Build a Cookie header string from stored session cookies,
|
|
13
|
+
* filtering by domain and path match for the given URL.
|
|
14
|
+
*/
|
|
15
|
+
function buildCookieHeader(cookies, url) {
|
|
16
|
+
const parsed = new URL(url);
|
|
17
|
+
const hostname = parsed.hostname;
|
|
18
|
+
const pathname = parsed.pathname;
|
|
19
|
+
const now = Date.now() / 1000;
|
|
20
|
+
return cookies
|
|
21
|
+
.filter((c) => {
|
|
22
|
+
// Domain match: cookie domain ".example.com" matches "sub.example.com"
|
|
23
|
+
const cookieDomain = c.domain.startsWith(".") ? c.domain : `.${c.domain}`;
|
|
24
|
+
if (!`.${hostname}`.endsWith(cookieDomain))
|
|
25
|
+
return false;
|
|
26
|
+
// Path match
|
|
27
|
+
if (c.path && !pathname.startsWith(c.path))
|
|
28
|
+
return false;
|
|
29
|
+
// Expiry check
|
|
30
|
+
if (c.expires && c.expires > 0 && c.expires < now)
|
|
31
|
+
return false;
|
|
32
|
+
return true;
|
|
33
|
+
})
|
|
34
|
+
.map((c) => `${c.name}=${c.value}`)
|
|
35
|
+
.join("; ");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Load session cookies and build Cookie header if sessionId is provided.
|
|
39
|
+
*/
|
|
40
|
+
async function getSessionCookieHeader(sessionId, url) {
|
|
41
|
+
if (!sessionId)
|
|
42
|
+
return undefined;
|
|
43
|
+
const { getSessionManager } = await import("../sessions/manager.js");
|
|
44
|
+
const session = await getSessionManager().load(sessionId);
|
|
45
|
+
if (!session?.cookies.length)
|
|
46
|
+
return undefined;
|
|
47
|
+
const header = buildCookieHeader(session.cookies, url);
|
|
48
|
+
return header || undefined;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse Set-Cookie headers into StoredCookie objects for accumulation.
|
|
52
|
+
*/
|
|
53
|
+
function parseSetCookieHeaders(setCookieHeader, url) {
|
|
54
|
+
if (!setCookieHeader)
|
|
55
|
+
return [];
|
|
56
|
+
const parsed = new URL(url);
|
|
57
|
+
const cookies = [];
|
|
58
|
+
// Set-Cookie headers are joined by comma, but cookie values can contain commas in expires
|
|
59
|
+
// Split carefully: split on commas NOT followed by a space and day-of-week pattern
|
|
60
|
+
const rawCookies = setCookieHeader.split(/,(?=\s*[a-zA-Z_][a-zA-Z0-9_]*=)/);
|
|
61
|
+
for (const raw of rawCookies) {
|
|
62
|
+
const trimmed = raw.trim();
|
|
63
|
+
if (!trimmed)
|
|
64
|
+
continue;
|
|
65
|
+
const parts = trimmed.split(";").map((p) => p.trim());
|
|
66
|
+
const nameValue = parts[0];
|
|
67
|
+
const eqIdx = nameValue.indexOf("=");
|
|
68
|
+
if (eqIdx <= 0)
|
|
69
|
+
continue;
|
|
70
|
+
const name = nameValue.substring(0, eqIdx).trim();
|
|
71
|
+
const value = nameValue.substring(eqIdx + 1).trim();
|
|
72
|
+
const cookie = {
|
|
73
|
+
name,
|
|
74
|
+
value,
|
|
75
|
+
domain: parsed.hostname,
|
|
76
|
+
path: "/",
|
|
77
|
+
};
|
|
78
|
+
// Parse cookie attributes
|
|
79
|
+
for (let i = 1; i < parts.length; i++) {
|
|
80
|
+
const attr = parts[i].toLowerCase();
|
|
81
|
+
if (attr.startsWith("domain=")) {
|
|
82
|
+
cookie.domain = parts[i].substring(7).trim();
|
|
83
|
+
}
|
|
84
|
+
else if (attr.startsWith("path=")) {
|
|
85
|
+
cookie.path = parts[i].substring(5).trim();
|
|
86
|
+
}
|
|
87
|
+
else if (attr.startsWith("expires=")) {
|
|
88
|
+
const expiresStr = parts[i].substring(8).trim();
|
|
89
|
+
const ts = Date.parse(expiresStr);
|
|
90
|
+
if (!isNaN(ts))
|
|
91
|
+
cookie.expires = ts / 1000;
|
|
92
|
+
}
|
|
93
|
+
else if (attr.startsWith("max-age=")) {
|
|
94
|
+
const maxAge = parseInt(parts[i].substring(8).trim(), 10);
|
|
95
|
+
if (!isNaN(maxAge))
|
|
96
|
+
cookie.expires = Date.now() / 1000 + maxAge;
|
|
97
|
+
}
|
|
98
|
+
else if (attr === "httponly") {
|
|
99
|
+
cookie.httpOnly = true;
|
|
100
|
+
}
|
|
101
|
+
else if (attr === "secure") {
|
|
102
|
+
cookie.secure = true;
|
|
103
|
+
}
|
|
104
|
+
else if (attr.startsWith("samesite=")) {
|
|
105
|
+
const ss = parts[i].substring(9).trim();
|
|
106
|
+
if (ss === "Strict" || ss === "Lax" || ss === "None")
|
|
107
|
+
cookie.sameSite = ss;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
cookies.push(cookie);
|
|
111
|
+
}
|
|
112
|
+
return cookies;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Merge new cookies into accumulated map (last write wins per name+domain).
|
|
116
|
+
*/
|
|
117
|
+
function mergeAccumulatedCookies(accumulated, newCookies) {
|
|
118
|
+
for (const cookie of newCookies) {
|
|
119
|
+
const key = `${cookie.domain}:${cookie.name}`;
|
|
120
|
+
accumulated.set(key, cookie);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Build a Cookie header string from accumulated cookies for a given URL.
|
|
125
|
+
*/
|
|
126
|
+
function buildAccumulatedCookieHeader(accumulated, url) {
|
|
127
|
+
if (accumulated.size === 0)
|
|
128
|
+
return undefined;
|
|
129
|
+
const cookies = Array.from(accumulated.values());
|
|
130
|
+
const header = buildCookieHeader(cookies, url);
|
|
131
|
+
return header || undefined;
|
|
132
|
+
}
|
|
10
133
|
export class StealthError extends Error {
|
|
11
134
|
lastLevel;
|
|
12
135
|
httpStatus;
|
|
13
136
|
antiBotSystem;
|
|
137
|
+
/** Best partial result collected during escalation, if any */
|
|
138
|
+
partialResult;
|
|
14
139
|
constructor(message, lastLevel, httpStatus, antiBotSystem) {
|
|
15
140
|
super(message);
|
|
16
141
|
this.lastLevel = lastLevel;
|
|
@@ -51,8 +176,15 @@ function cacheLevel(url, level) {
|
|
|
51
176
|
renderingCache.set(getDomain(url), { level, timestamp: Date.now() });
|
|
52
177
|
}
|
|
53
178
|
// ── Level Fetchers ──
|
|
54
|
-
async function level1Fetch(url, timeout, proxyUrl) {
|
|
55
|
-
const headers = generateHeaders();
|
|
179
|
+
async function level1Fetch(url, timeout, proxyUrl, sessionId, accumulatedCookieHeader) {
|
|
180
|
+
const headers = generateHeaders(undefined, url);
|
|
181
|
+
// Inject session cookies if available
|
|
182
|
+
const sessionCookieHeader = await getSessionCookieHeader(sessionId, url);
|
|
183
|
+
// Merge: session cookies + accumulated cookies (accumulated take precedence)
|
|
184
|
+
const cookieParts = [sessionCookieHeader, accumulatedCookieHeader].filter(Boolean);
|
|
185
|
+
if (cookieParts.length > 0) {
|
|
186
|
+
headers["Cookie"] = cookieParts.join("; ");
|
|
187
|
+
}
|
|
56
188
|
const fetchOptions = {
|
|
57
189
|
headers,
|
|
58
190
|
redirect: "follow",
|
|
@@ -68,31 +200,90 @@ async function level1Fetch(url, timeout, proxyUrl) {
|
|
|
68
200
|
const responseHeaders = Object.fromEntries(res.headers.entries());
|
|
69
201
|
return { html, status: res.status, url: res.url, level: 1, headers: responseHeaders, proxyUsed: proxyUrl };
|
|
70
202
|
}
|
|
71
|
-
async function level2Fetch(url, timeout, proxyUrl) {
|
|
72
|
-
|
|
203
|
+
async function level2Fetch(url, timeout, proxyUrl, sessionId, accumulatedCookieHeader) {
|
|
204
|
+
// Inject session cookies as custom headers for Impit
|
|
205
|
+
const sessionCookieHeader = await getSessionCookieHeader(sessionId, url);
|
|
206
|
+
const cookieParts = [sessionCookieHeader, accumulatedCookieHeader].filter(Boolean);
|
|
207
|
+
const extraHeaders = cookieParts.length > 0 ? { Cookie: cookieParts.join("; ") } : undefined;
|
|
208
|
+
const result = await stealthFetch({ url, timeout, proxyUrl, headers: extraHeaders });
|
|
73
209
|
return { ...result, level: 2, proxyUsed: proxyUrl };
|
|
74
210
|
}
|
|
75
|
-
async function level3Fetch(url, timeout, screenshot, proxyUrl, chromeProfile) {
|
|
76
|
-
const result = await browserFetch(url, {
|
|
211
|
+
async function level3Fetch(url, timeout, screenshot, proxyUrl, chromeProfile, accumulatedCookies) {
|
|
212
|
+
const result = await browserFetch(url, {
|
|
213
|
+
timeout,
|
|
214
|
+
screenshot,
|
|
215
|
+
proxyUrl,
|
|
216
|
+
chromeProfile,
|
|
217
|
+
cookies: accumulatedCookies,
|
|
218
|
+
});
|
|
77
219
|
return { ...result, level: 3, proxyUsed: proxyUrl, chromeProfile: result.chromeProfile };
|
|
78
220
|
}
|
|
79
|
-
// ── Smart Fetch with Cache + Anti-bot Detection ──
|
|
80
|
-
function checkResult(result) {
|
|
221
|
+
// ── Smart Fetch with Cache + Anti-bot Detection + Cookie Preservation ──
|
|
222
|
+
function checkResult(result, hasCaptchaKey) {
|
|
81
223
|
const responseHeaders = result.headers || {};
|
|
82
|
-
|
|
224
|
+
const blocked = isBlocked(result.html, result.status, responseHeaders);
|
|
225
|
+
// If page has CAPTCHA and we have a key to solve it, don't treat as blocked
|
|
226
|
+
// (L3 browserFetch will handle CAPTCHA solving)
|
|
227
|
+
if (blocked && hasCaptchaKey && isCaptchaPage(result.html)) {
|
|
228
|
+
return false; // Not "ok" yet, but not a hard block — let escalation handle it
|
|
229
|
+
}
|
|
230
|
+
return !blocked && !needsJSRendering(result.html);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check if a result is blocked specifically by CAPTCHA only (solvable).
|
|
234
|
+
*/
|
|
235
|
+
function isBlockedByCaptchaOnly(result) {
|
|
236
|
+
const responseHeaders = result.headers || {};
|
|
237
|
+
if (!isCaptchaPage(result.html))
|
|
238
|
+
return false;
|
|
239
|
+
// If it's a CAPTCHA page, check if removing CAPTCHA indicators would make it "not blocked"
|
|
240
|
+
return isBlocked(result.html, result.status, responseHeaders);
|
|
83
241
|
}
|
|
84
242
|
export async function smartFetch(url, options) {
|
|
85
243
|
const timeout = options?.timeout || DEFAULT_TIMEOUT_MS;
|
|
86
244
|
const maxLevel = options?.maxLevel || 3;
|
|
87
245
|
const proxyUrl = resolveProxy(options?.proxy);
|
|
88
246
|
const chromeProfile = options?.chromeProfile;
|
|
247
|
+
const sessionId = options?.sessionId;
|
|
89
248
|
const domain = getDomain(url);
|
|
90
249
|
const engine = getKnowledgeEngine();
|
|
91
250
|
const fetchStart = Date.now();
|
|
251
|
+
const hasCaptchaKey = !!getTwoCaptchaApiKey();
|
|
252
|
+
// ── Cookie accumulation across escalation levels ──
|
|
253
|
+
const accumulatedCookies = new Map();
|
|
254
|
+
/** Extract and accumulate cookies from a fetch result */
|
|
255
|
+
function accumulateCookies(result) {
|
|
256
|
+
const setCookie = result.headers?.["set-cookie"];
|
|
257
|
+
if (setCookie) {
|
|
258
|
+
const parsed = parseSetCookieHeaders(setCookie, result.url);
|
|
259
|
+
mergeAccumulatedCookies(accumulatedCookies, parsed);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/** Get accumulated cookies as header string */
|
|
263
|
+
function getAccumulatedCookieHeader() {
|
|
264
|
+
return buildAccumulatedCookieHeader(accumulatedCookies, url);
|
|
265
|
+
}
|
|
266
|
+
/** Get accumulated cookies as StoredCookie array (for browser injection) */
|
|
267
|
+
function getAccumulatedCookiesArray() {
|
|
268
|
+
if (accumulatedCookies.size === 0)
|
|
269
|
+
return undefined;
|
|
270
|
+
return Array.from(accumulatedCookies.values());
|
|
271
|
+
}
|
|
92
272
|
// ── Tracking state across escalation ──
|
|
93
273
|
let detectedAntiBot = null;
|
|
94
274
|
let lastHttpStatus = 0;
|
|
95
275
|
let lastLevel = 1;
|
|
276
|
+
let bestPartialResult = null;
|
|
277
|
+
/** Track the best partial result (most content) for error recovery */
|
|
278
|
+
function trackBestResult(result) {
|
|
279
|
+
if (!bestPartialResult || result.html.length > bestPartialResult.html.length) {
|
|
280
|
+
bestPartialResult = result;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/** Get the best partial result (avoids TS narrowing issues with closured variable) */
|
|
284
|
+
function getBestPartial() {
|
|
285
|
+
return bestPartialResult;
|
|
286
|
+
}
|
|
96
287
|
/** Record success outcome and return enriched result */
|
|
97
288
|
function recordSuccess(result) {
|
|
98
289
|
result.antiBotSystem = detectedAntiBot ?? undefined;
|
|
@@ -117,7 +308,7 @@ export async function smartFetch(url, options) {
|
|
|
117
308
|
}
|
|
118
309
|
// Forced level — skip all heuristics
|
|
119
310
|
if (options?.forceLevel) {
|
|
120
|
-
const result = await fetchByLevel(url, timeout, options.forceLevel, options.screenshot, proxyUrl);
|
|
311
|
+
const result = await fetchByLevel(url, timeout, options.forceLevel, options.screenshot, proxyUrl, sessionId);
|
|
121
312
|
cacheLevel(url, options.forceLevel);
|
|
122
313
|
return recordSuccess(result);
|
|
123
314
|
}
|
|
@@ -125,11 +316,13 @@ export async function smartFetch(url, options) {
|
|
|
125
316
|
const cachedLevel = getCachedLevel(url);
|
|
126
317
|
if (cachedLevel && cachedLevel <= maxLevel) {
|
|
127
318
|
try {
|
|
128
|
-
const result = await fetchByLevel(url, timeout, cachedLevel, options?.screenshot, proxyUrl);
|
|
129
|
-
if (checkResult(result)) {
|
|
319
|
+
const result = await fetchByLevel(url, timeout, cachedLevel, options?.screenshot, proxyUrl, sessionId);
|
|
320
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
130
321
|
return recordSuccess(result);
|
|
131
322
|
}
|
|
132
323
|
// Cache was wrong — invalidate and fall through to full escalation
|
|
324
|
+
accumulateCookies(result);
|
|
325
|
+
trackBestResult(result);
|
|
133
326
|
lastHttpStatus = result.status;
|
|
134
327
|
lastLevel = cachedLevel;
|
|
135
328
|
renderingCache.delete(getDomain(url));
|
|
@@ -143,11 +336,13 @@ export async function smartFetch(url, options) {
|
|
|
143
336
|
if (prediction && prediction.confidence >= 0.7 && prediction.startLevel > 1) {
|
|
144
337
|
const startLevel = Math.min(prediction.startLevel, maxLevel);
|
|
145
338
|
try {
|
|
146
|
-
const result = await fetchByLevel(url, timeout, startLevel, options?.screenshot, proxyUrl);
|
|
147
|
-
if (checkResult(result)) {
|
|
339
|
+
const result = await fetchByLevel(url, timeout, startLevel, options?.screenshot, proxyUrl, sessionId);
|
|
340
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
148
341
|
cacheLevel(url, startLevel);
|
|
149
342
|
return recordSuccess(result);
|
|
150
343
|
}
|
|
344
|
+
accumulateCookies(result);
|
|
345
|
+
trackBestResult(result);
|
|
151
346
|
lastHttpStatus = result.status;
|
|
152
347
|
lastLevel = startLevel;
|
|
153
348
|
// Predicted level failed — fall through to normal escalation
|
|
@@ -159,8 +354,10 @@ export async function smartFetch(url, options) {
|
|
|
159
354
|
// Level 1: native fetch + realistic headers
|
|
160
355
|
if (maxLevel >= 1) {
|
|
161
356
|
try {
|
|
162
|
-
const result = await level1Fetch(url, timeout, proxyUrl);
|
|
163
|
-
|
|
357
|
+
const result = await level1Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
358
|
+
accumulateCookies(result);
|
|
359
|
+
trackBestResult(result);
|
|
360
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
164
361
|
cacheLevel(url, 1);
|
|
165
362
|
return recordSuccess(result);
|
|
166
363
|
}
|
|
@@ -173,10 +370,24 @@ export async function smartFetch(url, options) {
|
|
|
173
370
|
if (detection.system !== "none") {
|
|
174
371
|
detectedAntiBot = detection.system;
|
|
175
372
|
}
|
|
373
|
+
// If blocked by CAPTCHA only and we have a key, skip to L3 directly
|
|
374
|
+
if (hasCaptchaKey && isBlockedByCaptchaOnly(result) && maxLevel >= 3) {
|
|
375
|
+
if (await isPlaywrightAvailable()) {
|
|
376
|
+
const l3Result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl, undefined, getAccumulatedCookiesArray());
|
|
377
|
+
accumulateCookies(l3Result);
|
|
378
|
+
// If L3 solved CAPTCHA, re-check the result
|
|
379
|
+
if (l3Result.captchaSolved || checkResult(l3Result, false)) {
|
|
380
|
+
cacheLevel(url, 3);
|
|
381
|
+
return recordSuccess(l3Result);
|
|
382
|
+
}
|
|
383
|
+
trackBestResult(l3Result);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
176
386
|
// If anti-bot detected and recommends Level 3, skip Level 2
|
|
177
387
|
if (detection.system !== "none" && detection.recommendedLevel === 3 && maxLevel >= 3) {
|
|
178
388
|
if (await isPlaywrightAvailable()) {
|
|
179
|
-
const l3Result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl);
|
|
389
|
+
const l3Result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl, undefined, getAccumulatedCookiesArray());
|
|
390
|
+
accumulateCookies(l3Result);
|
|
180
391
|
cacheLevel(url, 3);
|
|
181
392
|
return recordSuccess(l3Result);
|
|
182
393
|
}
|
|
@@ -189,8 +400,10 @@ export async function smartFetch(url, options) {
|
|
|
189
400
|
// Level 2: impit TLS stealth
|
|
190
401
|
if (maxLevel >= 2) {
|
|
191
402
|
try {
|
|
192
|
-
const result = await level2Fetch(url, timeout, proxyUrl);
|
|
193
|
-
|
|
403
|
+
const result = await level2Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
404
|
+
accumulateCookies(result);
|
|
405
|
+
trackBestResult(result);
|
|
406
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
194
407
|
cacheLevel(url, 2);
|
|
195
408
|
return recordSuccess(result);
|
|
196
409
|
}
|
|
@@ -203,19 +416,27 @@ export async function smartFetch(url, options) {
|
|
|
203
416
|
}
|
|
204
417
|
// Level 3: headless browser
|
|
205
418
|
if (maxLevel >= 3 && (await isPlaywrightAvailable())) {
|
|
206
|
-
const result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl);
|
|
419
|
+
const result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl, undefined, getAccumulatedCookiesArray());
|
|
420
|
+
accumulateCookies(result);
|
|
421
|
+
trackBestResult(result);
|
|
422
|
+
// If CAPTCHA was solved or result is OK, return success
|
|
423
|
+
if (result.captchaSolved || checkResult(result, false)) {
|
|
424
|
+
cacheLevel(url, 3);
|
|
425
|
+
return recordSuccess(result);
|
|
426
|
+
}
|
|
427
|
+
// L3 got content but failed checks — still return if it's the best we have
|
|
207
428
|
cacheLevel(url, 3);
|
|
208
429
|
return recordSuccess(result);
|
|
209
430
|
}
|
|
210
431
|
// Fallback: return best effort from level 2, then level 1
|
|
211
432
|
try {
|
|
212
|
-
const result = await level2Fetch(url, timeout, proxyUrl);
|
|
433
|
+
const result = await level2Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
213
434
|
lastLevel = 2;
|
|
214
435
|
return recordSuccess(result);
|
|
215
436
|
}
|
|
216
437
|
catch {
|
|
217
438
|
try {
|
|
218
|
-
const result = await level1Fetch(url, timeout, proxyUrl);
|
|
439
|
+
const result = await level1Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
219
440
|
lastLevel = 1;
|
|
220
441
|
return recordSuccess(result);
|
|
221
442
|
}
|
|
@@ -232,16 +453,25 @@ export async function smartFetch(url, options) {
|
|
|
232
453
|
blocked: true,
|
|
233
454
|
httpStatus: lastHttpStatus,
|
|
234
455
|
});
|
|
235
|
-
|
|
456
|
+
// If we have a partial result, return it as degraded instead of throwing
|
|
457
|
+
const partial = getBestPartial();
|
|
458
|
+
if (partial && partial.html.length > 100) {
|
|
459
|
+
partial.degraded = true;
|
|
460
|
+
partial.antiBotSystem = detectedAntiBot ?? undefined;
|
|
461
|
+
return partial;
|
|
462
|
+
}
|
|
463
|
+
const error = new StealthError(`All stealth levels failed for ${url}: ${finalErr instanceof Error ? finalErr.message : String(finalErr)}`, lastLevel, lastHttpStatus, detectedAntiBot);
|
|
464
|
+
error.partialResult = partial ?? undefined;
|
|
465
|
+
throw error;
|
|
236
466
|
}
|
|
237
467
|
}
|
|
238
468
|
}
|
|
239
|
-
async function fetchByLevel(url, timeout, level, screenshot, proxyUrl) {
|
|
469
|
+
async function fetchByLevel(url, timeout, level, screenshot, proxyUrl, sessionId) {
|
|
240
470
|
switch (level) {
|
|
241
471
|
case 1:
|
|
242
|
-
return level1Fetch(url, timeout, proxyUrl);
|
|
472
|
+
return level1Fetch(url, timeout, proxyUrl, sessionId);
|
|
243
473
|
case 2:
|
|
244
|
-
return level2Fetch(url, timeout, proxyUrl);
|
|
474
|
+
return level2Fetch(url, timeout, proxyUrl, sessionId);
|
|
245
475
|
case 3:
|
|
246
476
|
return level3Fetch(url, timeout, screenshot, proxyUrl);
|
|
247
477
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stealth/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stealth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD;;;GAGG;AACH,SAAS,iBAAiB,CAAC,OAAuB,EAAE,GAAW;IAC7D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAE9B,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,uEAAuE;QACvE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,aAAa;QACb,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACzD,eAAe;QACf,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;SAClC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CAAC,SAA6B,EAAE,GAAW;IAC9E,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACvD,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,eAAmC,EAAE,GAAW;IAC7E,IAAI,CAAC,eAAe;QAAE,OAAO,EAAE,CAAC;IAEhC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,0FAA0F;IAC1F,mFAAmF;IACnF,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAE5E,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,IAAI,CAAC;YAAE,SAAS;QAEzB,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEpD,MAAM,MAAM,GAAiB;YAC3B,IAAI;YACJ,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,QAAQ;YACvB,IAAI,EAAE,GAAG;SACV,CAAC;QAEF,0BAA0B;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;YAC7C,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC;YAClE,CAAC;iBAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;YACzB,CAAC;iBAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;YACvB,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxC,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM;oBAAE,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;YAC7E,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,WAAsC,EACtC,UAA0B;IAE1B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CAAC,WAAsC,EAAE,GAAW;IACvF,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAmBD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAMnB;IACA;IACA;IAPlB,8DAA8D;IACvD,aAAa,CAAe;IAEnC,YACE,OAAe,EACC,SAAuB,EACvB,UAAkB,EAClB,aAA4B;QAE5C,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,cAAS,GAAT,SAAS,CAAc;QACvB,eAAU,GAAV,UAAU,CAAQ;QAClB,kBAAa,GAAb,aAAa,CAAe;QAG5C,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAYD,iCAAiC;AACjC,qEAAqE;AACrE,MAAM,YAAY,GAAG,SAAS,CAAC;AAO/B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAsB,CAAC;AACrD,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAEtC,sEAAsE;AACtE,WAAW,CAAC,GAAG,EAAE;IACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;QAC7C,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YACzC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,GAAG,wBAAwB,EAAE,CAAC;QACnD,cAAc,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;AAEnB,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;QAChD,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC;AACrB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAE,KAAmB;IAClD,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,uBAAuB;AAEvB,KAAK,UAAU,WAAW,CACxB,GAAW,EACX,OAAe,EACf,QAAiB,EACjB,SAAkB,EAClB,uBAAgC;IAEhC,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEhD,sCAAsC;IACtC,MAAM,mBAAmB,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACzE,6EAA6E;IAC7E,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAkC,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,YAAY,GAA2C;QAC3D,OAAO;QACP,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;KACrC,CAAC;IAEF,kDAAkD;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,YAAwC,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAA2B,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAW,EACX,OAAe,EACf,QAAiB,EACjB,SAAkB,EAClB,uBAAgC;IAEhC,qDAAqD;IACrD,MAAM,mBAAmB,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAE7F,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IACrF,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,GAAW,EACX,OAAe,EACf,UAAoB,EACpB,QAAiB,EACjB,aAAsB,EACtB,kBAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE;QACrC,OAAO;QACP,UAAU;QACV,QAAQ;QACR,aAAa;QACb,OAAO,EAAE,kBAAkB;KAC5B,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;AAC3F,CAAC;AAED,0EAA0E;AAE1E,SAAS,WAAW,CAAC,MAAmB,EAAE,aAAsB;IAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAEvE,4EAA4E;IAC5E,gDAAgD;IAChD,IAAI,OAAO,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC,CAAC,gEAAgE;IAChF,CAAC;IAED,OAAO,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAmB;IACjD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,2FAA2F;IAC3F,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,OAAwB;IACpE,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,kBAAkB,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAG,CAAC,CAAC,mBAAmB,EAAE,CAAC;IAE9C,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE3D,yDAAyD;IACzD,SAAS,iBAAiB,CAAC,MAAmB;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5D,uBAAuB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,SAAS,0BAA0B;QACjC,OAAO,4BAA4B,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;IAED,4EAA4E;IAC5E,SAAS,0BAA0B;QACjC,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,yCAAyC;IACzC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,SAAS,GAAiB,CAAC,CAAC;IAChC,IAAI,iBAAiB,GAAuB,IAAI,CAAC;IAEjD,sEAAsE;IACtE,SAAS,eAAe,CAAC,MAAmB;QAC1C,IAAI,CAAC,iBAAiB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7E,iBAAiB,GAAG,MAAM,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,SAAS,cAAc;QACrB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,wDAAwD;IACxD,SAAS,aAAa,CAAC,MAAmB;QACxC,MAAM,CAAC,aAAa,GAAG,eAAe,IAAI,SAAS,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM;YACX,SAAS,EAAE,MAAM,CAAC,KAAK;YACvB,OAAO,EAAE,IAAI;YACb,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;YACvC,aAAa,EAAE,eAAe;YAC9B,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI;YACrD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS;YAC7B,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,MAAM,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0EAA0E;IAC1E,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC7F,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7G,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,gEAAgE;IAChE,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,WAAW,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACvG,IAAI,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBACvC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,mEAAmE;YACnE,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;YACxB,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,SAAS,GAAG,WAAW,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAiB,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtG,IAAI,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBACvC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAC5B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;YACxB,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,SAAS,GAAG,UAAU,CAAC;YACvB,6DAA6D;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAClG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;YAExB,IAAI,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBACvC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,SAAS,GAAG,CAAC,CAAC;YAEd,+CAA+C;YAC/C,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,gBAAgB,CAC9B,eAAe,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CACrE,CAAC;YACF,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAEvE,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChC,eAAe,GAAG,SAAS,CAAC,MAAM,CAAC;YACrC,CAAC;YAED,oEAAoE;YACpE,IAAI,aAAa,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBACrE,IAAI,MAAM,qBAAqB,EAAE,EAAE,CAAC;oBAClC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CACrF,CAAC;oBACF,iBAAiB,CAAC,QAAQ,CAAC,CAAC;oBAE5B,4CAA4C;oBAC5C,IAAI,QAAQ,CAAC,aAAa,IAAI,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;wBAC3D,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBACnB,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACjC,CAAC;oBACD,eAAe,CAAC,QAAQ,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,4DAA4D;YAC5D,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,IAAI,SAAS,CAAC,gBAAgB,KAAK,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;gBACrF,IAAI,MAAM,qBAAqB,EAAE,EAAE,CAAC;oBAClC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAChC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CACrF,CAAC;oBACF,iBAAiB,CAAC,QAAQ,CAAC,CAAC;oBAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBACnB,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAClG,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;YAExB,IAAI,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;gBACvC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,SAAS,GAAG,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,WAAW;QACb,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,qBAAqB,EAAE,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CACrF,CAAC;QACF,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,eAAe,CAAC,MAAM,CAAC,CAAC;QAExB,wDAAwD;QACxD,IAAI,MAAM,CAAC,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;YACvD,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,2EAA2E;QAC3E,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACnB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,0DAA0D;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAClG,SAAS,GAAG,CAAC,CAAC;QACd,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAClG,SAAS,GAAG,CAAC,CAAC;YACd,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,iCAAiC;YACjC,MAAM,CAAC,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM;gBACX,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU;gBACvC,aAAa,EAAE,eAAe;gBAC9B,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,CAAC,CAAC,QAAQ;gBACrB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,cAAc;aAC3B,CAAC,CAAC;YAEH,yEAAyE;YACzE,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACzC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACxB,OAAO,CAAC,aAAa,GAAG,eAAe,IAAI,SAAS,CAAC;gBACrD,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,YAAY,CAC5B,iCAAiC,GAAG,KAAK,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAC1G,SAAS,EACT,cAAc,EACd,eAAe,CAChB,CAAC;YACF,KAAK,CAAC,aAAa,GAAG,OAAO,IAAI,SAAS,CAAC;YAC3C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,GAAW,EACX,OAAe,EACf,KAAmB,EACnB,UAAoB,EACpB,QAAiB,EACjB,SAAkB;IAElB,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,KAAK,CAAC;YACJ,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/stealth/proxy.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Proxy parsing, validation,
|
|
2
|
+
* Proxy parsing, validation, round-robin rotation with health tracking.
|
|
3
3
|
*
|
|
4
4
|
* Supports: http, https, socks4, socks5 proxy URLs.
|
|
5
5
|
* Priority: per-request override > rotator.next() > undefined (no proxy).
|
|
6
|
+
*
|
|
7
|
+
* Health tracking: each proxy tracks success/failure counts and cooldown.
|
|
8
|
+
* Failed proxies are skipped for COOLDOWN_MS before being retried.
|
|
6
9
|
*/
|
|
7
10
|
export interface ParsedProxy {
|
|
8
11
|
url: string;
|
|
@@ -12,13 +15,40 @@ export interface ParsedProxy {
|
|
|
12
15
|
username?: string;
|
|
13
16
|
password?: string;
|
|
14
17
|
}
|
|
18
|
+
interface ProxyHealth {
|
|
19
|
+
successCount: number;
|
|
20
|
+
failureCount: number;
|
|
21
|
+
lastSuccessTime: number;
|
|
22
|
+
lastFailureTime: number;
|
|
23
|
+
cooldownUntil: number;
|
|
24
|
+
}
|
|
15
25
|
export declare function parseProxyUrl(raw: string): ParsedProxy;
|
|
16
26
|
export declare class ProxyRotator {
|
|
17
27
|
private proxies;
|
|
18
28
|
private index;
|
|
29
|
+
private health;
|
|
19
30
|
constructor(urls: string[]);
|
|
20
31
|
get size(): number;
|
|
32
|
+
/**
|
|
33
|
+
* Get next healthy proxy, skipping those in cooldown.
|
|
34
|
+
* If ALL proxies are in cooldown, returns the one whose cooldown expires soonest.
|
|
35
|
+
*/
|
|
21
36
|
next(): ParsedProxy | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Mark a proxy as having succeeded. Resets its failure state.
|
|
39
|
+
*/
|
|
40
|
+
markSuccess(proxyUrl: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Mark a proxy as having failed. Puts it in cooldown.
|
|
43
|
+
*/
|
|
44
|
+
markFailed(proxyUrl: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get health stats for all proxies (for debugging/monitoring).
|
|
47
|
+
*/
|
|
48
|
+
getHealthStats(): Array<{
|
|
49
|
+
url: string;
|
|
50
|
+
health: ProxyHealth;
|
|
51
|
+
}>;
|
|
22
52
|
}
|
|
23
53
|
export declare function initProxyRotator(): void;
|
|
24
54
|
/**
|
|
@@ -26,5 +56,14 @@ export declare function initProxyRotator(): void;
|
|
|
26
56
|
* Priority: per-request override > rotator > undefined.
|
|
27
57
|
*/
|
|
28
58
|
export declare function resolveProxy(override?: string): string | undefined;
|
|
59
|
+
/**
|
|
60
|
+
* Mark a proxy as having succeeded (for health tracking).
|
|
61
|
+
*/
|
|
62
|
+
export declare function markProxySuccess(proxyUrl?: string): void;
|
|
63
|
+
/**
|
|
64
|
+
* Mark a proxy as having failed (puts it in cooldown).
|
|
65
|
+
*/
|
|
66
|
+
export declare function markProxyFailed(proxyUrl?: string): void;
|
|
29
67
|
export declare function hasProxyConfigured(): boolean;
|
|
68
|
+
export {};
|
|
30
69
|
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/stealth/proxy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/stealth/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAgBtD;AAMD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,MAAM,CAAkC;gBAEpC,IAAI,EAAE,MAAM,EAAE;IAmB1B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;OAGG;IACH,IAAI,IAAI,WAAW,GAAG,SAAS;IAiC/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASnC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IASlC;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC;CAM9D;AAMD,wBAAgB,gBAAgB,IAAI,IAAI,CAmBvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAIvD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
|