Що нового

7 хв читання

Що нового

Детальнішу інформацію про зміни в кожній версії можна знайти на GitHub Releases.

v3.0.0

  • 🔑 Новий endpoint входу (breaking): метод JSON-RPC get_jwt замінено на POST /{prefix}/{database}/token, який приймає логін і пароль PostgreSQL як HTTP Basic-автентифікацію — облікові дані більше не передаються в тілі запиту, а зворотний проксі може обмежувати входи за URL. get_jwt на /jsonrpc тепер відповідає 404 / -32601. Міграція: curl -X POST …/token -u login:password.
  • 📥 Завантаження файлів: новий endpoint POST /{prefix}/{database}/file віддає бінарні файли з функцій PostgreSQL, що повертають набори рядків — один рядок напряму, кілька рядків як потоковий ZIP — з тією самою автентифікацією, перемиканням ролей і обмеженням частоти, що й JSON-RPC. capabilities() повідомляє kind: "file". Застосуйте sql/schema.sql повторно (він ідемпотентний), щоб отримати нові поля.
  • 🧰 Інструменти: новий JWT Signer, що підписує токени локально в браузері з уведеного вручну JWT_SECRET (без доступу до мережі, секрет ніколи не зберігається), скриншоти та хостовані версії кожного інструмента (explorer., sse-tester., jwt-getter., jwt-signer.pgarachne.com), клікабельні картки й перехресні посилання. Каталоги в tools/ перейменовано на explorer, jwt-getter і sse-tester — оновіть STATIC_FILES_PATH, якщо ви їх віддаєте.
  • 🐛 Виправлення та посилення: функція, що повертає SQL NULL, тепер дає "result": null замість HTTP 500; шляхи ZIP у /file відхиляють імена, ворожі до Windows, і колізії без урахування регістру; порожні результати відкочуються (rollback).
  • 📚 Документація та залежності: покроковий Quick Start, сторінка JSON-RPC як чиста довідка, архітектурне рішення «Чому PostgreSQL», поради щодо зворотного проксі для великих завантажень і оновлені модулі Go (оновлення безпеки golang.org/x/net).

v2.2.0

  • 🔑 Необов’язковий JWT: JWT_SECRET більше не обов’язковий. Без нього підтримка JWT вимкнена (get_jwt повертає 404 / -32601), а клієнти використовують облікові дані HTTP Basic або API-токени.
  • 🛡️ Обмеження спроб для всіх методів автентифікації (безпека): LOGIN_RATE_LIMIT тепер охоплює також HTTP Basic і Bearer (JWT/API-токен) на всіх ендпоінтах, а не лише get_jwt. Раніше паролі можна було підбирати без обмежень через Authorization: Basic.
  • 🔒 Доступ лише на основі привілеїв (breaking): pgarachne.allowed_schemas() видалено. capabilities() (а отже, MCP tools/list та експорт OpenAPI) показує кожну jsonb-функцію, яку викликач може виконати і схемою якої може користуватися. Відкличте EXECUTE/USAGE, де це небажано; див. сторінку Безпека.
  • ⚠️ Інші несумісні зміни: save_idempotency_key тепер приймає область дії за роллю (повторно застосуйте sql/schema.sql перед оновленням бінарного файлу), universal_update/universal_delete відхиляють порожні фільтри, якщо не передано "all": true, а universal_read у select приймає лише * або прості імена стовпців (закриває діру SQL-ін’єкції).
  • 🐛 Виправлення: взаємне блокування SSE під час перепідключення listener, повільні або невдалі входи, що блокували інші запити, відображення аргументів у MCP prompts/get, некоректний коментар функції, що ламав capabilities, «falsy»-результати, показані в Explorer як помилки, та XSS у перегляді результатів Explorer.
  • 📚 Документація: новий llms-full.txt, картка GitHub Sponsors, підказки до іконок навігації; ця сторінка тепер також містить v2.0.3 та v2.1.0.

