Nouveautés

9 min de lecture

Nouveautés

De plus amples informations sur les changements apportés à chaque version se trouvent directement sur GitHub Releases.

v3.0.0

  • 🔑 Nouveau endpoint de connexion (breaking) : la méthode JSON-RPC get_jwt est remplacée par POST /{prefix}/{database}/token, qui prend le login et le mot de passe PostgreSQL en authentification HTTP Basic — les identifiants ne circulent plus dans le corps des requêtes et un reverse proxy peut limiter les connexions par URL. get_jwt sur /jsonrpc répond désormais 404 / -32601. Migration : curl -X POST …/token -u login:password.
  • 📥 Téléchargement de fichiers : le nouvel endpoint POST /{prefix}/{database}/file sert des fichiers binaires issus de fonctions PostgreSQL retournant des ensembles de lignes — une ligne directement, plusieurs lignes en ZIP streamé — avec la même authentification, le même changement de rôle et la même limitation de débit que JSON-RPC. capabilities() signale kind: "file". Réappliquez sql/schema.sql (idempotent) pour obtenir les nouveaux champs.
  • 🧰 Outils : nouveau JWT Signer, qui signe les jetons localement dans le navigateur à partir d’un JWT_SECRET saisi à la main (aucun accès réseau, secret jamais stocké), captures d’écran et versions hébergées de chaque outil (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), cartes cliquables et liens croisés. Les dossiers de tools/ ont été renommés explorer, jwt-getter et sse-tester — adaptez STATIC_FILES_PATH si vous les servez.
  • 🐛 Correctifs et durcissement : une fonction retournant un NULL SQL produit désormais "result": null au lieu d’un HTTP 500 ; les chemins ZIP de /file rejettent les noms hostiles à Windows et les collisions insensibles à la casse ; les résultats vides sont annulés (rollback).
  • 📚 Docs et dépendances : Quick Start pas à pas, page JSON-RPC devenue pure référence, décision d’architecture « Pourquoi PostgreSQL», conseils de reverse proxy pour les gros téléchargements et modules Go mis à jour (mise à jour de sécurité de golang.org/x/net).

v2.2.0

  • 🔑 JWT optionnel : JWT_SECRET n’est plus obligatoire. Sans lui, JWT est désactivé (get_jwt renvoie 404 / -32601) et les clients utilisent des identifiants HTTP Basic ou des jetons d’API.
  • 🛡️ Limitation du débit pour toutes les méthodes d’authentification (sécurité) : LOGIN_RATE_LIMIT couvre désormais aussi HTTP Basic et Bearer (JWT/jeton d’API) sur tous les endpoints, et pas seulement get_jwt. Auparavant, les mots de passe pouvaient être devinés sans limite via Authorization: Basic.
  • 🔒 Accès régi uniquement par les privilèges (breaking) : pgarachne.allowed_schemas() est supprimée. capabilities() (et donc MCP tools/list et l’export OpenAPI) liste toute fonction jsonb que l’appelant peut exécuter et dont il peut utiliser le schéma. Révoquez EXECUTE/USAGE là où ce n’est pas souhaité ; voir la page Sécurité.
  • ⚠️ Autres changements incompatibles : save_idempotency_key prend désormais une portée par rôle (réappliquez sql/schema.sql avant de mettre à jour le binaire), universal_update/universal_delete refusent les filtres vides sauf si "all": true est passé, et universal_read n’accepte que * ou des noms de colonnes simples dans select (ferme une faille d’injection SQL).
  • 🐛 Corrections : interblocage SSE lors de la reconnexion du listener, connexions lentes ou à mot de passe erroné bloquant les autres requêtes, rendu des arguments dans MCP prompts/get, un commentaire de fonction mal formé cassant capabilities, résultats « falsy» affichés comme erreurs dans l’Explorer et une faille XSS dans la vue des résultats de l’Explorer.
  • 📚 Documentation : nouveau llms-full.txt, carte GitHub Sponsors, info-bulles sur les icônes de la barre de navigation ; cette page liste aussi désormais v2.0.3 et v2.1.0.

