Document mirror client setup wizard and consumer API endpoints
mirror.md: added section 8 covering the 4-step UI wizard flow, wizard vs env var comparison table, and air-gap bundle import via UI and CLI. architecture.md: added 6 consumer API endpoints (GET/PUT /consumer, discover, verify-signature, import, import/status) to REST API section. airgap-operations-runbook.md: cross-reference to UI import alternative. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -526,6 +526,26 @@ GET /domains/{domainId}/status → domain sync status (last gener
|
||||
POST /test → test mirror endpoint connectivity
|
||||
```
|
||||
|
||||
**Mirror consumer configuration** (under `/api/v1/mirror`)
|
||||
|
||||
```
|
||||
GET /consumer → current consumer connector configuration (base address, domain, signature, timeout, connection status, last sync)
|
||||
PUT /consumer → update consumer connector config (base address, domain ID, index path, HTTP timeout, signature settings)
|
||||
POST /consumer/discover → fetch mirror index from base address, return available domains with metadata (domain ID, display name, advisory count, bundle size, export formats, signed status, last generated)
|
||||
POST /consumer/verify-signature → fetch JWS header from selected domain's bundle, return detected algorithm, key ID, and provider
|
||||
```
|
||||
|
||||
The consumer endpoints configure the `StellaOpsMirrorConnector` at runtime without requiring service restarts. Configuration is persisted via `IMirrorConsumerConfigStore` (in-memory, with planned DB backend). The `/consumer/discover` endpoint enables the UI setup wizard to present operators with a list of available domains before committing to a configuration.
|
||||
|
||||
**Air-gap bundle import** (under `/api/v1/mirror`)
|
||||
|
||||
```
|
||||
POST /import → import a mirror bundle from a local filesystem path { bundlePath, verifyChecksums, verifyDsse, trustRootsPath? }
|
||||
GET /import/status → import progress and result (exports imported, total size, errors, warnings)
|
||||
```
|
||||
|
||||
The import endpoint triggers an async import of a mirror bundle directory accessible to the Concelier container. It parses the bundle manifest, verifies SHA-256 checksums (when `verifyChecksums` is true), detects DSSE envelopes (when `verifyDsse` is true), and copies artifacts into the local data store. Import state is tracked by `IMirrorBundleImportStore`. This exposes the same functionality as the CLI `MirrorBundleImportService` via HTTP.
|
||||
|
||||
Mirror domains group export plans with shared rate limits and authentication rules. Exports support multi-value filter shorthands: `sourceCategory` (e.g., `"Distribution"` resolves to all distro sources), `sourceTag` (e.g., `"linux"`), and comma-separated `sourceVendor` values. Domain configuration is persisted in `excititor.mirror_domains` / `excititor.mirror_exports` tables, with env-var config as fallback. The `MirrorExportScheduler` background service periodically regenerates stale bundles (configurable via `RefreshIntervalMinutes`, default 60 minutes).
|
||||
|
||||
**AuthN/Z:** Authority tokens (OpTok) with roles: `concelier.read`, `concelier.admin`, `concelier.export`.
|
||||
|
||||
Reference in New Issue
Block a user