@visulima/email 1.0.0-alpha.34 → 1.0.0-alpha.35

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 (220) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +77 -0
  3. package/dist/crypto/index.d.ts +160 -3
  4. package/dist/crypto/index.js +1 -1
  5. package/dist/deliverability/dmarc-report.d.ts +95 -0
  6. package/dist/deliverability/dmarc-report.js +1 -0
  7. package/dist/deliverability/index.d.ts +360 -0
  8. package/dist/deliverability/index.js +1 -0
  9. package/dist/events/index.d.ts +31 -0
  10. package/dist/events/index.js +1 -0
  11. package/dist/inbound/index.d.ts +375 -0
  12. package/dist/inbound/index.js +1 -0
  13. package/dist/index.d.ts +11 -734
  14. package/dist/index.js +1 -1
  15. package/dist/middleware/index.d.ts +346 -0
  16. package/dist/middleware/index.js +1 -0
  17. package/dist/packem_shared/ALL_EVENTS-A0nTVOo0.js +1 -0
  18. package/dist/packem_shared/DkimSigner-dKZ45Csc.js +18 -0
  19. package/dist/packem_shared/Mail-B2QII2P9.js +1 -0
  20. package/dist/packem_shared/{MailMessage-BvaH5tZZ.js → MailMessage-DB1zaWfM.js} +1 -1
  21. package/dist/packem_shared/MemoryEventStore-BEKPxa-I.js +1 -0
  22. package/dist/packem_shared/MemoryQueue-C-CtRRG7.js +1 -0
  23. package/dist/packem_shared/MemorySuppressionStore-BKY1FrA1.js +1 -0
  24. package/dist/packem_shared/RATE_LIMIT_PRESETS-DQF78mdO.js +1 -0
  25. package/dist/packem_shared/{SmimeEncrypter-ZhHEgDwY.js → SmimeEncrypter-BirIsrip.js} +2 -2
  26. package/dist/packem_shared/{SmimeSigner-CYSVF6ez.js → SmimeSigner-CkyaShTs.js} +2 -2
  27. package/dist/packem_shared/addDarkModeSupport-Ys9U2-GH.js +1 -0
  28. package/dist/packem_shared/address-formatter-CnPg51_n.js +1 -0
  29. package/dist/packem_shared/ahaSendProvider-yuqYMW0n.js +1 -0
  30. package/dist/packem_shared/arcMessageSignatureBase-Cpdnv-H8.js +17 -0
  31. package/dist/packem_shared/attachment-processor-CFUC3V45.js +1 -0
  32. package/dist/packem_shared/azureProvider-CK_Wuw4r.js +1 -0
  33. package/dist/packem_shared/brevoProvider-CNwuzzBA.js +1 -0
  34. package/dist/packem_shared/build-mime-message-D8WEZejb.js +3 -0
  35. package/dist/packem_shared/buildListUnsubscribe-CIbz0rtk.js +1 -0
  36. package/dist/packem_shared/circuitBreakerMiddleware-B7DlzZSG.js +1 -0
  37. package/dist/packem_shared/cloudflareEmailProvider-C-G821Hg.js +1 -0
  38. package/dist/packem_shared/composeMiddleware-CkEhbDjL.js +1 -0
  39. package/dist/packem_shared/createTestEmail-hHdtgmUM.js +1 -0
  40. package/dist/packem_shared/createWorker-Nkc1GHet.js +1 -0
  41. package/dist/packem_shared/dedupeMiddleware-JeJbff46.js +1 -0
  42. package/dist/packem_shared/{detectMimeType-bo5oxfnt.js → detectMimeType-B4QMh7k8.js} +1 -1
  43. package/dist/packem_shared/emailMatchers-CLANeU71.js +1 -0
  44. package/dist/packem_shared/event-bus.d-DEl3w_EW.d.ts +104 -0
  45. package/dist/packem_shared/extractReply-CCWnNRWe.js +5 -0
  46. package/dist/packem_shared/filterSuppressed-DntqRV0q.js +1 -0
  47. package/dist/packem_shared/format-address-Cv6uWTS5.js +1 -0
  48. package/dist/packem_shared/infobipProvider-DdV62IAG.js +1 -0
  49. package/dist/packem_shared/injectPreheader-BxPjb0eJ.js +1 -0
  50. package/dist/packem_shared/inlineCss-BLaEi337.js +1 -0
  51. package/dist/packem_shared/isValidSigningCertUrl-CF_KuCAi.js +3 -0
  52. package/dist/packem_shared/loggingMiddleware-CyHzn37U.js +1 -0
  53. package/dist/packem_shared/loopsProvider-DSedSU3q.js +1 -0
  54. package/dist/packem_shared/mail.d-LmrdSngG.d.ts +861 -0
  55. package/dist/packem_shared/{mailCrabProvider-B7H6HwWu.js → mailCrabProvider-xSLhA1CY.js} +1 -1
  56. package/dist/packem_shared/mailPaceProvider-CWBIjvvJ.js +1 -0
  57. package/dist/packem_shared/mailchannelsProvider-zKcunGDQ.js +1 -0
  58. package/dist/packem_shared/mailerSendProvider-BEvPlBKB.js +1 -0
  59. package/dist/packem_shared/mailgunProvider-CfQAINTC.js +1 -0
  60. package/dist/packem_shared/mailjetProvider-DEfKptWc.js +1 -0
  61. package/dist/packem_shared/mailomatProvider-D5sHlxZh.js +1 -0
  62. package/dist/packem_shared/mailtrapProvider-DwgMKakk.js +1 -0
  63. package/dist/packem_shared/mandrillProvider-CdGjO3Td.js +1 -0
  64. package/dist/packem_shared/normalizeMessageId-B_9mXlh4.js +1 -0
  65. package/dist/packem_shared/oauth2Middleware-B1xz58iP.js +1 -0
  66. package/dist/packem_shared/parseAddress-CrYOac3K.js +1 -0
  67. package/dist/packem_shared/parseArfReport-CUHb8WVj.js +6 -0
  68. package/dist/packem_shared/parseCloudflareInbound-BGgH5u7M.js +1 -0
  69. package/dist/packem_shared/parseDmarcRecord-DjNqCMZc.js +1 -0
  70. package/dist/packem_shared/parseInbound-BP-gEjhh.js +1 -0
  71. package/dist/packem_shared/parseMailgunInbound-C3sZ1TiH.js +1 -0
  72. package/dist/packem_shared/parseMtaStsPolicy-rFOOVXXK.js +6 -0
  73. package/dist/packem_shared/parsePostmarkInbound-C0Ttfroo.js +1 -0
  74. package/dist/packem_shared/parseSendGridInbound-BkvaoYRl.js +4 -0
  75. package/dist/packem_shared/parseSesInbound-BFS--T8X.js +1 -0
  76. package/dist/packem_shared/parseTlsRptRecord-DnLwAWsk.js +1 -0
  77. package/dist/packem_shared/plunkProvider-BIhMU2b5.js +1 -0
  78. package/dist/packem_shared/postProcessHtml-C73e0b9H.js +1 -0
  79. package/dist/packem_shared/postalProvider-CmmbCZSi.js +1 -0
  80. package/dist/packem_shared/postmarkProvider-i9u0h26U.js +1 -0
  81. package/dist/packem_shared/provider-base-BpHE_uK8.js +1 -0
  82. package/dist/packem_shared/{provider.d-DcfYeGJJ.d.ts → provider.d-J-y6iogK.d.ts} +1 -1
  83. package/dist/packem_shared/{readFile-BAVMZg5e-C4whBIPd.js → readFile-BkNfutxp-BS8Q2183.js} +1 -1
  84. package/dist/packem_shared/resendProvider-BNduBn0w.js +1 -0
  85. package/dist/packem_shared/retry-UPd8F62N.js +1 -0
  86. package/dist/packem_shared/retryMiddleware-DHespsU2.js +1 -0
  87. package/dist/packem_shared/rewriteCidLinks-B-Sd5XHs.js +1 -0
  88. package/dist/packem_shared/scalewayProvider-8gb4sIOB.js +1 -0
  89. package/dist/packem_shared/sendGridProvider-CayLXvPO.js +1 -0
  90. package/dist/packem_shared/smtpProvider-DoXVsN4p.js +24 -0
  91. package/dist/packem_shared/sweegoProvider-C0g9Ajdn.js +1 -0
  92. package/dist/packem_shared/toEmailSnapshot-CYpMmnAA.js +1 -0
  93. package/dist/packem_shared/tracer.d-MU42G1jG.d.ts +494 -0
  94. package/dist/packem_shared/{types.d-CNnnk-Ya.d.ts → types.d-BId55FW2.d.ts} +6 -1
  95. package/dist/packem_shared/types.d-BMpI2UXj.d.ts +51 -0
  96. package/dist/packem_shared/types.d-CmoWvdZi.d.ts +61 -0
  97. package/dist/packem_shared/types.d-Mpu0HZoG.d.ts +24 -0
  98. package/dist/packem_shared/{types.d-wwpgA3to.d.ts → types.d-ejzh-xBP.d.ts} +6 -1
  99. package/dist/packem_shared/types.d-lcJZmwRK.d.ts +69 -0
  100. package/dist/packem_shared/utils-BwolsGlK.js +1 -0
  101. package/dist/packem_shared/verifyMailgunWebhook-Df7n2Quh.js +1 -0
  102. package/dist/packem_shared/verifyPostmarkWebhook-D_eXt_Lq.js +1 -0
  103. package/dist/packem_shared/verifySendGridWebhook-XOSj5yTe.js +1 -0
  104. package/dist/packem_shared/verifyStandardWebhook-DdUTlIVh.js +1 -0
  105. package/dist/packem_shared/withEvents-Q9bwpCFG.js +1 -0
  106. package/dist/packem_shared/withMetrics-BPs3Kdxn.js +1 -0
  107. package/dist/packem_shared/withRender-DQM2zbbI.js +1 -0
  108. package/dist/packem_shared/withSuppression-DfjV_tbI.js +1 -0
  109. package/dist/packem_shared/withTelemetry-CsQsv1DV.js +1 -0
  110. package/dist/packem_shared/zeptomailProvider-BIbHieGJ.js +1 -0
  111. package/dist/providers/ahasend/index.d.ts +3 -3
  112. package/dist/providers/ahasend/index.js +1 -1
  113. package/dist/providers/aws-ses/index.d.ts +3 -3
  114. package/dist/providers/azure/index.d.ts +3 -3
  115. package/dist/providers/azure/index.js +1 -1
  116. package/dist/providers/brevo/index.d.ts +3 -3
  117. package/dist/providers/brevo/index.js +1 -1
  118. package/dist/providers/cloudflare-email/index.d.ts +36 -0
  119. package/dist/providers/cloudflare-email/index.js +1 -0
  120. package/dist/providers/failover/index.d.ts +3 -3
  121. package/dist/providers/http/index.d.ts +3 -3
  122. package/dist/providers/infobip/index.d.ts +3 -3
  123. package/dist/providers/infobip/index.js +1 -1
  124. package/dist/providers/loops/index.d.ts +47 -0
  125. package/dist/providers/loops/index.js +1 -0
  126. package/dist/providers/mailchannels/index.d.ts +26 -0
  127. package/dist/providers/mailchannels/index.js +1 -0
  128. package/dist/providers/mailcrab/index.d.ts +3 -3
  129. package/dist/providers/mailcrab/index.js +1 -1
  130. package/dist/providers/mailersend/index.d.ts +3 -3
  131. package/dist/providers/mailersend/index.js +1 -1
  132. package/dist/providers/mailgun/index.d.ts +3 -3
  133. package/dist/providers/mailgun/index.js +1 -1
  134. package/dist/providers/mailjet/index.d.ts +3 -3
  135. package/dist/providers/mailjet/index.js +1 -1
  136. package/dist/providers/mailomat/index.d.ts +3 -3
  137. package/dist/providers/mailomat/index.js +1 -1
  138. package/dist/providers/mailpace/index.d.ts +3 -3
  139. package/dist/providers/mailpace/index.js +1 -1
  140. package/dist/providers/mailtrap/index.d.ts +3 -3
  141. package/dist/providers/mailtrap/index.js +1 -1
  142. package/dist/providers/mandrill/index.d.ts +3 -3
  143. package/dist/providers/mandrill/index.js +1 -1
  144. package/dist/providers/mock/index.d.ts +6 -53
  145. package/dist/providers/nodemailer/index.d.ts +3 -3
  146. package/dist/providers/opentelemetry/index.d.ts +3 -495
  147. package/dist/providers/plunk/index.d.ts +3 -3
  148. package/dist/providers/plunk/index.js +1 -1
  149. package/dist/providers/postal/index.d.ts +3 -3
  150. package/dist/providers/postal/index.js +1 -1
  151. package/dist/providers/postmark/index.d.ts +3 -3
  152. package/dist/providers/postmark/index.js +1 -1
  153. package/dist/providers/resend/index.d.ts +3 -3
  154. package/dist/providers/resend/index.js +1 -1
  155. package/dist/providers/roundrobin/index.d.ts +3 -3
  156. package/dist/providers/scaleway/index.d.ts +3 -3
  157. package/dist/providers/scaleway/index.js +1 -1
  158. package/dist/providers/sendgrid/index.d.ts +3 -3
  159. package/dist/providers/sendgrid/index.js +1 -1
  160. package/dist/providers/smtp/index.d.ts +3 -3
  161. package/dist/providers/smtp/index.js +1 -1
  162. package/dist/providers/sweego/index.d.ts +3 -3
  163. package/dist/providers/sweego/index.js +1 -1
  164. package/dist/providers/zeptomail/index.d.ts +3 -3
  165. package/dist/providers/zeptomail/index.js +1 -1
  166. package/dist/queue/bullmq-queue.d.ts +46 -0
  167. package/dist/queue/bullmq-queue.js +1 -0
  168. package/dist/queue/index.d.ts +148 -0
  169. package/dist/queue/index.js +1 -0
  170. package/dist/queue/pg-boss-queue.d.ts +41 -0
  171. package/dist/queue/pg-boss-queue.js +1 -0
  172. package/dist/queue/sqs-queue.d.ts +72 -0
  173. package/dist/queue/sqs-queue.js +1 -0
  174. package/dist/queue/unstorage-queue.d.ts +81 -0
  175. package/dist/queue/unstorage-queue.js +1 -0
  176. package/dist/render/index.d.ts +107 -0
  177. package/dist/render/index.js +1 -0
  178. package/dist/template-engines/i18n.d.ts +61 -0
  179. package/dist/template-engines/i18n.js +1 -0
  180. package/dist/template-engines/jsx-email.d.ts +11 -0
  181. package/dist/template-engines/jsx-email.js +1 -0
  182. package/dist/template-engines/liquid.d.ts +12 -0
  183. package/dist/template-engines/liquid.js +1 -0
  184. package/dist/test/index.d.ts +159 -0
  185. package/dist/test/index.js +1 -0
  186. package/dist/utils/format-email-address.d.ts +1 -1
  187. package/dist/utils/format-email-address.js +1 -1
  188. package/dist/utils/parse-address.d.ts +1 -1
  189. package/dist/utils/result.d.ts +49 -0
  190. package/dist/utils/result.js +1 -0
  191. package/dist/utils/validation/check-feature-support.d.ts +1 -1
  192. package/dist/webhooks/index.d.ts +231 -0
  193. package/dist/webhooks/index.js +1 -0
  194. package/package.json +115 -3
  195. package/dist/packem_shared/DkimSigner-CT2DSHD1.js +0 -18
  196. package/dist/packem_shared/Mail-BWSWWq6m.js +0 -1
  197. package/dist/packem_shared/address-formatter-Cm_E_ZMa.js +0 -1
  198. package/dist/packem_shared/ahaSendProvider-DOAAW65O.js +0 -1
  199. package/dist/packem_shared/attachment-processor-DsmIomKc.js +0 -1
  200. package/dist/packem_shared/azureProvider-EkNYKAiF.js +0 -1
  201. package/dist/packem_shared/brevoProvider-CkR4U4RD.js +0 -1
  202. package/dist/packem_shared/build-mime-message-6xstxaUV.js +0 -2
  203. package/dist/packem_shared/infobipProvider-BhTsWi7e.js +0 -1
  204. package/dist/packem_shared/mailPaceProvider-DRt6Z9Hr.js +0 -1
  205. package/dist/packem_shared/mailerSendProvider-Dx_iHInH.js +0 -1
  206. package/dist/packem_shared/mailgunProvider-ChkLGZZW.js +0 -1
  207. package/dist/packem_shared/mailjetProvider-BMRhNe6H.js +0 -1
  208. package/dist/packem_shared/mailomatProvider-CydV-JB6.js +0 -1
  209. package/dist/packem_shared/mailtrapProvider-CuAfJWDr.js +0 -1
  210. package/dist/packem_shared/mandrillProvider-BBeLbaw0.js +0 -1
  211. package/dist/packem_shared/plunkProvider-BQyjG6YT.js +0 -1
  212. package/dist/packem_shared/postalProvider-DPHQ620q.js +0 -1
  213. package/dist/packem_shared/postmarkProvider-bMTC2gdJ.js +0 -1
  214. package/dist/packem_shared/provider-base-Cmzx6BTO.js +0 -1
  215. package/dist/packem_shared/resendProvider-Cns1tvF5.js +0 -1
  216. package/dist/packem_shared/scalewayProvider-O1dHz7iJ.js +0 -1
  217. package/dist/packem_shared/sendGridProvider-DmywC-eT.js +0 -1
  218. package/dist/packem_shared/smtpProvider-Unjao_fn.js +0 -23
  219. package/dist/packem_shared/sweegoProvider-D086G6xG.js +0 -1
  220. package/dist/packem_shared/zeptomailProvider-DKKEpEsW.js +0 -1
