nectar/kinode/packages/app_store/api/app_store:sys-v0.wit
2024-06-03 20:32:19 -06:00

160 lines
3.5 KiB
Plaintext

interface main {
//
// app store API as presented by main:app_store:sys-v0
//
use standard.{package-id};
record onchain-metadata {
name: option<string>,
description: option<string>,
image: option<string>,
external-url: option<string>,
animation-url: option<string>,
properties: onchain-properties,
}
record onchain-properties {
package-name: string,
publisher: string,
current-version: string,
mirrors: list<string>,
code-hashes: list<tuple<string, string>>,
license: option<string>,
screenshots: option<list<string>>,
wit-version: option<u32>,
dependencies: option<list<string>>,
}
variant request {
remote(remote-request),
local(local-request),
}
variant response {
remote(remote-response),
local(local-response),
}
variant remote-request {
download(remote-download-request),
}
record remote-download-request {
package-id: package-id,
desired-version-hash: option<string>,
}
variant remote-response {
download-approved,
download-denied(reason),
}
variant reason {
no-package,
not-mirroring,
hash-mismatch(hash-mismatch),
file-not-found,
worker-spawn-failed
}
record hash-mismatch {
requested: string,
have: string,
}
variant local-request {
new-package(new-package-request),
download(download-request),
install(package-id),
uninstall(package-id),
start-mirroring(package-id),
stop-mirroring(package-id),
start-auto-update(package-id),
stop-auto-update(package-id),
rebuild-index,
apis,
get-api(package-id),
}
record new-package-request {
package-id: package-id,
metadata: onchain-metadata,
mirror: bool,
}
record download-request {
package-id: package-id,
download-from: string,
mirror: bool,
auto-update: bool,
desired-version-hash: option<string>,
}
variant local-response {
new-package-response(new-package-response),
download-response(download-response),
install-response(install-response),
uninstall-response(uninstall-response),
mirror-response(mirror-response),
auto-update-response(auto-update-response),
rebuild-index-response(rebuild-index-response),
apis-response(apis-response),
get-api-response(get-api-response),
}
enum new-package-response {
success,
no-blob,
install-failed,
already-exists,
}
variant download-response {
started,
bad-response,
denied(reason),
already-exists,
already-downloading,
}
enum install-response {
success,
failure, // TODO
}
enum uninstall-response {
success,
failure, // TODO
}
enum mirror-response {
success,
failure, // TODO
}
enum auto-update-response {
success,
failure, // TODO
}
enum rebuild-index-response {
success,
failure, // TODO
}
record apis-response {
apis: list<package-id>,
}
// the API itself will be in response blob if success!
enum get-api-response {
success,
failure, // TODO
}
}
world app-store-sys-v0 {
import main;
include process-v0;
}