@visulima/email 1.0.0-alpha.12 → 1.0.0-alpha.13

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.
Files changed (116) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +1 -5
  3. package/dist/crypto/index.js +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/packem_shared/{DkimSigner-CNpDVu4V.js → DkimSigner-CT2DSHD1.js} +4 -4
  6. package/dist/packem_shared/Mail-e4KlaSct.js +1 -0
  7. package/dist/packem_shared/MailMessage-CeVZvVfv.js +1 -0
  8. package/dist/packem_shared/{SmimeEncrypter-Bv5m28oh.js → SmimeEncrypter-ZhHEgDwY.js} +2 -2
  9. package/dist/packem_shared/{SmimeSigner-DnBwjJRR.js → SmimeSigner-CYSVF6ez.js} +1 -1
  10. package/dist/packem_shared/{ahaSendProvider-DlFKEQ6D.js → ahaSendProvider-Cni1nzIr.js} +1 -1
  11. package/dist/packem_shared/{attachment-processor-2rHmfa7j.js → attachment-processor-DsmIomKc.js} +1 -1
  12. package/dist/packem_shared/{awsSesProvider-Ba-eVJxZ.js → awsSesProvider-D9idlOm1.js} +7 -7
  13. package/dist/packem_shared/azureProvider-OU6Gu-cD.js +1 -0
  14. package/dist/packem_shared/{brevoProvider-5p6jjiK9.js → brevoProvider-Bmpg3VT_.js} +1 -1
  15. package/dist/packem_shared/build-mime-message-6xstxaUV.js +2 -0
  16. package/dist/packem_shared/defineProvider-CtLH0VBE.js +1 -0
  17. package/dist/packem_shared/{detectMimeType-CPYmHk7Y.js → detectMimeType-iprkVO8e.js} +1 -1
  18. package/dist/packem_shared/failoverProvider-W5ctAhdC.js +1 -0
  19. package/dist/packem_shared/httpProvider-OX9_yKF0.js +1 -0
  20. package/dist/packem_shared/{infobipProvider-CtLwrUaP.js → infobipProvider-Bx4A4p4A.js} +1 -1
  21. package/dist/packem_shared/{mailCrabProvider-CM_CFDca.js → mailCrabProvider-B7H6HwWu.js} +1 -1
  22. package/dist/packem_shared/{mailPaceProvider-BFn8L0vA.js → mailPaceProvider-DWptkW9x.js} +1 -1
  23. package/dist/packem_shared/{mailerSendProvider-CeeIXFnW.js → mailerSendProvider-FiR_X5Be.js} +1 -1
  24. package/dist/packem_shared/mailgunProvider-B18_T6SA.js +1 -0
  25. package/dist/packem_shared/{mailjetProvider-DwN6i0VA.js → mailjetProvider-C737SQmw.js} +1 -1
  26. package/dist/packem_shared/{mailomatProvider-DMQmjKHT.js → mailomatProvider-D5HPTJrq.js} +1 -1
  27. package/dist/packem_shared/{mailtrapProvider-BN3UBEQw.js → mailtrapProvider-4fyjVZrA.js} +1 -1
  28. package/dist/packem_shared/{make-request-BDzF9W9D.js → make-request--BdZNxIl.js} +1 -1
  29. package/dist/packem_shared/{mandrillProvider-370y7CLu.js → mandrillProvider-DPXMdbPI.js} +1 -1
  30. package/dist/packem_shared/mockProvider-C0P1lKOy.js +1 -0
  31. package/dist/packem_shared/{nodemailerProvider-_w8QXMU-.js → nodemailerProvider-DFcvoVFv.js} +1 -1
  32. package/dist/packem_shared/{opentelemetryProvider-C_ZXOLSd.js → opentelemetryProvider-Dwv88G3O.js} +1 -1
  33. package/dist/packem_shared/{plunkProvider-D48sw9M1.js → plunkProvider-CmR0bUei.js} +1 -1
  34. package/dist/packem_shared/{postalProvider-Bavx2FcH.js → postalProvider-vf5vjbef.js} +1 -1
  35. package/dist/packem_shared/{postmarkProvider-DFC0uvjO.js → postmarkProvider-uCLyHARt.js} +1 -1
  36. package/dist/packem_shared/readFile-BAVMZg5e-C4whBIPd.js +1 -0
  37. package/dist/packem_shared/{resendProvider-CfqU7UdE.js → resendProvider-9X-wmOFy.js} +1 -1
  38. package/dist/packem_shared/roundRobinProvider-FvZQKl6n.js +1 -0
  39. package/dist/packem_shared/{scalewayProvider-be1HPimL.js → scalewayProvider-Bdh-7QY6.js} +1 -1
  40. package/dist/packem_shared/{sendGridProvider-BVI1sq3n.js → sendGridProvider-UrH61D8C.js} +1 -1
  41. package/dist/packem_shared/{smtpProvider-BV-ufR53.js → smtpProvider-Unjao_fn.js} +8 -8
  42. package/dist/packem_shared/sweegoProvider-B_yTn1gT.js +1 -0
  43. package/dist/packem_shared/validate-email-options-DPo3SgC0.js +1 -0
  44. package/dist/packem_shared/zeptomailProvider-skowg799.js +1 -0
  45. package/dist/providers/ahasend/index.js +1 -1
  46. package/dist/providers/ahasend/provider.d.ts +2 -2
  47. package/dist/providers/aws-ses/index.js +1 -1
  48. package/dist/providers/aws-ses/provider.d.ts +2 -2
  49. package/dist/providers/azure/index.js +1 -1
  50. package/dist/providers/brevo/index.js +1 -1
  51. package/dist/providers/failover/index.js +1 -1
  52. package/dist/providers/failover/provider.d.ts +2 -2
  53. package/dist/providers/http/index.js +1 -1
  54. package/dist/providers/http/provider.d.ts +2 -2
  55. package/dist/providers/infobip/index.js +1 -1
  56. package/dist/providers/infobip/provider.d.ts +2 -2
  57. package/dist/providers/mailcrab/index.js +1 -1
  58. package/dist/providers/mailcrab/provider.d.ts +2 -2
  59. package/dist/providers/mailersend/index.js +1 -1
  60. package/dist/providers/mailersend/provider.d.ts +2 -2
  61. package/dist/providers/mailgun/index.js +1 -1
  62. package/dist/providers/mailgun/provider.d.ts +2 -2
  63. package/dist/providers/mailjet/index.js +1 -1
  64. package/dist/providers/mailomat/index.js +1 -1
  65. package/dist/providers/mailomat/provider.d.ts +2 -2
  66. package/dist/providers/mailpace/index.js +1 -1
  67. package/dist/providers/mailtrap/index.js +1 -1
  68. package/dist/providers/mailtrap/provider.d.ts +2 -2
  69. package/dist/providers/mandrill/index.js +1 -1
  70. package/dist/providers/mandrill/provider.d.ts +2 -2
  71. package/dist/providers/mock/index.js +1 -1
  72. package/dist/providers/mock/provider.d.ts +2 -2
  73. package/dist/providers/nodemailer/index.js +1 -1
  74. package/dist/providers/nodemailer/provider.d.ts +2 -2
  75. package/dist/providers/opentelemetry/index.js +1 -1
  76. package/dist/providers/opentelemetry/provider.d.ts +1 -2
  77. package/dist/providers/plunk/index.js +1 -1
  78. package/dist/providers/plunk/provider.d.ts +2 -2
  79. package/dist/providers/postal/index.js +1 -1
  80. package/dist/providers/postal/provider.d.ts +2 -2
  81. package/dist/providers/postmark/index.js +1 -1
  82. package/dist/providers/postmark/provider.d.ts +2 -2
  83. package/dist/providers/provider.d.ts +1 -1
  84. package/dist/providers/resend/index.js +1 -1
  85. package/dist/providers/roundrobin/index.js +1 -1
  86. package/dist/providers/roundrobin/provider.d.ts +2 -2
  87. package/dist/providers/scaleway/index.js +1 -1
  88. package/dist/providers/scaleway/provider.d.ts +2 -2
  89. package/dist/providers/sendgrid/index.js +1 -1
  90. package/dist/providers/sendgrid/provider.d.ts +2 -2
  91. package/dist/providers/smtp/index.js +1 -1
  92. package/dist/providers/smtp/provider.d.ts +2 -2
  93. package/dist/providers/sweego/index.js +1 -1
  94. package/dist/providers/sweego/provider.d.ts +2 -2
  95. package/dist/providers/zeptomail/index.js +1 -1
  96. package/dist/providers/zeptomail/provider.d.ts +2 -2
  97. package/dist/template-engines/handlebars.js +1 -1
  98. package/dist/utils/make-request.d.ts +1 -1
  99. package/dist/utils/parse-address.js +1 -1
  100. package/dist/utils/validation/verify-email.js +1 -1
  101. package/dist/utils/validation/verify-smtp.js +1 -1
  102. package/package.json +5 -6
  103. package/dist/packem_shared/Mail-DxAdbjDr.js +0 -1
  104. package/dist/packem_shared/MailMessage-7FA892bF.js +0 -1
  105. package/dist/packem_shared/azureProvider-CQYAkgVF.js +0 -1
  106. package/dist/packem_shared/build-mime-message-IYaUqqPJ.js +0 -2
  107. package/dist/packem_shared/defineProvider-B9rSklAJ.js +0 -1
  108. package/dist/packem_shared/failoverProvider-CAHQQueo.js +0 -1
  109. package/dist/packem_shared/httpProvider-CZD6LZX3.js +0 -1
  110. package/dist/packem_shared/mailgunProvider-mmjKzouh.js +0 -1
  111. package/dist/packem_shared/mockProvider-DN5ZwutD.js +0 -1
  112. package/dist/packem_shared/readFile-BlZxbhCU-C76YbAVD.js +0 -1
  113. package/dist/packem_shared/roundRobinProvider-1WQnuKR8.js +0 -1
  114. package/dist/packem_shared/sweegoProvider-7419CSAq.js +0 -1
  115. package/dist/packem_shared/validate-email-options-DfJ7llf8.js +0 -1
  116. package/dist/packem_shared/zeptomailProvider-DTUWVINJ.js +0 -1
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { HttpEmailConfig, HttpEmailOptions } from "./types.d.ts";
2
+ import type { HttpEmailConfig } from "./types.d.ts";
3
3
  /**
4
4
  * HTTP Email Provider for sending emails via HTTP API.
5
5
  */
