Files
invest-harness/designDocument/api/catalog-api.md
T

3.8 KiB
Raw Blame History

API каталога

Общие правила: conventions.md. Автор публикации — publisher соответствующего tenant. Читатель видит public или разрешённые tenant/private пакеты.

Метод и путь Запрос Ответ Доступ / особые ошибки
GET /v1/packages kind, query, cursor, limit 200 Page Доступные пакеты
GET /v1/packages/{id} — 200 Package 404 для скрытого
POST /v1/packages kind, name, description, visibility 201 Package Publisher; 409 имя занято
PATCH /v1/packages/{id} description?, visibility?; If-Match 200 Package Publisher; нельзя менять kind
GET /v1/packages/{id}/versions cursor, limit 200 Page Читатель
GET /v1/packages/{id}/versions/{version} — 200 PackageVersion Читатель
POST /v1/packages/{id}/versions version, manifest 201 VersionDraft Publisher; Idempotency-Key
POST /v1/packages/{id}/versions/{version}/upload mediaType, sizeBytes, digest 201 UploadGrant Publisher; ограниченный путь
POST /v1/packages/{id}/versions/{version}/publish artifactRef, digest 200 PackageVersion Publisher; 409 другая версия; 422 несовместимость
POST /v1/packages/{id}/versions/{version}/policy status, reason; If-Match 200 VersionPolicy Admin; status deprecated/blocked/published
POST /v1/resolutions templateVersionId, environment 200 Resolution Читатель всех зависимостей; 422 conflict
GET /v1/package-versions/{id}/config — 200 ConfigBundle Закреплённые schema, defaults, uiSchema и digest
POST /v1/package-versions/{id}/download artifactDigest 200 DownloadGrant Повторная проверка policy и доступа

Формы

Package: id, tenantId, kind (harness/plugin/skill/template), name, description, visibility (public/tenant/private), ownerId, createdAt, revision.

VersionDraft: id, packageId, version, manifest, status=draft. PackageVersion: те же идентификаторы, artifactRef, artifactDigest, schemaDigest?, publishedAt. VersionPolicy хранится отдельно: status, reason?, revision. Поле version не разрешает перезапись содержимого.

Resolution: resolutionId, templateVersionId, packages:[{packageVersionId, kind, digest, artifactRef}], configSchemaDigest, requiredCapabilities, requiredPermissions. environment: os, architecture, protocolVersion, availableCapabilities. Resolution не содержит credentials и не обещает бессрочное право скачать заблокированный пакет.

ConfigBundle: schema (JSON Schema), defaults (object), uiSchema (object|null), schemaDigest. UI schema необязательна. OCI upload использует стандартный registry API с ограниченным токеном; upload ручка для него выдаёт registry reference и scope, а не S3 URL.

Пример resolve

{"templateVersionId":"version_company_1","environment":{"os":"linux","architecture":"amd64","protocolVersion":"1","availableCapabilities":["oci-v1","cancel-v1"]}}

Публикация возвращает успех только после проверки артефакта. Если загрузка завершилась, а запрос publish потерялся, повтор с тем же ключом безопасен. Удаление пакета, на который ссылаются сохранённые запуски, не входит в MVP; вместо него используются deprecated/blocked.