# 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**.