Spaces:
Running
Running
import { config as dotenvConfig } from 'dotenv'; | |
import { z } from 'zod'; | |
dotenvConfig(); | |
const envSchema = z.object({ | |
PORT: z.string().default('4025'), | |
BACKEND_URL: z.string().default('http://localhost:7860'), | |
VESPA_APP_URL: z.string().optional(), | |
VESPA_CERT_PATH: z.string().optional(), | |
VESPA_KEY_PATH: z.string().optional(), | |
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'), | |
CORS_ORIGIN: z.string().default('http://localhost:3000'), | |
CACHE_TTL: z.string().default('300'), // 5 minutes | |
ENABLE_CACHE: z.string().default('true'), | |
RATE_LIMIT_WINDOW: z.string().default('60000'), // 1 minute | |
RATE_LIMIT_MAX: z.string().default('100'), | |
}); | |
const parsedEnv = envSchema.safeParse(process.env); | |
if (!parsedEnv.success) { | |
console.error('β Invalid environment variables:', parsedEnv.error.format()); | |
process.exit(1); | |
} | |
export const config = { | |
port: parseInt(parsedEnv.data.PORT), | |
backendUrl: parsedEnv.data.BACKEND_URL, | |
vespaAppUrl: parsedEnv.data.VESPA_APP_URL, | |
vespaCertPath: parsedEnv.data.VESPA_CERT_PATH, | |
vespaKeyPath: parsedEnv.data.VESPA_KEY_PATH, | |
nodeEnv: parsedEnv.data.NODE_ENV, | |
corsOrigin: parsedEnv.data.CORS_ORIGIN, | |
cacheTTL: parseInt(parsedEnv.data.CACHE_TTL), | |
enableCache: parsedEnv.data.ENABLE_CACHE === 'true', | |
rateLimit: { | |
windowMs: parseInt(parsedEnv.data.RATE_LIMIT_WINDOW), | |
max: parseInt(parsedEnv.data.RATE_LIMIT_MAX), | |
}, | |
}; | |
export const isDev = config.nodeEnv === 'development'; | |
export const isProd = config.nodeEnv === 'production'; |