import "../src/plugins/dotenv.js"; import { z } from "zod"; // Создаем схему конфигурации с проверками и преобразованиями const ZConfigShema = z.object({ PORT: z .string() .min(1, "PORT must be defined") .transform((val) => parseInt(val, 10)), LOGS_LEVEL: z.enum(["error", "warn", "info", "verbose", "debug", "silly"]), API_URL: z.string().min(1, "API_URL must be defined"), // DB DB_USER: z.string().min(1, "DB_USER must be defined"), DB_HOST: z.string().min(1, "DB_HOST must be defined"), DB_PORT: z .string() .min(1, "DB_PORT must be defined") .transform((val) => parseInt(val, 10)), DB_NAME: z.string().min(1, "DB_NAME must be defined"), DB_PASS: z.string().min(1, "DB_PASS must be defined"), // MAIL SMTP_HOST: z.string().min(1, "SMTP_HOST must be defined"), SMTP_PORT: z .string() .min(1, "SMTP_PORT must be defined") .transform((val) => parseInt(val, 10)), SMTP_USER: z.string().min(1, "SMTP_USER must be defined"), SMTP_PASS: z.string().min(1, "SMTP_PASS must be defined"), // AUTH JWT_ACCESS_SECRET: z.string().min(1, "JWT_ACCESS_SECRET must be defined"), JWT_REFRESH_SECRET: z.string().min(1, "JWT_REFRESH_SECRET must be defined"), PASSWORD_MAX_TRIES: z .string() .min(1, "PASSWORD_MAX_TRIES must be defined") .transform((val) => parseInt(val, 10)), ACCESS_TOKEN_LIFETIME_MINS: z .string() .min(1, "ACCESS_TOKEN_LIFETIME_MINS must be defined") .transform((val) => parseInt(val, 10)), REFRESH_TOKEN_LIFETIME_DAYS: z .string() .min(1, "REFRESH_TOKEN_LIFETIME_DAYS must be defined") .transform((val) => parseInt(val, 10)), // CONFIRM PINS CONFIRM_PIN_LIFETIME_MINS: z .string() .min(1, "CONFIRM_PIN_LIFETIME_MINS must be defined") .transform((val) => parseInt(val, 10)), CONFIRM_PIN_MAX_TRIES: z .string() .min(1, "CONFIRM_PIN_MAX_TRIES must be defined") .transform((val) => parseInt(val, 10)), }); // Парсим и валидируем переменные окружения export const config = ZConfigShema.parse(process.env);