feat: client ensurePeered API, connection flow swap, WS event handlers for peer rejection

This commit is contained in:
Jannis Braun
2026-04-09 13:56:18 +02:00
parent 5f700c1a51
commit 4285e44d2d
4 changed files with 58 additions and 5 deletions
+18 -4
View File
@@ -341,11 +341,25 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
// Open WebSocket connection to the remote instance
connectInstance(origin, response.token);
// Initiate server-to-server peering for DM relay (non-fatal)
// Ensure server-to-server peering for DM relay (non-fatal)
try {
await api.federation.initiatePeering({ remoteOrigin: origin });
const peerResult = await api.federation.ensurePeered({ remoteOrigin: origin });
if (peerResult.peeringStatus === 'rejected') {
const { addToast } = useUIStore.getState();
addToast(
`Cross-instance messaging unavailable — ${instance.label} requires manual peering approval`,
'warning',
10000,
);
} else if (peerResult.peeringStatus === 'pending') {
const { addToast } = useUIStore.getState();
addToast(
`Peering with ${instance.label} in progress — cross-instance messaging will be available shortly`,
'info',
);
}
} catch (err) {
console.warn('[federation] Peering initiation failed (non-fatal):', err);
console.warn('[federation] Peering attempt failed (non-fatal):', err);
}
// Sync instance list to all instances (fire-and-forget)
@@ -977,7 +991,7 @@ export const useInstanceStore = create<InstanceState>((set, get) => ({
connectInstance(origin, cachedEntry.token);
// Initiate server-to-server peering for DM relay (non-fatal, idempotent)
api.federation.initiatePeering({ remoteOrigin: origin }).catch(() => {});
api.federation.ensurePeered({ remoteOrigin: origin }).catch(() => {});
} catch (err) {
if (isNetworkError(err)) {
// Instance unreachable (NAT hairpinning, DNS, server down) — token may still be valid