6
- declare const httpProvider: ProviderFactory<HttpEmailConfig, unknown, HttpEmailOptions>;
6
+ declare const httpProvider: ProviderFactory<HttpEmailConfig>;
7
7
  export default httpProvider;
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/infobipProvider-CtLwrUaP.js";export{e as infobipProvider};
1
+ import{default as e}from"../../packem_shared/infobipProvider-Bx4A4p4A.js";export{e as infobipProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { InfobipConfig, InfobipEmailOptions } from "./types.d.ts";
2
+ import type { InfobipConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Infobip Provider for sending emails through Infobip API
5
5
  */
6
- declare const infobipProvider: ProviderFactory<InfobipConfig, unknown, InfobipEmailOptions>;
6
+ declare const infobipProvider: ProviderFactory<InfobipConfig>;
7
7
  export default infobipProvider;
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/mailCrabProvider-CM_CFDca.js";export{e as mailCrabProvider};
1
+ import{default as e}from"../../packem_shared/mailCrabProvider-B7H6HwWu.js";export{e as mailCrabProvider};
@@ -1,9 +1,9 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MailCrabConfig, MailCrabEmailOptions } from "./types.d.ts";
2
+ import type { MailCrabConfig } from "./types.d.ts";
3
3
  /**
4
4
  * MailCrab Provider for local email testing
5
5
  * MailCrab is a local SMTP server for testing emails during development
6
6
  * This is a convenience wrapper around the SMTP provider with MailCrab defaults
7
7
  */
8
- declare const mailCrabProvider: ProviderFactory<MailCrabConfig, unknown, MailCrabEmailOptions>;
8
+ declare const mailCrabProvider: ProviderFactory<MailCrabConfig>;
9
9
  export default mailCrabProvider;
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/mailerSendProvider-CeeIXFnW.js";export{a as mailerSendProvider};
1
+ import{default as a}from"../../packem_shared/mailerSendProvider-FiR_X5Be.js";export{a as mailerSendProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MailerSendConfig, MailerSendEmailOptions } from "./types.d.ts";
2
+ import type { MailerSendConfig } from "./types.d.ts";
3
3
  /**
4
4
  * MailerSend Provider for sending emails through MailerSend API
5
5
  */
6
- declare const mailerSendProvider: ProviderFactory<MailerSendConfig, unknown, MailerSendEmailOptions>;
6
+ declare const mailerSendProvider: ProviderFactory<MailerSendConfig>;
7
7
  export default mailerSendProvider;
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/mailgunProvider-mmjKzouh.js";export{e as mailgunProvider};
1
+ import{default as e}from"../../packem_shared/mailgunProvider-B18_T6SA.js";export{e as mailgunProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MailgunConfig, MailgunEmailOptions } from "./types.d.ts";
2
+ import type { MailgunConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Mailgun Provider for sending emails through Mailgun API
5
5
  */
6
- declare const mailgunProvider: ProviderFactory<MailgunConfig, unknown, MailgunEmailOptions>;
6
+ declare const mailgunProvider: ProviderFactory<MailgunConfig>;
7
7
  export default mailgunProvider;
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/mailjetProvider-DwN6i0VA.js";export{a as mailjetProvider};
1
+ import{default as a}from"../../packem_shared/mailjetProvider-C737SQmw.js";export{a as mailjetProvider};
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/mailomatProvider-DMQmjKHT.js";export{r as mailomatProvider};
1
+ import{default as r}from"../../packem_shared/mailomatProvider-D5HPTJrq.js";export{r as mailomatProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MailomatConfig, MailomatEmailOptions } from "./types.d.ts";
2
+ import type { MailomatConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Mailomat Provider for sending emails through Mailomat API.
5
5
  */
6
- declare const mailomatProvider: ProviderFactory<MailomatConfig, unknown, MailomatEmailOptions>;
6
+ declare const mailomatProvider: ProviderFactory<MailomatConfig>;
7
7
  export default mailomatProvider;
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/mailPaceProvider-BFn8L0vA.js";export{r as mailPaceProvider};
1
+ import{default as r}from"../../packem_shared/mailPaceProvider-DWptkW9x.js";export{r as mailPaceProvider};
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/mailtrapProvider-BN3UBEQw.js";export{e as mailtrapProvider};
1
+ import{default as e}from"../../packem_shared/mailtrapProvider-4fyjVZrA.js";export{e as mailtrapProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MailtrapConfig, MailtrapEmailOptions } from "./types.d.ts";
2
+ import type { MailtrapConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Mailtrap Provider for sending emails through Mailtrap API
5
5
  */
6
- declare const mailtrapProvider: ProviderFactory<MailtrapConfig, unknown, MailtrapEmailOptions>;
6
+ declare const mailtrapProvider: ProviderFactory<MailtrapConfig>;
7
7
  export default mailtrapProvider;
@@ -1 +1 @@
1
- import{default as d}from"../../packem_shared/mandrillProvider-370y7CLu.js";export{d as mandrillProvider};
1
+ import{default as d}from"../../packem_shared/mandrillProvider-DPXMdbPI.js";export{d as mandrillProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MandrillConfig, MandrillEmailOptions } from "./types.d.ts";
2
+ import type { MandrillConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Mandrill Provider for sending emails through Mandrill API
5
5
  */
6
- declare const mandrillProvider: ProviderFactory<MandrillConfig, unknown, MandrillEmailOptions>;
6
+ declare const mandrillProvider: ProviderFactory<MandrillConfig>;
7
7
  export default mandrillProvider;
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/mockProvider-DN5ZwutD.js";export{e as mockProvider};
1
+ import{default as e}from"../../packem_shared/mockProvider-C0P1lKOy.js";export{e as mockProvider};
@@ -1,8 +1,8 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { MockConfig, MockEmailEntry, MockEmailOptions } from "./types.d.ts";
2
+ import type { MockConfig, MockEmailEntry } from "./types.d.ts";
3
3
  /**
4
4
  * Mock Provider for testing emails without actually sending them
5
5
  * Stores emails in memory for later retrieval and inspection
6
6
  */
7
- declare const mockProvider: ProviderFactory<MockConfig, MockEmailEntry[], MockEmailOptions>;
7
+ declare const mockProvider: ProviderFactory<MockConfig, MockEmailEntry[]>;
8
8
  export default mockProvider;
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/nodemailerProvider-_w8QXMU-.js";export{o as nodemailerProvider};
1
+ import{default as o}from"../../packem_shared/nodemailerProvider-DFcvoVFv.js";export{o as nodemailerProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { NodemailerConfig, NodemailerEmailOptions } from "./types.d.ts";
2
+ import type { NodemailerConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Nodemailer Provider for sending emails via nodemailer
5
5
  */
6
- declare const nodemailerProvider: ProviderFactory<NodemailerConfig, unknown, NodemailerEmailOptions>;
6
+ declare const nodemailerProvider: ProviderFactory<NodemailerConfig>;
7
7
  export default nodemailerProvider;
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/opentelemetryProvider-C_ZXOLSd.js";export{o as opentelemetryProvider};
1
+ import{default as o}from"../../packem_shared/opentelemetryProvider-Dwv88G3O.js";export{o as opentelemetryProvider};
@@ -1,8 +1,7 @@
1
- import type { EmailOptions } from "../../types.d.ts";
2
1
  import type { Provider, ProviderFactory } from "../provider.d.ts";
3
2
  import type { OpenTelemetryConfig } from "./types.d.ts";
4
3
  /**
5
4
  * OpenTelemetry Provider for instrumenting email sending with OpenTelemetry traces and metrics
6
5
  */
7
- declare const opentelemetryProvider: ProviderFactory<OpenTelemetryConfig, Provider<unknown, unknown, EmailOptions>, EmailOptions>;
6
+ declare const opentelemetryProvider: ProviderFactory<OpenTelemetryConfig, Provider>;
8
7
  export default opentelemetryProvider;
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/plunkProvider-D48sw9M1.js";export{o as plunkProvider};
1
+ import{default as o}from"../../packem_shared/plunkProvider-CmR0bUei.js";export{o as plunkProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { PlunkConfig, PlunkEmailOptions } from "./types.d.ts";
2
+ import type { PlunkConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Plunk Provider for sending emails through Plunk API.
5
5
  */
6
- declare const plunkProvider: ProviderFactory<PlunkConfig, unknown, PlunkEmailOptions>;
6
+ declare const plunkProvider: ProviderFactory<PlunkConfig>;
7
7
  export default plunkProvider;
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/postalProvider-Bavx2FcH.js";export{a as postalProvider};
1
+ import{default as a}from"../../packem_shared/postalProvider-vf5vjbef.js";export{a as postalProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { PostalConfig, PostalEmailOptions } from "./types.d.ts";
2
+ import type { PostalConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Postal Provider for sending emails through Postal API.
5
5
  */
6
- declare const postalProvider: ProviderFactory<PostalConfig, unknown, PostalEmailOptions>;
6
+ declare const postalProvider: ProviderFactory<PostalConfig>;
7
7
  export default postalProvider;
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/postmarkProvider-DFC0uvjO.js";export{a as postmarkProvider};
1
+ import{default as a}from"../../packem_shared/postmarkProvider-uCLyHARt.js";export{a as postmarkProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { PostmarkConfig, PostmarkEmailOptions } from "./types.d.ts";
2
+ import type { PostmarkConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Postmark Provider for sending emails through Postmark API.
5
5
  */
6
- declare const postmarkProvider: ProviderFactory<PostmarkConfig, unknown, PostmarkEmailOptions>;
6
+ declare const postmarkProvider: ProviderFactory<PostmarkConfig>;
7
7
  export default postmarkProvider;
@@ -5,7 +5,7 @@ import type { EmailOptions, EmailResult, FeatureFlags, MaybePromise, Result } fr
5
5
  export interface Provider<OptionsT = unknown, InstanceT = unknown, EmailOptionsT extends EmailOptions = EmailOptions> {
6
6
  endpoint?: string;
7
7
  features?: FeatureFlags;
8
- getEmail?: (id: string) => MaybePromise<Result<unknown>>;
8
+ getEmail?: (id: string) => MaybePromise<Result>;
9
9
  getInstance?: () => InstanceT;
10
10
  initialize: (options?: Record<string, unknown>) => MaybePromise<void>;
11
11
  isAvailable: () => MaybePromise<boolean>;
@@ -1 +1 @@
1
- import{default as d}from"../../packem_shared/resendProvider-CfqU7UdE.js";export{d as resendProvider};
1
+ import{default as d}from"../../packem_shared/resendProvider-9X-wmOFy.js";export{d as resendProvider};
@@ -1 +1 @@
1
- import{default as d}from"../../packem_shared/roundRobinProvider-1WQnuKR8.js";export{d as roundRobinProvider};
1
+ import{default as d}from"../../packem_shared/roundRobinProvider-FvZQKl6n.js";export{d as roundRobinProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { RoundRobinConfig, RoundRobinEmailOptions } from "./types.d.ts";
2
+ import type { RoundRobinConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Round Robin Provider for distributing email sending across multiple providers
5
5
  */
6
- declare const roundRobinProvider: ProviderFactory<RoundRobinConfig, unknown, RoundRobinEmailOptions>;
6
+ declare const roundRobinProvider: ProviderFactory<RoundRobinConfig>;
7
7
  export default roundRobinProvider;
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/scalewayProvider-be1HPimL.js";export{r as scalewayProvider};
1
+ import{default as r}from"../../packem_shared/scalewayProvider-Bdh-7QY6.js";export{r as scalewayProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { ScalewayConfig, ScalewayEmailOptions } from "./types.d.ts";
2
+ import type { ScalewayConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Scaleway Provider for sending emails through Scaleway API
5
5
  */
6
- declare const scalewayProvider: ProviderFactory<ScalewayConfig, unknown, ScalewayEmailOptions>;
6
+ declare const scalewayProvider: ProviderFactory<ScalewayConfig>;
7
7
  export default scalewayProvider;
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/sendGridProvider-BVI1sq3n.js";export{e as sendGridProvider};
1
+ import{default as e}from"../../packem_shared/sendGridProvider-UrH61D8C.js";export{e as sendGridProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { SendGridConfig, SendGridEmailOptions } from "./types.d.ts";
2
+ import type { SendGridConfig } from "./types.d.ts";
3
3
  /**
4
4
  * SendGrid Provider for sending emails through SendGrid API
5
5
  */
6
- declare const sendGridProvider: ProviderFactory<SendGridConfig, unknown, SendGridEmailOptions>;
6
+ declare const sendGridProvider: ProviderFactory<SendGridConfig>;
7
7
  export default sendGridProvider;
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/smtpProvider-BV-ufR53.js";export{o as smtpProvider};
1
+ import{default as o}from"../../packem_shared/smtpProvider-Unjao_fn.js";export{o as smtpProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { SmtpConfig, SmtpEmailOptions } from "./types.d.ts";
2
+ import type { SmtpConfig } from "./types.d.ts";
3
3
  /**
4
4
  * SMTP provider for sending emails via SMTP protocol
5
5
  */
6
- declare const smtpProvider: ProviderFactory<SmtpConfig, unknown, SmtpEmailOptions>;
6
+ declare const smtpProvider: ProviderFactory<SmtpConfig>;
7
7
  export default smtpProvider;
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/sweegoProvider-7419CSAq.js";export{r as sweegoProvider};
1
+ import{default as r}from"../../packem_shared/sweegoProvider-B_yTn1gT.js";export{r as sweegoProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { SweegoConfig, SweegoEmailOptions } from "./types.d.ts";
2
+ import type { SweegoConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Sweego Provider for sending emails through Sweego API
5
5
  */
6
- declare const sweegoProvider: ProviderFactory<SweegoConfig, unknown, SweegoEmailOptions>;
6
+ declare const sweegoProvider: ProviderFactory<SweegoConfig>;
7
7
  export default sweegoProvider;
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/zeptomailProvider-DTUWVINJ.js";export{r as zeptomailProvider};
1
+ import{default as r}from"../../packem_shared/zeptomailProvider-skowg799.js";export{r as zeptomailProvider};
@@ -1,7 +1,7 @@
1
1
  import type { ProviderFactory } from "../provider.d.ts";
2
- import type { ZeptomailConfig, ZeptomailEmailOptions } from "./types.d.ts";
2
+ import type { ZeptomailConfig } from "./types.d.ts";
3
3
  /**
4
4
  * Zeptomail Provider for sending emails through Zeptomail API
5
5
  */
6
- declare const zeptomailProvider: ProviderFactory<ZeptomailConfig, unknown, ZeptomailEmailOptions>;
6
+ declare const zeptomailProvider: ProviderFactory<ZeptomailConfig>;
7
7
  export default zeptomailProvider;
@@ -1 +1 @@
1
- var i=Object.defineProperty;var d=(a,r)=>i(a,"name",{value:r,configurable:!0});import t from"handlebars";import s from"../packem_shared/EmailError-zm2ffVav.js";var o=Object.defineProperty,l=d((a,r)=>o(a,"name",{value:r,configurable:!0}),"s");const p=l((a,r,e)=>{try{if(typeof a!="string")throw new TypeError("Handlebars template must be a string");return t.compile(a,e)(r||{})}catch(n){throw n instanceof Error&&n.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:n}):new s("handlebars",`Failed to render Handlebars template: ${n.message}`,{cause:n})}},"renderHandlebars"),u=l((a,r)=>{try{t.registerHelper(a,r)}catch(e){throw e instanceof Error&&e.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:e}):e}},"registerHandlebarsHelper"),h=l((a,r)=>{try{t.registerPartial(a,r)}catch(e){throw e instanceof Error&&e.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:e}):e}},"registerHandlebarsPartial");export{u as registerHandlebarsHelper,h as registerHandlebarsPartial,p as renderHandlebars};
1
+ var i=Object.defineProperty;var d=(a,r)=>i(a,"name",{value:r,configurable:!0});import t from"handlebars";import s from"../packem_shared/EmailError-zm2ffVav.js";var o=Object.defineProperty,l=d((a,r)=>o(a,"name",{value:r,configurable:!0}),"s");const p=l((a,r,e)=>{try{if(typeof a!="string")throw new TypeError("Handlebars template must be a string");return t.compile(a,e)(r??{})}catch(n){throw n instanceof Error&&n.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:n}):new s("handlebars",`Failed to render Handlebars template: ${n.message}`,{cause:n})}},"renderHandlebars"),u=l((a,r)=>{try{t.registerHelper(a,r)}catch(e){throw e instanceof Error&&e.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:e}):e}},"registerHandlebarsHelper"),h=l((a,r)=>{try{t.registerPartial(a,r)}catch(e){throw e instanceof Error&&e.message.includes("Cannot find module")?new s("handlebars","Handlebars is not installed. Please install it: pnpm add handlebars",{cause:e}):e}},"registerHandlebarsPartial");export{u as registerHandlebarsHelper,h as registerHandlebarsPartial,p as renderHandlebars};
@@ -15,4 +15,4 @@ export interface RequestOptions {
15
15
  * @param data Optional request body data (string, Buffer, or Uint8Array).
16
16
  * @returns A result object containing the response data or error.
17
17
  */
18
- export declare const makeRequest: (url: string | URL, options?: RequestOptions, data?: string | Buffer | Uint8Array) => Promise<Result<unknown>>;
18
+ export declare const makeRequest: (url: string | URL, options?: RequestOptions, data?: string | Buffer | Uint8Array) => Promise<Result>;
@@ -1 +1 @@
1
- var m=Object.defineProperty;var o=(t,e)=>m(t,"name",{value:e,configurable:!0});import d from"./validation/validate-email.js";var h=Object.defineProperty,c=o((t,e)=>h(t,"name",{value:e,configurable:!0}),"l");const g=c(t=>{const e=t.replace(/^"(.+)"$/,"$1");return!(!e||e.length===0||e.includes("..")||e.startsWith(".")||e.endsWith("."))},"isValidLocalPart"),a=c(t=>{const e=t.indexOf("@[");if(e>0&&t.endsWith("]")){const n=t.length-1,l=t.slice(e+2,n);if(l.includes("@["))return!1;const i=t.slice(0,e),s=l;return!s||s.trim().length===0||s.includes("]")?!1:i?g(i):!1}if(t.includes("@[")&&!t.includes("]"))return!1;const r=t.match(/^"((?:[^"\\]|\\.)+)"@(.+)$/);if(r&&r[2]){const n=r[2];return n.startsWith("[")?!1:d(`test@${n}`)}return d(t)},"isValidEmailFormat"),$=c(t=>{if(!t||typeof t!="string")return;const e=t.trim();if(!e)return;const r=e.lastIndexOf("<"),n=e.lastIndexOf(">");if(r!==-1&&n>r){const i=e.slice(0,r).trim(),s=e.slice(r+1,n).trim();if(s&&a(s)){if(i){const f=i.replace(/^"(.+)"$/,"$1");return{email:s,name:f}}return{email:s}}}const l=e.match(/^<([^>]+)>$/);if(l&&l[1]){const i=l[1].trim();return a(i)?{email:i}:void 0}if(!(e.includes("]")&&!e.includes("@["))&&!(e.includes('"')&&!e.startsWith('"')&&e.indexOf('"')<e.indexOf("@"))){if(e.startsWith('"')){let i=1,s=!1;for(;i<e.length;)if(e[i]==="\\"&&i+1<e.length)i+=2;else if(e[i]==='"'){if(i+1<e.length&&e[i+1]==="@"){s=!0;break}i+=1}else i+=1;if(!s&&e.includes("@")){const f=e.indexOf("@"),u=e.slice(1).indexOf('"');if(u===-1||f<u+1)return}}if(a(e))return{email:e}}},"parseAddress");export{$ as default};
1
+ var m=Object.defineProperty;var o=(t,e)=>m(t,"name",{value:e,configurable:!0});import d from"./validation/validate-email.js";var h=Object.defineProperty,c=o((t,e)=>h(t,"name",{value:e,configurable:!0}),"l");const g=c(t=>{const e=t.replace(/^"(.+)"$/,"$1");return!(!e||e.length===0||e.includes("..")||e.startsWith(".")||e.endsWith("."))},"isValidLocalPart"),a=c(t=>{const e=t.indexOf("@[");if(e>0&&t.endsWith("]")){const n=t.length-1,l=t.slice(e+2,n);if(l.includes("@["))return!1;const i=t.slice(0,e),s=l;return!s||s.trim().length===0||s.includes("]")?!1:i?g(i):!1}if(t.includes("@[")&&!t.includes("]"))return!1;const r=t.match(/^"((?:[^"\\]|\\.)+)"@(.+)$/);if(r?.[2]){const n=r[2];return n.startsWith("[")?!1:d(`test@${n}`)}return d(t)},"isValidEmailFormat"),$=c(t=>{if(!t||typeof t!="string")return;const e=t.trim();if(!e)return;const r=e.lastIndexOf("<"),n=e.lastIndexOf(">");if(r!==-1&&n>r){const i=e.slice(0,r).trim(),s=e.slice(r+1,n).trim();if(s&&a(s)){if(i){const f=i.replace(/^"(.+)"$/,"$1");return{email:s,name:f}}return{email:s}}}const l=e.match(/^<([^>]+)>$/);if(l?.[1]){const i=l[1].trim();return a(i)?{email:i}:void 0}if(!(e.includes("]")&&!e.includes("@["))&&!(e.includes('"')&&!e.startsWith('"')&&e.indexOf('"')<e.indexOf("@"))){if(e.startsWith('"')){let i=1,s=!1;for(;i<e.length;)if(e[i]==="\\"&&i+1<e.length)i+=2;else if(e[i]==='"'){if(i+1<e.length&&e[i+1]==="@"){s=!0;break}i+=1}else i+=1;if(!s&&e.includes("@")){const f=e.indexOf("@"),u=e.slice(1).indexOf('"');if(u===-1||f<u+1)return}}if(a(e))return{email:e}}},"parseAddress");export{$ as default};
@@ -1 +1 @@
1
- var V=Object.defineProperty;var f=(e,r)=>V(e,"name",{value:r,configurable:!0});import{checkMxRecords as y}from"./check-mx-records.js";import{isRoleAccount as k}from"./role-accounts.js";import w from"./validate-email.js";import{verifySmtp as E}from"./verify-smtp.js";import{isDisposableEmail as A}from"@visulima/disposable-email-domains";var D=Object.defineProperty,M=f((e,r)=>D(e,"name",{value:r,configurable:!0}),"f");const N=M(async(e,r={})=>{const{checkDisposable:p=!0,checkMx:d=!0,checkRoleAccount:u=!0,checkSmtp:h=!1,customDisposableDomains:v,customRolePrefixes:b,...g}=r,c=w(e),a=[],i=[];if(!c)return a.push("Invalid email format"),{errors:a,formatValid:!1,valid:!1,warnings:i};let s,l,m,n;if(p)try{s=A(e,v),s&&i.push("Email is from a disposable email service")}catch{}if(u&&(l=k(e,b),l&&i.push("Email appears to be a role account (non-personal)")),d){const o=e.split("@")[1];if(!o)return a.push("Invalid email format: missing domain"),{disposable:s,errors:a,formatValid:!1,mxValid:!1,roleAccount:l,valid:!1,warnings:i};const t=await y(o,{cache:r.cache});m=t.valid,t.valid||a.push(t.error||"No valid MX records found")}if(h){const o=await E(e,{...g,cache:r.cache,smtpCache:r.smtpCache});n=o.valid,!o.valid&&o.error&&a.push(`SMTP verification failed: ${o.error}`)}const x=c&&a.length===0;return{disposable:s,errors:a,formatValid:c,mxValid:m,roleAccount:l,smtpValid:n,valid:x,warnings:i}},"verifyEmail");export{N as verifyEmail};
1
+ var V=Object.defineProperty;var f=(e,r)=>V(e,"name",{value:r,configurable:!0});import{checkMxRecords as y}from"./check-mx-records.js";import{isRoleAccount as k}from"./role-accounts.js";import w from"./validate-email.js";import{verifySmtp as E}from"./verify-smtp.js";import{isDisposableEmail as A}from"@visulima/disposable-email-domains";var D=Object.defineProperty,M=f((e,r)=>D(e,"name",{value:r,configurable:!0}),"f");const N=M(async(e,r={})=>{const{checkDisposable:p=!0,checkMx:d=!0,checkRoleAccount:u=!0,checkSmtp:h=!1,customDisposableDomains:v,customRolePrefixes:b,...g}=r,c=w(e),a=[],i=[];if(!c)return a.push("Invalid email format"),{errors:a,formatValid:!1,valid:!1,warnings:i};let s,l,m,n;if(p)try{s=A(e,v),s&&i.push("Email is from a disposable email service")}catch{}if(u&&(l=k(e,b),l&&i.push("Email appears to be a role account (non-personal)")),d){const o=e.split("@")[1];if(!o)return a.push("Invalid email format: missing domain"),{disposable:s,errors:a,formatValid:!1,mxValid:!1,roleAccount:l,valid:!1,warnings:i};const t=await y(o,{cache:r.cache});m=t.valid,t.valid||a.push(t.error??"No valid MX records found")}if(h){const o=await E(e,{...g,cache:r.cache,smtpCache:r.smtpCache});n=o.valid,!o.valid&&o.error&&a.push(`SMTP verification failed: ${o.error}`)}const x=c&&a.length===0;return{disposable:s,errors:a,formatValid:c,mxValid:m,roleAccount:l,smtpValid:n,valid:x,warnings:i}},"verifyEmail");export{N as verifyEmail};
@@ -1,4 +1,4 @@
1
- var j=Object.defineProperty;var R=(t,e)=>j(t,"name",{value:e,configurable:!0});import{createRequire as S}from"node:module";import{checkMxRecords as C}from"./check-mx-records.js";const $=S(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,O=R(t=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[e,d]=u.versions.node.split(".").map(Number);if(e>22||e===22&&d>=3||e===20&&d>=16)return u.getBuiltinModule(t)}return $(t)},"__cjs_getBuiltinModule"),{Socket:P}=O("node:net");var E=Object.defineProperty,p=R((t,e)=>E(t,"name",{value:e,configurable:!0}),"n");const A=p(async(t,e={})=>{const{fromEmail:d="test@example.com",port:x=25,timeout:M=5e3,ttl:_=36e5}=e;if(!t||typeof t!="string")return{error:"Invalid email address",valid:!1};const l=t.toLowerCase().trim(),h=l.indexOf("@");if(h===-1||h===l.length-1)return{error:"Invalid email format",valid:!1};const{smtpCache:c}=e,g=`smtp:${l}:${d}:${x}`;if(c){const n=await c.get(g);if(n!==void 0)return n}const w=l.slice(h+1),W=e.cache,r=await C(w,{cache:W});if(!r.valid||!r.records||r.records.length===0){const n={error:r.error||"No MX records found",mxRecords:r.records,valid:!1};return c&&await c.set(g,n,_),n}const y=r.records[0];return new Promise(n=>{const o=new P;let v="",s="connected";const m=p(()=>{o.removeAllListeners(),o.destroy()},"cleanup"),f=p(a=>{c&&c.set(g,a,_).catch(()=>{}),n(a)},"cacheAndResolve"),T=p(a=>{m(),f({error:a.message,mxRecords:r.records,valid:!1})},"onError"),b=p(()=>{m(),f({error:"SMTP connection timeout",mxRecords:r.records,valid:!1})},"onTimeout");o.setTimeout(M),o.on("error",T),o.on("timeout",b),o.on("data",a=>{v+=a.toString();const i=v.slice(-3);s==="connected"&&(i.startsWith("220")||i.startsWith("250"))?(s="helo",o.write(`HELO ${w}\r
1
+ var j=Object.defineProperty;var R=(t,e)=>j(t,"name",{value:e,configurable:!0});import{createRequire as S}from"node:module";import{checkMxRecords as C}from"./check-mx-records.js";const $=S(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,O=R(t=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[e,d]=u.versions.node.split(".").map(Number);if(e>22||e===22&&d>=3||e===20&&d>=16)return u.getBuiltinModule(t)}return $(t)},"__cjs_getBuiltinModule"),{Socket:P}=O("node:net");var E=Object.defineProperty,p=R((t,e)=>E(t,"name",{value:e,configurable:!0}),"n");const A=p(async(t,e={})=>{const{fromEmail:d="test@example.com",port:x=25,timeout:M=5e3,ttl:_=36e5}=e;if(!t||typeof t!="string")return{error:"Invalid email address",valid:!1};const l=t.toLowerCase().trim(),h=l.indexOf("@");if(h===-1||h===l.length-1)return{error:"Invalid email format",valid:!1};const{smtpCache:c}=e,g=`smtp:${l}:${d}:${x}`;if(c){const n=await c.get(g);if(n!==void 0)return n}const w=l.slice(h+1),W=e.cache,r=await C(w,{cache:W});if(!r.valid||!r.records||r.records.length===0){const n={error:r.error??"No MX records found",mxRecords:r.records,valid:!1};return c&&await c.set(g,n,_),n}const y=r.records[0];return new Promise(n=>{const o=new P;let v="",s="connected";const m=p(()=>{o.removeAllListeners(),o.destroy()},"cleanup"),f=p(a=>{c&&c.set(g,a,_).catch(()=>{}),n(a)},"cacheAndResolve"),T=p(a=>{m(),f({error:a.message,mxRecords:r.records,valid:!1})},"onError"),b=p(()=>{m(),f({error:"SMTP connection timeout",mxRecords:r.records,valid:!1})},"onTimeout");o.setTimeout(M),o.on("error",T),o.on("timeout",b),o.on("data",a=>{v+=a.toString();const i=v.slice(-3);s==="connected"&&(i.startsWith("220")||i.startsWith("250"))?(s="helo",o.write(`HELO ${w}\r
2
2
  `)):s==="helo"&&i.startsWith("250")?(s="mail-from",o.write(`MAIL FROM:<${d}>\r
3
3
  `)):s==="mail-from"&&i.startsWith("250")?(s="rcpt-to",o.write(`RCPT TO:<${l}>\r
4
4
  `)):s==="rcpt-to"&&i.startsWith("250")?(m(),f({mxRecords:r.records,smtpResponse:v,valid:!0})):s==="rcpt-to"&&(i.startsWith("550")||i.startsWith("551")||i.startsWith("553"))&&(m(),f({error:"Email address does not exist",mxRecords:r.records,smtpResponse:v,valid:!1}))}),y?o.connect(x,y.exchange):(m(),f({error:"No MX record available",mxRecords:r.records,valid:!1}))})},"verifySmtp");export{A as verifySmtp};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/email",
3
- "version": "1.0.0-alpha.12",
3
+ "version": "1.0.0-alpha.13",
4
4
  "description": "A comprehensive email library with multi-provider support, crypto utilities, and template engines",
5
5
  "keywords": [
6
6
  "visulima",
@@ -263,18 +263,18 @@
263
263
  "CHANGELOG.md"
264
264
  ],
265
265
  "dependencies": {
266
- "@visulima/disposable-email-domains": "1.0.0-alpha.11",
266
+ "@visulima/disposable-email-domains": "1.0.0-alpha.12",
267
267
  "html-to-text": "^9.0.5",
268
268
  "ical-generator": "10.1.0",
269
- "lru-cache": "11.2.7",
269
+ "lru-cache": "11.3.3",
270
270
  "mime": "^4.1.0"
271
271
  },
272
272
  "peerDependencies": {
273
273
  "@opentelemetry/api": "^1.0.0 || ^2.0.0",
274
- "@react-email/render": "^2.0.4",
274
+ "@react-email/render": "^2.0.5",
275
275
  "@vue-email/render": "0.0.9",
276
276
  "asn1js": "3.0.7",
277
- "handlebars": "^4.7.8",
277
+ "handlebars": "4.7.9",
278
278
  "mjml": "4.18.0",
279
279
  "nodemailer": ">=7",
280
280
  "pkijs": "3.4.0"
@@ -305,7 +305,6 @@
305
305
  "optional": true
306
306
  }
307
307
  },
308
- "optionalDependencies": {},
309
308
  "engines": {
310
309
  "node": ">=22.13 <=25.x"
311
310
  },
@@ -1 +0,0 @@
1
- var b=Object.defineProperty;var l=(o,e)=>b(o,"name",{value:e,configurable:!0});import{MailMessage as f}from"./MailMessage-7FA892bF.js";import{z as p}from"./build-mime-message-IYaUqqPJ.js";import{c as m}from"./create-logger-BiWdqFNg.js";import{i as n}from"./headers-to-record-Qo124ImV.js";var y=Object.defineProperty,C=l((o,e)=>y(o,"name",{value:e,configurable:!0}),"s");class h extends f{static{l(this,"DraftMailMessage")}static{C(this,"DraftMailMessage")}constructor(){super(),this.header("X-Unsent","1")}}var M=Object.defineProperty,c=l((o,e)=>M(o,"name",{value:e,configurable:!0}),"n");const v=c((o,e,s)=>{e.success&&e.data?o&&o.info("Email sent successfully",{messageId:e.data.messageId,provider:e.data.provider}):o&&o.error("Email send failed",{error:e.error,provider:s})},"logSendResult");class d{static{l(this,"Mail")}static{c(this,"Mail")}static extractErrorMessages(e){return e instanceof Error?[e.message]:[String(e||"Unknown error")]}provider;logger;loggerInstance;globalConfig;constructor(e){this.provider=e}setLogger(e){return this.loggerInstance=e,this.logger=m("Mail",e),this}setFrom(e){return this.globalConfig||(this.globalConfig={}),this.globalConfig.from=e,this.logger&&this.logger.debug("Default from address updated",{from:e.email}),this}setReplyTo(e){return this.globalConfig||(this.globalConfig={}),this.globalConfig.replyTo=e,this.logger&&this.logger.debug("Default reply-to address updated",{replyTo:e.email}),this}setHeaders(e){if(this.globalConfig||(this.globalConfig={}),this.globalConfig.headers=e,this.logger){const s=n(e);this.logger.debug("Default headers updated",{count:Object.keys(s).length,headers:Object.keys(s)})}return this}async draft(e){let s=e instanceof f||e instanceof h?await this.buildDraftFromMessage(e):await this.buildDraftFromOptions(e);s=this.applyGlobalConfig(s);const t=s.headers?n(s.headers):{};s.headers={...t,"X-Unsent":"1"};const r=await p(s);return this.logger&&this.logger.debug("Draft created successfully in EML format",{from:s.from.email,size:r.length,subject:s.subject,to:Array.isArray(s.to)?s.to.length:1}),r}async send(e){if(e instanceof h)throw new TypeError("Cannot send draft messages. Convert to MailMessage first or remove X-Unsent header.");let s;if(e instanceof f)this.logger&&this.logger.debug("Sending MailMessage instance"),this.loggerInstance&&e.setLogger(this.loggerInstance),s=await e.build();else{const r=e;this.logger&&this.logger.debug("Sending email with options",{subject:r.subject,to:Array.isArray(r.to)?r.to.length:1}),s=r}s=this.applyGlobalConfig(s);const t=await this.provider.sendEmail(s);return v(this.logger,t,this.provider.name||"unknown"),t}async*sendMany(e,s){const t=this.provider.name;let r=0,g=0,i=0;this.logger&&this.logger.debug("Starting batch email send",{provider:t});for await(const u of e){if(u instanceof h)throw new TypeError("Cannot send draft messages. Convert to MailMessage first or remove X-Unsent header.");if(s?.signal?.aborted){this.logger&&this.logger.warn("Batch send operation was aborted",{failed:i,processed:r,successful:g}),yield{errorMessages:["Send operation was aborted"],provider:t,successful:!1};return}r+=1;try{const a=await this.send(u);a.success&&a.data?(g+=1,this.logger&&this.logger.debug(`Email ${r} sent successfully`,{messageId:a.data.messageId}),yield{messageId:a.data.messageId,provider:a.data.provider||t,response:a.data.response,successful:!0,timestamp:a.data.timestamp}):(i+=1,this.logger&&this.logger.error(`Email ${r} send failed`,{error:a.error}),yield{errorMessages:d.extractErrorMessages(a.error),provider:t,successful:!1})}catch(a){i+=1,this.logger&&this.logger.error(`Email ${r} send failed with exception`,a),yield{errorMessages:d.extractErrorMessages(a),provider:t,successful:!1}}}this.logger&&this.logger.debug("Batch email send completed",{failureCount:i,processedCount:r,provider:t,successCount:g})}async buildDraftFromMessage(e){return this.logger&&this.logger.debug("Creating draft from MailMessage instance"),this.loggerInstance&&e.setLogger(this.loggerInstance),this.applyGlobalConfigToMessage(e),await e.build()}async buildDraftFromOptions(e){return this.logger&&this.logger.debug("Creating draft from email options",{subject:e.subject,to:Array.isArray(e.to)?e.to.length:1}),e}applyGlobalConfigToMessage(e){const s=this.globalConfig?.from;s&&!e.getFrom()&&e.from(s);const t=this.globalConfig?.replyTo;if(t&&!e.getReplyTo()&&e.replyTo(t),this.globalConfig?.headers){const r=n(this.globalConfig.headers);Object.entries(r).forEach(([g,i])=>{e.header(g,i)})}}applyGlobalConfig(e){if(!this.globalConfig)return e;const s={...e};if(!s.from&&this.globalConfig.from&&(s.from=this.globalConfig.from,this.logger&&this.logger.debug("Applied global from address",{from:this.globalConfig.from.email})),!s.replyTo&&this.globalConfig.replyTo&&(s.replyTo=this.globalConfig.replyTo,this.logger&&this.logger.debug("Applied global reply-to address",{replyTo:this.globalConfig.replyTo.email})),this.globalConfig.headers){const t=n(this.globalConfig.headers),r=s.headers?n(s.headers):{};s.headers={...t,...r},this.logger&&this.logger.debug("Merged global headers",{globalCount:Object.keys(t).length,messageCount:Object.keys(r).length})}return s}}const D=c(o=>new d(o),"createMail");export{d as Mail,D as createMail};
@@ -1 +0,0 @@
1
- var A=Object.defineProperty;var d=(n,e)=>A(n,"name",{value:e,configurable:!0});import{createRequire as b}from"node:module";import C from"ical-generator";import{readFileAsBuffer as u,detectMimeType as g,generateContentId as m}from"./detectMimeType-CPYmHk7Y.js";import p from"../template-engines/html-to-text.js";import{c as E}from"./create-logger-BiWdqFNg.js";import{i as l}from"./headers-to-record-Qo124ImV.js";const T=b(import.meta.url),a=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,f=d(n=>{if(typeof a<"u"&&a.versions&&a.versions.node){const[e,t]=a.versions.node.split(".").map(Number);if(e>22||e===22&&t>=3||e===20&&t>=16)return a.getBuiltinModule(n)}return T(n)},"__cjs_getBuiltinModule"),{basename:c}=f("node:path"),{fileURLToPath:x}=f("node:url");var w=Object.defineProperty,y=d((n,e)=>w(n,"name",{value:e,configurable:!0}),"l");const o=y(n=>Array.isArray(n)?n.map(e=>typeof e=="string"?{email:e}:e):typeof n=="string"?[{email:n}]:[n],"normalizeAddresses");class M{static{d(this,"MailMessage")}static{y(this,"MailMessage")}fromAddress;toAddresses=[];ccAddresses=[];bccAddresses=[];subjectText="";textContent;textCharset="utf8";autoTextEnabled=!0;htmlContent;htmlCharset="utf8";dateValue;returnPathAddress;senderAddress;headers={};attachments=[];replyToAddress;priorityValue;tagsValue=[];signer;encrypter;logger;icalEventData;from(e){return this.fromAddress=typeof e=="string"?{email:e}:e,this}to(e){return this.toAddresses.length=0,this.toAddresses.push(...o(e)),this}cc(e){return this.ccAddresses.length=0,this.ccAddresses.push(...o(e)),this}bcc(e){return this.bccAddresses.length=0,this.bccAddresses.push(...o(e)),this}subject(e){return this.subjectText=e,this}text(e,t="utf8"){return this.textContent=e,this.textCharset=t,this}html(e,t="utf8"){return this.htmlContent=e,this.htmlCharset=t,this}header(e,t){return this.headers[e]=t,this}setHeaders(e){const t=l(e);return Object.assign(this.headers,t),this}async attachFromPath(e,t){try{const s=await u(e),i=t?.filename||c(e)||"attachment",r=t?.contentType||g(i);this.attachments.push({cid:t?.cid,content:s,contentDisposition:t?.contentDisposition||"attachment",contentType:r,encoding:t?.encoding,filename:i,headers:t?.headers}),this.logger&&this.logger.debug(`Attachment added from path: ${e}`,{contentType:r,filename:i})}catch(s){throw this.logger&&this.logger.error(`Failed to attach file from path: ${e}`,s),s}return this}attachData(e,t){const s=t.contentType||g(t.filename);return this.attachments.push({cid:t.cid,content:e,contentDisposition:t.contentDisposition||"attachment",contentType:s,encoding:t.encoding,filename:t.filename,headers:t.headers}),this.logger&&this.logger.debug("Attachment added from data",{contentType:s,filename:t.filename}),this}async embedFromPath(e,t){try{const s=await u(e),i=t?.filename||c(e)||"inline",r=t?.contentType||g(i),h=m(i);return this.attachments.push({cid:h,content:s,contentDisposition:"inline",contentType:r,filename:i}),this.logger&&this.logger.debug(`Inline attachment embedded from path: ${e}`,{cid:h,contentType:r,filename:i}),h}catch(s){throw this.logger&&this.logger.error(`Failed to embed file from path: ${e}`,s),s}}embedData(e,t,s){const i=s?.contentType||g(t),r=m(t);return this.attachments.push({cid:r,content:e,contentDisposition:"inline",contentType:i,filename:t}),this.logger&&this.logger.debug("Inline attachment embedded from data",{cid:r,contentType:i,filename:t}),r}replyTo(e){return this.replyToAddress=typeof e=="string"?{email:e}:e,this}date(e){return this.dateValue=typeof e=="string"?new Date(e):e,this.logger&&this.logger.debug("Date header set",{date:this.dateValue.toISOString()}),this}returnPath(e){return this.returnPathAddress=typeof e=="string"?{email:e}:e,this.logger&&this.logger.debug("Return-path address set",{returnPath:this.returnPathAddress.email}),this}sender(e){return this.senderAddress=typeof e=="string"?{email:e}:e,this.logger&&this.logger.debug("Sender address set",{sender:this.senderAddress.email}),this}addTo(e){return this.toAddresses.push(...o(e)),this}addCc(e){return this.ccAddresses.push(...o(e)),this}addBcc(e){return this.bccAddresses.push(...o(e)),this}addReplyTo(e){const t=Array.isArray(e)?e:[e];if(t.length>0){const s=t[0];this.replyToAddress=typeof s=="string"?{email:s}:s}return this}addFrom(e){const t=Array.isArray(e)?e:[e];if(t.length>0){const s=t[0];this.fromAddress=typeof s=="string"?{email:s}:s}return this}priority(e){return this.priorityValue=e,this}tags(e){return this.tagsValue=Array.isArray(e)?e:[e],this}sign(e){return this.signer=e,this.logger&&this.logger.debug("Email signer configured"),this}encrypt(e){return this.encrypter=e,this.logger&&this.logger.debug("Email encrypter configured"),this}setLogger(e){return this.logger=E("MailMessage",e),this}icalEvent(e,t){if(typeof e=="function"){const s=C();e(s),this.icalEventData={content:s.toString(),...t}}else this.icalEventData={content:e,...t};return this.logger&&this.logger.debug("Calendar event attached",{method:t?.method}),this}icalEventFromFile(e,t){const s=typeof e=="string"?e:x(e);return this.icalEventData={path:s,...t},this.logger&&this.logger.debug(`Calendar event attached from file: ${s}`,{method:t?.method}),this}icalEventFromUrl(e,t){return this.icalEventData={href:e,...t},this.logger&&this.logger.debug(`Calendar event attached from URL: ${e}`,{method:t?.method}),this}async view(e,t,s,i){try{const r=i?.autoText!==!1;this.autoTextEnabled=r,this.logger&&this.logger.debug("Rendering template",{autoText:r});const h=await e(t,s,i);this.html(h),r&&h&&this.tryAutoGenerateText(h),this.logger&&this.logger.debug("Template rendered successfully")}catch(r){throw this.logger&&this.logger.error("Failed to render template",r),new Error(`Failed to render template: ${r.message}`)}return this}async viewText(e,t,s,i){try{this.logger&&this.logger.debug("Rendering text template");const r=await e(t,s,i);if(typeof r=="string")this.text(r),this.logger&&this.logger.debug("Text template rendered successfully");else throw new TypeError("Text renderer must return a string")}catch(r){throw this.logger&&this.logger.error("Failed to render text template",r),new Error(`Failed to render text template: ${r.message}`)}return this}async build(){if(this.logger&&this.logger.debug("Building email message"),this.fromAddress||this.throwAndLogError("From address is required","Build failed: from address is required"),this.toAddresses.length===0&&this.throwAndLogError("At least one recipient is required","Build failed: at least one recipient is required"),this.subjectText||this.throwAndLogError("Subject is required","Build failed: subject is required"),this.htmlContent&&!this.textContent&&this.autoTextEnabled)try{this.textContent=p(this.htmlContent),this.logger&&this.logger.debug("Auto-generated text content from HTML")}catch{this.logger&&this.logger.debug("Failed to convert HTML to text; proceeding without text content.")}!this.textContent&&!this.htmlContent&&this.throwAndLogError("Either text or html content is required","Build failed: either text or html content is required");let e={from:this.fromAddress,html:this.htmlContent,subject:this.subjectText,text:this.textContent,to:this.toAddresses.length===1?this.toAddresses[0]:this.toAddresses};return this.ccAddresses.length>0&&(e.cc=this.ccAddresses.length===1?this.ccAddresses[0]:this.ccAddresses),this.bccAddresses.length>0&&(e.bcc=this.bccAddresses.length===1?this.bccAddresses[0]:this.bccAddresses),Object.keys(this.headers).length>0&&(e.headers=this.headers),this.attachments.length>0&&(e.attachments=this.attachments,this.logger&&this.logger.debug(`Email includes ${this.attachments.length} attachment(s)`)),this.replyToAddress&&(e.replyTo=this.replyToAddress),this.priorityValue&&(e.priority=this.priorityValue),this.tagsValue.length>0&&(e.tags=this.tagsValue),this.icalEventData&&(e.icalEvent=this.icalEventData,this.logger&&this.logger.debug("Email includes calendar event")),this.dateValue&&(e.headers={...l(e.headers||{}),Date:this.dateValue.toUTCString()}),this.returnPathAddress&&(e.headers={...l(e.headers||{}),"Return-Path":this.returnPathAddress.email}),this.senderAddress&&(e.headers={...l(e.headers||{}),Sender:this.senderAddress.email}),this.signer&&(this.logger&&this.logger.debug("Signing email message"),e=await this.signer.sign(e),this.logger&&this.logger.debug("Email message signed successfully")),this.encrypter&&(this.logger&&this.logger.debug("Encrypting email message"),e=await this.encrypter.encrypt(e),this.logger&&this.logger.debug("Email message encrypted successfully")),this.logger&&this.logger.debug("Email message built successfully",{bcc:this.bccAddresses.length,cc:this.ccAddresses.length,hasHtml:!!this.htmlContent,hasText:!!this.textContent,to:this.toAddresses.length}),e}getSubject(){return this.subjectText}getFrom(){return this.fromAddress}getTo(){return[...this.toAddresses]}getCc(){return[...this.ccAddresses]}getBcc(){return[...this.bccAddresses]}getReplyTo(){return this.replyToAddress}getSender(){return this.senderAddress}getReturnPath(){return this.returnPathAddress}getDate(){return this.dateValue}getPriority(){return this.priorityValue}getTextBody(){return this.textContent}getTextCharset(){return this.textCharset}getHtmlBody(){return this.htmlContent}getHtmlCharset(){return this.htmlCharset}getAttachments(){return[...this.attachments]}tryAutoGenerateText(e){try{const t=p(e);t&&!this.textContent&&this.text(t),this.logger&&this.logger.debug("Auto-generated text content from HTML template")}catch(t){this.logger&&this.logger.warn("Failed to auto-generate text from HTML template",t)}}throwAndLogError(e,t){const s=new Error(e);throw this.logger&&this.logger.error(t||e),s}}export{M as MailMessage,M as default};
@@ -1 +0,0 @@
1
- var k=Object.defineProperty;var w=(n,l)=>k(n,"name",{value:l,configurable:!0});import{createRequire as z}from"node:module";import u from"./EmailError-zm2ffVav.js";import v from"./RequiredOptionError-CevW3u2K.js";import{s as P}from"./generate-message-id-D4uA8gkj.js";import{i as j}from"./headers-to-record-Qo124ImV.js";import{m as h}from"./make-request-BDzF9W9D.js";import{c as _,P as B,u as T,h as S}from"./provider-base-Cmzx6BTO.js";import{d as C}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as E}from"./defineProvider-B9rSklAJ.js";import{j as y,k as q}from"./address-formatter-Cm_E_ZMa.js";const $=z(import.meta.url),f=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,I=w(n=>{if(typeof f<"u"&&f.versions&&f.versions.node){const[l,t]=f.versions.node.split(".").map(Number);if(l>22||l===22&&t>=3||l===20&&t>=16)return f.getBuiltinModule(n)}return $(n)},"__cjs_getBuiltinModule"),{Buffer:p}=I("node:buffer"),s="azure",x=3e4,O=3,Q=E((n={})=>{if(!n.region)throw new v(s,"region");if(!n.connectionString&&!n.accessToken)throw new v(s,"connectionString or accessToken");const l=n.endpoint||`https://${n.region}.communication.azure.com`,t={debug:n.debug||!1,endpoint:l,region:n.region,retries:n.retries||O,timeout:n.timeout||x,...n.connectionString&&{connectionString:n.connectionString},...n.accessToken&&{accessToken:n.accessToken},...n.logger&&{logger:n.logger}},g=new B,o=_(s,n.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 u(s,"Email ID is required to retrieve email details"),success:!1};await g.ensureInitialized(()=>this.initialize(),s);const a={"Content-Type":"application/json"};if(t.accessToken)a.Authorization=`Bearer ${t.accessToken}`;else if(t.connectionString){const c=t.connectionString.match(/endpoint=([^;]+);accesskey=([^;]+)/);c&&(a.Authorization=`Bearer ${c[2]}`)}o.debug("Retrieving email details",{id:e});const r=await T(async()=>h(`${t.endpoint}/emails/${e}`,{headers:a,method:"GET",timeout:t.timeout}),t.retries);return r.success?(o.debug("Email details retrieved successfully"),{data:r.data?.body,success:!0}):(o.debug("API request failed when retrieving email",r.error),{error:new u(s,`Failed to retrieve email: ${r.error instanceof Error?r.error.message:"Unknown error"}`,{cause:r.error}),success:!1})}catch(a){return{error:S(s,"retrieve email",a,o),success:!1}}},async initialize(){await g.ensureInitialized(async()=>{if(!await this.isAvailable())throw new u(s,"Azure Communication Services API not available or invalid credentials");o.debug("Provider initialized successfully")},s)},async isAvailable(){try{const e={"Content-Type":"application/json"};if(t.accessToken)e.Authorization=`Bearer ${t.accessToken}`;else if(t.connectionString){const c=t.connectionString.match(/endpoint=([^;]+);accesskey=([^;]+)/);if(c)e.Authorization=`Bearer ${c[2]}`;else return!1}else return!1;o.debug("Checking Azure Communication Services API availability");const a=await h(`${t.endpoint}/emails:send`,{headers:e,method:"POST",timeout:t.timeout},JSON.stringify({}));if(a.success)return!0;const r=a.data?.statusCode;return r===401||r===403?!1:r===400}catch(e){if(o.debug("Error checking availability:",e),e instanceof Error){const a=e.message;if(a.includes("401")||a.includes("403"))return!1}return!1}},name:s,options:t,async sendEmail(e){try{const a=C(e);if(a.length>0)return{error:new u(s,`Invalid email options: ${a.join(", ")}`),success:!1};await g.ensureInitialized(()=>this.initialize(),s);const r={content:{subject:e.subject},recipients:{to:y(e.to)},senderAddress:e.from.email};if(e.html&&(r.content.html=e.html),e.text&&(r.content.plainText=e.text),e.cc&&(r.recipients.cc=y(e.cc)),e.bcc&&(r.recipients.bcc=y(e.bcc)),e.replyTo&&(r.replyTo=q(e.replyTo).email),e.importance&&(r.importance=e.importance),e.headers){const i=j(e.headers);r.headers=i}e.attachments&&e.attachments.length>0&&(r.attachments=await Promise.all(e.attachments.map(async i=>{let d;if(i.content)if(typeof i.content=="string")d=p.from(i.content,"utf8").toString("base64");else if(i.content&&typeof i.content.then=="function"){const A=await i.content;d=p.from(A).toString("base64")}else d=i.content.toString("base64");else if(i.raw)d=typeof i.raw=="string"?p.from(i.raw,"utf8").toString("base64"):i.raw.toString("base64");else throw new u(s,`Attachment ${i.filename} has no content`);return{contentInBase64:d,contentType:i.contentType||"application/octet-stream",name:i.filename}}))),o.debug("Sending email via Azure Communication Services API",{subject:r.content.subject,to:r.recipients.to});const c={"Content-Type":"application/json"};if(t.accessToken)c.Authorization=`Bearer ${t.accessToken}`;else if(t.connectionString){const i=t.connectionString.match(/endpoint=([^;]+);accesskey=([^;]+)/);if(i)c.Authorization=`Bearer ${i[2]}`;else return{error:new u(s,"Invalid connection string format"),success:!1}}const m=await T(async()=>h(`${t.endpoint}/emails:send`,{headers:c,method:"POST",timeout:t.timeout},JSON.stringify(r)),t.retries);if(!m.success)return o.debug("API request failed when sending email",m.error),{error:m.error||new u(s,"Failed to send email"),success:!1};const b=m.data?.body?.messageId||P();return o.debug("Email sent successfully",{messageId:b}),{data:{messageId:b,provider:s,response:m.data,sent:!0,timestamp:new Date},success:!0}}catch(a){return{error:S(s,"send email",a,o),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{Q as default};
@@ -1,2 +0,0 @@
1
- var T=Object.defineProperty;var u=(e,o)=>T(e,"name",{value:o,configurable:!0});import C from"./EmailError-zm2ffVav.js";import p from"../utils/format-email-address.js";import{a as w}from"./generate-boundary-Cx8nXYS0.js";import{i as j}from"./headers-to-record-Qo124ImV.js";import{s as h,a as b}from"./sanitize-header-wWav-Scu.js";var x=Object.defineProperty,E=u((e,o)=>x(e,"name",{value:o,configurable:!0}),"m");const l=E(e=>Array.isArray(e)?e.map(o=>p(o)).join(", "):p(e),"formatEmailAddresses");var B=Object.defineProperty,M=u((e,o)=>B(e,"name",{value:o,configurable:!0}),"b");const d=globalThis.Buffer!==void 0,g=M(e=>{if(typeof e=="string"){if(d)return Buffer.from(e,"utf8").toString("base64");const t=new TextEncoder().encode(e);let r="";const s=8192;for(let a=0;a<t.length;a+=s){const f=t.subarray(a,Math.min(a+s,t.length));r+=String.fromCharCode.apply(void 0,f)}return btoa(r)}if(d&&e instanceof Buffer)return e.toString("base64");const o=e instanceof Uint8Array?e:new Uint8Array(e);if(d)return Buffer.from(o).toString("base64");let n="";const c=8192;for(let t=0;t<o.length;t+=c){const r=o.subarray(t,Math.min(t+c,o.length));n+=String.fromCharCode.apply(void 0,r)}return btoa(n)},"toBase64");var S=Object.defineProperty,A=u((e,o)=>S(e,"name",{value:o,configurable:!0}),"h");const O=globalThis.Buffer!==void 0,H=A(async e=>{const o=w(),n=[`From: ${p(e.from)}`,`To: ${l(e.to)}`];if(e.cc&&n.push(`Cc: ${l(e.cc)}`),e.bcc&&n.push(`Bcc: ${l(e.bcc)}`),e.replyTo&&n.push(`Reply-To: ${p(e.replyTo)}`),n.push(`Subject: ${h(e.subject)}`,"MIME-Version: 1.0"),e.headers){const c=j(e.headers);Object.entries(c).forEach(([t,r])=>{const s=b(t),a=h(r);n.push(`${s}: ${a}`)})}if(n.push(`Content-Type: multipart/mixed; boundary="${o}"`,""),e.text&&n.push(`--${o}`,"Content-Type: text/plain; charset=UTF-8","Content-Transfer-Encoding: 7bit","",e.text,""),e.html&&n.push(`--${o}`,"Content-Type: text/html; charset=UTF-8","Content-Transfer-Encoding: 7bit","",e.html,""),e.attachments&&e.attachments.length>0){const c=await Promise.all(e.attachments.map(async t=>{let r;if(t.raw!==void 0)r=t.raw;else{if(t.content===void 0)throw new C("attachment",`Attachment '${t.filename}' must have content, raw, or be resolved from path/href before building MIME message`);r=t.content instanceof Promise?await t.content:t.content}return{...t,resolvedContent:r}}));for(const t of c){n.push(`--${o}`);const r=t.contentType||"application/octet-stream",s=h(t.filename);n.push(`Content-Type: ${r}; name="${s}"`);const a=t.contentDisposition||"attachment";n.push(`Content-Disposition: ${a}; filename="${s}"`),t.cid&&n.push(`Content-ID: <${t.cid}>`),t.headers&&Object.entries(t.headers).forEach(([m,y])=>{const $=b(m),v=h(y);n.push(`${$}: ${v}`)});const f=t.encoding||"base64";n.push(`Content-Transfer-Encoding: ${f}`,"");const i=t.resolvedContent;if(f==="base64")n.push(g(i));else if(f==="7bit"||f==="8bit")if(typeof i=="string")n.push(i);else if(O&&i instanceof Buffer)n.push(i.toString("utf8"));else{const m=new TextDecoder;n.push(m.decode(i))}else n.push(g(i));n.push("")}}return n.push(`--${o}--`),n.join(`\r
2
- `)},"buildMimeMessage");export{H as z};
@@ -1 +0,0 @@
1
- var n=Object.defineProperty;var i=(e,r)=>n(e,"name",{value:r,configurable:!0});var o=Object.defineProperty,a=i((e,r)=>o(e,"name",{value:r,configurable:!0}),"i");const t=a(e=>e,"defineProvider");export{t as defineProvider};
@@ -1 +0,0 @@
1
- var w=Object.defineProperty;var b=(e,l)=>w(e,"name",{value:l,configurable:!0});import u from"./EmailError-zm2ffVav.js";import $ from"./RequiredOptionError-CevW3u2K.js";import{c as A}from"./create-logger-BiWdqFNg.js";import{s as E}from"./generate-message-id-D4uA8gkj.js";import{defineProvider as z}from"./defineProvider-B9rSklAJ.js";var P=Object.defineProperty,p=b((e,l)=>P(e,"name",{value:l,configurable:!0}),"v");const k=p(e=>typeof e=="function","isProviderFactory"),F=p(e=>e!==null&&typeof e=="object"&&"sendEmail"in e&&"initialize"in e&&"isAvailable"in e,"isProvider"),o="failover",C=z((e={})=>{if(!e.mailers||e.mailers.length===0)throw new $(o,"mailers");const l={debug:e.debug||!1,mailers:e.mailers,retryAfter:e.retryAfter??60};let h=!1;const t=[],s=A(o,e.logger);let g;const m=p(async()=>g||(g=(async()=>{t.length=0;for(const a of l.mailers)try{let r;if(k(a))r=a({});else if(F(a))r=a;else{s.debug(`Skipping invalid mailer: ${a}`);continue}try{await r.initialize(),t.push(r),s.debug(`Initialized provider: ${r.name||"unknown"}`)}catch(c){s.debug(`Failed to initialize provider ${r.name||"unknown"}:`,c)}}catch(r){s.debug("Error processing mailer:",r)}if(t.length===0)throw new u(o,"No providers could be initialized")})(),g),"initializeProviders");return{features:{attachments:!0,batchSending:!1,customHeaders:!0,html:!0,replyTo:!0,scheduling:!1,tagging:!1,templates:!1,tracking:!1},async initialize(){if(!h)try{await m(),h=!0,s.debug(`Failover provider initialized with ${t.length} provider(s)`)}catch(a){throw new u(o,`Failed to initialize: ${a.message}`,{cause:a})}},async isAvailable(){try{t.length===0&&await m();for(const a of t)try{if(await a.isAvailable())return!0}catch{}return!1}catch{return!1}},name:o,options:l,async sendEmail(a){try{if(t.length===0&&await m(),t.length===0)return{error:new u(o,"No providers available"),success:!1};const r=[];let c;for(let n=0;n<t.length;n+=1){const f=t[n];if(!f)continue;const d=f.name||`provider-${n+1}`;s.debug(`Attempting to send email via ${d} (${n+1}/${t.length})`);try{if(!await f.isAvailable()){s.debug(`Provider ${d} is not available, skipping`),r.push(new u(o,`Provider ${d} is not available`));continue}const i=await f.sendEmail(a);if(i.success&&i.data)return s.debug(`Email sent successfully via ${d}`),{data:{...i.data,messageId:i.data.messageId||E(),provider:`${o}(${d})`},success:!0};if(i.error){c=i.error,r.push(i.error);const v=i.error instanceof Error?i.error.message:String(i.error);s.debug(`Failed to send via ${d}:`,v)}}catch(i){c=i instanceof Error?i:new Error(String(i)),r.push(c);const v=c instanceof Error?c.message:String(c);s.debug(`Exception sending via ${d}:`,v)}n<t.length-1&&l.retryAfter>0&&(s.debug(`Waiting ${l.retryAfter}ms before trying next provider`),await new Promise(i=>{setTimeout(()=>{i()},l.retryAfter)}))}const y=r.map(n=>n instanceof Error?n.message:String(n)).join("; ");return{error:new u(o,`All providers failed. Errors: ${y}`,{cause:c}),success:!1}}catch(r){return{error:new u(o,`Failed to send email: ${r.message}`,{cause:r}),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{C as default};
@@ -1 +0,0 @@
1
- var v=Object.defineProperty;var p=(r,a)=>v(r,"name",{value:a,configurable:!0});import d from"./EmailError-zm2ffVav.js";import A from"./RequiredOptionError-CevW3u2K.js";import{s as j}from"./generate-message-id-D4uA8gkj.js";import{m as u}from"./make-request-BDzF9W9D.js";import{d as O}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as P}from"./defineProvider-B9rSklAJ.js";var C=Object.defineProperty,h=p((r,a)=>C(r,"name",{value:a,configurable:!0}),"f");const n="http",I="POST",f=3e4,z=P((r={})=>{if(!r.endpoint)throw new A(n,"endpoint");const a={apiKey:r.apiKey||"",endpoint:r.endpoint,headers:r.headers||{},method:r.method||I},m=h(()=>{const e={"Content-Type":"application/json",...a.headers};return a.apiKey&&(e.Authorization=`Bearer ${a.apiKey}`),e},"getStandardHeaders"),y=h(e=>{const t={from:e.from.email,from_name:e.from.name,html:e.html,subject:e.subject,text:e.text,to:Array.isArray(e.to)?e.to.map(s=>s.email):e.to.email};return e.cc&&(t.cc=Array.isArray(e.cc)?e.cc.map(s=>s.email):e.cc.email),e.bcc&&(t.bcc=Array.isArray(e.bcc)?e.bcc.map(s=>s.email):e.bcc.email),e.customParams&&Object.assign(t,e.customParams),t},"formatRequest");let l=!1;return{features:{attachments:!1,batchSending:!1,customHeaders:!0,html:!0,replyTo:!1,scheduling:!1,tagging:!1,templates:!1,tracking:!1},async initialize(){if(!l){if(!await this.isAvailable())throw new d(n,"API endpoint not available");l=!0}},async isAvailable(){try{return!!(await u(a.endpoint,{headers:m(),method:"OPTIONS",timeout:f})).success}catch(e){if(e instanceof Error){const t=e.message;if(t.includes("401")||t.includes("403"))return!1}return!1}},name:n,options:a,async sendEmail(e){try{const t=O(e);if(t.length>0)return{error:new d(n,`Invalid email options: ${t.join(", ")}`),success:!1};l||await this.initialize();const s=m();e.headers&&Object.assign(s,e.headers);const b=y(e),g=e.endpointOverride||a.endpoint,w=e.methodOverride||a.method,o=await u(g,{headers:s,method:w,timeout:f},JSON.stringify(b));if(!o.success)return{error:new d(n,`Failed to send email: ${o.error?.message||"Unknown error"}`,{cause:o.error}),success:!1};let c;const i=o.data?.body;return i&&typeof i=="object"&&(c=i.id||i.messageId||i.data&&typeof i.data=="object"&&(i.data.id||i.data.messageId)),c||(c=j()),{data:{messageId:c,provider:n,response:o.data?.body,sent:!0,timestamp:new Date},success:!0}}catch(t){return{error:new d(n,`Failed to send email: ${t.message}`,{cause:t}),success:!1}}},async validateCredentials(){try{const e=await u(a.endpoint,{headers:m(),method:"GET",timeout:f});return!!(e.data&&typeof e.data=="object"&&"statusCode"in e.data&&typeof e.data.statusCode=="number"&&e.data.statusCode>=200&&e.data.statusCode<300)}catch{return!1}}}});export{z as default};
@@ -1 +0,0 @@
1
- var I=Object.defineProperty;var y=(r,i)=>I(r,"name",{value:i,configurable:!0});import{createRequire as A}from"node:module";import m from"./EmailError-zm2ffVav.js";import T from"./RequiredOptionError-CevW3u2K.js";import{s as R}from"./generate-message-id-D4uA8gkj.js";import{i as S}from"./headers-to-record-Qo124ImV.js";import{m as h}from"./make-request-BDzF9W9D.js";import{c as _,P as z,u as $,h as j}from"./provider-base-Cmzx6BTO.js";import{d as E}from"./validate-email-options-DfJ7llf8.js";import{defineProvider as q}from"./defineProvider-B9rSklAJ.js";import{a as U}from"./attachment-processor-2rHmfa7j.js";import{b as v,c as k}from"./address-formatter-Cm_E_ZMa.js";const P=A(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,C=y(r=>{if(typeof u<"u"&&u.versions&&u.versions.node){const[i,n]=u.versions.node.split(".").map(Number);if(i>22||i===22&&n>=3||i===20&&n>=16)return u.getBuiltinModule(r)}return P(r)},"__cjs_getBuiltinModule"),{Buffer:b}=C("node:buffer");var M=Object.defineProperty,K=y((r,i)=>M(r,"name",{value:i,configurable:!0}),"k");const o="mailgun",B="https://api.mailgun.net",O=3e4,x=3,D=K(r=>{const i=[];for(const[n,a]of Object.entries(r))if(a!=null)if(Array.isArray(a))for(const e of a)i.push(`${encodeURIComponent(n)}=${encodeURIComponent(String(e))}`);else typeof a=="object"?i.push(`${encodeURIComponent(n)}=${encodeURIComponent(JSON.stringify(a))}`):i.push(`${encodeURIComponent(n)}=${encodeURIComponent(String(a))}`);return i.join("&")},"objectToFormData"),ee=q((r={})=>{if(!r.apiKey)throw new T(o,"apiKey");if(!r.domain)throw new T(o,"domain");const i={apiKey:r.apiKey,debug:r.debug||!1,domain:r.domain,endpoint:r.endpoint||B,retries:r.retries||x,timeout:r.timeout||O,...r.logger&&{logger:r.logger}},n=new z,a=_(o,r.logger);return{endpoint:i.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 m(o,"Email ID is required to retrieve email details"),success:!1};await n.ensureInitialized(()=>this.initialize(),o);const s={Authorization:`Basic ${b.from(`api:${i.apiKey}`).toString("base64")}`,"Content-Type":"application/json"};a.debug("Retrieving email details",{id:e});const t=await $(async()=>h(`${i.endpoint}/v3/${i.domain}/events?message-id=${encodeURIComponent(e)}&limit=1`,{headers:s,method:"GET",timeout:i.timeout}),i.retries);if(!t.success)return a.debug("API request failed when retrieving email",t.error),{error:new m(o,`Failed to retrieve email: ${t.error instanceof Error?t.error.message:"Unknown error"}`,{cause:t.error}),success:!1};a.debug("Email details retrieved successfully");const p=t.data?.items||[],g=p.length>0?p[0]:void 0;return{data:g?.message?.headers||g?.storage||void 0,success:!0}}catch(s){return{error:j(o,"retrieve email",s,a),success:!1}}},async initialize(){await n.ensureInitialized(async()=>{if(!await this.isAvailable())throw new m(o,"Mailgun API not available or invalid API key/domain");a.debug("Provider initialized successfully")},o)},async isAvailable(){try{const e={Authorization:`Basic ${b.from(`api:${i.apiKey}`).toString("base64")}`,"Content-Type":"application/json"};a.debug("Checking Mailgun API availability");const s=await h(`${i.endpoint}/v3/domains/${i.domain}`,{headers:e,method:"GET",timeout:i.timeout});if(a.debug("Mailgun API availability check response:",{error:s.error instanceof Error?s.error.message:void 0,statusCode:s.data?.statusCode,success:s.success}),!s.success||!s.data||typeof s.data!="object")return!1;const{statusCode:t}=s.data;return typeof t=="number"&&t>=200&&t<300}catch(e){return a.debug("Error checking availability:",e),!1}},name:o,options:i,async sendEmail(e){try{const s=E(e);if(s.length>0)return{error:new m(o,`Invalid email options: ${s.join(", ")}`),success:!1};await n.ensureInitialized(()=>this.initialize(),o);const t={from:k(e.from),to:v(e.to).join(",")};if(e.subject&&(t.subject=e.subject),e.cc&&(t.cc=v(e.cc).join(",")),e.bcc&&(t.bcc=v(e.bcc).join(",")),e.replyTo&&(t["h:Reply-To"]=k(e.replyTo)),e.html&&(t.html=e.html),e.text&&(t.text=e.text),e.template&&(t.template=e.template,e.templateVariables))for(const[d,c]of Object.entries(e.templateVariables))t[`v:${d}`]=c;if(e.tags&&e.tags.length>0&&(t["o:tag"]=e.tags),e.campaignId&&(t["o:campaign"]=e.campaignId),e.deliveryTime&&(t["o:deliverytime"]=typeof e.deliveryTime=="number"?new Date(e.deliveryTime*1e3).toUTCString():e.deliveryTime),e.clickTracking!==void 0&&(t["o:clicktracking"]=e.clickTracking?"yes":"no"),e.openTracking!==void 0&&(t["o:tracking"]=e.openTracking?"yes":"no"),e.unsubscribeTracking!==void 0&&(t["o:tracking-clicks"]=e.unsubscribeTracking?"yes":"no"),e.testMode&&(t["o:testmode"]="yes"),e.requireTls&&(t["o:require-tls"]="yes"),e.skipVerification&&(t["o:skip-verification"]="yes"),e.headers){const d=S(e.headers);for(const[c,f]of Object.entries(d))t[`h:${c}`]=f}if(e.attachments&&e.attachments.length>0){const d=await Promise.all(e.attachments.map((c,f)=>U(c,o,f)));for(const c of d)t[c.key]=c.content}a.debug("Sending email via Mailgun API",{subject:t.subject,to:t.to});const p={Authorization:`Basic ${b.from(`api:${i.apiKey}`).toString("base64")}`,"Content-Type":"application/x-www-form-urlencoded"},g=D(t),l=await $(async()=>h(`${i.endpoint}/v3/${i.domain}/messages`,{headers:p,method:"POST",timeout:i.timeout},g),i.retries);if(!l.success)return a.debug("API request failed when sending email",l.error),{error:l.error||new m(o,"Failed to send email"),success:!1};const w=l.data?.body?.id||R();return a.debug("Email sent successfully",{messageId:w}),{data:{messageId:w,provider:o,response:l.data,sent:!0,timestamp:new Date},success:!0}}catch(s){return{error:j(o,"send email",s,a),success:!1}}},async validateCredentials(){return this.isAvailable()}}});export{ee 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};