import "dotenv/config"; import { z } from "zod"; const envSchema = z.object({ NODE_ENV: z.enum(["development", "test", "production"]).default("development"), APP_PORT: z.coerce.number().default(4000), APP_HOST: z.string().default("0.0.0.0"), FRONTEND_ORIGIN: z.string().url().default("http://localhost:5173"), SESSION_COOKIE_NAME: z.string().default("pg_admin_sid"), SESSION_TTL_HOURS: z.coerce.number().positive().default(12), SESSION_SECRET: z.string().min(8), TRUST_PROXY: z .string() .transform((value) => value === "true") .default("false"), LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]).default("info"), LOG_SOURCE_PATH: z.string().default("/var/log/postgresql/postgresql.log"), FEATURE_SQL_CONSOLE: z .string() .transform((value) => value !== "false") .default("true"), FEATURE_LOG_VIEWER: z .string() .transform((value) => value !== "false") .default("true"), FEATURE_SCHEMA_MUTATIONS: z .string() .transform((value) => value !== "false") .default("true"), RATE_LIMIT_WINDOW_MS: z.coerce.number().default(60000), RATE_LIMIT_MAX: z.coerce.number().default(120), AUTH_RATE_LIMIT_MAX: z.coerce.number().default(10), CONTROL_DB_HOST: z.string(), CONTROL_DB_PORT: z.coerce.number().default(5432), CONTROL_DB_NAME: z.string(), CONTROL_DB_USER: z.string(), CONTROL_DB_PASSWORD: z.string(), TARGET_DB_HOST: z.string(), TARGET_DB_PORT: z.coerce.number().default(5432), TARGET_DB_NAME: z.string(), TARGET_DB_USER: z.string(), TARGET_DB_PASSWORD: z.string() }); export const env = envSchema.parse(process.env); export const isProduction = env.NODE_ENV === "production";