@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.
@@ -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', { deviceProfile: this.deviceProfile.name });
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
- try {
53
- this.browser = await chromium.launch({
54
- headless: false,
55
- channel: execPath ? undefined : 'chrome',
56
- args: launchArgs,
57
- executablePath: execPath,
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
- catch {
61
- this.logger.warn('System Chrome not found, falling back to Playwright Chromium');
62
- this.browser = await chromium.launch({
63
- headless: false,
64
- args: launchArgs,
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 = await this.browser.newContext({
68
- viewport: {
69
- width: this.config.screenResolution.width,
70
- height: this.config.screenResolution.height,
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 this.context.addInitScript(script);
160
+ await ctx.addInitScript(script);
85
161
  }
86
162
  // Set default timeout
87
- this.context.setDefaultTimeout(this.config.timeout);
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
- this.context.on('page', (page) => {
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
- // Open initial page the 'page' event handler pushes + attaches close
106
- // handler + emits tabChange for us, so we just set the active index.
107
- await this.context.newPage();
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
  }
@@ -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