Uecko_ERP/apps/server/src/config/env-schema.ts
2026-02-12 15:46:47 +01:00

58 lines
1.8 KiB
TypeScript

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),
});