@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
2 lines • 3.83 kB
JavaScript
import{copy as e}from"../../libs/i18n/copy.mjs";import t from"../../constants/constants.mjs";import n from"../../utils/helpers/get-base-url.mjs";import r from"../../utils/helpers/get-email-from.mjs";import i from"../../libs/repositories/email-attachments.mjs";import a from"../../libs/repositories/email-tenants.mjs";import o from"../../libs/repositories/email-transactions.mjs";import s from"../../libs/repositories/emails.mjs";import{getTenantConfig as c}from"../../utils/helpers/tenants.mjs";import{normalizeEmailAttachments as l}from"../../libs/email/attachments.mjs";import u from"../../libs/email/is-simulated.mjs";import{normalizeEmailStorageConfig as d}from"../../libs/email/storage/config.mjs";import{createStoredEmailData as f,resolveEmailData as p}from"../../libs/email/storage/data.mjs";import m from"./helpers/merge-email-context-data.mjs";import h from"../../utils/helpers/resolve-email-brand-name.mjs";import g from"../../libs/formatters/emails.mjs";const _=async(_,v)=>{let y=new s(_.db.client,_.config.db),b=new o(_.db.client,_.config.db),x=new i(_.db.client,_.config.db),S=new a(_.db.client,_.config.db),C=n(_),w=r(_.config,C),T=v.from?.email??w.email,E=v.from?.name??w.name,D=Array.isArray(v.to)?v.to.join(`,`):v.to,O=v.tenantKey===void 0?_.request.tenantKey??null:v.tenantKey,k=h({config:_.config,translate:_.translate,tenantKey:O}),A=m({data:v.data,context:{brand:{name:k??``,logoPath:t.email.assets.logo},host:C}}),j=typeof v.subject==`function`?v.subject(A):v.subject,M=Array.from(new Set(v.tenantKeys??(O?[O]:[]))),N=M.find(e=>c(_.config,e)===void 0);if(N!==void 0)return{error:{type:`basic`,message:e(`server:core.tenants.unknown`,{data:{key:N}}),status:400},data:void 0};let P=l(v.attachments);if(P.error)return P;let F=d(v.storage);if(F.error)return F;let I=f({data:A,storage:F.data,encryptionKey:_.config.secrets.encryption});if(I.error)return I;let L=await y.createSingle({data:{from_address:T,from_name:E,to_address:D,subject:j,template:v.template,priority:v.priority??`normal`,headers:v.headers??null,cc:v.cc,bcc:v.bcc,data:I.data,storage_strategy:F.data,type:v.type,is_system:v.isSystem??!1,current_status:`scheduled`,attempt_count:0,last_attempted_at:void 0},returnAll:!0,validation:{enabled:!0,defaultError:{status:500}}});if(L.error)return L;if(M.length>0){let e=await S.createMultiple({data:M.map(e=>({email_id:L.data.id,tenant_key:e}))});if(e.error)return e}if(P.data.length>0){let e=await x.createMultiple({data:P.data.map((e,t)=>({email_id:L.data.id,type:e.type,url:e.url,filename:e.filename,content_type:e.contentType??null,disposition:e.disposition??`attachment`,content_id:e.contentId??null,order:t})),returning:[`id`],validation:{enabled:!0,defaultError:{status:500}}});if(e.error)return e}let R=await b.createSingle({data:{email_id:L.data.id,delivery_status:`scheduled`,message:null,strategy_identifier:_.email.key,strategy_data:null,simulate:u(_),external_message_id:null},returnAll:!0});if(R.error)return R;let z=await _.queue.add(_,{event:`email:send`,payload:{emailId:L.data.id,transactionId:R.data?.id??0},options:{tenantKeys:M}});if(z.error)return await Promise.all([y.updateSingle({where:[{key:`id`,operator:`=`,value:L.data.id}],data:{current_status:`failed`,updated_at:new Date().toISOString()}}),b.updateSingle({where:[{key:`id`,operator:`=`,value:R.data?.id??0}],data:{delivery_status:`failed`,message:_.translate.english(z.error.message)||`Failed to queue email`,updated_at:new Date().toISOString()}})]),z;let B=p({data:L.data.data,storage:L.data.storage_strategy,encryptionKey:_.config.secrets.encryption,mode:`preview`});return B.error?B:{error:void 0,data:{jobId:z.data.jobId,email:g.formatSingle({email:L.data,data:B.data,attachments:P.data,html:void 0,resendWindowDays:_.config.email.resendWindowDays})}}};export{_ as default};
//# sourceMappingURL=send-email.mjs.map