--- name: AA Camoufox user_data_dir 2026-05-11 description: Patch user_data_dir persistente no aa-solver adv-22 + diagnóstico challenge Akamai type: project originSessionId: c1338a0f-ba13-4e7c-92ae-b4bba3223bcf --- # AA user_data_dir aplicado em adv-22 (2026-05-11) ## Patch aplicado `/opt/aa-solver/aa-solver.mjs` — adv-22 (adv-23 INTOCADO). Backup: `/opt/aa-solver/aa-solver.mjs.bak-pre-userdatadir-1778504337`. Mudanças: - `import { launchServer }` → `import { Camoufox }` (camoufox-js 0.10.2 dist/index.js) - Adicionado `const USER_DATA_DIR = process.env.AA_SOLVER_USER_DATA_DIR || '/opt/aa-solver/camoufox-profile'` - Adicionado `const SOLVER_OS = process.env.AA_SOLVER_OS || 'windows'` - `ensureBrowser`: `launchServer + firefox.connect + browser.newContext + context.newPage` → `Camoufox({user_data_dir, headless: 'virtual', geoip, locale, os, args})` que retorna context persistent. `browser = null` em persistent mode; reaproveita `context.pages()[0]` ou cria nova. - OS rotativo `[windows, macos, linux]` removido — fixo via env `AA_SOLVER_OS` (profile guarda font/canvas/WebGL, trocar OS detecta inconsistência). - `/health`: `status: browser ? 'ok' : 'browser_down'` → `status: ready ? 'ok' : 'browser_down'` onde `ready = !!(context && page && !page.isClosed())`. - 2 ocorrências de `await xxx.close().catch()` trocadas por `try { await xxx.close() } catch (_) {}` — `context.close()` retornava `undefined` quando context já fechado, quebrando o `.catch()` chain. - responseHandler: log `resp status=NNN` quando ≠200 + `short body NNN b` quando body 0-5000 bytes (debug Akamai challenge). systemd override em adv-22: `/etc/systemd/system/aa-solver.service.d/os.conf`: ```ini [Service] Environment=AA_SOLVER_OS=windows ``` Profile dir: `/opt/aa-solver/camoufox-profile/` (chown customer:customer — bug inicial foi criar como root:root e Camoufox falha com "Can't find profile directory" porque service roda como User=customer). ## Resultado: persistent profile OK, Akamai ainda bloqueia ✅ **Camoufox lança com profile persistente** — 14MB criados em primeira inicialização (bookmarkbackups, cert9.db etc). ✅ **Cookies Akamai persistem entre restarts** — mesmo prefixo `A7324E3B2DA4A34953ABA0D8D32684B6~-1~...` em 3 inicializações seguidas. ✅ **Bug `.catch()` resolvido na rotação**. ❌ **Busca real GRU-MIA falha** — Akamai serve **challenge page** em vez de booking: ``` short body 2381 b, snippet=