@@ -0,0 +1,159 @@
1
+ import { a as MockEmailEntry } from "../packem_shared/types.d-BMpI2UXj.js";
2
+ import { E as EmailOptions } from "../packem_shared/types.d-ejzh-xBP.js";
3
+ import { M as Mail } from "../packem_shared/mail.d-LmrdSngG.js";
4
+ import 'node:buffer';
5
+ import 'ical-generator';
6
+ import 'node:crypto';
7
+ import "../packem_shared/types.d-BId55FW2.js";
8
+ import "../packem_shared/types.d-nyR1ty1Q.js";
9
+ import "../packem_shared/types.d-Mpu0HZoG.js";
10
+ import "../packem_shared/provider.d-J-y6iogK.js";
11
+ /**
12
+ * A test harness around the in-memory mock provider: a ready-to-use {@link Mail} instance plus
13
+ * helpers to inspect, wait on, and reset the captured outbox.
14
+ */
15
+ interface TestEmail {
16
+ /**
17
+ * The {@link Mail} instance wired to the mock provider. Use it exactly like a real one.
18
+ */
19
+ mail: Mail;
20
+ /**
21
+ * Removes all captured messages.
22
+ */
23
+ reset: () => void;
24
+ /**
25
+ * Returns the captured messages, oldest first.
26
+ */
27
+ sent: () => ReadonlyArray<MockEmailEntry>;
28
+ /**
29
+ * Resolves with the first captured message matching `predicate`, polling until `timeout`.
30
+ * @param predicate The match condition.
31
+ * @param options Optional `timeout` (ms, default 1000) and `interval` (ms, default 10).
32
+ * @param options.interval Poll interval in milliseconds.
33
+ * @param options.timeout Maximum time to wait in milliseconds.
34
+ */
35
+ waitFor: (predicate: (message: MockEmailEntry) => boolean, options?: {
36
+ interval?: number;
37
+ timeout?: number;
38
+ }) => Promise<MockEmailEntry>;
39
+ }
40
+ /**
41
+ * Creates a {@link TestEmail} harness backed by the in-memory mock provider.
42
+ *
43
+ * Nothing is sent over the network; every message is captured for assertion via the
44
+ * {@link https://vitest.dev/ Vitest} matchers exported from `@visulima/email/test`.
45
+ * @returns The test harness. See {@link TestEmail}.
46
+ * @example
47
+ * ```ts
48
+ * const email = createTestEmail();
49
+ * await email.mail.send({ from: { email: "a@x.com" }, to: { email: "b@x.com" }, subject: "Hi", text: "yo" });
50
+ * expect(email).toHaveSentTo("b@x.com");
51
+ * ```
52
+ */
53
+ declare const createTestEmail: () => TestEmail;
54
+ /**
55
+ * The minimal result shape a Vitest/Jest matcher must return.
56
+ */
57
+ interface MatcherResult {
58
+ message: () => string;
59
+ pass: boolean;
60
+ }
61
+ /**
62
+ * A value the email matchers can assert against: a {@link TestEmail} harness or a raw list of captured
63
+ * entries.
64
+ */
65
+ type MatcherTarget = ReadonlyArray<MockEmailEntry> | TestEmail;
66
+ /**
67
+ * Asserts that at least one captured message was addressed to `address` (in To, Cc, or Bcc).
68
+ * @param target The {@link TestEmail} harness or captured entries.
69
+ * @param address The recipient address to look for (case-insensitive).
70
+ * @returns The matcher result.
71
+ */
72
+ declare const toHaveSentTo: (target: MatcherTarget, address: string) => MatcherResult;
73
+ /**
74
+ * Asserts that at least one captured message has a subject equal to (or matching) `expected`.
75
+ * @param target The {@link TestEmail} harness or captured entries.
76
+ * @param expected An exact subject string or a `RegExp`.
77
+ * @returns The matcher result.
78
+ */
79
+ declare const toHaveSentWithSubject: (target: MatcherTarget, expected: RegExp | string) => MatcherResult;
80
+ /**
81
+ * Asserts that at least one captured message carried an attachment (optionally with a given filename).
82
+ * @param target The {@link TestEmail} harness or captured entries.
83
+ * @param filename When provided, requires an attachment with this exact filename.
84
+ * @returns The matcher result.
85
+ */
86
+ declare const toHaveSentWithAttachment: (target: MatcherTarget, filename?: string) => MatcherResult;
87
+ /**
88
+ * Asserts that at least one captured message matches a predicate or a partial {@link EmailOptions}.
89
+ * @param target The {@link TestEmail} harness or captured entries.
90
+ * @param matcher A predicate over the sent options, or a partial options object to shallow-match.
91
+ * @returns The matcher result.
92
+ */
93
+ declare const toHaveSentMatching: (target: MatcherTarget, matcher: Partial<EmailOptions> | ((options: EmailOptions) => boolean)) => MatcherResult;
94
+ /**
95
+ * The matcher map, suitable for passing to Vitest/Jest `expect.extend(...)`.
96
+ */
97
+ declare const emailMatchers: {
98
+ toHaveSentMatching: typeof toHaveSentMatching;
99
+ toHaveSentTo: typeof toHaveSentTo;
100
+ toHaveSentWithAttachment: typeof toHaveSentWithAttachment;
101
+ toHaveSentWithSubject: typeof toHaveSentWithSubject;
102
+ };
103
+ /**
104
+ * The shape of the {@link emailMatchers} map.
105
+ */
106
+
107
+ /**
108
+ * A Vitest/Jest-compatible `expect` exposing `.extend(...)`.
109
+ */
110
+ interface ExpectLike {
111
+ extend: (matchers: Record<string, unknown>) => void;
112
+ }
113
+ /**
114
+ * Registers the email matchers with a Vitest/Jest-compatible `expect`.
115
+ *
116
+ * Kept dependency-free by accepting `expect` as an argument rather than importing `vitest` into the
117
+ * shipped bundle. Add the matching type augmentation to a `vitest.d.ts` in your project for typed
118
+ * `expect(...).toHaveSentTo(...)` calls.
119
+ * @param expectInstance The `expect` object exposing `.extend(...)`.
120
+ * @example
121
+ * ```ts
122
+ * import { expect } from "vitest";
123
+ * import { registerEmailMatchers } from "@visulima/email/test";
124
+ *
125
+ * registerEmailMatchers(expect);
126
+ * ```
127
+ */
128
+ declare const registerEmailMatchers: (expectInstance: ExpectLike) => void;
129
+ /**
130
+ * A stable, snapshot-friendly view of a sent message — volatile fields (message id, timestamp) are
131
+ * omitted so the snapshot doesn't churn between runs.
132
+ */
133
+ interface EmailSnapshot {
134
+ attachments?: {
135
+ contentType?: string;
136
+ filename: string;
137
+ }[];
138
+ bcc?: string[];
139
+ cc?: string[];
140
+ from: string;
141
+ headers?: Record<string, string>;
142
+ html?: string;
143
+ replyTo?: string;
144
+ subject: string;
145
+ text?: string;
146
+ to: string[];
147
+ }
148
+ /**
149
+ * Normalizes a captured message (a `createTestEmail` outbox entry or raw {@link EmailOptions}) into a
150
+ * deterministic {@link EmailSnapshot} for use with Vitest/Jest `toMatchSnapshot()`.
151
+ * @param source A mock-provider outbox entry or an `EmailOptions` object.
152
+ * @returns The snapshot view.
153
+ * @example
154
+ * ```ts
155
+ * expect(toEmailSnapshot(email.sent()[0])).toMatchSnapshot();
156
+ * ```
157
+ */
158
+ declare const toEmailSnapshot: (source: EmailOptions | MockEmailEntry) => EmailSnapshot;
159
+ export { type EmailSnapshot, type MatcherResult, type MatcherTarget, type TestEmail, createTestEmail, emailMatchers, registerEmailMatchers, toEmailSnapshot, toHaveSentMatching, toHaveSentTo, toHaveSentWithAttachment, toHaveSentWithSubject };
@@ -0,0 +1 @@
1
+ import{emailMatchers as a,registerEmailMatchers as o,toHaveSentMatching as r,toHaveSentTo as i,toHaveSentWithAttachment as m,toHaveSentWithSubject as h}from"../packem_shared/emailMatchers-CLANeU71.js";import{toEmailSnapshot as c}from"../packem_shared/toEmailSnapshot-CYpMmnAA.js";import{createTestEmail as s}from"../packem_shared/createTestEmail-hHdtgmUM.js";export{s as createTestEmail,a as emailMatchers,o as registerEmailMatchers,c as toEmailSnapshot,r as toHaveSentMatching,i as toHaveSentTo,m as toHaveSentWithAttachment,h as toHaveSentWithSubject};
@@ -1,4 +1,4 @@
1
- import { b as EmailAddress } from "../packem_shared/types.d-wwpgA3to.js";
1
+ import { c as EmailAddress } from "../packem_shared/types.d-ejzh-xBP.js";
2
2
  import 'node:buffer';
