Patreon Integration: OAuth, Member-API & Alert-Overlay #63

Open
opened 2026-07-15 20:02:24 +02:00 by frank · 0 comments
Owner

Kontext

Patreon ist die führende Membership-Plattform für Creator. Die Patreon API v2 bietet vollständigen Zugriff auf Patrons, Tiers, Posts und Goals via OAuth2. Im Gegensatz zu Ko-fi hat Patreon echte REST-Endpunkte für Lesezugriff — nicht nur Webhooks.

Patreon API v2 Übersicht:

Methode Endpoint Beschreibung
GET /api/oauth2/v2/identity Eigene Identität
GET /api/oauth2/v2/campaigns Kampagnen-Liste
GET /api/oauth2/v2/campaigns/{id} Kampagnen-Details
GET /api/oauth2/v2/campaigns/{id}/members Alle Patrons (mit Tier, Status, Lifetime)
GET /api/oauth2/v2/members/{id} Einzelner Patron
GET /api/oauth2/v2/campaigns/{id}/posts Posts
GET /api/oauth2/v2/posts/{id} Post-Details
POST /api/oauth2/v2/lives Live-Event erstellen
GET/PATCH /api/oauth2/v2/lives/{id} Live-Event verwalten

Webhook-Events (Patreon → System):

Webhook-Typ Auslöser
members:create Neuer Patron
members:update Patron ändert Tier oder Status
members:delete Patron kündigt
pledge:create Neues Pledge
pledge:update Pledge-Änderung
pledge:delete Pledge gelöscht
goal:create Neues Goal
goal:update Goal geändert
goal:delete Goal gelöscht
post:create Neuer Post
post:update Post geändert
post:delete Post gelöscht
tier:create Neues Tier
tier:update Tier geändert
tier:delete Tier gelöscht

Webhook-Admin:

Methode Endpoint
GET /api/oauth2/v2/webhooks
POST /api/oauth2/v2/webhooks
PATCH /api/oauth2/v2/webhooks/{id}
DELETE /api/oauth2/v2/webhooks/{id}

Member-Fields (über API):

  • full_name, email, patron_status (active_patron, declined_patron, former_patron)
  • currently_entitled_amount_cents (aktuelles Pledge)
  • lifetime_support_cents (Lebenszeit-Support)
  • pledge_relationship_start (Start-Datum)
  • will_pay_amount_cents (nächste Zahlung)
  • last_charge_date, last_charge_status
  • tier (verknüpftes Tier-Objekt)

Ziel

Patreon OAuth-Integration, Member-API & Alert-Overlay für streamertool:

1. OAuth2-Authentifizierung

  • OAuth2 Authorization Code Flow mit Patreon
  • Client-ID / Client-Secret Konfiguration im Dashboard
  • Token-Management: Access Token Refresh (Patreon Tokens laufen nach 1 Jahr)
  • Scope: identity, identity[email], campaigns, members, posts, webhook

2. Member-Sync (Patron-Liste)

  • Regelmäßiger Abruf von GET /campaigns/{id}/members (alle Patrons)
  • Sync-Intervall konfigurierbar (stündlich/täglich/manuell)
  • Erkennung: active_patron, declined_patron, former_patron
  • Lifetime Support Summe pro Patron speichern
  • Lokale Datenbank aller Patrons mit Status, Tier, Start-Datum

3. Patron Alert Overlay (OBS Browser Source)

  • New Patron Alert — Einblendung bei members:create Webhook
  • Pledge Alert — Einblendung bei neuer/Pledge-Änderung
  • Tier Upgrade/Downgrade Alert — Wenn Patron Tier wechselt
  • Re-Patron Alert — Wenn ehemaliger Patron zurückkommt
  • Anzeige: Name, Tier-Name, Betrag, Nachricht (falls vorhanden)
  • Animierte Ein-/Ausblendung
  • Sound-Effekte pro Event-Typ
  • TTS-Unterstützung

4. Webhook-Setup (automatisch)

  • Automatische Webhook-Registrierung via POST /api/oauth2/v2/webhooks
  • Subscription auf: members:create, members:update, pledge:create, pledge:update
  • Webhook-Verifizierung via Patreon Secret
  • Webhook-Health-Check (Patreon pingt alle 24h)
  • Automatischer Cleanup beim Deaktivieren der Integration

