imperium-crawl 2.4.0 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +130 -11
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +23 -3
- package/dist/cli.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/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/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/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 +11 -1
- package/dist/sessions/manager.d.ts.map +1 -1
- package/dist/sessions/manager.js +40 -6
- package/dist/sessions/manager.js.map +1 -1
- 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 +4 -0
- package/dist/stealth/index.d.ts.map +1 -1
- package/dist/stealth/index.js +207 -25
- 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 +2 -0
- package/dist/tools/action-executor.d.ts.map +1 -1
- package/dist/tools/action-executor.js +38 -0
- package/dist/tools/action-executor.js.map +1 -1
- 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/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/download.d.ts +35 -2
- package/dist/tools/download.d.ts.map +1 -1
- package/dist/tools/download.js +245 -44
- package/dist/tools/download.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +23 -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/interact.d.ts +28 -15
- package/dist/tools/interact.d.ts.map +1 -1
- package/dist/tools/interact.js +48 -1
- package/dist/tools/interact.js.map +1 -1
- 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/manifest.d.ts.map +1 -1
- package/dist/tools/manifest.js +43 -0
- package/dist/tools/manifest.js.map +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/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/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/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 +2 -2
- package/dist/tools/run-skill.d.ts.map +1 -1
- package/dist/tools/run-skill.js +1 -0
- package/dist/tools/run-skill.js.map +1 -1
- package/dist/tools/scrape.d.ts.map +1 -1
- package/dist/tools/scrape.js +17 -1
- package/dist/tools/scrape.js.map +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/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/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/utils/fetcher.d.ts +13 -4
- package/dist/utils/fetcher.d.ts.map +1 -1
- package/dist/utils/fetcher.js +121 -24
- package/dist/utils/fetcher.js.map +1 -1
- package/package.json +15 -4
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,6 +7,7 @@ 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";
|
|
10
11
|
/**
|
|
11
12
|
* Build a Cookie header string from stored session cookies,
|
|
12
13
|
* filtering by domain and path match for the given URL.
|
|
@@ -46,10 +47,95 @@ async function getSessionCookieHeader(sessionId, url) {
|
|
|
46
47
|
const header = buildCookieHeader(session.cookies, url);
|
|
47
48
|
return header || undefined;
|
|
48
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
|
+
}
|
|
49
133
|
export class StealthError extends Error {
|
|
50
134
|
lastLevel;
|
|
51
135
|
httpStatus;
|
|
52
136
|
antiBotSystem;
|
|
137
|
+
/** Best partial result collected during escalation, if any */
|
|
138
|
+
partialResult;
|
|
53
139
|
constructor(message, lastLevel, httpStatus, antiBotSystem) {
|
|
54
140
|
super(message);
|
|
55
141
|
this.lastLevel = lastLevel;
|
|
@@ -90,12 +176,14 @@ function cacheLevel(url, level) {
|
|
|
90
176
|
renderingCache.set(getDomain(url), { level, timestamp: Date.now() });
|
|
91
177
|
}
|
|
92
178
|
// ── Level Fetchers ──
|
|
93
|
-
async function level1Fetch(url, timeout, proxyUrl, sessionId) {
|
|
94
|
-
const headers = generateHeaders();
|
|
179
|
+
async function level1Fetch(url, timeout, proxyUrl, sessionId, accumulatedCookieHeader) {
|
|
180
|
+
const headers = generateHeaders(undefined, url);
|
|
95
181
|
// Inject session cookies if available
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
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("; ");
|
|
99
187
|
}
|
|
100
188
|
const fetchOptions = {
|
|
101
189
|
headers,
|
|
@@ -112,21 +200,44 @@ async function level1Fetch(url, timeout, proxyUrl, sessionId) {
|
|
|
112
200
|
const responseHeaders = Object.fromEntries(res.headers.entries());
|
|
113
201
|
return { html, status: res.status, url: res.url, level: 1, headers: responseHeaders, proxyUsed: proxyUrl };
|
|
114
202
|
}
|
|
115
|
-
async function level2Fetch(url, timeout, proxyUrl, sessionId) {
|
|
203
|
+
async function level2Fetch(url, timeout, proxyUrl, sessionId, accumulatedCookieHeader) {
|
|
116
204
|
// Inject session cookies as custom headers for Impit
|
|
117
|
-
const
|
|
118
|
-
const
|
|
205
|
+
const sessionCookieHeader = await getSessionCookieHeader(sessionId, url);
|
|
206
|
+
const cookieParts = [sessionCookieHeader, accumulatedCookieHeader].filter(Boolean);
|
|
207
|
+
const extraHeaders = cookieParts.length > 0 ? { Cookie: cookieParts.join("; ") } : undefined;
|
|
119
208
|
const result = await stealthFetch({ url, timeout, proxyUrl, headers: extraHeaders });
|
|
120
209
|
return { ...result, level: 2, proxyUsed: proxyUrl };
|
|
121
210
|
}
|
|
122
|
-
async function level3Fetch(url, timeout, screenshot, proxyUrl, chromeProfile) {
|
|
123
|
-
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
|
+
});
|
|
124
219
|
return { ...result, level: 3, proxyUsed: proxyUrl, chromeProfile: result.chromeProfile };
|
|
125
220
|
}
|
|
126
|
-
// ── Smart Fetch with Cache + Anti-bot Detection ──
|
|
127
|
-
function checkResult(result) {
|
|
221
|
+
// ── Smart Fetch with Cache + Anti-bot Detection + Cookie Preservation ──
|
|
222
|
+
function checkResult(result, hasCaptchaKey) {
|
|
223
|
+
const responseHeaders = result.headers || {};
|
|
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) {
|
|
128
236
|
const responseHeaders = result.headers || {};
|
|
129
|
-
|
|
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);
|
|
130
241
|
}
|
|
131
242
|
export async function smartFetch(url, options) {
|
|
132
243
|
const timeout = options?.timeout || DEFAULT_TIMEOUT_MS;
|
|
@@ -137,10 +248,42 @@ export async function smartFetch(url, options) {
|
|
|
137
248
|
const domain = getDomain(url);
|
|
138
249
|
const engine = getKnowledgeEngine();
|
|
139
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
|
+
}
|
|
140
272
|
// ── Tracking state across escalation ──
|
|
141
273
|
let detectedAntiBot = null;
|
|
142
274
|
let lastHttpStatus = 0;
|
|
143
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
|
+
}
|
|
144
287
|
/** Record success outcome and return enriched result */
|
|
145
288
|
function recordSuccess(result) {
|
|
146
289
|
result.antiBotSystem = detectedAntiBot ?? undefined;
|
|
@@ -174,10 +317,12 @@ export async function smartFetch(url, options) {
|
|
|
174
317
|
if (cachedLevel && cachedLevel <= maxLevel) {
|
|
175
318
|
try {
|
|
176
319
|
const result = await fetchByLevel(url, timeout, cachedLevel, options?.screenshot, proxyUrl, sessionId);
|
|
177
|
-
if (checkResult(result)) {
|
|
320
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
178
321
|
return recordSuccess(result);
|
|
179
322
|
}
|
|
180
323
|
// Cache was wrong — invalidate and fall through to full escalation
|
|
324
|
+
accumulateCookies(result);
|
|
325
|
+
trackBestResult(result);
|
|
181
326
|
lastHttpStatus = result.status;
|
|
182
327
|
lastLevel = cachedLevel;
|
|
183
328
|
renderingCache.delete(getDomain(url));
|
|
@@ -192,10 +337,12 @@ export async function smartFetch(url, options) {
|
|
|
192
337
|
const startLevel = Math.min(prediction.startLevel, maxLevel);
|
|
193
338
|
try {
|
|
194
339
|
const result = await fetchByLevel(url, timeout, startLevel, options?.screenshot, proxyUrl, sessionId);
|
|
195
|
-
if (checkResult(result)) {
|
|
340
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
196
341
|
cacheLevel(url, startLevel);
|
|
197
342
|
return recordSuccess(result);
|
|
198
343
|
}
|
|
344
|
+
accumulateCookies(result);
|
|
345
|
+
trackBestResult(result);
|
|
199
346
|
lastHttpStatus = result.status;
|
|
200
347
|
lastLevel = startLevel;
|
|
201
348
|
// Predicted level failed — fall through to normal escalation
|
|
@@ -207,8 +354,10 @@ export async function smartFetch(url, options) {
|
|
|
207
354
|
// Level 1: native fetch + realistic headers
|
|
208
355
|
if (maxLevel >= 1) {
|
|
209
356
|
try {
|
|
210
|
-
const result = await level1Fetch(url, timeout, proxyUrl, sessionId);
|
|
211
|
-
|
|
357
|
+
const result = await level1Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
358
|
+
accumulateCookies(result);
|
|
359
|
+
trackBestResult(result);
|
|
360
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
212
361
|
cacheLevel(url, 1);
|
|
213
362
|
return recordSuccess(result);
|
|
214
363
|
}
|
|
@@ -221,10 +370,24 @@ export async function smartFetch(url, options) {
|
|
|
221
370
|
if (detection.system !== "none") {
|
|
222
371
|
detectedAntiBot = detection.system;
|
|
223
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
|
+
}
|
|
224
386
|
// If anti-bot detected and recommends Level 3, skip Level 2
|
|
225
387
|
if (detection.system !== "none" && detection.recommendedLevel === 3 && maxLevel >= 3) {
|
|
226
388
|
if (await isPlaywrightAvailable()) {
|
|
227
|
-
const l3Result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl);
|
|
389
|
+
const l3Result = await level3Fetch(url, timeout, options?.screenshot, proxyUrl, undefined, getAccumulatedCookiesArray());
|
|
390
|
+
accumulateCookies(l3Result);
|
|
228
391
|
cacheLevel(url, 3);
|
|
229
392
|
return recordSuccess(l3Result);
|
|
230
393
|
}
|
|
@@ -237,8 +400,10 @@ export async function smartFetch(url, options) {
|
|
|
237
400
|
// Level 2: impit TLS stealth
|
|
238
401
|
if (maxLevel >= 2) {
|
|
239
402
|
try {
|
|
240
|
-
const result = await level2Fetch(url, timeout, proxyUrl, sessionId);
|
|
241
|
-
|
|
403
|
+
const result = await level2Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
404
|
+
accumulateCookies(result);
|
|
405
|
+
trackBestResult(result);
|
|
406
|
+
if (checkResult(result, hasCaptchaKey)) {
|
|
242
407
|
cacheLevel(url, 2);
|
|
243
408
|
return recordSuccess(result);
|
|
244
409
|
}
|
|
@@ -251,19 +416,27 @@ export async function smartFetch(url, options) {
|
|
|
251
416
|
}
|
|
252
417
|
// Level 3: headless browser
|
|
253
418
|
if (maxLevel >= 3 && (await isPlaywrightAvailable())) {
|
|
254
|
-
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
|
|
255
428
|
cacheLevel(url, 3);
|
|
256
429
|
return recordSuccess(result);
|
|
257
430
|
}
|
|
258
431
|
// Fallback: return best effort from level 2, then level 1
|
|
259
432
|
try {
|
|
260
|
-
const result = await level2Fetch(url, timeout, proxyUrl, sessionId);
|
|
433
|
+
const result = await level2Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
261
434
|
lastLevel = 2;
|
|
262
435
|
return recordSuccess(result);
|
|
263
436
|
}
|
|
264
437
|
catch {
|
|
265
438
|
try {
|
|
266
|
-
const result = await level1Fetch(url, timeout, proxyUrl, sessionId);
|
|
439
|
+
const result = await level1Fetch(url, timeout, proxyUrl, sessionId, getAccumulatedCookieHeader());
|
|
267
440
|
lastLevel = 1;
|
|
268
441
|
return recordSuccess(result);
|
|
269
442
|
}
|
|
@@ -280,7 +453,16 @@ export async function smartFetch(url, options) {
|
|
|
280
453
|
blocked: true,
|
|
281
454
|
httpStatus: lastHttpStatus,
|
|
282
455
|
});
|
|
283
|
-
|
|
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;
|
|
284
466
|
}
|
|
285
467
|
}
|
|
286
468
|
}
|
|
@@ -1 +1 @@
|
|
|
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,MAAM,eAAe,CAAC;AAC5D,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;AAG3D;;;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;AAiBD,MAAM,OAAO,YAAa,SAAQ,KAAK;IAGnB;IACA;IACA;IAJlB,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,CAAC,GAAW,EAAE,OAAe,EAAE,QAAiB,EAAE,SAAkB;IAC5F,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAElC,sCAAsC;IACtC,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAClE,IAAI,YAAY,EAAE,CAAC;QAChB,OAAkC,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;IAC/D,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,CAAC,GAAW,EAAE,OAAe,EAAE,QAAiB,EAAE,SAAkB;IAC5F,qDAAqD;IACrD,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,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;IAEtB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IACzF,OAAO,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;AAC3F,CAAC;AAED,oDAAoD;AAEpD,SAAS,WAAW,CAAC,MAAmB;IACtC,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IAC7C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnG,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;IAE9B,yCAAyC;IACzC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,SAAS,GAAiB,CAAC,CAAC;IAEhC,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,CAAC,EAAE,CAAC;gBACxB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,mEAAmE;YACnE,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,CAAC,EAAE,CAAC;gBACxB,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAC5B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,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,CAAC,CAAC;YACpE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,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,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,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;oBAChF,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,CAAC,CAAC;YACpE,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,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,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC9E,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,CAAC,CAAC;QACpE,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,CAAC,CAAC;YACpE,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;YACH,MAAM,IAAI,YAAY,CACpB,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;QACJ,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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/stealth/index.ts"],"names":[],"mappings":"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"}
|
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"}
|
package/dist/stealth/proxy.js
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
|
function defaultPort(protocol) {
|
|
8
11
|
if (protocol === "socks4:" || protocol === "socks5:")
|
|
@@ -27,15 +30,25 @@ export function parseProxyUrl(raw) {
|
|
|
27
30
|
password: parsed.password || undefined,
|
|
28
31
|
};
|
|
29
32
|
}
|
|
30
|
-
// ── Round-Robin Rotator ──
|
|
33
|
+
// ── Round-Robin Rotator with Health Tracking ──
|
|
34
|
+
const COOLDOWN_MS = 60_000; // 60s cooldown after failure
|
|
31
35
|
export class ProxyRotator {
|
|
32
36
|
proxies;
|
|
33
37
|
index = 0;
|
|
38
|
+
health = new Map();
|
|
34
39
|
constructor(urls) {
|
|
35
40
|
this.proxies = [];
|
|
36
41
|
for (const url of urls) {
|
|
37
42
|
try {
|
|
38
|
-
|
|
43
|
+
const proxy = parseProxyUrl(url);
|
|
44
|
+
this.proxies.push(proxy);
|
|
45
|
+
this.health.set(proxy.url, {
|
|
46
|
+
successCount: 0,
|
|
47
|
+
failureCount: 0,
|
|
48
|
+
lastSuccessTime: 0,
|
|
49
|
+
lastFailureTime: 0,
|
|
50
|
+
cooldownUntil: 0,
|
|
51
|
+
});
|
|
39
52
|
}
|
|
40
53
|
catch {
|
|
41
54
|
console.warn(`[imperium-crawl] Skipping invalid proxy URL: ${url}`);
|
|
@@ -45,12 +58,67 @@ export class ProxyRotator {
|
|
|
45
58
|
get size() {
|
|
46
59
|
return this.proxies.length;
|
|
47
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Get next healthy proxy, skipping those in cooldown.
|
|
63
|
+
* If ALL proxies are in cooldown, returns the one whose cooldown expires soonest.
|
|
64
|
+
*/
|
|
48
65
|
next() {
|
|
49
66
|
if (this.proxies.length === 0)
|
|
50
67
|
return undefined;
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
68
|
+
const now = Date.now();
|
|
69
|
+
// Try to find a healthy proxy (not in cooldown)
|
|
70
|
+
for (let i = 0; i < this.proxies.length; i++) {
|
|
71
|
+
const idx = (this.index + i) % this.proxies.length;
|
|
72
|
+
const proxy = this.proxies[idx];
|
|
73
|
+
const h = this.health.get(proxy.url);
|
|
74
|
+
if (!h || now >= h.cooldownUntil) {
|
|
75
|
+
this.index = (idx + 1) % this.proxies.length;
|
|
76
|
+
return proxy;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// All in cooldown — return the one with soonest expiry
|
|
80
|
+
let bestProxy = this.proxies[this.index];
|
|
81
|
+
let soonestCooldown = Infinity;
|
|
82
|
+
for (const proxy of this.proxies) {
|
|
83
|
+
const h = this.health.get(proxy.url);
|
|
84
|
+
if (h && h.cooldownUntil < soonestCooldown) {
|
|
85
|
+
soonestCooldown = h.cooldownUntil;
|
|
86
|
+
bestProxy = proxy;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
this.index = (this.proxies.indexOf(bestProxy) + 1) % this.proxies.length;
|
|
90
|
+
return bestProxy;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Mark a proxy as having succeeded. Resets its failure state.
|
|
94
|
+
*/
|
|
95
|
+
markSuccess(proxyUrl) {
|
|
96
|
+
const h = this.health.get(proxyUrl);
|
|
97
|
+
if (h) {
|
|
98
|
+
h.successCount++;
|
|
99
|
+
h.lastSuccessTime = Date.now();
|
|
100
|
+
h.cooldownUntil = 0; // Clear cooldown on success
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Mark a proxy as having failed. Puts it in cooldown.
|
|
105
|
+
*/
|
|
106
|
+
markFailed(proxyUrl) {
|
|
107
|
+
const h = this.health.get(proxyUrl);
|
|
108
|
+
if (h) {
|
|
109
|
+
h.failureCount++;
|
|
110
|
+
h.lastFailureTime = Date.now();
|
|
111
|
+
h.cooldownUntil = Date.now() + COOLDOWN_MS;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get health stats for all proxies (for debugging/monitoring).
|
|
116
|
+
*/
|
|
117
|
+
getHealthStats() {
|
|
118
|
+
return this.proxies.map((p) => ({
|
|
119
|
+
url: p.url,
|
|
120
|
+
health: this.health.get(p.url),
|
|
121
|
+
}));
|
|
54
122
|
}
|
|
55
123
|
}
|
|
56
124
|
// ── Singleton ──
|
|
@@ -82,6 +150,22 @@ export function resolveProxy(override) {
|
|
|
82
150
|
return override;
|
|
83
151
|
return rotator?.next()?.url;
|
|
84
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* Mark a proxy as having succeeded (for health tracking).
|
|
155
|
+
*/
|
|
156
|
+
export function markProxySuccess(proxyUrl) {
|
|
157
|
+
if (proxyUrl && rotator) {
|
|
158
|
+
rotator.markSuccess(proxyUrl);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Mark a proxy as having failed (puts it in cooldown).
|
|
163
|
+
*/
|
|
164
|
+
export function markProxyFailed(proxyUrl) {
|
|
165
|
+
if (proxyUrl && rotator) {
|
|
166
|
+
rotator.markFailed(proxyUrl);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
85
169
|
export function hasProxyConfigured() {
|
|
86
170
|
return !!(process.env.PROXY_URL?.trim() || process.env.PROXY_URLS?.trim());
|
|
87
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/stealth/proxy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/stealth/proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAClE,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,IAAI,CAAC,CAAC,OAAO;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,oBAAoB;IACpB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,iEAAiE,OAAO,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,OAAO;QACL,GAAG,EAAE,OAAO;QACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAC1C,IAAI,EAAE,MAAM,CAAC,QAAQ;QACrB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/D,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QACtC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;KACvC,CAAC;AACJ,CAAC;AAED,iDAAiD;AAEjD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,6BAA6B;AAEzD,MAAM,OAAO,YAAY;IACf,OAAO,CAAgB;IACvB,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,YAAY,IAAc;QACxB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBACzB,YAAY,EAAE,CAAC;oBACf,YAAY,EAAE,CAAC;oBACf,eAAe,EAAE,CAAC;oBAClB,eAAe,EAAE,CAAC;oBAClB,aAAa,EAAE,CAAC;iBACjB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,gDAAgD,GAAG,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEhD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,gDAAgD;QAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAErC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;gBACjC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,eAAe,GAAG,QAAQ,CAAC;QAE/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,eAAe,EAAE,CAAC;gBAC3C,eAAe,GAAG,CAAC,CAAC,aAAa,CAAC;gBAClC,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,YAAY,EAAE,CAAC;YACjB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,4BAA4B;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,QAAgB;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC;YACN,CAAC,CAAC,YAAY,EAAE,CAAC;YACjB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAE;SAChC,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAED,kBAAkB;AAElB,IAAI,OAAiC,CAAC;AAEtC,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAE7C,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,IAAI,KAAK,EAAE,CAAC;QACV,gDAAgD;QAChD,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACtE,CAAC;SAAM,IAAI,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAiB;IAC5C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAiB;IAChD,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiB;IAC/C,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC"}
|