3
3
  /**
4
4
  * Formats an email address as "Name &lt;email@example.com>" or just "email@example.com" if no name is provided.
@@ -1 +1 @@
1
- var m=Object.defineProperty;var r=(e,a)=>m(e,"name",{value:a,configurable:!0});import o from"../packem_shared/EmailError-zm2ffVav.js";import{s as l}from"../packem_shared/sanitize-header-wWav-Scu.js";import t from"./validation/validate-email.js";var i=Object.defineProperty,n=r((e,a)=>i(e,"name",{value:a,configurable:!0}),"m");const p=n(e=>{if(!t(e.email))throw new o("email",`Invalid email address: ${e.email}`);return e.name?`${l(e.name)} <${e.email}>`:e.email},"formatEmailAddress");export{p as default};
1
+ var m=Object.defineProperty;var r=(e,a)=>m(e,"name",{value:a,configurable:!0});import{s as o}from"../packem_shared/format-address-Cv6uWTS5.js";import t from"../packem_shared/EmailError-zm2ffVav.js";import i from"./validation/validate-email.js";var l=Object.defineProperty,n=r((e,a)=>l(e,"name",{value:a,configurable:!0}),"a");const u=n(e=>{if(!i(e.email))throw new t("email",`Invalid email address: ${e.email}`);if(e.name){const a=o(e.name);if(a)return`"${a}" <${e.email}>`}return e.email},"formatEmailAddress");export{u as default};
@@ -1,4 +1,4 @@
1
- import { b as EmailAddress } from "../packem_shared/types.d-wwpgA3to.js";
1
+ import { c as EmailAddress } from "../packem_shared/types.d-ejzh-xBP.js";
2
2
  import 'node:buffer';
3
3
  /**
4
4
  * Parses a string representation of an email address into an EmailAddress object.
@@ -0,0 +1,49 @@
1
+ import { R as Result } from "../packem_shared/types.d-ejzh-xBP.js";
2
+ import 'node:buffer';
3
+ /**
4
+ * A successful {@link Result} with its data narrowed to be present.
5
+ */
6
+ type OkResult<T> = Result<T> & {
7
+ data: T;
8
+ success: true;
9
+ };
10
+ /**
11
+ * Returns whether a {@link Result} succeeded, narrowing `data` to be present.
12
+ * @param result The result to test.
13
+ * @returns `true` when the result is successful.
14
+ */
15
+ declare const isOk: <T>(result: Result<T>) => result is OkResult<T>;
16
+ /**
17
+ * Returns whether a {@link Result} failed.
18
+ * @param result The result to test.
19
+ * @returns `true` when the result is a failure.
20
+ */
21
+ declare const isErr: <T>(result: Result<T>) => boolean;
22
+ /**
23
+ * Returns the data of a successful {@link Result}, or throws its error.
24
+ * @param result The result to unwrap.
25
+ * @returns The contained data.
26
+ * @throws {EmailError} The result's error (wrapped when it is not already an `Error`).
27
+ */
28
+ declare const unwrap: <T>(result: Result<T>) => T;
29
+ /**
30
+ * Returns the data of a successful {@link Result}, or a fallback when it failed.
31
+ * @param result The result to unwrap.
32
+ * @param fallback The value to return on failure.
33
+ * @returns The data, or the fallback.
34
+ */
35
+ declare const unwrapOr: <T>(result: Result<T>, fallback: T) => T;
36
+ /**
37
+ * Maps the data of a successful {@link Result}, passing failures through unchanged.
38
+ * @param result The result to map.
39
+ * @param function_ The mapper applied to the data on success.
40
+ * @returns A new result with the mapped data, or the original failure.
41
+ */
42
+ declare const mapOk: <T, U>(result: Result<T>, function_: (data: T) => U) => Result<U>;
43
+ /**
44
+ * Runs an async function and captures its outcome as a {@link Result}, never throwing.
45
+ * @param function_ The async function to run.
46
+ * @returns A successful result with the value, or a failed result with the thrown error.
47
+ */
48
+ declare const tryAsync: <T>(function_: () => Promise<T>) => Promise<Result<T>>;
49
+ export { OkResult, isErr, isOk, mapOk, tryAsync, unwrap, unwrapOr };
@@ -0,0 +1 @@
1
+ var c=Object.defineProperty;var a=(r,s)=>c(r,"name",{value:s,configurable:!0});import t from"../packem_shared/EmailError-zm2ffVav.js";var u=Object.defineProperty,e=a((r,s)=>u(r,"name",{value:s,configurable:!0}),"e");const i=e(r=>r.success,"isOk"),l=e(r=>!r.success,"isErr"),p=e(r=>{if(r.success)return r.data;throw r.error instanceof Error?r.error:new t("result","Called unwrap() on a failed result",{cause:r.error})},"unwrap"),d=e((r,s)=>r.success?r.data:s,"unwrapOr"),f=e((r,s)=>r.success?{data:s(r.data),success:!0}:{error:r.error,success:!1},"mapOk"),w=e(async r=>{try{return{data:await r(),success:!0}}catch(s){return{error:s,success:!1}}},"tryAsync");export{l as isErr,i as isOk,f as mapOk,w as tryAsync,p as unwrap,d as unwrapOr};
@@ -1,4 +1,4 @@
1
- import { F as FeatureFlags, E as EmailOptions } from "../../packem_shared/types.d-wwpgA3to.js";
1
+ import { F as FeatureFlags, E as EmailOptions } from "../../packem_shared/types.d-ejzh-xBP.js";
2
2
  import 'node:buffer';
