feat(federation): queue S2S presence_update on auth/disconnect/status/activity changes

New FederationPresenceUpdatePayload + queuePresenceRelay() helper. Five WS
sites now project the native user's status (and optional activities) to all
active peers via the outbox: WS auth-success, finalizeDisconnect,
manual presence_update, activity_update, showActivity-toggle clear.

Outbox-only (no mutation-log entry) — presence is ephemeral; the upcoming
peer-activation hook re-emits a fresh snapshot so peers recovering from
unreachable converge without history replay. No-op for replicated users.
This commit is contained in:
Jannis Braun
2026-05-05 16:01:28 +02:00
parent bdbc90ebd2
commit 613424e1c7
6 changed files with 230 additions and 1 deletions
+11
View File
@@ -447,6 +447,17 @@ export async function userRoutes(app: FastifyInstance): Promise<void> {
connectionManager.sendToSpace(spaceId, clearPayload, request.userId);
}
connectionManager.sendToUser(request.userId, clearPayload);
// S2S: project the cleared-activities snapshot to all active peers.
void import('../utils/federationPresence.js').then(({ queuePresenceRelay }) => {
try {
queuePresenceRelay(
request.userId,
(connectionManager.getUserStatus(request.userId) ?? 'online') as 'online' | 'idle' | 'dnd' | 'offline',
[],
);
} catch (e) { console.warn('[users] queuePresenceRelay(showActivity-clear) failed', e); }
});
}
}