v2.1.0

  • 📄 Export OpenAPI par méthode : generate_openapi_spec() émet désormais aussi un chemin (path) documentaire dédié par méthode exposée, pour les outils qui attendent une opération par chemin (Swagger UI, Postman, génération de code). Un nouveau point de terminaison openapi.yaml renvoie la même spécification au format YAML.
  • 🔒 Export OpenAPI authentifié et filtré par rôle : /openapi.json exige désormais la même authentification que /jsonrpc et ne liste que les méthodes que le rôle de l’appelant est autorisé à exécuter — auparavant, le point de terminaison n’était pas authentifié et listait toutes les méthodes à n’importe qui.
  • 🔌 Mise à niveau du protocole MCP : le point de terminaison MCP ne parle désormais que la version de protocole 2026-07-28 ; l’ancienne poignée de main initialize/ping n’est plus prise en charge. Voir AGENTS.md pour la référence complète.
  • 🐛 Correctif du pool de connexions : les pools de connexions en authentification directe (Basic Auth) sont désormais correctement évincés lorsqu’ils sont inactifs, corrigeant un problème où une rotation de mot de passe de routine pouvait finir par bloquer de nouveaux identifiants.
  • 📦 Mises à jour des dépendances et de la CI : rafraîchissement de routine des dépendances Go (nécessite désormais Go 1.26) et mises à jour correspondantes de l’outillage CI.

v2.0.3

  • 🔒 Renforcement de la sécurité : le changement de rôle ne construit plus de SQL par concaténation de chaînes (utilise désormais la fonction paramétrée set_config()), le service de fichiers statiques résout désormais les chemins via os.Root pour empêcher un lien symbolique d’échapper au répertoire servi, renforcement des permissions des fichiers de log/PID, et validation plus stricte des liens de résultats de recherche du site de documentation.
  • 🚀 Nouvelle page Démarrage rapide (dans les 10 langues) : un chemin rapide de l’installation à un point de terminaison fonctionnel, sans passer par le détour complet Installation/Configuration.
  • 📄 Découvrabilité de llms.txt : lié depuis la page d’accueil, la page MCP, le README, et l’en-tête de chaque page, afin que les robots d’indexation LLM puissent le trouver.
  • 🐛 Corrections : le bouton du menu mobile affiche désormais correctement un bouton Accueil fonctionnel sur grand écran, les liens de la page 404 personnalisée se résolvent désormais correctement quelle que soit la profondeur de l’URL, et le menu mobile a gagné une entrée « Accueil».

v2.0.2

  • 🔒 Renforcement de la sécurité : Correction de plusieurs constats d’analyse statique — les clés de cache du pool d’authentification directe utilisent désormais HMAC (au lieu d’un simple SHA-256), une vérification explicite de confinement pour le service de fichiers statiques, un échappement HTML du texte de statut de connexion du SSE Tester, une liste blanche de schémas d’URL pour les liens de résultats de recherche du site de documentation, et des permissions de moindre privilège sur le workflow CI.
  • 📦 Mises à jour des dépendances : Mise à jour de toutes les dépendances Go, notamment gin-gonic/gin vers la v1.12.0 et lib/pq vers la v1.12.3 (nécessite désormais Go 1.25).
  • 🌐 3 nouvelles langues : Le site de documentation est désormais disponible en polonais, ukrainien et grec — 10 langues au total.

v2.0.1

  • 🔒 Correctif de sécurité : Mise à jour de la dépendance transitive HTTP/3 quic-go vers la v0.59.1, comblant une vulnérabilité d’expansion des trailers QPACK qui pouvait permettre à un pair malveillant d’épuiser la mémoire du serveur ou du client.
  • 🎨 Améliorations du site de documentation : Nouveau sélecteur de thème clair/sombre/auto et sélecteur de langue à icônes, liens icônes GitHub/Soutien dans la barre de navigation, correction des données structurées JSON-LD doublement encodées, et un llms.txt enrichi.

v2.0.0

  • 🔒 Valeurs par défaut sécurisées (rupture de compatibilité) : DB_SSLMODE vaut désormais require par défaut, ALLOWED_ORIGINS ne vaut plus * par défaut, et JWT_SECRET doit comporter au moins 32 octets. Les déploiements existants doivent revoir leur configuration avant la mise à jour.
  • 🧹 Nettoyage des éléments legacy : Suppression des routes de redirection /api/… et /sse/… ainsi que de l’alias JSON-RPC obsolète login. Utilisez directement /{prefix}/:database/… et get_jwt.
  • 🛡️ Authentification et gestion des erreurs renforcées : Une nouvelle limite de connexion par IP (LOGIN_RATE_LIMIT_PER_IP) comble une faille de credential spraying, et les erreurs des outils MCP ne révèlent plus le texte brut des erreurs PostgreSQL par défaut (réactivable via MCP_SQL_ERROR_DETAIL).
  • ⚙️ Limites de connexion configurables : La limite du pool de connexions en authentification directe est désormais configurable via DIRECT_POOL_LIMIT.
  • 🔑 Prise en charge des IdP externes (BYO JWT) : Les nouveaux paramètres JWT_ISSUER, JWT_AUDIENCE et JWT_LEEWAY lient les jetons émis à un émetteur/public spécifique et permettent d’ajuster la tolérance de décalage d’horloge.
  • 🧰 Nouveaux outils : Un JWT Getter (/tools/get-jwt) et un SSE Tester (/tools/test-sse) autonomes rejoignent l’Explorateur pour des tests manuels rapides.
  • 🐛 Corrections de fiabilité : Correction d’un blocage à l’arrêt du SSE et d’un bug de récupération des connexions mortes qui pouvait empêcher durablement le serveur de se reconnecter à PostgreSQL.
  • 🧪 Renforcement de la CI : Ajout de golangci-lint, du détecteur de races Go et de govulncheck à chaque build, ainsi qu’une couverture de tests étendue.
  • 📦 Processus de publication : Ajout de CHANGELOG.md et scission du workflow de publication en make release-local (build et vérification) et make release (tag, publication, mise à jour du tap Homebrew).