3
3
  /**
4
4
  * A single capability that a message uses but the target provider cannot represent.
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Result of verifying an inbound webhook signature.
3
+ */
4
+ interface WebhookVerificationResult {
5
+ /**
6
+ * Machine-readable reason when {@link WebhookVerificationResult.valid} is `false`.
7
+ */
8
+ reason?: string;
9
+ /**
10
+ * Whether the signature (and, when applicable, the timestamp) is valid.
11
+ */
12
+ valid: boolean;
13
+ }
14
+ /**
15
+ * Headers passed to a webhook verifier. Either a plain record or a `Headers` instance.
16
+ *
17
+ * Lookups are case-insensitive.
18
+ */
19
+ type WebhookHeaders = Headers | Record<string, string | string[] | undefined>;
20
+ /**
21
+ * Shared options for verifiers that enforce a timestamp tolerance to guard against replay attacks.
22
+ */
23
+ interface TimestampToleranceOptions {
24
+ /**
25
+ * Maximum allowed difference, in seconds, between the signed timestamp and the current time.
26
+ *
27
+ * Set to `0` to disable the replay-protection window.
28
+ * @default 300
29
+ */
30
+ tolerance?: number;
31
+ }
32
+ /**
33
+ * Options for {@link verifyMailgunWebhook}.
34
+ *
35
+ * Mailgun nests these three fields under a `signature` object in the webhook JSON body.
36
+ */
37
+ interface MailgunWebhookOptions extends TimestampToleranceOptions {
38
+ /**
39
+ * Override the current time (milliseconds) — primarily for testing.
40
+ */
41
+ now?: number;
42
+ /**
43
+ * The HMAC value from `signature.signature`.
44
+ */
45
+ signature: string;
46
+ /**
47
+ * Your Mailgun HTTP webhook signing key (Settings → Webhooks).
48
+ */
49
+ signingKey: string;
50
+ /**
51
+ * The timestamp from `signature.timestamp` (unix seconds, as a string or number).
52
+ */
53
+ timestamp: number | string;
54
+ /**
55
+ * The token from `signature.token`.
56
+ */
57
+ token: string;
58
+ }
59
+ /**
60
+ * Verifies a [Mailgun](https://documentation.mailgun.com/docs/mailgun/user-manual/tracking-messages/#webhooks) webhook.
61
+ *
62
+ * Mailgun computes `HMAC-SHA256(key = signingKey, message = timestamp + token)` and sends the hex
63
+ * digest as `signature.signature`.
64
+ * @param options Verification inputs. See {@link MailgunWebhookOptions}.
65
+ * @returns The verification result.
66
+ */
67
+ declare const verifyMailgunWebhook: (options: MailgunWebhookOptions) => WebhookVerificationResult;
68
+ /**
69
+ * Options for {@link verifyPostmarkWebhook}.
70
+ *
71
+ * Postmark does not sign webhook payloads; instead it supports HTTP Basic Auth credentials embedded
72
+ * in the webhook URL (and IP allow-listing). This verifier checks the Basic Auth credentials.
73
+ */
74
+ interface PostmarkWebhookOptions {
75
+ /**
76
+ * The value of the incoming `Authorization` header (e.g. `Basic dXNlcjpwYXNz`).
77
+ */
78
+ authorization: string | undefined;
79
+ /**
80
+ * The password configured on the Postmark webhook URL.
81
+ */
82
+ password: string;
83
+ /**
84
+ * The username configured on the Postmark webhook URL.
85
+ */
86
+ username: string;
87
+ }
88
+ /**
89
+ * Verifies a [Postmark](https://postmarkapp.com/support/article/1213-securing-inbound-and-open-webhooks)
90
+ * webhook by validating its HTTP Basic Auth credentials.
91
+ * @param options Verification inputs. See {@link PostmarkWebhookOptions}.
92
+ * @returns The verification result.
93
+ */
94
+ declare const verifyPostmarkWebhook: (options: PostmarkWebhookOptions) => WebhookVerificationResult;
95
+ /**
96
+ * Options for {@link verifySendGridWebhook}.
97
+ */
98
+ interface SendGridWebhookOptions extends TimestampToleranceOptions {
99
+ /**
100
+ * Override the current time (milliseconds) — primarily for testing.
101
+ */
102
+ now?: number;
103
+ /**
104
+ * The raw, unparsed request body exactly as received.
105
+ */
106
+ payload: string;
107
+ /**
108
+ * The verification key from the SendGrid Event Webhook settings.
109
+ *
110
+ * Either the base64-encoded DER (SPKI) string SendGrid displays, or a full PEM block.
111
+ */
112
+ publicKey: string;
113
+ /**
114
+ * The value of the `X-Twilio-Email-Event-Webhook-Signature` header (base64 DER ECDSA signature).
115
+ */
116
+ signature: string;
117
+ /**
118
+ * The value of the `X-Twilio-Email-Event-Webhook-Timestamp` header (unix epoch seconds).
119
+ */
120
+ timestamp: string;
121
+ }
122
+ /**
123
+ * Verifies a [SendGrid Event Webhook](https://www.twilio.com/docs/sendgrid/for-developers/tracking-events/getting-started-event-webhook-security-features)
124
+ * using its ECDSA (prime256v1) signature, and rejects stale requests to prevent replay.
125
+ *
126
+ * The signed message is `timestamp + payload`. The signature header is the base64-encoded DER
127
+ * ECDSA signature. The timestamp is unix epoch seconds and must fall within `tolerance` of now.
128
+ * @param options Verification inputs. See {@link SendGridWebhookOptions}.
129
+ * @returns The verification result.
130
+ * @throws {EmailError} When the supplied public key cannot be parsed.
131
+ */
132
+ declare const verifySendGridWebhook: (options: SendGridWebhookOptions) => WebhookVerificationResult;
133
+ /**
134
+ * The subset of an Amazon SNS message envelope relevant to signature verification.
135
+ *
136
+ * AWS SES delivers events (deliveries, bounces, complaints) wrapped in SNS notifications.
137
+ */
138
+ interface SnsMessage {
139
+ [key: string]: unknown;
140
+ Message?: string;
141
+ MessageId?: string;
142
+ Signature?: string;
143
+ SignatureVersion?: string;
144
+ SigningCertURL?: string;
145
+ Subject?: string;
146
+ SubscribeURL?: string;
147
+ Timestamp?: string;
148
+ Token?: string;
149
+ TopicArn?: string;
150
+ Type?: string;
151
+ }
152
+ /**
153
+ * Resolves a signing-certificate URL to its PEM contents. Injectable for testing and caching.
154
+ */
155
+ type CertificateResolver = (url: string) => Promise<string> | string;
156
+ /**
157
+ * Options for {@link verifySnsMessage}.
158
+ */
159
+ interface SnsVerifyOptions {
160
+ /**
161
+ * Override how the signing certificate is fetched. Defaults to a `fetch`-based resolver that
162
+ * only accepts `https://*.amazonaws.com` URLs.
163
+ */
164
+ certificateResolver?: CertificateResolver;
165
+ }
166
+ /**
167
+ * Validates that a signing-certificate URL points at an AWS SNS signing host over HTTPS.
168
+ * @param url The `SigningCertURL` from the SNS message.
169
+ * @returns `true` when the URL is an acceptable AWS SNS certificate endpoint.
170
+ */
171
+ declare const isValidSigningCertUrl: (url: string) => boolean;
172
+ /**
173
+ * Verifies the RSA signature on an Amazon SNS message (used to wrap AWS SES events).
174
+ *
175
+ * Signature version `1` uses SHA1, version `2` uses SHA256. The signing certificate is fetched from
176
+ * `SigningCertURL` (validated to be an `sns.&lt;region>.amazonaws.com` HTTPS endpoint with no userinfo
177
+ * or explicit port) unless a custom {@link CertificateResolver} is supplied.
178
+ * @param message The parsed SNS message envelope.
179
+ * @param options Optional overrides. See {@link SnsVerifyOptions}.
180
+ * @returns The verification result.
181
+ * @throws {EmailError} When the certificate cannot be resolved.
182
+ */
183
+ declare const verifySnsMessage: (message: SnsMessage, options?: SnsVerifyOptions) => Promise<WebhookVerificationResult>;
184
+ /**
185
+ * Options for {@link verifyStandardWebhook}.
186
+ */
187
+ interface StandardWebhookOptions extends TimestampToleranceOptions {
188
+ /**
189
+ * The request headers, or the three signature headers as a plain record.
190
+ *
191
+ * Recognized header names (case-insensitive): `webhook-id` / `svix-id`,
192
+ * `webhook-timestamp` / `svix-timestamp`, and `webhook-signature` / `svix-signature`.
193
+ */
194
+ headers: WebhookHeaders;
195
+ /**
196
+ * Override the current time (milliseconds) — primarily for testing.
197
+ */
198
+ now?: number;
199
+ /**
200
+ * The raw, unparsed request body exactly as received.
201
+ *
202
+ * Parsing and re-serializing the body changes the bytes and breaks verification.
203
+ */
204
+ payload: string;
205
+ /**
206
+ * The signing secret. Supports the `whsec_`-prefixed, base64-encoded form used by Svix/Resend,
207
+ * or a raw secret string.
208
+ */
209
+ secret: string;
210
+ }
211
+ /**
212
+ * Verifies a webhook signed according to the [Standard Webhooks](https://www.standardwebhooks.com/) spec.
213
+ *
214
+ * This is the scheme used by Svix and, by extension, Resend. The signed content is
215
+ * `${id}.${timestamp}.${payload}`, HMAC-SHA256'd with the (base64-decoded) secret and base64-encoded.
216
+ * The `webhook-signature` header may contain multiple space-separated `v1,&lt;sig>` entries; a match
217
+ * against any one of them passes.
218
+ * @param options Verification inputs. See {@link StandardWebhookOptions}.
219
+ * @returns The verification result.
220
+ */
221
+ declare const verifyStandardWebhook: (options: StandardWebhookOptions) => WebhookVerificationResult;
222
+ /**
223
+ * Verifies a [Resend](https://resend.com/docs/dashboard/webhooks/verify-webhooks-requests) webhook.
224
+ *
225
+ * Resend uses Svix, so this is an alias for {@link verifyStandardWebhook} that accepts the
226
+ * `svix-*` headers.
227
+ * @param options Verification inputs. See {@link StandardWebhookOptions}.
228
+ * @returns The verification result.
229
+ */
230
+ declare const verifyResendWebhook: (options: StandardWebhookOptions) => WebhookVerificationResult;
231
+ export { type CertificateResolver, type MailgunWebhookOptions, type PostmarkWebhookOptions, type SendGridWebhookOptions, type SnsMessage, type SnsVerifyOptions, type StandardWebhookOptions, type TimestampToleranceOptions, type WebhookHeaders, type WebhookVerificationResult, isValidSigningCertUrl, verifyMailgunWebhook, verifyPostmarkWebhook, verifyResendWebhook, verifySendGridWebhook, verifySnsMessage, verifyStandardWebhook };
@@ -0,0 +1 @@
1
+ import{verifyMailgunWebhook as r}from"../packem_shared/verifyMailgunWebhook-Df7n2Quh.js";import{verifyPostmarkWebhook as f}from"../packem_shared/verifyPostmarkWebhook-D_eXt_Lq.js";import{verifySendGridWebhook as n}from"../packem_shared/verifySendGridWebhook-XOSj5yTe.js";import{isValidSigningCertUrl as d,verifySnsMessage as k}from"../packem_shared/isValidSigningCertUrl-CF_KuCAi.js";import{verifyResendWebhook as s,verifyStandardWebhook as v}from"../packem_shared/verifyStandardWebhook-DdUTlIVh.js";export{d as isValidSigningCertUrl,r as verifyMailgunWebhook,f as verifyPostmarkWebhook,s as verifyResendWebhook,n as verifySendGridWebhook,k as verifySnsMessage,v as verifyStandardWebhook};
package/package.json CHANGED
@@ -1,19 +1,31 @@
1
1
  {
2
2
  "name": "@visulima/email",
3
- "version": "1.0.0-alpha.34",
3
+ "version": "1.0.0-alpha.35",
4
4
  "description": "A comprehensive email library with multi-provider support, crypto utilities, and template engines",
5
5
  "keywords": [
6
6
  "ahasend",
7
+ "arc",
7
8
  "aws-ses",
8
9
  "azure",
10
+ "batch",
9
11
  "better-mail",
10
12
  "brevo",
11
13
  "crypto",
14
+ "deliverability",
12
15
  "disposable-email",
13
16
  "disposable-email-domains",
14
17
  "dkim",
18
+ "dmarc",
15
19
  "email",
16
20
  "encryption",
21
+ "i18n",
22
+ "inbound-email",
23
+ "jsx-email",
24
+ "liquid",
25
+ "list-unsubscribe",
26
+ "middleware",
27
+ "queue",
28
+ "webhook",
17
29
  "failover",
18
30
  "handlebars",
19
31
  "html-to-text",
@@ -97,6 +109,18 @@
97
109
  "types": "./dist/template-engines/html-to-text.d.ts",
98
110
  "default": "./dist/template-engines/html-to-text.js"
99
111
  },
112
+ "./template/liquid": {
113
+ "types": "./dist/template-engines/liquid.d.ts",
114
+ "default": "./dist/template-engines/liquid.js"
115
+ },
116
+ "./template/jsx-email": {
117
+ "types": "./dist/template-engines/jsx-email.d.ts",
118
+ "default": "./dist/template-engines/jsx-email.js"
119
+ },
120
+ "./template/i18n": {
121
+ "types": "./dist/template-engines/i18n.d.ts",
122
+ "default": "./dist/template-engines/i18n.js"
123
+ },
100
124
  "./providers/aws-ses": {
101
125
  "types": "./dist/providers/aws-ses/index.d.ts",
102
126
  "default": "./dist/providers/aws-ses/index.js"
@@ -149,6 +173,58 @@
149
173
  "types": "./dist/crypto/index.d.ts",
150
174
  "default": "./dist/crypto/index.js"
151
175
  },
176
+ "./render": {
177
+ "types": "./dist/render/index.d.ts",
178
+ "default": "./dist/render/index.js"
179
+ },
180
+ "./webhooks": {
181
+ "types": "./dist/webhooks/index.d.ts",
182
+ "default": "./dist/webhooks/index.js"
183
+ },
184
+ "./deliverability": {
185
+ "types": "./dist/deliverability/index.d.ts",
186
+ "default": "./dist/deliverability/index.js"
187
+ },
188
+ "./deliverability/dmarc-report": {
189
+ "types": "./dist/deliverability/dmarc-report.d.ts",
190
+ "default": "./dist/deliverability/dmarc-report.js"
191
+ },
192
+ "./inbound": {
193
+ "types": "./dist/inbound/index.d.ts",
194
+ "default": "./dist/inbound/index.js"
195
+ },
196
+ "./events": {
197
+ "types": "./dist/events/index.d.ts",
198
+ "default": "./dist/events/index.js"
199
+ },
200
+ "./middleware": {
201
+ "types": "./dist/middleware/index.d.ts",
202
+ "default": "./dist/middleware/index.js"
203
+ },
204
+ "./queue": {
205
+ "types": "./dist/queue/index.d.ts",
206
+ "default": "./dist/queue/index.js"
207
+ },
208
+ "./queue/unstorage": {
209
+ "types": "./dist/queue/unstorage-queue.d.ts",
210
+ "default": "./dist/queue/unstorage-queue.js"
211
+ },
212
+ "./queue/sqs": {
213
+ "types": "./dist/queue/sqs-queue.d.ts",
214
+ "default": "./dist/queue/sqs-queue.js"
215
+ },
216
+ "./queue/pg-boss": {
217
+ "types": "./dist/queue/pg-boss-queue.d.ts",
218
+ "default": "./dist/queue/pg-boss-queue.js"
219
+ },
220
+ "./queue/bullmq": {
221
+ "types": "./dist/queue/bullmq-queue.d.ts",
222
+ "default": "./dist/queue/bullmq-queue.js"
223
+ },
224
+ "./test": {
225
+ "types": "./dist/test/index.d.ts",
226
+ "default": "./dist/test/index.js"
227
+ },
152
228
  "./providers/sendgrid": {
153
229
  "types": "./dist/providers/sendgrid/index.d.ts",
154
230
  "default": "./dist/providers/sendgrid/index.js"
@@ -213,10 +289,26 @@
213
289
  "types": "./dist/providers/sweego/index.d.ts",
214
290
  "default": "./dist/providers/sweego/index.js"
215
291
  },
292
+ "./providers/mailchannels": {
293
+ "types": "./dist/providers/mailchannels/index.d.ts",
294
+ "default": "./dist/providers/mailchannels/index.js"
295
+ },
296
+ "./providers/cloudflare-email": {
297
+ "types": "./dist/providers/cloudflare-email/index.d.ts",
298
+ "default": "./dist/providers/cloudflare-email/index.js"
299
+ },
300
+ "./providers/loops": {
301
+ "types": "./dist/providers/loops/index.d.ts",
302
+ "default": "./dist/providers/loops/index.js"
303
+ },
216
304
  "./utils/parse-address": {
217
305
  "types": "./dist/utils/parse-address.d.ts",
218
306
  "default": "./dist/utils/parse-address.js"
219
307
  },
308
+ "./utils/result": {
309
+ "types": "./dist/utils/result.d.ts",
310
+ "default": "./dist/utils/result.js"
311
+ },
220
312
  "./utils/format-email-address": {
221
313
  "types": "./dist/utils/format-email-address.d.ts",
222
314
  "default": "./dist/utils/format-email-address.js"
@@ -265,7 +357,7 @@
265
357
  "CHANGELOG.md"
266
358
  ],
267
359
  "dependencies": {
268
- "@visulima/disposable-email-domains": "1.0.0-alpha.15",
360
+ "@visulima/disposable-email-domains": "1.0.0-alpha.16",
269
361
  "html-to-text": "^10.0.0",
270
362
  "ical-generator": "10.2.0",
271
363
  "lru-cache": "11.4.0",
@@ -276,10 +368,15 @@
276
368
  "@react-email/render": "^2.0.8",
277
369
  "@vue-email/render": "0.0.9",
278
370
  "asn1js": "3.0.10",
371
+ "fast-xml-parser": "^4.5.0",
279
372
  "handlebars": "4.7.9",
373
+ "jsx-email": "^2.0.0",
374
+ "juice": "^11.0.0",
375
+ "liquidjs": "^10.0.0",
280
376
  "mjml": "5.2.1",
281
377
  "nodemailer": ">=7",
282
- "pkijs": "3.4.0"
378
+ "pkijs": "3.4.0",
379
+ "unstorage": "^1.13.0"
283
380
  },
284
381
  "peerDependenciesMeta": {
285
382
  "@opentelemetry/api": {
@@ -294,9 +391,21 @@
294
391
  "asn1js": {
295
392
  "optional": true
296
393
  },
394
+ "fast-xml-parser": {
395
+ "optional": true
396
+ },
297
397
  "handlebars": {
298
398
  "optional": true
299
399
  },
400
+ "jsx-email": {
401
+ "optional": true
402
+ },
403
+ "juice": {
404
+ "optional": true
405
+ },
406
+ "liquidjs": {
407
+ "optional": true
408
+ },
300
409
  "mjml": {
301
410
  "optional": true
302
411
  },
@@ -305,6 +414,9 @@
305
414
  },
306
415
  "pkijs": {
307
416
  "optional": true
417
+ },
418
+ "unstorage": {
419
+ "optional": true
308
420
  }
309
421
  },
310
422
  "engines": {