UNPKG

payload

Version:

Node, React, Headless CMS and Application Framework built on Next.js

89 lines (88 loc) 3.02 kB
import { runJobs } from '../operations/runJobs/index.js'; /** * /api/payload-jobs/run endpoint * * This endpoint is GET instead of POST to allow it to be used in a Vercel Cron. */ export const runJobsEndpoint = { handler: async (req)=>{ const jobsConfig = req.payload.config.jobs; if (!configHasJobs(jobsConfig)) { return Response.json({ message: 'No jobs to run.' }, { status: 200 }); } const accessFn = jobsConfig.access?.run ?? (()=>true); const hasAccess = await accessFn({ req }); if (!hasAccess) { return Response.json({ message: req.i18n.t('error:unauthorized') }, { status: 401 }); } const { allQueues, disableScheduling: disableSchedulingParam, limit, queue, silent: silentParam } = req.query; const silent = silentParam === 'true'; const shouldHandleSchedules = disableSchedulingParam !== 'true'; const runAllQueues = allQueues && !(typeof allQueues === 'string' && allQueues === 'false'); if (shouldHandleSchedules && jobsConfig.scheduling) { // If should handle schedules and schedules are defined await req.payload.jobs.handleSchedules({ allQueues: runAllQueues, queue, req }); } const runJobsArgs = { queue, req, // Access is validated above, so it's safe to override here allQueues: runAllQueues, overrideAccess: true, silent }; if (typeof queue === 'string') { runJobsArgs.queue = queue; } const parsedLimit = Number(limit); if (!isNaN(parsedLimit)) { runJobsArgs.limit = parsedLimit; } let noJobsRemaining = false; let remainingJobsFromQueried = 0; try { const result = await runJobs(runJobsArgs); noJobsRemaining = !!result.noJobsRemaining; remainingJobsFromQueried = result.remainingJobsFromQueried; } catch (err) { req.payload.logger.error({ err, msg: 'There was an error running jobs:', queue: runJobsArgs.queue }); return Response.json({ message: req.i18n.t('error:unknown'), noJobsRemaining: true, remainingJobsFromQueried }, { status: 500 }); } return Response.json({ message: req.i18n.t('general:success'), noJobsRemaining, remainingJobsFromQueried }, { status: 200 }); }, method: 'get', path: '/run' }; export const configHasJobs = (jobsConfig)=>{ return Boolean(jobsConfig.tasks?.length || jobsConfig.workflows?.length); }; //# sourceMappingURL=run.js.map