diff --git a/app/debug-env/page.tsx b/app/debug-env/page.tsx new file mode 100644 index 0000000..e8d0c47 --- /dev/null +++ b/app/debug-env/page.tsx @@ -0,0 +1,112 @@ +// TIJDELIJKE debug-pagina om te checken of env-vars op deze deployment +// daadwerkelijk een (juiste) waarde hebben. Geen secrets gelekt — alleen +// metadata: lengte, hostname en pooled-flag voor DB-URLs. +// +// VERWIJDEREN zodra env-config op Vercel bevestigd is. + +import { headers } from 'next/headers' + +export const dynamic = 'force-dynamic' +export const runtime = 'nodejs' + +interface VarStatus { + name: string + set: boolean + length: number + host?: string + pooled?: boolean + parseError?: string +} + +function inspectUrl(name: string, raw: string | undefined): VarStatus { + if (!raw) return { name, set: false, length: 0 } + try { + const url = new URL(raw) + return { + name, + set: true, + length: raw.length, + host: url.hostname, + pooled: url.hostname.includes('pooler.'), + } + } catch (e) { + return { + name, + set: true, + length: raw.length, + parseError: e instanceof Error ? e.message : String(e), + } + } +} + +function inspectSecret(name: string, raw: string | undefined): VarStatus { + if (!raw) return { name, set: false, length: 0 } + return { name, set: true, length: raw.length } +} + +export default async function DebugEnvPage() { + // Force dynamic so each visit reads runtime env (niet build-time gecached) + await headers() + + const vars: VarStatus[] = [ + inspectUrl('DATABASE_URL', process.env.DATABASE_URL), + inspectUrl('DIRECT_URL', process.env.DIRECT_URL), + inspectSecret('SESSION_SECRET', process.env.SESSION_SECRET), + ] + + const node = process.env.NODE_ENV ?? '(unset)' + const vercel = process.env.VERCEL_ENV ?? '(unset)' + const url = process.env.VERCEL_URL ?? '(unset)' + const region = process.env.VERCEL_REGION ?? '(unset)' + + return ( +
+ Server-side gerenderd. Toont alleen metadata, geen waardes. Verwijderen na env-config check. +
+ +| NODE_ENV | {node} |
| VERCEL_ENV | {vercel} |
| VERCEL_URL | {url} |
| VERCEL_REGION | {region} |
| name | +set | +length | +host | +pooled | +parse_error | +
|---|---|---|---|---|---|
| {v.name} | ++ {v.set ? 'yes' : 'NO'} + | +{v.length} | +{v.host ?? '—'} | ++ {v.pooled === undefined ? '—' : v.pooled ? 'yes (LISTEN may not work)' : 'no'} + | ++ {v.parseError ?? '—'} + | +