132 lines
3.1 KiB
Markdown
132 lines
3.1 KiB
Markdown
# WhatToPlay - Architektur Entscheidung
|
|
|
|
## Problem: Gaming Platform APIs für iOS/Web
|
|
|
|
### Services Status:
|
|
|
|
- ✅ **Steam**: Öffentliche Web API (`GetOwnedGames`) - funktioniert im Browser/iOS
|
|
- ⚠️ **GOG**: Galaxy Library API - benötigt OAuth (Server-Side Token Exchange)
|
|
- ❌ **Epic Games**: Keine öffentliche API - nur über Legendary CLI (Python)
|
|
- ❌ **Amazon Games**: Keine öffentliche API - nur über Nile CLI (Python)
|
|
|
|
### Warum CLI-Tools nicht funktionieren:
|
|
|
|
```
|
|
❌ Python/Node CLI Tools (Legendary, Nile, gogdl)
|
|
└─> Benötigen native Runtime
|
|
└─> Funktioniert NICHT auf iOS
|
|
└─> Funktioniert NICHT im Browser
|
|
└─> Funktioniert NICHT als reine Web-App
|
|
```
|
|
|
|
## Lösung: Hybrid-Architektur
|
|
|
|
### Phase 1: MVP (Jetzt)
|
|
|
|
```
|
|
Frontend (React/Ionic)
|
|
↓
|
|
Steam Web API (direkt)
|
|
- GetOwnedGames Endpoint
|
|
- Keine Auth nötig (nur API Key)
|
|
- Funktioniert im Browser
|
|
```
|
|
|
|
### Phase 2: GOG Integration (wenn Backend da ist)
|
|
|
|
```
|
|
Frontend (React/Ionic)
|
|
↓
|
|
Backend (Vercel Function / Cloudflare Worker)
|
|
↓
|
|
GOG Galaxy API
|
|
- OAuth Token Exchange (Server-Side)
|
|
- Library API mit Bearer Token
|
|
- CORS-Safe
|
|
```
|
|
|
|
### Phase 3: Epic/Amazon (Zukunft)
|
|
|
|
**Option A: Backend Proxy**
|
|
|
|
```
|
|
Frontend → Backend → Epic GraphQL (Reverse-Engineered)
|
|
→ Amazon Nile API
|
|
```
|
|
|
|
**Option B: Manuelle Import-Funktion**
|
|
|
|
```
|
|
User exportiert Library aus Epic/Amazon
|
|
↓
|
|
User uploaded JSON in App
|
|
↓
|
|
App parsed und zeigt an
|
|
```
|
|
|
|
## Aktuelle Implementation
|
|
|
|
### Steam (✅ Funktioniert jetzt)
|
|
|
|
```javascript
|
|
// fetch-steam.mjs
|
|
const response = await fetch(
|
|
`http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/`,
|
|
{ params: { key, steamid, format: "json" } },
|
|
);
|
|
```
|
|
|
|
### GOG (⚠️ Vorbereitet, braucht Backend)
|
|
|
|
```javascript
|
|
// Jetzt: Manueller Token aus Browser DevTools
|
|
// Später: OAuth Flow über Backend
|
|
const response = await fetch(
|
|
`https://galaxy-library.gog.com/users/${userId}/releases`,
|
|
{ headers: { Authorization: `Bearer ${token}` } },
|
|
);
|
|
```
|
|
|
|
### Epic/Amazon (❌ Placeholder)
|
|
|
|
```javascript
|
|
// Aktuell: Leere JSON-Dateien als Platzhalter
|
|
// Später: Backend-Integration oder manuelle Import-Funktion
|
|
```
|
|
|
|
## Deployment Strategie
|
|
|
|
### Development (macOS - Jetzt)
|
|
|
|
```
|
|
npm run fetch → Lokale Node.js Scripts holen Daten
|
|
npm run dev → Vite Dev Server mit Hot Reload
|
|
```
|
|
|
|
### Production (iOS/Web - Später)
|
|
|
|
```
|
|
Frontend: Vercel/Netlify (Static React App)
|
|
Backend: Vercel Functions (für GOG OAuth)
|
|
Data: Supabase/Firebase (für User Libraries)
|
|
```
|
|
|
|
## Nächste Schritte
|
|
|
|
1. ✅ **Steam**: Fertig implementiert
|
|
2. 🔄 **GOG**: Manuelle Token-Eingabe (Development)
|
|
3. 📝 **Epic/Amazon**: Placeholder JSON
|
|
4. 🚀 **Backend**: OAuth-Service für GOG (Vercel Function)
|
|
5. 📱 **iOS**: PWA mit Service Worker für Offline-Support
|
|
|
|
## Wichtige Limitierungen
|
|
|
|
- **Keine nativen CLI-Tools** in Production
|
|
- **CORS** blockiert direkte Browser → Gaming APIs
|
|
- **OAuth Secrets** können nicht im Browser gespeichert werden
|
|
- **Backend ist Pflicht** für GOG/Epic/Amazon
|
|
|
|
---
|
|
|
|
**Fazit**: Für iOS/Web müssen wir ein Backend bauen. Steam funktioniert ohne Backend, GOG/Epic/Amazon brauchen Server-Side OAuth.
|