import { Queue, QueueOptions } from 'bullmq'; export type QueueName = 'mail'; // TODO: add image here later on const queues = new Map(); const defaultOpts: QueueOptions = { connection: { host: process.env.VALKEY_HOST, port: Number(process.env.VALKEY_PORT) }, defaultJobOptions: { attempts: 3, backoff: { type: 'exponential', delay: 2000 }, removeOnComplete: { count: 100 }, removeOnFail: { count: 500 }, }, }; export function getQueue(name: QueueName): Queue { if (!queues.has(name)) { queues.set(name, new Queue(name, defaultOpts)); } return queues.get(name)!; } export async function closeAllQueues(): Promise { await Promise.all([...queues.values()].map(q => q.close())); }