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

Merged
padreug merged 1 commit from beacon-sign-guard into dev 2026-06-22 13:56:30 +00:00
Showing only changes of commit a762a7ea40 - Show all commits

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>
Padreug 2026-06-22 15:43:09 +02:00 • committed by padreug

View file

@ -73,19 +73,22 @@ export function useAvailabilityBroadcast(options: UseAvailabilityBroadcastOption
model, model,
}) })
// Signing goes through the bunker, so it can throw BunkerTimeoutError /
// BunkerRejectedError — keep it INSIDE the try so a transient signer blip
// is swallowed (the beacon re-publishes every interval) rather than
// surfacing as an uncaught rejection. `publish()` is fire-and-forget.
try {
const event = await createSignedEvent(signer, { const event = await createSignedEvent(signer, {
kind: 30078, kind: 30078,
created_at: Math.floor(Date.now() / 1000), created_at: Math.floor(Date.now() / 1000),
tags: [['d', 'atm-availability']], tags: [['d', 'atm-availability']],
content, content,
}) })
try {
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)
} }
} }