imp/exp/show/cookie
Build Service / BuildPackage (push) Has been cancelled

This commit is contained in:
2026-05-14 18:27:20 -04:00
parent 172e3f63ac
commit 2cdc4a5f34
9 changed files with 409 additions and 38 deletions
+79 -34
View File
@@ -33,6 +33,7 @@ export const main = sdk.setupMain(async ({ effects }) => {
SPACED_BITCOIN_RPC_URL: `http://${BITCOIND_RPC_HOSTNAME}:${BITCOIND_RPC_PORT}`,
SPACED_BITCOIN_RPC_USER: btcAuth.username,
SPACED_BITCOIN_RPC_PASSWORD: btcAuth.password,
SPACED_RPC_COOKIE: `/data/mainnet/.cookie`,
// legacy aliases for `bitcoin-cli` / shell helpers that read these names
BTC_RPC_HOST: BITCOIND_RPC_HOSTNAME,
BTC_RPC_PORT: String(BITCOIND_RPC_PORT),
@@ -136,51 +137,95 @@ SPACES_BASHRC_EOF`],
ready: {
display: i18n('Spaced Sync'),
fn: async () => {
const probe = await spacedSub.exec(
[
'bash',
'-c',
`/root/.cargo/bin/space-cli --chain ${SPACED_CHAIN} --rpc-cookie ${dataDir}/${SPACED_CHAIN}/.cookie getserverinfo`,
],
{},
)
if (probe.exitCode !== 0) {
return {
result: 'starting',
message: i18n(
'spaced is querying Bitcoin and indexing — this can take a while on first run.',
),
}
}
const stdout = (probe.stdout ?? '').toString()
let progress = 0
try {
const parsed = JSON.parse(stdout) as {
const probe = await spacedSub.exec(
[
'/root/.cargo/bin/space-cli',
'--chain',
SPACED_CHAIN,
'--rpc-cookie',
`${dataDir}/${SPACED_CHAIN}/.cookie`,
'--output-format',
'json',
'getserverinfo',
],
{},
)
const stderr = (probe.stderr ?? '').toString().trim()
const stdoutText = (probe.stdout ?? '').toString()
const stdoutTrimmed = stdoutText.trim()
if (probe.exitCode !== 0) {
return {
result: 'failure',
message: i18n('space-cli exited ${code}: ${error}', {
code: String(probe.exitCode),
error: (stderr || stdoutTrimmed || '<no output>').slice(0, 200),
}),
}
}
let parsed: {
ready?: boolean
progress?: number
chain?: { blocks?: number; headers?: number }
}
if (parsed.ready === true) {
try {
parsed = JSON.parse(stdoutText)
} catch {
return {
result: 'success',
message: i18n('spaced is fully synced.'),
result: 'failure',
message: i18n(
'getserverinfo non-JSON. stdout=${stdout} stderr=${stderr}',
{
stdout: (stdoutTrimmed || '<empty>').slice(0, 160),
stderr: (stderr || '<empty>').slice(0, 160),
},
),
}
}
progress = Math.floor((parsed.progress ?? 0) * 100)
} catch {
// fall through to loading
}
return {
result: 'loading',
message: i18n('spaced is indexing. Progress: ${pct}%', {
pct: String(progress),
}),
const progress = Math.min(
100,
Math.max(0, Math.round((parsed.progress ?? 0) * 100)),
)
const blocks = parsed.chain?.blocks ?? 0
const headers = parsed.chain?.headers ?? 0
if (parsed.ready === true && progress >= 100) {
return {
result: 'success',
message: i18n(
'spaced is fully synced (blocks ${blocks} / headers ${headers}).',
{ blocks: String(blocks), headers: String(headers) },
),
}
}
return {
result: 'loading',
message: i18n(
'spaced is indexing: ${pct}% (blocks ${blocks} / headers ${headers}).',
{
pct: String(progress),
blocks: String(blocks),
headers: String(headers),
},
),
}
} catch (e) {
return {
result: 'failure',
message: i18n(
'Spaced Sync health check crashed: ${error}',
{ error: (e as Error)?.message ?? String(e) },
),
}
}
},
gracePeriod: 300_000,
gracePeriod: 30_000,
trigger: sdk.trigger.cooldownTrigger(30_000),
},
requires: ['spaced'],
})