UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 4.08 kB
import{copy as e}from"../i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../logger/index.mjs";import r from"../repositories/queue-jobs.mjs";import i from"../../utils/services/service-wrapper.mjs";import a from"./job-handlers.mjs";const o=e=>typeof e==`function`?e:e.handler,s=async e=>{typeof e.handler!=`function`&&e.handler.onPermanentFailure&&await e.handler.onPermanentFailure(e.context,{jobId:e.jobId,event:e.event,payload:e.payload,errorMessage:e.errorMessage})},c=async e=>{let r=e.attempts+1<e.maxAttempts;if(r){let r={status:`pending`,updated_at:new Date().toISOString()};if(e.setNextRetryAt){let i=new Date(Date.now()+2**e.attempts*1e3);r.next_retry_at=i.toISOString(),n.debug({message:`Job failed, will retry`,scope:t.logScopes.queueAdapter,data:{jobId:e.jobId,eventType:e.event,attempts:e.attempts+1,maxAttempts:e.maxAttempts,nextRetryAt:i.toISOString()}})}else n.debug({message:`Job failed, will retry`,scope:t.logScopes.queueAdapter,data:{jobId:e.jobId,eventType:e.event,attempts:e.attempts+1,maxAttempts:e.maxAttempts}});await e.QueueJobs.updateSingle({data:r,where:[{key:`job_id`,operator:`=`,value:e.jobId}]})}else n.error({message:`Job failed permanently`,scope:t.logScopes.queueAdapter,data:{jobId:e.jobId,eventType:e.event,errorMessage:e.errorMessage}}),await e.QueueJobs.updateSingle({data:{status:`failed`,error_message:e.errorMessage,failed_at:new Date().toISOString(),updated_at:new Date().toISOString()},where:[{key:`job_id`,operator:`=`,value:e.jobId}]});return r},l=async(l,u)=>{let d=a(u.event),f=new r(l.db.client,l.config.db),p=u.setNextRetryAt??!0,m=await f.selectSingle({select:[`status`],where:[{key:`job_id`,operator:`=`,value:u.jobId}],validation:{enabled:!0,defaultError:{message:e(`server:core.queue.jobs.not.found`,{defaultMessage:`Queue job not found: ${u.jobId}`}),status:404}}});if(m.error)return{success:!1,shouldRetry:!1,message:l.translate.english(m.error.message)??`Queue job not found`};if(m.data.status!==`pending`)return n.debug({message:`Skipping non-pending queue job`,scope:t.logScopes.queueAdapter,data:{jobId:u.jobId,eventType:u.event,status:m.data.status}}),{success:!0,shouldRetry:!1,message:`Queue job is no longer pending`};if(!d){let e=`No job handler found for job type: ${u.event}`;return n.warn({message:`No job handler found for job type`,scope:t.logScopes.queueAdapter,data:{jobId:u.jobId,eventType:u.event}}),await f.updateSingle({data:{status:`failed`,error_message:e,failed_at:new Date().toISOString(),updated_at:new Date().toISOString()},where:[{key:`job_id`,operator:`=`,value:u.jobId}]}),{success:!1,shouldRetry:!1,message:e}}try{n.debug({message:`Processing job`,scope:t.logScopes.queueAdapter,data:{jobId:u.jobId,eventType:u.event}}),await f.updateSingle({data:{status:`processing`,attempts:u.attempts+1,started_at:new Date().toISOString(),updated_at:new Date().toISOString()},where:[{key:`job_id`,operator:`=`,value:u.jobId}]});let e=await i(o(d),{transaction:!1})(l,u.payload);if(e.error){let t=l.translate.english(e.error.message)??`Unknown error`,n=await c({jobId:u.jobId,event:u.event,errorMessage:t,attempts:u.attempts,maxAttempts:u.maxAttempts,setNextRetryAt:p,QueueJobs:f});return n||await s({handler:d,context:l,event:u.event,jobId:u.jobId,payload:u.payload,errorMessage:t}),{success:!1,shouldRetry:n,message:t}}return await f.updateSingle({data:{status:`completed`,completed_at:new Date().toISOString(),updated_at:new Date().toISOString()},where:[{key:`job_id`,operator:`=`,value:u.jobId}]}),n.debug({message:`Job completed successfully`,scope:t.logScopes.queueAdapter,data:{jobId:u.jobId,eventType:u.event}}),{success:!0,shouldRetry:!1,message:`Job completed successfully`}}catch(e){let t=e instanceof Error?e.message:`Unknown error`,n=await c({jobId:u.jobId,event:u.event,errorMessage:t,attempts:u.attempts,maxAttempts:u.maxAttempts,setNextRetryAt:p,QueueJobs:f});return n||await s({handler:d,context:l,event:u.event,jobId:u.jobId,payload:u.payload,errorMessage:t}),{success:!1,shouldRetry:n,message:t}}};export{l as default}; //# sourceMappingURL=execute-single-job.mjs.map