auspex 0.2.1 → 0.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAA0C,MAAM,aAAa,CAAC;AAO9H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,IAAI,CAAqB;gBAErB,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW;IAQ1C,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAI/E,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9F,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;YAM3F,cAAc;IAgC5B,OAAO,CAAC,cAAc;IAOhB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/F,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA4LpD,OAAO,CAAC,WAAW;IAkBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B,OAAO,CAAC,iBAAiB;CAe1B"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAA0C,MAAM,aAAa,CAAC;AAO9H,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,MAAO,SAAQ,YAAY;IACtC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,IAAI,CAAqB;gBAErB,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW;IAQ1C,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO;IAI/E,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;IAI9F,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI;YAM3F,cAAc;IA6B5B,OAAO,CAAC,cAAc;IAOhB,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,GAAG;QAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,GAAG;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC;IAC/F,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IA2LpD,OAAO,CAAC,WAAW;IAkBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B,OAAO,CAAC,iBAAiB;CAe1B"}
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
- import { chromium } from "playwright";
3
2
  import { gotScraping } from "got-scraping";
3
+ import { launchStealthBrowser, STEALTH_INIT_SCRIPT, CHROME_UA } from "../browser/stealth.js";
4
4
  import { zodToJsonSchema } from "zod-to-json-schema";
5
5
  import { agentConfigSchema, runOptionsSchema } from "../config/schema.js";
6
6
  import { validateUrl } from "../security/url-validator.js";
