Ensure reactions are handled in order

This commit is contained in:
trevor-signal
2025-10-31 12:25:42 -04:00
committed by GitHub
parent ab2b74e774
commit c6a79d2207
2 changed files with 36 additions and 39 deletions

View File

@@ -2470,7 +2470,7 @@ export async function startApp(): Promise<void> {
timestamp,
};
drop(Reactions.onReaction(attributes));
await Reactions.onReaction(attributes);
return;
}
@@ -2971,7 +2971,7 @@ export async function startApp(): Promise<void> {
receivedAtDate: data.receivedAtDate,
timestamp,
};
drop(Reactions.onReaction(attributes));
await Reactions.onReaction(attributes);
return;
}

View File

@@ -228,7 +228,6 @@ export async function onReaction(
const logId = `Reactions.onReaction(timestamp=${reaction.timestamp};target=${reaction.targetTimestamp})`;
try {
const matchingMessage = await findMessageForReaction({
targetTimestamp: reaction.targetTimestamp,
targetAuthorAci: reaction.targetAuthorAci,
@@ -259,12 +258,10 @@ export async function onReaction(
return undefined;
}
// awaiting is safe since `onReaction` is never called from inside the queue
await matchingMessageConversation.queueJob(
'Reactions.onReaction',
async () => {
drop(
matchingMessageConversation.queueJob('Reactions.onReaction', async () => {
log.info(`${logId}: handling`);
try {
// Message is fetched inside the conversation queue so we have the
// most recent data
const targetMessage = await findMessageForReaction({
@@ -302,12 +299,12 @@ export async function onReaction(
}
remove(reaction);
}
);
} catch (error) {
remove(reaction);
log.error(`${logId} error:`, Errors.toLogFormat(error));
}
})
);
}
export async function handleReaction(