import type { Context, Next } from "hono"; import type { AuthUser } from "./auth.ts"; import { requireAuth, tenantScope } from "./auth.ts"; import { withCoreTenant } from "./db.ts"; /** * Middleware que abre la transacción de Postgres con app.tenant_id fijado * (Row Level Security) para toda la duración del request, y la expone en * `c.get("db")`. Encadenar SIEMPRE después de requireAuth en las rutas de * `core` (workers/proyectos/empresas/presupuesto/nómina/documentos/gafetes). * * Esto es lo que hace que la Fase 4b (RLS) realmente proteja algo: sin * este middleware, ninguna conexión tendría app.tenant_id fijado y las * políticas fail-closed devolverían cero filas para todo. */ export async function withCoreScope(c: Context, next: Next) { const user = c.get("user") as AuthUser; const tid = tenantScope(user); await withCoreTenant(tid, async (db) => { c.set("db", db); await next(); }); } /** Atajo para registrar rutas de `core`: `app.get(path, ...requireCoreAuth, handler)`. */ export const requireCoreAuth = [requireAuth, withCoreScope] as const;