2026-03-08 18:25:09 +01:00
|
|
|
import { Worker } from "bullmq";
|
|
|
|
|
import { redisConnectionOpts } from "../connection.js";
|
|
|
|
|
import { sendVerification, sendPasswordReset } from "../../lib/email.js";
|
2026-03-09 09:33:43 +01:00
|
|
|
import { logger } from "../../lib/logger.js";
|
|
|
|
|
|
|
|
|
|
const log = logger.child({ component: "mail-worker" });
|
2026-03-08 18:25:09 +01:00
|
|
|
|
|
|
|
|
export function startMailWorker(): Worker {
|
|
|
|
|
const worker = new Worker(
|
|
|
|
|
"mail",
|
|
|
|
|
async (job) => {
|
2026-03-09 09:33:43 +01:00
|
|
|
log.info({ jobId: job.id, jobName: job.name }, `Processing mail job`);
|
2026-03-08 18:25:09 +01:00
|
|
|
switch (job.name) {
|
|
|
|
|
case "sendVerification":
|
|
|
|
|
await sendVerification(job.data.email as string, job.data.token as string);
|
|
|
|
|
break;
|
|
|
|
|
case "sendPasswordReset":
|
|
|
|
|
await sendPasswordReset(job.data.email as string, job.data.token as string);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new Error(`Unknown mail job: ${job.name}`);
|
|
|
|
|
}
|
2026-03-09 09:33:43 +01:00
|
|
|
log.info({ jobId: job.id, jobName: job.name }, `Mail job completed`);
|
2026-03-08 18:25:09 +01:00
|
|
|
},
|
|
|
|
|
{ connection: redisConnectionOpts },
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
worker.on("failed", (job, err) => {
|
2026-03-09 09:33:43 +01:00
|
|
|
log.error({ jobId: job?.id, jobName: job?.name, err: err.message }, `Mail job failed`);
|
2026-03-08 18:25:09 +01:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return worker;
|
|
|
|
|
}
|