feat: real-time Federation panel updates via WS events
Added federation_peers_changed (no-payload signal) broadcast from every peer state mutation, and federation_approval_request_received when a new approval request is queued. Client subscribes via onFederationPeersChanged callback registry. FederationPanel and PendingApprovals debounce-refetch on any event. sendToAdmins helper broadcasts only to admin users.
This commit is contained in:
@@ -145,6 +145,8 @@ async function performHandshake(
|
||||
.set({ status: 'awaiting_approval' })
|
||||
.where(eq(schema.federationPeers.id, peerId))
|
||||
.run();
|
||||
const { connectionManager } = await import('../ws/handler.js');
|
||||
connectionManager.sendToAdmins({ type: 'federation_peers_changed' as const });
|
||||
return { status: 'pending', error: 'Awaiting admin approval on remote instance' };
|
||||
}
|
||||
|
||||
@@ -154,6 +156,8 @@ async function performHandshake(
|
||||
.set({ status: 'active', lastSeenAt: Date.now() })
|
||||
.where(eq(schema.federationPeers.id, peerId))
|
||||
.run();
|
||||
const { connectionManager } = await import('../ws/handler.js');
|
||||
connectionManager.sendToAdmins({ type: 'federation_peers_changed' as const });
|
||||
return { status: 'active', peerId };
|
||||
}
|
||||
|
||||
@@ -174,6 +178,8 @@ async function performHandshake(
|
||||
.set({ status: 'rejected' })
|
||||
.where(eq(schema.federationPeers.id, peerId))
|
||||
.run();
|
||||
const { connectionManager } = await import('../ws/handler.js');
|
||||
connectionManager.sendToAdmins({ type: 'federation_peers_changed' as const });
|
||||
return { status: 'rejected', error: errorMessage };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user