Files
whattoplay/docs/GOG-SETUP.md
2026-03-01 12:03:42 +01:00

3.3 KiB

GOG Integration - Development Setup

⚠️ Wichtig: Temporäre Lösung für Development

Da wir eine Web/iOS App bauen, können wir keine CLI-Tools (wie gogdl) nutzen. Für Production brauchen wir ein Backend mit OAuth Flow.

Wie bekomme ich GOG Credentials?

Option 1: Manuell aus Browser (Development)

  1. Öffne GOG.com (eingeloggt)

    https://www.gog.com
    
  2. Öffne Browser DevTools

    • Chrome/Edge: F12 oder Cmd+Option+I (Mac)
    • Firefox: F12
  3. Gehe zu Network Tab

    • Klicke auf "Network" / "Netzwerk"
    • Aktiviere "Preserve log" / "Log beibehalten"
  4. Lade eine GOG Seite neu

    • Z.B. deine Library: https://www.gog.com/account
  5. Finde Request mit Bearer Token

    • Suche nach Requests zu gog.com oder galaxy-library.gog.com
    • Klicke auf einen Request
    • Gehe zu "Headers" Tab
    • Kopiere den Authorization: Bearer ... Token
  6. Kopiere User ID

    • Suche nach Request zu embed.gog.com/userData.json
    • Im Response findest du "galaxyUserId": "123456789..."
    • Kopiere diese ID
  7. Trage in config.local.json ein

    {
      "steam": { ... },
      "epic": {},
      "gog": {
        "userId": "DEINE_GALAXY_USER_ID",
        "accessToken": "DEIN_BEARER_TOKEN"
      }
    }
    

Option 2: Backend OAuth Flow (Production - TODO)

Für Production implementieren wir einen OAuth Flow:

// Backend Endpoint (z.B. Vercel Function)
export async function POST(request) {
	// 1. User zu GOG Auth redirecten
	const authUrl = `https://auth.gog.com/auth?client_id=...&redirect_uri=...`;

	// 2. Callback mit Code
	// 3. Code gegen Access Token tauschen
	const token = await fetch("https://auth.gog.com/token", {
		method: "POST",
		body: { code, client_secret: process.env.GOG_SECRET },
	});

	// 4. Token sicher speichern (z.B. encrypted in DB)
	return { success: true };
}

API Endpoints

GOG Galaxy Library

GET https://galaxy-library.gog.com/users/{userId}/releases
Headers:
  Authorization: Bearer {accessToken}
  User-Agent: WhatToPlay/1.0

Response:
{
  "items": [
    {
      "external_id": "1207658930",
      "platform_id": "gog",
      "date_created": 1234567890,
      ...
    }
  ],
  "total_count": 123,
  "next_page_token": "..."
}

GOG User Data

GET https://embed.gog.com/userData.json
Headers:
  Authorization: Bearer {accessToken}

Response:
{
  "userId": "...",
  "galaxyUserId": "...",
  "username": "...",
  ...
}

Token Lebensdauer

  • GOG Tokens laufen nach ca. 1 Stunde ab
  • Für Development: Token regelmäßig neu kopieren
  • Für Production: Refresh Token Flow implementieren

Nächste Schritte

  1. Development: Manueller Token aus Browser
  2. 📝 Backend: Vercel Function für OAuth
  3. 🔐 Backend: Token Refresh implementieren
  4. 📱 iOS: Secure Storage für Tokens (Keychain)

Troubleshooting

401 Unauthorized

  • Token abgelaufen → Neu aus Browser kopieren
  • Falscher Token → Prüfe Authorization: Bearer ...

CORS Error

  • Normal im Browser (darum brauchen wir Backend)
  • Development: Scripts laufen in Node.js (kein CORS)
  • Production: Backend macht die Requests

Leere Library

  • Prüfe userId - muss galaxyUserId sein, nicht userId
  • Prüfe API Endpoint - /users/{userId}/releases, nicht /games