@rester159/blacktip 0.1.0 → 0.2.0
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 +74 -0
- package/dist/blacktip.d.ts +53 -0
- package/dist/blacktip.d.ts.map +1 -1
- package/dist/blacktip.js +89 -0
- package/dist/blacktip.js.map +1 -1
- package/dist/browser-core.d.ts.map +1 -1
- package/dist/browser-core.js +125 -33
- package/dist/browser-core.js.map +1 -1
- package/dist/diagnostics.d.ts +119 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +243 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/browser-core.js
CHANGED
|
@@ -28,7 +28,10 @@ export class BrowserCore extends EventEmitter {
|
|
|
28
28
|
this.deviceProfile = this.profileManager.randomizeProfile(profileName);
|
|
29
29
|
}
|
|
30
30
|
async launch() {
|
|
31
|
-
this.logger.info('Launching browser', {
|
|
31
|
+
this.logger.info('Launching browser', {
|
|
32
|
+
deviceProfile: this.deviceProfile.name,
|
|
33
|
+
persistent: !!this.config.userDataDir,
|
|
34
|
+
});
|
|
32
35
|
// Minimal launch args. We deliberately do NOT set
|
|
33
36
|
// --disable-blink-features=AutomationControlled, nor do we remove
|
|
34
37
|
// --enable-automation via ignoreDefaultArgs. patchright handles both
|
|
@@ -49,46 +52,119 @@ export class BrowserCore extends EventEmitter {
|
|
|
49
52
|
// TLS ClientHello (with GREASE), the real GPU through ANGLE, and the
|
|
50
53
|
// real navigator surface — all things we can't fake as well with JS.
|
|
51
54
|
const execPath = this.config.chromiumPath ?? process.env.BLACKTIP_CHROMIUM_PATH;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
// ── userDataDir branch: persistent profile mode ──
|
|
56
|
+
//
|
|
57
|
+
// When the caller sets userDataDir, we use launchPersistentContext
|
|
58
|
+
// which gives us a long-lived Chrome profile that carries cookies,
|
|
59
|
+
// localStorage, history, and visited-sites context across BlackTip
|
|
60
|
+
// sessions. This makes Akamai's "first request from unknown
|
|
61
|
+
// session" challenge less likely to fire because the browser
|
|
62
|
+
// already has a realistic activity history.
|
|
63
|
+
if (this.config.userDataDir) {
|
|
64
|
+
try {
|
|
65
|
+
this.context = await chromium.launchPersistentContext(this.config.userDataDir, {
|
|
66
|
+
headless: false,
|
|
67
|
+
channel: execPath ? undefined : 'chrome',
|
|
68
|
+
args: launchArgs,
|
|
69
|
+
executablePath: execPath,
|
|
70
|
+
viewport: {
|
|
71
|
+
width: this.config.screenResolution.width,
|
|
72
|
+
height: this.config.screenResolution.height,
|
|
73
|
+
},
|
|
74
|
+
locale: this.config.locale,
|
|
75
|
+
timezoneId: this.config.timezone,
|
|
76
|
+
deviceScaleFactor: this.deviceProfile.devicePixelRatio,
|
|
77
|
+
colorScheme: 'light',
|
|
78
|
+
javaScriptEnabled: true,
|
|
79
|
+
bypassCSP: false,
|
|
80
|
+
ignoreHTTPSErrors: false,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
this.logger.warn('System Chrome not found for persistent context, falling back to Playwright Chromium');
|
|
85
|
+
this.context = await chromium.launchPersistentContext(this.config.userDataDir, {
|
|
86
|
+
headless: false,
|
|
87
|
+
args: launchArgs,
|
|
88
|
+
viewport: {
|
|
89
|
+
width: this.config.screenResolution.width,
|
|
90
|
+
height: this.config.screenResolution.height,
|
|
91
|
+
},
|
|
92
|
+
locale: this.config.locale,
|
|
93
|
+
timezoneId: this.config.timezone,
|
|
94
|
+
deviceScaleFactor: this.deviceProfile.devicePixelRatio,
|
|
95
|
+
colorScheme: 'light',
|
|
96
|
+
javaScriptEnabled: true,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
this.browser = this.context.browser();
|
|
100
|
+
// launchPersistentContext doesn't expose a Browser unless one was
|
|
101
|
+
// attached. We continue with the context and an emit-page handler.
|
|
59
102
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
103
|
+
else {
|
|
104
|
+
try {
|
|
105
|
+
this.browser = await chromium.launch({
|
|
106
|
+
headless: false,
|
|
107
|
+
channel: execPath ? undefined : 'chrome',
|
|
108
|
+
args: launchArgs,
|
|
109
|
+
executablePath: execPath,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
this.logger.warn('System Chrome not found, falling back to Playwright Chromium');
|
|
114
|
+
this.browser = await chromium.launch({
|
|
115
|
+
headless: false,
|
|
116
|
+
args: launchArgs,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// L016 fix: NEVER set `userAgent` at the context level. Playwright's
|
|
121
|
+
// userAgent option overrides the User-Agent HTTP header, but it does
|
|
122
|
+
// NOT update the Sec-Ch-Ua / Sec-Ch-Ua-Mobile / Sec-Ch-Ua-Platform
|
|
123
|
+
// client hint headers — those come from the actual Chromium binary
|
|
124
|
+
// version. Setting one without the other creates a mismatch like
|
|
125
|
+
// `User-Agent: Chrome/125` + `Sec-Ch-Ua: "Chrome";v="146"` which
|
|
126
|
+
// Akamai Bot Manager (and any serious detector) catches as a textbook
|
|
127
|
+
// spoofing tell. We let Chrome's real UA come through and it matches
|
|
128
|
+
// Sec-Ch-Ua naturally.
|
|
129
|
+
//
|
|
130
|
+
// Cross-platform UA spoofing (claim macOS while running on Linux) is
|
|
131
|
+
// not supported in v0.2.0 — that requires intercepting both UA and
|
|
132
|
+
// all Sec-Ch-Ua-* headers via setExtraHTTPHeaders, which is a v0.3.0
|
|
133
|
+
// follow-up. Most users want Chrome-on-their-platform anyway.
|
|
134
|
+
//
|
|
135
|
+
// In persistent context mode (userDataDir set), this.context was
|
|
136
|
+
// already created by launchPersistentContext above and we skip the
|
|
137
|
+
// newContext call.
|
|
138
|
+
if (!this.config.userDataDir) {
|
|
139
|
+
this.context = await this.browser.newContext({
|
|
140
|
+
viewport: {
|
|
141
|
+
width: this.config.screenResolution.width,
|
|
142
|
+
height: this.config.screenResolution.height,
|
|
143
|
+
},
|
|
144
|
+
locale: this.config.locale,
|
|
145
|
+
timezoneId: this.config.timezone,
|
|
146
|
+
deviceScaleFactor: this.deviceProfile.devicePixelRatio,
|
|
147
|
+
colorScheme: 'light',
|
|
148
|
+
javaScriptEnabled: true,
|
|
149
|
+
bypassCSP: false,
|
|
150
|
+
ignoreHTTPSErrors: false,
|
|
65
151
|
});
|
|
66
152
|
}
|
|
67
|
-
this.context
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
},
|
|
72
|
-
userAgent: this.deviceProfile.userAgent,
|
|
73
|
-
locale: this.config.locale,
|
|
74
|
-
timezoneId: this.config.timezone,
|
|
75
|
-
deviceScaleFactor: this.deviceProfile.devicePixelRatio,
|
|
76
|
-
colorScheme: 'light',
|
|
77
|
-
javaScriptEnabled: true,
|
|
78
|
-
bypassCSP: false,
|
|
79
|
-
ignoreHTTPSErrors: false,
|
|
80
|
-
});
|
|
153
|
+
if (!this.context) {
|
|
154
|
+
throw new Error('BrowserCore: failed to create context');
|
|
155
|
+
}
|
|
156
|
+
const ctx = this.context;
|
|
81
157
|
// Inject evasion scripts into every new page/frame
|
|
82
158
|
const evasionScripts = generateEvasionScripts(this.deviceProfile);
|
|
83
159
|
for (const script of evasionScripts) {
|
|
84
|
-
await
|
|
160
|
+
await ctx.addInitScript(script);
|
|
85
161
|
}
|
|
86
162
|
// Set default timeout
|
|
87
|
-
|
|
163
|
+
ctx.setDefaultTimeout(this.config.timeout);
|
|
88
164
|
// Listen for new pages (popups, new tabs). Dedupe: the handler fires for
|
|
89
165
|
// every page Chromium creates, including ones we just pushed ourselves —
|
|
90
166
|
// without this guard we'd double-count every tab.
|
|
91
|
-
|
|
167
|
+
ctx.on('page', (page) => {
|
|
92
168
|
if (this.pages.includes(page))
|
|
93
169
|
return;
|
|
94
170
|
this.pages.push(page);
|
|
@@ -102,9 +178,25 @@ export class BrowserCore extends EventEmitter {
|
|
|
102
178
|
action: 'opened',
|
|
103
179
|
});
|
|
104
180
|
});
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
|
|
181
|
+
// For persistent contexts, an initial page may already exist (Chrome
|
|
182
|
+
// restores the last-open tab from the profile). Use that instead of
|
|
183
|
+
// creating a new one.
|
|
184
|
+
const existingPages = ctx.pages();
|
|
185
|
+
if (existingPages.length > 0) {
|
|
186
|
+
// Push existing pages into our tracking array if they're not already
|
|
187
|
+
// tracked by the 'page' event handler (which only fires for NEW pages).
|
|
188
|
+
for (const p of existingPages) {
|
|
189
|
+
if (!this.pages.includes(p)) {
|
|
190
|
+
this.pages.push(p);
|
|
191
|
+
this.attachPageCloseHandler(p, this.pages.length - 1);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Open initial page — the 'page' event handler pushes + attaches close
|
|
197
|
+
// handler + emits tabChange for us, so we just set the active index.
|
|
198
|
+
await ctx.newPage();
|
|
199
|
+
}
|
|
108
200
|
this.activePageIndex = 0;
|
|
109
201
|
this.logger.info('Browser launched successfully');
|
|
110
202
|
}
|
package/dist/browser-core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-core.js","sourceRoot":"","sources":["../src/browser-core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser-core.js","sourceRoot":"","sources":["../src/browser-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic primitives for stealth validation.
|
|
3
|
+
*
|
|
4
|
+
* Captures the actual TLS / HTTP2 / HTTP header fingerprint that BlackTip
|
|
5
|
+
* is sending, and queries free IP reputation services to score the
|
|
6
|
+
* current network. Used to diagnose why a specific anti-bot target is
|
|
7
|
+
* blocking us — see docs/akamai-bypass.md for the full methodology.
|
|
8
|
+
*
|
|
9
|
+
* The primitives here run via the active BlackTip browser session — they
|
|
10
|
+
* don't make HTTP requests directly from Node, because the whole point
|
|
11
|
+
* is to capture what the browser actually sends, not what Node would send.
|
|
12
|
+
*/
|
|
13
|
+
import type { BlackTip } from './blacktip.js';
|
|
14
|
+
export interface FingerprintSnapshot {
|
|
15
|
+
capturedAt: string;
|
|
16
|
+
ip: string | null;
|
|
17
|
+
tls: {
|
|
18
|
+
ja3: string | null;
|
|
19
|
+
ja3Hash: string | null;
|
|
20
|
+
ja4: string | null;
|
|
21
|
+
firstCipher: string | null;
|
|
22
|
+
cipherCount: number | null;
|
|
23
|
+
firstExtension: string | null;
|
|
24
|
+
extensionCount: number | null;
|
|
25
|
+
tlsVersion: string | null;
|
|
26
|
+
/** True if first cipher is GREASE — Chrome's signature */
|
|
27
|
+
hasGreaseCipher: boolean;
|
|
28
|
+
/** True if first extension is GREASE — Chrome's signature */
|
|
29
|
+
hasGreaseExtension: boolean;
|
|
30
|
+
/** True if JA4 starts with t13d — TLS 1.3 with Chrome's count signature */
|
|
31
|
+
isChromeLikeJa4: boolean;
|
|
32
|
+
};
|
|
33
|
+
http2: {
|
|
34
|
+
akamaiFingerprint: string | null;
|
|
35
|
+
akamaiFingerprintHash: string | null;
|
|
36
|
+
/** Sequence of frame types sent by the client (Chrome: SETTINGS, WINDOW_UPDATE, HEADERS) */
|
|
37
|
+
sentFrames: string[] | null;
|
|
38
|
+
};
|
|
39
|
+
headers: {
|
|
40
|
+
userAgent: string | null;
|
|
41
|
+
secChUa: string | null;
|
|
42
|
+
secChUaMobile: string | null;
|
|
43
|
+
secChUaPlatform: string | null;
|
|
44
|
+
acceptLanguage: string | null;
|
|
45
|
+
acceptEncoding: string | null;
|
|
46
|
+
secFetchSite: string | null;
|
|
47
|
+
secFetchMode: string | null;
|
|
48
|
+
secFetchDest: string | null;
|
|
49
|
+
secFetchUser: string | null;
|
|
50
|
+
upgradeInsecureRequests: string | null;
|
|
51
|
+
/** Chrome version parsed from User-Agent (e.g. 125 from "Chrome/125.0.0.0") */
|
|
52
|
+
uaChromeVersion: number | null;
|
|
53
|
+
/** Chrome version parsed from Sec-Ch-Ua (e.g. 146 from `"Google Chrome";v="146"`) */
|
|
54
|
+
secChUaChromeVersion: number | null;
|
|
55
|
+
/**
|
|
56
|
+
* THE CRITICAL CHECK: do User-Agent and Sec-Ch-Ua report the same Chrome
|
|
57
|
+
* version? If false, Akamai / DataDome / PerimeterX will catch you. This
|
|
58
|
+
* is the L016 fingerprint consistency signal.
|
|
59
|
+
*/
|
|
60
|
+
uaConsistent: boolean;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export interface IpReputationResult {
|
|
64
|
+
ip: string | null;
|
|
65
|
+
hostname: string | null;
|
|
66
|
+
asn: string | null;
|
|
67
|
+
org: string | null;
|
|
68
|
+
city: string | null;
|
|
69
|
+
region: string | null;
|
|
70
|
+
country: string | null;
|
|
71
|
+
loc: string | null;
|
|
72
|
+
timezone: string | null;
|
|
73
|
+
/** Heuristic: ASN matches a well-known datacenter / cloud provider */
|
|
74
|
+
isDatacenter: boolean;
|
|
75
|
+
/** Heuristic: ASN matches a residential ISP */
|
|
76
|
+
isResidential: boolean;
|
|
77
|
+
/** Free-form notes from the heuristic checks */
|
|
78
|
+
notes: string[];
|
|
79
|
+
}
|
|
80
|
+
export interface AkamaiTestResult {
|
|
81
|
+
url: string;
|
|
82
|
+
/** True if the page loaded normally (not the Akamai Access Denied error) */
|
|
83
|
+
passed: boolean;
|
|
84
|
+
finalUrl: string;
|
|
85
|
+
title: string;
|
|
86
|
+
/** Akamai's reference number from the block page (null if not blocked) */
|
|
87
|
+
akamaiReference: string | null;
|
|
88
|
+
/** First 300 chars of body — useful for diagnosis */
|
|
89
|
+
bodyPreview: string;
|
|
90
|
+
/** Suggested next step based on what we observed */
|
|
91
|
+
suggestion: string;
|
|
92
|
+
durationMs: number;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Capture the active session's TLS, HTTP/2, and HTTP header fingerprint
|
|
96
|
+
* by navigating to tls.peet.ws/api/all and httpbin.org/headers.
|
|
97
|
+
*
|
|
98
|
+
* Returns a structured snapshot you can use to verify your stealth state
|
|
99
|
+
* before hitting a real target. The most important field is
|
|
100
|
+
* `headers.uaConsistent` — if that's false, you're on a pre-v0.2.0 build
|
|
101
|
+
* with the L016 bug.
|
|
102
|
+
*/
|
|
103
|
+
export declare function captureFingerprint(bt: BlackTip): Promise<FingerprintSnapshot>;
|
|
104
|
+
/**
|
|
105
|
+
* Query the active session's egress IP and ASN, score it against known
|
|
106
|
+
* datacenter / residential patterns, and return a structured result.
|
|
107
|
+
*
|
|
108
|
+
* Uses the free ipinfo.io endpoint which doesn't require an API key for
|
|
109
|
+
* basic queries. Doesn't query commercial reputation services (those
|
|
110
|
+
* require API keys); for those, integrate at the caller's level.
|
|
111
|
+
*/
|
|
112
|
+
export declare function checkIpReputation(bt: BlackTip): Promise<IpReputationResult>;
|
|
113
|
+
/**
|
|
114
|
+
* Visit an Akamai-protected URL and report the result with diagnosis.
|
|
115
|
+
* Recognizes the Akamai Access Denied error page format and extracts
|
|
116
|
+
* the reference number for triage.
|
|
117
|
+
*/
|
|
118
|
+
export declare function testAgainstAkamai(bt: BlackTip, url: string): Promise<AkamaiTestResult>;
|
|
119
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostic primitives for stealth validation.
|
|
3
|
+
*
|
|
4
|
+
* Captures the actual TLS / HTTP2 / HTTP header fingerprint that BlackTip
|
|
5
|
+
* is sending, and queries free IP reputation services to score the
|
|
6
|
+
* current network. Used to diagnose why a specific anti-bot target is
|
|
7
|
+
* blocking us — see docs/akamai-bypass.md for the full methodology.
|
|
8
|
+
*
|
|
9
|
+
* The primitives here run via the active BlackTip browser session — they
|
|
10
|
+
* don't make HTTP requests directly from Node, because the whole point
|
|
11
|
+
* is to capture what the browser actually sends, not what Node would send.
|
|
12
|
+
*/
|
|
13
|
+
// ── Datacenter ASN heuristics ──
|
|
14
|
+
//
|
|
15
|
+
// Not exhaustive — just covers the major cloud providers and known
|
|
16
|
+
// datacenter ranges. If your IP is on one of these, Akamai will almost
|
|
17
|
+
// certainly flag it. Add to this list as new providers come up.
|
|
18
|
+
const DATACENTER_ASN_PATTERNS = [
|
|
19
|
+
{ pattern: /AS16509|AS14618/, name: 'Amazon AWS' },
|
|
20
|
+
{ pattern: /AS15169/, name: 'Google Cloud' },
|
|
21
|
+
{ pattern: /AS8075/, name: 'Microsoft Azure' },
|
|
22
|
+
{ pattern: /AS16276/, name: 'OVH' },
|
|
23
|
+
{ pattern: /AS14061/, name: 'DigitalOcean' },
|
|
24
|
+
{ pattern: /AS20473/, name: 'Choopa / Vultr' },
|
|
25
|
+
{ pattern: /AS24940/, name: 'Hetzner' },
|
|
26
|
+
{ pattern: /AS63949/, name: 'Linode / Akamai (compute)' },
|
|
27
|
+
{ pattern: /AS133752/, name: 'Leaseweb' },
|
|
28
|
+
{ pattern: /AS54641|AS19551/, name: 'Cloudflare (compute)' },
|
|
29
|
+
{ pattern: /AS396982/, name: 'Google Cloud Platform (compute)' },
|
|
30
|
+
{ pattern: /AS200600/, name: 'Aeza Group (cheap VPS)' },
|
|
31
|
+
];
|
|
32
|
+
const RESIDENTIAL_ASN_PATTERNS = [
|
|
33
|
+
{ pattern: /AS5650|AS22773/, name: 'Frontier Communications / Cox (residential US)' },
|
|
34
|
+
{ pattern: /AS7922/, name: 'Comcast (residential US)' },
|
|
35
|
+
{ pattern: /AS7018/, name: 'AT&T (residential US)' },
|
|
36
|
+
{ pattern: /AS20057|AS20115/, name: 'Charter / Spectrum (residential US)' },
|
|
37
|
+
{ pattern: /AS6128/, name: 'Optimum / Cablevision (residential US)' },
|
|
38
|
+
{ pattern: /AS33363/, name: 'BHN / Spectrum (residential US)' },
|
|
39
|
+
{ pattern: /AS5089/, name: 'Virgin Media (residential UK)' },
|
|
40
|
+
{ pattern: /AS3320/, name: 'Deutsche Telekom (residential DE)' },
|
|
41
|
+
{ pattern: /AS9121/, name: 'Türk Telekom (residential TR)' },
|
|
42
|
+
];
|
|
43
|
+
// ── captureFingerprint ──
|
|
44
|
+
/**
|
|
45
|
+
* Capture the active session's TLS, HTTP/2, and HTTP header fingerprint
|
|
46
|
+
* by navigating to tls.peet.ws/api/all and httpbin.org/headers.
|
|
47
|
+
*
|
|
48
|
+
* Returns a structured snapshot you can use to verify your stealth state
|
|
49
|
+
* before hitting a real target. The most important field is
|
|
50
|
+
* `headers.uaConsistent` — if that's false, you're on a pre-v0.2.0 build
|
|
51
|
+
* with the L016 bug.
|
|
52
|
+
*/
|
|
53
|
+
export async function captureFingerprint(bt) {
|
|
54
|
+
// Step 1: TLS + HTTP/2 fingerprint via tls.peet.ws
|
|
55
|
+
await bt.navigate('https://tls.peet.ws/api/all');
|
|
56
|
+
const peetRaw = (await bt.executeJS('document.body.innerText'));
|
|
57
|
+
const peet = JSON.parse(peetRaw);
|
|
58
|
+
// Step 2: HTTP headers via httpbin.org/headers
|
|
59
|
+
await bt.navigate('https://httpbin.org/headers');
|
|
60
|
+
const hbRaw = (await bt.executeJS('document.body.innerText'));
|
|
61
|
+
const hb = JSON.parse(hbRaw);
|
|
62
|
+
const headers = hb.headers ?? {};
|
|
63
|
+
const userAgent = headers['User-Agent'] ?? null;
|
|
64
|
+
const secChUa = headers['Sec-Ch-Ua'] ?? null;
|
|
65
|
+
// Parse Chrome version from User-Agent: "...Chrome/125.0.0.0..."
|
|
66
|
+
const uaMatch = userAgent ? userAgent.match(/Chrome\/(\d+)/) : null;
|
|
67
|
+
const uaChromeVersion = uaMatch ? parseInt(uaMatch[1], 10) : null;
|
|
68
|
+
// Parse Chrome version from Sec-Ch-Ua: `"Google Chrome";v="146"`
|
|
69
|
+
const chuaMatch = secChUa ? secChUa.match(/"Google Chrome";v="(\d+)/) : null;
|
|
70
|
+
const secChUaChromeVersion = chuaMatch ? parseInt(chuaMatch[1], 10) : null;
|
|
71
|
+
const uaConsistent = uaChromeVersion != null &&
|
|
72
|
+
secChUaChromeVersion != null &&
|
|
73
|
+
uaChromeVersion === secChUaChromeVersion;
|
|
74
|
+
const tlsBlock = peet.tls ?? {};
|
|
75
|
+
const ciphers = tlsBlock.ciphers ?? [];
|
|
76
|
+
const extensions = tlsBlock.extensions ?? [];
|
|
77
|
+
const ja4 = tlsBlock.ja4 ?? null;
|
|
78
|
+
return {
|
|
79
|
+
capturedAt: new Date().toISOString(),
|
|
80
|
+
ip: peet.ip ? peet.ip.split(':')[0] ?? null : null,
|
|
81
|
+
tls: {
|
|
82
|
+
ja3: tlsBlock.ja3 ?? null,
|
|
83
|
+
ja3Hash: tlsBlock.ja3_hash ?? null,
|
|
84
|
+
ja4,
|
|
85
|
+
firstCipher: ciphers[0] ?? null,
|
|
86
|
+
cipherCount: ciphers.length || null,
|
|
87
|
+
firstExtension: extensions[0]?.name ?? null,
|
|
88
|
+
extensionCount: extensions.length || null,
|
|
89
|
+
tlsVersion: tlsBlock.tls_version_negotiated ?? null,
|
|
90
|
+
hasGreaseCipher: !!(ciphers[0] && /GREASE/i.test(ciphers[0])),
|
|
91
|
+
hasGreaseExtension: !!(extensions[0]?.name && /GREASE/i.test(extensions[0].name)),
|
|
92
|
+
isChromeLikeJa4: !!(ja4 && /^t13d/.test(ja4)),
|
|
93
|
+
},
|
|
94
|
+
http2: {
|
|
95
|
+
akamaiFingerprint: peet.http2?.akamai_fingerprint ?? null,
|
|
96
|
+
akamaiFingerprintHash: peet.http2?.akamai_fingerprint_hash ?? null,
|
|
97
|
+
sentFrames: peet.http2?.sent_frames?.map((f) => f.frame_type ?? '') ?? null,
|
|
98
|
+
},
|
|
99
|
+
headers: {
|
|
100
|
+
userAgent,
|
|
101
|
+
secChUa,
|
|
102
|
+
secChUaMobile: headers['Sec-Ch-Ua-Mobile'] ?? null,
|
|
103
|
+
secChUaPlatform: headers['Sec-Ch-Ua-Platform'] ?? null,
|
|
104
|
+
acceptLanguage: headers['Accept-Language'] ?? null,
|
|
105
|
+
acceptEncoding: headers['Accept-Encoding'] ?? null,
|
|
106
|
+
secFetchSite: headers['Sec-Fetch-Site'] ?? null,
|
|
107
|
+
secFetchMode: headers['Sec-Fetch-Mode'] ?? null,
|
|
108
|
+
secFetchDest: headers['Sec-Fetch-Dest'] ?? null,
|
|
109
|
+
secFetchUser: headers['Sec-Fetch-User'] ?? null,
|
|
110
|
+
upgradeInsecureRequests: headers['Upgrade-Insecure-Requests'] ?? null,
|
|
111
|
+
uaChromeVersion,
|
|
112
|
+
secChUaChromeVersion,
|
|
113
|
+
uaConsistent,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// ── checkIpReputation ──
|
|
118
|
+
/**
|
|
119
|
+
* Query the active session's egress IP and ASN, score it against known
|
|
120
|
+
* datacenter / residential patterns, and return a structured result.
|
|
121
|
+
*
|
|
122
|
+
* Uses the free ipinfo.io endpoint which doesn't require an API key for
|
|
123
|
+
* basic queries. Doesn't query commercial reputation services (those
|
|
124
|
+
* require API keys); for those, integrate at the caller's level.
|
|
125
|
+
*/
|
|
126
|
+
export async function checkIpReputation(bt) {
|
|
127
|
+
await bt.navigate('https://ipinfo.io/json');
|
|
128
|
+
const raw = (await bt.executeJS('document.body.innerText'));
|
|
129
|
+
let parsed;
|
|
130
|
+
try {
|
|
131
|
+
parsed = JSON.parse(raw);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
parsed = {};
|
|
135
|
+
}
|
|
136
|
+
const org = parsed.org ?? null;
|
|
137
|
+
const notes = [];
|
|
138
|
+
let isDatacenter = false;
|
|
139
|
+
let isResidential = false;
|
|
140
|
+
if (org) {
|
|
141
|
+
for (const { pattern, name } of DATACENTER_ASN_PATTERNS) {
|
|
142
|
+
if (pattern.test(org)) {
|
|
143
|
+
isDatacenter = true;
|
|
144
|
+
notes.push(`Matches datacenter ASN: ${name}`);
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (!isDatacenter) {
|
|
149
|
+
for (const { pattern, name } of RESIDENTIAL_ASN_PATTERNS) {
|
|
150
|
+
if (pattern.test(org)) {
|
|
151
|
+
isResidential = true;
|
|
152
|
+
notes.push(`Matches residential ISP: ${name}`);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (!isDatacenter && !isResidential) {
|
|
158
|
+
notes.push('ASN not in known datacenter or residential lists — could be either');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
notes.push('Could not determine ASN');
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
ip: parsed.ip ?? null,
|
|
166
|
+
hostname: parsed.hostname ?? null,
|
|
167
|
+
asn: org ? (org.match(/AS\d+/) ?? [])[0] ?? null : null,
|
|
168
|
+
org,
|
|
169
|
+
city: parsed.city ?? null,
|
|
170
|
+
region: parsed.region ?? null,
|
|
171
|
+
country: parsed.country ?? null,
|
|
172
|
+
loc: parsed.loc ?? null,
|
|
173
|
+
timezone: parsed.timezone ?? null,
|
|
174
|
+
isDatacenter,
|
|
175
|
+
isResidential,
|
|
176
|
+
notes,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// ── testAgainstAkamai ──
|
|
180
|
+
/**
|
|
181
|
+
* Visit an Akamai-protected URL and report the result with diagnosis.
|
|
182
|
+
* Recognizes the Akamai Access Denied error page format and extracts
|
|
183
|
+
* the reference number for triage.
|
|
184
|
+
*/
|
|
185
|
+
export async function testAgainstAkamai(bt, url) {
|
|
186
|
+
const start = Date.now();
|
|
187
|
+
try {
|
|
188
|
+
await bt.navigate(url);
|
|
189
|
+
// Wait for the page to settle a moment so Akamai can render its block
|
|
190
|
+
// page if it's going to.
|
|
191
|
+
await new Promise((r) => setTimeout(r, 1500));
|
|
192
|
+
const info = (await bt.executeJS(`(() => ({
|
|
193
|
+
url: location.href,
|
|
194
|
+
title: document.title,
|
|
195
|
+
bodyPreview: (document.body ? document.body.innerText : '').slice(0, 600),
|
|
196
|
+
}))()`));
|
|
197
|
+
// Akamai Access Denied detection
|
|
198
|
+
const isBlocked = info.title === 'Access Denied' ||
|
|
199
|
+
/You don't have permission to access/i.test(info.bodyPreview) ||
|
|
200
|
+
/errors\.edgesuite\.net/i.test(info.bodyPreview);
|
|
201
|
+
// Extract Akamai reference number if present
|
|
202
|
+
const refMatch = info.bodyPreview.match(/Reference\s*#([0-9a-f.]+)/);
|
|
203
|
+
const akamaiReference = refMatch ? refMatch[1] ?? null : null;
|
|
204
|
+
let suggestion;
|
|
205
|
+
if (!isBlocked) {
|
|
206
|
+
suggestion = 'Page loaded successfully. No Akamai block detected.';
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
suggestion = [
|
|
210
|
+
'Akamai blocked the request at the edge. Diagnosis steps:',
|
|
211
|
+
'1. Run `bt.captureFingerprint()` and check `headers.uaConsistent`. If false, upgrade BlackTip to v0.2.0+.',
|
|
212
|
+
'2. Run `bt.checkIpReputation()`. If `isDatacenter: true`, switch to a residential network or proxy.',
|
|
213
|
+
'3. Test the same URL in your normal Chrome from the same machine. If that ALSO blocks, your IP is flagged — switch networks.',
|
|
214
|
+
'4. Try `bt.warmSession({sites: [...]})` before the target navigation.',
|
|
215
|
+
'5. Try with `userDataDir` set in BlackTipConfig for a persistent profile.',
|
|
216
|
+
`Akamai reference: ${akamaiReference ?? 'unknown'}`,
|
|
217
|
+
].join('\n');
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
url,
|
|
221
|
+
passed: !isBlocked,
|
|
222
|
+
finalUrl: info.url,
|
|
223
|
+
title: info.title,
|
|
224
|
+
akamaiReference,
|
|
225
|
+
bodyPreview: info.bodyPreview.slice(0, 300),
|
|
226
|
+
suggestion,
|
|
227
|
+
durationMs: Date.now() - start,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
return {
|
|
232
|
+
url,
|
|
233
|
+
passed: false,
|
|
234
|
+
finalUrl: url,
|
|
235
|
+
title: '',
|
|
236
|
+
akamaiReference: null,
|
|
237
|
+
bodyPreview: '',
|
|
238
|
+
suggestion: `Navigation threw: ${err instanceof Error ? err.message : String(err)}`,
|
|
239
|
+
durationMs: Date.now() - start,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export { SnapshotManager } from './snapshot.js';
|
|
|
14
14
|
export type { SessionSnapshot } from './snapshot.js';
|
|
15
15
|
export { attachObservability, JsonlFileExporter, ConsoleExporter, newTraceId, } from './observability.js';
|
|
16
16
|
export type { StructuredEvent, EventExporter } from './observability.js';
|
|
17
|
+
export { captureFingerprint, checkIpReputation, testAgainstAkamai, } from './diagnostics.js';
|
|
18
|
+
export type { FingerprintSnapshot, IpReputationResult, AkamaiTestResult, } from './diagnostics.js';
|
|
17
19
|
export type { BlackTipConfig, ProfileConfig, DeviceProfile, PluginData, ActionResult, NavigateResult, ScreenshotResult, WaitResult, ActionEvent, BehavioralMetadata, ErrorEvent, RetryEvent, TabChangeEvent, LogEntry, TabInfo, FrameInfo, LogLevel, ClickOptions, TypeOptions, ScrollOptions, HoverOptions, SelectOptions, PressKeyOptions, UploadFileOptions, NavigateOptions, ScreenshotOptions, WaitForOptions, WaitForNavigationOptions, ExtractTextOptions, PageContentOptions, ErrorCode, RetryStrategy, Point, BoundingBox, } from './types.js';
|
|
18
20
|
export { ErrorCodes } from './types.js';
|
|
19
21
|
//# sourceMappingURL=index.d.ts.map
|