signal-desktop/ts/jobs/removeStorageKeyJobQueue.ts

49 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-04-29 18:02:27 -05:00
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
2021-05-25 15:40:04 -07:00
import { z } from 'zod';
2021-04-29 18:02:27 -05:00
import type { JOB_STATUS } from './JobQueue';
2021-04-29 18:02:27 -05:00
import { JobQueue } from './JobQueue';
2021-04-29 18:02:27 -05:00
import { jobQueueDatabaseStore } from './JobQueueDatabaseStore';
2024-10-02 12:03:10 -07:00
import { parseUnknown } from '../util/schemas';
2021-04-29 18:02:27 -05:00
const removeStorageKeyJobDataSchema = z.object({
key: z.enum([
'challenge:retry-message-ids',
'previousAudioDeviceModule',
'nextSignedKeyRotationTime',
'senderCertificateWithUuid',
'signedKeyRotationRejected',
]),
2021-04-29 18:02:27 -05:00
});
type RemoveStorageKeyJobData = z.infer<typeof removeStorageKeyJobDataSchema>;
2021-07-21 14:10:08 -07:00
export class RemoveStorageKeyJobQueue extends JobQueue<RemoveStorageKeyJobData> {
protected parseData(data: unknown): RemoveStorageKeyJobData {
2024-10-02 12:03:10 -07:00
return parseUnknown(removeStorageKeyJobDataSchema, data);
2021-07-21 14:10:08 -07:00
}
2021-04-29 18:02:27 -05:00
2021-07-21 14:10:08 -07:00
protected async run({
2021-04-29 18:02:27 -05:00
data,
}: Readonly<{ data: RemoveStorageKeyJobData }>): Promise<
typeof JOB_STATUS.NEEDS_RETRY | undefined
> {
2021-04-29 18:02:27 -05:00
await new Promise<void>(resolve => {
window.storage.onready(resolve);
});
await window.storage.remove(data.key);
return undefined;
2021-07-21 14:10:08 -07:00
}
}
export const removeStorageKeyJobQueue = new RemoveStorageKeyJobQueue({
store: jobQueueDatabaseStore,
queueType: 'remove storage key',
maxAttempts: 100,
2021-04-29 18:02:27 -05:00
});