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.
Files changed (242) hide show
  1. package/README.md +146 -11
  2. package/dist/cli-explore.d.ts +30 -0
  3. package/dist/cli-explore.d.ts.map +1 -0
  4. package/dist/cli-explore.js +427 -0
  5. package/dist/cli-explore.js.map +1 -0
  6. package/dist/cli-recorder.d.ts +44 -0
  7. package/dist/cli-recorder.d.ts.map +1 -0
  8. package/dist/cli-recorder.js +67 -0
  9. package/dist/cli-recorder.js.map +1 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +51 -3
  12. package/dist/cli.js.map +1 -1
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +3 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/constants.d.ts +1 -1
  17. package/dist/constants.d.ts.map +1 -1
  18. package/dist/constants.js +31 -1
  19. package/dist/constants.js.map +1 -1
  20. package/dist/flows/engine.d.ts +7 -0
  21. package/dist/flows/engine.d.ts.map +1 -0
  22. package/dist/flows/engine.js +183 -0
  23. package/dist/flows/engine.js.map +1 -0
  24. package/dist/flows/index.d.ts +6 -0
  25. package/dist/flows/index.d.ts.map +1 -0
  26. package/dist/flows/index.js +6 -0
  27. package/dist/flows/index.js.map +1 -0
  28. package/dist/flows/server.d.ts +11 -0
  29. package/dist/flows/server.d.ts.map +1 -0
  30. package/dist/flows/server.js +81 -0
  31. package/dist/flows/server.js.map +1 -0
  32. package/dist/flows/smart-target.d.ts +9 -0
  33. package/dist/flows/smart-target.d.ts.map +1 -0
  34. package/dist/flows/smart-target.js +84 -0
  35. package/dist/flows/smart-target.js.map +1 -0
  36. package/dist/flows/storage.d.ts +26 -0
  37. package/dist/flows/storage.d.ts.map +1 -0
  38. package/dist/flows/storage.js +118 -0
  39. package/dist/flows/storage.js.map +1 -0
  40. package/dist/flows/templates.d.ts +4 -0
  41. package/dist/flows/templates.d.ts.map +1 -0
  42. package/dist/flows/templates.js +35 -0
  43. package/dist/flows/templates.js.map +1 -0
  44. package/dist/flows/types.d.ts +3356 -0
  45. package/dist/flows/types.d.ts.map +1 -0
  46. package/dist/flows/types.js +133 -0
  47. package/dist/flows/types.js.map +1 -0
  48. package/dist/knowledge/index.d.ts +1 -0
  49. package/dist/knowledge/index.d.ts.map +1 -1
  50. package/dist/knowledge/index.js +1 -0
  51. package/dist/knowledge/index.js.map +1 -1
  52. package/dist/knowledge/record-browser.d.ts +17 -0
  53. package/dist/knowledge/record-browser.d.ts.map +1 -0
  54. package/dist/knowledge/record-browser.js +29 -0
  55. package/dist/knowledge/record-browser.js.map +1 -0
  56. package/dist/knowledge/store.d.ts +19 -0
  57. package/dist/knowledge/store.d.ts.map +1 -1
  58. package/dist/knowledge/store.js +63 -4
  59. package/dist/knowledge/store.js.map +1 -1
  60. package/dist/llm/retry.d.ts +4 -2
  61. package/dist/llm/retry.d.ts.map +1 -1
  62. package/dist/llm/retry.js +15 -4
  63. package/dist/llm/retry.js.map +1 -1
  64. package/dist/sessions/browser-connect.d.ts +30 -0
  65. package/dist/sessions/browser-connect.d.ts.map +1 -0
  66. package/dist/sessions/browser-connect.js +68 -0
  67. package/dist/sessions/browser-connect.js.map +1 -0
  68. package/dist/sessions/browser-state.d.ts +35 -0
  69. package/dist/sessions/browser-state.d.ts.map +1 -0
  70. package/dist/sessions/browser-state.js +74 -0
  71. package/dist/sessions/browser-state.js.map +1 -0
  72. package/dist/sessions/index.d.ts +1 -1
  73. package/dist/sessions/index.d.ts.map +1 -1
  74. package/dist/sessions/index.js +1 -1
  75. package/dist/sessions/index.js.map +1 -1
  76. package/dist/sessions/inject-cookies.d.ts +20 -0
  77. package/dist/sessions/inject-cookies.d.ts.map +1 -0
  78. package/dist/sessions/inject-cookies.js +57 -0
  79. package/dist/sessions/inject-cookies.js.map +1 -0
  80. package/dist/sessions/manager.d.ts +31 -1
  81. package/dist/sessions/manager.d.ts.map +1 -1
  82. package/dist/sessions/manager.js +97 -6
  83. package/dist/sessions/manager.js.map +1 -1
  84. package/dist/sessions/types.d.ts +2 -0
  85. package/dist/sessions/types.d.ts.map +1 -1
  86. package/dist/skills/chain.d.ts +61 -0
  87. package/dist/skills/chain.d.ts.map +1 -0
  88. package/dist/skills/chain.js +182 -0
  89. package/dist/skills/chain.js.map +1 -0
  90. package/dist/skills/conditions.d.ts +14 -0
  91. package/dist/skills/conditions.d.ts.map +1 -0
  92. package/dist/skills/conditions.js +208 -0
  93. package/dist/skills/conditions.js.map +1 -0
  94. package/dist/skills/manager.d.ts +47 -2
  95. package/dist/skills/manager.d.ts.map +1 -1
  96. package/dist/skills/manager.js.map +1 -1
  97. package/dist/skills/parameters.d.ts +49 -0
  98. package/dist/skills/parameters.d.ts.map +1 -0
  99. package/dist/skills/parameters.js +157 -0
  100. package/dist/skills/parameters.js.map +1 -0
  101. package/dist/snapshot/store.d.ts +8 -0
  102. package/dist/snapshot/store.d.ts.map +1 -1
  103. package/dist/snapshot/store.js +48 -0
  104. package/dist/snapshot/store.js.map +1 -1
  105. package/dist/stealth/antibot-detector.d.ts +1 -1
  106. package/dist/stealth/antibot-detector.d.ts.map +1 -1
  107. package/dist/stealth/antibot-detector.js +56 -0
  108. package/dist/stealth/antibot-detector.js.map +1 -1
  109. package/dist/stealth/browser-image-extract.d.ts +43 -0
  110. package/dist/stealth/browser-image-extract.d.ts.map +1 -0
  111. package/dist/stealth/browser-image-extract.js +268 -0
  112. package/dist/stealth/browser-image-extract.js.map +1 -0
  113. package/dist/stealth/browser.d.ts +5 -0
  114. package/dist/stealth/browser.d.ts.map +1 -1
  115. package/dist/stealth/browser.js +82 -1
  116. package/dist/stealth/browser.js.map +1 -1
  117. package/dist/stealth/chrome-profile.d.ts +1 -0
  118. package/dist/stealth/chrome-profile.d.ts.map +1 -1
  119. package/dist/stealth/chrome-profile.js +28 -5
  120. package/dist/stealth/chrome-profile.js.map +1 -1
  121. package/dist/stealth/detector.d.ts +10 -1
  122. package/dist/stealth/detector.d.ts.map +1 -1
  123. package/dist/stealth/detector.js +117 -25
  124. package/dist/stealth/detector.js.map +1 -1
  125. package/dist/stealth/headers.d.ts +1 -1
  126. package/dist/stealth/headers.d.ts.map +1 -1
  127. package/dist/stealth/headers.js +94 -2
  128. package/dist/stealth/headers.js.map +1 -1
  129. package/dist/stealth/index.d.ts +5 -0
  130. package/dist/stealth/index.d.ts.map +1 -1
  131. package/dist/stealth/index.js +257 -27
  132. package/dist/stealth/index.js.map +1 -1
  133. package/dist/stealth/proxy.d.ts +40 -1
  134. package/dist/stealth/proxy.d.ts.map +1 -1
  135. package/dist/stealth/proxy.js +90 -6
  136. package/dist/stealth/proxy.js.map +1 -1
  137. package/dist/tools/action-executor.d.ts +66 -0
  138. package/dist/tools/action-executor.d.ts.map +1 -0
  139. package/dist/tools/action-executor.js +403 -0
  140. package/dist/tools/action-executor.js.map +1 -0
  141. package/dist/tools/batch-download.d.ts +33 -0
  142. package/dist/tools/batch-download.d.ts.map +1 -0
  143. package/dist/tools/batch-download.js +208 -0
  144. package/dist/tools/batch-download.js.map +1 -0
  145. package/dist/tools/batch-scrape.d.ts +2 -2
  146. package/dist/tools/browser.d.ts +100 -0
  147. package/dist/tools/browser.d.ts.map +1 -0
  148. package/dist/tools/browser.js +448 -0
  149. package/dist/tools/browser.js.map +1 -0
  150. package/dist/tools/crawl.d.ts +2 -2
  151. package/dist/tools/create-skill.d.ts +2 -2
  152. package/dist/tools/discover-apis.d.ts +1 -1
  153. package/dist/tools/discover-apis.d.ts.map +1 -1
  154. package/dist/tools/discover-apis.js +3 -0
  155. package/dist/tools/discover-apis.js.map +1 -1
  156. package/dist/tools/download.d.ts +39 -6
  157. package/dist/tools/download.d.ts.map +1 -1
  158. package/dist/tools/download.js +248 -44
  159. package/dist/tools/download.js.map +1 -1
  160. package/dist/tools/extract.d.ts +1 -1
  161. package/dist/tools/image-search.d.ts +1 -1
  162. package/dist/tools/index.d.ts.map +1 -1
  163. package/dist/tools/index.js +26 -0
  164. package/dist/tools/index.js.map +1 -1
  165. package/dist/tools/inspect-flow.d.ts +24 -0
  166. package/dist/tools/inspect-flow.d.ts.map +1 -0
  167. package/dist/tools/inspect-flow.js +23 -0
  168. package/dist/tools/inspect-flow.js.map +1 -0
  169. package/dist/tools/instagram.d.ts +2 -2
  170. package/dist/tools/interact.d.ts +91 -50
  171. package/dist/tools/interact.d.ts.map +1 -1
  172. package/dist/tools/interact.js +80 -299
  173. package/dist/tools/interact.js.map +1 -1
  174. package/dist/tools/knowledge.d.ts +24 -0
  175. package/dist/tools/knowledge.d.ts.map +1 -0
  176. package/dist/tools/knowledge.js +99 -0
  177. package/dist/tools/knowledge.js.map +1 -0
  178. package/dist/tools/list-flows.d.ts +21 -0
  179. package/dist/tools/list-flows.d.ts.map +1 -0
  180. package/dist/tools/list-flows.js +18 -0
  181. package/dist/tools/list-flows.js.map +1 -0
  182. package/dist/tools/list-skills.js +1 -1
  183. package/dist/tools/list-skills.js.map +1 -1
  184. package/dist/tools/manifest.d.ts.map +1 -1
  185. package/dist/tools/manifest.js +48 -0
  186. package/dist/tools/manifest.js.map +1 -1
  187. package/dist/tools/monitor-websocket.d.ts +1 -1
  188. package/dist/tools/monitor.d.ts +46 -0
  189. package/dist/tools/monitor.d.ts.map +1 -0
  190. package/dist/tools/monitor.js +213 -0
  191. package/dist/tools/monitor.js.map +1 -0
  192. package/dist/tools/news-search.d.ts +1 -1
  193. package/dist/tools/pdf-extract.d.ts +38 -0
  194. package/dist/tools/pdf-extract.d.ts.map +1 -0
  195. package/dist/tools/pdf-extract.js +244 -0
  196. package/dist/tools/pdf-extract.js.map +1 -0
  197. package/dist/tools/query-api.d.ts +6 -6
  198. package/dist/tools/readability.d.ts +2 -2
  199. package/dist/tools/record-flow.d.ts +39 -0
  200. package/dist/tools/record-flow.d.ts.map +1 -0
  201. package/dist/tools/record-flow.js +406 -0
  202. package/dist/tools/record-flow.js.map +1 -0
  203. package/dist/tools/reddit.d.ts +4 -4
  204. package/dist/tools/run-flow.d.ts +54 -0
  205. package/dist/tools/run-flow.d.ts.map +1 -0
  206. package/dist/tools/run-flow.js +47 -0
  207. package/dist/tools/run-flow.js.map +1 -0
  208. package/dist/tools/run-skill.d.ts +14 -4
  209. package/dist/tools/run-skill.d.ts.map +1 -1
  210. package/dist/tools/run-skill.js +74 -0
  211. package/dist/tools/run-skill.js.map +1 -1
  212. package/dist/tools/scrape.d.ts +9 -6
  213. package/dist/tools/scrape.d.ts.map +1 -1
  214. package/dist/tools/scrape.js +19 -1
  215. package/dist/tools/scrape.js.map +1 -1
  216. package/dist/tools/screenshot.d.ts.map +1 -1
  217. package/dist/tools/screenshot.js +6 -0
  218. package/dist/tools/screenshot.js.map +1 -1
  219. package/dist/tools/search.d.ts +1 -1
  220. package/dist/tools/serve-flow.d.ts +36 -0
  221. package/dist/tools/serve-flow.d.ts.map +1 -0
  222. package/dist/tools/serve-flow.js +42 -0
  223. package/dist/tools/serve-flow.js.map +1 -0
  224. package/dist/tools/snapshot.d.ts +5 -5
  225. package/dist/tools/snapshot.d.ts.map +1 -1
  226. package/dist/tools/snapshot.js +3 -0
  227. package/dist/tools/snapshot.js.map +1 -1
  228. package/dist/tools/validate-flow.d.ts +24 -0
  229. package/dist/tools/validate-flow.d.ts.map +1 -0
  230. package/dist/tools/validate-flow.js +23 -0
  231. package/dist/tools/validate-flow.js.map +1 -0
  232. package/dist/tools/video-search.d.ts +1 -1
  233. package/dist/tools/watch.d.ts +68 -0
  234. package/dist/tools/watch.d.ts.map +1 -0
  235. package/dist/tools/watch.js +224 -0
  236. package/dist/tools/watch.js.map +1 -0
  237. package/dist/tools/youtube.d.ts +2 -2
  238. package/dist/utils/fetcher.d.ts +13 -4
  239. package/dist/utils/fetcher.d.ts.map +1 -1
  240. package/dist/utils/fetcher.js +153 -23
  241. package/dist/utils/fetcher.js.map +1 -1
  242. package/package.json +19 -5
@@ -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
- const result = await stealthFetch({ url, timeout, proxyUrl });
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, { timeout, screenshot, proxyUrl, chromeProfile });
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
- return !isBlocked(result.html, result.status, responseHeaders) && !needsJSRendering(result.html);
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
- if (checkResult(result)) {
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
- if (checkResult(result)) {
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
- throw new StealthError(`All stealth levels failed for ${url}: ${finalErr instanceof Error ? finalErr.message : String(finalErr)}`, lastLevel, lastHttpStatus, detectedAntiBot);
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":"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"}
@@ -1,8 +1,11 @@
1
1
  /**
2
- * Proxy parsing, validation, and round-robin rotation.
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;;;;;GAKG;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;AAQD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAgBtD;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAK;gBAEN,IAAI,EAAE,MAAM,EAAE;IAW1B,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,WAAW,GAAG,SAAS;CAMhC;AAMD,wBAAgB,gBAAgB,IAAI,IAAI,CAmBvC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
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"}