@virtualsnake9/eaco-sdk
v0.1.0
Published
Cliente HTTP para Éaco — solicitudes, aprobaciones y autorización dinámica
Readme
@virtualsnake9/eaco-sdk
Cliente TypeScript para que backends (Sign, Graph Flow, Zyta-be, etc.) usen Éaco — autorización dinámica por solicitudes y aprobaciones.
Janus responde «¿tiene rol/permiso?». Éaco responde «¿se aprobó esta excepción?». Al aprobar, el API Éaco puede materializar bindings en Janus.
Instalación
pnpm add @virtualsnake9/eaco-sdk
# prod recomendado: "@virtualsnake9/eaco-sdk": "0.1.0"Conexión
| Variable | Ejemplo | Uso |
|----------|---------|-----|
| EACO_API_URL | http://localhost:3004 | URL del API Éaco |
| EACO_API_TOKEN | JWT usuario o cuenta servicio | Bearer server-to-server |
Obtener token: POST /auth/login en el API (email, password, tenantId opcional).
Uso
import {
createEacoClient,
EacoNotApprovedError,
} from '@virtualsnake9/eaco-sdk';
const eaco = createEacoClient({
baseUrl: process.env.EACO_API_URL!,
token: process.env.EACO_API_TOKEN!,
});
// 1. Crear solicitud
await eaco.createRequest({
tenantId,
resourceType: 'document',
resourceId: docId,
reason: 'Cliente externo',
janusMaterialization: {
type: 'bind_resource',
janusTenantId: tenantId,
resourceType: 'document',
resourceId: docId,
roleSlugs: ['abogado'],
},
});
// 2. Supervisor aprueba (otro usuario o panel)
await eaco.approveRequest(requestId);
// 3. PEP: exigir aprobación antes de actuar
await eaco.assertApproved({
tenantId,
resourceType: 'document',
resourceId: docId,
});Métodos
| Método | Uso |
|--------|-----|
| createRequest | Nueva solicitud pending |
| listRequests | Listar por tenant / estado |
| getRequest | Detalle |
| approveRequest / rejectRequest | Decisión del aprobador |
| checkApproved / assertApproved | Enforcement en el módulo dueño |
Con Janus
Flujo típico: Janus valida rol base → Éaco registra excepción → al approve, Éaco llama Janus SDK en el servidor (bindResource, addMemberRole) si configuraste JANUS_* en el API Éaco.
Guía completa: eaco-sdk AGENTS.md
