Appearance
Nexos — UI de conexiones (SMTP, Telegram y OAuth Google)
La ruta /connections (pestaña Nexos) muestra una vista de conexiones alineada visualmente con el diseño de referencia: cabecera, búsqueda, franja de tipos activos, catálogo de alta y (si aplica) otros tipos sin activas.
Comportamiento
- Listado:
GET /api/connections(respuesta validada conConnectionSchemade@repo/schemas). - Catálogo de tipos (alta):
GET /api/connections/available— cada fila incluyename(slug), metadatos yschemanullable:- Con
schema(provider+fields): tipos por credenciales (p. ej. SMTP, Telegram). El panel muestra formulario dinámico y crea conPOST /api/connections. - Con
schema: null: tipos OAuth Google definidos por el slugnamedel catálogo (gmail,calendar,sheetsen el seed actual). El panel muestra la misma rejilla de alta; el flujo de creación usaPOST /api/connections/oauth/:provider/start(google_gmailogoogle_workspace) con cuerpoStartOAuthBodySchema(name,capability,visibility), y redirige al navegador aauthUrl. Tras el callback de Google, la conexión queda creada en la API.
- Con
- Agrupación en UI: además de
provider, el panel usa unaworkspaceKeypor fila de catálogo para no mezclar instancias degoogle_workspacecon distintacapability(p. ej. Calendar vs Sheets). Las conexiones se asocian al tipo comparandoprovidery, para OAuth,config.capability. - Esquemas de formulario: para filas con
schema, los campos vienen en available. Para instancias huérfanas sin fila de catálogo coincidente, el panel reutiliza esquemas embebidos en otras filas de la misma respuesta (providerSchemasFromAvailable). - Conexiones activas (franja horizontal): una tarjeta por entrada de catálogo con al menos una conexión activa que coincida con esa entrada. Configurar abre el workspace modal (lista + editor).
- Workspace — credenciales: nombre, campos del esquema, Probar conexión, Guardar (
POST /test/PUTsegún corresponda). - Workspace — OAuth: nueva instancia: nombre + Conectar con Google (mismo contrato que el diálogo de alta). Instancia existente: solo renombrar vía
PUTconname(sin probar conexión tipo SMTP en el panel). - Alta desde catálogo (diálogo): credenciales →
POST /api/connections; OAuth → botón Google, sinPOST /connectionsdirecto desde el panel. - Edición / prueba / secretos enmascarados: igual que antes para tipos con formulario; ver guía de API para
TestConnectionSchemay contraseñas enmascaradas. - Baja:
DELETE /api/connections/:id.
Notas
- Requiere permisos CASL de lectura/escritura sobre
connections.connectioncomo en la API. - La URL de callback OAuth y redirecciones post-login las define el backend (
CONNECTIONS_OAUTH_*); el panel solo inicia el flujo y asignawindow.locationaauthUrl.