48 lines
1.6 KiB
TypeScript
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";
|