Build SpacesOps StartOS package (v1.0.0:0)

Initial .s9pk for SpacesOps, targeting StartOS 0.4.0.x with SDK 1.5.1.

- Single managed daemon from spacesops/spacesops:v1.0.0 (x86_64 + aarch64),
  keeping the image entrypoint (/app/docker-entrypoint.sh node server.js).
  Forces PLATFORM_HOST=0.0.0.0 / PLATFORM_PORT=7264 so the StartOS proxy can
  reach the app. Single `ui` interface on 7264.
- Depends on the Spaces service (>=0.0.9:3) and auto-wires the spaced RPC creds:
  main.ts mounts the Spaces `main` volume read-only at /spaces-data, execs a
  read of its store.json inside the subcontainer, and injects SPACED_RPC_USER/
  PASSWORD + SPACED_RPC_URL=http://spaces.startos:7225. Throws to retry until
  Spaces is installed and seeded.
- Generates a Nostr operator keypair (nostr-tools, bundled by ncc) and a strong
  session secret in idempotent init tasks (.once() reads, allowWriteAfterConst
  merges). Actions: show-operator-credentials, import-operator-key,
  show-admin-credentials (surfaces the fixed admin/Whatever! login with a
  warning), configure-platform (optional relay/mode/CoinGecko/SUBSD).
- Install alert warns to install Spaces first and about the fixed admin
  credential. Backs up the `main` volume.
- Icon: icon.svg (source spacesops.svg). The `spaces` dependency uses
  assets/spaces-icon.png for its Marketplace metadata.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 10:28:18 -04:00
co-authored by Claude Opus 4.7
parent 1e33944be4
commit 35c1013520
38 changed files with 2071 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
export const short = {
en_US: 'Space ownership confirmation and subname sales.',
}
export const long = {
en_US:
'SpacesOps is a web platform for confirming Spaces ownership and selling subspace names. It talks to the Spaces spaced daemon over JSON-RPC, signs operator events on Nostr, and optionally integrates pricing and subname-purchase backends. This package auto-connects to the Spaces service running on the same server.',
}
export const depSpacesDescription = {
en_US:
'Provides the spaced JSON-RPC endpoint SpacesOps queries. SpacesOps auto-connects to it at spaces.startos:7225 using the Spaces RPC credentials, so Spaces must be installed and synced.',
}
+42
View File
@@ -0,0 +1,42 @@
import { setupManifest } from '@start9labs/start-sdk'
import { depSpacesDescription, long, short } from './i18n'
export const manifest = setupManifest({
id: 'spacesops',
title: 'SpacesOps',
license: 'MIT',
packageRepo: 'https://git.spacesops.com/spacesops/spacesops-startos',
upstreamRepo: 'https://git.spacesops.com/spacesops/spacesops',
marketingUrl: 'https://spacesops.com',
donationUrl: null,
docsUrls: [],
description: { short, long },
volumes: ['main'],
images: {
spacesops: {
source: { dockerTag: 'spacesops/spacesops:v1.0.0' },
arch: ['x86_64', 'aarch64'],
},
},
alerts: {
install: {
en_US:
'SpacesOps REQUIRES the Spaces service. Install and sync Spaces first — SpacesOps auto-connects to it at spaces.startos:7225 by reading the Spaces RPC credentials, and will not start until they are available.\n\nWARNING: the admin area is protected by a FIXED, well-known credential baked into this image (username "admin", password "Whatever!") that cannot be changed without rebuilding the image. The admin area can run SQL and manage tenants. Keep this service private (Tor-only) and do NOT expose its admin routes to the public internet. See the "Show Admin Credentials" action.',
},
update: null,
uninstall: null,
restore: null,
start: null,
stop: null,
},
dependencies: {
spaces: {
description: depSpacesDescription,
optional: false,
metadata: {
title: 'Spaces',
icon: 'assets/spaces-icon.png',
},
},
},
})