@wisemen/nestjs-mail 0.3.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +91 -5
- package/dist/clients/mail-client.factory.d.ts +2 -1
- package/dist/clients/mail-client.factory.js +12 -1
- package/dist/clients/mail-client.factory.js.map +1 -1
- package/dist/clients/mail-delivery-hooks.client.d.ts +11 -0
- package/dist/clients/mail-delivery-hooks.client.js +47 -0
- package/dist/clients/mail-delivery-hooks.client.js.map +1 -0
- package/dist/clients/mail-delivery-hooks.test.d.ts +1 -0
- package/dist/clients/mail-delivery-hooks.test.js +104 -0
- package/dist/clients/mail-delivery-hooks.test.js.map +1 -0
- package/dist/clients/mail-providers.test.d.ts +1 -0
- package/dist/clients/mail-providers.test.js +275 -0
- package/dist/clients/mail-providers.test.js.map +1 -0
- package/dist/clients/mail.client.d.ts +26 -1
- package/dist/clients/mail.client.js +9 -0
- package/dist/clients/mail.client.js.map +1 -1
- package/dist/clients/mailgun-mail.client.d.ts +12 -0
- package/dist/clients/mailgun-mail.client.js +81 -0
- package/dist/clients/mailgun-mail.client.js.map +1 -0
- package/dist/clients/mailpit-mail.client.js +2 -1
- package/dist/clients/mailpit-mail.client.js.map +1 -1
- package/dist/clients/scaleway-mail.client.js +1 -1
- package/dist/clients/scaleway-mail.client.js.map +1 -1
- package/dist/clients/sendgrid-mail.client.js +1 -3
- package/dist/clients/sendgrid-mail.client.js.map +1 -1
- package/dist/enums/mail-provider.enum.d.ts +2 -1
- package/dist/enums/mail-provider.enum.js +1 -0
- package/dist/enums/mail-provider.enum.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/mail.module-options.d.ts +22 -4
- package/dist/modules/mail.module.js +1 -1
- package/dist/modules/mail.module.js.map +1 -1
- package/dist/queue/mail-job-handlers.test.d.ts +1 -0
- package/dist/queue/mail-job-handlers.test.js +66 -0
- package/dist/queue/mail-job-handlers.test.js.map +1 -0
- package/dist/queue/send-html-mail.job-handler.js +2 -1
- package/dist/queue/send-html-mail.job-handler.js.map +1 -1
- package/dist/queue/send-html-mail.job.d.ts +3 -1
- package/dist/queue/send-html-mail.job.js.map +1 -1
- package/dist/queue/send-template-mail.job-handler.js +2 -1
- package/dist/queue/send-template-mail.job-handler.js.map +1 -1
- package/dist/queue/send-template-mail.job.d.ts +3 -1
- package/dist/queue/send-template-mail.job.js.map +1 -1
- package/package.json +5 -2
- package/skills/getting-started/SKILL.md +51 -5
|
@@ -19,18 +19,64 @@ import { MailClient } from '@wisemen/nestjs-mail'
|
|
|
19
19
|
|
|
20
20
|
@Injectable()
|
|
21
21
|
export class SendWelcomeMailUseCase {
|
|
22
|
-
constructor(private readonly mailClient: MailClient) {}
|
|
22
|
+
constructor (private readonly mailClient: MailClient) {}
|
|
23
23
|
|
|
24
|
-
async send(to: string): Promise<void> {
|
|
24
|
+
async send (to: string): Promise<void> {
|
|
25
25
|
await this.mailClient.sendMail({
|
|
26
|
+
from: {
|
|
27
|
+
email: 'welcome@example.com',
|
|
28
|
+
name: 'Example Team',
|
|
29
|
+
},
|
|
26
30
|
to,
|
|
27
31
|
subject: 'Welcome',
|
|
28
|
-
text: 'Welcome to the platform'
|
|
32
|
+
text: 'Welcome to the platform',
|
|
33
|
+
metadata: {
|
|
34
|
+
kind: 'welcome',
|
|
35
|
+
},
|
|
29
36
|
})
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
```
|
|
33
40
|
|
|
41
|
+
`from` accepts either a string or `{ email, name? }`. `metadata` is exposed to
|
|
42
|
+
delivery hooks but is never included in provider payloads. Metadata stored in a
|
|
43
|
+
`SendHtmlMailJob` or `SendTemplateMailJob` must be JSON-serializable.
|
|
44
|
+
|
|
45
|
+
## Observe Deliveries
|
|
46
|
+
|
|
47
|
+
Configure one hooks object when the application needs to track successful or
|
|
48
|
+
failed delivery attempts without replacing the package client or queue handlers.
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
MailModule.forRootAsync({
|
|
52
|
+
inject: [ConfigService, DeliveryTracker],
|
|
53
|
+
useFactory: (config: ConfigService, tracker: DeliveryTracker) => ({
|
|
54
|
+
client: {
|
|
55
|
+
type: 'send-grid',
|
|
56
|
+
apiToken: config.getOrThrow('SENDGRID_API_TOKEN'),
|
|
57
|
+
defaultFrom: {
|
|
58
|
+
email: 'hello@example.com',
|
|
59
|
+
name: 'Example Team',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
queueName: 'mail',
|
|
63
|
+
deliveryHooks: {
|
|
64
|
+
async onSuccess ({ clientType, options, sentMails }) {
|
|
65
|
+
await tracker.sent(clientType, options.metadata, sentMails)
|
|
66
|
+
},
|
|
67
|
+
async onFailure ({ clientType, options, error }) {
|
|
68
|
+
await tracker.failed(clientType, options.metadata, error)
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
}),
|
|
72
|
+
})
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Hooks run for every configured client type, including MailPit and Mock. Hook
|
|
76
|
+
failures are logged safely and swallowed: a success-hook failure cannot fail the
|
|
77
|
+
job and a failure-hook failure cannot replace the original provider error. This
|
|
78
|
+
prevents hook failures from causing duplicate-email retries.
|
|
79
|
+
|
|
34
80
|
## Render Handlebars Templates
|
|
35
81
|
|
|
36
82
|
Use `HandlebarsRenderer` when the mail body should come from `.hbs` templates in
|
|
@@ -43,12 +89,12 @@ import { MailClient } from '@wisemen/nestjs-mail'
|
|
|
43
89
|
|
|
44
90
|
@Injectable()
|
|
45
91
|
export class SendTemplateMailUseCase {
|
|
46
|
-
constructor(
|
|
92
|
+
constructor (
|
|
47
93
|
private readonly mailClient: MailClient,
|
|
48
94
|
private readonly renderer: HandlebarsRenderer
|
|
49
95
|
) {}
|
|
50
96
|
|
|
51
|
-
async send(to: string, data: Record<string, unknown>): Promise<void> {
|
|
97
|
+
async send (to: string, data: Record<string, unknown>): Promise<void> {
|
|
52
98
|
const [html, text] = await Promise.all([
|
|
53
99
|
this.renderer.render('mail/templates/welcome.html.hbs', data),
|
|
54
100
|
this.renderer.render('mail/templates/welcome.text.hbs', data)
|