Files
beh-rde-brief/proxy
JUSNandClaude Opus 5 585f027ba5 Bezahlseite erscheint in der Sprache des Nutzers
Wer von der tuerkischen Seite kam, landete bisher auf einer deutschen
Stripe-Seite — fuer die Zielgruppe die groesste Huerde im Kaufvorgang.

/kaufen nimmt jetzt 'sprache' entgegen und gibt sie als locale an Stripe
weiter. Nur Sprachen aus STRIPE_SPRACHEN werden geschickt: Ein unbekannter
Wert laesst Stripe die Session mit 400 ablehnen, der Kauf waere kaputt. Fuer
Arabisch, Tigrinya usw. (kennt Stripe nicht) wird nichts mitgeschickt, dann
waehlt Stripe selbst anhand des Browsers.

Alle drei Kauf-Stellen geben die Sprache mit: Sprachseiten fest ihre eigene,
Demo-Seite die dort gewaehlte Zielsprache, Startseite 'de'.

Geprueft: tr/de/pl/ar liefern Bezahlseiten, und eine erfundene Sprache faellt
sauber zurueck statt den Kauf zu brechen.

Stripe Link (die vorausgewaehlte Schnellzahlung) laesst sich NICHT per API
abschalten — laut Stripe-Docs nur in den Zahlungsmethoden-Einstellungen des
Dashboards.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 15:59:46 +02:00
..

BehördenKlar Backend-Proxy

Cloudflare Worker, der den Anthropic-API-Key serverseitig hält. Die App schickt ihre Claude-Anfragen an diesen Worker statt direkt an Anthropic — kein API-Key in der App, Missbrauchsschutz inklusive.

Was der Worker macht

  1. Prüft die anonyme Geräte-ID (x-geraete-id-Header) und setzt ein Tageslimit pro Gerät durch (Standard: 20 Anfragen, siehe wrangler.toml)
  2. Erlaubt nur die Modelle, die die App nutzt, und deckelt max_tokens
  3. Leitet den Request-Body unverändert an api.anthropic.com/v1/messages weiter und setzt dabei serverseitig x-api-key + anthropic-version
  4. Gibt die Anthropic-Antwort unverändert zurück

Deployment (einmalig)

cd proxy
npm install

# Bei Cloudflare anmelden (kostenloser Account reicht für den Start)
npx wrangler login

# KV-Namespace für das Rate-Limit anlegen …
npx wrangler kv namespace create RATE_LIMIT
# … und die ausgegebene ID in wrangler.toml bei [[kv_namespaces]] eintragen

# Anthropic-API-Key als Secret hinterlegen (von console.anthropic.com)
npx wrangler secret put ANTHROPIC_API_KEY

# Deployen
npm run deploy

Der Deploy gibt eine URL aus, z. B. https://behoerdenklar-proxy.<account>.workers.dev.

App umstellen

In src/services/claudeClient.ts die URL eintragen:

const PROXY_URL: string | null = 'https://behoerdenklar-proxy.<account>.workers.dev';

Fertig — die App braucht dann keinen API-Key mehr in den Einstellungen.

Lokal testen

npm run dev   # startet den Worker auf http://localhost:8787

Dann in claudeClient.ts vorübergehend PROXY_URL = 'http://localhost:8787' setzen (im Simulator; auf echtem Gerät die LAN-IP des Rechners verwenden).

Später ergänzen (wenn Abo/IAP kommt)

  • Abo-Prüfung: RevenueCat-Webhook oder Receipt-Validierung vor dem Weiterleiten
  • Tageslimit je nach Abo-Stufe (Free: 3, Abo: 20+)
  • Die Geräte-ID durch eine echte Nutzer-ID ersetzen