Files
autoreg-skills-max/skills/atxp-autoreg/references/turnstile-privy-cross-origin-pitfall.md

30 lines
2.0 KiB
Markdown

# Turnstile + Privy Cross-Origin Pitfall
## Problem
ATXP Chat / accounts.atxp.ai uses Privy for authentication. Privy loads in a cross-origin iframe from `auth.privy.io`. Inside this iframe, Cloudflare Turnstile (sitekey `0x4AAAAAAAM8ceq5KhP1uJBt`) protects the email submission form.
## Why 2captcha token injection fails
1. 2captcha solves Turnstile correctly (task accepted, token returned in ~6 seconds)
2. The token must be injected into the **Privy iframe's DOM** — not the parent page
3. `browser_console` runs JavaScript in the parent page context, which cannot access cross-origin iframe content (same-origin policy)
4. Creating `<input name="cf-turnstile-response">` in the parent page has no effect — Privy ignores it
5. Calling `window.turnstile.render()` or callbacks on the parent `window` object doesn't reach Privy's sandbox
## What was tried (all failed)
- `document.querySelector('[name="cf-turnstile-response"]')` in parent — not found
- Creating hidden input with token — ignored
- Calling `window.cf_turnstile_callback(token)` — undefined
- Direct Privy API POST to `auth.privy.io/api/v1/authentication/email/send-code` — 404
- Direct ATXP auth endpoint — 405/404
## Working alternatives
1. **DuckDuckGo browser + VPN** — real browser with privacy mode bypasses all detection (user confirmed 13+ accounts registered this way)
2. **Residential proxies** — might work if browser fingerprint is clean enough
3. **Manual registration** — user opens atxp.chat in real browser, enters email, solves Turnstile manually, gets magic link
## Key takeaway
**Cross-origin iframe Turnstile (Privy pattern) is a hard blocker for headless browser automation.** No amount of JavaScript injection from the parent context can bypass it. The token must be delivered inside the iframe's JavaScript sandbox, which requires either:
- CDP-level injection into the iframe context (complex, browser-engine-specific)
- Real browser with user interaction
- Finding an API endpoint that doesn't go through Privy's front-end Turnstile