import dotenv from "dotenv"; import { asBoolean, asNumber, required } from "./config-helpers"; // Carga de variables de entorno (.env). Si ya están en el entorno, no se sobreescriben. dotenv.config(); type NodeEnv = "development" | "test" | "production"; type DbSyncMode = "none" | "alter" | "force"; type DbDialect = "postgres" | "mysql" | "mariadb" | "mssql" | "sqlite"; const NODE_ENV = (process.env.NODE_ENV as NodeEnv) ?? "development"; const isProd = NODE_ENV === "production"; const isDev = NODE_ENV === "development"; const API_PORT = asNumber(process.env.API_PORT, 3002); // En producción exigimos FRONTEND_URL definido (según requisitos actuales). const FRONTEND_URL = isProd ? required("FRONTEND_URL", process.env.FRONTEND_URL) : (process.env.FRONTEND_URL ?? "http://localhost:5173"); // Base de datos (dos modos: URL o parámetros sueltos) const DATABASE_URL = process.env.DATABASE_URL; // p.ej. postgres://user:pass@host:5432/dbname const DB_DIALECT = (process.env.DB_DIALECT as DbDialect | undefined) ?? "mysql"; const DB_HOST = process.env.DB_HOST ?? "localhost"; const DB_PORT = asNumber(process.env.DB_PORT, 3306); const DB_NAME = process.env.DB_NAME ?? ""; const DB_USER = process.env.DB_USER ?? ""; const DB_PASS = process.env.DB_PASS ?? ""; const DB_LOGGING = asBoolean(process.env.DB_LOGGING, false); // Modo de sincronización usado por model-loader.ts const DB_SYNC_MODE = (process.env.DB_SYNC_MODE as DbSyncMode | undefined) ?? (isProd ? "none" : "alter"); // Opcional: timezone para Sequelize (según necesidades) const APP_TIMEZONE = process.env.APP_TIMEZONE ?? "Europe/Madrid"; // FASTREPORT_BIN: ruta al ejecutable de FastReport CLI // Si no se define, se buscará en rutas estándar según SO. const FASTREPORT_BIN = process.env.FASTREPORT_BIN; // Ruta raíz para plantillas (templates) const TEMPLATES_PATH = process.env.TEMPLATES_PATH ?? "./templates"; // Documentos const DOCUMENTS_PATH = process.env.DOCUMENTS_PATH ?? "./documents"; // Proxy (no usáis ahora, pero dejamos la variable por si se activa en el futuro) const TRUST_PROXY = asNumber(process.env.TRUST_PROXY, 0); const SIGNING_SERVICE_URL = process.env.SIGNING_SERVICE_URL; const SIGNING_SERVICE_METHOD = process.env.SIGNING_SERVICE_METHOD ?? "POST"; const SIGNING_SERVICE_TIMEOUT_MS = asNumber(process.env.SIGNING_SERVICE_TIMEOUT_MS, 15_000); const SIGNING_SERVICE_MAX_RETRIES = asNumber(process.env.SIGNING_SERVICE_MAX_RETRIES, 2); const COMPANY_SLUG = process.env.COMPANY_SLUG ?? "acme"; const COMPANY_CERTIFICATES_JSON = process.env.COMPANY_CERTIFICATES_JSON ?? {}; export const ENV = { NODE_ENV, API_PORT, FRONTEND_URL, DATABASE_URL, DB_DIALECT, DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASS, DB_LOGGING, DB_SYNC_MODE, APP_TIMEZONE, TRUST_PROXY, TEMPLATES_PATH, DOCUMENTS_PATH, FASTREPORT_BIN, SIGNING_SERVICE_URL, SIGNING_SERVICE_METHOD, SIGNING_SERVICE_TIMEOUT_MS, SIGNING_SERVICE_MAX_RETRIES, COMPANY_SLUG, COMPANY_CERTIFICATES_JSON, } as const; export const Flags = { isProd, isDev, isTest: NODE_ENV === "test", } as const;