vk98's picture
Initial backend deployment - Hono proxy + ColPali embedding API
5dfbe50
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';