Due colpevoli scoperti durante il deploy live: - `NEXT_PUBLIC_APP_URL` mancava nel runbook ed in .env.example. Il client di Better Auth (lib/auth-client.ts) la usa come baseURL — senza, fallback a localhost:3000 → CORS error sul click di "Continua con Google". Va inlined al build (è NEXT_PUBLIC_*), quindi modificarla richiede rebuild. - Setup Google OAuth: il bottone è SSG (prerendered al build), quindi aggiungere le env GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET non basta — serve rebuild perché `enabledSocialProviders` è valutato a build-time. Aggiunta una sezione 4.3.bis dedicata al setup Google con i punti critici evidenziati. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 lines
2.1 KiB
Bash
52 lines
2.1 KiB
Bash
NODE_ENV=development
|
|
PORT=4000
|
|
HOST=127.0.0.1
|
|
LOG_LEVEL=info
|
|
|
|
# CORS — origini consentite (separate da virgola)
|
|
CORS_ORIGINS=http://localhost:3000
|
|
|
|
DATABASE_URL=postgresql://luciano:luciano%40@localhost:5432/ketopath?schema=public
|
|
|
|
# Cifratura at-rest dei campi sanitari (vedi ADR 0002).
|
|
# Genera con: node -e "console.log('k1.aesgcm256.'+require('crypto').generateKeySync('aes',{length:256}).export().toString('base64url'))"
|
|
# DEVE coincidere con apps/web/.env e con tutti i deploy che leggono il DB.
|
|
PRISMA_FIELD_ENCRYPTION_KEY=
|
|
|
|
# Better Auth — DEVE coincidere con apps/web/.env (sessione condivisa)
|
|
BETTER_AUTH_SECRET=
|
|
BETTER_AUTH_URL=http://localhost:3000
|
|
|
|
# Google OAuth — abilita il bottone "Continua con Google" in /sign-in /sign-up.
|
|
# Setup: console.cloud.google.com → APIs & Services → Credentials →
|
|
# OAuth client ID (Web app) → Authorized redirect URI:
|
|
# https://<DOMAIN>/api/auth/callback/google
|
|
# Devono essere configurate ANCHE in apps/web/.env (Better Auth le legge da
|
|
# entrambi i lati per costruire enabledSocialProviders al boot).
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
# Sentry — error tracking (lascia vuoto per disabilitare)
|
|
# SENTRY_DSN=
|
|
|
|
# Web Push — VAPID (vedi ADR 0003).
|
|
# Genera con: cd apps/api && node -e "console.log(require('web-push').generateVAPIDKeys())"
|
|
# La PUBLIC_KEY va anche in apps/web/.env come NEXT_PUBLIC_VAPID_PUBLIC_KEY.
|
|
# Lascia vuoto per disabilitare le push (il cron e gli endpoint rispondono 503).
|
|
VAPID_PUBLIC_KEY=
|
|
VAPID_PRIVATE_KEY=
|
|
VAPID_SUBJECT=mailto:hello@ketopath.app
|
|
|
|
# Stripe — abbonamenti (vedi ADR 0004). Tutti opzionali: senza queste env il
|
|
# webhook e gli endpoint /me/billing/* rispondono 503; le route gated (genera
|
|
# piano, pesata, fast, export PDF) continuano a funzionare per gli utenti in
|
|
# trial o non gated, ma chi è EXPIRED riceve 402 a prescindere.
|
|
# Usa le keys "test mode" per sviluppo (sk_test_..., whsec_...).
|
|
# I price ID si creano da dashboard Stripe → Products.
|
|
STRIPE_SECRET_KEY=
|
|
STRIPE_WEBHOOK_SECRET=
|
|
STRIPE_PRICE_ID_MONTHLY=
|
|
STRIPE_PRICE_ID_YEARLY=
|
|
# URL di base usato nelle redirect post-checkout (success/cancel).
|
|
BILLING_RETURN_URL=http://localhost:3000
|