[ 'token' => env('POSTMARK_TOKEN'), ], 'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'resend' => [ 'key' => env('RESEND_KEY'), ], 'slack' => [ 'notifications' => [ 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), ], ], 'openai' => [ 'api_key' => env('OPENAI_API_KEY'), 'url' => env('OPENAI_API_URL', 'https://api.openai.com/v1/chat/completions'), 'model' => env('OPENAI_MODEL', 'gpt-5.4-mini'), 'timeout' => env('OPENAI_TIMEOUT', 60), ], 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT_URI'), ], /* | Selbst gehostete Webanalyse (Umami auf sys.adametz.media) — cookielos, | IP-anonymisiert, beschrieben in der Datenschutzerklärung Abschnitt 5. | Bleibt bis zum Go-Live der Webseiten deaktiviert (UMAMI_ENABLED=true | erst mit dem Live-Schalten setzen); Website-IDs je Brand stehen in | config/domains.php (brand.umami_website_id). */ 'umami' => [ 'enabled' => env('UMAMI_ENABLED', false), 'script_url' => env('UMAMI_SCRIPT_URL', 'https://sys.adametz.media/config.js'), // Kundenbereich (Monitoring-Plan M2/M6): eigener Schalter, und die // Zuordnung zur User-ID noch einmal getrennt — beides erst nach der // Ergänzung der Datenschutzerklärung einschalten. 'portal_enabled' => env('UMAMI_PORTAL_ENABLED', false), 'identify_users' => env('UMAMI_IDENTIFY_USERS', false), // Nur lesender API-Zugang für Auswertungen (Roadmap 6.16): ein // Umami-Benutzer mit der Rolle „View only“, die Websites hängen am // Team. Selbst gehostetes Umami kennt keine API-Schlüssel, nur // Login und Token. 'api_url' => env('UMAMI_API_URL'), 'api_username' => env('UMAMI_API_USERNAME'), 'api_password' => env('UMAMI_API_PASSWORD'), 'api_team_id' => env('UMAMI_API_TEAM_ID'), 'api_timeout_seconds' => (int) env('UMAMI_API_TIMEOUT', 15), ], /* | Cloudflare Turnstile (Spamschutz, dev/sicherheit/ENTWICKLUNGSPLAN- | SPAMSCHUTZ-2026-10-09.md): Bot-Prüfung für Kontakt-Widget und | Registrierung. Ohne beide Keys ist die Prüfung aus (Tests, lokal ohne | Keys). Lokal die Cloudflare-Testkeys verwenden — die echten Keys sind an | die Live-Hostnamen gebunden. `fail_open`: Ist Cloudflare nicht | erreichbar, wird durchgelassen und markiert (Entscheidung 09.10.2026). */ 'turnstile' => [ 'site_key' => env('TURNSTILE_SITE_KEY'), 'secret_key' => env('TURNSTILE_SECRET_KEY'), 'timeout' => (int) env('TURNSTILE_TIMEOUT', 3), 'fail_open' => (bool) env('TURNSTILE_FAIL_OPEN', true), ], ];