import { z } from 'zod';
const envSchema = z.object({
// Server
PORT: z.coerce.number().default(3000),
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
LOG_LEVEL: z.enum(['trace', 'debug', 'info', 'warn', 'error', 'fatal']).default('info'),
// Database
DATABASE_PATH: z.string().default('./data/glasscloud.db'),
// Security
JWT_SECRET: z.string().min(32),
ENCRYPTION_KEY: z.string().min(32),
CORS_ORIGINS: z.string().default('http://localhost:3000'),
// Google OAuth
GOOGLE_CLIENT_ID: z.string(),
GOOGLE_CLIENT_SECRET: z.string(),
GOOGLE_CALLBACK_URL: z.string().url(),
// Rate Limiting
RATE_LIMIT_WINDOW_MS: z.coerce.number().default(60000),
RATE_LIMIT_MAX_REQUESTS: z.coerce.number().default(60),
// WebSocket
WS_PING_INTERVAL_MS: z.coerce.number().default(30000),
WS_PONG_TIMEOUT_MS: z.coerce.number().default(10000),
});
export type Env = z.infer<typeof envSchema>;
function loadEnv(): Env {
const result = envSchema.safeParse(process.env);
if (!result.success) {
console.error('Invalid environment variables:');
console.error(result.error.format());
process.exit(1);
}
return result.data;
}
export const env = loadEnv();