• v1.1.0 e32169aed1

    Balance Server v1.1.0
    CI / Rust (fmt / clippy / test / build) (push) Successful in 1m31s
    CI / HTTP/JSON reference + SQLite persistence (push) Successful in 2m10s
    Docker publish / Build and push image (push) Successful in 11m43s
    Stable

    wt released this 2026-10-31 19:20:34 +00:00 | 0 commits to main since this release

    Сервер синхронизации для контракта экосистемы v2: общие бюджеты, вложения и новые типы записей для счетов, валют, регулярных платежей, целей и долгов. Работает с BalanceFlutter 4.3.0 и BalanceWatch 3.2.0; старые клиенты продолжают работать как раньше.

    Что нового

    • Контракт v2 (docs/CONTRACT_V2.md) — GET /v1/capabilities сообщает клиентам, что умеет сервер. /v1/sync принимает 11 типов записей: к транзакциям, категориям и бюджетам добавились счета, переводы, регулярные платежи, цели, долги, курсы валют, настройки и вложения.
    • Общие бюджеты — отдельные пространства данных со своим курсором (/v1/ledgers). Владелец создаёт пространство и приглашает участников одноразовым кодом на 7 дней (на сервере хранится только хеш кода); участники могут выйти, владелец — удалить участника или всё пространство. Пространство выбирается заголовком X-Balance-Ledger.
    • Вложения (фото чеков, PDF) — PUT/GET /v1/attachments/{sha256}: проверка SHA-256, размера (до 10 МиБ) и типа (JPEG, PNG, HEIC, PDF), повторная загрузка идемпотентна. Файлы хранятся на диске и удаляются, когда на них больше не ссылается ни одна запись.
    • CORS — для новых маршрутов разрешены PUT, PATCH, DELETE и заголовок X-Balance-Ledger, чтобы Web-клиент работал с вложениями и общими бюджетами.

    Совместимость

    • API v1 и личное пространство не изменились: ответы по-прежнему совпадают с эталонной Go-реализацией (tools/compatibility.py).
    • Миграция базы только добавляет таблицы; база 1.0.0 подключается без ручных шагов.
    • Клиенты v1 (нативные iOS/macOS и Android) не видят новых данных, а при правке операции теряют поля счёта, валюты и тегов — обновляйте клиенты вместе с сервером.

    Установка

    Docker-образ (amd64, arm64, armhf):

    docker pull gitea.wthome.ru/balance/balanceserver:1.1.0
    

    Обновление с 1.0.0: остановить контейнер, сделать резервную копию тома /data, запустить новый образ.

    Без Docker: cargo build --locked --release (Rust 1.90+), затем target/release/balance-server с переменной BALANCE_JWT_SECRET.

    Конфигурация

    Новая переменная BALANCE_ATTACHMENTS_DIR — каталог вложений; по умолчанию attachments рядом с базой (в Docker — /data/attachments, внутри того же тома). Остальные: BALANCE_ADDR, BALANCE_DB_PATH, BALANCE_JWT_SECRET (обязательна, ≥ 32 символов), BALANCE_ALLOW_REGISTRATION, BALANCE_ACCESS_TTL, BALANCE_REFRESH_TTL, BALANCE_CORS_ORIGINS — подробности в README.

    Важно

    • Резервная копия теперь — это SQLite (с файлами -wal/-shm или при остановленном сервере) и каталог вложений.
    • Лимит тела запроса 10 МиБ действует только для загрузки вложения; остальные запросы — 2 МиБ, как раньше.
    • Для доступа из сети используйте HTTPS (reverse proxy): Apple-приложения разрешают HTTP только для localhost.

    Проверено

    57 тестов, cargo clippy -D warnings, сверка с эталонными ответами Go, интеграционный прогон BalanceFlutter (v1 и v2) против этого сервера, вход и синхронизация BalanceWatch в симуляторе watchOS.

    Downloads