feat: versión inicial de GLM Hub

This commit is contained in:
2026-07-29 12:17:56 -04:00
commit 1c3d534322
43 changed files with 10381 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
# GLM Hub — Solicitudes de acceso
## Cambios incluidos
- Se retiró el texto de ayuda **“Directa y fácil de escanear.”** debajo de Descripción breve.
- **Control del catálogo** sigue renderizándose exclusivamente para usuarios con `role = admin`.
- Los usuarios normales ven una nueva sección **¿No tienes acceso a una aplicación?**.
- El formulario de solicitud se alimenta directamente del catálogo publicado en Supabase, por lo que al crear, ocultar o eliminar aplicaciones el dropdown se actualiza sin editar código.
- La pantalla queda bloqueada mientras n8n registra la solicitud y envía los correos.
- Los correos de aprobación se envían individualmente a Isaac Aracena, José Leopoldo Gómez y Máximo Gómez.
- La primera decisión confirmada queda registrada de forma atómica en Supabase. Los clics posteriores no pueden cambiarla ni volver a avisar a IT Support.
- Tras la decisión se envía un correo HTML a `itsupport@gomezleemarketing.com` con solicitante, aplicación, decisión y persona que decidió.
## 1. Supabase
Ejecuta completo:
`SUPABASE-GLM-HUB-COMPLETO.sql`
El script conserva las tablas anteriores y agrega:
- `glm_hub_access_requests`
- `glm_hub_access_request_approvers`
- `glm_hub_prepare_access_request(uuid)`
- `glm_hub_issue_access_request_tokens(uuid)`
- `glm_hub_decide_access_request(text, text)`
La función que entrega los enlaces de aprobación solo puede ejecutarse con `service_role`; los enlaces nunca se devuelven al navegador del solicitante.
## 2. n8n
Importa:
`n8n/GLM-Hub-Solicitudes-Acceso-Aprobacion.json`
Después configura:
1. En **Crear solicitud en Supabase** reemplaza `TU_SUPABASE_ANON_KEY` en `apikey`.
2. En **Emitir enlaces de aprobación** reemplaza `TU_SUPABASE_SERVICE_ROLE_KEY` en `apikey` y `Authorization`.
3. En **Registrar decisión en Supabase** reemplaza `TU_SUPABASE_ANON_KEY` en `apikey` y dentro de `Bearer TU_SUPABASE_ANON_KEY`.
4. Selecciona una credencial Gmail válida en:
- **Enviar solicitud a aprobadores**
- **Enviar decisión a IT Support**
5. Guarda, publica y activa el workflow.
El workflow no usa variables de entorno de n8n.
## 3. Frontend
El `.env` ya incluye:
```env
VITE_ACCESS_REQUEST_WEBHOOK_URL="https://agenteit.digitalcompass.agency/webhook/glm-hub-solicitar-acceso"
```
El ZIP también contiene un `dist` actualizado. La versión fuente puede recompilarse normalmente con:
```bash
npm install
npm run build
```
## Decisión desde correo
Los botones del correo abren una pantalla de confirmación antes de registrar la decisión. Esto evita que un escáner automático de enlaces de Gmail o seguridad corporativa apruebe o rechace una solicitud sin intervención humana.
Los botones permanecen visibles en los correos ya entregados, pero después de la primera decisión Supabase bloquea cualquier cambio posterior y muestra que la solicitud ya fue atendida.
## Corrección 2026-07-29
- El nodo **Crear solicitud en Supabase** usa la clave `anon` en `apikey` y el JWT vigente del usuario en `Authorization`.
- Los nodos internos para emitir enlaces y registrar decisiones conservan la clave `service_role`.
- Los errores visibles en el portal son mensajes para usuarios; los detalles técnicos quedan solamente en la ejecución de n8n.
- El selector de áreas incluye **CDC**.