@visulima/email 1.0.0-alpha.2 → 1.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +246 -0
- package/LICENSE.md +536 -899
- package/README.md +36 -21
- package/dist/crypto/index.d.ts +147 -4
- package/dist/crypto/index.js +1 -1
- package/dist/index.d.ts +785 -9
- package/dist/index.js +1 -1
- package/dist/packem_shared/{DkimSigner-pFd4c3fZ.js → DkimSigner-CT2DSHD1.js} +4 -4
- package/dist/packem_shared/Mail-D93oo_9g.js +1 -0
- package/dist/packem_shared/MailMessage-BvaH5tZZ.js +1 -0
- package/dist/packem_shared/{SmimeEncrypter-CBevU534.js → SmimeEncrypter-ZhHEgDwY.js} +2 -2
- package/dist/packem_shared/{SmimeSigner-CObA4jzT.js → SmimeSigner-CYSVF6ez.js} +1 -1
- package/dist/packem_shared/{ahaSendProvider-DlFKEQ6D.js → ahaSendProvider-DOAAW65O.js} +1 -1
- package/dist/packem_shared/{attachment-processor-2rHmfa7j.js → attachment-processor-DsmIomKc.js} +1 -1
- package/dist/packem_shared/{awsSesProvider-Ba-eVJxZ.js → awsSesProvider-DX1630Ms.js} +7 -7
- package/dist/packem_shared/azureProvider-EkNYKAiF.js +1 -0
- package/dist/packem_shared/{brevoProvider-5p6jjiK9.js → brevoProvider-CkR4U4RD.js} +1 -1
- package/dist/packem_shared/build-mime-message-6xstxaUV.js +2 -0
- package/dist/packem_shared/defineProvider-CtLH0VBE.js +1 -0
- package/dist/packem_shared/detectMimeType-bo5oxfnt.js +1 -0
- package/dist/packem_shared/failoverProvider-W5ctAhdC.js +1 -0
- package/dist/packem_shared/httpProvider-DUg1AQfO.js +1 -0
- package/dist/packem_shared/{infobipProvider-CtLwrUaP.js → infobipProvider-BhTsWi7e.js} +1 -1
- package/dist/packem_shared/{mailCrabProvider-CM_CFDca.js → mailCrabProvider-B7H6HwWu.js} +1 -1
- package/dist/packem_shared/mailPaceProvider-DRt6Z9Hr.js +1 -0
- package/dist/packem_shared/{mailerSendProvider-CeeIXFnW.js → mailerSendProvider-Dx_iHInH.js} +1 -1
- package/dist/packem_shared/mailgunProvider-ChkLGZZW.js +1 -0
- package/dist/packem_shared/mailjetProvider-BMRhNe6H.js +1 -0
- package/dist/packem_shared/{mailomatProvider-DMQmjKHT.js → mailomatProvider-CydV-JB6.js} +1 -1
- package/dist/packem_shared/{mailtrapProvider-BN3UBEQw.js → mailtrapProvider-CuAfJWDr.js} +1 -1
- package/dist/packem_shared/{make-request-BDzF9W9D.js → make-request-CaT4d5oC.js} +1 -1
- package/dist/packem_shared/{mandrillProvider-370y7CLu.js → mandrillProvider-BBeLbaw0.js} +1 -1
- package/dist/packem_shared/mockProvider-C0P1lKOy.js +1 -0
- package/dist/packem_shared/{nodemailerProvider-_w8QXMU-.js → nodemailerProvider-DFcvoVFv.js} +1 -1
- package/dist/packem_shared/{opentelemetryProvider-C_ZXOLSd.js → opentelemetryProvider-Dwv88G3O.js} +1 -1
- package/dist/packem_shared/{plunkProvider-DfJumQ4U.js → plunkProvider-BQyjG6YT.js} +1 -1
- package/dist/packem_shared/{postalProvider-Bavx2FcH.js → postalProvider-DPHQ620q.js} +1 -1
- package/dist/packem_shared/{postmarkProvider-DFC0uvjO.js → postmarkProvider-bMTC2gdJ.js} +1 -1
- package/dist/packem_shared/provider.d-DcfYeGJJ.d.ts +28 -0
- package/dist/packem_shared/readFile-BAVMZg5e-C4whBIPd.js +1 -0
- package/dist/packem_shared/resendProvider-Cns1tvF5.js +1 -0
- package/dist/packem_shared/roundRobinProvider-FvZQKl6n.js +1 -0
- package/dist/packem_shared/{scalewayProvider-be1HPimL.js → scalewayProvider-O1dHz7iJ.js} +1 -1
- package/dist/packem_shared/{sendGridProvider-BVI1sq3n.js → sendGridProvider-DmywC-eT.js} +1 -1
- package/dist/packem_shared/{smtpProvider-BV-ufR53.js → smtpProvider-Unjao_fn.js} +8 -8
- package/dist/packem_shared/sweegoProvider-D086G6xG.js +1 -0
- package/dist/packem_shared/types.d-CNnnk-Ya.d.ts +102 -0
- package/dist/packem_shared/types.d-nyR1ty1Q.d.ts +9 -0
- package/dist/packem_shared/types.d-wwpgA3to.d.ts +204 -0
- package/dist/packem_shared/validate-email-options-DPo3SgC0.js +1 -0
- package/dist/packem_shared/zeptomailProvider-DKKEpEsW.js +1 -0
- package/dist/providers/ahasend/index.d.ts +36 -3
- package/dist/providers/ahasend/index.js +1 -1
- package/dist/providers/aws-ses/index.d.ts +47 -3
- package/dist/providers/aws-ses/index.js +1 -1
- package/dist/providers/azure/index.d.ts +52 -3
- package/dist/providers/azure/index.js +1 -1
- package/dist/providers/brevo/index.d.ts +65 -3
- package/dist/providers/brevo/index.js +1 -1
- package/dist/providers/failover/index.d.ts +27 -3
- package/dist/providers/failover/index.js +1 -1
- package/dist/providers/http/index.d.ts +35 -3
- package/dist/providers/http/index.js +1 -1
- package/dist/providers/infobip/index.d.ts +56 -3
- package/dist/providers/infobip/index.js +1 -1
- package/dist/providers/mailcrab/index.d.ts +32 -3
- package/dist/providers/mailcrab/index.js +1 -1
- package/dist/providers/mailersend/index.d.ts +51 -3
- package/dist/providers/mailersend/index.js +1 -1
- package/dist/providers/mailgun/index.d.ts +73 -3
- package/dist/providers/mailgun/index.js +1 -1
- package/dist/providers/mailjet/index.d.ts +72 -3
- package/dist/providers/mailjet/index.js +1 -1
- package/dist/providers/mailomat/index.d.ts +40 -3
- package/dist/providers/mailomat/index.js +1 -1
- package/dist/providers/mailpace/index.d.ts +52 -3
- package/dist/providers/mailpace/index.js +1 -1
- package/dist/providers/mailtrap/index.d.ts +44 -3
- package/dist/providers/mailtrap/index.js +1 -1
- package/dist/providers/mandrill/index.d.ts +87 -3
- package/dist/providers/mandrill/index.js +1 -1
- package/dist/providers/mock/index.d.ts +59 -3
- package/dist/providers/mock/index.js +1 -1
- package/dist/providers/nodemailer/index.d.ts +38 -3
- package/dist/providers/nodemailer/index.js +1 -1
- package/dist/providers/opentelemetry/index.d.ts +529 -3
- package/dist/providers/opentelemetry/index.js +1 -1
- package/dist/providers/plunk/index.d.ts +38 -3
- package/dist/providers/plunk/index.js +1 -1
- package/dist/providers/postal/index.d.ts +48 -3
- package/dist/providers/postal/index.js +1 -1
- package/dist/providers/postmark/index.d.ts +60 -3
- package/dist/providers/postmark/index.js +1 -1
- package/dist/providers/resend/index.d.ts +51 -3
- package/dist/providers/resend/index.js +1 -1
- package/dist/providers/roundrobin/index.d.ts +27 -3
- package/dist/providers/roundrobin/index.js +1 -1
- package/dist/providers/scaleway/index.d.ts +44 -3
- package/dist/providers/scaleway/index.js +1 -1
- package/dist/providers/sendgrid/index.d.ts +84 -3
- package/dist/providers/sendgrid/index.js +1 -1
- package/dist/providers/smtp/index.d.ts +71 -3
- package/dist/providers/smtp/index.js +1 -1
- package/dist/providers/sweego/index.d.ts +40 -3
- package/dist/providers/sweego/index.js +1 -1
- package/dist/providers/zeptomail/index.d.ts +37 -3
- package/dist/providers/zeptomail/index.js +1 -1
- package/dist/template-engines/handlebars.d.ts +23 -22
- package/dist/template-engines/handlebars.js +1 -1
- package/dist/template-engines/html-to-text.d.ts +24 -24
- package/dist/template-engines/mjml.d.ts +10 -10
- package/dist/template-engines/react-email.d.ts +9 -9
- package/dist/template-engines/vue-email.d.ts +9 -9
- package/dist/utils/cache.d.ts +49 -48
- package/dist/utils/format-email-address.d.ts +8 -7
- package/dist/utils/normalize-email-aliases.d.ts +20 -20
- package/dist/utils/parse-address.d.ts +18 -17
- package/dist/utils/parse-address.js +1 -1
- package/dist/utils/validation/check-mx-records.d.ts +36 -35
- package/dist/utils/validation/disposable-email-domains.d.ts +1 -13
- package/dist/utils/validation/role-accounts.d.ts +18 -18
- package/dist/utils/validation/validate-email.d.ts +5 -5
- package/dist/utils/validation/verify-email.d.ts +45 -42
- package/dist/utils/validation/verify-email.js +1 -1
- package/dist/utils/validation/verify-smtp.d.ts +35 -34
- package/dist/utils/validation/verify-smtp.js +1 -1
- package/package.json +61 -61
- package/dist/attachment-helpers.d.ts +0 -64
- package/dist/crypto/dkim-signer.d.ts +0 -48
- package/dist/crypto/smime-encrypter.d.ts +0 -53
- package/dist/crypto/smime-signer.d.ts +0 -48
- package/dist/crypto/types.d.ts +0 -101
- package/dist/draft-mail-message.d.ts +0 -13
- package/dist/errors/email-error.d.ts +0 -17
- package/dist/errors/required-option-error.d.ts +0 -10
- package/dist/mail-message.d.ts +0 -425
- package/dist/mail.d.ts +0 -206
- package/dist/packem_shared/Mail-6Bltpy_p.js +0 -1
- package/dist/packem_shared/MailMessage-B76GPBBA.js +0 -1
- package/dist/packem_shared/azureProvider-CQYAkgVF.js +0 -1
- package/dist/packem_shared/build-mime-message-IYaUqqPJ.js +0 -2
- package/dist/packem_shared/defineProvider-B9rSklAJ.js +0 -1
- package/dist/packem_shared/detectMimeType-S8WRsNtY.js +0 -1
- package/dist/packem_shared/failoverProvider-CAHQQueo.js +0 -1
- package/dist/packem_shared/httpProvider-CZD6LZX3.js +0 -1
- package/dist/packem_shared/mailPaceProvider-B6yKvh6z.js +0 -1
- package/dist/packem_shared/mailgunProvider-mmjKzouh.js +0 -1
- package/dist/packem_shared/mailjetProvider-DwN6i0VA.js +0 -1
- package/dist/packem_shared/mockProvider-DN5ZwutD.js +0 -1
- package/dist/packem_shared/readFile-BlZxbhCU-C8bCdiA2.js +0 -1
- package/dist/packem_shared/resendProvider-CfqU7UdE.js +0 -1
- package/dist/packem_shared/roundRobinProvider-1WQnuKR8.js +0 -1
- package/dist/packem_shared/sweegoProvider-7419CSAq.js +0 -1
- package/dist/packem_shared/validate-email-options-DfJ7llf8.js +0 -1
- package/dist/packem_shared/zeptomailProvider-C2lh0Xmo.js +0 -1
- package/dist/providers/ahasend/provider.d.ts +0 -7
- package/dist/providers/ahasend/types.d.ts +0 -28
- package/dist/providers/aws-ses/provider.d.ts +0 -8
- package/dist/providers/aws-ses/types.d.ts +0 -38
- package/dist/providers/azure/provider.d.ts +0 -7
- package/dist/providers/azure/types.d.ts +0 -44
- package/dist/providers/brevo/provider.d.ts +0 -7
- package/dist/providers/brevo/types.d.ts +0 -57
- package/dist/providers/failover/provider.d.ts +0 -7
- package/dist/providers/failover/types.d.ts +0 -19
- package/dist/providers/http/provider.d.ts +0 -7
- package/dist/providers/http/types.d.ts +0 -27
- package/dist/providers/infobip/provider.d.ts +0 -7
- package/dist/providers/infobip/types.d.ts +0 -48
- package/dist/providers/mailcrab/provider.d.ts +0 -9
- package/dist/providers/mailcrab/types.d.ts +0 -22
- package/dist/providers/mailersend/provider.d.ts +0 -7
- package/dist/providers/mailersend/types.d.ts +0 -43
- package/dist/providers/mailgun/provider.d.ts +0 -7
- package/dist/providers/mailgun/types.d.ts +0 -65
- package/dist/providers/mailjet/provider.d.ts +0 -7
- package/dist/providers/mailjet/types.d.ts +0 -64
- package/dist/providers/mailomat/provider.d.ts +0 -7
- package/dist/providers/mailomat/types.d.ts +0 -32
- package/dist/providers/mailpace/provider.d.ts +0 -7
- package/dist/providers/mailpace/types.d.ts +0 -44
- package/dist/providers/mailtrap/provider.d.ts +0 -7
- package/dist/providers/mailtrap/types.d.ts +0 -36
- package/dist/providers/mandrill/provider.d.ts +0 -7
- package/dist/providers/mandrill/types.d.ts +0 -79
- package/dist/providers/mock/provider.d.ts +0 -8
- package/dist/providers/mock/types.d.ts +0 -50
- package/dist/providers/nodemailer/provider.d.ts +0 -7
- package/dist/providers/nodemailer/types.d.ts +0 -30
- package/dist/providers/opentelemetry/provider.d.ts +0 -8
- package/dist/providers/opentelemetry/types.d.ts +0 -31
- package/dist/providers/plunk/provider.d.ts +0 -7
- package/dist/providers/plunk/types.d.ts +0 -30
- package/dist/providers/postal/provider.d.ts +0 -7
- package/dist/providers/postal/types.d.ts +0 -40
- package/dist/providers/postmark/provider.d.ts +0 -7
- package/dist/providers/postmark/types.d.ts +0 -52
- package/dist/providers/provider.d.ts +0 -27
- package/dist/providers/resend/provider.d.ts +0 -7
- package/dist/providers/resend/types.d.ts +0 -43
- package/dist/providers/roundrobin/provider.d.ts +0 -7
- package/dist/providers/roundrobin/types.d.ts +0 -19
- package/dist/providers/scaleway/provider.d.ts +0 -7
- package/dist/providers/scaleway/types.d.ts +0 -36
- package/dist/providers/sendgrid/provider.d.ts +0 -7
- package/dist/providers/sendgrid/types.d.ts +0 -76
- package/dist/providers/smtp/provider.d.ts +0 -7
- package/dist/providers/smtp/types.d.ts +0 -63
- package/dist/providers/sweego/provider.d.ts +0 -7
- package/dist/providers/sweego/types.d.ts +0 -32
- package/dist/providers/utils/address-formatter.d.ts +0 -139
- package/dist/providers/utils/attachment-processor.d.ts +0 -58
- package/dist/providers/utils/index.d.ts +0 -4
- package/dist/providers/utils/payload-builder.d.ts +0 -78
- package/dist/providers/utils/provider-base.d.ts +0 -69
- package/dist/providers/zeptomail/provider.d.ts +0 -7
- package/dist/providers/zeptomail/types.d.ts +0 -29
- package/dist/template-engines/types.d.ts +0 -8
- package/dist/types.d.ts +0 -203
- package/dist/utils/build-mime-message.d.ts +0 -8
- package/dist/utils/create-logger.d.ts +0 -16
- package/dist/utils/format-email-addresses.d.ts +0 -8
- package/dist/utils/generate-boundary.d.ts +0 -7
- package/dist/utils/generate-message-id.d.ts +0 -6
- package/dist/utils/headers-to-record.d.ts +0 -9
- package/dist/utils/is-port-available.d.ts +0 -9
- package/dist/utils/make-request.d.ts +0 -18
- package/dist/utils/retry.d.ts +0 -10
- package/dist/utils/sanitize-header.d.ts +0 -14
- package/dist/utils/to-base64.d.ts +0 -8
- package/dist/utils/validation/validate-email-options.d.ts +0 -8
package/dist/packem_shared/{nodemailerProvider-_w8QXMU-.js → nodemailerProvider-DFcvoVFv.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
var w=Object.defineProperty;var h=(s,r)=>w(s,"name",{value:r,configurable:!0});import v from"nodemailer";import p from"./EmailError-zm2ffVav.js";import g from"./RequiredOptionError-CevW3u2K.js";import{s as T}from"./generate-message-id-D4uA8gkj.js";import{i as $}from"./headers-to-record-Qo124ImV.js";import{d as b}from"./validate-email-options-
|
|
1
|
+
var w=Object.defineProperty;var h=(s,r)=>w(s,"name",{value:r,configurable:!0});import v from"nodemailer";import p from"./EmailError-zm2ffVav.js";import g from"./RequiredOptionError-CevW3u2K.js";import{s as T}from"./generate-message-id-D4uA8gkj.js";import{i as $}from"./headers-to-record-Qo124ImV.js";import{d as b}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as A}from"./defineProvider-CtLH0VBE.js";var E=Object.defineProperty,i=h((s,r)=>E(s,"name",{value:r,configurable:!0}),"s");const c="nodemailer",C=A((s={})=>{if(!s.transport)throw new g(c,"transport");let r;const l=i(t=>{const m=t??s.transport;return v.createTransport(m)},"createTransporter");let d=!1;const u=i(async()=>{if(!d)try{r=l(),await r.verify(),d=!0}catch(t){throw new p(c,`Failed to initialize nodemailer transport: ${t instanceof Error?t.message:String(t)}`,{cause:t instanceof Error?t:new Error(String(t))})}},"initializeProvider"),y=i(t=>{const m=i(e=>e.name?`${e.name} <${e.email}>`:e.email,"formatFromAddress"),a=i(e=>e.name?`${e.name} <${e.email}>`:e.email,"formatToAddress"),f=s.defaultFrom??t.from,n={from:m(f),subject:t.subject,to:Array.isArray(t.to)?t.to.map(e=>a(e)):a(t.to)};return t.text&&(n.text=t.text),t.html&&(n.html=t.html),t.cc&&(n.cc=Array.isArray(t.cc)?t.cc.map(e=>a(e)):a(t.cc)),t.bcc&&(n.bcc=Array.isArray(t.bcc)?t.bcc.map(e=>a(e)):a(t.bcc)),t.replyTo&&(n.replyTo=t.replyTo.name?`${t.replyTo.name} <${t.replyTo.email}>`:t.replyTo.email),t.headers&&(n.headers=$(t.headers)),t.attachments&&t.attachments.length>0&&(n.attachments=t.attachments.map(e=>{const o={filename:e.filename};return e.raw!==void 0?o.content=e.raw:e.content!==void 0?o.content=e.content:e.path&&(o.path=e.path),e.contentType&&(o.contentType=e.contentType),e.contentDisposition&&(o.contentDisposition=e.contentDisposition),e.cid&&(o.cid=e.cid),e.encoding&&(o.encoding=e.encoding),e.headers&&(o.headers=e.headers),e.href&&(o.href=e.href),e.httpHeaders&&(o.httpHeaders=e.httpHeaders),o})),n},"convertToNodemailerOptions");return{features:{attachments:!0,customHeaders:!0,html:!0,replyTo:!0},initialize:u,isAvailable:i(async()=>{try{return r??=l(),await r.verify(),!0}catch{return!1}},"isAvailable"),name:c,options:s,sendEmail:i(async t=>{const m=b(t);if(m.length>0)return{error:new p(c,`Validation failed: ${m.join(", ")}`),success:!1};try{if(d||await u(),!r)throw new p(c,"Transporter not initialized. Call initialize() first.");const a=t.transportOverride?l(t.transportOverride):r,f=y(t),n=await a.sendMail(f);return{data:{messageId:n.messageId||T(),provider:c,response:n,sent:!0,timestamp:new Date},success:!0}}catch(a){return{error:new p(c,`Failed to send email: ${a instanceof Error?a.message:String(a)}`,{cause:a instanceof Error?a:new Error(String(a))}),success:!1}}},"sendEmail"),shutdown:i(async()=>{r&&typeof r.close=="function"&&r.close(),r=void 0,d=!1},"shutdown"),validateCredentials:i(async()=>{try{return r??=l(),await r.verify(),!0}catch{return!1}},"validateCredentials")}});export{C as default};
|
package/dist/packem_shared/{opentelemetryProvider-C_ZXOLSd.js → opentelemetryProvider-Dwv88G3O.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
var E=Object.defineProperty;var v=(e,r)=>E(e,"name",{value:r,configurable:!0});import{context as h,trace as w,SpanStatusCode as f}from"@opentelemetry/api";import d from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{c as S}from"./create-logger-BiWdqFNg.js";import{defineProvider as
|
|
1
|
+
var E=Object.defineProperty;var v=(e,r)=>E(e,"name",{value:r,configurable:!0});import{context as h,trace as w,SpanStatusCode as f}from"@opentelemetry/api";import d from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{c as S}from"./create-logger-BiWdqFNg.js";import{defineProvider as z}from"./defineProvider-CtLH0VBE.js";var x=Object.defineProperty,c=v((e,r)=>x(e,"name",{value:r,configurable:!0}),"c");const C=c(e=>typeof e=="function","isProviderFactory"),$=c(e=>e!==null&&typeof e=="object"&&"sendEmail"in e&&"initialize"in e&&"isAvailable"in e,"isProvider"),s="opentelemetry",F="email",P="email.send",u=c(e=>e?typeof e=="string"?e:Array.isArray(e)?e.map(r=>typeof r=="string"?r:r.email).join(", "):e.email:"","formatEmailAddress"),R=c((e,r)=>{const i={"email.from":u(e.from),"email.subject":e.subject};return e.to&&(i["email.to"]=u(e.to)),e.cc&&(i["email.cc"]=u(e.cc)),e.bcc&&(i["email.bcc"]=u(e.bcc)),e.replyTo&&(i["email.reply_to"]=u(e.replyTo)),e.priority&&(i["email.priority"]=e.priority),e.tags&&e.tags.length>0&&(i["email.tags"]=e.tags.join(", ")),e.attachments&&e.attachments.length>0&&(i["email.attachments.count"]=e.attachments.length),r?(e.text&&(i["email.text.length"]=e.text.length),e.html&&(i["email.html.length"]=e.html.length)):(e.text&&(i["email.has_text"]=!0),e.html&&(i["email.has_html"]=!0)),i},"createSpanAttributes"),N=z(e=>{if(!e?.provider)throw new A(s,"provider");const r={debug:e.debug??!1,logger:e.logger,provider:e.provider,recordContent:e.recordContent??!1,retries:e.retries??3,serviceName:e.serviceName??F,timeout:e.timeout??3e4,tracer:e.tracer};let i=!1,t;const m=S(s,e.logger),y=c(()=>r.tracer?r.tracer:w.getTracer(r.serviceName),"getTracer"),g=c(async()=>{try{if(C(r.provider))t=r.provider({});else if($(r.provider))t=r.provider;else throw new d(s,"Invalid provider: must be a Provider instance or ProviderFactory function");await t.initialize(),m.debug(`Initialized wrapped provider: ${t.name??"unknown"}`)}catch(o){throw new d(s,`Failed to initialize wrapped provider: ${o.message}`,{cause:o})}},"initializeProvider"),b=c(()=>t?.features?t.features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!1},"getFeatures");return{get features(){return b()},getInstance(){if(!t)throw new d(s,"Provider not initialized. Call initialize() first.");return t},async initialize(){if(!i)try{await g(),i=!0,m.debug("OpenTelemetry provider initialized")}catch(o){throw new d(s,`Failed to initialize: ${o.message}`,{cause:o})}},async isAvailable(){try{return t||await g(),await t.isAvailable()}catch{return!1}},name:s,options:r,async sendEmail(o){const n=y().startSpan(P);try{t||await g();const l=R(o,r.recordContent);n.setAttributes(l),t.name&&n.setAttribute("email.provider",t.name);const a=await h.with(w.setSpan(h.active(),n),async()=>await t.sendEmail(o));if(a.success&&a.data)return n.setStatus({code:f.OK}),n.setAttribute("email.message_id",a.data.messageId),n.setAttribute("email.sent",!0),a.data.timestamp&&n.setAttribute("email.timestamp",a.data.timestamp.toISOString()),m.debug(`Email sent successfully via ${t.name??"unknown"}`),{data:{...a.data,provider:`${s}(${t.name??"unknown"})`},success:!0};const p=a.error instanceof Error?a.error.message:String(a.error??"Unknown error");return n.setStatus({code:f.ERROR,message:p}),n.setAttribute("email.sent",!1),n.recordException(a.error instanceof Error?a.error:new Error(p)),m.debug(`Failed to send email via ${t.name??"unknown"}:`,p),a}catch(l){const a=l instanceof Error?l.message:String(l);return n.setStatus({code:f.ERROR,message:a}),n.setAttribute("email.sent",!1),n.recordException(l instanceof Error?l:new Error(a)),m.debug("Exception sending email:",a),{error:new d(s,`Failed to send email: ${a}`,{cause:l}),success:!1}}finally{n.end()}},async shutdown(){t?.shutdown&&await t.shutdown(),i=!1},async validateCredentials(){try{return t||await g(),t.validateCredentials?await t.validateCredentials():await t.isAvailable()}catch{return!1}}}});export{N as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var j=Object.defineProperty;var b=(i,t)=>j(i,"name",{value:t,configurable:!0});import{createRequire as A}from"node:module";import m from"./EmailError-zm2ffVav.js";import z from"./RequiredOptionError-CevW3u2K.js";import{s as h}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as v}from"./make-request-
|
|
1
|
+
var j=Object.defineProperty;var b=(i,t)=>j(i,"name",{value:t,configurable:!0});import{createRequire as A}from"node:module";import m from"./EmailError-zm2ffVav.js";import z from"./RequiredOptionError-CevW3u2K.js";import{s as h}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as v}from"./make-request-CaT4d5oC.js";import{c as K,P as x,u as w,h as P}from"./provider-base-Cmzx6BTO.js";import{a as S,s as q}from"./sanitize-header-wWav-Scu.js";import{d as B}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as R}from"./defineProvider-CtLH0VBE.js";const $=A(import.meta.url),f=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,T=b(i=>{if(typeof f<"u"&&f.versions&&f.versions.node){const[t,u]=f.versions.node.split(".").map(Number);if(t>22||t===22&&u>=3||t===20&&u>=16)return f.getBuiltinModule(i)}return $(i)},"__cjs_getBuiltinModule"),{Buffer:k}=T("node:buffer");var O=Object.defineProperty,C=b((i,t)=>O(i,"name",{value:t,configurable:!0}),"b");const s="plunk",D="https://api.useplunk.com/v1",H=3e4,N=3,Z=R((i={})=>{if(!i.apiKey)throw new z(s,"apiKey");const t={apiKey:i.apiKey,debug:i.debug??!1,endpoint:i.endpoint??D,logger:i.logger,retries:i.retries??N,timeout:i.timeout??H},u=new x,n=K(s,i.logger);return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new m(s,"Email ID is required to retrieve email details"),success:!1};await u.ensureInitialized(()=>this.initialize(),s);const c={Authorization:`Bearer ${t.apiKey}`,"Content-Type":"application/json"};n.debug("Retrieving email details",{id:e});const l=await w(async()=>v(`${t.endpoint}/emails/${e}`,{headers:c,method:"GET",timeout:t.timeout}),t.retries);return l.success?(n.debug("Email details retrieved successfully"),{data:l.data?.body,success:!0}):(n.debug("API request failed when retrieving email",l.error),{error:new m(s,`Failed to retrieve email: ${l.error instanceof Error?l.error.message:"Unknown error"}`,{cause:l.error}),success:!1})}catch(c){return{error:P(s,"retrieve email",c,n),success:!1}}},async initialize(){await u.ensureInitialized(async()=>{if(!await this.isAvailable())throw new m(s,"Plunk API not available or invalid API key");n.debug("Provider initialized successfully")},s)},async isAvailable(){try{return t.apiKey&&t.apiKey.length>0?(n.debug("API key exists, assuming Plunk is available"),!0):!1}catch(e){return n.debug("Error checking availability:",e),!1}},name:s,options:t,async sendEmail(e){try{const c=B(e);if(c.length>0)return{error:new m(s,`Invalid email options: ${c.join(", ")}`),success:!1};await u.ensureInitialized(()=>this.initialize(),s);const l=C(r=>Array.isArray(r)?r.map(o=>o.email):[r.email],"formatRecipients"),a={to:e.subscriber??(Array.isArray(e.to)?e.to[0]?.email:e.to.email)};if(e.from&&(a.from=e.from.email,e.from.name&&(a.from_name=e.from.name)),e.subject&&(a.subject=e.subject),e.html?a.body=e.html:e.text&&(a.body=e.text),e.html&&e.text&&(a.text=e.text),e.cc&&(a.cc=l(e.cc)),e.bcc&&(a.bcc=l(e.bcc)),e.replyTo&&(a.reply_to=e.replyTo.email,e.replyTo.name&&(a.reply_to_name=e.replyTo.name)),e.templateId&&(a.template=e.templateId),e.data&&(a.data=e.data),e.subscriberId&&(a.subscriber_id=e.subscriberId),e.headers){const r=E(e.headers),o={};Object.entries(r).forEach(([y,_])=>{o[S(y)]=q(_)}),a.headers=o}e.attachments&&e.attachments.length>0&&(a.attachments=await Promise.all(e.attachments.map(async r=>{let o;if(r.content)if(typeof r.content=="string")o=r.content;else if(r.content instanceof Promise){const y=await r.content;o=k.from(y).toString("base64")}else o=r.content.toString("base64");else if(r.raw)o=typeof r.raw=="string"?r.raw:r.raw.toString("base64");else throw new m(s,`Attachment ${r.filename} has no content`);return{content:o,filename:r.filename,type:r.contentType??"application/octet-stream"}}))),n.debug("Sending email via Plunk API",{subject:a.subject,to:a.to});const I={Authorization:`Bearer ${t.apiKey}`,"Content-Type":"application/json"},d=await w(async()=>v(`${t.endpoint}/send`,{headers:I,method:"POST",timeout:t.timeout},JSON.stringify(a)),t.retries);if(!d.success)return n.debug("API request failed when sending email",d.error),{error:d.error??new m(s,"Failed to send email"),success:!1};const p=d.data,g=p?.body&&typeof p.body=="object"?p.body.id??p.body.messageId??h():h();return n.debug("Email sent successfully",{messageId:g}),{data:{messageId:g,provider:s,response:d.data,sent:!0,timestamp:new Date},success:!0}}catch(c){return{error:P(s,"send email",c,n),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{Z as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var I=Object.defineProperty;var y=(r,l)=>I(r,"name",{value:l,configurable:!0});import{createRequire as A}from"node:module";import c from"./EmailError-zm2ffVav.js";import b from"./RequiredOptionError-CevW3u2K.js";import{s as T}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as g}from"./make-request-
|
|
1
|
+
var I=Object.defineProperty;var y=(r,l)=>I(r,"name",{value:l,configurable:!0});import{createRequire as A}from"node:module";import c from"./EmailError-zm2ffVav.js";import b from"./RequiredOptionError-CevW3u2K.js";import{s as T}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as g}from"./make-request-CaT4d5oC.js";import{c as C,P as K,u as v}from"./provider-base-Cmzx6BTO.js";import{d as k}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as q}from"./defineProvider-CtLH0VBE.js";import{h as f,i as w}from"./address-formatter-Cm_E_ZMa.js";const j=A(import.meta.url),m=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,$=y(r=>{if(typeof m<"u"&&m.versions&&m.versions.node){const[l,n]=m.versions.node.split(".").map(Number);if(l>22||l===22&&n>=3||l===20&&n>=16)return m.getBuiltinModule(r)}return j(r)},"__cjs_getBuiltinModule"),{Buffer:S}=$("node:buffer"),i="postal",z=3e4,x=3,J=q((r={})=>{if(!r.host)throw new b(i,"host");if(!r.apiKey)throw new b(i,"apiKey");const l=r.endpoint??`https://${r.host}/api/v1`,n={apiKey:r.apiKey,debug:r.debug??!1,endpoint:l,host:r.host,retries:r.retries??x,timeout:r.timeout??z,...r.logger&&{logger:r.logger}},p=new K,o=C(i,r.logger);return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!0,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new c(i,"Email ID is required to retrieve email details"),success:!1};await p.ensureInitialized(()=>this.initialize(),i);const t={"Content-Type":"application/json","X-Server-API-Key":n.apiKey};o.debug("Retrieving email details",{id:e});const a=await v(async()=>g(`${n.endpoint}/messages/${e}`,{headers:t,method:"GET",timeout:n.timeout}),n.retries);return a.success?(o.debug("Email details retrieved successfully"),{data:a.data?.body,success:!0}):(o.debug("API request failed when retrieving email",a.error),{error:new c(i,`Failed to retrieve email: ${a.error instanceof Error?a.error.message:"Unknown error"}`,{cause:a.error}),success:!1})}catch(t){return o.debug("Exception retrieving email",t),{error:new c(i,`Failed to retrieve email: ${t.message}`,{cause:t}),success:!1}}},async initialize(){await p.ensureInitialized(async()=>{if(!await this.isAvailable())throw new c(i,"Postal API not available or invalid API key");o.debug("Provider initialized successfully")},i)},async isAvailable(){try{const e={"Content-Type":"application/json","X-Server-API-Key":n.apiKey};o.debug("Checking Postal API availability");const t=await g(`${n.endpoint}/server`,{headers:e,method:"GET",timeout:n.timeout});return o.debug("Postal API availability check response:",{error:t.error instanceof Error?t.error.message:void 0,statusCode:t.data?.statusCode,success:t.success}),!!(t.success&&t.data&&typeof t.data=="object"&&"statusCode"in t.data&&typeof t.data.statusCode=="number"&&t.data.statusCode>=200&&t.data.statusCode<300)}catch(e){return o.debug("Error checking availability:",e),!1}},name:i,options:n,async sendEmail(e){try{const t=k(e);if(t.length>0)return{error:new c(i,`Invalid email options: ${t.join(", ")}`),success:!1};await p.ensureInitialized(()=>this.initialize(),i);const a={from:w(e.from).address,subject:e.subject,to:f(e.to).map(s=>s.address)};if(e.html&&(a.html_body=e.html),e.text&&(a.plain_body=e.text),e.cc&&(a.cc=f(e.cc).map(s=>s.address)),e.bcc&&(a.bcc=f(e.bcc).map(s=>s.address)),e.replyTo&&(a.reply_to=w(e.replyTo).address),e.templateId&&(a.template_id=e.templateId,e.templateVariables&&(a.template_variables=e.templateVariables)),e.tags&&e.tags.length>0&&(a.tag=e.tags.join(",")),e.headers){const s=E(e.headers);a.headers=s}e.attachments&&e.attachments.length>0&&(a.attachments=await Promise.all(e.attachments.map(async s=>{let u;if(s.content)if(typeof s.content=="string")u=s.content;else if(s.content instanceof Promise){const _=await s.content;u=S.from(_).toString("base64")}else u=s.content.toString("base64");else if(s.raw)u=typeof s.raw=="string"?s.raw:s.raw.toString("base64");else throw new c(i,`Attachment ${s.filename} has no content`);return{content_type:s.contentType??"application/octet-stream",data:u,name:s.filename}}))),o.debug("Sending email via Postal API",{subject:a.subject,to:a.to});const P={"Content-Type":"application/json","X-Server-API-Key":n.apiKey},d=await v(async()=>g(`${n.endpoint}/send/message`,{headers:P,method:"POST",timeout:n.timeout},JSON.stringify(a)),n.retries);if(!d.success)return o.debug("API request failed when sending email",d.error),{error:d.error??new c(i,"Failed to send email"),success:!1};const h=d.data?.body?.message_id?.toString()??T();return o.debug("Email sent successfully",{messageId:h}),{data:{messageId:h,provider:i,response:d.data,sent:!0,timestamp:new Date},success:!0}}catch(t){return o.debug("Exception sending email",t),{error:new c(i,`Failed to send email: ${t.message}`,{cause:t}),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{J as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import d from"./EmailError-zm2ffVav.js";import T from"./RequiredOptionError-CevW3u2K.js";import{s as P}from"./generate-message-id-D4uA8gkj.js";import{i as w}from"./headers-to-record-Qo124ImV.js";import{m as u}from"./make-request-
|
|
1
|
+
import d from"./EmailError-zm2ffVav.js";import T from"./RequiredOptionError-CevW3u2K.js";import{s as P}from"./generate-message-id-D4uA8gkj.js";import{i as w}from"./headers-to-record-Qo124ImV.js";import{m as u}from"./make-request-CaT4d5oC.js";import{c as I,P as A,u as f,h}from"./provider-base-Cmzx6BTO.js";import{s as C,a as S}from"./sanitize-header-wWav-Scu.js";import{d as j}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as E}from"./defineProvider-CtLH0VBE.js";import{b as p,c as v}from"./address-formatter-Cm_E_ZMa.js";import{b as z}from"./attachment-processor-DsmIomKc.js";const r="postmark",M="https://api.postmarkapp.com",$=3e4,O=3,V=E((o={})=>{if(!o.serverToken)throw new T(r,"serverToken");const s={debug:o.debug??!1,endpoint:o.endpoint??M,retries:o.retries??O,serverToken:o.serverToken,timeout:o.timeout??$,...o.logger&&{logger:o.logger}},m=new A,i=I(r,o.logger);return{endpoint:s.endpoint,features:{attachments:!0,batchSending:!0,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!0,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new d(r,"Email ID is required to retrieve email details"),success:!1};await m.ensureInitialized(()=>this.initialize(),r);const a={"Content-Type":"application/json","X-Postmark-Server-Token":s.serverToken};i.debug("Retrieving email details",{id:e});const t=await f(async()=>u(`${s.endpoint}/messages/outbound/${e}/details`,{headers:a,method:"GET",timeout:s.timeout}),s.retries);return t.success?(i.debug("Email details retrieved successfully"),{data:t.data?.body,success:!0}):(i.debug("API request failed when retrieving email",t.error),{error:new d(r,`Failed to retrieve email: ${t.error instanceof Error?t.error.message:"Unknown error"}`,{cause:t.error}),success:!1})}catch(a){return{error:h(r,"retrieve email",a,i),success:!1}}},async initialize(){await m.ensureInitialized(async()=>{if(!await this.isAvailable())throw new d(r,"Postmark API not available or invalid server token");i.debug("Provider initialized successfully")},r)},async isAvailable(){try{const e={"Content-Type":"application/json","X-Postmark-Server-Token":s.serverToken};i.debug("Checking Postmark API availability");const a=await u(`${s.endpoint}/server`,{headers:e,method:"GET",timeout:s.timeout});return i.debug("Postmark API availability check response:",{error:a.error instanceof Error?a.error.message:void 0,statusCode:a.data?.statusCode,success:a.success}),!!(a.success&&a.data&&typeof a.data=="object"&&"statusCode"in a.data&&typeof a.data.statusCode=="number"&&a.data.statusCode>=200&&a.data.statusCode<300)}catch(e){return i.debug("Error checking availability:",e),!1}},name:r,options:s,async sendEmail(e){try{const a=j(e);if(a.length>0)return{error:new d(r,`Invalid email options: ${a.join(", ")}`),success:!1};await m.ensureInitialized(()=>this.initialize(),r);const t={From:v(e.from),Subject:e.subject,To:p(e.to).join(",")};if(e.html&&(t.HtmlBody=e.html),e.text&&(t.TextBody=e.text),e.cc&&(t.Cc=p(e.cc).join(",")),e.bcc&&(t.Bcc=p(e.bcc).join(",")),e.replyTo&&(t.ReplyTo=v(e.replyTo)),e.templateId?(t.TemplateId=e.templateId,e.templateModel&&(t.TemplateModel=e.templateModel)):e.templateAlias&&(t.TemplateAlias=e.templateAlias,e.templateModel&&(t.TemplateModel=e.templateModel)),e.trackOpens!==void 0&&(t.TrackOpens=e.trackOpens),e.trackLinks!==void 0&&(t.TrackLinks=e.trackLinks),e.inlineCss!==void 0&&(t.InlineCss=e.inlineCss),e.messageStream&&(t.MessageStream=e.messageStream),e.metadata&&(t.Metadata=e.metadata),e.tags&&e.tags.length>0){const[l]=e.tags;t.Tag=l}if(e.headers){const l=w(e.headers),c=[];for(const[b,y]of Object.entries(l))c.push({Name:S(b),Value:C(String(y))});c.length>0&&(t.Headers=c)}e.attachments&&e.attachments.length>0&&(t.Attachments=await Promise.all(e.attachments.map(async l=>z(l,r)))),i.debug("Sending email via Postmark API",{subject:t.Subject,to:t.To});const k={"Content-Type":"application/json","X-Postmark-Server-Token":s.serverToken},n=await f(async()=>u(`${s.endpoint}/email`,{headers:k,method:"POST",timeout:s.timeout},JSON.stringify(t)),s.retries);if(!n.success)return i.debug("API request failed when sending email",n.error),{error:n.error??new d(r,"Failed to send email"),success:!1};const g=n.data?.body?.MessageID??P();return i.debug("Email sent successfully",{messageId:g}),{data:{messageId:g,provider:r,response:n.data,sent:!0,timestamp:new Date},success:!0}}catch(a){return{error:h(r,"send email",a,i),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{V as default};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { E as EmailOptions, F as FeatureFlags, R as Result, M as MaybePromise, a as EmailResult } from "./types.d-wwpgA3to.js";
|
|
2
|
+
/**
|
|
3
|
+
* Standard provider interface for email services.
|
|
4
|
+
*/
|
|
5
|
+
interface Provider<OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions> {
|
|
6
|
+
endpoint?: string;
|
|
7
|
+
features?: FeatureFlags;
|
|
8
|
+
getEmail?: (id: string) => MaybePromise<Result>;
|
|
9
|
+
getInstance?: () => InstanceT;
|
|
10
|
+
initialize: (options?: Record<string, unknown>) => MaybePromise<void>;
|
|
11
|
+
isAvailable: () => MaybePromise<boolean>;
|
|
12
|
+
name?: string;
|
|
13
|
+
options?: OptionsT;
|
|
14
|
+
sendEmail: (options: EmailOptionsT) => MaybePromise<Result<EmailResult>>;
|
|
15
|
+
shutdown?: () => MaybePromise<void>;
|
|
16
|
+
validateCredentials?: () => MaybePromise<boolean>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Type for provider factory function.
|
|
20
|
+
*/
|
|
21
|
+
type ProviderFactory<OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions> = (options?: OptionsT) => Provider<OptionsT, InstanceT, EmailOptionsT>;
|
|
22
|
+
/**
|
|
23
|
+
* Helper function to define an email provider.
|
|
24
|
+
* @param factory The provider factory function.
|
|
25
|
+
* @returns The same factory function (for type inference).
|
|
26
|
+
*/
|
|
27
|
+
declare const defineProvider: <OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions>(factory: ProviderFactory<OptionsT, InstanceT, EmailOptionsT>) => ProviderFactory<OptionsT, InstanceT, EmailOptionsT>;
|
|
28
|
+
export { ProviderFactory as P, Provider as a, defineProvider as d };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var jr=Object.defineProperty;var b=(e,r)=>jr(e,"name",{value:r,configurable:!0});import{createRequire as Or}from"node:module";const Pr=Or(import.meta.url),D=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,zr=b(e=>{if(typeof D<"u"&&D.versions&&D.versions.node){const[r,i]=D.versions.node.split(".").map(Number);if(r>22||r===22&&i>=3||r===20&&i>=16)return D.getBuiltinModule(e)}return Pr(e)},"__cjs_getBuiltinModule"),{createRequire:ae}=zr("node:module"),_r=0,Er=4;var Mr=Object.defineProperty,kr=b((e,r)=>Mr(e,"name",{value:r,configurable:!0}),"t$2"),Ar=Object.defineProperty,Rr=kr((e,r)=>Ar(e,"name",{value:r,configurable:!0}),"t"),Br=Object.defineProperty,Tr=Rr((e,r)=>Br(e,"name",{value:r,configurable:!0}),"n");const Ie=Tr(e=>{if(!e||!(e instanceof URL)&&typeof e!="string")throw new TypeError("Path must be a non-empty string or URL.")},"assertValidFileOrDirectoryPath");var Nr=Object.defineProperty,Sr=b((e,r)=>Nr(e,"name",{value:r,configurable:!0}),"$e"),Ir=Object.defineProperty,ie=Sr((e,r)=>Ir(e,"name",{value:r,configurable:!0}),"W"),Fr=Object.defineProperty,c=ie((e,r)=>Fr(e,"name",{value:r,configurable:!0}),"u$1");let Re=c(()=>{var e=(()=>{var r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,g=Object.prototype.hasOwnProperty,x=c((t,n)=>{for(var o in n)r(t,o,{get:n[o],enumerable:!0})},"ne"),y=c((t,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of u(n))!g.call(t,s)&&s!==o&&r(t,s,{get:c(()=>n[s],"get"),enumerable:!(a=i(n,s))||a.enumerable});return t},"ae"),v=c(t=>y(r({},"__esModule",{value:!0}),t),"oe"),k={};x(k,{zeptomatch:c(()=>Ae,"zeptomatch")});var I=c(t=>{const n=new Set,o=[t];for(let a=0;a<o.length;a++){const s=o[a];if(n.has(s))continue;n.add(s);const{children:l}=s;if(l?.length)for(let f=0,d=l.length;f<d;f++)o.push(l[f])}return Array.from(n)},"M"),Y=c(t=>{let n="";const o=I(t);for(let a=0,s=o.length;a<s;a++){const l=o[a];if(!l.regex)continue;const f=l.regex.flags;if(n||(n=f),n!==f)throw new Error(`Inconsistent RegExp flags used: "${n}" and "${f}"`)}return n},"se"),ge=c((t,n,o)=>{const a=o.get(t);if(a!==void 0)return a;const s=t.partial??n;let l="";if(t.regex&&(l+=s?"(?:$|":"",l+=t.regex.source),t.children?.length){const f=Qe(t.children.map(d=>ge(d,n,o)).filter(Boolean));if(f?.length){const d=t.children.some(C=>!C.regex||!(C.partial??n)),h=f.length>1||s&&(!l.length||d);l+=h?s?"(?:$|":"(?:":"",l+=f.join("|"),l+=h?")":""}}return t.regex&&(l+=s?")":""),o.set(t,l),l},"O"),Ke=c((t,n)=>{const o=new Map,a=I(t);for(let s=a.length-1;s>=0;s--){const l=ge(a[s],n,o);if(!(s>0))return l}return""},"ie"),Qe=c(t=>Array.from(new Set(t)),"ue"),Q=c((t,n,o)=>Q.compile(t,o).test(n),"R");Q.compile=(t,n)=>{const o=n?.partial??!1,a=Ke(t,o),s=Y(t);return new RegExp(`^(?:${a})$`,s)};var Xe=Q,et=c((t,n)=>{const o=Xe.compile(t,n),a=`${o.source.slice(0,-1)}[\\\\/]?$`,s=o.flags;return new RegExp(a,s)},"le"),tt=et,rt=c(t=>{const n=t.map(a=>a.source).join("|")||"$^",o=t[0]?.flags;return new RegExp(n,o)},"ve"),nt=rt,de=c(t=>Array.isArray(t),"j"),F=c(t=>typeof t=="function","_"),ot=c(t=>t.length===0,"he"),st=(()=>{const{toString:t}=Function.prototype,n=/(?:^\(\s*(?:[^,.()]|\.(?!\.\.))*\s*\)\s*=>|^\s*[a-zA-Z$_][a-zA-Z0-9$_]*\s*=>)/;return o=>(o.length===0||o.length===1)&&n.test(t.call(o))})(),at=c(t=>typeof t=="number","de"),it=c(t=>typeof t=="object"&&t!==null,"xe"),lt=c(t=>t instanceof RegExp,"me"),ut=(()=>{const t=/\\\(|\((?!\?(?::|=|!|<=|<!))/;return n=>t.test(n.source)})(),ct=(()=>{const t=/^[a-zA-Z0-9_-]+$/;return n=>t.test(n.source)&&!n.flags.includes("i")})(),me=c(t=>typeof t=="string","A"),_=c(t=>t===void 0,"f"),ft=c(t=>{const n=new Map;return o=>{const a=n.get(o);if(a!==void 0)return a;const s=t(o);return n.set(o,s),s}},"ye"),he=c((t,n,o={})=>{const a={cache:{},input:t,index:0,indexBacktrackMax:0,options:o,output:[]},s=E(n)(a),l=Math.max(a.index,a.indexBacktrackMax);if(s&&a.index===t.length)return a.output;throw new Error(`Failed to parse at index ${l}`)},"I"),p=c((t,n)=>de(t)?pt(t,n):me(t)?be(t,n):gt(t,n),"i"),pt=c((t,n)=>{const o={};for(const a of t){if(a.length!==1)throw new Error(`Invalid character: "${a}"`);const s=a.charCodeAt(0);o[s]=!0}return a=>{const s=a.input;let l=a.index,f=l;for(;f<s.length&&s.charCodeAt(f)in o;)f+=1;if(f>l){if(!_(n)&&!a.options.silent){const d=s.slice(l,f),h=F(n)?n(d,s,`${l}`):n;_(h)||a.output.push(h)}a.index=f}return!0}},"we"),gt=c((t,n)=>{if(ct(t))return be(t.source,n);{const o=t.source,a=t.flags.replace(/y|$/,"y"),s=new RegExp(o,a);return ut(t)&&F(n)&&!st(n)?dt(s,n):mt(s,n)}},"$e"),dt=c((t,n)=>o=>{const a=o.index,s=o.input;t.lastIndex=a;const l=t.exec(s);if(l){const f=t.lastIndex;if(!o.options.silent){const d=n(...l,s,`${a}`);_(d)||o.output.push(d)}return o.index=f,!0}else return!1},"Ee"),mt=c((t,n)=>o=>{const a=o.index,s=o.input;if(t.lastIndex=a,t.test(s)){const l=t.lastIndex;if(!_(n)&&!o.options.silent){const f=F(n)?n(s.slice(a,l),s,`${a}`):n;_(f)||o.output.push(f)}return o.index=l,!0}else return!1},"Ce"),be=c((t,n)=>o=>{const a=o.index,s=o.input;if(s.startsWith(t,a)){if(!_(n)&&!o.options.silent){const l=F(n)?n(t,s,`${a}`):n;_(l)||o.output.push(l)}return o.index+=t.length,!0}else return!1},"F"),X=c((t,n,o,a)=>{const s=E(t),l=n>1;return te(ee(ve(f=>{let d=0;for(;d<o;){const h=f.index;if(!s(f)||(d+=1,f.index===h))break}return d>=n},l),a))},"k"),xe=c((t,n)=>X(t,0,1,n),"L"),H=c((t,n)=>X(t,0,1/0,n),"$"),ht=c((t,n)=>X(t,1,1/0,n),"Re"),B=c((t,n)=>{const o=t.map(E);return te(ee(ve(a=>{for(let s=0,l=o.length;s<l;s++)if(!o[s](a))return!1;return!0}),n))},"x"),w=c((t,n)=>{const o=t.map(E);return te(ee(a=>{for(let s=0,l=o.length;s<l;s++)if(o[s](a))return!0;return!1},n))},"p"),ve=c((t,n=!0,o=!1)=>{const a=E(t);return n?s=>{const l=s.index,f=s.output.length,d=a(s);return!d&&!o&&(s.indexBacktrackMax=Math.max(s.indexBacktrackMax,s.index)),(!d||o)&&(s.index=l,s.output.length!==f&&(s.output.length=f)),d}:a},"q"),ee=c((t,n)=>{const o=E(t);return n?a=>{if(a.options.silent)return o(a);const s=a.output.length;if(o(a)){const l=a.output.splice(s,1/0),f=n(l);return _(f)||a.output.push(f),!0}else return!1}:o},"B"),te=(()=>{let t=0;return n=>{const o=E(n),a=t+=1;return s=>{var l;if(s.options.memoization===!1)return o(s);const f=s.index,d=(l=s.cache)[a]||(l[a]={indexMax:-1,queue:[]}),h=d.queue;if(f<=d.indexMax){const W=d.store||(d.store=new Map);if(h.length){for(let N=0,$r=h.length;N<$r;N+=2){const yr=h[N*2],wr=h[N*2+1];W.set(yr,wr)}h.length=0}const j=W.get(f);if(j===!1)return!1;if(at(j))return s.index=j,!0;if(j)return s.index=j.index,j.output?.length&&s.output.push(...j.output),!0}const C=s.output.length,vr=o(s);if(d.indexMax=Math.max(d.indexMax,f),vr){const W=s.index,j=s.output.length;if(j>C){const N=s.output.slice(C,j);h.push(f,{index:W,output:N})}else h.push(f,W);return!0}else return h.push(f,!1),!1}}})(),$e=c(t=>{let n;return o=>(n||(n=E(t())),n(o))},"G"),E=ft(t=>{if(F(t))return ot(t)?$e(t):t;if(me(t)||lt(t))return p(t);if(de(t))return B(t);if(it(t))return w(Object.values(t));throw new Error("Invalid rule")}),A=c(t=>t,"d"),bt=c(t=>typeof t=="string","ke"),xt=c(t=>{const n=new WeakMap,o=new WeakMap;return(a,s)=>{const l=s?.partial?o:n,f=l.get(a);if(f!==void 0)return f;const d=t(a,s);return l.set(a,d),d}},"Be"),vt=c(t=>{const n={},o={};return(a,s)=>{const l=s?.partial?o:n;return l[a]??(l[a]=t(a,s))}},"Pe"),$t=p(/\\./,A),yt=p(/./,A),wt=p(/\*\*\*+/,"*"),jt=p(/([^/{[(!])\*\*/,(t,n)=>`${n}*`),Ot=p(/(^|.)\*\*(?=[^*/)\]}])/,(t,n)=>`${n}*`),Pt=H(w([$t,wt,jt,Ot,yt])),zt=Pt,_t=c(t=>he(t,zt,{memoization:!1}).join(""),"Ie"),Et=_t,ye="abcdefghijklmnopqrstuvwxyz",Mt=c(t=>{let n="";for(;t>0;){const o=(t-1)%26;n=ye[o]+n,t=Math.floor((t-1)/26)}return n},"Le"),we=c(t=>{let n=0;for(let o=0,a=t.length;o<a;o++)n=n*26+ye.indexOf(t[o])+1;return n},"V"),re=c((t,n)=>{if(n<t)return re(n,t);const o=[];for(;t<=n;)o.push(t++);return o},"b"),kt=c((t,n,o)=>re(t,n).map(a=>String(a).padStart(o,"0")),"qe"),je=c((t,n)=>re(we(t),we(n)).map(Mt),"W"),m=c(t=>({partial:!1,regex:new RegExp(t,"s"),children:[]}),"c"),q=c(t=>({children:t}),"y"),T=(()=>{const t=c((n,o,a)=>{if(a.has(n))return;a.add(n);const{children:s}=n;if(!s.length)s.push(o);else for(let l=0,f=s.length;l<f;l++)t(s[l],o,a)},"e");return n=>{if(!n.length)return q([]);for(let o=n.length-1;o>=1;o--){const a=new Set,s=n[o-1],l=n[o];t(s,l,a)}return n[0]}})(),M=c(()=>({regex:new RegExp("[\\\\/]","s"),children:[]}),"g"),At=p(/\\./,m),Rt=p(/[$.*+?^(){}[\]\|]/,t=>m(`\\${t}`)),Bt=p(/[\\\/]/,M),Tt=p(/[^$.*+?^(){}[\]\|\\\/]+/,m),Nt=p(/^(?:!!)*!(.*)$/,(t,n)=>m(`(?!^${Ae.compile(n).source}$).*?`)),St=p(/^(!!)+/),It=w([Nt,St]),Ft=p(/\/(\*\*\/)+/,()=>q([T([M(),m(".+?"),M()]),M()])),qt=p(/^(\*\*\/)+/,()=>q([m("^"),T([m(".*?"),M()])])),Ct=p(/\/(\*\*)$/,()=>q([T([M(),m(".*?")]),m("$")])),Wt=p(/\*\*/,()=>m(".*?")),Oe=w([Ft,qt,Ct,Wt]),Dt=p(/\*\/(?!\*\*\/|\*$)/,()=>T([m("[^\\\\/]*?"),M()])),Lt=p(/\*/,()=>m("[^\\\\/]*")),Pe=w([Dt,Lt]),ze=p("?",()=>m("[^\\\\/]")),Ut=p("[",A),Zt=p("]",A),Gt=p(/[!^]/,"^\\\\/"),Vt=p(/[a-z]-[a-z]|[0-9]-[0-9]/i,A),Yt=p(/\\./,A),Ht=p(/[$.*+?^(){}[\|]/,t=>`\\${t}`),Jt=p(/[\\\/]/,"\\\\/"),Kt=p(/[^$.*+?^(){}[\]\|\\\/]+/,A),Qt=w([Yt,Ht,Jt,Vt,Kt]),_e=B([Ut,xe(Gt),H(Qt),Zt],t=>m(t.join(""))),Xt=p("{","(?:"),er=p("}",")"),tr=p(/(\d+)\.\.(\d+)/,(t,n,o)=>kt(+n,+o,Math.min(n.length,o.length)).join("|")),rr=p(/([a-z]+)\.\.([a-z]+)/,(t,n,o)=>je(n,o).join("|")),nr=p(/([A-Z]+)\.\.([A-Z]+)/,(t,n,o)=>je(n.toLowerCase(),o.toLowerCase()).join("|").toUpperCase()),or=w([tr,rr,nr]),Ee=B([Xt,or,er],t=>m(t.join(""))),sr=p("{"),ar=p("}"),ir=p(","),lr=p(/\\./,m),ur=p(/[$.*+?^(){[\]\|]/,t=>m(`\\${t}`)),cr=p(/[\\\/]/,M),fr=p(/[^$.*+?^(){}[\]\|\\\/,]+/,m),pr=$e(()=>ke),gr=p("",()=>m("(?:)")),dr=ht(w([Oe,Pe,ze,_e,Ee,pr,lr,ur,cr,fr]),T),Me=w([dr,gr]),ke=B([sr,xe(B([Me,H(B([ir,Me]))])),ar],q),mr=H(w([It,Oe,Pe,ze,_e,Ee,ke,At,Rt,Bt,Tt]),T),hr=mr,br=c(t=>he(t,hr,{memoization:!1})[0],"kr"),xr=br,ne=c((t,n,o)=>ne.compile(t,o).test(n),"N");ne.compile=(()=>{const t=vt((o,a)=>tt(xr(Et(o)),a)),n=xt((o,a)=>nt(o.map(s=>t(s,a))));return(o,a)=>bt(o)?t(o,a):n(o,a)})();var Ae=ne;return v(k)})();return e.default||e},"_lazyMatch"),oe;const qr=c((e,r)=>(oe||(oe=Re(),Re=null),oe(e,r)),"default");var Cr=Object.defineProperty,Wr=ie((e,r)=>Cr(e,"name",{value:r,configurable:!0}),"t$1");const Dr=/^[A-Z]:\//i,O=Wr((e="")=>e&&e.replaceAll("\\","/").replace(Dr,r=>r.toUpperCase()),"normalizeWindowsPath");var Lr=Object.defineProperty,$=ie((e,r)=>Lr(e,"name",{value:r,configurable:!0}),"r");const Ur=/^[/\\]{2}/,Zr=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i,Fe=/^[A-Z]:$/i,Be=/^\/([A-Z]:)?$/i,Gr=/.(\.[^./]+)$/,Vr=/^[/\\]|^[a-z]:[/\\]/i,Yr=/\/$/,Hr=$(()=>typeof process.cwd=="function"?process.cwd().replaceAll("\\","/"):"/","cwd"),qe=$((e,r)=>{let i="",u=0,g=-1,x=0,y;for(let v=0;v<=e.length;++v){if(v<e.length)y=e[v];else{if(y==="/")break;y="/"}if(y==="/"){if(!(g===v-1||x===1))if(x===2){if(i.length<2||u!==2||!i.endsWith(".")||i.at(-2)!=="."){if(i.length>2){const k=i.lastIndexOf("/");k===-1?(i="",u=0):(i=i.slice(0,k),u=i.length-1-i.lastIndexOf("/")),g=v,x=0;continue}else if(i.length>0){i="",u=0,g=v,x=0;continue}}r&&(i+=i.length>0?"/..":"..",u=2)}else i.length>0?i+=`/${e.slice(g+1,v)}`:i=e.slice(g+1,v),u=v-g-1;g=v,x=0}else y==="."&&x!==-1?++x:x=-1}return i},"normalizeString"),G=$(e=>Zr.test(e),"isAbsolute"),Ce=$(function(e){if(e.length===0)return".";e=O(e);const r=Ur.exec(e),i=G(e),u=e.at(-1)==="/";return e=qe(e,!i),e.length===0?i?"/":u?"./":".":(u&&(e+="/"),Fe.test(e)&&(e+="/"),r?i?`//${e}`:`//./${e}`:i&&!G(e)?`/${e}`:e)},"normalize"),We=$((...e)=>{let r="";for(const i of e)if(i)if(r.length>0){const u=r.at(-1)==="/",g=i[0]==="/";u&&g?r+=i.slice(1):r+=u||g?i:`/${i}`}else r+=i;return Ce(r)},"join"),se=$(function(...e){e=e.map(u=>O(u));let r="",i=!1;for(let u=e.length-1;u>=-1&&!i;u--){const g=u>=0?e[u]:Hr();!g||g.length===0||(r=`${g}/${r}`,i=G(g))}return r=qe(r,!i),i&&!G(r)?`/${r}`:r.length>0?r:"."},"resolve");$(function(e){return O(e)},"toNamespacedPath");const De=$(function(e){return Gr.exec(O(e))?.[1]??""},"extname");$(function(e,r){const i=se(e).replace(Be,"$1").split("/"),u=se(r).replace(Be,"$1").split("/");if(u[0][1]===":"&&i[0][1]===":"&&i[0]!==u[0])return u.join("/");const g=[...i];for(const x of g){if(u[0]!==x)break;i.shift(),u.shift()}return[...i.map(()=>".."),...u].join("/")},"relative");const Jr=$(e=>{const r=O(e).replace(Yr,"").split("/").slice(0,-1);return r.length===1&&Fe.test(r[0])&&(r[0]=`${r[0]}/`),r.join("/")||(G(e)?"/":".")},"dirname");$(function(e){const r=[e.root,e.dir,e.base??e.name+e.ext].filter(Boolean);return O(e.root?se(...r):r.join("/"))},"format");const Kr=$((e,r)=>{const i=O(e).split("/").pop();return r&&i.endsWith(r)?i.slice(0,-r.length):i},"basename");$(function(e){const r=Vr.exec(e)?.[0]?.replaceAll("\\","/")??"",i=Kr(e),u=De(i);return{base:i,dir:Jr(e),ext:u,name:i.slice(0,i.length-u.length),root:r}},"parse");$((e,r)=>qr(r,Ce(e)),"matchesGlob");var Qr=Object.defineProperty,R=b((e,r)=>Qr(e,"name",{value:r,configurable:!0}),"n$2"),Xr=Object.defineProperty,z=R((e,r)=>Xr(e,"name",{value:r,configurable:!0}),"a");const en=ae(import.meta.url),L=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,tn=z(e=>{if(typeof L<"u"&&L.versions&&L.versions.node){const[r,i]=L.versions.node.split(".").map(Number);if(r>22||r===22&&i>=3||r===20&&i>=16)return L.getBuiltinModule(e)}return en(e)},"__cjs_getBuiltinModule"),{fileURLToPath:rn}=tn("node:url");var nn=Object.defineProperty,S=z((e,r)=>nn(e,"name",{value:r,configurable:!0}),"t$1");function K(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}b(K,"m$2");R(K,"d");z(K,"getDefaultExportFromCjs");S(K,"getDefaultExportFromCjs");function le(e){return e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}b(le,"h$1");R(le,"O");z(le,"getDefaultExportFromNamespaceIfPresent");S(le,"getDefaultExportFromNamespaceIfPresent");function ue(e){return e&&Object.prototype.hasOwnProperty.call(e,"default")&&Object.keys(e).length===1?e.default:e}b(ue,"x");R(ue,"P");z(ue,"getDefaultExportFromNamespaceIfNotNamed");S(ue,"getDefaultExportFromNamespaceIfNotNamed");function ce(e){if(Object.prototype.hasOwnProperty.call(e,"__esModule"))return e;var r=e.default;if(typeof r=="function"){var i=S(z(R(b(function u(){var g=!1;try{g=this instanceof u}catch{}return g?Reflect.construct(r,arguments,this.constructor):r.apply(this,arguments)},"a"),"s"),"a"),"a");i.prototype=r.prototype}else i={};return Object.defineProperty(i,"__esModule",{value:!0}),Object.keys(e).forEach(function(u){var g=Object.getOwnPropertyDescriptor(e,u);Object.defineProperty(i,u,g.get?g:{enumerable:!0,get:S(function(){return e[u]},"get")})}),i}b(ce,"y");R(ce,"_");z(ce,"getAugmentedNamespace");S(ce,"getAugmentedNamespace");var Te,Ne;function fe(){return Ne||(Ne=1,Te=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cr3","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Te}b(fe,"w$1");R(fe,"k");z(fe,"requireBinaryExtensions");var on=fe();const sn=K(on);var an=Object.defineProperty,P=z((e,r)=>an(e,"name",{value:r,configurable:!0}),"r");const ln=new Set(sn),un=new Set(["/","\\",void 0]),Se=Symbol.for("pathe:normalizedAlias"),cn=/(^|[/\\])([^/\\]+?)(?=(?:\.[^.]+)?$)/,fn=P((e,r)=>r.split("/").length-e.split("/").length,"compareAliases"),J=P((e="/")=>{const r=e.at(-1);return r==="/"||r==="\\"},"hasTrailingSlash"),Le=P(e=>{if(e[Se])return e;const r=Object.fromEntries(Object.entries(e).toSorted(([i],[u])=>fn(i,u)));for(const i in r)for(const u in r)u===i||i.startsWith(u)||r[i].startsWith(u)&&un.has(r[i][u.length])&&(r[i]=r[u]+r[i].slice(u.length));return Object.defineProperty(r,Se,{enumerable:!1,value:!0}),r},"normalizeAliases");P((e,r)=>{e=O(e),r=Le(r);for(const[i,u]of Object.entries(r)){if(!e.startsWith(i))continue;const g=J(i)?i.slice(0,-1):i;if(J(e[g.length]))return We(u,e.slice(i.length))}return e},"resolveAlias");P(e=>cn.exec(e)?.[2],"filename");P((e,r)=>{e=O(e),r=Le(r);for(const[i,u]of Object.entries(r).toReversed()){if(!e.startsWith(u))continue;const g=J(u)?u.slice(0,-1):u;if(J(e[g.length]))return We(i,e.slice(u.length))}return e},"reverseResolveAlias");const pn=/^(?:\.?\.[/\\]|\.\.\B)/,gn=/^(?:msys|cygwin)$/;P(e=>pn.test(e)||e==="..","isRelative");P(e=>ln.has(De(e).slice(1).toLowerCase()),"isBinaryPath");const Ue=P(e=>O(e instanceof URL?rn(e):e),"toPath");P(()=>{if(!globalThis.process)return!1;if(globalThis.process.platform==="win32"||globalThis.process.platform==="cygwin")return!0;const e=globalThis.process.env.OSTYPE;return typeof e!="string"?!1:gn.test(e)},"isWindows");var dn=Object.defineProperty,Ze=b((e,r)=>dn(e,"name",{value:r,configurable:!0}),"t$1"),mn=Object.defineProperty,pe=Ze((e,r)=>mn(e,"name",{value:r,configurable:!0}),"s");const hn=ae(import.meta.url),U=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,bn=pe(e=>{if(typeof U<"u"&&U.versions&&U.versions.node){const[r,i]=U.versions.node.split(".").map(Number);if(r>22||r===22&&i>=3||r===20&&i>=16)return U.getBuiltinModule(e)}return hn(e)},"__cjs_getBuiltinModule"),{access:xn}=bn("node:fs/promises");var vn=Object.defineProperty,$n=pe((e,r)=>vn(e,"name",{value:r,configurable:!0}),"o");async function V(e,r=_r){Ie(e),e=Ue(e);try{return await xn(e,r),!0}catch{return!1}}b(V,"i$1");Ze(V,"d");pe(V,"m");$n(V,"isAccessible");var yn=Object.defineProperty,Ge=b((e,r)=>yn(e,"name",{value:r,configurable:!0}),"t"),wn=Object.defineProperty,Ve=Ge((e,r)=>wn(e,"name",{value:r,configurable:!0}),"t"),jn=Object.defineProperty,On=Ve((e,r)=>jn(e,"name",{value:r,configurable:!0}),"o");let Pn=class extends Error{static{b(this,"c")}static{Ge(this,"i")}static{Ve(this,"n")}static{On(this,"PermissionError")}constructor(r){super(`EPERM: Operation not permitted, ${r}`)}get code(){return"EPERM"}set code(r){throw new Error("Cannot overwrite code EPERM")}get name(){return"PermissionError"}set name(r){throw new Error("Cannot overwrite name of PermissionError")}};var zn=Object.defineProperty,_n=b((e,r)=>zn(e,"name",{value:r,configurable:!0}),"f"),En=Object.defineProperty,Ye=_n((e,r)=>En(e,"name",{value:r,configurable:!0}),"i");const Mn=ae(import.meta.url),Z=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,He=Ye(e=>{if(typeof Z<"u"&&Z.versions&&Z.versions.node){const[r,i]=Z.versions.node.split(".").map(Number);if(r>22||r===22&&i>=3||r===20&&i>=16)return Z.getBuiltinModule(e)}return Mn(e)},"__cjs_getBuiltinModule"),{readFile:kn}=He("node:fs/promises"),{unzip:An,brotliDecompress:Rn}=He("node:zlib");var Bn=Object.defineProperty,Je=Ye((e,r)=>Bn(e,"name",{value:r,configurable:!0}),"n");const Tn={brotli:Rn,gzip:An,none:Je((e,r)=>{r(null,e)},"none")},Fn=Je(async(e,r)=>{if(Ie(e),e=Ue(e),!await V(e))throw new Pn(`unable to read the non-accessible file: ${e}`);if(!await V(e,Er))throw new Error(`Unable to read the non-readable file: ${e}`);const{buffer:i,compression:u,encoding:g,flag:x}=r??{};return await kn(e,x?{encoding:g,flag:x}:{encoding:g}).then(async y=>await new Promise((v,k)=>{Tn[u??"none"](y,(I,Y)=>{I?k(I):v(i?Y:Y.toString())})})).catch(y=>{throw y})},"readFile");export{Fn as B};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var I=Object.defineProperty;var h=(r,a)=>I(r,"name",{value:a,configurable:!0});import c from"./EmailError-zm2ffVav.js";import P from"./RequiredOptionError-CevW3u2K.js";import{s as $}from"./generate-message-id-D4uA8gkj.js";import{i as j}from"./headers-to-record-Qo124ImV.js";import{m as f}from"./make-request-CaT4d5oC.js";import{c as T,P as C,u as y,h as b}from"./provider-base-Cmzx6BTO.js";import{d as E}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as S}from"./defineProvider-CtLH0VBE.js";import{b as z,c as v,l as w}from"./address-formatter-Cm_E_ZMa.js";var k=Object.defineProperty,K=h((r,a)=>k(r,"name",{value:a,configurable:!0}),"p");const n="resend",R="https://api.resend.com",_=3e4,x=3,D=K(r=>{const a=[],l=/^[\w-]+$/;return l.test(r.name)||a.push(`Tag name '${r.name}' must only contain ASCII letters, numbers, underscores, or dashes`),r.name.length>256&&a.push(`Tag name '${r.name}' exceeds maximum length of 256 characters`),l.test(r.value)||a.push(`Tag value '${r.value}' for tag '${r.name}' must only contain ASCII letters, numbers, underscores, or dashes`),a},"validateTag"),W=S((r={})=>{if(!r.apiKey)throw new P(n,"apiKey");const a={apiKey:r.apiKey,debug:r.debug??!1,endpoint:r.endpoint??R,logger:r.logger,retries:r.retries??x,timeout:r.timeout??_},l=new C,o=T(n,r.logger);return{endpoint:a.endpoint,features:{attachments:!0,batchSending:!0,customHeaders:!0,html:!0,replyTo:!0,scheduling:!0,tagging:!0,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new c(n,"Email ID is required to retrieve email details"),success:!1};await l.ensureInitialized(()=>this.initialize(),n);const t={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};o.debug("Retrieving email details",{id:e});const i=await y(async()=>f(`${a.endpoint}/emails/${e}`,{headers:t,method:"GET",timeout:a.timeout}),a.retries);return i.success?(o.debug("Email details retrieved successfully"),{data:i.data?.body,success:!0}):(o.debug("API request failed when retrieving email",i.error),{error:new c(n,`Failed to retrieve email: ${i.error instanceof Error?i.error.message:"Unknown error"}`,{cause:i.error}),success:!1})}catch(t){return{error:b(n,"retrieve email",t,o),success:!1}}},async initialize(){await l.ensureInitialized(async()=>{if(!await this.isAvailable())throw new c(n,"Resend API not available or invalid API key");o.debug("Provider initialized successfully")},n)},async isAvailable(){try{if(a.apiKey&&a.apiKey.startsWith("re_"))return o.debug("API key format is valid, assuming Resend is available"),!0;const e={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};o.debug("Checking Resend API availability");const t=await f(`${a.endpoint}/domains`,{headers:e,method:"GET",timeout:a.timeout});return t.data&&typeof t.data=="object"&&"body"in t.data&&t.data.body&&typeof t.data.body=="object"&&"name"in t.data.body&&t.data.body.name==="restricted_api_key"?(o.debug("API key is valid but restricted to only sending emails"),!0):(o.debug("Resend API availability check response:",{error:t.error instanceof Error?t.error.message:void 0,statusCode:t.data?.statusCode,success:t.success}),!!(t.success&&t.data&&typeof t.data=="object"&&"statusCode"in t.data&&typeof t.data.statusCode=="number"&&t.data.statusCode>=200&&t.data.statusCode<300))}catch(e){return o.debug("Error checking availability:",e),!1}},name:n,options:a,async sendEmail(e){try{const t=E(e);if(t.length>0)return{error:new c(n,`Invalid email options: ${t.join(", ")}`),success:!1};await l.ensureInitialized(()=>this.initialize(),n);const i={from:v(e.from),headers:e.headers?j(e.headers):{},html:e.html,subject:e.subject,text:e.text,to:z(e.to)};if(e.cc&&(i.cc=w(e.cc)),e.bcc&&(i.bcc=w(e.bcc)),e.replyTo&&(i.reply_to=v(e.replyTo)),e.templateId&&(i.template=e.templateId,e.templateData&&(i.data=e.templateData)),e.scheduledAt&&(i.scheduled_at=typeof e.scheduledAt=="string"?e.scheduledAt:e.scheduledAt.toISOString()),e.tags&&e.tags.length>0){const s=[];if(e.tags.forEach(d=>{const p=D(d);p.length>0&&s.push(...p)}),s.length>0)return{error:new c(n,`Invalid email tags: ${s.join(", ")}`),success:!1};i.tags=e.tags.map(d=>({name:d.name,value:d.value}))}e.attachments&&e.attachments.length>0&&(i.attachments=await Promise.all(e.attachments.map(async s=>{let d;if(s.content)if(typeof s.content=="string")d=s.content;else if(s.content instanceof Promise){const p=await s.content;d=Buffer.from(p).toString("base64")}else d=s.content.toString("base64");else if(s.raw)d=typeof s.raw=="string"?s.raw:s.raw.toString("base64");else throw new c(n,`Attachment ${s.filename} has no content`);return{content:d,content_type:s.contentType,filename:s.filename,...s.path&&{path:s.path}}}))),o.debug("Sending email via Resend API",{subject:i.subject,to:i.to});const A={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},u=await y(async()=>f(`${a.endpoint}/emails`,{headers:A,method:"POST",timeout:a.timeout},JSON.stringify(i)),a.retries);if(!u.success)return o.debug("API request failed when sending email",u.error),{error:u.error??new c(n,"Failed to send email"),success:!1};const m=u.data,g=m?.body&&typeof m.body=="object"&&m.body.id?m.body.id:$();return o.debug("Email sent successfully",{messageId:g}),{data:{messageId:g,provider:n,response:u.data,sent:!0,timestamp:new Date},success:!0}}catch(t){return{error:b(n,"send email",t,o),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{W as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var E=Object.defineProperty;var y=(e,u)=>E(e,"name",{value:u,configurable:!0});import f from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{c as k}from"./create-logger-BiWdqFNg.js";import{defineProvider as z}from"./defineProvider-CtLH0VBE.js";var P=Object.defineProperty,m=y((e,u)=>P(e,"name",{value:u,configurable:!0}),"f");const S=m(e=>typeof e=="function","isProviderFactory"),x=m(e=>e!=null&&typeof e=="object"&&"sendEmail"in e&&"initialize"in e&&"isAvailable"in e,"isProvider"),o="roundrobin",T=z((e={})=>{if(!e.mailers||e.mailers.length===0)throw new A(o,"mailers");const u={debug:e.debug??!1,logger:e.logger,mailers:e.mailers,retries:e.retries??3,retryAfter:e.retryAfter??60,timeout:e.timeout??3e4};let p=!1;const t=[];let a=0;const n=k(o,e.logger),v=m(async()=>{t.length=0;for(const i of u.mailers)try{let r;if(S(i))r=i({});else if(x(i))r=i;else{n.debug(`Skipping invalid mailer: ${i}`);continue}try{await r.initialize(),t.push(r),n.debug(`Initialized provider: ${r.name??"unknown"}`)}catch(s){n.debug(`Failed to initialize provider ${r.name??"unknown"}:`,s)}}catch(r){n.debug("Error processing mailer:",r)}if(t.length===0)throw new f(o,"No providers could be initialized");a=Math.floor(Math.random()*t.length),n.debug(`Round robin starting at index ${a} (${t[a]?.name??"unknown"})`)},"initializeProviders"),b=m(async()=>{if(t.length===0)return;const i=a;let r=0;for(;r<t.length;){const s=t[a];if(!s){a=(a+1)%t.length,r+=1;continue}const g=s.name??`provider-${a+1}`;try{if(await s.isAvailable())return a=(a+1)%t.length,n.debug(`Selected provider: ${g} (index ${a===0?t.length-1:a-1})`),s}catch{}a=(a+1)%t.length,r+=1,r<t.length&&u.retryAfter>0&&await new Promise(l=>{setTimeout(()=>{l(void 0)},u.retryAfter)})}return n.debug(`No available providers found, using provider at index ${i}`),t[i]??void 0},"getNextProvider");return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!1},async initialize(){if(!p)try{await v(),p=!0,n.debug(`Round robin provider initialized with ${t.length} provider(s)`)}catch(i){throw new f(o,`Failed to initialize: ${i.message}`,{cause:i})}},async isAvailable(){try{return t.length===0&&await v(),(await Promise.allSettled(t.map(i=>i.isAvailable()))).some(i=>i.status==="fulfilled"&&i.value)}catch{return!1}},name:o,options:u,async sendEmail(i){try{if(t.length===0&&await v(),t.length===0)return{error:new f(o,"No providers available"),success:!1};const r=await b();if(!r)return{error:new f(o,"No available providers found"),success:!1};const s=r.name??"unknown";n.debug(`Sending email via ${s}`);const g=await r.sendEmail(i);if(g.success)return n.debug(`Email sent successfully via ${s}`),{data:{...g.data,provider:`${o}(${s})`},success:!0};n.debug(`Failed to send via ${s}, trying next provider`);const l=[];g.error&&l.push(g.error);let w=0;for(;w<t.length-1;){const c=await b();if(!c||c===r)break;const h=c.name??"unknown";n.debug(`Retrying with ${h}`);try{const d=await c.sendEmail(i);if(d.success)return n.debug(`Email sent successfully via ${h} (after retry)`),{data:{...d.data,provider:`${o}(${h})`},success:!0};d.error&&l.push(d.error)}catch(d){l.push(d instanceof Error?d:new Error(String(d)))}w+=1}const $=l.map(c=>c instanceof Error?c.message:String(c)).join("; ");return{error:new f(o,`Failed to send email via all providers. Errors: ${$}`,{cause:l[0]instanceof Error?l[0]:new Error(String(l[0]))}),success:!1}}catch(r){return{error:new f(o,`Failed to send email: ${r.message}`,{cause:r}),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{T as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var P=Object.defineProperty;var h=(r,l)=>P(r,"name",{value:l,configurable:!0});import{createRequire as A}from"node:module";import c from"./EmailError-zm2ffVav.js";import y from"./RequiredOptionError-CevW3u2K.js";import{s as E}from"./generate-message-id-D4uA8gkj.js";import{i as k}from"./headers-to-record-Qo124ImV.js";import{m as b}from"./make-request-
|
|
1
|
+
var P=Object.defineProperty;var h=(r,l)=>P(r,"name",{value:l,configurable:!0});import{createRequire as A}from"node:module";import c from"./EmailError-zm2ffVav.js";import y from"./RequiredOptionError-CevW3u2K.js";import{s as E}from"./generate-message-id-D4uA8gkj.js";import{i as k}from"./headers-to-record-Qo124ImV.js";import{m as b}from"./make-request-CaT4d5oC.js";import{c as z,P as q,u as w,h as v}from"./provider-base-Cmzx6BTO.js";import{d as K}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as C}from"./defineProvider-CtLH0VBE.js";import{f as p,a as x}from"./address-formatter-Cm_E_ZMa.js";const T=A(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,S=h(r=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[l,s]=u.versions.node.split(".").map(Number);if(l>22||l===22&&s>=3||l===20&&s>=16)return u.getBuiltinModule(r)}return T(r)},"__cjs_getBuiltinModule"),{Buffer:_}=S("node:buffer"),a="scaleway",R="https://api.scaleway.com/transactional-email/v1alpha1",B=3e4,G=3,U=C((r={})=>{if(!r.apiKey)throw new y(a,"apiKey");if(!r.region)throw new y(a,"region");const l=r.endpoint??R,s={apiKey:r.apiKey,debug:r.debug??!1,endpoint:l,region:r.region,retries:r.retries??G,timeout:r.timeout??B,...r.logger&&{logger:r.logger}},f=new q,n=z(a,r.logger);return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!0,tracking:!1},async getEmail(e){try{if(!e)return{error:new c(a,"Email ID is required to retrieve email details"),success:!1};await f.ensureInitialized(()=>this.initialize(),a);const o={"Content-Type":"application/json","X-Auth-Token":s.apiKey};n.debug("Retrieving email details",{id:e});const t=await w(async()=>b(`${s.endpoint}/regions/${s.region}/emails/${e}`,{headers:o,method:"GET",timeout:s.timeout}),s.retries);return t.success?(n.debug("Email details retrieved successfully"),{data:t.data?.body,success:!0}):(n.debug("API request failed when retrieving email",t.error),{error:new c(a,`Failed to retrieve email: ${t.error instanceof Error?t.error.message:"Unknown error"}`,{cause:t.error}),success:!1})}catch(o){return{error:v(a,"retrieve email",o,n),success:!1}}},async initialize(){await f.ensureInitialized(async()=>{if(!await this.isAvailable())throw new c(a,"Scaleway API not available or invalid API key");n.debug("Provider initialized successfully")},a)},async isAvailable(){try{return n.debug("Checking Scaleway API availability"),!0}catch(e){return n.debug("Error checking availability:",e),!1}},name:a,options:s,async sendEmail(e){try{const o=K(e);if(o.length>0)return{error:new c(a,`Invalid email options: ${o.join(", ")}`),success:!1};await f.ensureInitialized(()=>this.initialize(),a);const t={from:{email:e.from.email,...e.from.name&&{name:e.from.name}},subject:e.subject,to:p(e.to)};if(e.html&&(t.html=e.html),e.text&&(t.text=e.text),e.cc&&(t.cc=p(e.cc)),e.bcc&&(t.bcc=p(e.bcc)),e.replyTo&&(t.replyTo=x(e.replyTo)),e.templateId&&(t.templateId=e.templateId,e.templateVariables&&(t.templateVariables=e.templateVariables)),e.projectId&&(t.projectId=e.projectId),e.headers){const i=k(e.headers);t.headers=i}e.attachments&&e.attachments.length>0&&(t.attachments=await Promise.all(e.attachments.map(async i=>{let d;if(i.content)if(typeof i.content=="string")d=i.content;else if(i.content instanceof Promise){const j=await i.content;d=_.from(j).toString("base64")}else d=i.content.toString("base64");else if(i.raw)d=typeof i.raw=="string"?i.raw:i.raw.toString("base64");else throw new c(a,`Attachment ${i.filename} has no content`);return{content:d,name:i.filename,type:i.contentType??"application/octet-stream"}}))),n.debug("Sending email via Scaleway API",{subject:t.subject,to:t.to});const I={"Content-Type":"application/json","X-Auth-Token":s.apiKey},m=await w(async()=>b(`${s.endpoint}/regions/${s.region}/emails`,{headers:I,method:"POST",timeout:s.timeout},JSON.stringify(t)),s.retries);if(!m.success)return n.debug("API request failed when sending email",m.error),{error:m.error??new c(a,"Failed to send email"),success:!1};const g=m.data?.body?.id??E();return n.debug("Email sent successfully",{messageId:g}),{data:{messageId:g,provider:a,response:m.data,sent:!0,timestamp:new Date},success:!0}}catch(o){return{error:v(a,"send email",o,n),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{U as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import l from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{s as
|
|
1
|
+
import l from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{s as P}from"./generate-message-id-D4uA8gkj.js";import{i as S}from"./headers-to-record-Qo124ImV.js";import{m as h}from"./make-request-CaT4d5oC.js";import{c as $,P as j,u as b,h as v}from"./provider-base-Cmzx6BTO.js";import{d as G}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as k}from"./defineProvider-CtLH0VBE.js";import{f,a as I}from"./address-formatter-Cm_E_ZMa.js";import{c as z}from"./attachment-processor-DsmIomKc.js";const s="sendgrid",C="https://api.sendgrid.com/v3",E=3e4,_=3,R=k((o={})=>{if(!o.apiKey)throw new A(s,"apiKey");const a={apiKey:o.apiKey,debug:o.debug??!1,endpoint:o.endpoint??C,...o.logger&&{logger:o.logger},retries:o.retries??_,timeout:o.timeout??E},p=new j,i=$(s,o.logger);return{endpoint:a.endpoint,features:{attachments:!0,batchSending:!0,customHeaders:!0,html:!0,replyTo:!0,scheduling:!0,tagging:!0,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new l(s,"Email ID is required to retrieve email details"),success:!1};await p.ensureInitialized(()=>this.initialize(),s);const t={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};i.debug("Retrieving email details",{id:e});const r=await b(async()=>h(`${a.endpoint}/messages/${e}`,{headers:t,method:"GET",timeout:a.timeout}),a.retries);return r.success?(i.debug("Email details retrieved successfully"),{data:r.data?.body,success:!0}):(i.debug("API request failed when retrieving email",r.error),{error:new l(s,`Failed to retrieve email: ${r.error instanceof Error?r.error.message:"Unknown error"}`,{cause:r.error}),success:!1})}catch(t){return{error:v(s,"retrieve email",t,i),success:!1}}},async initialize(){await p.ensureInitialized(async()=>{if(!await this.isAvailable())throw new l(s,"SendGrid API not available or invalid API key");i.debug("Provider initialized successfully")},s)},async isAvailable(){try{if(a.apiKey&&a.apiKey.startsWith("SG."))return i.debug("API key format is valid, assuming SendGrid is available"),!0;const e={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};i.debug("Checking SendGrid API availability");const t=await h(`${a.endpoint}/user/profile`,{headers:e,method:"GET",timeout:a.timeout});return i.debug("SendGrid API availability check response:",{error:t.error instanceof Error?t.error.message:void 0,statusCode:t.data?.statusCode,success:t.success}),!!(t.success&&t.data&&typeof t.data=="object"&&"statusCode"in t.data&&typeof t.data.statusCode=="number"&&t.data.statusCode>=200&&t.data.statusCode<300)}catch(e){return i.debug("Error checking availability:",e),!1}},name:s,options:a,async sendEmail(e){try{const t=G(e);if(t.length>0)return{error:new l(s,`Invalid email options: ${t.join(", ")}`),success:!1};await p.ensureInitialized(()=>this.initialize(),s);const r={to:f(e.to)};if(e.cc&&(r.cc=f(e.cc)),e.bcc&&(r.bcc=f(e.bcc)),e.subject&&(r.subject=e.subject),e.tags&&e.tags.length>0){const d={};for(let m=0;m<e.tags.length;m+=1)d[`tag_${m}`]=e.tags[m];r.customArgs=d}const n={from:I(e.from),personalizations:[r]},u=[];if(e.html&&u.push({type:"text/html",value:e.html}),e.text&&u.push({type:"text/plain",value:e.text}),u.length>0&&(n.content=u),e.replyTo&&(n.reply_to=I(e.replyTo)),e.subject&&(n.subject=e.subject),e.templateId&&(n.template_id=e.templateId,e.templateData&&(r.dynamicTemplateData=e.templateData)),e.sendAt&&(r.send_at=e.sendAt),e.batchId&&(n.batch_id=e.batchId),e.asmGroupId&&(n.asm={group_id:e.asmGroupId}),e.ipPoolName&&(n.ip_pool_name=e.ipPoolName),e.mailSettings&&(n.mail_settings=e.mailSettings),e.trackingSettings&&(n.tracking_settings=e.trackingSettings),e.headers){const d=S(e.headers);n.headers=d}e.attachments&&e.attachments.length>0&&(n.attachments=await Promise.all(e.attachments.map(async d=>z(d,s)))),i.debug("Sending email via SendGrid API",{subject:n.subject,to:r.to});const w={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},c=await b(async()=>h(`${a.endpoint}/mail/send`,{headers:w,method:"POST",timeout:a.timeout},JSON.stringify(n)),a.retries);if(!c.success)return i.debug("API request failed when sending email",c.error),{error:c.error??new l(s,"Failed to send email"),success:!1};const g=c.data?.headers,y=(g&&g instanceof Headers?g.get("X-Message-Id"):void 0)??P();return i.debug("Email sent successfully",{messageId:y}),{data:{messageId:y,provider:s,response:c.data,sent:!0,timestamp:new Date},success:!0}}catch(t){return{error:v(s,"send email",t,i),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{R as default};
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
var X=Object.defineProperty;var C=(u,r)=>X(u,"name",{value:r,configurable:!0});import{createRequire as q}from"node:module";import m from"./EmailError-zm2ffVav.js";import J from"./RequiredOptionError-CevW3u2K.js";import{z as ee}from"./build-mime-message-
|
|
2
|
-
`),s={};for(const i of c)if(i.startsWith("250-")||i.startsWith("250 ")){const n=i.slice(4).trim().split(" "),o=n[0];o&&(s[o]=n.slice(1))}return s},"parseEhloResponse"),h=p(async(e,c,s)=>new Promise((i,n)=>{const o=Array.isArray(s)?s:[s];let a="",t="";const d=setTimeout(()=>{w(),n(new m(l,`Command timeout after ${r.timeout}ms: ${c?.slice(0,50)}...`))},r.timeout),w=p(()=>{e.removeListener("data",$),e.removeListener("error",L),d&&clearTimeout(d)},"cleanup"),$=p(S=>{a+=S.toString();const
|
|
3
|
-
`).filter(Boolean);if(
|
|
1
|
+
var X=Object.defineProperty;var C=(u,r)=>X(u,"name",{value:r,configurable:!0});import{createRequire as q}from"node:module";import m from"./EmailError-zm2ffVav.js";import J from"./RequiredOptionError-CevW3u2K.js";import{z as ee}from"./build-mime-message-6xstxaUV.js";import{s as te}from"./generate-message-id-D4uA8gkj.js";import{d as re}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as oe}from"./defineProvider-CtLH0VBE.js";const W=q(import.meta.url),O=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,M=C(u=>{if(typeof O<"u"&&O.versions&&O.versions.node){const[r,y]=O.versions.node.split(".").map(Number);if(r>22||r===22&&y>=3||r===20&&y>=16)return O.getBuiltinModule(u)}return W(u)},"__cjs_getBuiltinModule"),{Buffer:v}=M("node:buffer"),{createHmac:K,createHash:Y,createSign:Q}=M("node:crypto"),{Socket:V,createConnection:Z}=M("node:net"),{connect:z}=M("node:tls");var se=Object.defineProperty,_=C((u,r)=>se(u,"name",{value:r,configurable:!0}),"n");const ae=_((u,r)=>new Promise(y=>{const f=new V,g=_(()=>{f.destroy(),y(!1)},"onError");f.setTimeout(1e3),f.on("error",g),f.on("timeout",g),f.connect(r,u,()=>{f.end(),y(!0)})}),"isPortAvailable");var ne=Object.defineProperty,p=C((u,r)=>ne(u,"name",{value:r,configurable:!0}),"h");const l="smtp",ie=25,ce=465,ue=1e4,le=!1,me=5,x=3e4,be=oe((u={})=>{if(!u.host)throw new J(l,"host");const r={authMethod:u.authMethod??"LOGIN",debug:u.debug??!1,dkim:u.dkim,host:u.host,maxConnections:u.maxConnections??me,oauth2:u.oauth2,password:u.password,pool:u.pool??!1,port:u.port!==void 0?u.port:u.secure?ce:ie,rejectUnauthorized:u.rejectUnauthorized??!0,retries:u.retries??0,secure:u.secure??le,timeout:u.timeout??ue,user:u.user,...u.logger&&{logger:u.logger}};let y=!1;const f=[],g=[],b=p(e=>e.replaceAll(/[\r\n\t\v\f]/g," ").trim(),"sanitizeHeaderValue"),U=p(e=>{const c=e.split(`\r
|
|
2
|
+
`),s={};for(const i of c)if(i.startsWith("250-")||i.startsWith("250 ")){const n=i.slice(4).trim().split(" "),o=n[0];o&&(s[o]=n.slice(1))}return s},"parseEhloResponse"),h=p(async(e,c,s)=>new Promise((i,n)=>{const o=Array.isArray(s)?s:[s];let a="",t="";const d=setTimeout(()=>{w(),n(new m(l,`Command timeout after ${r.timeout}ms: ${c?.slice(0,50)}...`))},r.timeout),w=p(()=>{e.removeListener("data",$),e.removeListener("error",L),d&&clearTimeout(d)},"cleanup"),$=p(S=>{a+=S.toString();const k=a.split(`\r
|
|
3
|
+
`).filter(Boolean);if(k.length>0){const j=k.at(-1);if(j){const I=j.match(/^(\d{3})[\s-]/);if(I){const[,R]=I;t=R,j[3]===" "&&(w(),o.includes(t)?i(a):n(new m(l,`Expected ${o.join(" or ")}, got ${t}: ${a.trim()}`)))}}}},"onData"),L=p(S=>{w(),n(new m(l,`Socket error: ${S.message}`,{cause:S}))},"onError");e.on("data",$),e.on("error",L),c&&e.write(`${c}\r
|
|
4
4
|
`)}),"sendSmtpCommand"),H=p(async()=>{if(r.pool&&f.length>0){const e=f.pop();if(e&&!e.destroyed)return e}return r.pool&&f.length+1>=r.maxConnections?new Promise((e,c)=>{const s={reject:c,resolve:e};s.timeout=setTimeout(()=>{const i=g.indexOf(s);i!==-1&&g.splice(i,1),c(new m(l,`Connection queue timeout after ${x}ms`))},x),g.push(s)}):new Promise((e,c)=>{let s,i=!1,n;const o=p(()=>{s&&clearTimeout(s)},"cleanup");s=setTimeout(()=>{i||(i=!0,n&&!n.destroyed&&n.destroy(),o(),c(new m(l,`Connection timeout to ${r.host}:${r.port} after ${r.timeout}ms`)))},r.timeout);try{n=r.secure?z({host:r.host,port:r.port,rejectUnauthorized:r.rejectUnauthorized}):Z(r.port,r.host),n.on("error",a=>{i||(i=!0,o(),c(new m(l,`Connection error: ${a.message}`,{cause:a})))}),n.once("data",a=>{if(!i&&n){i=!0,o();const t=a.toString();t.slice(0,3)==="220"?e(n):(n.destroy(),c(new m(l,`Unexpected server greeting: ${t.trim()}`)))}})}catch(a){i||(i=!0,o(),c(new m(l,`Failed to create connection: ${a.message}`,{cause:a})))}})},"createSmtpConnection"),D=p(async e=>new Promise((c,s)=>{let i,n=!1,o;const a=p(()=>{i&&clearTimeout(i)},"cleanup");i=setTimeout(()=>{n||(n=!0,o&&!o.destroyed&&o.destroy(),a(),s(new m(l,`TLS connection timeout after ${r.timeout}ms`)))},r.timeout);try{const t={host:r.host,rejectUnauthorized:r.rejectUnauthorized,socket:e};o=z(t),o.on("error",d=>{n||(n=!0,a(),s(new m(l,`TLS connection error: ${d.message}`,{cause:d})))}),o.once("secure",()=>{!n&&o&&(n=!0,a(),c(o))})}catch(t){n||(n=!0,a(),s(new m(l,`Failed to upgrade to TLS: ${t.message}`,{cause:t})))}}),"upgradeToTLS"),F=p(e=>{if(e.destroyed||!r.pool){try{e.destroy()}catch{}return}if(g.length>0){const c=g.shift();if(c){clearTimeout(c.timeout),c.resolve(e);return}}f.push(e)},"releaseConnection"),T=p(async(e,c=!1)=>new Promise(s=>{try{if(c){e.write(`RSET\r
|
|
5
5
|
`),F(e),s();return}e.write(`QUIT\r
|
|
6
|
-
`),e.end(),e.once("close",()=>s())}catch{s()}}),"closeConnection"),E=p(async e=>{if(!r.user)return;const c=await h(e,`EHLO ${r.host}`,"250"),s=U(c),i=Object.keys(s).find(a=>a.toUpperCase()==="AUTH");if(!i&&(r.user||r.password))throw new m(l,"Server does not support authentication");const n=i?s[i]
|
|
6
|
+
`),e.end(),e.once("close",()=>{s()})}catch{s()}}),"closeConnection"),E=p(async e=>{if(!r.user)return;const c=await h(e,`EHLO ${r.host}`,"250"),s=U(c),i=Object.keys(s).find(a=>a.toUpperCase()==="AUTH");if(!i&&(r.user||r.password))throw new m(l,"Server does not support authentication");const n=i?s[i]??[]:[];let{authMethod:o}=r;if(o||(n.includes("CRAM-MD5")?o="CRAM-MD5":n.includes("LOGIN")?o="LOGIN":n.includes("PLAIN")&&(o="PLAIN")),!o)throw new m(l,"No supported authentication methods");if(o==="OAUTH2"&&r.oauth2)try{const{accessToken:a,user:t}=r.oauth2,d=`user=${t}auth=Bearer ${a}`,w=v.from(d).toString("base64");await h(e,`AUTH XOAUTH2 ${w}`,"235");return}catch(a){const t=a.message;throw t.includes("535")||t.includes("Authentication failed")?new m(l,"Authentication failed: Invalid OAuth2 credentials"):a}if(o==="CRAM-MD5"&&r.password)try{const a=(await h(e,"AUTH CRAM-MD5","334")).split(" ")[1];if(!a)throw new m(l,"Invalid CRAM-MD5 challenge response");const t=v.from(a,"base64").toString("utf8"),d=K("md5",r.password);d.update(t);const w=d.digest("hex"),$=`${r.user} ${w}`;await h(e,v.from($).toString("base64"),"235");return}catch(a){const t=a.message;throw t.includes("535")||t.includes("Authentication failed")?new m(l,"Authentication failed: Invalid username or password"):a}if(o==="LOGIN"&&r.password)try{await h(e,"AUTH LOGIN","334"),await h(e,v.from(r.user).toString("base64"),"334"),await h(e,v.from(r.password).toString("base64"),"235");return}catch(a){const t=a.message;throw t.includes("535")||t.includes("Authentication failed")?new m(l,"Authentication failed: Invalid username or password"):a}if(o==="PLAIN"&&r.password)try{const a=v.from(`\0${r.user}\0${r.password}`).toString("base64");await h(e,`AUTH PLAIN ${a}`,"235");return}catch(a){const t=a.message;throw t.includes("535")||t.includes("Authentication failed")?new m(l,"Authentication failed: Invalid username or password"):a}throw new m(l,"Authentication failed - no valid credentials or method")},"authenticate"),G=p(e=>{if(!r.dkim)return e;const{domainName:c,keySelector:s,privateKey:i}=r.dkim;try{const[n,o]=e.split(`\r
|
|
7
7
|
\r
|
|
8
8
|
`);if(!n||!o)return e;const a=n.split(`\r
|
|
9
9
|
`),t=p(A=>A.replaceAll(`\r
|
|
10
10
|
`,`
|
|
11
|
-
`).replaceAll(/\s+/g," ").trim(),"canonicalize"),d=t(o),w=Y("sha256").update(d).digest("base64"),$=["from","to","subject","date"],L=a.filter(A=>$.some(P=>A.toLowerCase().startsWith(`${P}:`))),S=L.map(A=>A.split(":")[0]?.toLowerCase()
|
|
12
|
-
`),N=Q("RSA-SHA256");N.update(R);const B=N.sign(i,"base64");return`${`${
|
|
11
|
+
`).replaceAll(/\s+/g," ").trim(),"canonicalize"),d=t(o),w=Y("sha256").update(d).digest("base64"),$=["from","to","subject","date"],L=a.filter(A=>$.some(P=>A.toLowerCase().startsWith(`${P}:`))),S=L.map(A=>A.split(":")[0]?.toLowerCase()??"").filter(Boolean).join(":"),k=Math.floor(Date.now()/1e3),j={a:"rsa-sha256",bh:w,c:"relaxed/relaxed",d:c,h:S,s,t:k.toString(),v:"1"},I=`DKIM-Signature: ${Object.entries(j).map(([A,P])=>`${A}=${P}`).join("; ")}; b=`,R=[...L,I].map(A=>t(A)).join(`\r
|
|
12
|
+
`),N=Q("RSA-SHA256");N.update(R);const B=N.sign(i,"base64");return`${`${I}${B}`}\r
|
|
13
13
|
${a.join(`\r
|
|
14
14
|
`)}\r
|
|
15
15
|
\r
|
|
16
|
-
${o}`}catch(n){return console.error(`[${l}] DKIM signing error:`,n),e}},"signWithDkim");return{features:{attachments:!0,batchSending:r.pool,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!1},async initialize(){if(!y)try{if(!await this.isAvailable())throw new m(l,`SMTP server not available at ${r.host}:${r.port}`);y=!0}catch(e){throw new m(l,`Failed to initialize: ${e.message}`,{cause:e})}},async isAvailable(){try{if(!await ae(r.host,r.port))return!1;const e=await H();return await T(e),!0}catch{return!1}},name:l,options:r,async sendEmail(e){try{const c=re(e);if(c.length>0)return{error:new m(l,`Invalid email options: ${c.join(", ")}`),success:!1};y||await this.initialize();let s=await H();try{if(await h(s,`EHLO ${r.host}`,"250"),!r.secure)try{const t=await h(s,`EHLO ${r.host}`,"250"),d=U(t);Object.keys(d).includes("STARTTLS")&&(await h(s,"STARTTLS","220"),s=await D(s),await h(s,`EHLO ${r.host}`,"250"))}catch(t){if(r.rejectUnauthorized
|
|
16
|
+
${o}`}catch(n){return console.error(`[${l}] DKIM signing error:`,n),e}},"signWithDkim");return{features:{attachments:!0,batchSending:r.pool,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!1},async initialize(){if(!y)try{if(!await this.isAvailable())throw new m(l,`SMTP server not available at ${r.host}:${r.port}`);y=!0}catch(e){throw new m(l,`Failed to initialize: ${e.message}`,{cause:e})}},async isAvailable(){try{if(!await ae(r.host,r.port))return!1;const e=await H();return await T(e),!0}catch{return!1}},name:l,options:r,async sendEmail(e){try{const c=re(e);if(c.length>0)return{error:new m(l,`Invalid email options: ${c.join(", ")}`),success:!1};y||await this.initialize();let s=await H();try{if(await h(s,`EHLO ${r.host}`,"250"),!r.secure)try{const t=await h(s,`EHLO ${r.host}`,"250"),d=U(t);Object.keys(d).includes("STARTTLS")&&(await h(s,"STARTTLS","220"),s=await D(s),await h(s,`EHLO ${r.host}`,"250"))}catch(t){if(r.rejectUnauthorized)throw new m(l,`STARTTLS failed or not supported: ${t.message}`,{cause:t})}await E(s),await h(s,`MAIL FROM:<${e.from.email}>`,"250");const i=[];Array.isArray(e.to)?i.push(...e.to.map(t=>t.email)):i.push(e.to.email),e.cc&&(Array.isArray(e.cc)?i.push(...e.cc.map(t=>t.email)):i.push(e.cc.email)),e.bcc&&(Array.isArray(e.bcc)?i.push(...e.bcc.map(t=>t.email)):i.push(e.bcc.email));for(const t of i)await h(s,`RCPT TO:<${t}>`,"250");await h(s,"DATA","354");let n=await ee(e);const o=[];if(e.dsn){const t=[];e.dsn.success&&t.push("SUCCESS"),e.dsn.failure&&t.push("FAILURE"),e.dsn.delay&&t.push("DELAY"),t.length>0&&o.push(`X-DSN-NOTIFY: ${t.join(",")}`)}if(e.priority){let t="";switch(e.priority){case"high":{t="1 (Highest)",o.push("Importance: High");break}case"low":{t="5 (Lowest)",o.push("Importance: Low");break}case"normal":{t="3 (Normal)",o.push("Importance: Normal");break}default:{t="3 (Normal)";break}}o.push(`X-Priority: ${t}`)}if(e.inReplyTo&&o.push(`In-Reply-To: ${b(e.inReplyTo)}`),e.references){const t=Array.isArray(e.references)?e.references.map(d=>b(d)).join(" "):b(e.references);o.push(`References: ${t}`)}if(e.listUnsubscribe){const t=Array.isArray(e.listUnsubscribe)?e.listUnsubscribe.map(d=>`<${b(d)}>`).join(", "):`<${b(e.listUnsubscribe)}>`;o.push(`List-Unsubscribe: ${t}`)}if(e.googleMailHeaders){const{googleMailHeaders:t}=e;t.feedbackId&&o.push(`Feedback-ID: ${b(t.feedbackId)}`),t.promotionalContent&&o.push("X-Google-Promotion: promotional"),t.category&&o.push(`X-Gmail-Labels: ${t.category}`)}if(o.length>0){const t=n.indexOf(`\r
|
|
17
17
|
\r
|
|
18
18
|
`);if(t!==-1){const d=n.slice(0,t),w=n.slice(t+4);n=`${d}\r
|
|
19
19
|
${o.join(`\r
|
|
20
20
|
`)}\r
|
|
21
21
|
\r
|
|
22
22
|
${w}`}}r.dkim&&(e.useDkim||e.useDkim===void 0)&&(n=G(n)),await h(s,`${n}\r
|
|
23
|
-
.`,"250");const a=te();return await T(s,r.pool),{data:{messageId:a,provider:l,response:"Message accepted",sent:!0,timestamp:new Date},success:!0}}catch(i){try{await T(s)}catch{}throw i}}catch(c){return{error:new m(l,`Failed to send email: ${c.message}`,{cause:c}),success:!1}}},async shutdown(){for(const e of f)try{await T(e)}catch{}f.length=0;for(const e of g)clearTimeout(e.timeout),e.reject(new Error("Provider shutdown"));g.length=0},async validateCredentials(){try{if(!await this.isAvailable())return!1;const e=await H();try{if(await h(e,`EHLO ${r.host}`,"250"),!r.secure)try{const c=await h(e,`EHLO ${r.host}`,"250"),s=U(c);if(Object.keys(s).includes("STARTTLS")){await h(e,"STARTTLS","220");const i=await D(e);Object.assign(e,i),await h(e,`EHLO ${r.host}`,"250")}}catch{if(r.rejectUnauthorized
|
|
23
|
+
.`,"250");const a=te();return await T(s,r.pool),{data:{messageId:a,provider:l,response:"Message accepted",sent:!0,timestamp:new Date},success:!0}}catch(i){try{await T(s)}catch{}throw i}}catch(c){return{error:new m(l,`Failed to send email: ${c.message}`,{cause:c}),success:!1}}},async shutdown(){for(const e of f)try{await T(e)}catch{}f.length=0;for(const e of g)clearTimeout(e.timeout),e.reject(new Error("Provider shutdown"));g.length=0},async validateCredentials(){try{if(!await this.isAvailable())return!1;const e=await H();try{if(await h(e,`EHLO ${r.host}`,"250"),!r.secure)try{const c=await h(e,`EHLO ${r.host}`,"250"),s=U(c);if(Object.keys(s).includes("STARTTLS")){await h(e,"STARTTLS","220");const i=await D(e);Object.assign(e,i),await h(e,`EHLO ${r.host}`,"250")}}catch{if(r.rejectUnauthorized)return!1}return await E(e),await T(e),!0}catch{return await T(e),!1}}catch{return!1}}}});export{be as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var P=Object.defineProperty;var h=(s,a)=>P(s,"name",{value:a,configurable:!0});import{createRequire as A}from"node:module";import l from"./EmailError-zm2ffVav.js";import T from"./RequiredOptionError-CevW3u2K.js";import{s as _}from"./generate-message-id-D4uA8gkj.js";import{i as z}from"./headers-to-record-Qo124ImV.js";import{m as y}from"./make-request-CaT4d5oC.js";import{c as E,P as k,u as b,h as w}from"./provider-base-Cmzx6BTO.js";import{d as q}from"./validate-email-options-DPo3SgC0.js";import{defineProvider as K}from"./defineProvider-CtLH0VBE.js";import{f,a as B}from"./address-formatter-Cm_E_ZMa.js";const $=A(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,j=h(s=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[a,c]=u.versions.node.split(".").map(Number);if(a>22||a===22&&c>=3||a===20&&c>=16)return u.getBuiltinModule(s)}return $(s)},"__cjs_getBuiltinModule"),{Buffer:S}=j("node:buffer"),i="sweego",x="https://api.sweego.com",C=3e4,R=3,Q=K((s={})=>{if(!s.apiKey)throw new T(i,"apiKey");const a={apiKey:s.apiKey,debug:s.debug??!1,endpoint:s.endpoint??x,retries:s.retries??R,timeout:s.timeout??C,...s.logger&&{logger:s.logger}},c=new k,n=E(i,s.logger);return{features:{attachments:!0,batchSending:!0,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!0,templates:!0,tracking:!0},async getEmail(e){try{if(!e)return{error:new l(i,"Email ID is required to retrieve email details"),success:!1};await c.ensureInitialized(()=>this.initialize(),i);const o={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"};n.debug("Retrieving email details",{id:e});const t=await b(async()=>y(`${a.endpoint}/emails/${e}`,{headers:o,method:"GET",timeout:a.timeout}),a.retries);return t.success?(n.debug("Email details retrieved successfully"),{data:t.data?.body,success:!0}):(n.debug("API request failed when retrieving email",t.error),{error:new l(i,`Failed to retrieve email: ${t.error instanceof Error?t.error.message:"Unknown error"}`,{cause:t.error}),success:!1})}catch(o){return{error:w(i,"retrieve email",o,n),success:!1}}},async initialize(){await c.ensureInitialized(async()=>{if(!await this.isAvailable())throw new l(i,"Sweego API not available or invalid API key");n.debug("Provider initialized successfully")},i)},async isAvailable(){try{return n.debug("Checking Sweego API availability"),!0}catch(e){return n.debug("Error checking availability:",e),!1}},name:i,options:a,async sendEmail(e){try{const o=q(e);if(o.length>0)return{error:new l(i,`Invalid email options: ${o.join(", ")}`),success:!1};await c.ensureInitialized(()=>this.initialize(),i);const t={from:{email:e.from.email,name:e.from.name},subject:e.subject,to:f(e.to)};if(e.html&&(t.html=e.html),e.text&&(t.text=e.text),e.cc&&(t.cc=f(e.cc)),e.bcc&&(t.bcc=f(e.bcc)),e.replyTo&&(t.replyTo=B(e.replyTo)),e.templateId&&(t.templateId=e.templateId,e.templateVariables&&(t.templateVariables=e.templateVariables)),e.tags&&e.tags.length>0&&(t.tags=e.tags),e.headers){const r=z(e.headers);t.headers=r}e.attachments&&e.attachments.length>0&&(t.attachments=await Promise.all(e.attachments.map(async r=>{let m;if(r.content)if(typeof r.content=="string")m=r.content;else if(r.content instanceof Promise){const I=await r.content;m=S.from(I).toString("base64")}else m=r.content.toString("base64");else if(r.raw)m=typeof r.raw=="string"?r.raw:r.raw.toString("base64");else throw new l(i,`Attachment ${r.filename} has no content`);return{content:m,contentType:r.contentType??"application/octet-stream",filename:r.filename,...r.cid&&{cid:r.cid}}}))),n.debug("Sending email via Sweego API",{subject:t.subject,to:t.to});const v={Authorization:`Bearer ${a.apiKey}`,"Content-Type":"application/json"},d=await b(async()=>y(`${a.endpoint}/send`,{headers:v,method:"POST",timeout:a.timeout},JSON.stringify(t)),a.retries);if(!d.success)return n.debug("API request failed when sending email",d.error),{error:d.error??new l(i,"Failed to send email"),success:!1};const g=d.data?.body,p=g?.messageId??g?.id??_();return n.debug("Email sent successfully",{messageId:p}),{data:{messageId:p,provider:i,response:d.data,sent:!0,timestamp:new Date},success:!0}}catch(o){return{error:w(i,"send email",o,n),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{Q as default};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { E as EmailOptions } from "./types.d-wwpgA3to.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for DKIM signing
|
|
4
|
+
*/
|
|
5
|
+
interface DkimOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Body canonicalization algorithm ('simple' or 'relaxed')
|
|
8
|
+
* Default: 'simple'
|
|
9
|
+
*/
|
|
10
|
+
bodyCanon?: "relaxed" | "simple";
|
|
11
|
+
/**
|
|
12
|
+
* Domain name used for DKIM signing
|
|
13
|
+
*/
|
|
14
|
+
domainName: string;
|
|
15
|
+
/**
|
|
16
|
+
* Header canonicalization algorithm ('simple' or 'relaxed')
|
|
17
|
+
* Default: 'simple'
|
|
18
|
+
*/
|
|
19
|
+
headerCanon?: "relaxed" | "simple";
|
|
20
|
+
/**
|
|
21
|
+
* List of header names to ignore when signing
|
|
22
|
+
*/
|
|
23
|
+
headersToIgnore?: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Key selector used for DNS lookup
|
|
26
|
+
*/
|
|
27
|
+
keySelector: string;
|
|
28
|
+
/**
|
|
29
|
+
* Passphrase for the private key (if encrypted)
|
|
30
|
+
*/
|
|
31
|
+
passphrase?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Private key for signing (PEM format)
|
|
34
|
+
* Can be a string with the key content or a path prefixed with 'file://'
|
|
35
|
+
*/
|
|
36
|
+
privateKey: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Options for S/MIME signing
|
|
40
|
+
*/
|
|
41
|
+
interface SmimeSignOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Path to the certificate file (PEM format)
|
|
44
|
+
*/
|
|
45
|
+
certificate: string;
|
|
46
|
+
/**
|
|
47
|
+
* Path to intermediate certificates (optional)
|
|
48
|
+
*/
|
|
49
|
+
intermediateCerts?: string[];
|
|
50
|
+
/**
|
|
51
|
+
* Signing options flags
|
|
52
|
+
* Reserved for future use
|
|
53
|
+
*/
|
|
54
|
+
options?: number;
|
|
55
|
+
/**
|
|
56
|
+
* Passphrase for the private key (if encrypted)
|
|
57
|
+
*/
|
|
58
|
+
passphrase?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Path to the private key file (PEM format)
|
|
61
|
+
*/
|
|
62
|
+
privateKey: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Options for S/MIME encryption
|
|
66
|
+
*/
|
|
67
|
+
interface SmimeEncryptOptions {
|
|
68
|
+
/**
|
|
69
|
+
* Encryption algorithm (cipher)
|
|
70
|
+
* Supported: 'aes-256-cbc', 'aes-192-cbc', 'aes-128-cbc'
|
|
71
|
+
* Default: 'aes-256-cbc'
|
|
72
|
+
*/
|
|
73
|
+
algorithm?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Certificate(s) for encryption
|
|
76
|
+
* Can be a single certificate path or a map of email -> certificate path
|
|
77
|
+
*/
|
|
78
|
+
certificates: string | Record<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Interface for email signers
|
|
82
|
+
*/
|
|
83
|
+
interface EmailSigner {
|
|
84
|
+
/**
|
|
85
|
+
* Sign an email message
|
|
86
|
+
* @param email The email options to sign
|
|
87
|
+
* @returns The signed email options (may include additional headers or modified content)
|
|
88
|
+
*/
|
|
89
|
+
sign: (email: EmailOptions) => Promise<EmailOptions>;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Interface for email encrypters
|
|
93
|
+
*/
|
|
94
|
+
interface EmailEncrypter {
|
|
95
|
+
/**
|
|
96
|
+
* Encrypt an email message
|
|
97
|
+
* @param email The email options to encrypt
|
|
98
|
+
* @returns The encrypted email options (content will be encrypted)
|
|
99
|
+
*/
|
|
100
|
+
encrypt: (email: EmailOptions) => Promise<EmailOptions>;
|
|
101
|
+
}
|
|
102
|
+
export { DkimOptions as D, EmailSigner as E, SmimeEncryptOptions as S, EmailEncrypter as a, SmimeSignOptions as b };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Template render function type.
|
|
3
|
+
* @param template Template content (string, React component, etc.).
|
|
4
|
+
* @param data Data/variables to pass to the template.
|
|
5
|
+
* @param options Options specific to the template engine.
|
|
6
|
+
* @returns Rendered HTML string.
|
|
7
|
+
*/
|
|
8
|
+
type TemplateRenderer = (template: unknown, data?: Record<string, unknown>, options?: Record<string, unknown>) => string | Promise<string>;
|
|
9
|
+
export { TemplateRenderer as T };
|