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:
@@ -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); }
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user