Nowości

7 min czytania

Nowości

Bardziej szczegółowe informacje o zmianach w każdej wersji znajdziesz w GitHub Releases.

v3.0.0

  • 🔑 Nowy endpoint logowania (breaking): metoda JSON-RPC get_jwt została zastąpiona przez POST /{prefix}/{database}/token, który przyjmuje login i hasło PostgreSQL jako uwierzytelnianie HTTP Basic — dane logowania nie podróżują już w treści żądania, a reverse proxy może ograniczać logowania według URL. get_jwt na /jsonrpc odpowiada teraz 404 / -32601. Migracja: curl -X POST …/token -u login:password.
  • 📥 Pobieranie plików: nowy endpoint POST /{prefix}/{database}/file zwraca pliki binarne z funkcji PostgreSQL zwracających zbiory wierszy — jeden wiersz bezpośrednio, wiele wierszy jako strumieniowany ZIP — z tym samym uwierzytelnianiem, przełączaniem ról i limitem żądań co JSON-RPC. capabilities() raportuje kind: "file". Zastosuj ponownie sql/schema.sql (jest idempotentny), aby uzyskać nowe pola.
  • 🧰 Narzędzia: nowy JWT Signer, który podpisuje tokeny lokalnie w przeglądarce z ręcznie wpisanego JWT_SECRET (bez dostępu do sieci, sekret nigdy nie jest zapisywany), zrzuty ekranu i hostowane wersje każdego narzędzia (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), klikalne karty i wzajemne odnośniki. Katalogi w tools/ zmieniły nazwy na explorer, jwt-getter i sse-tester — zaktualizuj STATIC_FILES_PATH, jeśli je serwujesz.
  • 🐛 Poprawki i utwardzenie: funkcja zwracająca SQL NULL daje teraz "result": null zamiast HTTP 500; ścieżki ZIP w /file odrzucają nazwy wrogie Windows i kolizje bez rozróżniania wielkości liter; puste wyniki są wycofywane (rollback).
  • 📚 Dokumentacja i zależności: Quick Start krok po kroku, strona JSON-RPC jako czysta referencja, decyzja architektoniczna „Dlaczego PostgreSQL”, wskazówki dla reverse proxy przy dużych pobraniach i zaktualizowane moduły Go (aktualizacja bezpieczeństwa golang.org/x/net).

v2.2.0

  • 🔑 Opcjonalny JWT: JWT_SECRET nie jest już wymagany. Bez niego obsługa JWT jest wyłączona (get_jwt zwraca 404 / -32601), a klienci używają danych HTTP Basic lub tokenów API.
  • 🛡️ Limit prób dla wszystkich metod uwierzytelniania (bezpieczeństwo): LOGIN_RATE_LIMIT obejmuje teraz także HTTP Basic i Bearer (JWT/token API) na wszystkich endpointach, nie tylko get_jwt. Wcześniej hasła można było zgadywać bez ograniczeń przez Authorization: Basic.
  • 🔒 Dostęp wyłącznie na podstawie uprawnień (breaking): usunięto pgarachne.allowed_schemas(). capabilities() (a tym samym MCP tools/list i eksport OpenAPI) wypisuje każdą funkcję jsonb, którą wywołujący może wykonać i której schematu może używać. Tam, gdzie to niepożądane, odbierz EXECUTE/USAGE; zobacz stronę Bezpieczeństwo.
  • ⚠️ Inne zmiany niekompatybilne: save_idempotency_key przyjmuje teraz zakres roli (przed aktualizacją binarki zastosuj ponownie sql/schema.sql), universal_update/universal_delete odrzucają puste filtry, chyba że przekazano "all": true, a universal_read w select przyjmuje tylko * lub zwykłe nazwy kolumn (zamyka lukę SQL injection).
  • 🐛 Poprawki: zakleszczenie SSE przy ponownym połączeniu listenera, wolne lub błędne logowania blokujące inne żądania, renderowanie argumentów w MCP prompts/get, wadliwy komentarz funkcji psujący capabilities, wyniki „falsy” pokazywane w Explorerze jako błędy oraz XSS w widoku wyników Explorera.
  • 📚 Dokumentacja: nowy llms-full.txt, karta GitHub Sponsors, podpowiedzi przy ikonach w pasku nawigacji; ta strona zawiera teraz także v2.0.3 i v2.1.0.

v2.1.0

  • 📄 Eksport OpenAPI per metoda: generate_openapi_spec() generuje teraz również jedną ścieżkę dokumentacyjną dla każdej udostępnionej metody, dla narzędzi oczekujących jednej operacji na ścieżkę (Swagger UI, Postman, generatory kodu). Nowy endpoint openapi.yaml zwraca tę samą specyfikację w formacie YAML.
  • 🔒 Uwierzytelniony eksport OpenAPI filtrowany według ról: /openapi.json wymaga teraz tego samego uwierzytelnienia co /jsonrpc i wyświetla tylko metody, które rola wywołującego może wykonać — wcześniej endpoint był niezabezpieczony i pokazywał wszystkie metody każdemu.
  • 🔌 Aktualizacja protokołu MCP: endpoint MCP obsługuje teraz wyłącznie wersję protokołu 2026-07-28; stary handshake initialize/ping nie jest już wspierany. Pełny opis znajdziesz w AGENTS.md.
  • 🐛 Poprawka poolu połączeń: pule połączeń uwierzytelniania bezpośredniego (Basic Auth) są teraz prawidłowo usuwane po bezczynności, co naprawia błąd, przez który rutynowa rotacja haseł mogła ostatecznie zablokować nowe dane uwierzytelniające.
  • 📦 Aktualizacja zależności i CI: rutynowe odświeżenie zależności Go (wymaga teraz Go 1.26) oraz odpowiadające aktualizacje narzędzi CI.

