syntax = "proto3";
package holger.v1;
// Repository service — query and manage artifacts
service RepositoryService {
// Fetch a single artifact by ID
rpc FetchArtifact(FetchArtifactRequest) returns (FetchArtifactResponse);
// List artifacts in a repository (with optional filter)
rpc ListArtifacts(ListArtifactsRequest) returns (ListArtifactsResponse);
// Upload an artifact (write-enabled repos only)
rpc PutArtifact(PutArtifactRequest) returns (PutArtifactResponse);
// Stream download for large artifacts
rpc StreamArtifact(FetchArtifactRequest) returns (stream ArtifactChunk);
}
// Archive service — znippy archive operations
service ArchiveService {
// List files in a znippy archive backing a repository
rpc ListArchiveFiles(ListArchiveFilesRequest) returns (ListArchiveFilesResponse);
// Get archive metadata (file count, total size, compression ratio)
rpc ArchiveInfo(ArchiveInfoRequest) returns (ArchiveInfoResponse);
}
// Health / admin
service AdminService {
// Server health check
rpc Health(HealthRequest) returns (HealthResponse);
// List configured repositories
rpc ListRepositories(ListRepositoriesRequest) returns (ListRepositoriesResponse);
}
// ─── Messages ────────────────────────────────────────────────────────
message ArtifactId {
string namespace = 1; // e.g. groupId for Maven, empty for Rust
string name = 2;
string version = 3;
}
message FetchArtifactRequest {
string repository = 1;
ArtifactId id = 2;
}
message FetchArtifactResponse {
bytes data = 1;
string content_type = 2;
int64 size_bytes = 3;
}
message ArtifactChunk {
bytes data = 1;
}
message ListArtifactsRequest {
string repository = 1;
string name_filter = 2; // optional substring filter
int32 limit = 3;
string page_token = 4;
}
message ArtifactEntry {
ArtifactId id = 1;
int64 size_bytes = 2;
string content_type = 3;
}
message ListArtifactsResponse {
repeated ArtifactEntry artifacts = 1;
string next_page_token = 2;
}
message PutArtifactRequest {
string repository = 1;
ArtifactId id = 2;
bytes data = 3;
}
message PutArtifactResponse {
bool success = 1;
string message = 2;
}
message ListArchiveFilesRequest {
string repository = 1;
string prefix = 2; // optional path prefix filter
}
message ListArchiveFilesResponse {
repeated string paths = 1;
int64 total_files = 2;
}
message ArchiveInfoRequest {
string repository = 1;
}
message ArchiveInfoResponse {
int64 file_count = 1;
int64 total_uncompressed_bytes = 2;
string archive_path = 3;
}
message HealthRequest {}
message HealthResponse {
string status = 1; // "ok"
string version = 2;
int64 uptime_seconds = 3;
}
message ListRepositoriesRequest {}
message RepositoryInfo {
string name = 1;
string repo_type = 2; // "rust", "maven3"
bool writable = 3;
bool has_archive = 4;
}
message ListRepositoriesResponse {
repeated RepositoryInfo repositories = 1;
}