Files
Final_PGA/backend/src/config/env.ts
2026-03-19 18:00:46 +07:00

48 lines
1.6 KiB
TypeScript

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";