Spaces:
Running
Running
File size: 1,541 Bytes
5dfbe50 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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'; |