ba0688a412
route-explorer's /api/token sits behind invisible Cloudflare Turnstile
that requires Apple's Private Access Token attestation. Third-party
iOS apps don't qualify for PAT issuance, and Linux Docker containers
can't pass it either (cross-OS fingerprint, even with patchright /
Camoufox). Migrates direct-flight search to FlightAware; multi-stop
and where-can-I-go remain via embedded SFSafariViewController.
- FlightAwareScheduleClient — scrapes route.rvt + trackpoll JSON for
real schedules without auth. T+0..2 day window. Tests against
captured HTML fixtures.
- BlobRouteClient — pulls the public Vercel blob route catalog
route-explorer's frontend reads (no auth, no Turnstile).
- DiagnosticLogger + LoggingURLSessionDelegate + DiagnosticsView —
device-shareable forensic trace. Boot header captures device, OS,
locale, UA; share-sheet export of session logs.
- TurnstileDebugView — live WKWebView gate inspector. Used to prove
the PAT-entitlement gap on a real device.
- RouteExplorerBrowserView — SFSafariViewController wrapper. Real
Safari clears Turnstile naturally; the in-app browser opens at
pre-filled search URLs. Surfaced from Search ("Open in
route-explorer") and Settings → Tools.
- RouteExplorerTokenStore + RouteExplorerSetupView — bookmarklet
capture flow (token round-tripped via flights://routeexplorer-token
URL scheme). Kept dormant for future use.
backend/ — Docker proxy attempts (Playwright, patchright, Camoufox).
All fail on Linux because Cloudflare auto-denies before the Turnstile
widget renders. Documented; kept as scaffolding for a future paid-
solver integration.
scripts/probe_flightaware.py — reference algorithm for the FA path.
scripts/probe_nodriver.py — local-Mac sanity check confirming the
gate clears with real macOS Chrome (proves the blocker is
fingerprint-level, not network-level).
53 lines
771 B
Plaintext
53 lines
771 B
Plaintext
# Xcode
|
|
build/
|
|
DerivedData/
|
|
*.xcuserdata
|
|
*.xcworkspace/xcuserdata/
|
|
xcuserdata/
|
|
*.xccheckout
|
|
*.moved-aside
|
|
*.pbxuser
|
|
!default.pbxuser
|
|
*.mode1v3
|
|
!default.mode1v3
|
|
*.mode2v3
|
|
!default.mode2v3
|
|
*.perspectivev3
|
|
!default.perspectivev3
|
|
|
|
# Xcode Scheme — keep shared schemes (so `xcodebuild test` works for everyone)
|
|
*.xcscheme
|
|
!*.xcodeproj/xcshareddata/xcschemes/*.xcscheme
|
|
|
|
# Swift Package Manager
|
|
.build/
|
|
Packages/
|
|
Package.pins
|
|
Package.resolved
|
|
*.workspace/xcshareddata/swiftpm/
|
|
|
|
# CocoaPods
|
|
Pods/
|
|
|
|
# macOS
|
|
.DS_Store
|
|
.AppleDouble
|
|
.LSOverride
|
|
._*
|
|
|
|
# HAR files (large network captures)
|
|
*.har
|
|
|
|
# APK files
|
|
apps/
|
|
airlines/
|
|
|
|
# Claude
|
|
.claude/
|
|
|
|
# Playwright MCP scratch captures
|
|
.playwright-mcp/
|
|
|
|
# BTS bulk-download cache (regenerated by scripts/generate_bts_bundle.py)
|
|
.bts_cache/
|