Spaces:
Paused
Paused
| 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'; |