Що нового

4 хв читання

Що нового

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

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.
  • 🏋️ Значні покращення стабільності: Захист від повільних клієнтів, суворі таймаути та автоматичне очищення з’єднань.