v2.1.0

  • 📄 Експорт OpenAPI для кожного методу: generate_openapi_spec() тепер також генерує окремий шлях лише для документації для кожного відкритого методу — для інструментів, які очікують одну операцію на шлях (Swagger UI, Postman, генератори коду). Новий ендпоінт openapi.yaml повертає ту саму специфікацію у форматі YAML.
  • 🔒 Автентифікований експорт OpenAPI з фільтрацією за роллю: /openapi.json тепер вимагає такої ж автентифікації, як і /jsonrpc, і показує лише ті методи, які дозволено виконувати ролі викликача — раніше ендпоінт не вимагав автентифікації та показував усі методи будь-кому.
  • 🔌 Оновлення протоколу MCP: ендпоінт MCP тепер підтримує виключно версію протоколу 2026-07-28; старе узгодження initialize/ping більше не підтримується. Повний опис — у AGENTS.md.
  • 🐛 Виправлення пулу з’єднань: пули з’єднань прямої автентифікації (Basic Auth) тепер коректно видаляються під час простою — виправлено проблему, через яку звичайна ротація паролів могла врешті-решт заблокувати нові облікові дані.
  • 📦 Оновлення залежностей та CI: звичайне оновлення залежностей Go (тепер вимагає Go 1.26) та відповідні оновлення інструментів CI.

v2.0.3

  • 🔒 Посилення безпеки: перемикання ролей більше не формує SQL шляхом конкатенації рядків (натомість використовується параметризована функція set_config()), роздавання статичних файлів тепер розв’язує шляхи через os.Root, щоб символьне посилання не могло вийти за межі каталогу, що роздається, посилено права доступу до файлів логів/PID, а також посилено перевірку посилань результатів пошуку на сайті документації.
  • 🚀 Нова сторінка «Швидкий старт» (усіма 10 мовами): швидкий шлях від встановлення до робочого ендпоінта, без повного обхідного шляху через розділи «Встановлення»/«Конфігурація».
  • 📄 Виявлюваність llms.txt: посилання додано на головну сторінку, сторінку MCP, у README та в заголовок кожної сторінки, щоб краулери LLM могли його знайти.
  • 🐛 Виправлення: перемикач мобільного меню тепер коректно показує робочу кнопку «Головна» на широких екранах, посилання на кастомній сторінці 404 тепер коректно розв’язуються незалежно від глибини URL, а мобільне меню отримало пункт «Головна».

v2.0.2

  • 🔒 Посилення безпеки: усунено кілька результатів статичного аналізу — ключі кешу пулу прямої автентифікації тепер використовують HMAC (замість звичайного SHA-256), додано явну перевірку, що файли, які роздаються статично, не можуть вийти за межі налаштованого каталогу, HTML-екранування тексту статусу входу в SSE Tester, білий список URL-схем для посилань результатів пошуку на сайті документації, а також права з найменшими привілеями для CI workflow.
  • 📦 Оновлення залежностей: оновлено всі залежності Go, зокрема gin-gonic/gin до v1.12.0 та lib/pq до v1.12.3 (тепер вимагає Go 1.25).
  • 🌐 3 нові мови: сайт документації тепер доступний польською, українською та грецькою — загалом 10 мов.

v2.0.1

  • 🔒 Виправлення безпеки: Оновлено транзитивну залежність HTTP/3 quic-go до v0.59.1, що усуває вразливість у розширенні QPACK trailer, яка могла дозволити зловмиснику виснажити пам’ять сервера або клієнта.
  • 🎨 Покращення сайту документації: Новий перемикач світлої/темної/автоматичної теми та перемикач мов лише з іконкою, іконки-посилання GitHub/Підтримка в навігаційній панелі, виправлені двічі закодовані структуровані дані JSON-LD та розширений llms.txt.

v2.0.0

  • 🔒 Безпечні значення за замовчуванням (з порушенням сумісності): DB_SSLMODE тепер за замовчуванням має значення require, ALLOWED_ORIGINS більше не встановлюється за замовчуванням у *, а JWT_SECRET має бути щонайменше 32 байти. Перед оновленням наявні розгортання повинні переглянути свою конфігурацію.
  • 🧹 Очищення застарілого коду: Видалено маршрути перенаправлення /api/… та /sse/…, а також застарілий псевдонім JSON-RPC login. Використовуйте безпосередньо /{prefix}/:database/… та get_jwt.
  • 🛡️ Суворіша автентифікація та обробка помилок: Новий ліміт швидкості входу на IP-адресу (LOGIN_RATE_LIMIT_PER_IP) закриває прогалину для credential spraying, а помилки інструментів MCP більше не розкривають необроблений текст помилок PostgreSQL за замовчуванням (можна повернути через MCP_SQL_ERROR_DETAIL).
  • ⚙️ Налаштовувані ліміти з’єднань: Обмеження пулу з’єднань для прямої автентифікації тепер налаштовується через DIRECT_POOL_LIMIT.
  • 🔑 Підтримка зовнішнього постачальника ідентичності (BYO JWT): Нові налаштування JWT_ISSUER, JWT_AUDIENCE та JWT_LEEWAY прив’язують видані токени до конкретного видавця/аудиторії та налаштовують допуск розбіжності часу.
  • 🧰 Нові інструменти: Окремі JWT Getter (/tools/get-jwt) та SSE Tester (/tools/test-sse) доповнюють Explorer для швидкого ручного тестування.
  • 🐛 Виправлення надійності: Виправлено зависання завершення роботи SSE та помилку відновлення мертвого з’єднання, яка могла призвести до неможливості сервера повторно підключитися до PostgreSQL.
  • 🧪 Посилення CI: До кожної збірки додано golangci-lint, детектор гонок даних Go та govulncheck, а також розширено покриття тестами.
  • 📦 Процес релізу: Додано CHANGELOG.md і розділено робочий процес релізу на make release-local (збірка та перевірка) та make release (тег, публікація, оновлення Homebrew tap).

