# ============================================================================= # Horux 360 — API .env template # ============================================================================= # Copiá este archivo a `.env` en producción y rellená cada variable. # Las marcadas REQUIRED son obligatorias — la app no arranca sin ellas (Zod). # Las opcionales pueden quedar comentadas; sus features se desactivan en runtime. # # Validación: apps/api/src/config/env.ts # ============================================================================= # ----- Runtime --------------------------------------------------------------- NODE_ENV=production # development | production | test PORT=4000 # default 4000 # ----- BD central (Prisma) — REQUIRED ---------------------------------------- DATABASE_URL=postgresql://user:password@localhost:5432/horux360 # ----- JWT — REQUIRED -------------------------------------------------------- # Generar con: `openssl rand -hex 64` JWT_SECRET= # min 32 chars JWT_EXPIRES_IN=15m # access token TTL JWT_REFRESH_EXPIRES_IN=7d # refresh token TTL # ----- CORS / URLs ----------------------------------------------------------- CORS_ORIGIN=https://horuxfin.com # comma-separated si son varios FRONTEND_URL=https://horuxfin.com # usado por MP back_url, emails, etc. # ----- FIEL (cifrado de credenciales SAT) — REQUIRED ------------------------- # Generar con: `openssl rand -hex 64` (DISTINTA al JWT_SECRET — rotación independiente) FIEL_ENCRYPTION_KEY= # min 32 chars FIEL_STORAGE_PATH=/var/horux/fiel # path donde se guardan archivos FIEL temporales # ----- MercadoPago (suscripciones self-serve) -------------------------------- MP_ACCESS_TOKEN= # producción: APP_USR-... MP_ACCESS_TOKEN_SANDBOX= # opcional: TEST-... para dev local sin cobro MP_USE_SANDBOX=false # true → usa MP_ACCESS_TOKEN_SANDBOX MP_WEBHOOK_SECRET= # firma HMAC del webhook MP (Settings → Notifs) MP_NOTIFICATION_URL=https://api.horuxfin.com/api/webhooks/mercadopago # Solo dev/staging — override del payer_email cuando el owner = collector. Vacío en prod. MP_TEST_PAYER_EMAIL= # ----- SMTP (Nodemailer) — opcional pero recomendado ------------------------- SMTP_HOST=smtp.gmail.com # default SMTP_PORT=587 # default SMTP_USER= # cuenta Gmail Workspace SMTP_PASS= # app password (NO la password de la cuenta) SMTP_FROM=Horux360 # ----- Notificaciones admin -------------------------------------------------- ADMIN_EMAIL=carlos@horuxfin.com # destino de "nuevo cliente" + alertas internas # ----- Facturapi (emisión CFDI) — opcional ----------------------------------- # Sin esto, los tenants no pueden emitir facturas, pero la app arranca. FACTURAPI_USER_KEY= # sk_user_... (cuenta maestra Horux 360) # ----- Cloudflare Tunnel (BYO-DB connector) — opcional ----------------------- CLOUDFLARE_API_TOKEN= CLOUDFLARE_ACCOUNT_ID= CLOUDFLARE_TUNNEL_DOMAIN=tunnel.horux.mx # ----- KMS para cifrar conexiones BYO-DB y tokens connector ------------------ CONNECTOR_ENCRYPTION_KEY= # generar con `openssl rand -hex 64` # ----- Metabase (auto-registro BDs tenant para BI) — opcional ---------------- # Sin METABASE_PASSWORD/PG_PASSWORD el service skipea silenciosamente. METABASE_URL= METABASE_USERNAME= METABASE_PASSWORD= METABASE_PG_HOST= METABASE_PG_PORT= METABASE_PG_USER= METABASE_PG_PASSWORD= # ----- Cron control en dev (opcional) ---------------------------------------- # ENABLE_CRONS_IN_DEV=1 # activa SAT sync, weekly emails, etc. en NODE_ENV=development # ----- Watchdog SAT thresholds (opcional, defaults razonables) --------------- # STALE_PENDING_HOURS=12 # marca pending como failed si nextRetryAt > N h atrás # STALE_RUNNING_HOURS=4 # marca running como failed si startedAt > N h atrás # ----- SAT Playwright headless toggle (debug temporal) ---------------------- # SAT_HEADLESS=false # solo dev — muestra browser para debug de scrapers