v2.0.3

  • 🔒 Wzmocnienie bezpieczeństwa: przełączanie ról nie buduje już zapytań SQL przez konkatenację ciągów znaków (używa teraz sparametryzowanej funkcji set_config()), serwowanie plików statycznych rozwiązuje teraz ścieżki za pomocą os.Root, dzięki czemu dowiązanie symboliczne nie może wyjść poza serwowany katalog, zaostrzono uprawnienia plików logów/PID oraz zaostrzono walidację linków wyników wyszukiwania na stronie dokumentacji.
  • 🚀 Nowa strona Szybki start (wszystkie 10 języków): szybka ścieżka od instalacji do działającego endpointu, bez pełnego objazdu przez Instalację/Konfigurację.
  • 📄 Odnajdywalność llms.txt: linkowany ze strony głównej, strony MCP, README oraz nagłówka każdej strony, aby ułatwić jego znalezienie robotom LLM.
  • 🐛 Poprawki: przełącznik menu mobilnego poprawnie pokazuje teraz działający przycisk Home na szerokich ekranach, linki na niestandardowej stronie 404 rozwiązują się teraz poprawnie niezależnie od głębokości adresu URL, a menu mobilne zyskało pozycję „Home”.

v2.0.2

  • 🔒 Wzmocnienie bezpieczeństwa: zamknięto kilka wyników analizy statycznej — klucze pamięci podręcznej poolu uwierzytelniania bezpośredniego używają teraz HMAC (a nie zwykłego SHA-256), dodano wyraźną weryfikację, że serwowane pliki statyczne nie mogą wyjść poza skonfigurowany katalog, ucieczkę HTML tekstu statusu logowania w narzędziu SSE Tester, listę dozwolonych schematów URL dla linków wyników wyszukiwania na stronie dokumentacji oraz uprawnienia o minimalnym zakresie w workflow CI.
  • 📦 Aktualizacja zależności: zaktualizowano wszystkie zależności Go, w tym gin-gonic/gin do v1.12.0 i lib/pq do v1.12.3 (wymaga teraz Go 1.25).
  • 🌐 3 nowe języki: strona z dokumentacją jest już dostępna w języku polskim, ukraińskim i greckim — łącznie 10 języków.

v2.0.1

  • 🔒 Poprawka bezpieczeństwa: zaktualizowano tranzytywną zależność HTTP/3 quic-go do wersji v0.59.1, zamykając podatność w rozszerzaniu trailerów QPACK, która mogła pozwolić złośliwej stronie na wyczerpanie pamięci serwera lub klienta.
  • 🎨 Usprawnienia strony z dokumentacją: nowy przełącznik motywu jasny/ciemny/automatyczny oraz ikonowy przełącznik języka, ikonowe odnośniki GitHub/Wsparcie w pasku nawigacji, poprawiono podwójnie zakodowane dane strukturalne JSON-LD oraz rozszerzono llms.txt.

v2.0.0

  • 🔒 Bezpieczne wartości domyślne (zmiana niekompatybilna): DB_SSLMODE ma teraz domyślną wartość require, ALLOWED_ORIGINS już nie domyślnie ustawia się na *, a JWT_SECRET musi mieć co najmniej 32 bajty. Istniejące wdrożenia muszą przed aktualizacją sprawdzić swoją konfigurację.
  • 🧹 Usunięcie przestarzałych elementów: usunięto trasy przekierowań /api/… i /sse/… oraz przestarzały alias JSON-RPC login. Używaj bezpośrednio /{prefix}/:database/… i get_jwt.
  • 🛡️ Ściślejsze uwierzytelnianie i obsługa błędów: nowy limit prób logowania na adres IP (LOGIN_RATE_LIMIT_PER_IP) zamyka lukę umożliwiającą credential spraying, a błędy narzędzi MCP domyślnie już nie ujawniają surowego tekstu błędów PostgreSQL (można to przywrócić za pomocą MCP_SQL_ERROR_DETAIL).
  • ⚙️ Konfigurowalne limity połączeń: limit poolu połączeń dla uwierzytelniania bezpośredniego jest teraz konfigurowalny za pomocą DIRECT_POOL_LIMIT.
  • 🔑 Wsparcie zewnętrznych dostawców identyfikacji (BYO JWT): nowe ustawienia JWT_ISSUER, JWT_AUDIENCE i JWT_LEEWAY wiążą wydane tokeny z konkretnym wydawcą/odbiorcą i pozwalają dostroić tolerancję przesunięcia czasowego.
  • 🧰 Nowe narzędzia: samodzielny JWT Getter (/tools/get-jwt) i SSE Tester (/tools/test-sse) dołączają do Explorer, umożliwiając szybkie testowanie manualne.
  • 🐛 Poprawki stabilności: naprawiono zawieszające się zamykanie SSE oraz błąd odzyskiwania martwych połączeń, który mógł uniemożliwić serwerowi ponowne połączenie z PostgreSQL.
  • 🧪 Wzmocnienie CI: do każdej kompilacji dodano golangci-lint, Go race detector oraz govulncheck, a także rozszerzono pokrycie testami.
  • 📦 Proces wydawania: dodano CHANGELOG.md i podzielono workflow wydawniczy na make release-local (kompilacja i weryfikacja) oraz make release (tagowanie, publikacja, aktualizacja Homebrew tap).

