import { z } from "zod"; const NodeEnvSchema = z.enum(["development", "test", "production"]); const DbSyncModeSchema = z.enum(["none", "alter", "force"]); const DbDialectSchema = z.enum(["postgres", "mysql", "mariadb", "mssql", "sqlite"]); export const CompanyCertificateSchema = z.object({ certificateId: z.string().min(1), certificateSecretName: z.string().min(1), certificatePasswordSecretName: z.string().min(1), }); export const CompanyCertificatesSchema = z.record( z.string().regex(/^[a-z0-9-]+$/), CompanyCertificateSchema ); export const EnvSchema = z.object({ NODE_ENV: NodeEnvSchema.default("development"), PORT: z.coerce.number().int().positive().default(3002), API_BASE_PATH: z.string(), FRONTEND_URL: z.url(), TIMEZONE: z.string().default("Europe/Madrid"), TRUST_PROXY: z.coerce.number().int().default(0), DB_DIALECT: DbDialectSchema.default("mysql"), DB_HOST: z.string().min(1), DB_PORT: z.coerce.number().int().positive().default(3306), DB_NAME: z.string().min(1), DB_USER: z.string().min(1), DB_PASS: z.string().min(1), DB_LOGGING: z.coerce.boolean().default(false), DB_SSL: z.coerce.boolean().default(false), DB_SYNC_MODE: DbSyncModeSchema.default("none"), WARMUP_TIMEOUT_MS: z.coerce.number().int().positive(), WARMUP_STRICT: z.coerce.boolean().default(false), JWT_SECRET: z.string().min(32), JWT_ACCESS_EXPIRATION: z.string(), JWT_REFRESH_EXPIRATION: z.string(), TEMPLATES_PATH: z.string(), DOCUMENTS_PATH: z.string(), SIGNED_DOCUMENTS_PATH: z.string(), FASTREPORT_BIN: z.string(), SIGNING_SERVICE_URL: z.url(), SIGNING_SERVICE_METHOD: z.enum(["GET", "POST", "PUT"]), SIGNING_SERVICE_TIMEOUT_MS: z.coerce.number().int().positive(), SIGNING_SERVICE_MAX_RETRIES: z.coerce.number().int().nonnegative(), COMPANY_CERTIFICATES_PATH: z.string().min(1), });