UNPKG

@xtr-dev/payload-mailing

Version:

Template-based email system with scheduling and job processing for PayloadCMS

62 lines (61 loc) 2.1 kB
import { processAllEmails } from '../utils/emailProcessor.js'; import { createContextLogger } from '../utils/logger.js'; /** * Handler function for processing emails * Used internally by the task definition */ export const processEmailsTaskHandler = async (job, context) => { const { req } = context; const payload = req.payload; // Use the shared email processing logic await processAllEmails(payload); }; /** * Task definition for processing emails * This is what gets registered with Payload's job system */ export const processEmailsTask = { slug: 'process-emails', handler: async ({ job, req }) => { // Get mailing context from payload const payload = req.payload; const mailingContext = payload.mailing; if (!mailingContext) { throw new Error('Mailing plugin not properly initialized'); } // Use the task handler await processEmailsTaskHandler(job, { req }); return { output: { success: true, message: 'Email queue processing completed successfully' } }; }, interfaceName: 'ProcessEmailsTask', }; // For backward compatibility, export as processEmailsJob export const processEmailsJob = processEmailsTask; /** * Helper function to schedule an email processing job * Used by the plugin during initialization and can be used by developers */ export const scheduleEmailsJob = async (payload, queueName, delay) => { if (!payload.jobs) { const logger = createContextLogger(payload, 'SCHEDULER'); logger.warn('PayloadCMS jobs not configured - emails will not be processed automatically'); return; } try { await payload.jobs.queue({ queue: queueName, task: 'process-emails', input: {}, waitUntil: delay ? new Date(Date.now() + delay) : undefined, }); } catch (error) { const logger = createContextLogger(payload, 'SCHEDULER'); logger.error('Failed to schedule email processing job:', error); } };