--- name: LATAM Pass VM solver — tentativa puppeteer-extra falhou no Auth0 fingerprint 2026-05-05 description: Solver completo deployado em adv-22:9096 com Chrome real + IP residencial + sem CapSolver/proxy-seller. Auth0 rejeita no submit do CPF em 4s mesmo com pre-warm Google + profile persistente + WebGL. Próximo passo: rewrite pra CDP-spawn estilo smiles-solver pra TLS/JA3 idêntico ao Chrome stock. type: project originSessionId: c9648413-e4b1-4d72-a57a-696bbb103574 --- # LATAM Pass VM Solver — Tentativa 1 (2026-05-05) ## Estado inicial - Production scrapers: `scraper-latam-miles` (3012), `scraper-latam-pass-brl` (3011 → proxy ao 3012), `scraper-latam-money` (3019 separado). - 4 dias rodando, 17 restarts, **2 sucessos vs 58 rate-limits Auth0**. Praticamente inoperante. - Login Auth0 falha no Passo 4 ("Aguardando senha"): "Não foi possível fazer o login. Você pode tentar mais tarde" 4s após submeter CPF. Scraper rotula como "Auth0 rate limit" (label genérica). ## Conta usada - CPF `221.348.709-07` (`22134870907`) - Senha `zy()BdK#[)J(1` - Email 2FA: `codigo@skymilhas.com` (IMAP `mail.skymilhas.com:993`) - Hardcoded em `/opt/skymilhas/scrapers/latam-pass-miles/index.js` na const `LATAM_CREDENTIALS` ## O que foi feito (ordem) 1. **Bundle do scraper full deployado em adv-22 `/opt/latampass-vm/`** - SCP: scrapers/latam-pass-miles/{index.js,service.js} + email-reader.js + scrapers/{banner,cache-helper,chrome-cleanup,page-optimizer}.js - Total bundle 29KB tar.gz - SSH key: `customer@173.208.187.154:~/.ssh/id_ed25519_adv22` → `customer@100.91.20.22` direto, sudo NOPASS 2. **package.json minimal + `npm install`** (276 packages) - express + puppeteer-extra + stealth + puppeteer + imapflow + mailparser 3. **Patches aplicados** (acumulados em backups `.bak-pre-*`): - `service.js`: `PORT 3012 → 9096`, bind `0.0.0.0` - `index.js` `PROXY_CONFIG.enabled = false` (zero proxy-seller) - `index.js`: Akamai solver URL `localhost:40510` → `100.126.1.5:40510` (server via Tailscale), timeout 120s → 5s - `index.js`: linha 1655 `performLogin(page, true)` → `performLogin(page, false)` (sem CapSolver) - `index.js`: tmpDir aleatório `/tmp/latam-pass-profile-` → persistente `/home/customer/latampass-profile` - `index.js`: `--incognito` removido (incognito não persiste profile) - `index.js`: `cleanupBrowserProfile()` desativado - `index.js`: `--disable-gpu` → `--use-gl=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist --enable-webgl` (igual smiles-solver — WebGL fingerprint pra reCAPTCHA v3) - `index.js`: função `preWarmSession()` adicionada — visita google.com search "passagens latam pass", google.com.br homepage, latam.com homepage com scroll/mouse antes do Auth0. Chamada no Passo 1 do `performLogin`. Flag `_preWarmed` faz rodar 1× por sessão. 4. **systemd unit `/etc/systemd/system/latampass-solver.service`**: - User `customer`, WorkingDir `/opt/latampass-vm`, Env `DISPLAY=:99` - Logs `/var/log/latampass-solver.log` - `Restart=on-failure`, `RestartSec=5` ## Resultado: TODAS tentativas falharam com mesmo erro Mesmo após: - IP residencial V.tal BH (186.247.226.26 — confirmado mesmo em adv-22 e adv-23, NAT compartilhado Hyper-V) - Sem proxy-seller - Sem CapSolver - Profile persistente - Pre-warm Google + LATAM - WebGL via SwiftShader - puppeteer-extra + stealth → Auth0 retorna **"Não foi possível fazer o login. Você pode tentar mais tarde"** em 4s pós-CPF submit. Screenshot em `/tmp/latam-pass-blocked.png` (1920×1080) — página de erro genérica LATAM, sem captcha visível, sem 2FA. ## Diagnóstico final **Não é IP**, **não é conta, **não é cooldown geral.** **É detecção de automação no Auth0/reCAPTCHA enterprise.** Confirmação do Jesiel: na **mesma VM** ele consegue logar **manual via VNC/desktop** sem problema. Mesmo IP, mesmo Chrome instalado, mesma rede. Só nossa stack `puppeteer-extra.launch()` é detectada. ## Próximo passo (próxima sessão) **Rewrite no padrão CDP-spawn (igual smiles/gol/aa/delta-solver):** - Spawnar `/usr/bin/google-chrome` como subprocesso filho com `--remote-debugging-port=N` - Conectar via `playwright-core` `chromium.connectOverCDP(http://127.0.0.1:N)` - TLS/JA3 fingerprint idêntico ao Chrome stock (puppeteer-extra modifica handshake) - Profile persistente (já temos: `/home/customer/latampass-profile`) - Manter pre-warm + WebGL flags - Manter persistência de cookies/sessão (login 1×, reusa) - IMAP de `mail.skymilhas.com:993` está **bloqueado da VM** (firewall do mail server) — precisa arrumar antes de 2FA chamar (talvez IP whitelist ou usar SOCKS via skymilhas-server pra IMAP) Ports livres: 9096 já alocado pra latampass-solver (manter). ## Arquivos importantes - adv-22: `/opt/latampass-vm/scrapers/latam-pass-miles/index.js` (com todos os patches aplicados, backups `.bak-pre-*`) - adv-22: `/opt/latampass-vm/scrapers/latam-pass-miles/service.js` (PORT=9096) - adv-22: `/etc/systemd/system/latampass-solver.service` - adv-22: `/var/log/latampass-solver.log` - adv-22: `/home/customer/latampass-profile/` (Chrome user data) - adv-22: `/tmp/latam-pass-blocked.png` (screenshot do erro Auth0) - Local Jesiel: `C:\Users\Jesiel\Desktop\latam-screenshot.png` (cópia) ## Production scrapers — NÃO foram tocados `scraper-latam-miles`, `scraper-latam-pass-brl`, `scraper-latam-money` continuam online no servidor 173.208.187.154 do mesmo jeito que estavam (rate-limited mas rodando). Apenas o solver na VM foi adicionado em paralelo. Pra ativar em produção depois (quando solver funcionar), env flag `LATAM_PASS_USE_VM_SOLVER=1` + `pm2 restart scraper-latam-miles --update-env` (ainda não criado o shim no scraper do servidor). **Why:** Jesiel quer LATAM Pass funcionando sem CapSolver e sem proxy-seller, usando só infra própria (VMs adv-22/-23 com IP residencial). Conta funciona manual, scraper detectado por Auth0 mesmo com stealth. **How to apply:** Próxima sessão, criar `/opt/latampass-solver/latampass-solver.mjs` (novo, padrão smiles-solver), portar login + search com playwright-core CDP, mover lógica de parsing pro server scraper. Esquecer puppeteer-extra pra LATAM Pass.