Skip to content

query-api — estado vivo

2026-09-07

  • Construido de cero a pedido de una sesión de Cowork (instrucciones pegadas tal cual a Claude Code en ctunlinux): puente HTTP genérico de solo lectura, no la app de conciliación que se había planteado originalmente para este mismo directorio de trabajo (api-cowork).
  • Código en trivasa-bi-core/query_api/ — main.py, db.py, sql_guard.py, bearer.py, audit.py, requirements.txt. Sin comitear a git todavía en trivasa-bi-core (pendiente, ver abajo).
  • 3 targets probados reales: postgres_dw (trivasa_dw, rol ealcocer_ro), mssql_205 (TRIVASADB3 staging), mssql_207 (TRIVASADB producción real).
  • Bearer token generado (openssl rand -hex 32) y guardado en Infisical (secret-management, env dev, QUERY_API_TOKEN) — nunca impreso en ninguna sesión de Claude Code, ni en local ni por Cowork.
  • Token de machine identity de Infisical (~/.config/infisical/ehas-uk.env) estaba expirado — se generó uno nuevo (claude-esteban, TTL 30 días desde 2026-09-07) con acceso a los proyectos Trivasa y secret-management.
  • Servicio systemd real, no proceso suelto: query-api.service, enabled + active, escuchando en 127.0.0.1:8765. Reemplazó al script de prueba (~/api-cowork/api.py) que ocupaba ese puerto — el primero se paró bien, pero volvió a levantarse solo una vez más durante el arranque del servicio real (choque de puerto, resuelto matándolo de nuevo); no se encontró cron/systemd/watchdog que lo relance, así que fue relanzado a mano en algún momento fuera de esta sesión — vale la pena confirmar que no se vuelva a correr por error.
  • Reusa el túnel/hostname ya reservado (reportesweb.frento.com.mx → 127.0.0.1:8765) — no se tocó /etc/cloudflared/config.yml.
  • Validado end-to-end a través del túnel público, no solo en local: /health sin auth, /query real contra los 3 targets, rechazo real (no solo revisado el código) de DELETE/UPDATE/INSERT/ multi-statement, y 401 sin token.
  • Gotcha real encontrado y resuelto: EnvironmentFile de systemd ignora el prefijo export en silencio — hizo falta un segundo archivo de entorno en formato plano solo para la unidad (~/.config/infisical/ehas-uk-systemd.env).

Pendiente

  • [ ] Comitear y pushear trivasa-bi-core/query_api/ — el código está en disco y funcionando, pero no en git todavía.
  • [ ] Cambiar el subdominio reportesweb.frento.com.mx a uno que describa el servicio real (ver nota en index.md) — nombre genérico heredado, no se tocó en esta pasada.
  • [ ] Confirmar con Esteban si ~/api-cowork/api.py (el script de prueba que ocupaba el puerto 8765 antes) se puede borrar del todo o si sigue sirviendo para algo.
  • [ ] No hay rotación automática del QUERY_API_TOKEN ni alerta si el token de machine identity de Infisical vuelve a expirar — ambos son manuales hoy.