From b434a736a8bc71b6aa8fd4e83bd74ccb333bfe2d Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Thu, 9 Apr 2026 14:08:54 +0200 Subject: [PATCH] fix: address code review findings (C1, I1, I2) - C1: Include 'unreachable' peers in queueOutboxEvent query to prevent UNIQUE constraint violation when creating placeholders - I1: Add 'rejected' to StatusFilter in FederationPanel so admins can see and manage rejected peers with delete/re-initiate actions - I2: Map ensurePeered 'failed' to 'pending' in peer/ensure response to match spec and client expectations --- packages/server/src/routes/federation.ts | 4 ++-- packages/server/src/utils/federationOutbox.ts | 2 +- .../modals/instanceSettingsPanels/FederationPanel.tsx | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/server/src/routes/federation.ts b/packages/server/src/routes/federation.ts index e0ed0829..dcd2b8c3 100644 --- a/packages/server/src/routes/federation.ts +++ b/packages/server/src/routes/federation.ts @@ -517,9 +517,9 @@ export async function federationRoutes(app: FastifyInstance): Promise { case 'rejected': return reply.code(200).send({ peeringStatus: 'rejected', error: result.error }); case 'failed': - return reply.code(200).send({ peeringStatus: 'failed', error: result.error }); + return reply.code(200).send({ peeringStatus: 'pending', error: result.error }); default: - return reply.code(200).send({ peeringStatus: 'failed', error: 'Unknown peering result' }); + return reply.code(200).send({ peeringStatus: 'pending', error: 'Unknown peering result' }); } }, ); diff --git a/packages/server/src/utils/federationOutbox.ts b/packages/server/src/utils/federationOutbox.ts index 8e3e7a69..822f1748 100644 --- a/packages/server/src/utils/federationOutbox.ts +++ b/packages/server/src/utils/federationOutbox.ts @@ -138,7 +138,7 @@ export function queueOutboxEvent( .select() .from(schema.federationPeers) .where( - inArray(schema.federationPeers.status, ['active', 'pending']), + inArray(schema.federationPeers.status, ['active', 'pending', 'unreachable']), ) .all(); diff --git a/packages/web/src/components/modals/instanceSettingsPanels/FederationPanel.tsx b/packages/web/src/components/modals/instanceSettingsPanels/FederationPanel.tsx index 4b7fb946..81f4747a 100644 --- a/packages/web/src/components/modals/instanceSettingsPanels/FederationPanel.tsx +++ b/packages/web/src/components/modals/instanceSettingsPanels/FederationPanel.tsx @@ -201,7 +201,7 @@ function peerStatusLabel(status: string): string { type PeerView = 'active' | 'revoked'; type SortBy = 'name' | 'lastSeen' | 'dateAdded' | 'failures'; -type StatusFilter = 'active' | 'unreachable' | 'pending'; +type StatusFilter = 'active' | 'unreachable' | 'pending' | 'rejected'; // ─── Filter Dropdown ───────────────────────────────────────────────────────── @@ -263,7 +263,7 @@ function FilterDropdown({ {view === 'active' && ( <>
Status
- {(['active', 'unreachable', 'pending'] as StatusFilter[]).map((s) => ( + {(['active', 'unreachable', 'pending', 'rejected'] as StatusFilter[]).map((s) => (