Server Config & RPC Stability Hotfix
V-3.2.0248 — Server Config & RPC Stability Hotfix: Causa raíz (única que explica los 500 en cascada): el Dockerfile arranca wrangler con `cd dist/server && wrangler dev`, así que Wrangler busca `.dev.vars` en `dist/server/.dev.vars`. El VPS coloca `.dev.vars` en `/app/.dev.vars` (raíz del proyecto), por lo que SUPABASE_URL y SUPABASE_PUBLISHABLE_KEY quedaban `undefined` dentro del worker. `requireRpcAuth` lanzaba 500 `"Falta configuración del servidor"` en cada RPC: listWarehouses, getFranchiseState, getAuctionAccess, getDashboardSummary, getSandboxState, listCashCuts, listCashMovements, listRegisters, getWallet, aiGetState, pullAllOwnerOrders, syncOwnerStocks. No era un problema por módulo, era un único punto de falla. Fix mínimo: • Dockerfile CMD: si existe `/app/.dev.vars` y no existe `/app/dist/server/.dev.vars`, crea un symlink antes de arrancar wrangler. Sin esto, ningún RPC autenticado funcionaba en VPS. • `src/server/rpc-auth.server.ts`: ahora acepta `VITE_SUPABASE_URL` / `VITE_SUPABASE_PUBLISHABLE_KEY` como fallback, devuelve error estructurado con `code: SERVER_CONFIG_MISSING_CRITICAL` + `missing_config_key`, y loguea en consola sin exponer secretos. • `/api/rpc/$name`: el dispatcher ahora propaga `code` y `missing_config_key` en el JSON de error, y loguea `[rpc] <name> status= code=` para todos los 5xx. Errores esperados (401, 403, plan_forbidden) siguen sin contaminar logs. Configuración global crítica (sigue obligatoria): SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, SUPABASE_SERVICE_ROLE_KEY, ECARTPAY_* (si se usa billing). Configuración por owner (no rompe dashboard si falta): Resend / sender de correo / branding / configs del negocio — ya estaban aisladas en sus propias RPC (cash-closure-email lee `RESEND_API_KEY` solo cuando se intenta enviar y devuelve error claro sin tirar el dashboard). No tocado (compatibilidad): Wrangler 3.114.14 pin, `--assets ../client`, Docker base node:22, Traefik, docker-compose, wrangler.jsonc, vite.config.ts. QA: `bunx tsc --noEmit` limpio, `npm run build` exitoso. Tras rebuild en VPS las RPC listadas deben responder 200 (o el error de dominio correcto), no 500 genérico.
Aspectos destacados
- Causa raíz: wrangler dev en cwd=dist/server no leía /app/.dev.vars
- Symlink automático de .dev.vars en el CMD del Dockerfile
- rpc-auth devuelve code: SERVER_CONFIG_MISSING_CRITICAL en vez de 500 genérico
- Fallback a VITE_SUPABASE_URL / VITE_SUPABASE_PUBLISHABLE_KEY
- Dispatcher de RPC propaga code y missing_config_key
- Logging seguro sin secretos para 5xx