fix(machine): guard the availability beacon sign against bunker blips

The beacon's createSignedEvent (a bunker round-trip) sat OUTSIDE its try/catch,
and publish() is fire-and-forget — so a transient BunkerTimeoutError /
BunkerRejectedError during the periodic sign surfaced as an uncaught promise
rejection (seen on the Sintra after a bunker watchdog blip during the cash-in
smoke). Move the sign inside the try; the beacon re-publishes every interval, so
swallow + log is correct.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Padreug 2026-06-22 15:43:09 +02:00 • committed by padreug
commit a762a7ea40

View file

@ -73,19 +73,22 @@ export function useAvailabilityBroadcast(options: UseAvailabilityBroadcastOption
model, model,
}) })
const event = await createSignedEvent(signer, { // Signing goes through the bunker, so it can throw BunkerTimeoutError /
kind: 30078, // BunkerRejectedError — keep it INSIDE the try so a transient signer blip
created_at: Math.floor(Date.now() / 1000), // is swallowed (the beacon re-publishes every interval) rather than
tags: [['d', 'atm-availability']], // surfacing as an uncaught rejection. `publish()` is fire-and-forget.
content,
})
try { try {
const event = await createSignedEvent(signer, {
kind: 30078,
created_at: Math.floor(Date.now() / 1000),
tags: [['d', 'atm-availability']],
content,
})
await nostrClient.publish(event) await nostrClient.publish(event)
lastSnapshot = snap lastSnapshot = snap
console.log('[Availability] Published:', content) console.log('[Availability] Published:', content)
} catch (e) { } catch (e) {
console.warn('[Availability] Failed to publish:', e) console.warn('[Availability] Publish failed (sign or relay):', e)
} }
} }