@visulima/email 1.0.0-alpha.9 → 1.0.0
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 +775 -0
- package/LICENSE.md +541 -847
- package/README.md +212 -191
- package/dist/crypto/index.d.ts +304 -4
- package/dist/crypto/index.js +1 -1
- package/dist/deliverability/dmarc-report.d.ts +95 -0
- package/dist/deliverability/dmarc-report.js +1 -0
- package/dist/deliverability/index.d.ts +360 -0
- package/dist/deliverability/index.js +1 -0
- package/dist/events/index.d.ts +31 -0
- package/dist/events/index.js +1 -0
- package/dist/inbound/index.d.ts +375 -0
- package/dist/inbound/index.js +1 -0
- package/dist/index.d.ts +94 -9
- package/dist/index.js +1 -1
- package/dist/middleware/index.d.ts +346 -0
- package/dist/middleware/index.js +1 -0
- package/dist/packem_shared/ALL_EVENTS-3kwh5CBE.js +1 -0
- package/dist/packem_shared/DkimSigner-BuSbnos1.js +18 -0
- package/dist/packem_shared/DraftMailMessage-BxqGSLMN.js +1 -0
- package/dist/packem_shared/EmailError-B-sEf3bp.js +1 -0
- package/dist/packem_shared/Mail-BEuzrB00.js +1 -0
- package/dist/packem_shared/MailMessage-D9k5gYrd.js +1 -0
- package/dist/packem_shared/MemoryEventStore-CuhfO9aj.js +1 -0
- package/dist/packem_shared/MemoryQueue-Dl1Fa6OJ.js +1 -0
- package/dist/packem_shared/MemorySuppressionStore-DZnbz-_B.js +1 -0
- package/dist/packem_shared/RATE_LIMIT_PRESETS-BPADLgcA.js +1 -0
- package/dist/packem_shared/RequiredOptionError-DuNNY_a5.js +1 -0
- package/dist/packem_shared/SmimeEncrypter-C7usORKF.js +6 -0
- package/dist/packem_shared/SmimeSigner-DgAApLPS.js +8 -0
- package/dist/packem_shared/addDarkModeSupport-DZYxULjl.js +1 -0
- package/dist/packem_shared/address-formatter-BWR2Dddx.js +1 -0
- package/dist/packem_shared/aggregate-features-BqEjPd42.js +1 -0
- package/dist/packem_shared/ahaSendProvider-D81_wUA1.js +1 -0
- package/dist/packem_shared/arcMessageSignatureBase-BY4j0TxM.js +17 -0
- package/dist/packem_shared/attachment-processor-CMp7qqMI.js +1 -0
- package/dist/packem_shared/awsSesProvider-BGZJUIep.js +32 -0
- package/dist/packem_shared/azureProvider-CmcK4bsf.js +1 -0
- package/dist/packem_shared/brevoProvider-C1BDXr41.js +1 -0
- package/dist/packem_shared/build-mime-message-B6927SQy.js +3 -0
- package/dist/packem_shared/buildListUnsubscribe-Cdr8MvR_.js +1 -0
- package/dist/packem_shared/buildMtaStsPolicy-oEQg8y_C.js +6 -0
- package/dist/packem_shared/circuitBreakerMiddleware-D2SA_07f.js +1 -0
- package/dist/packem_shared/cloudflareEmailProvider-Bv-ty-74.js +1 -0
- package/dist/packem_shared/composeMiddleware-BHwLLEzK.js +1 -0
- package/dist/packem_shared/create-logger-BQTS3f-I.js +1 -0
- package/dist/packem_shared/createSuppressionStore-CeAZKCbY.js +1 -0
- package/dist/packem_shared/createTestEmail-CF_RUjqo.js +1 -0
- package/dist/packem_shared/createWorker-_-yMWcNQ.js +1 -0
- package/dist/packem_shared/dedupeMiddleware-B6ajWOTi.js +1 -0
- package/dist/packem_shared/defineInboundHandler-CnL2BzlL.js +1 -0
- package/dist/packem_shared/defineProvider-C9q-7iwt.js +1 -0
- package/dist/packem_shared/detectMimeType-Dxv4MjZ7.js +1 -0
- package/dist/packem_shared/emailMatchers-DZDkrZ_3.js +1 -0
- package/dist/packem_shared/event-bus.d-DEl3w_EW.d.ts +104 -0
- package/dist/packem_shared/extractCidReferences-BuoTREMp.js +1 -0
- package/dist/packem_shared/extractReply-BUjIBt9A.js +5 -0
- package/dist/packem_shared/failoverProvider-BgX6zfnY.js +1 -0
- package/dist/packem_shared/format-address-DTl-9O70.js +1 -0
- package/dist/packem_shared/generate-boundary-DQbzDiOI.js +1 -0
- package/dist/packem_shared/generate-message-id-gXAuMz4g.js +1 -0
- package/dist/packem_shared/headers-to-record-De1Eg951.js +1 -0
- package/dist/packem_shared/httpProvider-DJAsYSun.js +1 -0
- package/dist/packem_shared/index-yDU-1zOZ.js +11 -0
- package/dist/packem_shared/infobipProvider-lHyGrXgZ.js +1 -0
- package/dist/packem_shared/injectPreheader-CF9WHZ7J.js +1 -0
- package/dist/packem_shared/inlineCss-BQ7d2Cyz.js +1 -0
- package/dist/packem_shared/isValidSigningCertUrl-Bii1AMGC.js +3 -0
- package/dist/packem_shared/loggingMiddleware-CZIiVMVp.js +1 -0
- package/dist/packem_shared/loopsProvider-DyloxzNC.js +1 -0
- package/dist/packem_shared/mail.d-B9SSqyy0.d.ts +909 -0
- package/dist/packem_shared/{mailCrabProvider-CM_CFDca.js → mailCrabProvider-CPtBT6Th.js} +1 -1
- package/dist/packem_shared/mailPaceProvider-CJEvOFBh.js +1 -0
- package/dist/packem_shared/mailchannelsProvider-osRkW_tz.js +1 -0
- package/dist/packem_shared/mailerSendProvider-C_6LzARK.js +1 -0
- package/dist/packem_shared/mailgunProvider-DkISvMPe.js +1 -0
- package/dist/packem_shared/mailjetProvider-CV0i4Xzh.js +1 -0
- package/dist/packem_shared/mailomatProvider-B5YFonEO.js +1 -0
- package/dist/packem_shared/mailtrapProvider-C4ZquIPz.js +1 -0
- package/dist/packem_shared/make-request-BlK_B72c.js +1 -0
- package/dist/packem_shared/mandrillProvider-DWPFh_Sj.js +1 -0
- package/dist/packem_shared/mockProvider-Behywbl1.js +1 -0
- package/dist/packem_shared/netcoreProvider-C5TEciaN.js +1 -0
- package/dist/packem_shared/nodemailerProvider-BFHobXxt.js +1 -0
- package/dist/packem_shared/normalizeMessageId-DAx2pGe2.js +1 -0
- package/dist/packem_shared/oauth2Middleware-CodqXkyj.js +1 -0
- package/dist/packem_shared/opentelemetryProvider-ByHC01ub.js +1 -0
- package/dist/packem_shared/outlook365Provider-63ggDpqV.js +1 -0
- package/dist/packem_shared/parseAddress-DdbViBAJ.js +1 -0
- package/dist/packem_shared/parseArfReport-Ds6S3c4J.js +6 -0
- package/dist/packem_shared/parseCloudflareInbound-C__j-oNa.js +1 -0
- package/dist/packem_shared/parseDmarcRecord-DXZ-_rF0.js +1 -0
- package/dist/packem_shared/parseMailgunInbound-BpC6uPNe.js +1 -0
- package/dist/packem_shared/parsePostmarkInbound-Co3_c6-9.js +1 -0
- package/dist/packem_shared/parseSendGridInbound-DsALoijO.js +4 -0
- package/dist/packem_shared/parseSesInbound-CH5tHIjp.js +1 -0
- package/dist/packem_shared/parseTlsReport-wPe1lIDs.js +1 -0
- package/dist/packem_shared/plunkProvider-yTlrJVEp.js +1 -0
- package/dist/packem_shared/postProcessHtml-DqKi2Ucg.js +1 -0
- package/dist/packem_shared/postalProvider-CRX_bMYD.js +1 -0
- package/dist/packem_shared/postmarkProvider-CDx85Yge.js +1 -0
- package/dist/packem_shared/provider-base-C7PuopYK.js +1 -0
- package/dist/packem_shared/provider.d-J-y6iogK.d.ts +28 -0
- package/dist/packem_shared/quoted-printable-nSGDA1tA.js +7 -0
- package/dist/packem_shared/resendProvider-CiclWxzr.js +1 -0
- package/dist/packem_shared/retry-3pnxTuNs.js +1 -0
- package/dist/packem_shared/retryMiddleware-DbViDX4r.js +1 -0
- package/dist/packem_shared/roundRobinProvider-D1by5KGW.js +1 -0
- package/dist/packem_shared/sanitize-header-DJhgZl3y.js +1 -0
- package/dist/packem_shared/scalewayProvider-BcND48qO.js +1 -0
- package/dist/packem_shared/sendGridProvider-D8ZLgY62.js +1 -0
- package/dist/packem_shared/smtpProvider-Bm0yP97W.js +25 -0
- package/dist/packem_shared/sparkpostProvider-CTYfSRaV.js +1 -0
- package/dist/packem_shared/sweegoProvider-DOoin_vi.js +1 -0
- package/dist/packem_shared/toEmailSnapshot-DeRqM5SJ.js +1 -0
- package/dist/packem_shared/tracer.d-MU42G1jG.d.ts +494 -0
- package/dist/packem_shared/types.d-BId55FW2.d.ts +107 -0
- package/dist/packem_shared/types.d-CmoWvdZi.d.ts +61 -0
- package/dist/packem_shared/types.d-DCkecJse.d.ts +51 -0
- package/dist/packem_shared/types.d-Mpu0HZoG.d.ts +24 -0
- package/dist/packem_shared/types.d-ejzh-xBP.d.ts +209 -0
- package/dist/packem_shared/types.d-lcJZmwRK.d.ts +69 -0
- package/dist/packem_shared/types.d-nyR1ty1Q.d.ts +9 -0
- package/dist/packem_shared/utils-BfYfPB_I.js +1 -0
- package/dist/packem_shared/validate-email-options-mCM9dVug.js +1 -0
- package/dist/packem_shared/verifyMailgunWebhook-Cwl0OD3P.js +1 -0
- package/dist/packem_shared/verifyPostmarkWebhook-C72ZvbrG.js +1 -0
- package/dist/packem_shared/verifyResendWebhook-YK2zNDXR.js +1 -0
- package/dist/packem_shared/verifySendGridWebhook-Dbwc1tfG.js +1 -0
- package/dist/packem_shared/withEvents-CCVblSqj.js +1 -0
- package/dist/packem_shared/withMetrics-DWywX_6M.js +1 -0
- package/dist/packem_shared/withRender-VP9wE5Yr.js +1 -0
- package/dist/packem_shared/withSuppression-DBaZDMAr.js +1 -0
- package/dist/packem_shared/withTelemetry-DL2qo0Hp.js +1 -0
- package/dist/packem_shared/zeptomailProvider-DKBPSHPj.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/cloudflare-email/index.d.ts +36 -0
- package/dist/providers/cloudflare-email/index.js +1 -0
- 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/loops/index.d.ts +47 -0
- package/dist/providers/loops/index.js +1 -0
- package/dist/providers/mailchannels/index.d.ts +26 -0
- package/dist/providers/mailchannels/index.js +1 -0
- 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 +12 -3
- package/dist/providers/mock/index.js +1 -1
- package/dist/providers/netcore/index.d.ts +35 -0
- package/dist/providers/netcore/index.js +1 -0
- package/dist/providers/nodemailer/index.d.ts +38 -3
- package/dist/providers/nodemailer/index.js +1 -1
- package/dist/providers/opentelemetry/index.d.ts +37 -3
- package/dist/providers/opentelemetry/index.js +1 -1
- package/dist/providers/outlook365/index.d.ts +48 -0
- package/dist/providers/outlook365/index.js +1 -0
- 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/sparkpost/index.d.ts +43 -0
- package/dist/providers/sparkpost/index.js +1 -0
- 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/queue/bullmq-queue.d.ts +46 -0
- package/dist/queue/bullmq-queue.js +1 -0
- package/dist/queue/index.d.ts +147 -0
- package/dist/queue/index.js +1 -0
- package/dist/queue/pg-boss-queue.d.ts +41 -0
- package/dist/queue/pg-boss-queue.js +1 -0
- package/dist/queue/sqs-queue.d.ts +72 -0
- package/dist/queue/sqs-queue.js +1 -0
- package/dist/queue/unstorage-queue.d.ts +199 -0
- package/dist/queue/unstorage-queue.js +1 -0
- package/dist/render/index.d.ts +107 -0
- package/dist/render/index.js +1 -0
- 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/html-to-text.js +1 -1
- package/dist/template-engines/i18n.d.ts +61 -0
- package/dist/template-engines/i18n.js +1 -0
- package/dist/template-engines/jsx-email.d.ts +11 -0
- package/dist/template-engines/jsx-email.js +1 -0
- package/dist/template-engines/liquid.d.ts +12 -0
- package/dist/template-engines/liquid.js +1 -0
- package/dist/template-engines/mjml.d.ts +10 -10
- package/dist/template-engines/mjml.js +1 -1
- package/dist/template-engines/react-email.d.ts +9 -9
- package/dist/template-engines/react-email.js +1 -1
- package/dist/template-engines/vue-email.d.ts +9 -9
- package/dist/template-engines/vue-email.js +1 -1
- package/dist/test/index.d.ts +155 -0
- package/dist/test/index.js +1 -0
- package/dist/utils/cache.d.ts +49 -48
- package/dist/utils/cache.js +1 -1
- package/dist/utils/format-email-address.d.ts +8 -7
- package/dist/utils/format-email-address.js +1 -1
- package/dist/utils/normalize-email-aliases.d.ts +20 -20
- package/dist/utils/normalize-email-aliases.js +1 -1
- package/dist/utils/parse-address.d.ts +18 -17
- package/dist/utils/parse-address.js +1 -1
- package/dist/utils/parse-eml.d.ts +22 -0
- package/dist/utils/parse-eml.js +6 -0
- package/dist/utils/result.d.ts +49 -0
- package/dist/utils/result.js +1 -0
- package/dist/utils/validation/check-feature-support.d.ts +53 -0
- package/dist/utils/validation/check-feature-support.js +1 -0
- package/dist/utils/validation/validate-email.d.ts +5 -5
- package/dist/utils/validation/validate-email.js +1 -1
- package/dist/webhooks/index.d.ts +231 -0
- package/dist/webhooks/index.js +1 -0
- package/package.json +177 -67
- 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/DkimSigner-pFd4c3fZ.js +0 -18
- package/dist/packem_shared/EmailError-zm2ffVav.js +0 -1
- package/dist/packem_shared/Mail-6Bltpy_p.js +0 -1
- package/dist/packem_shared/MailMessage-B76GPBBA.js +0 -1
- package/dist/packem_shared/RequiredOptionError-CevW3u2K.js +0 -1
- package/dist/packem_shared/SmimeEncrypter-CBevU534.js +0 -6
- package/dist/packem_shared/SmimeSigner-CObA4jzT.js +0 -8
- package/dist/packem_shared/address-formatter-Cm_E_ZMa.js +0 -1
- package/dist/packem_shared/ahaSendProvider-DlFKEQ6D.js +0 -1
- package/dist/packem_shared/attachment-processor-2rHmfa7j.js +0 -1
- package/dist/packem_shared/awsSesProvider-Ba-eVJxZ.js +0 -32
- package/dist/packem_shared/azureProvider-CQYAkgVF.js +0 -1
- package/dist/packem_shared/brevoProvider-5p6jjiK9.js +0 -1
- package/dist/packem_shared/build-mime-message-IYaUqqPJ.js +0 -2
- package/dist/packem_shared/create-logger-BiWdqFNg.js +0 -1
- 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/generate-boundary-Cx8nXYS0.js +0 -1
- package/dist/packem_shared/generate-message-id-D4uA8gkj.js +0 -1
- package/dist/packem_shared/headers-to-record-Qo124ImV.js +0 -1
- package/dist/packem_shared/httpProvider-CZD6LZX3.js +0 -1
- package/dist/packem_shared/infobipProvider-CtLwrUaP.js +0 -1
- package/dist/packem_shared/mailPaceProvider-B6yKvh6z.js +0 -1
- package/dist/packem_shared/mailerSendProvider-CeeIXFnW.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/mailomatProvider-DMQmjKHT.js +0 -1
- package/dist/packem_shared/mailtrapProvider-BN3UBEQw.js +0 -1
- package/dist/packem_shared/make-request-BDzF9W9D.js +0 -1
- package/dist/packem_shared/mandrillProvider-370y7CLu.js +0 -1
- package/dist/packem_shared/mockProvider-DN5ZwutD.js +0 -1
- package/dist/packem_shared/nodemailerProvider-_w8QXMU-.js +0 -1
- package/dist/packem_shared/opentelemetryProvider-C_ZXOLSd.js +0 -1
- package/dist/packem_shared/plunkProvider-DfJumQ4U.js +0 -1
- package/dist/packem_shared/postalProvider-Bavx2FcH.js +0 -1
- package/dist/packem_shared/postmarkProvider-DFC0uvjO.js +0 -1
- package/dist/packem_shared/provider-base-Cmzx6BTO.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/sanitize-header-wWav-Scu.js +0 -1
- package/dist/packem_shared/scalewayProvider-be1HPimL.js +0 -1
- package/dist/packem_shared/sendGridProvider-BVI1sq3n.js +0 -1
- package/dist/packem_shared/smtpProvider-BV-ufR53.js +0 -23
- 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/check-mx-records.d.ts +0 -42
- package/dist/utils/validation/check-mx-records.js +0 -1
- package/dist/utils/validation/disposable-email-domains.d.ts +0 -13
- package/dist/utils/validation/disposable-email-domains.js +0 -1
- package/dist/utils/validation/role-accounts.d.ts +0 -21
- package/dist/utils/validation/role-accounts.js +0 -1
- package/dist/utils/validation/validate-email-options.d.ts +0 -8
- package/dist/utils/validation/verify-email.d.ts +0 -47
- package/dist/utils/validation/verify-email.js +0 -1
- package/dist/utils/validation/verify-smtp.d.ts +0 -39
- package/dist/utils/validation/verify-smtp.js +0 -4
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var b=Object.defineProperty;var h=(s,t)=>b(s,"name",{value:t,configurable:!0});import d from"./EmailError-zm2ffVav.js";var g=Object.defineProperty,p=h((s,t)=>g(s,"name",{value:t,configurable:!0}),"l");const E=globalThis.Buffer!==void 0,q=p(async(s,t={},a)=>{const m=typeof s=="string"?new URL(s):s;try{const r=new Headers;t.headers&&Object.entries(t.headers).forEach(([e,u])=>{r.set(e,u)});const o={headers:r,method:t.method||(a?"POST":"GET")};a&&(typeof a=="string"||a instanceof Uint8Array?o.body=a:E&&a instanceof globalThis.Buffer?o.body=new Uint8Array(a):o.body=new Uint8Array(a));let c,n;t.timeout&&(c=new AbortController,n=setTimeout(()=>{c?.abort()},t.timeout),o.signal=c.signal);try{const e=await fetch(m.toString(),o);n&&clearTimeout(n);const u=(e.headers.get("content-type")||"").includes("application/json");let i;if(u)try{i=await e.json()}catch{i=await e.text()}else i=await e.text();const f=e.status>=200&&e.status<300,l={};return e.headers.forEach((y,w)=>{l[w]=y}),{data:{body:i,headers:l,statusCode:e.status},error:f?void 0:new d("http",`Request failed with status ${e.status}`,{code:e.status.toString()}),success:f}}catch(e){if(n&&clearTimeout(n),e instanceof Error&&e.name==="AbortError")return{error:new d("http",`Request timed out after ${t.timeout}ms`),success:!1};throw e}}catch(r){return{error:new d("http",`Request failed: ${r instanceof Error?r.message:String(r)}`,{cause:r instanceof Error?r:new Error(String(r))}),success:!1}}},"makeRequest");export{q as m};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var A=Object.defineProperty;var h=(i,s)=>A(i,"name",{value:s,configurable:!0});import{createRequire as T}from"node:module";import d from"./EmailError-zm2ffVav.js";import k from"./RequiredOptionError-CevW3u2K.js";import{s as z}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as f}from"./make-request-BDzF9W9D.js";import{c as M,P as q,u as v,h as w}from"./provider-base-Cmzx6BTO.js";import{s as _,a as K}from"./sanitize-header-wWav-Scu.js";import{d as N}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as O}from"./defineProvider-B9rSklAJ.js";import{g as y}from"./address-formatter-Cm_E_ZMa.js";const C=T(import.meta.url),g=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,I=h(i=>{if(typeof g<"u"&&g.versions&&g.versions.node){const[s,m]=g.versions.node.split(".").map(Number);if(s>22||s===22&&m>=3||s===20&&m>=16)return g.getBuiltinModule(i)}return C(i)},"__cjs_getBuiltinModule"),{Buffer:S}=I("node:buffer"),r="mandrill",V="https://mandrillapp.com/api/1.0",D=3e4,R=3,Y=O((i={})=>{if(!i.apiKey)throw new k(r,"apiKey");const s={apiKey:i.apiKey,debug:i.debug||!1,endpoint:i.endpoint||V,retries:i.retries||R,timeout:i.timeout||D,...i.logger&&{logger:i.logger}},m=new q,n=M(r,i.logger);return{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 d(r,"Email ID is required to retrieve email details"),success:!1};await m.ensureInitialized(()=>this.initialize(),r),n.debug("Retrieving email details",{id:e});const l={id:e,key:s.apiKey},t={"Content-Type":"application/json"},o=await v(async()=>f(`${s.endpoint}/messages/info.json`,{headers:t,method:"POST",timeout:s.timeout},JSON.stringify(l)),s.retries);return o.success?(n.debug("Email details retrieved successfully"),{data:o.data?.body,success:!0}):(n.debug("API request failed when retrieving email",o.error),{error:new d(r,`Failed to retrieve email: ${o.error instanceof Error?o.error.message:"Unknown error"}`,{cause:o.error}),success:!1})}catch(l){return{error:w(r,"retrieve email",l,n),success:!1}}},async initialize(){await m.ensureInitialized(async()=>{if(!await this.isAvailable())throw new d(r,"Mandrill API not available or invalid API key");n.debug("Provider initialized successfully")},r)},async isAvailable(){try{n.debug("Checking Mandrill API availability");const e={key:s.apiKey},l={"Content-Type":"application/json"},t=await f(`${s.endpoint}/users/info.json`,{headers:l,method:"POST",timeout:s.timeout},JSON.stringify(e));return n.debug("Mandrill 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 n.debug("Error checking availability:",e),!1}},name:r,options:s,async sendEmail(e){try{const l=N(e);if(l.length>0)return{error:new d(r,`Invalid email options: ${l.join(", ")}`),success:!1};await m.ensureInitialized(()=>this.initialize(),r);const t={from_email:e.from.email,html:e.html||"",subject:e.subject,text:e.text||"",...e.from.name&&{from_name:e.from.name},to:y(e.to,"to")};if(e.cc){const a=y(e.cc,"cc");for(const c of a)c.type="cc";t.to=[...t.to,...a]}if(e.bcc){const a=y(e.bcc,"bcc");for(const c of a)c.type="bcc";t.to=[...t.to,...a]}if(e.replyTo){const a=e.replyTo.name?`${_(e.replyTo.name)} <${e.replyTo.email}>`:e.replyTo.email;t.headers={"Reply-To":a}}if(e.headers){const a=E(e.headers),c={};Object.entries(a).forEach(([p,P])=>{c[K(p)]=_(P)}),t.headers={...t.headers,...c}}e.tags&&e.tags.length>0&&(t.tags=e.tags),e.metadata&&(t.metadata=e.metadata),(e.googleAnalyticsDomains||e.googleAnalyticsCampaign)&&(t.google_analytics_domains=e.googleAnalyticsDomains,t.google_analytics_campaign=e.googleAnalyticsCampaign),e.subaccount&&(t.subaccount=e.subaccount),e.attachments&&e.attachments.length>0&&(t.attachments=await Promise.all(e.attachments.map(async a=>{let c;if(a.content)if(typeof a.content=="string")c=a.content;else if(a.content instanceof Promise){const p=await a.content;c=S.from(p).toString("base64")}else c=a.content.toString("base64");else if(a.raw)c=typeof a.raw=="string"?a.raw:a.raw.toString("base64");else throw new d(r,`Attachment ${a.filename} has no content`);return{content:c,name:a.filename,type:a.contentType||"application/octet-stream"}})));const o={key:s.apiKey,message:t};e.templateName&&(o.template_name=e.templateName,e.templateContent&&(o.template_content=e.templateContent),e.templateVariables&&(o.template_vars=e.templateVariables)),e.globalMergeVars&&(t.global_merge_vars=e.globalMergeVars),e.mergeVars&&(t.merge_vars=e.mergeVars),e.sendAt&&(o.send_at=e.sendAt),n.debug("Sending email via Mandrill API",{subject:t.subject,to:t.to});const j={"Content-Type":"application/json"},u=await v(async()=>f(`${s.endpoint}/messages/send.json`,{headers:j,method:"POST",timeout:s.timeout},JSON.stringify(o)),s.retries);if(!u.success)return n.debug("API request failed when sending email",u.error),{error:u.error||new d(r,"Failed to send email"),success:!1};const b=u.data?.body?.[0]?.id||z();return n.debug("Email sent successfully",{messageId:b}),{data:{messageId:b,provider:r,response:u.data,sent:!0,timestamp:new Date},success:!0}}catch(l){return{error:w(r,"send email",l,n),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{Y as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var S=Object.defineProperty;var v=(m,l)=>S(m,"name",{value:l,configurable:!0});import c from"./EmailError-zm2ffVav.js";import{c as I}from"./create-logger-BiWdqFNg.js";import{s as D}from"./generate-message-id-D4uA8gkj.js";import{d as $}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as A}from"./defineProvider-B9rSklAJ.js";var F=Object.defineProperty,k=v((m,l)=>F(m,"name",{value:l,configurable:!0}),"k");const u="mock",p=new Map,M=k(()=>({debug:!1,delay:0,failureRate:0,randomDelayRange:{max:0,min:0},retries:0,simulateFailure:!1,timeout:0}),"createDefaultConfig"),L=A((m={})=>{const l=`mock-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;p.has(l)||p.set(l,[]);const a=p.get(l);if(!a)throw new Error(`Storage not found for instance: ${l}`);let y=!1,f;const s={...M(),defaultResponse:m.defaultResponse,logger:m.logger,randomDelayRange:m.randomDelayRange||{max:0,min:0},...m},r=I(u,s.logger);return{clearSentMessages(){a.length=0,r.debug("Cleared all sent messages")},features:{attachments:!0,batchSending:!0,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!0,templates:!1,tracking:!1},findMessageBy(e){return a.find(t=>e(t))},findMessagesBy(e){return a.filter(t=>e(t))},async getEmail(e){try{if(!e)return{error:new c(u,"Email ID is required to retrieve email details"),success:!1};const t=a.find(o=>o.id===e);return t?(r.debug("Retrieved email",{id:e}),{data:t,success:!0}):{error:new c(u,`Email with ID ${e} not found`),success:!1}}catch(t){return r.debug("Exception retrieving email",t),{error:new c(u,`Failed to retrieve email: ${t.message}`,{cause:t}),success:!1}}},getInstance(){return a},getLastSentMessage(){return a[a.length-1]},getMessagesBySubject(e){return a.filter(t=>t.options.subject===e)},getMessagesTo(e){return a.filter(t=>{const o=Array.isArray(t.options.to)?t.options.to:[t.options.to];let i=[];t.options.cc&&(i=Array.isArray(t.options.cc)?t.options.cc:[t.options.cc]);let d=[];return t.options.bcc&&(d=Array.isArray(t.options.bcc)?t.options.bcc:[t.options.bcc]),[...o,...i,...d].some(w=>w.email===e)})},getSentEmails(){return[...a]},getSentMessages(){return[...a]},getSentMessagesCount(){return a.length},async initialize(){y||(s.delay>0&&await new Promise(e=>{setTimeout(e,s.delay)}),y=!0,r.debug("Mock provider initialized"))},async isAvailable(){return!0},name:u,options:s,reset(){a.length=0,f=void 0;const e=M();s.debug=e.debug,s.delay=e.delay,s.failureRate=e.failureRate,s.retries=e.retries,s.simulateFailure=e.simulateFailure,s.timeout=e.timeout,s.randomDelayRange={max:0,min:0},s.defaultResponse=void 0,r.debug("Mock provider reset to initial state")},async sendEmail(e){try{const t=$(e);if(t.length>0)return{error:new c(u,`Invalid email options: ${t.join(", ")}`),success:!1};y||await this.initialize();let o=s.delay;if(s.randomDelayRange&&s.randomDelayRange.max>0){const{max:n,min:g}=s.randomDelayRange;o=Math.floor(Math.random()*(n-g+1))+g}if(o>0&&await new Promise(n=>{setTimeout(n,o)}),f!==void 0){const n=f;if(f=void 0,!n.successful)return r.debug("Using next response (failure)",n),{error:new c(u,n.errorMessages.join(", ")),success:!1};const g=n.messageId||D(),b=n.timestamp||new Date,h={messageId:g,provider:n.provider||u,response:n.response,sent:!0,timestamp:b},E={id:g,options:e,result:h,timestamp:b};return a.push(E),r.debug("Email stored using next response",{messageId:g}),{data:h,success:!0}}if(s.simulateFailure||s.failureRate>0&&Math.random()<s.failureRate)return r.debug("Simulating email send failure"),{error:new c(u,"Simulated failure"),success:!1};const i=s.defaultResponse?.successful?s.defaultResponse.messageId:D(),d=s.defaultResponse?.successful&&s.defaultResponse.timestamp?s.defaultResponse.timestamp:new Date,w=s.defaultResponse&&"response"in s.defaultResponse?s.defaultResponse.response:void 0,R={messageId:i,provider:u,response:w??{mock:!0,stored:!0},sent:!0,timestamp:d},x={id:i,options:e,result:R,timestamp:d};return a.push(x),r.debug("Email stored in mock provider",{messageId:i,subject:e.subject,to:Array.isArray(e.to)?e.to.map(n=>n.email):e.to.email}),{data:R,success:!0}}catch(t){return r.debug("Exception sending email",t),{error:new c(u,`Failed to send email: ${t.message}`,{cause:t}),success:!1}}},setDefaultResponse(e){s.defaultResponse=e,r.debug("Set default response",{receipt:e})},setDelay(e){if(e<0)throw new RangeError("Delay must be non-negative");s.delay=e,s.randomDelayRange={max:0,min:0},r.debug("Set fixed delay",{milliseconds:e})},setFailureRate(e){if(e<0||e>1)throw new RangeError("Failure rate must be between 0.0 and 1.0");s.failureRate=e,r.debug("Set failure rate",{rate:e})},setNextResponse(e){f=e,r.debug("Set next response",{receipt:e})},setRandomDelay(e,t){if(e<0||t<0||e>t)throw new RangeError("Invalid delay range");s.delay=0,s.randomDelayRange={max:t,min:e},r.debug("Set random delay range",{max:t,min:e})},async shutdown(){a.length=0,p.delete(l),r.debug("Mock provider shutdown")},async validateCredentials(){return!0},async waitForMessage(e,t=5e3){const o=Date.now();for(;;){const i=a.find(d=>e(d));if(i)return i;if(Date.now()-o>t)throw new Error("Timeout waiting for message");await new Promise(d=>{setTimeout(d,10)})}},async waitForMessageCount(e,t=5e3){const o=Date.now();for(;a.length<e;){if(Date.now()-o>t)throw new Error(`Timeout waiting for ${e} messages (got ${a.length})`);await new Promise(i=>{setTimeout(i,10)})}}}});export{L as default};
|
|
@@ -1 +0,0 @@
|
|
|
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-DfJ7llf8.js";import{defineProvider as A}from"./defineProvider-B9rSklAJ.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||(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||(r=l()),await r.verify(),!0}catch{return!1}},"validateCredentials")}});export{C as default};
|
|
@@ -1 +0,0 @@
|
|
|
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 x}from"./defineProvider-B9rSklAJ.js";var z=Object.defineProperty,c=v((e,r)=>z(e,"name",{value:r,configurable:!0}),"c");const $=c(e=>typeof e=="function","isProviderFactory"),C=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"),k=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=x(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($(r.provider))t=r.provider({});else if(C(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=k(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&&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 +0,0 @@
|
|
|
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-BDzF9W9D.js";import{c as K,P as x,u as w,h as P}from"./provider-base-Cmzx6BTO.js";import{s as S,a as q}from"./sanitize-header-wWav-Scu.js";import{d as B}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as R}from"./defineProvider-B9rSklAJ.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[q(y)]=S(_)}),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 +0,0 @@
|
|
|
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-BDzF9W9D.js";import{c as C,P as K,u as v}from"./provider-base-Cmzx6BTO.js";import{d as k}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as q}from"./defineProvider-B9rSklAJ.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 +0,0 @@
|
|
|
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-BDzF9W9D.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-DfJ7llf8.js";import{defineProvider as E}from"./defineProvider-B9rSklAJ.js";import{b as z}from"./attachment-processor-2rHmfa7j.js";import{b as p,c as v}from"./address-formatter-Cm_E_ZMa.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}},c=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 c.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 c.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 c.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),m=[];for(const[b,y]of Object.entries(l))m.push({Name:S(b),Value:C(String(y))});m.length>0&&(t.Headers=m)}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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var u=Object.defineProperty;var s=(t,e)=>u(t,"name",{value:e,configurable:!0});import c from"./EmailError-zm2ffVav.js";import{c as d}from"./create-logger-BiWdqFNg.js";var l=Object.defineProperty,f=s((t,e)=>l(t,"name",{value:e,configurable:!0}),"i");const o=f(async(t,e=3,i=300)=>{try{const r=await t();return r.success||e<=0?r:(await new Promise(a=>{setTimeout(()=>{a()},i)}),o(t,e-1,i*2))}catch(r){return e<=0?{error:r instanceof Error?r:new Error(String(r)),success:!1}:(await new Promise(a=>{setTimeout(()=>{a()},i)}),o(t,e-1,i*2))}},"retry");var g=Object.defineProperty,n=s((t,e)=>g(t,"name",{value:e,configurable:!0}),"o");class P{static{s(this,"ProviderState")}static{n(this,"ProviderState")}isInitialized=!1;get initialized(){return this.isInitialized}setInitialized(){this.isInitialized=!0}async ensureInitialized(e,i){if(!this.isInitialized)try{await e(),this.isInitialized=!0}catch(r){throw new c(i,`Failed to initialize: ${r.message}`,{cause:r})}}}const w=n((t,e)=>d(t,e),"createProviderLogger");n(t=>{if(!t.success||!t.data)return!1;const e=t.data;return typeof e.statusCode=="number"&&e.statusCode>=200&&e.statusCode<300},"isSuccessfulResponse");const z=n((t,e,i,r)=>{const a=`Failed to ${e}: ${i.message}`;return r&&r.debug(`Exception ${e}`,i),new c(t,a,{cause:i})},"handleProviderError");export{P,w as c,z as h,o as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var vr=Object.defineProperty;var $=(e,n)=>vr(e,"name",{value:n,configurable:!0});import{createRequire as $r}from"node:module";const wr=$r(import.meta.url),C=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,yr=$(e=>{if(typeof C<"u"&&C.versions&&C.versions.node){const[n,i]=C.versions.node.split(".").map(Number);if(n>22||n===22&&i>=3||n===20&&i>=16)return C.getBuiltinModule(e)}return wr(e)},"__cjs_getBuiltinModule"),{createRequire:ne}=yr("node:module"),jr=0,zr=4;var Or=Object.defineProperty,Pr=$((e,n)=>Or(e,"name",{value:n,configurable:!0}),"t$2"),Mr=Object.defineProperty,_r=Pr((e,n)=>Mr(e,"name",{value:n,configurable:!0}),"t"),Er=Object.defineProperty,kr=_r((e,n)=>Er(e,"name",{value:n,configurable:!0}),"n");const Be=kr(e=>{if(!e||!(e instanceof URL)&&typeof e!="string")throw new TypeError("Path must be a non-empty string or URL.")},"assertValidFileOrDirectoryPath");var Ar=Object.defineProperty,Rr=$((e,n)=>Ar(e,"name",{value:n,configurable:!0}),"$e"),Br=Object.defineProperty,oe=Rr((e,n)=>Br(e,"name",{value:n,configurable:!0}),"W"),Tr=Object.defineProperty,u=oe((e,n)=>Tr(e,"name",{value:n,configurable:!0}),"u$1");let _e=u(()=>{var e=(()=>{var n=Object.defineProperty,i=Object.getOwnPropertyDescriptor,c=Object.getOwnPropertyNames,d=Object.prototype.hasOwnProperty,b=u((t,r)=>{for(var o in r)n(t,o,{get:r[o],enumerable:!0})},"ne"),w=u((t,r,o,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of c(r))!d.call(t,s)&&s!==o&&n(t,s,{get:u(()=>r[s],"get"),enumerable:!(a=i(r,s))||a.enumerable});return t},"ae"),x=u(t=>w(n({},"__esModule",{value:!0}),t),"oe"),E={};b(E,{zeptomatch:u(()=>Me,"zeptomatch")});var T=u(t=>{const r=new Set,o=[t];for(let a=0;a<o.length;a++){const s=o[a];if(r.has(s))continue;r.add(s);const{children:l}=s;if(l?.length)for(let f=0,g=l.length;f<g;f++)o.push(l[f])}return Array.from(r)},"M"),D=u(t=>{let r="";const o=T(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(r||(r=f),r!==f)throw new Error(`Inconsistent RegExp flags used: "${r}" and "${f}"`)}return r},"se"),ue=u((t,r,o)=>{const a=o.get(t);if(a!==void 0)return a;const s=t.partial??r;let l="";if(t.regex&&(l+=s?"(?:$|":"",l+=t.regex.source),t.children?.length){const f=Ye(t.children.map(g=>ue(g,r,o)).filter(Boolean));if(f?.length){const g=t.children.some(q=>!q.regex||!(q.partial??r)),h=f.length>1||s&&(!l.length||g);l+=h?s?"(?:$|":"(?:":"",l+=f.join("|"),l+=h?")":""}}return t.regex&&(l+=s?")":""),o.set(t,l),l},"O"),Ve=u((t,r)=>{const o=new Map,a=T(t);for(let s=a.length-1;s>=0;s--){const l=ue(a[s],r,o);if(!(s>0))return l}return""},"ie"),Ye=u(t=>Array.from(new Set(t)),"ue"),H=u((t,r,o)=>H.compile(t,o).test(r),"R");H.compile=(t,r)=>{const o=r?.partial??!1,a=Ve(t,o),s=D(t);return new RegExp(`^(?:${a})$`,s)};var He=H,Je=u((t,r)=>{const o=He.compile(t,r),a=`${o.source.slice(0,-1)}[\\\\/]?$`,s=o.flags;return new RegExp(a,s)},"le"),Ke=Je,Qe=u(t=>{const r=t.map(a=>a.source).join("|")||"$^",o=t[0]?.flags;return new RegExp(r,o)},"ve"),Xe=Qe,ce=u(t=>Array.isArray(t),"j"),S=u(t=>typeof t=="function","_"),et=u(t=>t.length===0,"he"),tt=(()=>{const{toString:t}=Function.prototype,r=/(?:^\(\s*(?:[^,.()]|\.(?!\.\.))*\s*\)\s*=>|^\s*[a-zA-Z$_][a-zA-Z0-9$_]*\s*=>)/;return o=>(o.length===0||o.length===1)&&r.test(t.call(o))})(),rt=u(t=>typeof t=="number","de"),nt=u(t=>typeof t=="object"&&t!==null,"xe"),ot=u(t=>t instanceof RegExp,"me"),st=(()=>{const t=/\\\(|\((?!\?(?::|=|!|<=|<!))/;return r=>t.test(r.source)})(),at=(()=>{const t=/^[a-zA-Z0-9_-]+$/;return r=>t.test(r.source)&&!r.flags.includes("i")})(),fe=u(t=>typeof t=="string","A"),P=u(t=>t===void 0,"f"),it=u(t=>{const r=new Map;return o=>{const a=r.get(o);if(a!==void 0)return a;const s=t(o);return r.set(o,s),s}},"ye"),pe=u((t,r,o={})=>{const a={cache:{},input:t,index:0,indexBacktrackMax:0,options:o,output:[]},s=M(r)(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=u((t,r)=>ce(t)?lt(t,r):fe(t)?ge(t,r):ut(t,r),"i"),lt=u((t,r)=>{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(!P(r)&&!a.options.silent){const g=s.slice(l,f),h=S(r)?r(g,s,`${l}`):r;P(h)||a.output.push(h)}a.index=f}return!0}},"we"),ut=u((t,r)=>{if(at(t))return ge(t.source,r);{const o=t.source,a=t.flags.replace(/y|$/,"y"),s=new RegExp(o,a);return st(t)&&S(r)&&!tt(r)?ct(s,r):ft(s,r)}},"$e"),ct=u((t,r)=>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 g=r(...l,s,`${a}`);P(g)||o.output.push(g)}return o.index=f,!0}else return!1},"Ee"),ft=u((t,r)=>o=>{const a=o.index,s=o.input;if(t.lastIndex=a,t.test(s)){const l=t.lastIndex;if(!P(r)&&!o.options.silent){const f=S(r)?r(s.slice(a,l),s,`${a}`):r;P(f)||o.output.push(f)}return o.index=l,!0}else return!1},"Ce"),ge=u((t,r)=>o=>{const a=o.index,s=o.input;if(s.startsWith(t,a)){if(!P(r)&&!o.options.silent){const l=S(r)?r(t,s,`${a}`):r;P(l)||o.output.push(l)}return o.index+=t.length,!0}else return!1},"F"),J=u((t,r,o,a)=>{const s=M(t),l=r>1;return Q(K(me(f=>{let g=0;for(;g<o;){const h=f.index;if(!s(f)||(g+=1,f.index===h))break}return g>=r},l),a))},"k"),de=u((t,r)=>J(t,0,1,r),"L"),G=u((t,r)=>J(t,0,1/0,r),"$"),pt=u((t,r)=>J(t,1,1/0,r),"Re"),A=u((t,r)=>{const o=t.map(M);return Q(K(me(a=>{for(let s=0,l=o.length;s<l;s++)if(!o[s](a))return!1;return!0}),r))},"x"),y=u((t,r)=>{const o=t.map(M);return Q(K(a=>{for(let s=0,l=o.length;s<l;s++)if(o[s](a))return!0;return!1},r))},"p"),me=u((t,r=!0,o=!1)=>{const a=M(t);return r?s=>{const l=s.index,f=s.output.length,g=a(s);return!g&&!o&&(s.indexBacktrackMax=Math.max(s.indexBacktrackMax,s.index)),(!g||o)&&(s.index=l,s.output.length!==f&&(s.output.length=f)),g}:a},"q"),K=u((t,r)=>{const o=M(t);return r?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=r(l);return P(f)||a.output.push(f),!0}else return!1}:o},"B"),Q=(()=>{let t=0;return r=>{const o=M(r),a=t+=1;return s=>{var l;if(s.options.memoization===!1)return o(s);const f=s.index,g=(l=s.cache)[a]||(l[a]={indexMax:-1,queue:[]}),h=g.queue;if(f<=g.indexMax){const I=g.store||(g.store=new Map);if(h.length){for(let B=0,hr=h.length;B<hr;B+=2){const br=h[B*2],xr=h[B*2+1];I.set(br,xr)}h.length=0}const j=I.get(f);if(j===!1)return!1;if(rt(j))return s.index=j,!0;if(j)return s.index=j.index,j.output?.length&&s.output.push(...j.output),!0}const q=s.output.length,mr=o(s);if(g.indexMax=Math.max(g.indexMax,f),mr){const I=s.index,j=s.output.length;if(j>q){const B=s.output.slice(q,j);h.push(f,{index:I,output:B})}else h.push(f,I);return!0}else return h.push(f,!1),!1}}})(),he=u(t=>{let r;return o=>(r||(r=M(t())),r(o))},"G"),M=it(t=>{if(S(t))return et(t)?he(t):t;if(fe(t)||ot(t))return p(t);if(ce(t))return A(t);if(nt(t))return y(Object.values(t));throw new Error("Invalid rule")}),k=u(t=>t,"d"),gt=u(t=>typeof t=="string","ke"),dt=u(t=>{const r=new WeakMap,o=new WeakMap;return(a,s)=>{const l=s?.partial?o:r,f=l.get(a);if(f!==void 0)return f;const g=t(a,s);return l.set(a,g),g}},"Be"),mt=u(t=>{const r={},o={};return(a,s)=>{const l=s?.partial?o:r;return l[a]??(l[a]=t(a,s))}},"Pe"),ht=p(/\\./,k),bt=p(/./,k),xt=p(/\*\*\*+/,"*"),vt=p(/([^/{[(!])\*\*/,(t,r)=>`${r}*`),$t=p(/(^|.)\*\*(?=[^*/)\]}])/,(t,r)=>`${r}*`),wt=G(y([ht,xt,vt,$t,bt])),yt=wt,jt=u(t=>pe(t,yt,{memoization:!1}).join(""),"Ie"),zt=jt,be="abcdefghijklmnopqrstuvwxyz",Ot=u(t=>{let r="";for(;t>0;){const o=(t-1)%26;r=be[o]+r,t=Math.floor((t-1)/26)}return r},"Le"),xe=u(t=>{let r=0;for(let o=0,a=t.length;o<a;o++)r=r*26+be.indexOf(t[o])+1;return r},"V"),X=u((t,r)=>{if(r<t)return X(r,t);const o=[];for(;t<=r;)o.push(t++);return o},"b"),Pt=u((t,r,o)=>X(t,r).map(a=>String(a).padStart(o,"0")),"qe"),ve=u((t,r)=>X(xe(t),xe(r)).map(Ot),"W"),m=u(t=>({partial:!1,regex:new RegExp(t,"s"),children:[]}),"c"),W=u(t=>({children:t}),"y"),R=(()=>{const t=u((r,o,a)=>{if(a.has(r))return;a.add(r);const{children:s}=r;if(!s.length)s.push(o);else for(let l=0,f=s.length;l<f;l++)t(s[l],o,a)},"e");return r=>{if(!r.length)return W([]);for(let o=r.length-1;o>=1;o--){const a=new Set,s=r[o-1],l=r[o];t(s,l,a)}return r[0]}})(),_=u(()=>({regex:new RegExp("[\\\\/]","s"),children:[]}),"g"),Mt=p(/\\./,m),_t=p(/[$.*+?^(){}[\]\|]/,t=>m(`\\${t}`)),Et=p(/[\\\/]/,_),kt=p(/[^$.*+?^(){}[\]\|\\\/]+/,m),At=p(/^(?:!!)*!(.*)$/,(t,r)=>m(`(?!^${Me.compile(r).source}$).*?`)),Rt=p(/^(!!)+/),Bt=y([At,Rt]),Tt=p(/\/(\*\*\/)+/,()=>W([R([_(),m(".+?"),_()]),_()])),St=p(/^(\*\*\/)+/,()=>W([m("^"),R([m(".*?"),_()])])),Wt=p(/\/(\*\*)$/,()=>W([R([_(),m(".*?")]),m("$")])),qt=p(/\*\*/,()=>m(".*?")),$e=y([Tt,St,Wt,qt]),It=p(/\*\/(?!\*\*\/|\*$)/,()=>R([m("[^\\\\/]*?"),_()])),Ct=p(/\*/,()=>m("[^\\\\/]*")),we=y([It,Ct]),ye=p("?",()=>m("[^\\\\/]")),Lt=p("[",k),Ft=p("]",k),Zt=p(/[!^]/,"^\\\\/"),Nt=p(/[a-z]-[a-z]|[0-9]-[0-9]/i,k),Ut=p(/\\./,k),Dt=p(/[$.*+?^(){}[\|]/,t=>`\\${t}`),Gt=p(/[\\\/]/,"\\\\/"),Vt=p(/[^$.*+?^(){}[\]\|\\\/]+/,k),Yt=y([Ut,Dt,Gt,Nt,Vt]),je=A([Lt,de(Zt),G(Yt),Ft],t=>m(t.join(""))),Ht=p("{","(?:"),Jt=p("}",")"),Kt=p(/(\d+)\.\.(\d+)/,(t,r,o)=>Pt(+r,+o,Math.min(r.length,o.length)).join("|")),Qt=p(/([a-z]+)\.\.([a-z]+)/,(t,r,o)=>ve(r,o).join("|")),Xt=p(/([A-Z]+)\.\.([A-Z]+)/,(t,r,o)=>ve(r.toLowerCase(),o.toLowerCase()).join("|").toUpperCase()),er=y([Kt,Qt,Xt]),ze=A([Ht,er,Jt],t=>m(t.join(""))),tr=p("{"),rr=p("}"),nr=p(","),or=p(/\\./,m),sr=p(/[$.*+?^(){[\]\|]/,t=>m(`\\${t}`)),ar=p(/[\\\/]/,_),ir=p(/[^$.*+?^(){}[\]\|\\\/,]+/,m),lr=he(()=>Pe),ur=p("",()=>m("(?:)")),cr=pt(y([$e,we,ye,je,ze,lr,or,sr,ar,ir]),R),Oe=y([cr,ur]),Pe=A([tr,de(A([Oe,G(A([nr,Oe]))])),rr],W),fr=G(y([Bt,$e,we,ye,je,ze,Pe,Mt,_t,Et,kt]),R),pr=fr,gr=u(t=>pe(t,pr,{memoization:!1})[0],"kr"),dr=gr,ee=u((t,r,o)=>ee.compile(t,o).test(r),"N");ee.compile=(()=>{const t=mt((o,a)=>Ke(dr(zt(o)),a)),r=dt((o,a)=>Xe(o.map(s=>t(s,a))));return(o,a)=>gt(o)?t(o,a):r(o,a)})();var Me=ee;return x(E)})();return e.default||e},"_lazyMatch"),te;const Sr=u((e,n)=>(te||(te=_e(),_e=null),te(e,n)),"default");var Wr=Object.defineProperty,qr=oe((e,n)=>Wr(e,"name",{value:n,configurable:!0}),"t$1");const Ir=/^[A-Z]:\//i,z=qr((e="")=>e&&e.replaceAll("\\","/").replace(Ir,n=>n.toUpperCase()),"normalizeWindowsPath");var Cr=Object.defineProperty,v=oe((e,n)=>Cr(e,"name",{value:n,configurable:!0}),"r");const Lr=/^[/\\]{2}/,Fr=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i,Te=/^[A-Z]:$/i,Ee=/^\/([A-Z]:)?$/i,Zr=/.(\.[^./]+)$/,Nr=/^[/\\]|^[a-z]:[/\\]/i,Ur=v(()=>typeof process.cwd=="function"?process.cwd().replaceAll("\\","/"):"/","cwd"),Se=v((e,n)=>{let i="",c=0,d=-1,b=0,w;for(let x=0;x<=e.length;++x){if(x<e.length)w=e[x];else{if(w==="/")break;w="/"}if(w==="/"){if(!(d===x-1||b===1))if(b===2){if(i.length<2||c!==2||!i.endsWith(".")||i.at(-2)!=="."){if(i.length>2){const E=i.lastIndexOf("/");E===-1?(i="",c=0):(i=i.slice(0,E),c=i.length-1-i.lastIndexOf("/")),d=x,b=0;continue}else if(i.length>0){i="",c=0,d=x,b=0;continue}}n&&(i+=i.length>0?"/..":"..",c=2)}else i.length>0?i+=`/${e.slice(d+1,x)}`:i=e.slice(d+1,x),c=x-d-1;d=x,b=0}else w==="."&&b!==-1?++b:b=-1}return i},"normalizeString"),N=v(e=>Fr.test(e),"isAbsolute"),We=v(function(e){if(e.length===0)return".";e=z(e);const n=Lr.exec(e),i=N(e),c=e.at(-1)==="/";return e=Se(e,!i),e.length===0?i?"/":c?"./":".":(c&&(e+="/"),Te.test(e)&&(e+="/"),n?i?`//${e}`:`//./${e}`:i&&!N(e)?`/${e}`:e)},"normalize"),qe=v((...e)=>{let n="";for(const i of e)if(i)if(n.length>0){const c=n[n.length-1]==="/",d=i[0]==="/";c&&d?n+=i.slice(1):n+=c||d?i:`/${i}`}else n+=i;return We(n)},"join"),re=v(function(...e){e=e.map(c=>z(c));let n="",i=!1;for(let c=e.length-1;c>=-1&&!i;c--){const d=c>=0?e[c]:Ur();!d||d.length===0||(n=`${d}/${n}`,i=N(d))}return n=Se(n,!i),i&&!N(n)?`/${n}`:n.length>0?n:"."},"resolve");v(function(e){return z(e)},"toNamespacedPath");const Ie=v(function(e){return Zr.exec(z(e))?.[1]??""},"extname");v(function(e,n){const i=re(e).replace(Ee,"$1").split("/"),c=re(n).replace(Ee,"$1").split("/");if(c[0][1]===":"&&i[0][1]===":"&&i[0]!==c[0])return c.join("/");const d=[...i];for(const b of d){if(c[0]!==b)break;i.shift(),c.shift()}return[...i.map(()=>".."),...c].join("/")},"relative");const Dr=v(e=>{const n=z(e).replace(/\/$/,"").split("/").slice(0,-1);return n.length===1&&Te.test(n[0])&&(n[0]+="/"),n.join("/")||(N(e)?"/":".")},"dirname");v(function(e){const n=[e.root,e.dir,e.base??e.name+e.ext].filter(Boolean);return z(e.root?re(...n):n.join("/"))},"format");const Gr=v((e,n)=>{const i=z(e).split("/").pop();return n&&i.endsWith(n)?i.slice(0,-n.length):i},"basename");v(function(e){const n=Nr.exec(e)?.[0]?.replaceAll("\\","/")??"",i=Gr(e),c=Ie(i);return{base:i,dir:Dr(e),ext:c,name:i.slice(0,i.length-c.length),root:n}},"parse");v((e,n)=>Sr(n,We(e)),"matchesGlob");var Vr=Object.defineProperty,se=$((e,n)=>Vr(e,"name",{value:n,configurable:!0}),"o$2"),Yr=Object.defineProperty,Y=se((e,n)=>Yr(e,"name",{value:n,configurable:!0}),"o");const Hr=ne(import.meta.url),L=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Jr=Y(e=>{if(typeof L<"u"&&L.versions&&L.versions.node){const[n,i]=L.versions.node.split(".").map(Number);if(n>22||n===22&&i>=3||n===20&&i>=16)return L.getBuiltinModule(e)}return Hr(e)},"__cjs_getBuiltinModule"),{fileURLToPath:Kr}=Jr("node:url");function ae(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}$(ae,"b$1");se(ae,"j");Y(ae,"getDefaultExportFromCjs");var ke,Ae;function ie(){return Ae||(Ae=1,ke=["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"]),ke}$(ie,"v$1");se(ie,"z");Y(ie,"requireBinaryExtensions");var Qr=ie();const Xr=ae(Qr);var en=Object.defineProperty,O=Y((e,n)=>en(e,"name",{value:n,configurable:!0}),"r");const tn=new Set(Xr),rn=new Set(["/","\\",void 0]),Re=Symbol.for("pathe:normalizedAlias"),nn=/(^|[/\\])([^/\\]+?)(?=(?:\.[^.]+)?$)/,on=O((e,n)=>n.split("/").length-e.split("/").length,"compareAliases"),V=O((e="/")=>{const n=e.at(-1);return n==="/"||n==="\\"},"hasTrailingSlash"),Ce=O(e=>{if(e[Re])return e;const n=Object.fromEntries(Object.entries(e).toSorted(([i],[c])=>on(i,c)));for(const i in n)for(const c in n)c===i||i.startsWith(c)||n[i].startsWith(c)&&rn.has(n[i][c.length])&&(n[i]=n[c]+n[i].slice(c.length));return Object.defineProperty(n,Re,{enumerable:!1,value:!0}),n},"normalizeAliases");O((e,n)=>{e=z(e),n=Ce(n);for(const[i,c]of Object.entries(n)){if(!e.startsWith(i))continue;const d=V(i)?i.slice(0,-1):i;if(V(e[d.length]))return qe(c,e.slice(i.length))}return e},"resolveAlias");O(e=>nn.exec(e)?.[2],"filename");O((e,n)=>{e=z(e),n=Ce(n);for(const[i,c]of Object.entries(n).toReversed()){if(!e.startsWith(c))continue;const d=V(c)?c.slice(0,-1):c;if(V(e[d.length]))return qe(i,e.slice(c.length))}return e},"reverseResolveAlias");O(e=>/^(?:\.?\.[/\\]|\.\.\B)/.test(e)||e==="..","isRelative");O(e=>tn.has(Ie(e).slice(1).toLowerCase()),"isBinaryPath");const Le=O(e=>z(e instanceof URL?Kr(e):e),"toPath");O(()=>{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:/^(?:msys|cygwin)$/.test(e)},"isWindows");var sn=Object.defineProperty,Fe=$((e,n)=>sn(e,"name",{value:n,configurable:!0}),"t$1"),an=Object.defineProperty,le=Fe((e,n)=>an(e,"name",{value:n,configurable:!0}),"s");const ln=ne(import.meta.url),F=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,un=le(e=>{if(typeof F<"u"&&F.versions&&F.versions.node){const[n,i]=F.versions.node.split(".").map(Number);if(n>22||n===22&&i>=3||n===20&&i>=16)return F.getBuiltinModule(e)}return ln(e)},"__cjs_getBuiltinModule"),{access:cn}=un("node:fs/promises");var fn=Object.defineProperty,pn=le((e,n)=>fn(e,"name",{value:n,configurable:!0}),"o");async function U(e,n=jr){Be(e),e=Le(e);try{return await cn(e,n),!0}catch{return!1}}$(U,"i$1");Fe(U,"d");le(U,"m");pn(U,"isAccessible");var gn=Object.defineProperty,Ze=$((e,n)=>gn(e,"name",{value:n,configurable:!0}),"t"),dn=Object.defineProperty,Ne=Ze((e,n)=>dn(e,"name",{value:n,configurable:!0}),"t"),mn=Object.defineProperty,hn=Ne((e,n)=>mn(e,"name",{value:n,configurable:!0}),"o");let bn=class extends Error{static{$(this,"c")}static{Ze(this,"i")}static{Ne(this,"n")}static{hn(this,"PermissionError")}constructor(n){super(`EPERM: Operation not permitted, ${n}`)}get code(){return"EPERM"}set code(n){throw new Error("Cannot overwrite code EPERM")}get name(){return"PermissionError"}set name(n){throw new Error("Cannot overwrite name of PermissionError")}};var xn=Object.defineProperty,vn=$((e,n)=>xn(e,"name",{value:n,configurable:!0}),"f"),$n=Object.defineProperty,Ue=vn((e,n)=>$n(e,"name",{value:n,configurable:!0}),"i");const wn=ne(import.meta.url),Z=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,De=Ue(e=>{if(typeof Z<"u"&&Z.versions&&Z.versions.node){const[n,i]=Z.versions.node.split(".").map(Number);if(n>22||n===22&&i>=3||n===20&&i>=16)return Z.getBuiltinModule(e)}return wn(e)},"__cjs_getBuiltinModule"),{readFile:yn}=De("node:fs/promises"),{unzip:jn,brotliDecompress:zn}=De("node:zlib");var On=Object.defineProperty,Ge=Ue((e,n)=>On(e,"name",{value:n,configurable:!0}),"n");const Pn={brotli:zn,gzip:jn,none:Ge((e,n)=>{n(null,e)},"none")},kn=Ge(async(e,n)=>{if(Be(e),e=Le(e),!await U(e))throw new bn(`unable to read the non-accessible file: ${e}`);if(!await U(e,zr))throw new Error(`Unable to read the non-readable file: ${e}`);const{buffer:i,compression:c,encoding:d,flag:b}=n??{};return await yn(e,b?{encoding:d,flag:b}:{encoding:d}).then(async w=>await new Promise((x,E)=>{Pn[c??"none"](w,(T,D)=>{T?E(T):x(i?D:D.toString())})})).catch(w=>{throw w})},"readFile");export{kn as B};
|
|
@@ -1 +0,0 @@
|
|
|
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-BDzF9W9D.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-DfJ7llf8.js";import{defineProvider as S}from"./defineProvider-B9rSklAJ.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};
|
|
@@ -1 +0,0 @@
|
|
|
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-B9rSklAJ.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===!0)}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 +0,0 @@
|
|
|
1
|
-
var l=Object.defineProperty;var r=(e,a)=>l(e,"name",{value:a,configurable:!0});var n=Object.defineProperty,i=r((e,a)=>n(e,"name",{value:a,configurable:!0}),"r");const s=i(e=>e.replaceAll(/[\r\n]/g,""),"sanitizeHeaderValue"),c=i(e=>e.replaceAll(/[\r\n]/g,""),"sanitizeHeaderName");export{c as a,s};
|
|
@@ -1 +0,0 @@
|
|
|
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-BDzF9W9D.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-DfJ7llf8.js";import{defineProvider as C}from"./defineProvider-B9rSklAJ.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 +0,0 @@
|
|
|
1
|
-
import l from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{s as S}from"./generate-message-id-D4uA8gkj.js";import{i as P}from"./headers-to-record-Qo124ImV.js";import{m as h}from"./make-request-BDzF9W9D.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-DfJ7llf8.js";import{defineProvider as z}from"./defineProvider-B9rSklAJ.js";import{f,a as I}from"./address-formatter-Cm_E_ZMa.js";import{c as k}from"./attachment-processor-2rHmfa7j.js";const s="sendgrid",C="https://api.sendgrid.com/v3",E=3e4,T=3,R=z((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||T,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=P(e.headers);n.headers=d}e.attachments&&e.attachments.length>0&&(n.attachments=await Promise.all(e.attachments.map(async d=>k(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)||S();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 +0,0 @@
|
|
|
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-IYaUqqPJ.js";import{s as te}from"./generate-message-id-D4uA8gkj.js";import{d as re}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as oe}from"./defineProvider-B9rSklAJ.js";const W=q(import.meta.url),k=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,M=C(u=>{if(typeof k<"u"&&k.versions&&k.versions.node){const[r,y]=k.versions.node.split(".").map(Number);if(r>22||r===22&&y>=3||r===20&&y>=16)return k.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 j=a.split(`\r
|
|
3
|
-
`).filter(Boolean);if(j.length>0){const I=j[j.length-1];if(I){const O=I.match(/^(\d{3})[\s-]/);if(O){const[,R]=O;t=R,I[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
|
-
`)}),"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
|
-
`),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]||[]:[];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
|
-
\r
|
|
8
|
-
`);if(!n||!o)return e;const a=n.split(`\r
|
|
9
|
-
`),t=p(A=>A.replaceAll(`\r
|
|
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()||"").filter(Boolean).join(":"),j=Math.floor(Date.now()/1e3),I={a:"rsa-sha256",bh:w,c:"relaxed/relaxed",d:c,h:S,s,t:j.toString(),v:"1"},O=`DKIM-Signature: ${Object.entries(I).map(([A,P])=>`${A}=${P}`).join("; ")}; b=`,R=[...L,O].map(A=>t(A)).join(`\r
|
|
12
|
-
`),N=Q("RSA-SHA256");N.update(R);const B=N.sign(i,"base64");return`${`${O}${B}`}\r
|
|
13
|
-
${a.join(`\r
|
|
14
|
-
`)}\r
|
|
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!==!1)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
|
-
\r
|
|
18
|
-
`);if(t!==-1){const d=n.slice(0,t),w=n.slice(t+4);n=`${d}\r
|
|
19
|
-
${o.join(`\r
|
|
20
|
-
`)}\r
|
|
21
|
-
\r
|
|
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!==!1)return!1}return await E(e),await T(e),!0}catch{return await T(e),!1}}catch{return!1}}}});export{be as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var P=Object.defineProperty;var h=(i,a)=>P(i,"name",{value:a,configurable:!0});import{createRequire as A}from"node:module";import l from"./EmailError-zm2ffVav.js";import _ from"./RequiredOptionError-CevW3u2K.js";import{s as z}from"./generate-message-id-D4uA8gkj.js";import{i as E}from"./headers-to-record-Qo124ImV.js";import{m as y}from"./make-request-BDzF9W9D.js";import{c as q,P as k,u as b,h as w}from"./provider-base-Cmzx6BTO.js";import{d as K}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as B}from"./defineProvider-B9rSklAJ.js";import{f,a as C}from"./address-formatter-Cm_E_ZMa.js";const j=A(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,S=h(i=>{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(i)}return j(i)},"__cjs_getBuiltinModule"),{Buffer:T}=S("node:buffer"),s="sweego",$="https://api.sweego.com",x=3e4,R=3,Q=B((i={})=>{if(!i.apiKey)throw new _(s,"apiKey");const a={apiKey:i.apiKey,debug:i.debug||!1,endpoint:i.endpoint||$,retries:i.retries||R,timeout:i.timeout||x,...i.logger&&{logger:i.logger}},c=new k,n=q(s,i.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(s,"Email ID is required to retrieve email details"),success:!1};await c.ensureInitialized(()=>this.initialize(),s);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(s,`Failed to retrieve email: ${t.error instanceof Error?t.error.message:"Unknown error"}`,{cause:t.error}),success:!1})}catch(o){return{error:w(s,"retrieve email",o,n),success:!1}}},async initialize(){await c.ensureInitialized(async()=>{if(!await this.isAvailable())throw new l(s,"Sweego API not available or invalid API key");n.debug("Provider initialized successfully")},s)},async isAvailable(){try{return n.debug("Checking Sweego API availability"),!0}catch(e){return n.debug("Error checking availability:",e),!1}},name:s,options:a,async sendEmail(e){try{const o=K(e);if(o.length>0)return{error:new l(s,`Invalid email options: ${o.join(", ")}`),success:!1};await c.ensureInitialized(()=>this.initialize(),s);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=C(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=E(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=T.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(s,`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(s,"Failed to send email"),success:!1};const g=d.data?.body,p=g?.messageId||g?.id||z();return n.debug("Email sent successfully",{messageId:p}),{data:{messageId:p,provider:s,response:d.data,sent:!0,timestamp:new Date},success:!0}}catch(o){return{error:w(s,"send email",o,n),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{Q as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var d=Object.defineProperty;var l=(r,e)=>d(r,"name",{value:e,configurable:!0});import o from"../utils/validation/validate-email.js";var c=Object.defineProperty,t=l((r,e)=>c(r,"name",{value:e,configurable:!0}),"m");const f=t(r=>{const e=[];(!r.from||!r.from.email)&&e.push("Missing required field: from"),r.to||e.push("Missing required field: to"),r.subject||e.push("Missing required field: subject"),!r.text&&!r.html&&e.push("Either text or html content is required"),r.from&&r.from.email&&!o(r.from.email)&&e.push(`Invalid from email address: ${r.from.email}`);const s=t((i,m)=>{i&&(Array.isArray(i)?i:[i]).forEach(a=>{o(a.email)||e.push(`Invalid ${m} email address: ${a.email}`)})},"checkAddresses");return s(r.to,"to"),s(r.cc,"cc"),s(r.bcc,"bcc"),r.replyTo&&!o(r.replyTo.email)&&e.push(`Invalid replyTo email address: ${r.replyTo.email}`),e},"validateEmailOptions");export{f as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import l from"./EmailError-zm2ffVav.js";import y from"./RequiredOptionError-CevW3u2K.js";import{s as b}from"./generate-message-id-D4uA8gkj.js";import{i as k}from"./headers-to-record-Qo124ImV.js";import{m as v}from"./make-request-BDzF9W9D.js";import{c as w,P as A,u as _,h as z}from"./provider-base-Cmzx6BTO.js";import{s as j,a as P}from"./sanitize-header-wWav-Scu.js";import{d as I}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as T}from"./defineProvider-B9rSklAJ.js";import{m as f}from"./address-formatter-Cm_E_ZMa.js";const i="zeptomail",$="https://api.zeptomail.com/v1.1",O=3e4,Z=3,F=T((s={})=>{if(!s.token)throw new y(i,"token");if(!s.token.startsWith("Zoho-enczapikey "))throw new l(i,'Token should be in the format "Zoho-enczapikey <your_api_key>"');const n={debug:s.debug||!1,endpoint:s.endpoint||$,logger:s.logger,retries:s.retries||Z,timeout:s.timeout||O,token:s.token},u=new A,o=w(i,s.logger);return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!0},async initialize(){await u.ensureInitialized(async()=>{if(!await this.isAvailable())throw new l(i,"Zeptomail API not available or invalid token");o.debug("Provider initialized successfully")},i)},async isAvailable(){try{return n.token&&n.token.startsWith("Zoho-enczapikey ")?(o.debug("Token format is valid, assuming Zeptomail is available"),!0):!1}catch(e){return o.debug("Error checking availability:",e),!1}},name:i,options:n,async sendEmail(e){try{const m=I(e);if(m.length>0)return{error:new l(i,`Invalid email options: ${m.join(", ")}`),success:!1};await u.ensureInitialized(()=>this.initialize(),i);const a={from:f(e.from).address,subject:e.subject};if(Array.isArray(e.to)?a.to=e.to.length===1?e.to[0].email:e.to.map(t=>t.email):a.to=e.to.email,e.text&&(a.textbody=e.text),e.html&&(a.htmlbody=e.html),e.cc&&(Array.isArray(e.cc)?a.cc=e.cc.length===1?e.cc[0].email:e.cc.map(t=>t.email):a.cc=e.cc.email),e.bcc&&(Array.isArray(e.bcc)?a.bcc=e.bcc.length===1?e.bcc[0].email:e.bcc.map(t=>t.email):a.bcc=e.bcc.email),e.replyTo&&(a.reply_to=[f(e.replyTo).address]),e.trackClicks!==void 0&&(a.track_clicks=e.trackClicks),e.trackOpens!==void 0&&(a.track_opens=e.trackOpens),e.clientReference&&(a.client_reference=e.clientReference),e.mimeHeaders&&Object.keys(e.mimeHeaders).length>0){const t={};for(const[r,d]of Object.entries(e.mimeHeaders))t[r]=d;a.mime_headers=t}if(e.headers){const t=k(e.headers);Object.keys(t).length>0&&(a.mime_headers||(a.mime_headers={}),Object.entries(t).forEach(([r,d])=>{a.mime_headers&&(a.mime_headers[P(r)]=j(d))}))}e.attachments&&e.attachments.length>0&&(a.attachments=e.attachments.map(t=>{const r={name:t.filename};return t.content?(r.content=typeof t.content=="string"?t.content:t.content.toString("base64"),t.contentType&&(r.mime_type=t.contentType)):t.path&&(r.file_cache_key=t.path),r})),o.debug("Sending email via Zeptomail API",{subject:a.subject,to:a.to});const g={Accept:"application/json",Authorization:n.token,"Content-Type":"application/json"},c=await _(async()=>v(`${n.endpoint}/email`,{headers:g,method:"POST",timeout:n.timeout},JSON.stringify(a)),n.retries);if(!c.success){o.debug("API request failed",c.error);let t=c.error instanceof Error?c.error.message:"Unknown error";const r=c.data;return r?.body?.message?t+=` Details: ${r.body.message}`:r?.body?.error?.message&&(t+=` Details: ${r.body.error.message}`),{error:new l(i,`Failed to send email: ${t}`,{cause:c.error}),success:!1}}const p=c.data?.body,h=p?.request_id||b();return o.debug("Email sent successfully",{messageId:h}),{data:{messageId:h,provider:i,response:p,sent:!0,timestamp:new Date},success:!0}}catch(m){return{error:z(i,"send email",m,o),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{F as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { AhaSendConfig, AhaSendEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* AhaSend Provider for sending emails through AhaSend API
|
|
5
|
-
*/
|
|
6
|
-
declare const ahaSendProvider: ProviderFactory<AhaSendConfig, unknown, AhaSendEmailOptions>;
|
|
7
|
-
export default ahaSendProvider;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { BaseConfig, EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* AhaSend configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface AhaSendConfig extends BaseConfig {
|
|
6
|
-
/**
|
|
7
|
-
* AhaSend API key
|
|
8
|
-
*/
|
|
9
|
-
apiKey: string;
|
|
10
|
-
/**
|
|
11
|
-
* AhaSend API endpoint
|
|
12
|
-
* Defaults to: https://api.ahasend.com
|
|
13
|
-
*/
|
|
14
|
-
endpoint?: string;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* AhaSend-specific email options
|
|
18
|
-
*/
|
|
19
|
-
export interface AhaSendEmailOptions extends EmailOptions {
|
|
20
|
-
/**
|
|
21
|
-
* AhaSend template ID for template-based emails
|
|
22
|
-
*/
|
|
23
|
-
templateId?: string;
|
|
24
|
-
/**
|
|
25
|
-
* Template variables for AhaSend templates
|
|
26
|
-
*/
|
|
27
|
-
templateVariables?: Record<string, unknown>;
|
|
28
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { AwsSesConfig, AwsSesEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* AWS SES Email Provider Implementation - Zero dependency version
|
|
5
|
-
* Uses native Node.js APIs instead of AWS SDK
|
|
6
|
-
*/
|
|
7
|
-
declare const awsSesProvider: ProviderFactory<AwsSesConfig, unknown, AwsSesEmailOptions>;
|
|
8
|
-
export default awsSesProvider;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { BaseConfig, EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* AWS SES configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface AwsSesConfig extends BaseConfig {
|
|
6
|
-
accessKeyId: string;
|
|
7
|
-
apiVersion?: string;
|
|
8
|
-
endpoint?: string;
|
|
9
|
-
maxAttempts?: number;
|
|
10
|
-
region: string;
|
|
11
|
-
secretAccessKey: string;
|
|
12
|
-
sessionToken?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* AWS SES-specific email options
|
|
16
|
-
*/
|
|
17
|
-
export interface AwsSesEmailOptions extends EmailOptions {
|
|
18
|
-
/**
|
|
19
|
-
* Configuration set name
|
|
20
|
-
*/
|
|
21
|
-
configurationSetName?: string;
|
|
22
|
-
/**
|
|
23
|
-
* Message tags as key-value pairs
|
|
24
|
-
*/
|
|
25
|
-
messageTags?: Record<string, string>;
|
|
26
|
-
/**
|
|
27
|
-
* Return path email address
|
|
28
|
-
*/
|
|
29
|
-
returnPath?: string;
|
|
30
|
-
/**
|
|
31
|
-
* Return path ARN
|
|
32
|
-
*/
|
|
33
|
-
returnPathArn?: string;
|
|
34
|
-
/**
|
|
35
|
-
* Source ARN for sending authorization
|
|
36
|
-
*/
|
|
37
|
-
sourceArn?: string;
|
|
38
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { AzureConfig, AzureEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* Azure Communication Services Provider for sending emails through Azure API
|
|
5
|
-
*/
|
|
6
|
-
declare const azureProvider: ProviderFactory<AzureConfig, unknown, AzureEmailOptions>;
|
|
7
|
-
export default azureProvider;
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { BaseConfig, EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Azure Communication Services configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface AzureConfig extends BaseConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Azure AD access token (for OAuth2 authentication)
|
|
8
|
-
*/
|
|
9
|
-
accessToken?: string;
|
|
10
|
-
/**
|
|
11
|
-
* Azure Communication Services connection string or access token
|
|
12
|
-
*/
|
|
13
|
-
connectionString?: string;
|
|
14
|
-
/**
|
|
15
|
-
* Azure Communication Services endpoint
|
|
16
|
-
* Defaults to: https://{region}.communication.azure.com
|
|
17
|
-
*/
|
|
18
|
-
endpoint?: string;
|
|
19
|
-
/**
|
|
20
|
-
* Azure region (e.g., "eastus", "westus")
|
|
21
|
-
*/
|
|
22
|
-
region: string;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Azure-specific email options
|
|
26
|
-
*/
|
|
27
|
-
export interface AzureEmailOptions extends EmailOptions {
|
|
28
|
-
/**
|
|
29
|
-
* Custom headers
|
|
30
|
-
*/
|
|
31
|
-
headers?: Record<string, string>;
|
|
32
|
-
/**
|
|
33
|
-
* Importance level (normal, high)
|
|
34
|
-
*/
|
|
35
|
-
importance?: "normal" | "high";
|
|
36
|
-
/**
|
|
37
|
-
* Azure template ID for template-based emails
|
|
38
|
-
*/
|
|
39
|
-
templateId?: string;
|
|
40
|
-
/**
|
|
41
|
-
* Template variables for Azure templates
|
|
42
|
-
*/
|
|
43
|
-
templateVariables?: Record<string, unknown>;
|
|
44
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { BrevoConfig, BrevoEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* Brevo Provider for sending emails through Brevo API
|
|
5
|
-
*/
|
|
6
|
-
declare const brevoProvider: ProviderFactory<BrevoConfig, unknown, BrevoEmailOptions>;
|
|
7
|
-
export default brevoProvider;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { BaseConfig, EmailAddress, EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Brevo configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface BrevoConfig extends BaseConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Brevo API key
|
|
8
|
-
*/
|
|
9
|
-
apiKey: string;
|
|
10
|
-
/**
|
|
11
|
-
* Brevo API endpoint
|
|
12
|
-
* Defaults to: https://api.brevo.com/v3
|
|
13
|
-
*/
|
|
14
|
-
endpoint?: string;
|
|
15
|
-
/**
|
|
16
|
-
* Enable hard validation for replyTo addresses.
|
|
17
|
-
* If true, arrays will be rejected. If false, the first address from an array will be used.
|
|
18
|
-
* Defaults to: false
|
|
19
|
-
*/
|
|
20
|
-
hardValidation?: boolean;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Brevo-specific email options
|
|
24
|
-
*/
|
|
25
|
-
export interface BrevoEmailOptions extends Omit<EmailOptions, "replyTo"> {
|
|
26
|
-
/**
|
|
27
|
-
* Batch ID for batch sending
|
|
28
|
-
*/
|
|
29
|
-
batchId?: string;
|
|
30
|
-
/**
|
|
31
|
-
* Headers (custom headers)
|
|
32
|
-
*/
|
|
33
|
-
headers?: Record<string, string>;
|
|
34
|
-
/**
|
|
35
|
-
* Reply-to email address (can override base replyTo).
|
|
36
|
-
* Only one address is allowed. If an array is provided and hardValidation is false, the first address will be used.
|
|
37
|
-
*/
|
|
38
|
-
replyTo?: EmailAddress | EmailAddress[];
|
|
39
|
-
/**
|
|
40
|
-
* Scheduled date/time
|
|
41
|
-
* - If string: ISO 8601 format (e.g., "2025-01-15T10:00:00Z")
|
|
42
|
-
* - If number: Unix timestamp in seconds (not milliseconds)
|
|
43
|
-
*/
|
|
44
|
-
scheduledAt?: string | number;
|
|
45
|
-
/**
|
|
46
|
-
* Tags for categorization
|
|
47
|
-
*/
|
|
48
|
-
tags?: string[];
|
|
49
|
-
/**
|
|
50
|
-
* Brevo template ID for template-based emails
|
|
51
|
-
*/
|
|
52
|
-
templateId?: number;
|
|
53
|
-
/**
|
|
54
|
-
* Template parameters for Brevo templates
|
|
55
|
-
*/
|
|
56
|
-
templateParams?: Record<string, unknown>;
|
|
57
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { FailoverConfig, FailoverEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* Failover Provider for sending emails with automatic failover to backup providers.
|
|
5
|
-
*/
|
|
6
|
-
declare const provider: ProviderFactory<FailoverConfig, unknown, FailoverEmailOptions>;
|
|
7
|
-
export default provider;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { BaseConfig, EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* Failover configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface FailoverConfig extends BaseConfig {
|
|
6
|
-
/**
|
|
7
|
-
* Array of provider instances or provider factories to use in failover order
|
|
8
|
-
* Can be Provider instances or ProviderFactory functions
|
|
9
|
-
*/
|
|
10
|
-
mailers: unknown[];
|
|
11
|
-
/**
|
|
12
|
-
* Time in milliseconds to wait before trying the next provider (default: 60)
|
|
13
|
-
*/
|
|
14
|
-
retryAfter?: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Failover-specific email options
|
|
18
|
-
*/
|
|
19
|
-
export type FailoverEmailOptions = EmailOptions;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { HttpEmailConfig, HttpEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* HTTP Email Provider for sending emails via HTTP API.
|
|
5
|
-
*/
|
|
6
|
-
declare const httpProvider: ProviderFactory<HttpEmailConfig, unknown, HttpEmailOptions>;
|
|
7
|
-
export default httpProvider;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { EmailOptions } from "../../types.d.ts";
|
|
2
|
-
/**
|
|
3
|
-
* HTTP email configuration
|
|
4
|
-
*/
|
|
5
|
-
export interface HttpEmailConfig {
|
|
6
|
-
apiKey?: string;
|
|
7
|
-
endpoint: string;
|
|
8
|
-
headers?: Record<string, string>;
|
|
9
|
-
method?: "GET" | "POST" | "PUT";
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* HTTP-specific email options
|
|
13
|
-
*/
|
|
14
|
-
export interface HttpEmailOptions extends EmailOptions {
|
|
15
|
-
/**
|
|
16
|
-
* Custom parameters to include in the request payload
|
|
17
|
-
*/
|
|
18
|
-
customParams?: Record<string, unknown>;
|
|
19
|
-
/**
|
|
20
|
-
* Override the endpoint for this specific email
|
|
21
|
-
*/
|
|
22
|
-
endpointOverride?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Override the HTTP method for this specific email
|
|
25
|
-
*/
|
|
26
|
-
methodOverride?: "GET" | "POST" | "PUT";
|
|
27
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { ProviderFactory } from "../provider.d.ts";
|
|
2
|
-
import type { InfobipConfig, InfobipEmailOptions } from "./types.d.ts";
|
|
3
|
-
/**
|
|
4
|
-
* Infobip Provider for sending emails through Infobip API
|
|
5
|
-
*/
|
|
6
|
-
declare const infobipProvider: ProviderFactory<InfobipConfig, unknown, InfobipEmailOptions>;
|
|
7
|
-
export default infobipProvider;
|