v1.3.0

  • 🌐 PgArachne Explorer – nowoczesna PWA: kompletne odświeżenie wizualne i funkcjonalne – motyw ciemny/jasny (automatyczny), responsywny układ kart, podświetlanie składni JSON, przycisk kopiowania do schowka, lepsze UX uwierzytelniania (zakładki hasło/token), wsparcie instalacji PWA (manifest, ikony, service worker), odnośniki do udostępniania za pomocą parametru ?url=….
  • 🛠️ Wsparcie Model Context Protocol (MCP): nowy endpoint /{prefix}/{db}/mcp ze standardowymi metodami resources/list, resources/read, prompts/list, prompts/get – w pełni oparty na funkcjach PostgreSQL i ponownie wykorzystujący istniejące uwierzytelnianie oraz przełączanie ról.
  • 🔧 Konfigurowalny prefiks API: domyślna wartość zmieniona na /db/{database}/jsonrpc i /db/{database}/sse, a starsze ścieżki /api/… i /sse/… zachowane jako przekierowania 307 dla zgodności wstecznej. Kontrolowane za pomocą zmiennej środowiskowej API_PREFIX.
  • 🛡️ Ochrona idempotencji: opcjonalne pole idempotencyKey w żądaniach JSON-RPC – automatyczne wykrywanie duplikatów (HTTP 409 + kod błędu przy kolizji) za pomocą pgarachne.save_idempotency_key().
  • 📚 Usprawnienia dokumentacji: nowa sekcja /tools/ z kartami (Explorer + zbliżający się macOS Toolbar), nowa strona „Architectural Decisions”, plik SECURITY.md z instrukcjami zgłaszania podatności, lepsza typografia we wszystkich językach dzięki TypoLima, poprawione wsparcie strony 404 dla GitHub Pages.
  • 📝 Zmiana nazwy metody logowania: metoda JSON-RPC login została zmieniona na get_jwt (stara nazwa pozostaje jako przestarzały alias z ostrzeżeniem w logach).
  • 📊 Uporządkowanie logowania: przy logowaniu do pliku konsola wyświetla tylko minimalne informacje startowe → czystszy wynik w środowiskach produkcyjnych/docker.

v1.2.0

  • 🛡️ Bezpieczeństwo: walidacja tokenów dostępu odbywa się teraz przed nawiązaniem połączenia z bazą danych. Ulepszona ochrona przed podszywaniem się pod adresy IP (dodano ustawienie TRUSTED_PROXIES) oraz ukrywanie wewnętrznych błędów bazy danych przed użytkownikami końcowymi.
  • 📊 Izolowane metryki: endpoint Prometheus /metrics przeniesiono z publicznego API na własny zabezpieczony port (domyślnie dostępny tylko na 127.0.0.1:9090).
  • 📦 Nowa opcja instalacji: projekt ma teraz oficjalny Homebrew tap dla macOS i Linux. Buildy są podpisywane i generowane za pomocą GoReleaser.
  • 📚 Odświeżona dokumentacja: całkowicie nowy wygląd oparty na frameworku Hugo. Dodano błyskawiczne wyszukiwanie pełnotekstowe, możliwość kopiowania kodu oraz przykłady wdrożeń produkcyjnych (hardening Nginx, BYO JWT).
  • ⚙️ Ulepszone zarządzanie demonem: dodano wsparcie dla konfiguracji własnej ścieżki PID_FILE.

v1.1.0

  • 🔌 Zunifikowane API: wszystkie wywołania przechodzą przez POST /api/<db> (wywoływana metoda jest określana w treści JSON-RPC).
  • ⚡ Powiadomienia w czasie rzeczywistym: nowy endpoint GET /sse/<db>?channels=... do nasłuchiwania zdarzeń bazy danych z obsługą wielu kanałów.
  • 📈 Obserwowalność: szczegółowe metryki Prometheus dla HTTP, uwierzytelniania, JSON-RPC i SSE.
  • 🏋️ Istotne usprawnienia stabilności: ochrona przed wolnymi klientami, ścisłe limity czasowe i automatyczne czyszczenie połączeń.