@rudderjs/mail 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,12 +34,7 @@ export default {
34
34
  } satisfies MailConfig
35
35
  ```
36
36
 
37
- ```ts
38
- // bootstrap/providers.ts
39
- import { MailProvider } from '@rudderjs/mail'
40
-
41
- export default [MailProvider]
42
- ```
37
+ `MailProvider` is picked up by [auto-discovery](https://github.com/rudderjs/rudder/blob/main/docs/guide/service-providers.md#auto-discovery) — `pnpm rudder providers:discover` is all that's needed.
43
38
 
44
39
  ## Defining Mailables
45
40
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Overview
4
4
 
5
- Mail facade + mailable abstraction with built-in `log` (for dev) and `smtp` drivers. Laravel's `Mail` facade for Node. Mailables are classes with a `build()` method that configures subject/to/cc/bcc/html/text/attachments fluently. Integrates with `@rudderjs/notification` — the `mail` channel accepts `Mailable` instances.
5
+ Mail facade + mailable abstraction with built-in `log` (for dev) and `smtp` drivers. Laravel's `Mail` facade for Node. Mailables are classes with a `build()` method that configures subject/html/text fluently — recipients (`to`/`cc`/`bcc`) live on the `Mail.to(...)` pending-send builder, not on the Mailable. Integrates with `@rudderjs/notification` — the `mail` channel accepts `Mailable` instances.
6
6
 
7
7
  ## Key Patterns
8
8
 
@@ -36,7 +36,6 @@ export class WelcomeMail extends Mailable {
36
36
 
37
37
  build() {
38
38
  return this
39
- .to(this.user.email, this.user.name)
40
39
  .subject(`Welcome, ${this.user.name}!`)
41
40
  .html(`<h1>Hi ${this.user.name}</h1><p>Thanks for signing up.</p>`)
42
41
  .text(`Hi ${this.user.name}\n\nThanks for signing up.`)
@@ -49,27 +48,17 @@ export class WelcomeMail extends Mailable {
49
48
  ```ts
50
49
  import { Mail } from '@rudderjs/mail'
51
50
 
52
- // Fluent
51
+ // Fluent — Mail.to(...addresses) accepts a spread of email addresses
53
52
  await Mail.to('user@example.com').send(new WelcomeMail(user))
54
- await Mail.to(user.email, user.name).cc('team@example.com').bcc('log@example.com').send(new WelcomeMail(user))
53
+ await Mail.to(user.email).cc('team@example.com').bcc('log@example.com').send(new WelcomeMail(user))
55
54
 
56
55
  // Send to multiple recipients
57
- await Mail.to(['a@example.com', 'b@example.com']).send(new Announcement())
56
+ await Mail.to('a@example.com', 'b@example.com').send(new Announcement())
58
57
 
59
- // Target a specific mailer
60
- await Mail.mailer('log').to(user.email).send(new WelcomeMail(user))
61
- ```
62
-
63
- ### Attachments
64
-
65
- ```ts
66
- build() {
67
- return this
68
- .subject('Invoice')
69
- .html('<p>See attached.</p>')
70
- .attach('storage/invoices/123.pdf') // from disk
71
- .attachData(pdfBuffer, 'invoice.pdf', { contentType: 'application/pdf' }) // from buffer
72
- }
58
+ // Queue for background sending (requires @rudderjs/queue)
59
+ await Mail.to(user.email).queue(new WelcomeMail(user))
60
+ await Mail.to(user.email).onQueue('emails').queue(new WelcomeMail(user))
61
+ await Mail.to(user.email).later(60_000, new WelcomeMail(user)) // delay in ms
73
62
  ```
74
63
 
75
64
  ### Testing
@@ -81,9 +70,11 @@ const fake = Mail.fake()
81
70
  await Mail.to('user@example.com').send(new WelcomeMail(user))
82
71
 
83
72
  fake.assertSent(WelcomeMail)
84
- fake.assertSent(WelcomeMail, m => m.to[0] === 'user@example.com')
73
+ // Predicate receives the recorded entry: { mailable, options }
74
+ fake.assertSent(WelcomeMail, e => e.options.to[0] === 'user@example.com')
85
75
  fake.assertSentCount(1)
86
76
  fake.assertNotSent(PasswordResetMail)
77
+ fake.assertNothingSent()
87
78
  fake.restore()
88
79
  ```
89
80
 
@@ -95,7 +86,7 @@ fake.restore()
95
86
  - **HTML without text fallback.** Best practice: always set both `.html()` and `.text()`. Some clients (plain-text subscribers, accessibility tools) don't render HTML.