@@ -38,18 +38,16 @@ export class Auspex extends EventEmitter {
38
38
  return this.browser;
39
39
  if (!this.browserPromise) {
40
40
  this.browserPromise = (async () => {
41
- const launchOptions = {
42
- headless: true,
43
- args: ["--disable-blink-features=AutomationControlled"],
44
- };
45
- if (this.config.proxy) {
46
- launchOptions.proxy = {
47
- server: this.config.proxy.server,
48
- username: this.config.proxy.username,
49
- password: this.config.proxy.password,
50
- };
51
- }
52
- const browser = await chromium.launch(launchOptions);
41
+ const launchOptions = this.config.proxy
42
+ ? {
43
+ proxy: {
44
+ server: this.config.proxy.server,
45
+ username: this.config.proxy.username,
46
+ password: this.config.proxy.password,
47
+ },
48
+ }
49
+ : {};
50
+ const browser = await launchStealthBrowser(launchOptions);
53
51
  this.browser = browser;
54
52
  this.browserPromise = null;
55
53
  return browser;
@@ -139,7 +137,8 @@ export class Auspex extends EventEmitter {
139
137
  let page = null;
140
138
  try {
141
139
  const contextOptions = {
142
- viewport: { width: 1280, height: 720 },
140
+ userAgent: CHROME_UA,
141
+ viewport: { width: 1920, height: 1080 },
143
142
  locale: "pt-BR",
144
143
  timezoneId: "America/Sao_Paulo",
145
144
  extraHTTPHeaders: this.config.extraHeaders,
@@ -165,10 +164,8 @@ export class Auspex extends EventEmitter {
165
164
  expires: c.expires,
166
165
  })));
167
166
  }
168
- context.addInitScript(() => {
169
- Object.defineProperty(navigator, "webdriver", { get: () => false, configurable: true });
170
- window.chrome = { runtime: {} };
171
- });
167
+ // Apply comprehensive stealth patches (second layer on top of playwright-extra stealth plugin)
168
+ await context.addInitScript(STEALTH_INIT_SCRIPT);
172
169
  page = await context.newPage();
173
170
  const gotoTimeout = effectiveConfig.gotoTimeoutMs ?? 15_000;
174
171
  await page.goto(validUrl, { waitUntil: "domcontentloaded", timeout: gotoTimeout });
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,kBAAuB;IAS5C,wFAAwF;IAClF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwCjC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAuB/B,iDAAiD;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,+BAA+B;IAC/B,IAAI,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAOlF;CACF"}
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,GAAE,kBAAuB;IAM5C,wFAAwF;IAClF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwCjC,0CAA0C;IAC1C,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAuB/B,iDAAiD;IAC3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B,+BAA+B;IAC/B,IAAI,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAOlF;CACF"}
@@ -1,4 +1,4 @@
1
- import { chromium } from "playwright";
1
+ import { launchStealthBrowser } from "./stealth.js";
2
2
  export class BrowserPool {
3
3
  maxSize;
4
4
  launchOptions;
@@ -10,10 +10,7 @@ export class BrowserPool {
10
10
  constructor(options = {}) {
11
11
  this.maxSize = options.maxSize ?? 3;
12
12
  this.acquireTimeoutMs = options.acquireTimeoutMs ?? 30_000;
13
- this.launchOptions = options.launchOptions ?? {
14
- headless: true,
15
- args: ["--disable-blink-features=AutomationControlled"],
16
- };
13
+ this.launchOptions = options.launchOptions ?? { headless: true };
17
14
  }
18
15
  /** Acquire a browser instance. Blocks if all are in use and pool is at max capacity. */
19
16
  async acquire() {
@@ -31,7 +28,7 @@ export class BrowserPool {
31
28
  }
32
29
  // 2. Launch a new one if under capacity
33
30
  if (this.browsers.length < this.maxSize) {
34
- const browser = await chromium.launch(this.launchOptions);
31
+ const browser = await launchStealthBrowser(this.launchOptions);
35
32
  this.browsers.push(browser);
36
33
  // Auto-remove from pool if browser crashes
37
34
  browser.on("disconnected", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../src/browser/pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Browser, LaunchOptions } from "playwright";
2
+ export declare const STEALTH_ARGS: string[];
3
+ export declare const CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36";
4
+ export declare const STEALTH_INIT_SCRIPT = "\n(function () {\n // \u2500\u2500 1. navigator.webdriver \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // NOTE: We intentionally do NOT redefine navigator.webdriver here.\n // The playwright-extra stealth plugin runs a dedicated evasion that\n // deletes the property from the prototype entirely, which is more\n // effective than redefining it. If we redefine it after the plugin\n // deleted it, we'd add it back as an own property and sannysoft's\n // \"WebDriver (New)\" check would detect it as \"present\".\n //\n // The plugin handles: webdriver, plugins, languages, hardwareConcurrency,\n // vendor, permissions, WebGL, window.chrome, iframe.contentWindow,\n // media.codecs, user-agent, window.outerdimensions.\n //\n // This script provides EXTRA patches the plugin does NOT cover:\n // - navigator.deviceMemory\n // - navigator.maxTouchPoints\n // - navigator.platform (plugin sets vendor but not platform)\n // - Notification.permission\n // - Canvas fingerprint noise (deterministic fingerprinting prevention)\n // - window.chrome.loadTimes/csi with randomised timing values\n // - Screen colorDepth/pixelDepth\n // - Removal of automation artefacts from other tools\n\n // \u2500\u2500 2. Plugins realistas de um Chrome normal \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // navigator.plugins.length === 0 \u00E9 o maior red-flag de headless.\n const makeMime = (type, suffixes, desc, plugin) => {\n const mt = Object.create(MimeType.prototype);\n Object.defineProperties(mt, {\n type: { value: type, enumerable: true },\n suffixes: { value: suffixes, enumerable: true },\n description: { value: desc, enumerable: true },\n enabledPlugin: { value: plugin, enumerable: true },\n });\n return mt;\n };\n\n const makePlugin = (name, desc, filename, mimeSpecs) => {\n const p = Object.create(Plugin.prototype);\n Object.defineProperties(p, {\n name: { value: name, enumerable: true },\n description: { value: desc, enumerable: true },\n filename: { value: filename, enumerable: true },\n length: { value: mimeSpecs.length },\n });\n mimeSpecs.forEach((spec, i) => {\n const mt = makeMime(spec.type, spec.suffixes, spec.desc, p);\n Object.defineProperty(p, i, { value: mt, enumerable: true });\n Object.defineProperty(p, spec.type, { value: mt });\n });\n p.item = (i) => p[i] ?? null;\n p.namedItem = (n) => p[n] ?? null;\n return p;\n };\n\n const pdfViewer = makePlugin(\n 'PDF Viewer', 'Portable Document Format', 'internal-pdf-viewer',\n [\n { type: 'application/pdf', suffixes: 'pdf', desc: '' },\n { type: 'text/pdf', suffixes: 'pdf', desc: '' },\n ],\n );\n const chromePDF = makePlugin(\n 'Chrome PDF Viewer', '', 'mhjfbmdgcfjbbpaeojofohoefgiehjai',\n [{ type: 'application/pdf', suffixes: 'pdf', desc: '' }],\n );\n const nacl = makePlugin(\n 'Native Client', '', 'internal-nacl-plugin',\n [\n { type: 'application/x-nacl', suffixes: '', desc: 'Native Client Executable' },\n { type: 'application/x-pnacl', suffixes: '', desc: 'Portable Native Client Executable' },\n ],\n );\n\n const pluginList = [pdfViewer, chromePDF, nacl];\n const pa = Object.create(PluginArray.prototype);\n Object.defineProperty(pa, 'length', { value: pluginList.length });\n pluginList.forEach((plug, i) => {\n Object.defineProperty(pa, i, { value: plug, enumerable: true });\n Object.defineProperty(pa, plug.name, { value: plug });\n });\n pa.item = (i) => pluginList[i] ?? null;\n pa.namedItem = (n) => pa[n] ?? null;\n pa.refresh = () => {};\n\n Object.defineProperty(navigator, 'plugins', { get: () => pa });\n\n // \u2500\u2500 3. Propriedades de hardware realistas \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n Object.defineProperty(navigator, 'languages', { get: () => ['pt-BR', 'pt', 'en-US', 'en'] });\n Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 8 });\n Object.defineProperty(navigator, 'deviceMemory', { get: () => 8 });\n Object.defineProperty(navigator, 'maxTouchPoints', { get: () => 0 });\n Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });\n Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });\n\n // \u2500\u2500 4. window.chrome \u2014 objeto completo como Chrome real \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (!window.chrome) window.chrome = {};\n\n if (!window.chrome.app) {\n window.chrome.app = {\n isInstalled: false,\n getDetails: () => null,\n getIsInstalled: () => false,\n InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' },\n RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' },\n };\n }\n\n if (!window.chrome.runtime) {\n window.chrome.runtime = {\n id: undefined,\n connect: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },\n sendMessage: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },\n PlatformOs: { MAC: 'mac', WIN: 'win', ANDROID: 'android', CROS: 'cros', LINUX: 'linux', OPENBSD: 'openbsd' },\n PlatformArch: { ARM: 'arm', ARM64: 'arm64', X86_32: 'x86-32', X86_64: 'x86-64', MIPS: 'mips', MIPS64: 'mips64' },\n };\n }\n\n if (!window.chrome.loadTimes) {\n window.chrome.loadTimes = () => {\n const now = Date.now() / 1000;\n return {\n requestTime: now - 1.5 - Math.random() * 0.5,\n startLoadTime: now - 1.2 - Math.random() * 0.3,\n commitLoadTime: now - 0.8 - Math.random() * 0.2,\n finishDocumentLoadTime: now - 0.3 - Math.random() * 0.1,\n finishLoadTime: now - 0.1 - Math.random() * 0.05,\n firstPaintTime: now - 0.9 - Math.random() * 0.2,\n firstPaintAfterLoadTime: now - 0.05,\n navigationType: 'Other',\n wasFetchedViaSpdy: true,\n wasNpnNegotiated: true,\n npnNegotiatedProtocol: 'h2',\n wasAlternateProtocolAvailable: false,\n connectionInfo: 'h2',\n };\n };\n }\n\n if (!window.chrome.csi) {\n window.chrome.csi = () => ({\n startE: Date.now() - 1000,\n onloadT: Date.now(),\n pageT: 500 + Math.random() * 1000,\n tran: 15,\n });\n }\n\n // \u2500\u2500 5. Notification API \u2014 headless retorna 'denied', real retorna 'default' \u2500\n try {\n if (typeof Notification !== 'undefined') {\n Object.defineProperty(Notification, 'permission', { get: () => 'default' });\n }\n } catch (_) {}\n\n // \u2500\u2500 6. Permission API \u2014 'notifications' deve retornar 'prompt' \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n if (navigator.permissions) {\n const origQuery = navigator.permissions.query.bind(navigator.permissions);\n navigator.permissions.query = (params) => {\n if (params && params.name === 'notifications') {\n return Promise.resolve({ state: 'prompt', onchange: null, addEventListener: () => {}, removeEventListener: () => {}, dispatchEvent: () => true });\n }\n return origQuery(params);\n };\n }\n\n // \u2500\u2500 7. Canvas fingerprint \u2014 ru\u00EDdo sutil no \u00FAltimo byte do dataURL \u2500\u2500\u2500\u2500\u2500\n const _origToDataURL = HTMLCanvasElement.prototype.toDataURL;\n HTMLCanvasElement.prototype.toDataURL = function (type, quality) {\n const data = _origToDataURL.call(this, type, quality);\n if (data.length < 12) return data;\n const idx = data.length - 2;\n return data.slice(0, idx) + String.fromCharCode(data.charCodeAt(idx) ^ 0x01) + data.slice(idx + 1);\n };\n\n // \u2500\u2500 8. WebGL \u2014 GPU Intel realista em vez de llvmpipe/SwiftShader \u2500\u2500\u2500\u2500\u2500\n const WEBGL_VENDOR = 'Google Inc. (Intel)';\n const WEBGL_RENDERER = 'ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11)';\n\n const patchWebGL = (Ctx) => {\n if (!Ctx) return;\n const orig = Ctx.prototype.getParameter;\n Ctx.prototype.getParameter = function (param) {\n if (param === 37445) return WEBGL_VENDOR;\n if (param === 37446) return WEBGL_RENDERER;\n return orig.call(this, param);\n };\n };\n\n patchWebGL(typeof WebGLRenderingContext !== 'undefined' ? WebGLRenderingContext : null);\n patchWebGL(typeof WebGL2RenderingContext !== 'undefined' ? WebGL2RenderingContext : null);\n\n // \u2500\u2500 9. Screen depth realista \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n try {\n Object.defineProperty(screen, 'colorDepth', { get: () => 24 });\n Object.defineProperty(screen, 'pixelDepth', { get: () => 24 });\n } catch (_) {}\n\n // \u2500\u2500 10. Remove artefatos de outras ferramentas de automa\u00E7\u00E3o \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const automationVars = ['__nightmare', '_phantom', 'callPhantom',\n '__selenium_evaluate', '__webdriver_evaluate', '_Selenium_IDE_Recorder',\n '__webdriver_script_fn', '__lastWatirAlert', '__lastWatirConfirm'];\n automationVars.forEach(v => { try { delete window[v]; } catch (_) {} });\n\n})();\n";
5
+ export declare function launchStealthBrowser(options?: LaunchOptions): Promise<Browser>;
6
+ //# sourceMappingURL=stealth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stealth.d.ts","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwCzD,eAAO,MAAM,YAAY,EAAE,MAAM,EAuBhC,CAAC;AAGF,eAAO,MAAM,SAAS,oHAC6F,CAAC;AAiBpH,eAAO,MAAM,mBAAmB,kgUA6M/B,CAAC;AAQF,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxF"}
@@ -0,0 +1,295 @@
1
+ import playwrightExtra from "playwright-extra";
2
+ import StealthPlugin from "puppeteer-extra-plugin-stealth";
3
+ // ─── playwright-extra + stealth plugin setup ──────────────────────────────────
4
+ //
5
+ // Applies ~14 evasion modules from puppeteer-extra-plugin-stealth:
6
+ // - chrome.app / chrome.csi / chrome.loadTimes / chrome.runtime
7
+ // - iframe.contentWindow (iframes expose the real window.webdriver)
8
+ // - media.codecs (audio/video codec fingerprinting)
9
+ // - navigator.hardwareConcurrency / languages / permissions / plugins / vendor / webdriver
10
+ // - sourceurl (hides automation source in stack traces)
11
+ // - user-agent-override (consistent UA across requests)
12
+ // - webgl.vendor (masks llvmpipe/SwiftShader GPU string)
13
+ // - window.outerdimensions (fixes 0x0 outerWidth/outerHeight in headless)
14
+ //
15
+ // Combined with STEALTH_INIT_SCRIPT below (extra patches not covered by the plugin),
16
+ // this achieves maximum anti-bot evasion for the Playwright tier.
17
+ // ─────────────────────────────────────────────────────────────────────────────
18
+ const { chromium: extraChromium } = playwrightExtra;
19
+ try {
20
+ extraChromium.use(StealthPlugin());
21
+ }
22
+ catch (err) {
23
+ // Should never happen — StealthPlugin() is a pure constructor with no side effects.
24
+ // Guard against future plugin version issues without crashing the whole process.
25
+ console.error("[auspex/stealth] Failed to register stealth plugin:", err);
26
+ }
27
+ // ─── Chrome launch args to reduce automation signals ─────────────────────────
28
+ //
29
+ // Note: --disable-gpu is intentionally OMITTED — it prevents WebGL context
30
+ // creation entirely, which is a strong bot signal. Instead, we use
31
+ // --use-gl=swiftshader to allow WebGL via software rasterization while our
32
+ // STEALTH_INIT_SCRIPT overrides the vendor/renderer strings to look like
33
+ // a real Intel GPU (not SwiftShader).
34
+ export const STEALTH_ARGS = [
35
+ "--disable-blink-features=AutomationControlled",
36
+ "--disable-features=IsolateOrigins,site-per-process",
37
+ "--disable-infobars",
38
+ "--no-first-run",
39
+ "--no-sandbox",
40
+ "--disable-setuid-sandbox",
41
+ "--disable-dev-shm-usage",
42
+ "--no-zygote",
43
+ "--use-gl=swiftshader",
44
+ "--window-size=1920,1080",
45
+ "--disable-background-networking",
46
+ "--disable-client-side-phishing-detection",
47
+ "--disable-component-update",
48
+ "--disable-default-apps",
49
+ "--disable-domain-reliability",
50
+ "--disable-extensions",
51
+ "--disable-hang-monitor",
52
+ "--disable-popup-blocking",
53
+ "--disable-prompt-on-repost",
54
+ "--disable-sync",
55
+ "--metrics-recording-only",
56
+ "--safebrowsing-disable-auto-update",
57
+ ];
58
+ // ─── Chrome User-Agent (Windows — most common OS = less suspicious) ───────────
59
+ export const CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36";
60
+ // ─── Comprehensive stealth init script ───────────────────────────────────────
61
+ //
62
+ // Injetado via context.addInitScript() ANTES de qualquer script da página.
63
+ // Cobre os principais sinais de detecção usados por Cloudflare, DataDome,
64
+ // Akamai, PerimeterX e Shape Security.
65
+ //
66
+ // Complementa o playwright-extra stealth plugin com patches adicionais:
67
+ // - navigator.deviceMemory (plugin não cobre)
68
+ // - navigator.maxTouchPoints
69
+ // - navigator.platform
70
+ // - Notification.permission (headless retorna 'denied')
71
+ // - Canvas fingerprint noise (quebra fingerprinting determinístico)
72
+ // - window.chrome completo com loadTimes/csi com valores randomizados
73
+ // - Remoção de artefatos de outras ferramentas (Selenium, PhantomJS, etc.)
74
+ // ─────────────────────────────────────────────────────────────────────────────
75
+ export const STEALTH_INIT_SCRIPT = /* language=javascript */ `
76
+ (function () {
77
+ // ── 1. navigator.webdriver ────────────────────────────────────────────
78
+ // NOTE: We intentionally do NOT redefine navigator.webdriver here.
79
+ // The playwright-extra stealth plugin runs a dedicated evasion that
80
+ // deletes the property from the prototype entirely, which is more
81
+ // effective than redefining it. If we redefine it after the plugin
82
+ // deleted it, we'd add it back as an own property and sannysoft's
83
+ // "WebDriver (New)" check would detect it as "present".
84
+ //
85
+ // The plugin handles: webdriver, plugins, languages, hardwareConcurrency,
86
+ // vendor, permissions, WebGL, window.chrome, iframe.contentWindow,
87
+ // media.codecs, user-agent, window.outerdimensions.
88
+ //
89
+ // This script provides EXTRA patches the plugin does NOT cover:
90
+ // - navigator.deviceMemory
91
+ // - navigator.maxTouchPoints
92
+ // - navigator.platform (plugin sets vendor but not platform)
93
+ // - Notification.permission
94
+ // - Canvas fingerprint noise (deterministic fingerprinting prevention)
95
+ // - window.chrome.loadTimes/csi with randomised timing values
96
+ // - Screen colorDepth/pixelDepth
97
+ // - Removal of automation artefacts from other tools
98
+
99
+ // ── 2. Plugins realistas de um Chrome normal ──────────────────────────
100
+ // navigator.plugins.length === 0 é o maior red-flag de headless.
101
+ const makeMime = (type, suffixes, desc, plugin) => {
102
+ const mt = Object.create(MimeType.prototype);
103
+ Object.defineProperties(mt, {
104
+ type: { value: type, enumerable: true },
105
+ suffixes: { value: suffixes, enumerable: true },
106
+ description: { value: desc, enumerable: true },
107
+ enabledPlugin: { value: plugin, enumerable: true },
108
+ });
109
+ return mt;
110
+ };
111
+
112
+ const makePlugin = (name, desc, filename, mimeSpecs) => {
113
+ const p = Object.create(Plugin.prototype);
114
+ Object.defineProperties(p, {
115
+ name: { value: name, enumerable: true },
116
+ description: { value: desc, enumerable: true },
117
+ filename: { value: filename, enumerable: true },
118
+ length: { value: mimeSpecs.length },
119
+ });
120
+ mimeSpecs.forEach((spec, i) => {
121
+ const mt = makeMime(spec.type, spec.suffixes, spec.desc, p);
122
+ Object.defineProperty(p, i, { value: mt, enumerable: true });
123
+ Object.defineProperty(p, spec.type, { value: mt });
124
+ });
125
+ p.item = (i) => p[i] ?? null;
126
+ p.namedItem = (n) => p[n] ?? null;
127
+ return p;
128
+ };
129
+
130
+ const pdfViewer = makePlugin(
131
+ 'PDF Viewer', 'Portable Document Format', 'internal-pdf-viewer',
132
+ [
133
+ { type: 'application/pdf', suffixes: 'pdf', desc: '' },
134
+ { type: 'text/pdf', suffixes: 'pdf', desc: '' },
135
+ ],
136
+ );
137
+ const chromePDF = makePlugin(
138
+ 'Chrome PDF Viewer', '', 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
139
+ [{ type: 'application/pdf', suffixes: 'pdf', desc: '' }],
140
+ );
141
+ const nacl = makePlugin(
142
+ 'Native Client', '', 'internal-nacl-plugin',
143
+ [
144
+ { type: 'application/x-nacl', suffixes: '', desc: 'Native Client Executable' },
145
+ { type: 'application/x-pnacl', suffixes: '', desc: 'Portable Native Client Executable' },
146
+ ],
147
+ );
148
+
149
+ const pluginList = [pdfViewer, chromePDF, nacl];
150
+ const pa = Object.create(PluginArray.prototype);
151
+ Object.defineProperty(pa, 'length', { value: pluginList.length });
152
+ pluginList.forEach((plug, i) => {
153
+ Object.defineProperty(pa, i, { value: plug, enumerable: true });
154
+ Object.defineProperty(pa, plug.name, { value: plug });
155
+ });
156
+ pa.item = (i) => pluginList[i] ?? null;
157
+ pa.namedItem = (n) => pa[n] ?? null;
158
+ pa.refresh = () => {};
159
+
160
+ Object.defineProperty(navigator, 'plugins', { get: () => pa });
161
+
162
+ // ── 3. Propriedades de hardware realistas ─────────────────────────────
163
+ Object.defineProperty(navigator, 'languages', { get: () => ['pt-BR', 'pt', 'en-US', 'en'] });
164
+ Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 8 });
165
+ Object.defineProperty(navigator, 'deviceMemory', { get: () => 8 });
166
+ Object.defineProperty(navigator, 'maxTouchPoints', { get: () => 0 });
167
+ Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });
168
+ Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
169
+
170
+ // ── 4. window.chrome — objeto completo como Chrome real ──────────────
171
+ if (!window.chrome) window.chrome = {};
172
+
173
+ if (!window.chrome.app) {
174
+ window.chrome.app = {
175
+ isInstalled: false,
176
+ getDetails: () => null,
177
+ getIsInstalled: () => false,
178
+ InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' },
179
+ RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' },
180
+ };
181
+ }
182
+
183
+ if (!window.chrome.runtime) {
184
+ window.chrome.runtime = {
185
+ id: undefined,
186
+ connect: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },
187
+ sendMessage: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },
188
+ PlatformOs: { MAC: 'mac', WIN: 'win', ANDROID: 'android', CROS: 'cros', LINUX: 'linux', OPENBSD: 'openbsd' },
189
+ PlatformArch: { ARM: 'arm', ARM64: 'arm64', X86_32: 'x86-32', X86_64: 'x86-64', MIPS: 'mips', MIPS64: 'mips64' },
190
+ };
191
+ }
192
+
193
+ if (!window.chrome.loadTimes) {
194
+ window.chrome.loadTimes = () => {
195
+ const now = Date.now() / 1000;
196
+ return {
197
+ requestTime: now - 1.5 - Math.random() * 0.5,
198
+ startLoadTime: now - 1.2 - Math.random() * 0.3,
199
+ commitLoadTime: now - 0.8 - Math.random() * 0.2,
200
+ finishDocumentLoadTime: now - 0.3 - Math.random() * 0.1,
201
+ finishLoadTime: now - 0.1 - Math.random() * 0.05,
202
+ firstPaintTime: now - 0.9 - Math.random() * 0.2,
203
+ firstPaintAfterLoadTime: now - 0.05,
204
+ navigationType: 'Other',
205
+ wasFetchedViaSpdy: true,
206
+ wasNpnNegotiated: true,
207
+ npnNegotiatedProtocol: 'h2',
208
+ wasAlternateProtocolAvailable: false,
209
+ connectionInfo: 'h2',
210
+ };
211
+ };
212
+ }
213
+
214
+ if (!window.chrome.csi) {
215
+ window.chrome.csi = () => ({
216
+ startE: Date.now() - 1000,
217
+ onloadT: Date.now(),
218
+ pageT: 500 + Math.random() * 1000,
219
+ tran: 15,
220
+ });
221
+ }
222
+
223
+ // ── 5. Notification API — headless retorna 'denied', real retorna 'default' ─
224
+ try {
225
+ if (typeof Notification !== 'undefined') {
226
+ Object.defineProperty(Notification, 'permission', { get: () => 'default' });
227
+ }
228
+ } catch (_) {}
229
+
230
+ // ── 6. Permission API — 'notifications' deve retornar 'prompt' ────────
231
+ if (navigator.permissions) {
232
+ const origQuery = navigator.permissions.query.bind(navigator.permissions);
233
+ navigator.permissions.query = (params) => {
234
+ if (params && params.name === 'notifications') {
235
+ return Promise.resolve({ state: 'prompt', onchange: null, addEventListener: () => {}, removeEventListener: () => {}, dispatchEvent: () => true });
236
+ }
237
+ return origQuery(params);
238
+ };
239
+ }
240
+
241
+ // ── 7. Canvas fingerprint — ruído sutil no último byte do dataURL ─────
242
+ const _origToDataURL = HTMLCanvasElement.prototype.toDataURL;
243
+ HTMLCanvasElement.prototype.toDataURL = function (type, quality) {
244
+ const data = _origToDataURL.call(this, type, quality);
245
+ if (data.length < 12) return data;
246
+ const idx = data.length - 2;
247
+ return data.slice(0, idx) + String.fromCharCode(data.charCodeAt(idx) ^ 0x01) + data.slice(idx + 1);
248
+ };
249
+
250
+ // ── 8. WebGL — GPU Intel realista em vez de llvmpipe/SwiftShader ─────
251
+ const WEBGL_VENDOR = 'Google Inc. (Intel)';
252
+ const WEBGL_RENDERER = 'ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11)';
253
+
254
+ const patchWebGL = (Ctx) => {
255
+ if (!Ctx) return;
256
+ const orig = Ctx.prototype.getParameter;
257
+ Ctx.prototype.getParameter = function (param) {
258
+ if (param === 37445) return WEBGL_VENDOR;
259
+ if (param === 37446) return WEBGL_RENDERER;
260
+ return orig.call(this, param);
261
+ };
262
+ };
263
+
264
+ patchWebGL(typeof WebGLRenderingContext !== 'undefined' ? WebGLRenderingContext : null);
265
+ patchWebGL(typeof WebGL2RenderingContext !== 'undefined' ? WebGL2RenderingContext : null);
266
+
267
+ // ── 9. Screen depth realista ──────────────────────────────────────────
268
+ try {
269
+ Object.defineProperty(screen, 'colorDepth', { get: () => 24 });
270
+ Object.defineProperty(screen, 'pixelDepth', { get: () => 24 });
271
+ } catch (_) {}
272
+
273
+ // ── 10. Remove artefatos de outras ferramentas de automação ──────────
274
+ const automationVars = ['__nightmare', '_phantom', 'callPhantom',
275
+ '__selenium_evaluate', '__webdriver_evaluate', '_Selenium_IDE_Recorder',
276
+ '__webdriver_script_fn', '__lastWatirAlert', '__lastWatirConfirm'];
277
+ automationVars.forEach(v => { try { delete window[v]; } catch (_) {} });
278
+
279
+ })();
280
+ `;
281
+ // ─── Launch a fully stealthy Chromium browser ────────────────────────────────
282
+ //
283
+ // Uses playwright-extra + stealth plugin for the first layer of evasion.
284
+ // The STEALTH_ARGS disable the most obvious automation flags at the process level.
285
+ // STEALTH_INIT_SCRIPT (applied separately per context) handles JS-level patches.
286
+ // ─────────────────────────────────────────────────────────────────────────────
287
+ export async function launchStealthBrowser(options = {}) {
288
+ const { args: extraArgs = [], ...rest } = options;
289
+ return extraChromium.launch({
290
+ headless: true,
291
+ ...rest,
292
+ args: [...STEALTH_ARGS, ...extraArgs],
293
+ });
294
+ }
295
+ //# sourceMappingURL=stealth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stealth.js","sourceRoot":"","sources":["../../src/browser/stealth.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,kBAAkB,CAAC;AAC/C,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAG3D,iFAAiF;AACjF,EAAE;AACF,mEAAmE;AACnE,kEAAkE;AAClE,sEAAsE;AACtE,sDAAsD;AACtD,6FAA6F;AAC7F,0DAA0D;AAC1D,0DAA0D;AAC1D,2DAA2D;AAC3D,4EAA4E;AAC5E,EAAE;AACF,qFAAqF;AACrF,kEAAkE;AAClE,gFAAgF;AAEhF,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,eAKnC,CAAC;AAEF,IAAI,CAAC;IACH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;AACrC,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,oFAAoF;IACpF,iFAAiF;IACjF,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,2EAA2E;AAC3E,yEAAyE;AACzE,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAa;IACpC,+CAA+C;IAC/C,oDAAoD;IACpD,oBAAoB;IACpB,gBAAgB;IAChB,cAAc;IACd,0BAA0B;IAC1B,yBAAyB;IACzB,aAAa;IACb,sBAAsB;IACtB,yBAAyB;IACzB,iCAAiC;IACjC,0CAA0C;IAC1C,4BAA4B;IAC5B,wBAAwB;IACxB,8BAA8B;IAC9B,sBAAsB;IACtB,wBAAwB;IACxB,0BAA0B;IAC1B,4BAA4B;IAC5B,gBAAgB;IAChB,0BAA0B;IAC1B,oCAAoC;CACrC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,SAAS,GACpB,iHAAiH,CAAC;AAEpH,gFAAgF;AAChF,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,uCAAuC;AACvC,EAAE;AACF,wEAAwE;AACxE,gDAAgD;AAChD,+BAA+B;AAC/B,yBAAyB;AACzB,0DAA0D;AAC1D,sEAAsE;AACtE,wEAAwE;AACxE,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6M5D,CAAC;AAEF,gFAAgF;AAChF,EAAE;AACF,yEAAyE;AACzE,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAyB,EAAE;IACpE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAClD,OAAO,aAAa,CAAC,MAAM,CAAC;QAC1B,QAAQ,EAAE,IAAI;QACd,GAAG,IAAI;QACP,IAAI,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,SAAS,CAAC;KACtC,CAAC,CAAC;AACL,CAAC"}
@@ -79,17 +79,17 @@ export declare const agentConfigSchema: z.ZodObject<{
79
79
  logDir: string;
80
80
  vision: boolean;
81
81
  screenshotQuality: number;
82
+ proxy?: {
83
+ server: string;
84
+ username?: string | undefined;
85
+ password?: string | undefined;
86
+ } | undefined;
82
87
  llmBaseUrl?: string | undefined;
83
88
  topP?: number | undefined;
84
89
  frequencyPenalty?: number | undefined;
85
90
  presencePenalty?: number | undefined;
86
91
  allowedDomains?: string[] | undefined;
87
92
  blockedDomains?: string[] | undefined;
88
- proxy?: {
89
- server: string;
90
- username?: string | undefined;
91
- password?: string | undefined;
92
- } | undefined;
93
93
  cookies?: {
94
94
  value: string;
95
95
  name: string;
@@ -103,6 +103,11 @@ export declare const agentConfigSchema: z.ZodObject<{
103
103
  extraHeaders?: Record<string, string> | undefined;
104
104
  }, {
105
105
  llmApiKey: string;
106
+ proxy?: {
107
+ server: string;
108
+ username?: string | undefined;
109
+ password?: string | undefined;
110
+ } | undefined;
106
111
  llmBaseUrl?: string | undefined;
107
112
  port?: number | undefined;
108
113
  model?: string | undefined;
@@ -119,11 +124,6 @@ export declare const agentConfigSchema: z.ZodObject<{
119
124
  blockedDomains?: string[] | undefined;
120
125
  actionDelayMs?: number | undefined;
121
126
  maxTotalTokens?: number | undefined;
122
- proxy?: {
123
- server: string;
124
- username?: string | undefined;
125
- password?: string | undefined;
126
- } | undefined;
127
127
  cookies?: {
128
128
  value: string;
129
129
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tier3-browser.d.ts","sourceRoot":"","sources":["../../../src/scraper/tiers/tier3-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEZ,aAAa,EACd,MAAM,aAAa,CAAC;AA4RrB,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;gBAEhE,aAAa,GAAE,aAAa,CAAC,eAAe,CAAM;YAMhD,UAAU;IAqClB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoNvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
1
+ {"version":3,"file":"tier3-browser.d.ts","sourceRoot":"","sources":["../../../src/scraper/tiers/tier3-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAEZ,aAAa,EACd,MAAM,aAAa,CAAC;AA4CrB,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8C;gBAEhE,aAAa,GAAE,aAAa,CAAC,eAAe,CAAM;YAMhD,UAAU;IAuBlB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoNvE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
@@ -1,6 +1,6 @@
1
- import { chromium } from "playwright";
2
1
  import { extractContent } from "../extractors/content.js";
3
2
  import { htmlToMarkdown } from "../extractors/to-markdown.js";
3
+ import { launchStealthBrowser, STEALTH_INIT_SCRIPT, CHROME_UA } from "../../browser/stealth.js";
4
4
  // ─── Tier 3: Playwright Chromium (fallback final) ──────────────────────────
5
5
  //
6
6
  // Acionado quando Tier 1 (HTTP) e Tier 2 (Stealth HTTP) falham.
@@ -13,245 +13,7 @@ import { htmlToMarkdown } from "../extractors/to-markdown.js";
13
13
  // 4. Aguardar networkidle ou seletor específico
14
14
  // 5. Extrair DOM completo e converter para Markdown
15
15
  // ──────────────────────────────────────────────────────────────────────────
16
- // User-Agent de Chrome real para Windows (OS mais comum = menos suspeito).
17
- // Atualizar a cada 2-3 versões major do Chrome.
18
- const CHROME_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36";
19
- // Args que reduzem sinais de automação detectáveis
20
- const STEALTH_ARGS = [
21
- "--disable-blink-features=AutomationControlled",
22
- "--disable-features=IsolateOrigins,site-per-process",
23
- "--disable-infobars",
24
- "--no-first-run",
25
- "--no-sandbox",
26
- "--disable-setuid-sandbox",
27
- "--disable-dev-shm-usage",
28
- "--disable-accelerated-2d-canvas",
29
- "--no-zygote",
30
- "--disable-gpu",
31
- "--window-size=1920,1080",
32
- "--disable-background-networking",
33
- "--disable-client-side-phishing-detection",
34
- "--disable-component-update",
35
- "--disable-default-apps",
36
- "--disable-domain-reliability",
37
- "--disable-extensions",
38
- "--disable-hang-monitor",
39
- "--disable-popup-blocking",
40
- "--disable-prompt-on-repost",
41
- "--disable-sync",
42
- "--metrics-recording-only",
43
- "--safebrowsing-disable-auto-update",
44
- ];
45
- // ─── Script de anti-detecção (injetado antes de qualquer JS da página) ────────
46
- //
47
- // Cobre as principais técnicas usadas por anti-bots modernos
48
- // (Cloudflare, DataDome, Akamai, PerimeterX, Shape Security):
49
- //
50
- // 1. navigator.webdriver → remove o flag mais óbvio
51
- // 2. navigator.plugins → simula os 3 plugins reais do Chrome
52
- // 3. Propriedades de hardware → concurrency, memory, maxTouchPoints, vendor, platform
53
- // 4. window.chrome → objeto completo (runtime, loadTimes, csi, app)
54
- // 5. Notification.permission → 'default' (headless retorna 'denied')
55
- // 6. Permission API → 'prompt' para notifications
56
- // 7. Canvas fingerprint → ruído de 1 bit no toDataURL (quebra fingerprinting)
57
- // 8. WebGL UNMASKED_VENDOR/RENDERER → GPU Intel realista (em vez de llvmpipe/SwiftShader)
58
- // 9. Screen.colorDepth/pixelDepth → 24 bits
59
- // 10. Remoção de artefatos → remove vars de outras ferramentas (Selenium, PhantomJS)
60
- // ──────────────────────────────────────────────────────────────────────────────
61
- const STEALTH_INIT_SCRIPT = /* language=javascript */ `
62
- (function () {
63
- // ── 1. Remove a flag mais básica de automação ─────────────────────────
64
- Object.defineProperty(navigator, 'webdriver', {
65
- get: () => undefined,
66
- configurable: true,
67
- });
68
-
69
- // ── 2. Plugins realistas de um Chrome normal ──────────────────────────
70
- // navigator.plugins.length === 0 é o maior red-flag de headless.
71
- const makeMime = (type, suffixes, desc, plugin) => {
72
- const mt = Object.create(MimeType.prototype);
73
- Object.defineProperties(mt, {
74
- type: { value: type, enumerable: true },
75
- suffixes: { value: suffixes, enumerable: true },
76
- description: { value: desc, enumerable: true },
77
- enabledPlugin: { value: plugin, enumerable: true },
78
- });
79
- return mt;
80
- };
81
-
82
- const makePlugin = (name, desc, filename, mimeSpecs) => {
83
- const p = Object.create(Plugin.prototype);
84
- Object.defineProperties(p, {
85
- name: { value: name, enumerable: true },
86
- description: { value: desc, enumerable: true },
87
- filename: { value: filename, enumerable: true },
88
- length: { value: mimeSpecs.length },
89
- });
90
- mimeSpecs.forEach((spec, i) => {
91
- const mt = makeMime(spec.type, spec.suffixes, spec.desc, p);
92
- Object.defineProperty(p, i, { value: mt, enumerable: true });
93
- Object.defineProperty(p, spec.type, { value: mt });
94
- });
95
- p.item = (i) => p[i] ?? null;
96
- p.namedItem = (n) => p[n] ?? null;
97
- return p;
98
- };
99
-
100
- const pdfViewer = makePlugin(
101
- 'PDF Viewer', 'Portable Document Format', 'internal-pdf-viewer',
102
- [
103
- { type: 'application/pdf', suffixes: 'pdf', desc: '' },
104
- { type: 'text/pdf', suffixes: 'pdf', desc: '' },
105
- ],
106
- );
107
- const chromePDF = makePlugin(
108
- 'Chrome PDF Viewer', '', 'mhjfbmdgcfjbbpaeojofohoefgiehjai',
109
- [{ type: 'application/pdf', suffixes: 'pdf', desc: '' }],
110
- );
111
- const nacl = makePlugin(
112
- 'Native Client', '', 'internal-nacl-plugin',
113
- [
114
- { type: 'application/x-nacl', suffixes: '', desc: 'Native Client Executable' },
115
- { type: 'application/x-pnacl', suffixes: '', desc: 'Portable Native Client Executable' },
116
- ],
117
- );
118
-
119
- const pluginList = [pdfViewer, chromePDF, nacl];
120
- const pa = Object.create(PluginArray.prototype);
121
- Object.defineProperty(pa, 'length', { value: pluginList.length });
122
- pluginList.forEach((plug, i) => {
123
- Object.defineProperty(pa, i, { value: plug, enumerable: true });
124
- Object.defineProperty(pa, plug.name, { value: plug });
125
- });
126
- pa.item = (i) => pluginList[i] ?? null;
127
- pa.namedItem = (n) => pa[n] ?? null;
128
- pa.refresh = () => {};
129
-
130
- Object.defineProperty(navigator, 'plugins', { get: () => pa });
131
-
132
- // ── 3. Propriedades de hardware realistas ─────────────────────────────
133
- Object.defineProperty(navigator, 'languages', { get: () => ['pt-BR', 'pt', 'en-US', 'en'] });
134
- Object.defineProperty(navigator, 'hardwareConcurrency', { get: () => 8 });
135
- Object.defineProperty(navigator, 'deviceMemory', { get: () => 8 });
136
- Object.defineProperty(navigator, 'maxTouchPoints', { get: () => 0 });
137
- Object.defineProperty(navigator, 'vendor', { get: () => 'Google Inc.' });
138
- Object.defineProperty(navigator, 'platform', { get: () => 'Win32' });
139
-
140
- // ── 4. window.chrome — objeto completo como Chrome real ──────────────
141
- // Automação headless deixa window.chrome undefined ou com .runtime vazio.
142
- if (!window.chrome) window.chrome = {};
143
-
144
- if (!window.chrome.app) {
145
- window.chrome.app = {
146
- isInstalled: false,
147
- getDetails: () => null,
148
- getIsInstalled: () => false,
149
- InstallState: { DISABLED: 'disabled', INSTALLED: 'installed', NOT_INSTALLED: 'not_installed' },
150
- RunningState: { CANNOT_RUN: 'cannot_run', READY_TO_RUN: 'ready_to_run', RUNNING: 'running' },
151
- };
152
- }
153
-
154
- if (!window.chrome.runtime) {
155
- window.chrome.runtime = {
156
- id: undefined,
157
- connect: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },
158
- sendMessage: () => { throw Object.assign(new Error('Could not establish connection.'), { message: 'Could not establish connection. Receiving end does not exist.' }); },
159
- PlatformOs: { MAC: 'mac', WIN: 'win', ANDROID: 'android', CROS: 'cros', LINUX: 'linux', OPENBSD: 'openbsd' },
160
- PlatformArch: { ARM: 'arm', ARM64: 'arm64', X86_32: 'x86-32', X86_64: 'x86-64', MIPS: 'mips', MIPS64: 'mips64' },
161
- };
162
- }
163
-
164
- if (!window.chrome.loadTimes) {
165
- window.chrome.loadTimes = () => {
166
- const now = Date.now() / 1000;
167
- return {
168
- requestTime: now - 1.5 - Math.random() * 0.5,
169
- startLoadTime: now - 1.2 - Math.random() * 0.3,
170
- commitLoadTime: now - 0.8 - Math.random() * 0.2,
171
- finishDocumentLoadTime: now - 0.3 - Math.random() * 0.1,
172
- finishLoadTime: now - 0.1 - Math.random() * 0.05,
173
- firstPaintTime: now - 0.9 - Math.random() * 0.2,
174
- firstPaintAfterLoadTime: now - 0.05,
175
- navigationType: 'Other',
176
- wasFetchedViaSpdy: true,
177
- wasNpnNegotiated: true,
178
- npnNegotiatedProtocol: 'h2',
179
- wasAlternateProtocolAvailable: false,
180
- connectionInfo: 'h2',
181
- };
182
- };
183
- }
184
-
185
- if (!window.chrome.csi) {
186
- window.chrome.csi = () => ({
187
- startE: Date.now() - 1000,
188
- onloadT: Date.now(),
189
- pageT: 500 + Math.random() * 1000,
190
- tran: 15,
191
- });
192
- }
193
-
194
- // ── 5. Notification API — headless retorna 'denied', real retorna 'default' ─
195
- try {
196
- if (typeof Notification !== 'undefined') {
197
- Object.defineProperty(Notification, 'permission', { get: () => 'default' });
198
- }
199
- } catch (_) {}
200
-
201
- // ── 6. Permission API — 'notifications' deve retornar 'prompt' ────────
202
- if (navigator.permissions) {
203
- const origQuery = navigator.permissions.query.bind(navigator.permissions);
204
- navigator.permissions.query = (params) => {
205
- if (params && params.name === 'notifications') {
206
- return Promise.resolve({ state: 'prompt', onchange: null, addEventListener: () => {}, removeEventListener: () => {}, dispatchEvent: () => true });
207
- }
208
- return origQuery(params);
209
- };
210
- }
211
-
212
- // ── 7. Canvas fingerprint — ruído sutil no último byte do dataURL ─────
213
- // Técnica: altera 1 bit → output diferente em cada run → quebra fingerprinting.
214
- // Impacto visual: imperceptível (altera apenas o encoding base64 do último pixel).
215
- const _origToDataURL = HTMLCanvasElement.prototype.toDataURL;
216
- HTMLCanvasElement.prototype.toDataURL = function (type, quality) {
217
- const data = _origToDataURL.call(this, type, quality);
218
- if (data.length < 12) return data;
219
- const idx = data.length - 2;
220
- return data.slice(0, idx) + String.fromCharCode(data.charCodeAt(idx) ^ 0x01) + data.slice(idx + 1);
221
- };
222
-
223
- // ── 8. WebGL — GPU Intel realista em vez de llvmpipe/SwiftShader ─────
224
- // llvmpipe/SwiftShader = fingerprint de VM detectado por todos os anti-bots.
225
- const WEBGL_VENDOR = 'Google Inc. (Intel)';
226
- const WEBGL_RENDERER = 'ANGLE (Intel, Intel(R) UHD Graphics 620 Direct3D11 vs_5_0 ps_5_0, D3D11)';
227
-
228
- const patchWebGL = (Ctx) => {
229
- if (!Ctx) return;
230
- const orig = Ctx.prototype.getParameter;
231
- Ctx.prototype.getParameter = function (param) {
232
- if (param === 37445) return WEBGL_VENDOR; // UNMASKED_VENDOR_WEBGL
233
- if (param === 37446) return WEBGL_RENDERER; // UNMASKED_RENDERER_WEBGL
234
- return orig.call(this, param);
235
- };
236
- };
237
-
238
- patchWebGL(typeof WebGLRenderingContext !== 'undefined' ? WebGLRenderingContext : null);
239
- patchWebGL(typeof WebGL2RenderingContext !== 'undefined' ? WebGL2RenderingContext : null);
240
-
241
- // ── 9. Screen depth realista ──────────────────────────────────────────
242
- try {
243
- Object.defineProperty(screen, 'colorDepth', { get: () => 24 });
244
- Object.defineProperty(screen, 'pixelDepth', { get: () => 24 });
245
- } catch (_) {}
246
-
247
- // ── 10. Remove artefatos de outras ferramentas de automação ──────────
248
- const automationVars = ['__nightmare', '_phantom', 'callPhantom',
249
- '__selenium_evaluate', '__webdriver_evaluate', '_Selenium_IDE_Recorder',
250
- '__webdriver_script_fn', '__lastWatirAlert', '__lastWatirConfirm'];
251
- automationVars.forEach(v => { try { delete window[v]; } catch (_) {} });
252
-
253
- })();
254
- `;
16
+ // Note: CHROME_UA and STEALTH_INIT_SCRIPT are imported from the shared stealth module.
255
17
  // Recursos que bloqueamos para economizar banda/tempo.
256
18
  // "image" incluído: extraímos texto/markdown, não renderizamos visualmente.
257
19
  const BLOCKED_RESOURCE_TYPES = new Set(["font", "media", "image"]);
@@ -289,26 +51,10 @@ export class Tier3Browser {
289
51
  this.browserPromise = (async () => {
290
52
  const launchOptions = {
291
53
  headless: this.browserConfig.headless ?? true,
292
- args: STEALTH_ARGS,
54
+ ...(this.browserConfig.executablePath && { executablePath: this.browserConfig.executablePath }),
55
+ ...(this.browserConfig.channel && { channel: this.browserConfig.channel }),
293
56
  };
294
- if (this.browserConfig.executablePath) {
295
- launchOptions.executablePath = this.browserConfig.executablePath;
296
- }
297
- else if (this.browserConfig.channel) {
298
- launchOptions.channel = this.browserConfig.channel;
299
- }
300
- else {
301
- try {
302
- const browser = await chromium.launch({ ...launchOptions, channel: "chrome" });
303
- this.browser = browser;
304
- this.browserPromise = null;
305
- return browser;
306
- }
307
- catch {
308
- // Chrome not found → use Playwright's bundled Chromium
309
- }
310
- }
311
- const browser = await chromium.launch(launchOptions);
57
+ const browser = await launchStealthBrowser(launchOptions);
312
58
  this.browser = browser;
313
59
  this.browserPromise = null;
314
60
  return browser;
@@ -1 +1 @@
1
- {"version":3,"file":"tier3-browser.js","sourceRoot":"","sources":["../../../src/scraper/tiers/tier3-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tier3-browser.js","sourceRoot":"","sources":["../../../src/scraper/tiers/tier3-browser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auspex",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
4
4
  "description": "AI-powered browser agent with tiered scraping — HTTP/Cheerio first, Playwright as fallback",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -44,6 +44,8 @@
44
44
  "openai": "^4.77.0",
45
45
  "playwright": "^1.49.0",
46
46
  "playwright-core": "^1.49.0",
47
+ "playwright-extra": "^4.3.6",
48
+ "puppeteer-extra-plugin-stealth": "^2.11.2",
47
49
  "turndown": "^7.2.2",
48
50
  "turndown-plugin-gfm": "^1.0.2",
49
51
  "zod": "^3.24.0",