@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 3.34 kB
JavaScript
import{copy as e}from"../../../libs/i18n/copy.mjs";import t from"../../../libs/repositories/email-transactions.mjs";import n from"../../../libs/repositories/emails.mjs";import{normalizeEmailAttachments as r}from"../../../libs/email/attachments.mjs";import i from"../../../libs/email/is-simulated.mjs";import{createStoredEmailData as a,resolveEmailData as o,stripNeverStoreEmailData as s}from"../../../libs/email/storage/data.mjs";import{hasNeverStoreEmailStorageRules as c}from"../../../libs/email/storage/resend.mjs";import l from"../../../libs/email/templates/render-mustache-template.mjs";const u=async(u,d)=>{let f=new n(u.db.client,u.config.db),p=new t(u.db.client,u.config.db),m=await f.selectSingleById({id:d.emailId,validation:{enabled:!0,defaultError:{message:e(`server:core.email.not.found.message`),status:404}}});if(m.error)return m;let h=o({data:m.data.data,storage:m.data.storage_strategy,encryptionKey:u.config.secrets.encryption,mode:`send`}),g=c(m.data.storage_strategy),_=r(m.data.attachments?.map(e=>({type:e.type,url:e.url,filename:e.filename,contentType:e.content_type??void 0,...e.disposition===`inline`?{disposition:`inline`,contentId:e.content_id??void 0}:{disposition:`attachment`}}))),v=h.error??g.error??_.error,y=null,b=!1,x;if(v===void 0){y=h.error?null:h.data,b=!g.error&&g.data;let e=await l(u,{template:m.data.template,data:y});e.error?v=e.error:x=e.data}if(v)return await Promise.all([f.updateSingle({where:[{key:`id`,operator:`=`,value:m.data.id}],data:{current_status:`failed`,attempt_count:(m.data.attempt_count??0)+1,last_attempted_at:new Date().toISOString(),updated_at:new Date().toISOString()}}),p.updateSingle({where:[{key:`id`,operator:`=`,value:d.transactionId}],data:{delivery_status:`failed`,message:u.translate.english(v.message)??null,updated_at:new Date().toISOString()}})]),{error:v,data:void 0};let S;if(i(u))S={success:!0,deliveryStatus:`sent`,message:e(`server:core.email.successfully.sent`),data:null};else try{S=await u.email.send(u,{to:m.data.to_address,subject:m.data.subject??``,from:{email:m.data.from_address,name:m.data.from_name},html:x??``,cc:m.data.cc??void 0,bcc:m.data.bcc??void 0,priority:m.data.priority,headers:m.data.headers,attachments:_.data,data:y??{},template:m.data.template})}catch(t){S={success:!1,deliveryStatus:`failed`,message:t instanceof Error?e.literal(t.message):e(`server:core.email.failed.to.send`),externalMessageId:null}}let C=S.success===!0&&b===!0,w;if(C){let e=s({data:y,storage:m.data.storage_strategy});if(e.error)return e;let t=a({data:e.data,storage:m.data.storage_strategy,encryptionKey:u.config.secrets.encryption,options:{encryptNeverStore:!1}});if(t.error)return t;w=t.data}let[T,E]=await Promise.all([f.updateSingle({where:[{key:`id`,operator:`=`,value:m.data.id}],data:{current_status:S.deliveryStatus,attempt_count:(m.data.attempt_count??0)+1,last_attempted_at:new Date().toISOString(),updated_at:new Date().toISOString(),...w===void 0?{}:{data:w}}}),p.updateSingle({where:[{key:`id`,operator:`=`,value:d.transactionId}],data:{delivery_status:S.deliveryStatus,message:S.success?null:u.translate.english(S.message)??null,strategy_data:S.data,external_message_id:S.externalMessageId,updated_at:new Date().toISOString()}})]);return T.error?T:E.error?E:{error:void 0,data:void 0}};export{u as default};
//# sourceMappingURL=send-email.mjs.map