v1.3.0

  • 🌐 PgArachne Explorer – сучасний PWA: Повне візуальне та функціональне оновлення – темна/світла тема (автоматично), адаптивна компонування карток, підсвічування синтаксису JSON, кнопка копіювання в буфер обміну, кращий UX автентифікації (вкладки пароль/токен), підтримка встановлення PWA (маніфест, іконки, service worker), посилання для спільного доступу через параметр ?url=….
  • 🛠️ Підтримка Model Context Protocol (MCP): Новий ендпоінт /{prefix}/{db}/mcp зі стандартними методами resources/list, resources/read, prompts/list, prompts/get – повністю підтримується функціями PostgreSQL і повторно використовує наявну автентифікацію та перемикання ролей.
  • 🔧 Налаштовуваний префікс API: Значення за замовчуванням змінено на /db/{database}/jsonrpc та /db/{database}/sse, а застарілі шляхи /api/… та /sse/… залишені як перенаправлення 307 для зворотної сумісності. Керується через змінну середовища API_PREFIX.
  • 🛡️ Захист ідемпотентності: Необов’язкове поле idempotencyKey у запитах JSON-RPC – автоматичне виявлення дублікатів (HTTP 409 + код помилки при колізії) за допомогою pgarachne.save_idempotency_key().
  • 📚 Покращення документації: Новий розділ /tools/ із картками (Explorer + очікуваний macOS Toolbar), нова сторінка «Architectural Decisions», SECURITY.md з інструкціями щодо звітування про вразливості, краща типографіка в усіх мовах завдяки TypoLima, покращена підтримка сторінки 404 для GitHub Pages.
  • 📝 Перейменування методу входу: Метод JSON-RPC login перейменовано на get_jwt (стара назва залишається як застарілий псевдонім із попередженням у логах).
  • 📊 Очищення логування: При логуванні у файл консоль показує лише мінімальну інформацію про запуск → чистіший вивід у продакшн- / docker-середовищах.

v1.2.0

  • 🛡️ Безпека: Перевірка токена доступу тепер відбувається перед встановленням з’єднання з базою даних. Покращено захист від підробки IP-адрес (додано налаштування TRUSTED_PROXIES) та приховування внутрішніх помилок бази даних від кінцевих користувачів.
  • 📊 Ізольовані метрики: Ендпоінт Prometheus /metrics переміщено з публічного API на власний захищений порт (за замовчуванням доступний лише на 127.0.0.1:9090).
  • 📦 Новий варіант встановлення: Проєкт тепер має офіційний Homebrew tap для macOS і Linux. Збірки підписані та створені за допомогою GoReleaser.
  • 📚 Оновлена документація: Повністю новий вигляд на основі фреймворку Hugo. Додано блискавичний повнотекстовий пошук, можливість копіювання коду та приклади для продакшн-розгортання (посилення Nginx, BYO JWT).
  • ⚙️ Покращене керування демоном: Додано підтримку налаштування власного шляху PID_FILE.

v1.1.0

  • 🔌 Уніфікований API: Усі викликаються через POST /api/<db> (метод, що викликається, вказується в тілі JSON-RPC).
  • ⚡ Сповіщення в реальному часі: Новий ендпоінт GET /sse/<db>?channels=... для прослуховування подій бази даних з підтримкою кількох каналів.
  • 📈 Спостережуваність: Детальні метрики Prometheus для HTTP, автентифікації, JSON-RPC та SSE.
  • 🏋️ Значні покращення стабільності: Захист від повільних клієнтів, суворі таймаути та автоматичне очищення з’єднань.