API · v1

Документация GitWave API

Zero-knowledge DevOps-шлюз. Ниже — подробное руководство как взаимодействовать, затем интерактивный справочник Swagger (можно вызывать endpoint'ы прямо со страницы).

Главный принцип. Сервер хранит только шифротекст. Шифрование и расшифровка идут на клиенте (CLI, WASM в браузере, десктоп, аттестованный CI-раннер). Любой endpoint с телом application/octet-stream отдаёт зашифрованные байты; JSON-endpoint'ы — это только метаданные (счётчики, статусы, идентификаторы).

1. Базовый адрес и формат

2. Аутентификация

Каждый запрос к /v1/* требует заголовок Authorization: Bearer <jwt>. Токен — подписанный OIDC JWT (ES256). Получить его можно двумя способами:

Способ A — Aris Drive (hands-free, рекомендуется)

Локальный агент Aris Drive выдаёт токен без ручного ввода:

# получить токен
TOKEN=$(curl -s https://gitwave.ru/aris-drive/agent/session | jq -r .token)

# использовать его
curl -s https://gitwave.ru/v1/repos -H "authorization: Bearer $TOKEN"

Способ B — Aris ID (OIDC, в браузере)

Откройте /aris-id/authorize?redirect_uri=https://gitwave.ru/app&state=gw. После согласия произойдёт редирект на redirect_uri#access_token=<jwt> — токен во фрагменте URL.

Claims токена. sub (пользователь), company_id, device_id, roles (например developer), scopes (repo.read, repo.write). Сервер проверяет подпись и issuer; срок жизни ограничен.

3. Быстрый старт

export URL=https://gitwave.ru
TOKEN=$(curl -s $URL/aris-drive/agent/session | jq -r .token)

# список репозиториев (метаданные)
curl -s $URL/v1/repos -H "authorization: Bearer $TOKEN" | jq

# создать репозиторий
curl -s -X POST $URL/v1/repos -H "authorization: Bearer $TOKEN" \
     -H "content-type: application/json" -d '{"repo_id":"payments"}'

4. Полный жизненный цикл репозитория

На практике всю криптографию делает CLI/приложение (gitwave init, gitwave commit). Ниже — что при этом происходит на уровне API, чтобы вы могли встроиться сами.

  1. POST/v1/repos — создать репозиторий.
  2. PUT/v1/repos/{repo}/epochs/0 — положить обёрнутый ключ репозитория (эпоха 0). Клиент генерирует RepoKey и оборачивает его под устройство (ECDH P-256).
  3. PUT/v1/repos/{repo}/devices/{device_id} — подписанное одобрение устройства (цепочка доверия).
  4. PUT/v1/repos/{repo}/objects/{oid} — для каждого git-объекта: зашифровать локально (AES-256-GCM) и загрузить шифротекст.
  5. PUT/v1/repos/{repo}/refs/main — указать ветку на oid нового коммита.

Чтение и расшифровка

  1. GET/v1/repos/{repo}/objects — выгрузить карту oid → hex(шифротекст).
  2. GET/aris-drive/agent/keys/{repo} — получить device-ключ (hex).
  3. Развернуть RepoKey из эпохи и расшифровать объекты на устройстве. Сервер в этом не участвует.
# пример: объект приходит шифротекстом
curl -s $URL/v1/repos/demo/objects/04163b25 -H "authorization: Bearer $TOKEN" | xxd | head
# 96c9b846 a756217b 0f0063f7 ...  ← сервер видит только это

5. Что шифротекст, а что метаданные

EndpointТелоСервер читает?
/v1/repos/{r}/objects/{oid}шифротекстнет
/v1/repos/{r}/epochs/{n}обёрнутый ключнет
/v1/repos/{r}/devices/{id}подписанное одобрениенет
/v1/repos/{r}/refs/{name}oid коммитада (метаданные)
/v1/repos, /issues, /docs, /runsJSON-метаданныеда (метаданные)

6. CI/CD и Aris Monitor

7. Issues и ArisDoc

Полный машинно-читаемый контракт: /openapi.json (OpenAPI 3.0). Ниже — интерактивный справочник: раскройте метод, нажмите Try it out, вставьте токен через Authorize и вызовите endpoint вживую.