feat(frontend): use runtime env vars for config endpoint

Changed /api/config to read API_URL (without NEXT_PUBLIC_ prefix)
which allows runtime configuration without rebuilding the image.

Priority order:
1. API_URL (runtime env var)
2. NEXT_PUBLIC_API_URL (build-time fallback)
3. Default localhost values
This commit is contained in:
Tiago Yamamoto 2025-12-31 09:39:02 -03:00
parent 0da936550b
commit 4577310c75

View file

@ -3,17 +3,35 @@ import { NextResponse } from 'next/server';
/**
* Runtime Configuration API
*
* This endpoint returns environment variables that can be read at runtime,
* allowing the application to use different configurations without rebuilding.
* This endpoint returns environment variables that are read at RUNTIME,
* not build time. This allows changing configuration without rebuilding.
*
* Usage: Fetch /api/config on app initialization and use the returned values.
* IMPORTANT: Use env vars WITHOUT the NEXT_PUBLIC_ prefix here!
* - NEXT_PUBLIC_* = baked in at build time (bad for runtime config)
* - Regular env vars = read at runtime (good!)
*
* In your .env or container config, set:
* API_URL=https://api.example.com
* BACKOFFICE_URL=https://backoffice.example.com
* (etc.)
*
* The NEXT_PUBLIC_* versions are only used as fallbacks for local dev.
*/
export async function GET() {
// Priority: Runtime env vars > Build-time NEXT_PUBLIC_* > Defaults
const config = {
apiUrl: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8521',
backofficeUrl: process.env.NEXT_PUBLIC_BACKOFFICE_URL || 'http://localhost:3001',
seederApiUrl: process.env.NEXT_PUBLIC_SEEDER_API_URL || 'http://localhost:3002',
scraperApiUrl: process.env.NEXT_PUBLIC_SCRAPER_API_URL || 'http://localhost:3003',
apiUrl: process.env.API_URL
|| process.env.NEXT_PUBLIC_API_URL
|| 'http://localhost:8521',
backofficeUrl: process.env.BACKOFFICE_URL
|| process.env.NEXT_PUBLIC_BACKOFFICE_URL
|| 'http://localhost:3001',
seederApiUrl: process.env.SEEDER_API_URL
|| process.env.NEXT_PUBLIC_SEEDER_API_URL
|| 'http://localhost:3002',
scraperApiUrl: process.env.SCRAPER_API_URL
|| process.env.NEXT_PUBLIC_SCRAPER_API_URL
|| 'http://localhost:3003',
};
return NextResponse.json(config, {
@ -23,3 +41,4 @@ export async function GET() {
},
});
}