fix: handle 403 (inactive peer) alongside 401 for stale peer re-handshake

This commit is contained in:
Jannis Braun
2026-04-20 16:32:24 +02:00
parent ce33ccf69e
commit e4e0d0d1f1
@@ -261,14 +261,15 @@ async function processOutboxTick(): Promise<void> {
}) })
.where(eq(schema.federationPeers.id, peerId)) .where(eq(schema.federationPeers.id, peerId))
.run(); .run();
} else if (response.status === 401) { } else if (response.status === 401 || response.status === 403) {
// 401 = HMAC verification failed on the remote side. // 401 = HMAC verification failed (remote deleted our peer record entirely)
// This means the remote deleted/revoked our peer record — our local // 403 = Peer exists but is not active (remote revoked/rejected us)
// peer is stale. Reset to 'pending' so resolvePendingPeers() triggers // Both mean the peer relationship is broken on the remote side. Reset to
// a fresh handshake via ensurePeered() on the next tick. // 'pending' so resolvePendingPeers() triggers a fresh handshake via
// ensurePeered() on the next tick.
// Outbox entries are preserved (same peer ID) and will deliver after re-peering. // Outbox entries are preserved (same peer ID) and will deliver after re-peering.
console.warn( console.warn(
`[federation-worker] Peer ${peerOrigin} returned 401 (HMAC rejected) — resetting to pending for re-handshake`, `[federation-worker] Peer ${peerOrigin} returned ${response.status} (peer stale) — resetting to pending for re-handshake`,
); );
db.update(schema.federationPeers) db.update(schema.federationPeers)
.set({ .set({