fix(federation): use participant-aware routing for reactions and deletes in group DMs
This commit is contained in:
@@ -11,7 +11,7 @@ import { ACTIVITY_LIMITS } from '@backspace/shared/src/activities.js';
|
|||||||
import { sanitizeUser } from '../utils/sanitize.js';
|
import { sanitizeUser } from '../utils/sanitize.js';
|
||||||
import { deleteAttachmentFiles } from '../utils/fileCleanup.js';
|
import { deleteAttachmentFiles } from '../utils/fileCleanup.js';
|
||||||
import { resolveEmbeds, reResolveEmbeds, embedRowToEmbed } from '../utils/embedResolver.js';
|
import { resolveEmbeds, reResolveEmbeds, embedRowToEmbed } from '../utils/embedResolver.js';
|
||||||
import { appendMutationLog, queueOutboxEvent, queueDmRelay } from '../utils/federationOutbox.js';
|
import { appendMutationLog, queueOutboxEvent, queueDmRelay, getGroupDmTargetOrigins } from '../utils/federationOutbox.js';
|
||||||
import { getOurOrigin } from '../utils/federationAuth.js';
|
import { getOurOrigin } from '../utils/federationAuth.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1052,7 +1052,8 @@ function handleDmMessageDelete(event: Record<string, unknown>, userId: string):
|
|||||||
|
|
||||||
// Federation: log mutation and queue for relay
|
// Federation: log mutation and queue for relay
|
||||||
appendMutationLog(messageId, msg.dmChannelId, 'delete');
|
appendMutationLog(messageId, msg.dmChannelId, 'delete');
|
||||||
queueOutboxEvent(messageId, msg.dmChannelId, 'delete', JSON.stringify({ deleted: true }));
|
const targetOrigins = getGroupDmTargetOrigins(msg.dmChannelId);
|
||||||
|
queueOutboxEvent(messageId, msg.dmChannelId, 'delete', JSON.stringify({ deleted: true }), targetOrigins);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ─── Reaction Handlers ─────────────────────────────────────────────────────
|
// ─── Reaction Handlers ─────────────────────────────────────────────────────
|
||||||
@@ -1136,6 +1137,7 @@ function handleReactionAdd(event: Record<string, unknown>, userId: string): void
|
|||||||
emoji,
|
emoji,
|
||||||
createdAt: now,
|
createdAt: now,
|
||||||
}));
|
}));
|
||||||
|
const reactionAddTargetOrigins = getGroupDmTargetOrigins(dmMsg.dmChannelId);
|
||||||
queueOutboxEvent(reactionId, dmMsg.dmChannelId, 'reaction_add', JSON.stringify({
|
queueOutboxEvent(reactionId, dmMsg.dmChannelId, 'reaction_add', JSON.stringify({
|
||||||
reaction: {
|
reaction: {
|
||||||
messageId: canonicalMessageId,
|
messageId: canonicalMessageId,
|
||||||
@@ -1145,7 +1147,7 @@ function handleReactionAdd(event: Record<string, unknown>, userId: string): void
|
|||||||
emoji,
|
emoji,
|
||||||
createdAt: now,
|
createdAt: now,
|
||||||
},
|
},
|
||||||
}));
|
}), reactionAddTargetOrigins);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// Unique constraint violation (already reacted)
|
// Unique constraint violation (already reacted)
|
||||||
}
|
}
|
||||||
@@ -1213,6 +1215,7 @@ function handleReactionRemove(event: Record<string, unknown>, userId: string): v
|
|||||||
homeUserId: removingUser?.homeUserId || userId,
|
homeUserId: removingUser?.homeUserId || userId,
|
||||||
emoji,
|
emoji,
|
||||||
}));
|
}));
|
||||||
|
const reactionRemoveTargetOrigins = getGroupDmTargetOrigins(dmMsg.dmChannelId);
|
||||||
queueOutboxEvent(
|
queueOutboxEvent(
|
||||||
`${messageId}:${userId}:${emoji}`,
|
`${messageId}:${userId}:${emoji}`,
|
||||||
dmMsg.dmChannelId,
|
dmMsg.dmChannelId,
|
||||||
@@ -1226,6 +1229,7 @@ function handleReactionRemove(event: Record<string, unknown>, userId: string): v
|
|||||||
emoji,
|
emoji,
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
reactionRemoveTargetOrigins,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user