Novedades

9 min de lectura

Novedades

Puede encontrar información más detallada sobre los cambios en cada versión directamente en GitHub Releases.

v3.0.0

  • 🔑 Nuevo endpoint de inicio de sesión (breaking): el método JSON-RPC get_jwt se sustituye por POST /{prefix}/{database}/token, que recibe el login y la contraseña de PostgreSQL como autenticación HTTP Basic — las credenciales ya no viajan en el cuerpo de la petición y un proxy inverso puede limitar los inicios de sesión por URL. get_jwt en /jsonrpc responde ahora 404 / -32601. Migración: curl -X POST …/token -u login:password.
  • 📥 Descarga de archivos: el nuevo endpoint POST /{prefix}/{database}/file sirve archivos binarios desde funciones de PostgreSQL que devuelven conjuntos de filas — una fila directamente, varias como ZIP en streaming — con la misma autenticación, cambio de rol y límite de tasa que JSON-RPC. capabilities() informa kind: "file". Vuelva a aplicar sql/schema.sql (es idempotente) para obtener los nuevos campos.
  • 🧰 Herramientas: nuevo JWT Signer, que firma tokens localmente en el navegador a partir de un JWT_SECRET introducido a mano (sin acceso a la red, el secreto nunca se guarda), capturas de pantalla y versiones alojadas de todas las herramientas (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), tarjetas clicables y enlaces cruzados. Las carpetas de tools/ pasan a llamarse explorer, jwt-getter y sse-tester: actualice STATIC_FILES_PATH si las sirve.
  • 🐛 Correcciones y refuerzo: una función que devuelve NULL de SQL ahora produce "result": null en lugar de HTTP 500; las rutas ZIP de /file rechazan nombres hostiles de Windows y colisiones sin distinguir mayúsculas; los resultados vacíos se revierten.
  • 📚 Documentación y dependencias: Quick Start paso a paso, la página JSON-RPC como referencia pura, la decisión de arquitectura «Por qué PostgreSQL», guía de proxy inverso para descargas grandes y módulos de Go actualizados (actualización de seguridad de golang.org/x/net).

v2.2.0

  • 🔑 JWT opcional: JWT_SECRET ya no es obligatorio. Sin él, JWT queda desactivado (get_jwt devuelve 404 / -32601) y los clientes usan credenciales HTTP Basic o tokens de API.
  • 🛡️ Límite de intentos para todos los métodos de autenticación (seguridad): LOGIN_RATE_LIMIT ahora cubre también HTTP Basic y Bearer (JWT/token de API) en todos los endpoints, no solo get_jwt. Antes se podían adivinar contraseñas mediante Authorization: Basic sin límite.
  • 🔒 Acceso gobernado solo por privilegios (breaking): se elimina pgarachne.allowed_schemas(). capabilities() (y con ello MCP tools/list y la exportación OpenAPI) lista toda función jsonb que quien llama puede ejecutar y cuyo esquema puede usar. Revoque EXECUTE/USAGE donde no se desee; consulte la página de Seguridad.
  • ⚠️ Otros cambios incompatibles: save_idempotency_key ahora recibe un ámbito por rol (vuelva a aplicar sql/schema.sql antes de actualizar el binario), universal_update/universal_delete rechazan filtros vacíos salvo que se pase "all": true, y universal_read solo acepta * o nombres de columna simples en select (cierra una vía de inyección SQL).
  • 🐛 Correcciones: interbloqueo de SSE al reconectar el listener, inicios de sesión lentos o con contraseña errónea que bloqueaban otras peticiones, renderizado de argumentos en MCP prompts/get, un comentario de función mal formado que rompía capabilities, resultados «falsy» mostrados como errores en el Explorer y un XSS en la vista de resultados del Explorer.
  • 📚 Documentación: nuevo llms-full.txt, tarjeta de GitHub Sponsors, tooltips en los iconos de la barra de navegación; esta página ahora también incluye v2.0.3 y v2.1.0.

