Initial commit: Flights iOS app

Flight search app built on FlightConnections.com API data.
Features: airport search with autocomplete, browse by country/state/map,
flight schedules by route and date, multi-airline support with per-airline
schedule loading. Includes 4,561-airport GPS database for map browsing.
Adaptive light/dark mode UI inspired by Flighty.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-04-08 15:01:07 -05:00
commit 3790792040
46 changed files with 5116 additions and 0 deletions

154
api_docs/delta_api.md Normal file
View File

@@ -0,0 +1,154 @@
# Delta Air Lines Mobile API
Extracted from `com.delta.mobile.android` v6.7 (build 24019)
## Base URLs
| Environment | URL |
|-------------|-----|
| Production | `https://www.delta.com` |
| CDN | `https://content.delta.com` |
| Embed Web | `https://api.delta.com/embedweb` |
## Key Endpoints
### Airport Standby List (ASL)
```
POST https://www.delta.com/api/mobile/asl
```
**This is the standby/upgrade list endpoint.** Uses `AirportStandbyListRequest` with fields:
- `departureDate` — flight departure date
- Request likely includes flight number, origin, destination
- Returns `AirportUpgradeStandbyModel` with upgrade list and standby list data
### Flight Status
```
POST https://www.delta.com/api/mobile/getFlightStatus
POST https://www.delta.com/api/mobile/getFlightStatusByLeg
```
### Upgrade Eligibility
```
POST https://www.delta.com/api/mobile/getUpgradeEligibilityInfo
POST https://www.delta.com/api/mobile/purchaseEfirst
```
### Complimentary Upgrade (from DEX strings)
```
/getComplimentaryUpgrade
/processComplimentaryUpgrade
/purchaseUpgrade
```
## All Mobile API Endpoints
| Endpoint | Path |
|----------|------|
| **Standby List** | `/api/mobile/asl` |
| Flight Status | `/api/mobile/getFlightStatus` |
| Flight Status By Leg | `/api/mobile/getFlightStatusByLeg` |
| Flight Schedule | `/api/mobile/getFlightSchedule` |
| Login | `/api/mobile/login` |
| Logout | `/api/mobile/logout` |
| Check Login | `/api/mobile/checkLogin` |
| Get Profile | `/api/mobile/getprofile` |
| Manage Profile | `/api/mobile/manageProfile` |
| Get PNR | `/api/mobile/getPnr` |
| Validate PNR | `/api/mobile/validatePnr` |
| Dashboard | `/api/mobile/getDashboard` |
| Check-in | `/api/mobile/checkin` |
| Seat Map | `/api/mobile/getSeatMap` |
| Change Seat | `/api/mobile/changeSeat` |
| Upgrade Eligibility | `/api/mobile/getUpgradeEligibilityInfo` |
| Purchase E-First | `/api/mobile/purchaseEfirst` |
| Bag Info | `/api/mobile/getBagInfo` |
| Add Bags | `/api/mobile/addBags` |
| Get Bags | `/api/mobile/getBags` |
| Bag Carousel | `/api/mobile/getBagCarousel` |
| Weather | `/api/mobile/getWeather` |
| Account Activity | `/api/mobile/getAcctActivity` |
| SkyClub Info | `/api/mobile/getSkyclubInfo` |
| Purchase SkyClub | `/api/mobile/purchaseSkyclub` |
| Receipts | `/api/mobile/getReceipts` |
| Email Receipt | `/api/mobile/processEmailReceipt` |
| Merchandise | `/api/mobile/getMerchandise` |
| Promotions | `/api/mobile/getPromotions` |
| Airport Mode | `/api/mobile/getAirportMode` |
| Passenger Info | `/api/mobile/getPaxInfo` |
| Manage Passenger | `/api/mobile/managePaxInfo` |
| Travel Documents | `/api/mobile/getTravelDoc` |
| Add Travel Doc | `/api/mobile/addTravelDoc` |
| Emergency Contact | `/api/mobile/addEmergencyContact` |
| Manage Cart | `/api/mobile/manageCart` |
| Get Cart | `/api/mobile/getCart` |
| Clear Cart | `/api/mobile/clearCart` |
| Eligible FOP | `/api/mobile/getEligibleFop` |
| SSR | `/api/mobile/getSsr` |
| Available SSR | `/api/mobile/getAvailableSsr` |
| Manage SSR | `/api/mobile/manageSsr` |
| Manage FF | `/api/mobile/manageFF` |
| Validate Address | `/api/mobile/validateAddress` |
| Forgot Username | `/api/mobile/forgotUserName` |
| Country Reference | `/api/mobile/getCountryReferenceData` |
| Address Fields | `/api/mobile/getAddressFields` |
| Enroll SkyMiles | `/api/mobile/enrollSM` |
| Upsell Info | `/api/mobile/getPnrUpsellInfo` |
| Upsell Fare Rules | `/api/mobile/getUpsellFareRules` |
| Purchase Upsell | `/api/mobile/purchaseUpsell` |
| Supported Version | `/api/mobile/supportedVersion` |
| SkyMiles Info | `/api/mobile/getSMInfo` |
| SkyMiles Pass | `/api/mobile/getSMPass` |
| SC Info | `/api/mobile/getSCInfo` |
| SC Pass | `/api/mobile/getSCPass` |
| Membership Status | `/api/mobile/getMembershipStatusInfo` |
| EOD Eligibility | `/api/mobile/getEODEligibility` |
| Store Password | `/api/mobile/storePassword` |
| Store Email | `/api/mobile/storeEmail` |
| Update Password | `/api/mobile/updatePassword` |
| Security Questions | `/api/mobile/getSecurityQuestions` |
| Get SQA | `/api/mobile/getSQA` |
| Store SQA | `/api/mobile/storeSQA` |
| App Info | `/api/mobile/getinfo` |
## Request Headers (from DEX analysis)
The app uses an `AirlineRequest` pattern with these common headers:
- `Content-Type: application/json`
- Custom auth headers (session-based after `/api/mobile/login`)
## ASL Data Model (from DEX class analysis)
### AirportStandbyListRequest
- `requestInfo` — flight identification
- `departureDate` — date string
### AirportUpgradeStandbyModel
Contains:
- Upgrade list (by cabin class)
- Standby list
- `standbyPriority` / `standbyPriorityCode`
- `upgradeList` entries
- `ASLStandby` — individual standby entries
- `ASLUpgrade` — individual upgrade entries
- `UpgradeSeatRemaining` — available seats per cabin
- `PassengerChiclet` — passenger display data
### UpgradeStandbyParams
- `airportModeResponse`
- Flight leg details
- Eligibility flags
## Security Notes
- **No SSL pinning** in `network_security_config.xml` (only trusts system CAs)
- **No PairIP or anti-tamper** — app runs on emulators
- Auth is session-based via `/api/mobile/login`
- The ASL endpoint likely requires an authenticated session
- No Akamai bot detection observed on the mobile API path
## Next Steps
1. Call `/api/mobile/login` with Delta credentials to get a session
2. Call `/api/mobile/getFlightStatus` with a flight number
3. Call `/api/mobile/asl` with the flight details from the status response
4. The ASL response should contain upgrade and standby lists