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/detector.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
const BLOCKED_INDICATORS = [
|
|
2
2
|
"access denied",
|
|
3
|
-
"403 forbidden",
|
|
4
3
|
"captcha",
|
|
5
4
|
"cf-challenge",
|
|
6
5
|
"just a moment",
|
|
7
6
|
"checking your browser",
|
|
8
|
-
"blocked",
|
|
9
7
|
"rate limit",
|
|
10
8
|
"too many requests",
|
|
11
9
|
// Extended soft-block patterns
|
|
@@ -40,43 +38,137 @@ const SPA_INDICATORS = [
|
|
|
40
38
|
"ng-app",
|
|
41
39
|
'id="__nuxt"',
|
|
42
40
|
];
|
|
41
|
+
// ── Anti-bot signal headers that confirm a status code is actually a block ──
|
|
42
|
+
const ANTI_BOT_HEADERS = [
|
|
43
|
+
"cf-ray",
|
|
44
|
+
"cf-mitigated",
|
|
45
|
+
"x-datadome",
|
|
46
|
+
"x-datadome-cid",
|
|
47
|
+
"x-kpsdk-ct",
|
|
48
|
+
"x-sucuri-id",
|
|
49
|
+
"x-distil-cs",
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Extract text content from HTML, stripping script/style tags.
|
|
53
|
+
* Returns the text length and the cleaned text.
|
|
54
|
+
*/
|
|
55
|
+
function extractTextContent(html) {
|
|
56
|
+
const bodyMatch = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
|
|
57
|
+
const content = bodyMatch ? bodyMatch[1] : html;
|
|
58
|
+
const text = content
|
|
59
|
+
.replace(/<script[\s\S]*?<\/script>/gi, "")
|
|
60
|
+
.replace(/<style[\s\S]*?<\/style>/gi, "")
|
|
61
|
+
.replace(/<[^>]*>/g, "")
|
|
62
|
+
.trim();
|
|
63
|
+
return { text, length: text.length };
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Count links in HTML.
|
|
67
|
+
*/
|
|
68
|
+
function countLinks(html) {
|
|
69
|
+
const matches = html.match(/<a\s/gi);
|
|
70
|
+
return matches ? matches.length : 0;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if response headers contain known anti-bot signals.
|
|
74
|
+
*/
|
|
75
|
+
function hasAntiBotHeaders(headers) {
|
|
76
|
+
const lowerHeaders = Object.keys(headers).map((k) => k.toLowerCase());
|
|
77
|
+
return ANTI_BOT_HEADERS.some((h) => lowerHeaders.includes(h));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if the page has challenge scripts (Cloudflare, DataDome, etc.)
|
|
81
|
+
*/
|
|
82
|
+
function hasChallengeScript(html) {
|
|
83
|
+
return (html.includes("/cdn-cgi/challenge-platform/") ||
|
|
84
|
+
html.includes("js.datadome.co") ||
|
|
85
|
+
html.includes("client.perimeterx.net") ||
|
|
86
|
+
html.includes("awswaf") ||
|
|
87
|
+
html.includes("_kpsdk"));
|
|
88
|
+
}
|
|
89
|
+
// ── Legitimate page threshold: pages above this are almost never block pages ──
|
|
90
|
+
const LEGITIMATE_TEXT_THRESHOLD = 5000; // 5KB of text content
|
|
91
|
+
const SMALL_PAGE_THRESHOLD = 5000; // Only check content indicators on small pages
|
|
92
|
+
const MIN_LINKS_FOR_LEGITIMATE = 10;
|
|
43
93
|
/**
|
|
44
94
|
* Detect if a response is blocked by anti-bot protection.
|
|
45
|
-
*
|
|
95
|
+
*
|
|
96
|
+
* Uses a layered approach to minimize false positives:
|
|
97
|
+
* 1. Status codes (403/429/503) only trigger block if paired with anti-bot signals
|
|
98
|
+
* 2. Content-based checks only run on small pages (<5KB text)
|
|
99
|
+
* 3. Large pages with navigation are treated as legitimate regardless
|
|
46
100
|
*/
|
|
47
101
|
export function isBlocked(html, status, headers) {
|
|
48
|
-
|
|
49
|
-
|
|
102
|
+
const responseHeaders = headers || {};
|
|
103
|
+
const hasAntiBot = hasAntiBotHeaders(responseHeaders);
|
|
104
|
+
const hasChallengeJs = hasChallengeScript(html);
|
|
105
|
+
const { text: bodyText, length: textLength } = extractTextContent(html);
|
|
106
|
+
// ── cf-mitigated header is an explicit block signal ──
|
|
107
|
+
if (responseHeaders["cf-mitigated"])
|
|
50
108
|
return true;
|
|
51
|
-
//
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
109
|
+
// ── Status-based detection (only with anti-bot confirmation) ──
|
|
110
|
+
if (status === 403 || status === 429 || status === 503) {
|
|
111
|
+
// If anti-bot headers or challenge scripts present → definitely blocked
|
|
112
|
+
if (hasAntiBot || hasChallengeJs)
|
|
113
|
+
return true;
|
|
114
|
+
// If response body is very small, likely a block page
|
|
115
|
+
if (textLength < SMALL_PAGE_THRESHOLD) {
|
|
116
|
+
// Check title for challenge patterns
|
|
117
|
+
const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/i);
|
|
118
|
+
if (titleMatch) {
|
|
119
|
+
const title = titleMatch[1].trim();
|
|
120
|
+
if (CHALLENGE_TITLE_PATTERNS.some((p) => p.test(title)))
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
// Small body + error status + blocked indicators in body → block
|
|
124
|
+
const lower = bodyText.toLowerCase();
|
|
125
|
+
if (BLOCKED_INDICATORS.some((indicator) => lower.includes(indicator)))
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
// Large 403/503 without anti-bot signals → NOT a block (e.g. custom error page, maintenance)
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
// ── Legitimate page signals — bail early for large, link-rich pages ──
|
|
132
|
+
if (textLength > LEGITIMATE_TEXT_THRESHOLD && countLinks(html) > MIN_LINKS_FOR_LEGITIMATE) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// ── Challenge page title patterns (any status) ──
|
|
59
136
|
const titleMatch = html.match(/<title[^>]*>(.*?)<\/title>/i);
|
|
60
137
|
if (titleMatch) {
|
|
61
138
|
const title = titleMatch[1].trim();
|
|
62
139
|
if (CHALLENGE_TITLE_PATTERNS.some((p) => p.test(title)))
|
|
63
140
|
return true;
|
|
64
141
|
}
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return true;
|
|
142
|
+
// ── Content-based indicators (only for small pages to avoid article false positives) ──
|
|
143
|
+
if (textLength < SMALL_PAGE_THRESHOLD) {
|
|
144
|
+
const lower = bodyText.toLowerCase();
|
|
145
|
+
if (BLOCKED_INDICATORS.some((indicator) => lower.includes(indicator))) {
|
|
146
|
+
// Extra check: if page also has challenge scripts or anti-bot headers → block
|
|
147
|
+
if (hasChallengeJs || hasAntiBot)
|
|
148
|
+
return true;
|
|
149
|
+
// If body is VERY small (<1KB), indicator match is strong enough alone
|
|
150
|
+
if (textLength < 1000)
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
77
153
|
}
|
|
154
|
+
// ── Structural check: title but almost no body text on error status ──
|
|
155
|
+
if (titleMatch && textLength < 50 && status >= 400)
|
|
156
|
+
return true;
|
|
78
157
|
return false;
|
|
79
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Detect if a page contains a CAPTCHA challenge.
|
|
161
|
+
* Separate from isBlocked — a CAPTCHA page CAN be solved, it's not a hard block.
|
|
162
|
+
*/
|
|
163
|
+
export function isCaptchaPage(html) {
|
|
164
|
+
const lower = html.toLowerCase();
|
|
165
|
+
return (lower.includes("captcha") ||
|
|
166
|
+
lower.includes("cf-turnstile") ||
|
|
167
|
+
lower.includes("g-recaptcha") ||
|
|
168
|
+
lower.includes("h-captcha") ||
|
|
169
|
+
lower.includes("verify you are human") ||
|
|
170
|
+
lower.includes("please complete the security check"));
|
|
171
|
+
}
|
|
80
172
|
/**
|
|
81
173
|
* Detect if a page requires JavaScript rendering to get content.
|
|
82
174
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/stealth/detector.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG;IACzB,eAAe;IACf,
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/stealth/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare function generateHeaders(overrides?: Record<string, string
|
|
1
|
+
export declare function generateHeaders(overrides?: Record<string, string>, url?: string): Record<string, string>;
|
|
2
2
|
export declare function getRandomUserAgent(): string;
|
|
3
3
|
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/stealth/headers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/stealth/headers.ts"],"names":[],"mappings":"AAuCA,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4ExG;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C"}
|
package/dist/stealth/headers.js
CHANGED
|
@@ -2,14 +2,106 @@ import { HeaderGenerator } from "header-generator";
|
|
|
2
2
|
const generator = new HeaderGenerator({
|
|
3
3
|
browsers: [
|
|
4
4
|
{ name: "chrome", minVersion: 120 },
|
|
5
|
-
{ name: "firefox", minVersion:
|
|
5
|
+
{ name: "firefox", minVersion: 121 },
|
|
6
6
|
{ name: "edge", minVersion: 120 },
|
|
7
|
+
{ name: "safari", minVersion: 17 },
|
|
7
8
|
],
|
|
8
9
|
devices: ["desktop"],
|
|
9
10
|
operatingSystems: ["windows", "macos", "linux"],
|
|
10
11
|
});
|
|
11
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Parse Chrome major version from User-Agent string.
|
|
14
|
+
*/
|
|
15
|
+
function parseChromeVersion(ua) {
|
|
16
|
+
const match = ua.match(/Chrome\/(\d+)/);
|
|
17
|
+
return match ? match[1] : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Detect platform from User-Agent for sec-ch-ua-platform.
|
|
21
|
+
*/
|
|
22
|
+
function detectPlatform(ua) {
|
|
23
|
+
if (ua.includes("Windows"))
|
|
24
|
+
return '"Windows"';
|
|
25
|
+
if (ua.includes("Macintosh") || ua.includes("Mac OS"))
|
|
26
|
+
return '"macOS"';
|
|
27
|
+
if (ua.includes("Linux"))
|
|
28
|
+
return '"Linux"';
|
|
29
|
+
return '"Windows"';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Build sec-ch-ua hint from Chrome version.
|
|
33
|
+
* Matches real Chrome's format with Chromium brand + version.
|
|
34
|
+
*/
|
|
35
|
+
function buildSecChUa(majorVersion) {
|
|
36
|
+
return `"Chromium";v="${majorVersion}", "Google Chrome";v="${majorVersion}", "Not-A.Brand";v="99"`;
|
|
37
|
+
}
|
|
38
|
+
export function generateHeaders(overrides, url) {
|
|
12
39
|
const headers = generator.getHeaders();
|
|
40
|
+
// ── Add Client Hints if Chrome/Edge UA detected ──
|
|
41
|
+
const ua = headers["user-agent"] || "";
|
|
42
|
+
const chromeVersion = parseChromeVersion(ua);
|
|
43
|
+
if (chromeVersion) {
|
|
44
|
+
// sec-ch-ua hints — must be consistent with User-Agent
|
|
45
|
+
headers["sec-ch-ua"] = buildSecChUa(chromeVersion);
|
|
46
|
+
headers["sec-ch-ua-mobile"] = "?0";
|
|
47
|
+
headers["sec-ch-ua-platform"] = detectPlatform(ua);
|
|
48
|
+
}
|
|
49
|
+
// ── URL-aware header enrichment ──
|
|
50
|
+
if (url) {
|
|
51
|
+
try {
|
|
52
|
+
const parsed = new URL(url);
|
|
53
|
+
const hostname = parsed.hostname;
|
|
54
|
+
// Add origin-based Referer for API endpoints and .gov sites
|
|
55
|
+
if (hostname.endsWith(".gov") || hostname.endsWith(".gov.com") ||
|
|
56
|
+
parsed.pathname.includes(".ashx") || parsed.pathname.includes("/api/") ||
|
|
57
|
+
parsed.pathname.includes("/proxy") || parsed.pathname.includes("Proxy")) {
|
|
58
|
+
headers["referer"] = `${parsed.origin}/`;
|
|
59
|
+
headers["origin"] = parsed.origin;
|
|
60
|
+
}
|
|
61
|
+
// .gov sites: add DNT and cache-control for less aggressive fingerprint
|
|
62
|
+
if (hostname.endsWith(".gov")) {
|
|
63
|
+
headers["dnt"] = "1";
|
|
64
|
+
headers["cache-control"] = "no-cache";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Invalid URL, skip enrichment
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ── Standard Accept headers ──
|
|
72
|
+
if (!headers["accept"]) {
|
|
73
|
+
headers["accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8";
|
|
74
|
+
}
|
|
75
|
+
if (!headers["accept-language"]) {
|
|
76
|
+
headers["accept-language"] = "en-US,en;q=0.9";
|
|
77
|
+
}
|
|
78
|
+
if (!headers["accept-encoding"]) {
|
|
79
|
+
headers["accept-encoding"] = "gzip, deflate, br";
|
|
80
|
+
}
|
|
81
|
+
// ── Navigation headers ──
|
|
82
|
+
headers["sec-fetch-dest"] = "document";
|
|
83
|
+
headers["sec-fetch-mode"] = "navigate";
|
|
84
|
+
headers["sec-fetch-site"] = headers["referer"] ? "same-origin" : "none";
|
|
85
|
+
headers["sec-fetch-user"] = "?1";
|
|
86
|
+
headers["upgrade-insecure-requests"] = "1";
|
|
87
|
+
headers["priority"] = "u=0, i";
|
|
88
|
+
// ── Additional realistic browser headers ──
|
|
89
|
+
// sec-gpc: Global Privacy Control — sent by Chrome/Firefox for GDPR compliance
|
|
90
|
+
headers["sec-gpc"] = "1";
|
|
91
|
+
// te: trailers — real Chrome sends this on HTTP/2+ requests
|
|
92
|
+
headers["te"] = "trailers";
|
|
93
|
+
// pragma for HTTP/1.1 backwards compatibility with older proxies/caches
|
|
94
|
+
if (!headers["pragma"]) {
|
|
95
|
+
headers["pragma"] = "no-cache";
|
|
96
|
+
}
|
|
97
|
+
// cache-control — real browsers send this on navigations
|
|
98
|
+
if (!headers["cache-control"]) {
|
|
99
|
+
headers["cache-control"] = "max-age=0";
|
|
100
|
+
}
|
|
101
|
+
// x-requested-with is sent by some sites to identify non-AJAX vs AJAX
|
|
102
|
+
delete headers["x-requested-with"];
|
|
103
|
+
// Remove any non-standard headers that could fingerprint the scraper
|
|
104
|
+
delete headers["x-devtools-emulate-network-conditions-client-id"];
|
|
13
105
|
return { ...headers, ...overrides };
|
|
14
106
|
}
|
|
15
107
|
export function getRandomUserAgent() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/stealth/headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;IACpC,QAAQ,EAAE;QACR,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE;QACnC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE;QACpC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/stealth/headers.ts"],"names":[],"mappings":"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"}
|
package/dist/stealth/index.d.ts
CHANGED
|
@@ -10,11 +10,15 @@ export interface FetchResult {
|
|
|
10
10
|
proxyUsed?: string;
|
|
11
11
|
chromeProfile?: string;
|
|
12
12
|
antiBotSystem?: string;
|
|
13
|
+
/** Indicates the result may be incomplete due to partial failure */
|
|
14
|
+
degraded?: boolean;
|
|
13
15
|
}
|
|
14
16
|
export declare class StealthError extends Error {
|
|
15
17
|
readonly lastLevel: StealthLevel;
|
|
16
18
|
readonly httpStatus: number;
|
|
17
19
|
readonly antiBotSystem: string | null;
|
|
20
|
+
/** Best partial result collected during escalation, if any */
|
|
21
|
+
partialResult?: FetchResult;
|
|
18
22
|
constructor(message: string, lastLevel: StealthLevel, httpStatus: number, antiBotSystem: string | null);
|
|
19
23
|
}
|
|
20
24
|
export interface StealthOptions {
|
|
@@ -24,6 +28,7 @@ export interface StealthOptions {
|
|
|
24
28
|
screenshot?: boolean;
|
|
25
29
|
proxy?: string;
|
|
26
30
|
chromeProfile?: string;
|
|
31
|
+
sessionId?: string;
|
|
27
32
|
}
|
|
28
33
|
export declare function smartFetch(url: string, options?: StealthOptions): Promise<FetchResult>;
|
|
29
34
|
export { isPlaywrightAvailable } from "./browser.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stealth/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stealth/index.ts"],"names":[],"mappings":"AAsIA,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,YAAa,SAAQ,KAAK;aAMnB,SAAS,EAAE,YAAY;aACvB,UAAU,EAAE,MAAM;aAClB,aAAa,EAAE,MAAM,GAAG,IAAI;IAP9C,8DAA8D;IACvD,aAAa,CAAC,EAAE,WAAW,CAAC;gBAGjC,OAAO,EAAE,MAAM,EACC,SAAS,EAAE,YAAY,EACvB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GAAG,IAAI;CAK/C;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0ID,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAmQ5F;AAoBD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
|