v2.1.0

  • 📄 Exportación OpenAPI por método: generate_openapi_spec() ahora también genera una ruta solo de documentación por cada método expuesto, para herramientas que esperan una operación por ruta (Swagger UI, Postman, generación de código). Un nuevo endpoint openapi.yaml devuelve la misma especificación en formato YAML.
  • 🔒 Exportación OpenAPI autenticada y filtrada por rol: /openapi.json ahora requiere la misma autenticación que /jsonrpc y solo lista los métodos que el rol del solicitante puede ejecutar — anteriormente el endpoint no requería autenticación y mostraba todos los métodos a cualquiera.
  • 🔌 Actualización del protocolo MCP: El endpoint MCP ahora habla exclusivamente la versión de protocolo 2026-07-28; el antiguo intercambio initialize/ping ya no es compatible. Consulte AGENTS.md para la referencia completa.
  • 🐛 Corrección del pool de conexiones: Los pools de conexión de autenticación directa (Basic Auth) ahora se desalojan correctamente cuando están inactivos, corrigiendo un problema por el cual la rotación rutinaria de contraseñas podía eventualmente bloquear el acceso con credenciales nuevas.
  • 📦 Actualizaciones de dependencias y CI: Actualización rutinaria de dependencias de Go (ahora requiere Go 1.26) y las correspondientes actualizaciones de herramientas de CI.

v2.0.3

  • 🔒 Refuerzo de seguridad: El cambio de rol ya no construye SQL mediante concatenación de cadenas (en su lugar usa la función parametrizada set_config()), el servicio de archivos estáticos ahora resuelve las rutas a través de os.Root para que un symlink no pueda escapar del directorio servido, se reforzaron los permisos de los archivos de registro/PID, y se aplicó una validación más estricta de los enlaces de resultados de búsqueda del sitio de documentación.
  • 🚀 Nueva página de Inicio Rápido (los 10 idiomas): Un camino rápido desde la instalación hasta un endpoint funcionando, sin el rodeo completo de Instalación/Configuración.
  • 📄 Detectabilidad de llms.txt: Enlazado desde la página de inicio, la página de MCP, el README y el encabezado de cada página, para que los rastreadores de LLM puedan encontrarlo.
  • 🐛 Correcciones: El interruptor del menú móvil ahora muestra correctamente un botón de Inicio funcional en pantallas anchas, los enlaces de la página 404 personalizada ahora se resuelven correctamente sin importar la profundidad de la URL, y el menú móvil obtuvo una entrada de «Inicio».

v2.0.2

  • 🔒 Refuerzo de seguridad: Se cerraron varios hallazgos de análisis estático — las claves de caché del pool de autenticación directa ahora usan HMAC (en lugar de un SHA-256 simple), una comprobación explícita de contención para el servicio de archivos estáticos, escape HTML del texto de estado de inicio de sesión del SSE Tester, una lista blanca de esquemas de URL para los enlaces de resultados de búsqueda del sitio de documentación, y permisos de mínimo privilegio en el workflow de CI.
  • 📦 Actualización de dependencias: Se actualizaron todas las dependencias de Go, incluyendo gin-gonic/gin a v1.12.0 y lib/pq a v1.12.3 (ahora requiere Go 1.25).
  • 🌐 3 idiomas nuevos: El sitio de documentación ya está disponible en polaco, ucraniano y griego — 10 idiomas en total.

v2.0.1

  • 🔒 Corrección de seguridad: Se actualizó la dependencia transitiva de HTTP/3 quic-go a v0.59.1, cerrando una vulnerabilidad de expansión de trailers QPACK que podía permitir a un peer malicioso agotar la memoria del servidor o del cliente.
  • 🎨 Mejoras en el sitio de documentación: Nuevo selector de tema claro/oscuro/automático y selector de idioma solo con iconos, enlaces de icono a GitHub/Apoyo en la barra de navegación, corrección de los datos estructurados JSON-LD codificados por duplicado, y un llms.txt ampliado.

v2.0.0

  • 🔒 Valores seguros por defecto (con cambios incompatibles): DB_SSLMODE ahora tiene por defecto require, ALLOWED_ORIGINS ya no usa * por defecto, y JWT_SECRET debe tener al menos 32 bytes. Los despliegues existentes deben revisar su configuración antes de actualizar.
  • 🧹 Limpieza de elementos obsoletos: Se eliminaron las rutas de redirección /api/… y /sse/… y el alias JSON-RPC obsoleto login. Use directamente /{prefix}/:database/… y get_jwt.
  • 🛡️ Autenticación y manejo de errores más estrictos: Un nuevo límite de inicio de sesión por IP (LOGIN_RATE_LIMIT_PER_IP) cierra una brecha de credential spraying, y los errores de herramientas MCP ya no exponen texto de error de PostgreSQL sin procesar por defecto (puede reactivarse con MCP_SQL_ERROR_DETAIL).
  • ⚙️ Límites de conexión configurables: El límite del pool de conexiones de autenticación directa ahora es configurable mediante DIRECT_POOL_LIMIT.
  • 🔑 Soporte para IdP externos (BYO JWT): Las nuevas opciones JWT_ISSUER, JWT_AUDIENCE y JWT_LEEWAY vinculan los tokens emitidos a un emisor/audiencia específicos y permiten ajustar la tolerancia de desfase horario.
  • 🧰 Nuevas herramientas: Un JWT Getter (/tools/get-jwt) y un SSE Tester (/tools/test-sse) independientes se unen al Explorador para pruebas manuales rápidas.
  • 🐛 Correcciones de fiabilidad: Se corrigió un cierre de SSE que podía quedar bloqueado y un error en la recuperación de conexiones muertas que podía dejar al servidor incapaz de reconectar con PostgreSQL.
  • 🧪 Refuerzo de CI: Se añadieron golangci-lint, el detector de carreras de Go y govulncheck a cada build, junto con una mayor cobertura de pruebas.
  • 📦 Proceso de publicación: Se añadió CHANGELOG.md y se dividió el flujo de publicación en make release-local (compilación y verificación) y make release (etiquetado, publicación y actualización del tap de Homebrew).

