@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 +1 -6
- package/boost/guidelines.md +12 -21
- package/dist/failover.d.ts +9 -0
- package/dist/failover.d.ts.map +1 -1
- package/dist/failover.js +9 -0
- package/dist/failover.js.map +1 -1
- package/dist/fake.d.ts +10 -1
- package/dist/fake.d.ts.map +1 -1
- package/dist/fake.js +10 -1
- package/dist/fake.js.map +1 -1
- package/dist/index.d.ts +18 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -68
- package/dist/index.js.map +1 -1
- package/dist/mailable.d.ts +6 -0
- package/dist/mailable.d.ts.map +1 -1
- package/dist/mailable.js +6 -0
- package/dist/mailable.js.map +1 -1
- package/dist/markdown.js +1 -1
- package/dist/markdown.js.map +1 -1
- package/dist/nodemailer-adapter.d.ts +26 -0
- package/dist/nodemailer-adapter.d.ts.map +1 -0
- package/dist/nodemailer-adapter.js +87 -0
- package/dist/nodemailer-adapter.js.map +1 -0
- package/dist/queued.d.ts.map +1 -1
- package/dist/queued.js +5 -2
- package/dist/queued.js.map +1 -1
- package/package.json +8 -4
package/README.md
CHANGED
|
@@ -34,12 +34,7 @@ export default {
|
|
|
34
34
|
} satisfies MailConfig
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
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
|
|
package/boost/guidelines.md
CHANGED
|
@@ -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/
|
|
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
|
|
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(
|
|
56
|
+
await Mail.to('a@example.com', 'b@example.com').send(new Announcement())
|
|
58
57
|
|
|
59
|
-
//
|
|
60
|
-
await Mail.
|
|
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
|
-
|
|
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.
|
|
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
|
|
package/dist/failover.d.ts
CHANGED
|
@@ -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: {
|
package/dist/failover.d.ts.map
CHANGED
|
@@ -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
|
|
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: {
|
package/dist/failover.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failover.js","sourceRoot":"","sources":["../src/failover.ts"],"names":[],"mappings":"AAGA,+DAA+D;AAE/D
|
|
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
|
-
/**
|
|
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: {
|
package/dist/fake.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
-
/**
|
|
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":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,eAAe;IACT,KAAK,GAA0D,EAAE,CAAA;IACjE,OAAO,GAAwD,EAAE,CAAA;IAElF,4DAA4D;IAE5D,KAAK,CAAC,IAAI,CAAC,QAAkB,EAAE,OAAoB;QACjD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,4DAA4D;IAE5D
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAA;
|
|
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 {
|
|
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":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGxD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAoBxC,8DAA8D;AAE9D,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,OAAO,GAAuB,IAAI,CAAA;IACzC,MAAM,CAAC,KAAK,GAAuC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAE7F,MAAM,CAAC,GAAG,CAAC,OAAoB,IAAW,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA,CAAC,CAAC;IAClE,MAAM,CAAC,GAAG,KAAgC,OAAO,IAAI,CAAC,OAAO,CAAA,CAAC,CAAC;IAC/D,MAAM,CAAC,OAAO,CAAC,IAAwC,IAAU,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,CAAA,CAAC,CAAC;IAC3F,MAAM,CAAC,OAAO,KAAmD,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC;IAE3F,mFAAmF;IACnF,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,IAAI,CAAC,KAAK,GAAK,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAA;IACnD,CAAC;;AAGH,8DAA8D;AAE9D;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAe;IAKG;IAJrB,GAAG,GAAgB,EAAE,CAAA;IACrB,IAAI,GAAe,EAAE,CAAA;IACrB,MAAM,CAAS;IAEvB,YAA6B,GAAa;QAAb,QAAG,GAAH,GAAG,CAAU;IAAG,CAAC;IAE9C,wFAAwF;IACxF,EAAE,CAAC,GAAG,SAAmB,IAAW,IAAI,CAAC,GAAG,GAAI,SAAS,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IACxE,yFAAyF;IACzF,GAAG,CAAC,GAAG,SAAmB,IAAU,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAExE,uGAAuG;IACvG,OAAO,CAAC,IAAY,IAAU,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAC,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,CAAA;QAClC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAA;QACrG,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACpF,CAAC;IAED,6EAA6E;IAC7E,KAAK,CAAC,KAAK,CAAC,QAAkB;QAC5B,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,IAAI,GAAuC,EAAE,CAAA;QACnD,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzC,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IAC7F,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAkB;QAC3C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QACvD,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAA;QACnC,MAAM,IAAI,GAAuC,EAAE,KAAK,EAAE,CAAA;QAC1D,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzC,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;IAC7F,CAAC;CACF;AAED,8DAA8D;AAE9D,MAAM,OAAO,IAAI;IACf,MAAM,CAAC,EAAE,CAAC,GAAG,SAAmB;QAC9B,OAAO,IAAI,eAAe,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;IAED,wDAAwD;IACxD,MAAM,CAAC,IAAI;QACT,qFAAqF;QACrF,iEAAiE;QACjE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,WAAW,CAA+B,CAAA;QAC9E,OAAO,eAAe,CAAC,IAAI,EAAE,CAAA;IAC/B,CAAC;CACF;AAkBD,8DAA8D;AAE9D,MAAM,OAAO,UAAU;IACrB,KAAK,CAAC,IAAI,CAAC,QAAkB,EAAE,OAAoB;QACjD,MAAM,GAAG,GAAI,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAA;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3B,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACvI,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QACvD,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/G,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QACvF,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAA;IAC1C,CAAC;CACF;AAED,8DAA8D;AAE9D;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAa,SAAQ,eAAe;IAC/C,QAAQ,KAAU,CAAC;IAEnB,KAAK,CAAC,IAAI;QACR,MAAM,GAAG,GAAY,MAAM,CAAa,MAAM,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAK,GAAG,CAAC,OAAO,CAAA;QAChC,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QACjE,MAAM,MAAM,GAAS,YAAY,CAAC,QAAQ,CAAW,CAAA;QAErD,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAE9B,IAAI,OAAoB,CAAA;QAExB,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,OAAO,GAAG,IAAI,UAAU,EAAE,CAAA;QAC5B,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAA;YACxG,CAAC;YACD,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;QACvD,CAAC;aAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,WAAW,GAAI,YAAY,CAAC,SAAS,CAA0B,IAAI,EAAE,CAAA;YAC3E,MAAM,UAAU,GAAK,YAAY,CAAC,YAAY,CAAwB,IAAI,EAAE,CAAA;YAC5E,MAAM,QAAQ,GAAkB,EAAE,CAAA;YAClC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC5B,IAAI,CAAC,EAAE;oBAAE,SAAQ;gBACjB,IAAI,EAAE,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC,CAAA;gBACjC,CAAC;qBAAM,IAAI,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1D,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;gBAClD,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAA;YAC9G,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;YACzD,OAAO,GAAG,IAAI,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,mCAAmC,CAAC,CAAA;QAC/F,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,CAAC;CACF;AAED,8DAA8D;AAE9D,OAAO,EAAE,eAAe,EAAE,MAAiB,eAAe,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAgB,eAAe,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAqB,cAAc,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAiB,WAAW,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA"}
|
package/dist/mailable.d.ts
CHANGED
|
@@ -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
|
package/dist/mailable.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
package/dist/mailable.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
113
|
+
subject: this.getSubject(),
|
|
114
114
|
html,
|
|
115
115
|
text: _stripHtml(bodyHtml),
|
|
116
116
|
};
|
package/dist/markdown.js.map
CHANGED
|
@@ -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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"}
|
package/dist/queued.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
//
|
|
10
|
-
|
|
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 {
|
package/dist/queued.js.map
CHANGED
|
@@ -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,
|
|
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.
|
|
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.
|
|
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
|
|
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
|
}
|