feat(federation): add fire-and-forget S2S typing relay

sendTypingRelay() mirrors sendCallRelay() — direct POST to peers,
no outbox, no retry. Uses federatedId for cross-instance channel
identification. Wired into handleDmTypingStart() for typing_start
and broadcastDmMessage() for typing_stop.
This commit is contained in:
Jannis Braun
2026-04-01 12:53:55 +02:00
parent b5fbc9d90e
commit b3011fb3da
3 changed files with 69 additions and 1 deletions
+4 -1
View File
@@ -11,7 +11,7 @@ import { ACTIVITY_LIMITS } from '@backspace/shared/src/activities.js';
import { sanitizeUser } from '../utils/sanitize.js';
import { deleteAttachmentFiles } from '../utils/fileCleanup.js';
import { resolveEmbeds, reResolveEmbeds, embedRowToEmbed } from '../utils/embedResolver.js';
import { appendMutationLog, queueOutboxEvent, queueDmRelay, getGroupDmTargetOrigins, sendCallRelay, computeFederatedId } from '../utils/federationOutbox.js';
import { appendMutationLog, queueOutboxEvent, queueDmRelay, getGroupDmTargetOrigins, sendCallRelay, computeFederatedId, sendTypingRelay } from '../utils/federationOutbox.js';
import { getOurOrigin } from '../utils/federationAuth.js';
import { generateFederatedCallToken } from '../routes/livekit.js';
import { config } from '../config.js';
@@ -938,6 +938,9 @@ function handleDmTypingStart(event: Record<string, unknown>, userId: string, use
}
}
// Relay typing indicator to remote peers (fire-and-forget)
sendTypingRelay(dmChannelId, 'dm_typing_start', userId);
const timeout = setTimeout(() => {
typingTimeouts.delete(key);
}, 5000);