v1.3.0

  • 🌐 Explorador PgArachne – PWA moderno: Renovación visual y funcional completa – tema oscuro/claro (automático), diseño de tarjetas adaptable, resaltado de sintaxis JSON, botón de copiar al portapapeles, mejor UX de autenticación (pestañas de contraseña/token), soporte de instalación PWA (manifiesto, iconos, service worker), enlaces compartibles mediante el parámetro ?url=….
  • 🛠️ Soporte para Model Context Protocol (MCP): Nuevo endpoint /{prefix}/{db}/mcp con métodos estándar resources/list, resources/read, prompts/list, prompts/get – completamente respaldado por funciones de PostgreSQL y reutilizando la autenticación y el cambio de roles existentes.
  • 🔧 Prefijo de API configurable: El valor predeterminado cambió a /db/{database}/jsonrpc y /db/{database}/sse, las rutas antiguas /api/… y /sse/… se mantienen como redirecciones 307 por compatibilidad. Controlado mediante la variable de entorno API_PREFIX.
  • 🛡️ Protección de idempotencia: Campo opcional idempotencyKey en solicitudes JSON-RPC – detección automática de duplicados (HTTP 409 + código de error en caso de colisión) usando pgarachne.save_idempotency_key().
  • 📚 Mejoras en la documentación: Nueva sección /tools/ con tarjetas (Explorador + próxima barra de herramientas para macOS), nueva página “Architectural Decisions”, SECURITY.md con instrucciones para reportar vulnerabilidades, mejor tipografía en todos los idiomas gracias a TypoLima, soporte mejorado para la página 404 en GitHub Pages.
  • 📝 Cambio de nombre del método de inicio de sesión: El método JSON-RPC login pasó a llamarse get_jwt (el nombre antiguo se mantiene como alias obsoleto con advertencia en los registros).
  • 📊 Limpieza de registros (logging): Al registrar en un archivo, la consola muestra solo información mínima de inicio → salida más limpia en entornos de producción/docker.

v1.2.0

  • 🛡️ Seguridad: La validación del token de acceso se realiza antes de establecer una conexión con la base de datos. Protección mejorada contra la suplantación de IP (añadida la configuración TRUSTED_PROXIES) y ocultación de errores internos de la base de datos al usuario final.
  • 📊 Métricas aisladas: El endpoint de Prometheus /metrics se trasladó de la API pública a su propio puerto seguro (por defecto, disponible solo en 127.0.0.1:9090).
  • 📦 Nueva opción de instalación: El proyecto ahora tiene un tap de Homebrew oficial para macOS y Linux. Las compilaciones están firmadas y generadas a través de GoReleaser.
  • 📚 Documentación rediseñada: Aspecto completamente nuevo basado en el framework Hugo. Se ha añadido búsqueda rápida de texto completo, opción de copiar código y ejemplos de despliegue en producción (Nginx hardening, BYO JWT).
  • ⚙️ Gestión de demonio mejorada: Se agregó soporte para la configuración de la ruta personalizada de PID_FILE.

v1.1.0

  • 🔌 API unificada: Llamadas a través de POST /api/<db> (el método invocado se especifica en el cuerpo JSON-RPC).
  • ⚡ Notificaciones en tiempo real: Nuevo endpoint GET /sse/<db>?channels=... para escuchar eventos de la base de datos con soporte multicanal.
  • 📈 Observabilidad: Métricas detalladas de Prometheus para HTTP, auth, JSON-RPC y SSE.
  • 🏋️ Gran mejora de estabilidad: Protección contra clientes lentos, tiempos de espera estrictos y limpieza automática de conexiones.