v1.3.0

  • 🌐 PgArachne Explorer – PWA moderne: Refonte visuelle et fonctionnelle complète – thème sombre/clair (automatique), mise en page adaptative en cartes, coloration syntaxique JSON, bouton de copie dans le presse-papiers, meilleure UX d’authentification (onglets mot de passe/jeton), prise en charge de l’installation PWA (manifeste, icônes, service worker), liens partageables via le paramètre ?url=….
  • 🛠️ Support du Model Context Protocol (MCP): Nouvel endpoint /{prefix}/{db}/mcp avec les méthodes standards resources/list, resources/read, prompts/list, prompts/get – entièrement pris en charge par les fonctions PostgreSQL et réutilisant l’authentification et la commutation de rôles existantes.
  • 🔧 Préfixe d’API configurable: La valeur par défaut a été remplacée par /db/{database}/jsonrpc et /db/{database}/sse, les anciennes routes /api/… et /sse/… restent disponibles en tant que redirections 307 pour la compatibilité. Contrôlé par la variable d’environnement API_PREFIX.
  • 🛡️ Protection d’idempotence: Champ optionnel idempotencyKey dans les requêtes JSON-RPC – détection automatique des doublons (HTTP 409 + code d’erreur en cas de collision) via pgarachne.save_idempotency_key().
  • 📚 Améliorations de la documentation: Nouvelle section /tools/ avec des cartes (Explorateur + future barre d’outils macOS), nouvelle page “Architectural Decisions”, SECURITY.md avec instructions pour signaler les vulnérabilités, meilleure typographie dans toutes les langues grâce à TypoLima, prise en charge améliorée de la page 404 pour GitHub Pages.
  • 📝 Renommage de la méthode de connexion: La méthode JSON-RPC login a été renommée en get_jwt (l’ancien nom reste comme alias obsolète avec avertissement dans les journaux).
  • 📊 Nettoyage de la journalisation: Lors de la journalisation dans un fichier, la console n’affiche que des informations minimales de démarrage → sortie plus propre dans les environnements de production/docker.

v1.2.0

  • 🛡️ Sécurité : La validation du token d’accès s’effectue avant d’établir une connexion à la base de données. Protection améliorée contre l’usurpation d’IP (ajout du paramètre TRUSTED_PROXIES) et dissimulation des erreurs internes de la base de données à l’utilisateur final.
  • 📊 Métriques isolées : L’endpoint Prometheus /metrics a été déplacé de l’API publique vers son propre port sécurisé (par défaut, disponible uniquement sur 127.0.0.1:9090).
  • 📦 Nouvelle option d’installation : Le projet dispose désormais d’un tap Homebrew officiel pour macOS et Linux. Les builds sont signés et générés via GoReleaser.
  • 📚 Documentation repensée : Un tout nouveau design basé sur le framework Hugo. Ajout d’une recherche plein texte ultra-rapide, de la copie de code et d’exemples de déploiement en production (Nginx hardening, BYO JWT).
  • ⚙️ Gestion du démon améliorée : Ajout de la prise en charge de la configuration personnalisée du chemin PID_FILE.

v1.1.0

  • 🔌 API unifiée : Appels via POST /api/<db> (la méthode appelée est spécifiée dans le corps JSON-RPC).
  • ⚡ Notifications en temps réel : Nouvel endpoint GET /sse/<db>?channels=... pour écouter les événements de la base de données avec prise en charge multicanal.
  • 📈 Observabilité : Métriques Prometheus détaillées pour HTTP, auth, JSON-RPC et SSE.
  • 🏋️ Amélioration majeure de la stabilité : Protection contre les clients lents, délais d’attente stricts et nettoyage automatique des connexions.