96
87
  - **Forgetting `fake.restore()` in tests.** Fake state persists — subsequent tests assert against stale sends. Always restore in `afterEach`.
97
88
  - **Telescope records mail.** `@rudderjs/telescope`'s `mail` collector records every send with subject, recipients, html, attachments. Redact sensitive fields via config if needed.
98
- - **Method-as-property bug.** `mailable['subject']` returns the fluent setter function, not the value. Use `mailable.getSubject()` or read the private `_subject` field. This has bitten several collectors — don't assume bracket-access returns values for fluent builder classes.
89
+ - **Method-as-property bug.** `mailable['subject']` returns the fluent setter function, not the value. Read the protected `_subject` field directly, or call `await mailable.compile()` to get the resolved `MailMessage` (`{ subject, html, text }`). This has bitten several collectors — don't assume bracket-access returns values for fluent builder classes.
99
90
 
100
91
  ## Key Imports
101
92
 
@@ -4,6 +4,15 @@ import type { MailAdapter, SendOptions } from './index.js';
4
4
  * Tries mailers in order — if the first fails, falls back to the next.
5
5
  * All configured mailers must fail before the send is considered a failure.
6
6
  *
7
+ * **Retry-window contract.** A mailer that fails is marked in
8
+ * `_lastFailures` with the failure timestamp and skipped for the next
9
+ * `retryAfter` seconds **on every send**, regardless of the underlying
10
+ * issue resolving. Failures are not auto-cleared by a subsequent success
11
+ * (a different mailer succeeding doesn't reset the failed mailer's
12
+ * timestamp). This is intended backoff, not a bug — but it means a single
13
+ * transient error gates that mailer for the entire window. To force a
14
+ * recheck, restart the process or construct a new `FailoverAdapter`.
15
+ *
7
16
  * @example
8
17
  * // In config/mail.ts:
9
18
  * mailers: {
@@ -1 +1 @@
1
- {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../src/failover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI1D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAgB,YAAW,WAAW;IAI/C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,aAAa,CAA4B;gBAG9B,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,SAAK;IAG7B,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBpE"}
1
+ {"version":3,"file":"failover.d.ts","sourceRoot":"","sources":["../src/failover.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAI1D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,eAAgB,YAAW,WAAW;IAI/C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,aAAa,CAA4B;gBAG9B,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,SAAK;IAG7B,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAyBpE"}
package/dist/failover.js CHANGED
@@ -3,6 +3,15 @@
3
3
  * Tries mailers in order — if the first fails, falls back to the next.
4
4
  * All configured mailers must fail before the send is considered a failure.
5
5
  *
6
+ * **Retry-window contract.** A mailer that fails is marked in
7
+ * `_lastFailures` with the failure timestamp and skipped for the next
8
+ * `retryAfter` seconds **on every send**, regardless of the underlying
9
+ * issue resolving. Failures are not auto-cleared by a subsequent success
10
+ * (a different mailer succeeding doesn't reset the failed mailer's
11
+ * timestamp). This is intended backoff, not a bug — but it means a single
12
+ * transient error gates that mailer for the entire window. To force a
13
+ * recheck, restart the process or construct a new `FailoverAdapter`.
14
+ *
6
15
  * @example
7
16
  * // In config/mail.ts:
8
17
  * mailers: {
@@ -1 +1 @@
1
- {"version":3,"file":"failover.js","sourceRoot":"","sources":["../src/failover.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAE/D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,eAAe;IAIP;IACA;IAJX,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD,YACmB,SAAwB,EACxB,cAAc,EAAE;QADhB,cAAS,GAAT,SAAS,CAAe;QACxB,gBAAW,GAAX,WAAW,CAAK;IAChC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,QAAkB,EAAE,OAAoB;QACjD,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,gEAAgE;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC7C,IAAI,WAAW,KAAK,SAAS,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;gBAC7E,SAAQ;YACV,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAChD,OAAM,CAAC,UAAU;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/D,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"failover.js","sourceRoot":"","sources":["../src/failover.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,eAAe;IAIP;IACA;IAJX,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEjD,YACmB,SAAwB,EACxB,cAAc,EAAE;QADhB,cAAS,GAAT,SAAS,CAAe;QACxB,gBAAW,GAAX,WAAW,CAAK;IAChC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,QAAkB,EAAE,OAAoB;QACjD,MAAM,MAAM,GAAY,EAAE,CAAA;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,gEAAgE;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAC7C,IAAI,WAAW,KAAK,SAAS,IAAI,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC;gBAC7E,SAAQ;YACV,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAChD,OAAM,CAAC,UAAU;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAClE,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,uCAAuC;YACvC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC/D,CAAA;IACH,CAAC;CACF"}
package/dist/fake.d.ts CHANGED
@@ -19,7 +19,16 @@ export declare class FakeMailAdapter implements MailAdapter {
19
19
  private readonly _sent;
20
20
  private readonly _queued;
21
21
  send(mailable: Mailable, options: SendOptions): Promise<void>;
22
- /** Record a mailable as queued (called internally by the queue integration). */
22
+ /**
23
+ * Record a mailable as queued. **@internal** — invoked by the
24
+ * `dispatchMailJob` queue dispatcher (`packages/mail/src/queued.ts`) when
25
+ * `Mail.to(...).queue(...)` or `.later(...)` is called against an active
26
+ * fake. The dispatcher detects the fake via `MailRegistry.get() instanceof
27
+ * FakeMailAdapter` and calls this method instead of enqueueing a job.
28
+ *
29
+ * Do not call from user code — use `assertQueued()` / `queued()` to
30
+ * inspect what was queued, not this method.
31
+ */
23
32
  recordQueued(mailable: Mailable, options: SendOptions): void;
24
33
  /** Assert that a mailable of the given class was sent, optionally matching a predicate. */
25
34
  assertSent(mailableClass: new (...args: unknown[]) => Mailable, predicate?: (entry: {
@@ -1 +1 @@
1
- {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4D;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAI5E,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE,gFAAgF;IAChF,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAM5D,2FAA2F;IAC3F,UAAU,CACR,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,GAC3E,IAAI;IAQP,sEAAsE;IACtE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQpC,8DAA8D;IAC9D,aAAa,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GAAG,IAAI;IASxE,iDAAiD;IACjD,iBAAiB,IAAI,IAAI;IAUzB,4DAA4D;IAC5D,YAAY,CACV,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,GAC3E,IAAI;IAQP,gEAAgE;IAChE,eAAe,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GAAG,IAAI;IAS1E,mDAAmD;IACnD,mBAAmB,IAAI,IAAI;IAU3B,4DAA4D;IAC5D,IAAI,CACF,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GACnD,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAKtD,8DAA8D;IAC9D,MAAM,CACJ,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GACnD,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAOtD,2DAA2D;IAC3D,OAAO,IAAI,IAAI;IAMf,8EAA8E;IAC9E,MAAM,CAAC,IAAI,IAAI,eAAe;IAQ9B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;CAUxB"}
1
+ {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4D;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAI5E,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnE;;;;;;;;;OASG;IACH,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAM5D,2FAA2F;IAC3F,UAAU,CACR,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,GAC3E,IAAI;IAQP,sEAAsE;IACtE,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQpC,8DAA8D;IAC9D,aAAa,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GAAG,IAAI;IASxE,iDAAiD;IACjD,iBAAiB,IAAI,IAAI;IAUzB,4DAA4D;IAC5D,YAAY,CACV,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,EACnD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,GAC3E,IAAI;IAQP,gEAAgE;IAChE,eAAe,CAAC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GAAG,IAAI;IAS1E,mDAAmD;IACnD,mBAAmB,IAAI,IAAI;IAU3B,4DAA4D;IAC5D,IAAI,CACF,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GACnD,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAKtD,8DAA8D;IAC9D,MAAM,CACJ,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,QAAQ,GACnD,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;IAOtD,2DAA2D;IAC3D,OAAO,IAAI,IAAI;IAMf,8EAA8E;IAC9E,MAAM,CAAC,IAAI,IAAI,eAAe;IAQ9B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,eAAe;CAUxB"}
package/dist/fake.js CHANGED
@@ -23,7 +23,16 @@ export class FakeMailAdapter {
23
23
  this._sent.push({ mailable, options });
24
24
  }
25
25
  // ─── Queued mail tracking ────────────────────────────────
26
- /** Record a mailable as queued (called internally by the queue integration). */
26
+ /**
27
+ * Record a mailable as queued. **@internal** — invoked by the
28
+ * `dispatchMailJob` queue dispatcher (`packages/mail/src/queued.ts`) when
29
+ * `Mail.to(...).queue(...)` or `.later(...)` is called against an active
30
+ * fake. The dispatcher detects the fake via `MailRegistry.get() instanceof
31
+ * FakeMailAdapter` and calls this method instead of enqueueing a job.
32
+ *
33
+ * Do not call from user code — use `assertQueued()` / `queued()` to
34
+ * inspect what was queued, not this method.
35
+ */
27
36
  recordQueued(mailable, options) {
28
37
  this._queued.push({ mailable, options });
29
38
  }
package/dist/fake.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fake.js","sourceRoot":"","sources":["../src/fake.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -33,15 +33,30 @@ export declare class MailRegistry {
33
33
  /** @internal — clears the registered adapter and resets from. Used for testing. */
34
34
  static reset(): void;
35
35
  }
36
+ /**
37
+ * Fluent builder returned by `Mail.to(...)`. Configure the recipient lists
38
+ * and queue, then terminate with `.send()`, `.queue()`, or `.later()`.
39
+ *
40
+ * **Builder contract:**
41
+ * - `cc()` / `bcc()` **replace** the previous list — they do NOT accumulate.
42
+ * Pass all addresses in one call: `.cc('a@x', 'b@x')`, not two separate
43
+ * `.cc('a@x').cc('b@x')`.
44
+ * - `onQueue()` is only honored by `.queue()` and `.later()`; ignored by `.send()`.
45
+ * - Call order between `cc`/`bcc`/`onQueue` doesn't matter, but `send`/
46
+ * `queue`/`later` must be last — they execute the operation and return a
47
+ * `Promise<void>`, not the builder.
48
+ */
36
49
  export declare class MailPendingSend {
37
50
  private readonly _to;
38
51
  private _cc;
39
52
  private _bcc;
40
53
  private _queue?;
41
54
  constructor(_to: string[]);
55
+ /** Set the CC list. **Replaces** the previous list — pass all addresses in one call. */
42
56
  cc(...addresses: string[]): this;
57
+ /** Set the BCC list. **Replaces** the previous list — pass all addresses in one call. */
43
58
  bcc(...addresses: string[]): this;
44
- /** Specify which queue to use for queued mail. */
59
+ /** Specify which queue to use for queued mail. Honored by `queue()`/`later()`; ignored by `send()`. */
45
60
  onQueue(name: string): this;
46
61
  send(mailable: Mailable): Promise<void>;
47
62
  /** Queue the mailable for background sending. Requires `@rudderjs/queue`. */
@@ -69,21 +84,9 @@ export interface MailConfig {
69
84
  /** Named mailer connections */
70
85
  mailers: Record<string, MailConnectionConfig>;
71
86
  }
72
- export interface NodemailerConfig {
73
- driver: 'smtp';
74
- host: string;
75
- port: number;
76
- username?: string;
77
- password?: string;
78
- encryption?: 'tls' | 'ssl' | 'none';
79
- }
80
87
  export declare class LogAdapter implements MailAdapter {
81
88
  send(mailable: Mailable, options: SendOptions): Promise<void>;
82
89
  }
83
- export declare function nodemailer(config: NodemailerConfig, from: {
84
- address: string;
85
- name?: string;
86
- }): MailAdapterProvider;
87
90
  /**
88
91
  * Returns a MailServiceProvider class configured for the given mail config.
89
92
  *
@@ -102,4 +105,6 @@ export { FailoverAdapter } from './failover.js';
102
105
  export { MarkdownMailable } from './markdown.js';
103
106
  export { mailPreview } from './preview.js';
104
107
  export { FakeMailAdapter } from './fake.js';
108
+ export { nodemailer, isNodemailerConfig } from './nodemailer-adapter.js';
109
+ export type { NodemailerConfig } from './nodemailer-adapter.js';
105
110
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ServiceProvider, config } from '@rudderjs/core';
2
- import { resolveOptionalPeer } from '@rudderjs/core';
2
+ import { isNodemailerConfig, nodemailer } from './nodemailer-adapter.js';
3
3
  export { Mailable } from './mailable.js';
4
4
  // ─── Mail Registry ─────────────────────────────────────────
5
5
  export class MailRegistry {
@@ -16,6 +16,19 @@ export class MailRegistry {
16
16
  }
17
17
  }
18
18
  // ─── Pending Send (fluent builder) ─────────────────────────
19
+ /**
20
+ * Fluent builder returned by `Mail.to(...)`. Configure the recipient lists
21
+ * and queue, then terminate with `.send()`, `.queue()`, or `.later()`.
22
+ *
23
+ * **Builder contract:**
24
+ * - `cc()` / `bcc()` **replace** the previous list — they do NOT accumulate.
25
+ * Pass all addresses in one call: `.cc('a@x', 'b@x')`, not two separate
26
+ * `.cc('a@x').cc('b@x')`.
27
+ * - `onQueue()` is only honored by `.queue()` and `.later()`; ignored by `.send()`.
28
+ * - Call order between `cc`/`bcc`/`onQueue` doesn't matter, but `send`/
29
+ * `queue`/`later` must be last — they execute the operation and return a
30
+ * `Promise<void>`, not the builder.
31
+ */
19
32
  export class MailPendingSend {
20
33
  _to;
21
34
  _cc = [];
@@ -24,9 +37,11 @@ export class MailPendingSend {
24
37
  constructor(_to) {
25
38
  this._to = _to;
26
39
  }
40
+ /** Set the CC list. **Replaces** the previous list — pass all addresses in one call. */
27
41
  cc(...addresses) { this._cc = addresses; return this; }
42
+ /** Set the BCC list. **Replaces** the previous list — pass all addresses in one call. */
28
43
  bcc(...addresses) { this._bcc = addresses; return this; }
29
- /** Specify which queue to use for queued mail. */
44
+ /** Specify which queue to use for queued mail. Honored by `queue()`/`later()`; ignored by `send()`. */
30
45
  onQueue(name) { this._queue = name; return this; }
31
46
  async send(mailable) {
32
47
  const adapter = MailRegistry.get();
@@ -67,11 +82,6 @@ export class Mail {
67
82
  return FakeMailAdapter.fake();
68
83
  }
69
84
  }
70
- function isNodemailerConfig(config) {
71
- return (config.driver === 'smtp' &&
72
- typeof config.host === 'string' &&
73
- typeof config.port === 'number');
74
- }
75
85
  // ─── Built-in Log Adapter ──────────────────────────────────
76
86
  export class LogAdapter {
77
87
  async send(mailable, options) {
@@ -88,67 +98,6 @@ export class LogAdapter {
88
98
  console.log(`[RudderJS Mail] ${line}\n`);
89
99
  }
90
100
  }
91
- class NodemailerAdapter {
92
- config;
93
- from;
94
- _transporter = null;
95
- constructor(config, from) {
96
- this.config = config;
97
- this.from = from;
98
- }
99
- async transporter() {
100
- if (!this._transporter) {
101
- this._transporter = (async () => {
102
- let nodemailer;
103
- try {
104
- nodemailer = await resolveOptionalPeer('nodemailer');
105
- }
106
- catch {
107
- throw new Error('[RudderJS Mail] SMTP driver requires "nodemailer". Install it with: pnpm add nodemailer');
108
- }
109
- const secure = this.config.encryption === 'ssl';
110
- const transportConfig = {
111
- host: this.config.host,
112
- port: this.config.port,
113
- secure,
114
- };
115
- if (this.config.username) {
116
- transportConfig.auth = { user: this.config.username, pass: this.config.password ?? '' };
117
- }
118
- return nodemailer.createTransport(transportConfig);
119
- })();
120
- }
121
- return this._transporter;
122
- }
123
- async send(mailable, options) {
124
- const msg = await mailable.compile();
125
- const fromStr = this.from.name
126
- ? `${this.from.name} <${this.from.address}>`
127
- : this.from.address;
128
- const transporter = await this.transporter();
129
- const message = {
130
- from: fromStr,
131
- to: options.to.join(', '),
132
- subject: msg.subject,
133
- };
134
- if (options.cc && options.cc.length)
135
- message.cc = options.cc.join(', ');
136
- if (options.bcc && options.bcc.length)
137
- message.bcc = options.bcc.join(', ');
138
- if (msg.html !== undefined)
139
- message.html = msg.html;
140
- if (msg.text !== undefined)
141
- message.text = msg.text;
142
- await transporter.sendMail(message);
143
- }
144
- }
145
- export function nodemailer(config, from) {
146
- return {
147
- create() {
148
- return new NodemailerAdapter(config, from);
149
- },
150
- };
151
- }
152
101
  // ─── Service Provider Factory ──────────────────────────────
153
102
  /**
154
103
  * Returns a MailServiceProvider class configured for the given mail config.
@@ -210,4 +159,5 @@ export { FailoverAdapter } from './failover.js';
210
159
  export { MarkdownMailable } from './markdown.js';
211
160
  export { mailPreview } from './preview.js';
212
161
  export { FakeMailAdapter } from './fake.js';
162
+ export { nodemailer, isNodemailerConfig } from './nodemailer-adapter.js';
213
163
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -17,5 +17,11 @@ export declare abstract class Mailable {
17
17
  abstract build(): this | Promise<this>;
18
18
  /** Called by the adapter — builds then returns the compiled message */
19
19
  compile(): Promise<MailMessage>;
20
+ /**
21
+ * @internal — read the current subject. Used by `MarkdownMailable.compile()`
22
+ * which overrides `compile()` and needs to read the subject set by the
23
+ * subclass's `build()` without going through the closed `compile()` flow.
24
+ */
25
+ protected getSubject(): string;
20
26
  }
21
27
  //# sourceMappingURL=mailable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mailable.d.ts","sourceRoot":"","sources":["../src/mailable.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,MAAM,CAAA;CAChB;AAID,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,QAAQ,SAAK;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAC,CAAQ;IAEtB,4BAA4B;IAC5B,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAExC,wBAAwB;IACxB,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAElC,8BAA8B;IAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAElC,qFAAqF;IACrF,QAAQ,CAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC,uEAAuE;IACjE,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;CAOtC"}
1
+ {"version":3,"file":"mailable.d.ts","sourceRoot":"","sources":["../src/mailable.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,MAAM,CAAA;IACf,IAAI,CAAC,EAAI,MAAM,CAAA;CAChB;AAID,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,QAAQ,SAAK;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,KAAK,CAAC,CAAQ;IAEtB,4BAA4B;IAC5B,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAExC,wBAAwB;IACxB,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAElC,8BAA8B;IAC9B,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAElC,qFAAqF;IACrF,QAAQ,CAAC,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtC,uEAAuE;IACjE,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC;IAQrC;;;;OAIG;IACH,SAAS,CAAC,UAAU,IAAI,MAAM;CAC/B"}
package/dist/mailable.js CHANGED
@@ -20,5 +20,11 @@ export class Mailable {
20
20
  msg.text = this._text;
21
21
  return msg;
22
22
  }
23
+ /**
24
+ * @internal — read the current subject. Used by `MarkdownMailable.compile()`
25
+ * which overrides `compile()` and needs to read the subject set by the
26
+ * subclass's `build()` without going through the closed `compile()` flow.
27
+ */
28
+ getSubject() { return this._subject; }
23
29
  }
24
30
  //# sourceMappingURL=mailable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mailable.js","sourceRoot":"","sources":["../src/mailable.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAQ9D,8DAA8D;AAE9D,MAAM,OAAgB,QAAQ;IAClB,QAAQ,GAAG,EAAE,CAAA;IACf,KAAK,CAAS;IACd,KAAK,CAAS;IAEtB,4BAA4B;IAClB,OAAO,CAAC,OAAe,IAAU,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAEjF,wBAAwB;IACd,IAAI,CAAC,IAAY,IAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAErE,8BAA8B;IACpB,IAAI,CAAC,IAAY,IAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAKrE,uEAAuE;IACvE,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,MAAM,GAAG,GAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACnD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
1
+ {"version":3,"file":"mailable.js","sourceRoot":"","sources":["../src/mailable.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAQ9D,8DAA8D;AAE9D,MAAM,OAAgB,QAAQ;IAClB,QAAQ,GAAG,EAAE,CAAA;IACf,KAAK,CAAS;IACd,KAAK,CAAS;IAEtB,4BAA4B;IAClB,OAAO,CAAC,OAAe,IAAU,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAEjF,wBAAwB;IACd,IAAI,CAAC,IAAY,IAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAErE,8BAA8B;IACpB,IAAI,CAAC,IAAY,IAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAKrE,uEAAuE;IACvE,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,MAAM,GAAG,GAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACnD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QACnD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED;;;;OAIG;IACO,UAAU,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAA,CAAC,CAAC;CACxD"}
package/dist/markdown.js CHANGED
@@ -110,7 +110,7 @@ export class MarkdownMailable extends Mailable {
110
110
  // Wrap in responsive email layout
111
111
  const html = _wrapLayout(bodyHtml, this._theme);
112
112
  return {
113
- subject: this._subject,
113
+ subject: this.getSubject(),
114
114
  html,
115
115
  text: _stripHtml(bodyHtml),
116
116
  };
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { MailAdapterProvider, MailConnectionConfig } from './index.js';
2
+ export interface NodemailerConfig {
3
+ driver: 'smtp';
4
+ host: string;
5
+ port: number;
6
+ username?: string;
7
+ password?: string;
8
+ encryption?: 'tls' | 'ssl' | 'none';
9
+ }
10
+ /**
11
+ * Type guard used by `MailProvider.boot()` to narrow a generic
12
+ * `MailConnectionConfig` to a valid `NodemailerConfig` before constructing
13
+ * an SMTP adapter. Returns false when required fields are missing or
14
+ * `driver !== 'smtp'`.
15
+ */
16
+ export declare function isNodemailerConfig(config: MailConnectionConfig): config is MailConnectionConfig & NodemailerConfig;
17
+ /**
18
+ * Build a `MailAdapterProvider` that constructs an SMTP-backed adapter
19
+ * on demand. Used by `MailProvider.boot()` and by `FailoverAdapter`
20
+ * config expansion to lazy-init nodemailer only when SMTP is in play.
21
+ */
22
+ export declare function nodemailer(config: NodemailerConfig, from: {
23
+ address: string;
24
+ name?: string;
25
+ }): MailAdapterProvider;
26
+ //# sourceMappingURL=nodemailer-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodemailer-adapter.d.ts","sourceRoot":"","sources":["../src/nodemailer-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAe,mBAAmB,EAAE,oBAAoB,EAAe,MAAM,YAAY,CAAA;AAIrG,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAO,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,IAAI,EAAS,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAI,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAI,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAA;CACpC;AA2BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,GAC3B,MAAM,IAAI,oBAAoB,GAAG,gBAAgB,CAMnD;AAkFD;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,mBAAmB,CAMrB"}
@@ -0,0 +1,87 @@
1
+ import { resolveOptionalPeer } from '@rudderjs/core';
2
+ // ─── Config guard ──────────────────────────────────────────
3
+ /**
4
+ * Type guard used by `MailProvider.boot()` to narrow a generic
5
+ * `MailConnectionConfig` to a valid `NodemailerConfig` before constructing
6
+ * an SMTP adapter. Returns false when required fields are missing or
7
+ * `driver !== 'smtp'`.
8
+ */
9
+ export function isNodemailerConfig(config) {
10
+ return (config.driver === 'smtp' &&
11
+ typeof config.host === 'string' &&
12
+ typeof config.port === 'number');
13
+ }
14
+ // ─── Adapter ───────────────────────────────────────────────
15
+ class NodemailerAdapter {
16
+ config;
17
+ from;
18
+ _transporter = null;
19
+ constructor(config, from) {
20
+ this.config = config;
21
+ this.from = from;
22
+ }
23
+ /**
24
+ * Lazy `nodemailer` peer load — the package is optional, only required
25
+ * when SMTP is the active driver. Memoized so we don't repeat the
26
+ * resolveOptionalPeer call on every send.
27
+ */
28
+ async transporter() {
29
+ if (!this._transporter) {
30
+ this._transporter = (async () => {
31
+ let nodemailer;
32
+ try {
33
+ nodemailer = await resolveOptionalPeer('nodemailer');
34
+ }
35
+ catch {
36
+ throw new Error('[RudderJS Mail] SMTP driver requires "nodemailer". Install it with: pnpm add nodemailer');
37
+ }
38
+ const secure = this.config.encryption === 'ssl';
39
+ const transportConfig = {
40
+ host: this.config.host,
41
+ port: this.config.port,
42
+ secure,
43
+ };
44
+ if (this.config.username) {
45
+ transportConfig.auth = { user: this.config.username, pass: this.config.password ?? '' };
46
+ }
47
+ return nodemailer.createTransport(transportConfig);
48
+ })();
49
+ }
50
+ return this._transporter;
51
+ }
52
+ async send(mailable, options) {
53
+ const msg = await mailable.compile();
54
+ const fromStr = this.from.name
55
+ ? `${this.from.name} <${this.from.address}>`
56
+ : this.from.address;
57
+ const transporter = await this.transporter();
58
+ const message = {
59
+ from: fromStr,
60
+ to: options.to.join(', '),
61
+ subject: msg.subject,
62
+ };
63
+ if (options.cc && options.cc.length)
64
+ message.cc = options.cc.join(', ');
65
+ if (options.bcc && options.bcc.length)
66
+ message.bcc = options.bcc.join(', ');
67
+ if (msg.html !== undefined)
68
+ message.html = msg.html;
69
+ if (msg.text !== undefined)
70
+ message.text = msg.text;
71
+ await transporter.sendMail(message);
72
+ }
73
+ }
74
+ // ─── Factory ───────────────────────────────────────────────
75
+ /**
76
+ * Build a `MailAdapterProvider` that constructs an SMTP-backed adapter
77
+ * on demand. Used by `MailProvider.boot()` and by `FailoverAdapter`
78
+ * config expansion to lazy-init nodemailer only when SMTP is in play.
79
+ */
80
+ export function nodemailer(config, from) {
81
+ return {
82
+ create() {
83
+ return new NodemailerAdapter(config, from);
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=nodemailer-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodemailer-adapter.js","sourceRoot":"","sources":["../src/nodemailer-adapter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queued.d.ts","sourceRoot":"","sources":["../src/queued.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAS7C;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,EACpB,YAAY,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,IAAI,CAAC,CAiCf"}
1
+ {"version":3,"file":"queued.d.ts","sourceRoot":"","sources":["../src/queued.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAS7C;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,EACpB,YAAY,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,IAAI,CAAC,CAoCf"}
package/dist/queued.js CHANGED
@@ -6,8 +6,11 @@ import { MailRegistry } from './index.js';
6
6
  export async function dispatchMailJob(mailable, options, queueOptions) {
7
7
  let QueueRegistry;
8
8
  try {
9
- // eslint-disable-next-line @typescript-eslint/no-require-imports
10
- const mod = require('@rudderjs/queue');
9
+ // Use dynamic import (not `require`) — `@rudderjs/queue` is an ESM-only
10
+ // package and its `exports` field lacks a `require` condition, so a
11
+ // synchronous require always throws "No exports main defined" even when
12
+ // the package is installed. Memory: `feedback_esm_only_peer_resolution`.
13
+ const mod = await import(/* @vite-ignore */ '@rudderjs/queue');
11
14
  QueueRegistry = mod.QueueRegistry;
12
15
  }
13
16
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"queued.js","sourceRoot":"","sources":["../src/queued.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAQzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAkB,EAClB,OAAoB,EACpB,YAAiD;IAEjD,IAAI,aAAwB,CAAA;IAE5B,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAiC,CAAA;QACtE,aAAa,GAAG,GAAG,CAAC,aAAa,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,GAAG,GAAG;QACV,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,CAAA;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;YACzF,CAAC;YACD,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC;KACF,CAAA;IAED,MAAM,IAAI,GAA4B,EAAE,CAAA;IACxC,IAAI,YAAY,EAAE,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAA;IAC3D,IAAI,YAAY,EAAE,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAA;IAE3D,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"queued.js","sourceRoot":"","sources":["../src/queued.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAQzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAkB,EAClB,OAAoB,EACpB,YAAiD;IAEjD,IAAI,aAAwB,CAAA;IAE5B,IAAI,CAAC;QACH,wEAAwE;QACxE,oEAAoE;QACpE,wEAAwE;QACxE,yEAAyE;QACzE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,CAAiC,CAAA;QAC9F,aAAa,GAAG,GAAG,CAAC,aAAa,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAA;IACH,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,EAAE,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAA;IAC3F,CAAC;IAED,MAAM,GAAG,GAAG;QACV,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,EAAE,CAAA;YACtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;YACzF,CAAC;YACD,MAAM,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC3C,CAAC;KACF,CAAA;IAED,MAAM,IAAI,GAA4B,EAAE,CAAA;IACxC,IAAI,YAAY,EAAE,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAA;IAC3D,IAAI,YAAY,EAAE,KAAK;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAA;IAE3D,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;AACnC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rudderjs/mail",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "rudderjs": {
5
5
  "provider": "MailProvider",
6
6
  "stage": "feature"
@@ -12,6 +12,9 @@
12
12
  "directory": "packages/mail"
13
13
  },
14
14
  "type": "module",
15
+ "engines": {
16
+ "node": "^20.19.0 || >=22.12.0"
17
+ },
15
18
  "files": [
16
19
  "dist",
17
20
  "boost"
@@ -25,14 +28,15 @@
25
28
  }
26
29
  },
27
30
  "dependencies": {
28
- "@rudderjs/core": "^1.1.2"
31
+ "@rudderjs/core": "^1.1.5"
29
32
  },
30
33
  "optionalDependencies": {
31
34
  "nodemailer": "^6.9.0"
32
35
  },
33
36
  "devDependencies": {
34
37
  "@types/node": "^20.0.0",
35
- "typescript": "^5.4.0"
38
+ "typescript": "^5.4.0",
39
+ "@rudderjs/queue": "4.1.3"
36
40
  },
37
41
  "author": "Suleiman Shahbari",
38
42
  "scripts": {
@@ -40,7 +44,7 @@
40
44
  "dev": "tsc -p tsconfig.build.json --watch",
41
45
  "typecheck": "tsc --noEmit",
42
46
  "lint": "eslint src",
43
- "test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js; EXIT=$?; rm -rf dist-test; exit $EXIT",
47
+ "test": "tsc -p tsconfig.test.json && node --experimental-test-module-mocks --test 'dist-test/**/*.test.js'; EXIT=$?; rm -rf dist-test; exit $EXIT",
44
48
  "clean": "rm -rf dist"
45
49
  }
46
50
  }