5. Dashboard-Konfiguration

  • OAuth-Einrichtungs-Assistent (Schritt-für-Schritt)
  • Verbindungsstatus: "Connected as @username"
  • Manueller Member-Sync Button
  • Webhook-Status-Anzeige (aktiv, Fehler, letzter Ping)
  • Aktivitäts-Log der letzten Events
  • Enable/Disable für einzelne Event-Typen

Technische Leitplanken

  • Tauri 2 Backend: Rust OAuth2-Client (z.B. oauth2 crate) + HTTP-Server
  • Patreon API v2: Nur API v2 verwenden (v1 ist deprecated)
  • Token Storage: Verschlüsselte Speicherung via OS Keychain (macOS Keychain), Fallback: encrypted file
  • Webhook-Secret: Configurierbar, zur Verifizierung von Patreon-Webhooks
  • Rate Limiting: Patreon API hat Rate Limits — Puffer für Sync einplanen
  • Member Sync: Polling (da Webhooks nicht 100% zuverlässig sind) + Webhook-Update
  • Konfiguration: In settings.json unter integrations.patreon
  • Abhängigkeiten: OAuth2-Crate, HTTP-Client, Keychain-API

Akzeptanz

  • OAuth2-Flow ist vollständig implementiert (Login → Token → API-Calls)
  • Member-Sync lädt alle Patrons mit Tier, Status, Lifetime-Support
  • Patron Alert Overlay zeigt Neuzugänge, Pledge-Änderungen, Tiers
  • Webhooks werden automatisch registriert und verifiziert
  • Dashboard zeigt Verbindungsstatus und Sync-Informationen
  • Tokens werden sicher gespeichert und bei Bedarf refreshed
  • Alle Webhook-Events werden korrekt verarbeitet

Verwandte Issues

  • #30 Donation/Tip-System
  • #61/#62 Ko-fi Integration
  • #64 Patreon Supporter Wall & Goals
