v0.1.0:24 — Keysat licensing service end-to-end

Daemon, StartOS wrapper, admin SPA, public buy/thank-you pages,
discount codes, free-license redemption, Apply-discount UX,
self-licensing, and v0.1.0 release notes.
This commit is contained in:
Grant
2026-05-07 10:33:39 -05:00
parent 432250bffc
commit 6ac118ae70
90 changed files with 14896 additions and 524 deletions
+43 -16
View File
@@ -1,29 +1,56 @@
// StartOS entry point. Glues every module together so `start-cli` can pack
// the package.
// StartOS entry point. Composes every module together so `start-cli` can
// pack the package and so StartOS can find the expected exports.
//
// The ABI StartOS expects (see ExpectedExports in the SDK):
// - manifest
// - main
// - init
// - uninit
// - createBackup
// - actions
//
// In SDK 0.4.0 `setupInit(...inits)` / `setupUninit(...uninits)` are variadic
// — each argument is either an InitScript/UninitScript or an
// InitFn/UninitFn. They run in the order provided.
//
// Ordering of init scripts matters:
// 1. restoreInit — repopulates the main volume from backup if applicable
// 2. versions — runs any pending migrations from the version graph
// 3. initFn — our own first-boot key generation
// 4. setDependencies — publishes our declared dependency on BTCPay
// 5. setInterfaces — publishes the public-facing API + webhook URL
// 6. actions — registers the admin actions with StartOS
import { buildManifest } from '@start9labs/start-sdk'
import { sdk } from './sdk'
import { actions } from './actions'
import { createBackup, restoreBackup } from './backups'
import { createBackup, restoreInit } from './backups'
import { setDependencies } from './dependencies'
import { initFn, uninitFn } from './init'
import { setInterfaces } from './interfaces'
import { main } from './main'
import { manifest } from './manifest'
import { manifest as sdkManifest } from './manifest'
import { versions } from './versions'
export const { packageInit, packageUninit, containerInit } = sdk.setupPackageInit({
init: initFn,
uninit: uninitFn,
})
// `setupManifest(...)` in `./manifest` produces the raw SDKManifest.
// `buildManifest(versions, sdkManifest)` injects `version`, `sdkVersion`,
// `releaseNotes`, `canMigrateTo/From`, normalized `alerts`, `images`
// defaults, etc — producing the final T.Manifest that `start-cli s9pk pack`
// serializes. Exporting the raw SDKManifest here (without buildManifest)
// causes start-cli to fail with: `Deserialization Error: missing field
// `version``.
export const manifest = buildManifest(versions, sdkManifest)
export {
manifest,
main,
actions,
export const init = sdk.setupInit(
restoreInit,
versions,
initFn,
setDependencies,
setInterfaces,
createBackup,
restoreBackup,
versions,
}
actions,
)
export const uninit = sdk.setupUninit(versions, uninitFn)
export { main, actions, createBackup }