signal-desktop/ts/jobs/helpers/addReportSpamJob.ts

53 lines
1.7 KiB
TypeScript
Raw Normal View History

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assertDev } from '../../util/assert';
2023-02-08 00:55:12 +00:00
import { isDirectConversation } from '../../util/whatTypeOfConversation';
import * as log from '../../logging/log';
2023-02-08 00:55:12 +00:00
import type { ConversationAttributesType } from '../../model-types.d';
2023-08-16 20:54:39 +00:00
import { isAciString } from '../../types/ServiceId';
import type { reportSpamJobQueue } from '../reportSpamJobQueue';
export async function addReportSpamJob({
conversation,
getMessageServerGuidsForSpam,
jobQueue,
}: Readonly<{
2023-02-08 00:55:12 +00:00
conversation: Readonly<
2023-08-16 20:54:39 +00:00
Pick<
ConversationAttributesType,
'id' | 'type' | 'serviceId' | 'reportingToken'
>
2023-02-08 00:55:12 +00:00
>;
getMessageServerGuidsForSpam: (
conversationId: string
) => Promise<Array<string>>;
jobQueue: Pick<typeof reportSpamJobQueue, 'add'>;
}>): Promise<void> {
assertDev(
2023-02-08 00:55:12 +00:00
isDirectConversation(conversation),
'addReportSpamJob: cannot report spam for non-direct conversations'
);
2023-08-16 20:54:39 +00:00
const { serviceId: aci } = conversation;
if (!aci || !isAciString(aci)) {
log.info(
2023-08-16 20:54:39 +00:00
'addReportSpamJob got a conversation with no aci, which the server does not support. Doing nothing'
);
return;
}
const serverGuids = await getMessageServerGuidsForSpam(conversation.id);
if (!serverGuids.length) {
// This can happen under normal conditions. We haven't always stored server GUIDs, so
// a user might try to report spam for a conversation that doesn't have them. (It
// may also indicate developer error, but that's not necessarily the case.)
log.info(
'addReportSpamJob got no server GUIDs from the database. Doing nothing'
);
return;
}
2023-08-16 20:54:39 +00:00
await jobQueue.add({ aci, serverGuids, token: conversation.reportingToken });
}