## Kontext **Patreon** ist die führende Membership-Plattform für Creator. Die **Patreon API v2** bietet vollständigen Zugriff auf Patrons, Tiers, Posts und Goals via OAuth2. Im Gegensatz zu Ko-fi hat Patreon echte REST-Endpunkte für Lesezugriff — nicht nur Webhooks. **Patreon API v2 Übersicht:** | Methode | Endpoint | Beschreibung | |---------|----------|-------------| | GET | `/api/oauth2/v2/identity` | Eigene Identität | | GET | `/api/oauth2/v2/campaigns` | Kampagnen-Liste | | GET | `/api/oauth2/v2/campaigns/{id}` | Kampagnen-Details | | GET | `/api/oauth2/v2/campaigns/{id}/members` | Alle Patrons (mit Tier, Status, Lifetime) | | GET | `/api/oauth2/v2/members/{id}` | Einzelner Patron | | GET | `/api/oauth2/v2/campaigns/{id}/posts` | Posts | | GET | `/api/oauth2/v2/posts/{id}` | Post-Details | | POST | `/api/oauth2/v2/lives` | Live-Event erstellen | | GET/PATCH | `/api/oauth2/v2/lives/{id}` | Live-Event verwalten | **Webhook-Events (Patreon → System):** | Webhook-Typ | Auslöser | |-------------|----------| | `members:create` | Neuer Patron | | `members:update` | Patron ändert Tier oder Status | | `members:delete` | Patron kündigt | | `pledge:create` | Neues Pledge | | `pledge:update` | Pledge-Änderung | | `pledge:delete` | Pledge gelöscht | | `goal:create` | Neues Goal | | `goal:update` | Goal geändert | | `goal:delete` | Goal gelöscht | | `post:create` | Neuer Post | | `post:update` | Post geändert | | `post:delete` | Post gelöscht | | `tier:create` | Neues Tier | | `tier:update` | Tier geändert | | `tier:delete` | Tier gelöscht | **Webhook-Admin:** | Methode | Endpoint | |---------|----------| | GET | `/api/oauth2/v2/webhooks` | Alle Webhooks | | POST | `/api/oauth2/v2/webhooks` | Webhook abonnieren | | PATCH | `/api/oauth2/v2/webhooks/{id}` | Webhook ändern | | DELETE | `/api/oauth2/v2/webhooks/{id}` | Webhook löschen | **Member-Fields (über API):** - `full_name`, `email`, `patron_status` (active_patron, declined_patron, former_patron) - `currently_entitled_amount_cents` (aktuelles Pledge) - `lifetime_support_cents` (Lebenszeit-Support) - `pledge_relationship_start` (Start-Datum) - `will_pay_amount_cents` (nächste Zahlung) - `last_charge_date`, `last_charge_status` - `tier` (verknüpftes Tier-Objekt) ## Ziel **Patreon OAuth-Integration, Member-API & Alert-Overlay** für streamertool: ### 1. OAuth2-Authentifizierung - [ ] OAuth2 Authorization Code Flow mit Patreon - [ ] Client-ID / Client-Secret Konfiguration im Dashboard - [ ] Token-Management: Access Token Refresh (Patreon Tokens laufen nach 1 Jahr) - [ ] Scope: `identity`, `identity[email]`, `campaigns`, `members`, `posts`, `webhook` ### 2. Member-Sync (Patron-Liste) - [ ] Regelmäßiger Abruf von `GET /campaigns/{id}/members` (alle Patrons) - [ ] Sync-Intervall konfigurierbar (stündlich/täglich/manuell) - [ ] Erkennung: active_patron, declined_patron, former_patron - [ ] Lifetime Support Summe pro Patron speichern - [ ] Lokale Datenbank aller Patrons mit Status, Tier, Start-Datum ### 3. Patron Alert Overlay (OBS Browser Source) - [ ] **New Patron Alert** — Einblendung bei `members:create` Webhook - [ ] **Pledge Alert** — Einblendung bei neuer/Pledge-Änderung - [ ] **Tier Upgrade/Downgrade Alert** — Wenn Patron Tier wechselt - [ ] **Re-Patron Alert** — Wenn ehemaliger Patron zurückkommt - [ ] Anzeige: Name, Tier-Name, Betrag, Nachricht (falls vorhanden) - [ ] Animierte Ein-/Ausblendung - [ ] Sound-Effekte pro Event-Typ - [ ] TTS-Unterstützung ### 4. Webhook-Setup (automatisch) - [ ] Automatische Webhook-Registrierung via `POST /api/oauth2/v2/webhooks` - [ ] Subscription auf: `members:create`, `members:update`, `pledge:create`, `pledge:update` - [ ] Webhook-Verifizierung via Patreon Secret - [ ] Webhook-Health-Check (Patreon pingt alle 24h) - [ ] Automatischer Cleanup beim Deaktivieren der Integration ### 5. Dashboard-Konfiguration - [ ] OAuth-Einrichtungs-Assistent (Schritt-für-Schritt) - [ ] Verbindungsstatus: "Connected as @username" - [ ] Manueller Member-Sync Button - [ ] Webhook-Status-Anzeige (aktiv, Fehler, letzter Ping) - [ ] Aktivitäts-Log der letzten Events - [ ] Enable/Disable für einzelne Event-Typen ## Technische Leitplanken - **Tauri 2 Backend**: Rust OAuth2-Client (z.B. `oauth2` crate) + HTTP-Server - **Patreon API v2**: Nur API v2 verwenden (v1 ist deprecated) - **Token Storage**: Verschlüsselte Speicherung via OS Keychain (macOS Keychain), Fallback: encrypted file - **Webhook-Secret**: Configurierbar, zur Verifizierung von Patreon-Webhooks - **Rate Limiting**: Patreon API hat Rate Limits — Puffer für Sync einplanen - **Member Sync**: Polling (da Webhooks nicht 100% zuverlässig sind) + Webhook-Update - **Konfiguration**: In `settings.json` unter `integrations.patreon` - **Abhängigkeiten**: OAuth2-Crate, HTTP-Client, Keychain-API ## Akzeptanz - [ ] OAuth2-Flow ist vollständig implementiert (Login → Token → API-Calls) - [ ] Member-Sync lädt alle Patrons mit Tier, Status, Lifetime-Support - [ ] Patron Alert Overlay zeigt Neuzugänge, Pledge-Änderungen, Tiers - [ ] Webhooks werden automatisch registriert und verifiziert - [ ] Dashboard zeigt Verbindungsstatus und Sync-Informationen - [ ] Tokens werden sicher gespeichert und bei Bedarf refreshed - [ ] Alle Webhook-Events werden korrekt verarbeitet ## Verwandte Issues - #30 Donation/Tip-System - #61/#62 Ko-fi Integration - #64 Patreon Supporter Wall & Goals
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/streamertool#63
No description provided.