@impruthvi/nodemail 0.2.0 → 0.4.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/README.md +222 -19
  3. package/dist/core/MailFacade.d.ts +1 -0
  4. package/dist/core/MailFacade.d.ts.map +1 -1
  5. package/dist/core/MailFacade.js +4 -0
  6. package/dist/core/MailFacade.js.map +1 -1
  7. package/dist/core/MailManager.d.ts +11 -2
  8. package/dist/core/MailManager.d.ts.map +1 -1
  9. package/dist/core/MailManager.js +88 -1
  10. package/dist/core/MailManager.js.map +1 -1
  11. package/dist/core/Mailable.d.ts +12 -2
  12. package/dist/core/Mailable.d.ts.map +1 -1
  13. package/dist/core/Mailable.js +44 -2
  14. package/dist/core/Mailable.js.map +1 -1
  15. package/dist/index.d.ts +6 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +12 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/providers/MailgunProvider.d.ts +15 -0
  20. package/dist/providers/MailgunProvider.d.ts.map +1 -0
  21. package/dist/providers/MailgunProvider.js +103 -0
  22. package/dist/providers/MailgunProvider.js.map +1 -0
  23. package/dist/providers/PostmarkProvider.d.ts +11 -0
  24. package/dist/providers/PostmarkProvider.d.ts.map +1 -0
  25. package/dist/providers/PostmarkProvider.js +84 -0
  26. package/dist/providers/PostmarkProvider.js.map +1 -0
  27. package/dist/providers/ResendProvider.d.ts +11 -0
  28. package/dist/providers/ResendProvider.d.ts.map +1 -0
  29. package/dist/providers/ResendProvider.js +82 -0
  30. package/dist/providers/ResendProvider.js.map +1 -0
  31. package/dist/templates/EjsEngine.d.ts +14 -0
  32. package/dist/templates/EjsEngine.d.ts.map +1 -0
  33. package/dist/templates/EjsEngine.js +59 -0
  34. package/dist/templates/EjsEngine.js.map +1 -0
  35. package/dist/templates/HandlebarsEngine.d.ts +16 -0
  36. package/dist/templates/HandlebarsEngine.d.ts.map +1 -0
  37. package/dist/templates/HandlebarsEngine.js +65 -0
  38. package/dist/templates/HandlebarsEngine.js.map +1 -0
  39. package/dist/templates/PugEngine.d.ts +15 -0
  40. package/dist/templates/PugEngine.d.ts.map +1 -0
  41. package/dist/templates/PugEngine.js +70 -0
  42. package/dist/templates/PugEngine.js.map +1 -0
  43. package/dist/templates/TemplateEngine.d.ts +12 -0
  44. package/dist/templates/TemplateEngine.d.ts.map +1 -0
  45. package/dist/templates/TemplateEngine.js +3 -0
  46. package/dist/templates/TemplateEngine.js.map +1 -0
  47. package/dist/templates/index.d.ts +5 -0
  48. package/dist/templates/index.d.ts.map +1 -0
  49. package/dist/templates/index.js +10 -0
  50. package/dist/templates/index.js.map +1 -0
  51. package/dist/types/index.d.ts +9 -0
  52. package/dist/types/index.d.ts.map +1 -1
  53. package/examples/mailgun.ts +26 -0
  54. package/examples/postmark.ts +25 -0
  55. package/examples/resend.ts +25 -0
  56. package/examples/views/invoice.ejs +26 -0
  57. package/examples/views/notification.pug +14 -0
  58. package/examples/views/welcome.hbs +15 -0
  59. package/examples/with-ejs.ts +63 -0
  60. package/examples/with-handlebars.ts +60 -0
  61. package/examples/with-mailable-templates.ts +146 -0
  62. package/examples/with-pug.ts +66 -0
  63. package/package.json +20 -6
package/CHANGELOG.md CHANGED
@@ -7,6 +7,96 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.4.0] - 2025-12-07
11
+
12
+ ### Added
13
+ - **Template Engine Support** (Phase 4 complete)
14
+ - HandlebarsEngine with dynamic loading and caching
15
+ - EjsEngine with dynamic loading and caching
16
+ - PugEngine with dynamic loading and caching
17
+ - TemplateEngine interface for custom engines
18
+ - **Complete Fluent API** - All email options now chainable
19
+ - Added `cc()` method for carbon copy recipients
20
+ - Added `bcc()` method for blind carbon copy recipients
21
+ - Added `replyTo()` method for reply-to addresses
22
+ - Added `attachments()` method for file attachments
23
+ - Added `headers()` method for custom headers
24
+ - **Laravel-like Mailable Pattern** - Elegant email class API
25
+ - `Mailable.to()` method for setting recipients
26
+ - `Mailable.send()` method for direct sending
27
+ - `Mail.to().send(mailable)` Laravel-style syntax (recommended)
28
+ - `mailable.to().send()` alternative direct syntax
29
+ - Protected methods: `cc()`, `bcc()`, `replyTo()`, `attach()`, `withHeaders()`
30
+ - Enhanced MailManager with automatic template rendering
31
+ - Added template configuration to MailConfig
32
+ - Support for 'handlebars', 'ejs', 'pug' engines
33
+ - Custom engine instance support
34
+ - Configurable views path, extension, and caching
35
+ - Template engine tests (34 new tests)
36
+ - HandlebarsEngine.test.ts (11 tests)
37
+ - EjsEngine.test.ts (11 tests)
38
+ - PugEngine.test.ts (12 tests)
39
+ - Mailable tests (10 new tests)
40
+ - Comprehensive Mailable class testing
41
+ - Template support validation
42
+ - Laravel-style API testing
43
+ - Template examples
44
+ - examples/with-handlebars.ts
45
+ - examples/with-ejs.ts
46
+ - examples/with-pug.ts
47
+ - examples/with-mailable-templates.ts (refactored)
48
+ - examples/views/ directory with sample templates
49
+ - Test utilities
50
+ - test-smtp-ethereal.ts for instant SMTP testing
51
+ - test-templates.ts for template engine validation
52
+
53
+ ### Changed
54
+ - **BREAKING**: Refactored Mailable class to Laravel-like pattern
55
+ - Removed `getMailOptions()` method
56
+ - Now uses `build()` method with fluent API
57
+ - Direct sending capability added
58
+ - Updated package.json to version 0.4.0
59
+ - Added handlebars, ejs, pug to peerDependencies (all optional)
60
+ - Enhanced MessageBuilder.send() to accept Mailable instances
61
+ - Updated test suite: 122 total tests (17 new tests added)
62
+ - Code coverage: 85%+ overall
63
+ - Template engines coverage: 93.5%
64
+ - ESLint configuration for all directories (src, examples, tests)
65
+
66
+ ### Fixed
67
+ - Type safety for template engine configuration
68
+ - Promise handling in template rendering
69
+ - ESLint warnings for template engine dynamic loading
70
+ - ESLint parsing errors for examples directory
71
+ - Floating promise warnings in example files
72
+
73
+ ## [0.3.0] - 2025-11-25
74
+
75
+ ### Added
76
+ - **New email providers** (3 additional providers)
77
+ - MailgunProvider with dynamic loading
78
+ - ResendProvider with dynamic loading
79
+ - PostmarkProvider with dynamic loading
80
+ - Example files for new providers
81
+ - examples/mailgun.ts
82
+ - examples/resend.ts
83
+ - examples/postmark.ts
84
+ - Support for all provider-specific features
85
+ - Mailgun: EU region support, custom headers
86
+ - Resend: Tags and custom headers
87
+ - Postmark: Message streams and tags
88
+ - Updated MailManager to support 6 total providers
89
+
90
+ ### Changed
91
+ - Updated README with documentation for Mailgun, Resend, and Postmark
92
+ - Updated package.json to version 0.3.0
93
+ - Added form-data as peer dependency for Mailgun
94
+ - Updated provider installation instructions
95
+
96
+ ### Fixed
97
+ - TypeScript strict mode compliance for new providers
98
+ - ESLint warnings with proper annotations
99
+
10
100
  ## [0.2.0] - 2025-11-23
11
101
 
12
102
  ### Added
package/README.md CHANGED
@@ -1,11 +1,14 @@
1
- # nodemail
1
+ # @impruthvi/nodemail
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@impruthvi%2Fnodemail.svg)](https://www.npmjs.com/package/@impruthvi/nodemail)
3
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
5
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.6-blue.svg)](https://www.typescriptlang.org/)
6
+ [![Tests](https://img.shields.io/badge/tests-112%20passing-brightgreen)](https://github.com/impruthvi/nodemail)
7
+ [![Coverage](https://img.shields.io/badge/coverage-85%25-brightgreen)](https://github.com/impruthvi/nodemail)
5
8
 
6
9
  > 🚧 **Work in Progress** - A unified mail service for Node.js/TypeScript inspired by Laravel's elegant Mail system.
7
10
 
8
- **nodemail** aims to bring the simplicity and elegance of Laravel's Mail system to the Node.js ecosystem with full TypeScript support.
11
+ **@impruthvi/nodemail** aims to bring the simplicity and elegance of Laravel's Mail system to the Node.js ecosystem with full TypeScript support.
9
12
 
10
13
  ## 🎯 Vision
11
14
 
@@ -19,28 +22,33 @@ Inspired by [Laravel's Mail system](https://laravel.com/docs/mail).
19
22
 
20
23
  ## ✨ Features
21
24
 
22
- ### ✅ Available Now
23
- - 🎯 **Multiple Providers** - SMTP (Nodemailer), SendGrid, AWS SES
25
+ ### ✅ Available Now (v0.4.0)
26
+ - 🎯 **Multiple Providers** - SMTP (Nodemailer), SendGrid, AWS SES, Mailgun, Resend, Postmark
27
+ - 🎨 **Template Engines** - Handlebars, EJS, Pug support with dynamic loading
28
+ - 📝 **Mailable Classes** - Reusable email definitions with template support
24
29
  - 🪶 **Lightweight** - Only ~25MB with SMTP, install additional providers as needed
25
30
  - 🔒 **Type-Safe** - Full TypeScript support with strict typing
26
- - 🎨 **Fluent API** - Chainable, Laravel-inspired interface
27
- - ⚡ **Dynamic Loading** - Providers loaded only when installed (peerDependencies)
31
+ - **Complete Fluent API** - Chain to(), subject(), html(), template(), data(), cc(), bcc(), attachments(), headers()
32
+ - ⚡ **Dynamic Loading** - Providers and templates loaded only when installed (peerDependencies)
28
33
  - 🛡️ **Error Handling** - Graceful degradation with helpful error messages
29
34
 
30
35
  ### 🚧 Coming Soon
31
- - 📝 **Mailable Classes** - Enhanced reusable email definitions
32
36
  - 🔔 **Notifications** - Multi-channel notification system
33
37
  - 📋 **Markdown Mail** - Beautiful emails from markdown
34
38
  - 🧪 **Testing Utilities** - Mail::fake() for testing
35
39
  - 📦 **Queue Support** - Background email sending (Bull/BullMQ)
36
- - 🎨 **Template Engines** - Handlebars, EJS, Pug
37
40
  - 🌍 **i18n Support** - Multi-language emails
38
- - 🚀 **More Providers** - Mailgun, Resend, Postmark, Mailtrap
41
+ - 🚀 **More Providers** - Mailtrap and others
39
42
 
40
43
  ## 📦 Installation
41
44
 
42
45
  ```bash
43
- npm install nodemail
46
+ npm install @impruthvi/nodemail@beta
47
+ ```
48
+
49
+ Or for the latest stable (when v1.0.0 is released):
50
+ ```bash
51
+ npm install @impruthvi/nodemail
44
52
  ```
45
53
 
46
54
  **Lightweight by default!** Only includes SMTP support (~25MB).
@@ -54,20 +62,31 @@ npm install @sendgrid/mail
54
62
 
55
63
  # AWS SES (✅ Implemented)
56
64
  npm install @aws-sdk/client-ses
57
- ```
58
65
 
59
- **Coming Soon:**
60
- ```bash
61
- # Mailgun
62
- npm install mailgun.js
66
+ # Mailgun (✅ Implemented)
67
+ npm install mailgun.js form-data
63
68
 
64
- # Resend
69
+ # Resend (✅ Implemented)
65
70
  npm install resend
66
71
 
67
- # Postmark
72
+ # Postmark (✅ Implemented)
68
73
  npm install postmark
69
74
  ```
70
75
 
76
+ ### Adding Template Engines (Optional)
77
+
78
+ **Currently Supported:**
79
+ ```bash
80
+ # Handlebars (✅ Implemented)
81
+ npm install handlebars
82
+
83
+ # EJS (✅ Implemented)
84
+ npm install ejs
85
+
86
+ # Pug (✅ Implemented)
87
+ npm install pug
88
+ ```
89
+
71
90
  ## 🚀 Quick Start
72
91
 
73
92
  ### SMTP (Nodemailer)
@@ -105,6 +124,8 @@ await Mail.to('user@example.com')
105
124
 
106
125
  ```typescript
107
126
  // npm install @sendgrid/mail
127
+ import { Mail } from '@impruthvi/nodemail';
128
+
108
129
  Mail.configure({
109
130
  default: 'sendgrid',
110
131
  from: { address: 'noreply@example.com', name: 'My App' },
@@ -121,6 +142,8 @@ Mail.configure({
121
142
 
122
143
  ```typescript
123
144
  // npm install @aws-sdk/client-ses
145
+ import { Mail } from '@impruthvi/nodemail';
146
+
124
147
  Mail.configure({
125
148
  default: 'ses',
126
149
  from: { address: 'noreply@example.com', name: 'My App' },
@@ -135,6 +158,186 @@ Mail.configure({
135
158
  });
136
159
  ```
137
160
 
161
+ ### Mailgun
162
+
163
+ ```typescript
164
+ // npm install mailgun.js form-data
165
+ import { Mail } from '@impruthvi/nodemail';
166
+
167
+ Mail.configure({
168
+ default: 'mailgun',
169
+ from: { address: 'noreply@yourdomain.com', name: 'My App' },
170
+ mailers: {
171
+ mailgun: {
172
+ driver: 'mailgun',
173
+ domain: process.env.MAILGUN_DOMAIN,
174
+ apiKey: process.env.MAILGUN_API_KEY,
175
+ region: 'us', // or 'eu'
176
+ },
177
+ },
178
+ });
179
+ ```
180
+
181
+ ### Resend
182
+
183
+ ```typescript
184
+ // npm install resend
185
+ import { Mail } from '@impruthvi/nodemail';
186
+
187
+ Mail.configure({
188
+ default: 'resend',
189
+ from: { address: 'noreply@yourdomain.com', name: 'My App' },
190
+ mailers: {
191
+ resend: {
192
+ driver: 'resend',
193
+ apiKey: process.env.RESEND_API_KEY,
194
+ },
195
+ },
196
+ });
197
+ ```
198
+
199
+ ### Postmark
200
+
201
+ ```typescript
202
+ // npm install postmark
203
+ import { Mail } from '@impruthvi/nodemail';
204
+
205
+ Mail.configure({
206
+ default: 'postmark',
207
+ from: { address: 'noreply@yourdomain.com', name: 'My App' },
208
+ mailers: {
209
+ postmark: {
210
+ driver: 'postmark',
211
+ serverToken: process.env.POSTMARK_SERVER_TOKEN,
212
+ },
213
+ },
214
+ });
215
+ ```
216
+
217
+ ## 🎨 Template Engines
218
+
219
+ ### Using Handlebars
220
+
221
+ ```typescript
222
+ // npm install handlebars
223
+ import { Mail } from '@impruthvi/nodemail';
224
+
225
+ Mail.configure({
226
+ default: 'smtp',
227
+ from: { address: 'noreply@example.com', name: 'My App' },
228
+ mailers: { /* your mailer config */ },
229
+ templates: {
230
+ engine: 'handlebars',
231
+ viewsPath: './views/emails',
232
+ extension: '.hbs',
233
+ cache: true,
234
+ },
235
+ });
236
+
237
+ // Send with template
238
+ await Mail.to('user@example.com')
239
+ .subject('Welcome!')
240
+ .template('welcome')
241
+ .data({ name: 'John', appName: 'My App' })
242
+ .send();
243
+ ```
244
+
245
+ **Template file** (`views/emails/welcome.hbs`):
246
+ ```handlebars
247
+ <h1>Welcome, {{name}}!</h1>
248
+ <p>Thank you for joining {{appName}}.</p>
249
+ ```
250
+
251
+ ### Using EJS
252
+
253
+ ```typescript
254
+ // npm install ejs
255
+ Mail.configure({
256
+ templates: {
257
+ engine: 'ejs',
258
+ viewsPath: './views/emails',
259
+ extension: '.ejs',
260
+ },
261
+ });
262
+
263
+ await Mail.to('customer@example.com')
264
+ .subject('Your Invoice')
265
+ .template('invoice')
266
+ .data({ items: [...], total: 99.99 })
267
+ .send();
268
+ ```
269
+
270
+ ### Using Pug
271
+
272
+ ```typescript
273
+ // npm install pug
274
+ Mail.configure({
275
+ templates: {
276
+ engine: 'pug',
277
+ viewsPath: './views/emails',
278
+ cache: true,
279
+ },
280
+ });
281
+
282
+ await Mail.to('user@example.com')
283
+ .subject('Notification')
284
+ .template('notification')
285
+ .data({ title: 'Update', message: 'New features!' })
286
+ .send();
287
+ ```
288
+
289
+ ## 📨 Complete Fluent API
290
+
291
+ ```typescript
292
+ await Mail.to('user@example.com')
293
+ .subject('Complete Example')
294
+ .html('<h1>Hello!</h1>')
295
+ .text('Hello!')
296
+ .from('custom@example.com')
297
+ .cc(['manager@example.com', 'team@example.com'])
298
+ .bcc('archive@example.com')
299
+ .replyTo('support@example.com')
300
+ .attachments([
301
+ { filename: 'report.pdf', path: './files/report.pdf' },
302
+ { filename: 'image.png', content: buffer },
303
+ ])
304
+ .headers({ 'X-Custom-Header': 'value' })
305
+ .send();
306
+ ```
307
+
308
+ ## 📝 Mailable Classes
309
+
310
+ Create reusable email classes with Laravel-like syntax:
311
+
312
+ ```typescript
313
+ import { Mailable } from '@impruthvi/nodemail';
314
+
315
+ class WelcomeEmail extends Mailable {
316
+ constructor(
317
+ private user: { name: string; email: string },
318
+ private appName: string
319
+ ) {
320
+ super();
321
+ }
322
+
323
+ build() {
324
+ return this
325
+ .subject(`Welcome to ${this.appName}!`)
326
+ .view('welcome', {
327
+ name: this.user.name,
328
+ email: this.user.email,
329
+ appName: this.appName,
330
+ });
331
+ }
332
+ }
333
+
334
+ // Method 1: Laravel-style (recommended)
335
+ await Mail.to('user@example.com').send(new WelcomeEmail(user, 'My App'));
336
+
337
+ // Method 2: Direct sending
338
+ await new WelcomeEmail(user, 'My App').to('user@example.com').send();
339
+ ```
340
+
138
341
  **Advanced usage (coming soon):**
139
342
 
140
343
  ```typescript
@@ -281,10 +484,10 @@ If you've used Laravel's Mail system, you know how elegant it is:
281
484
  Mail::to($user->email)->send(new WelcomeEmail($user));
282
485
  ```
283
486
 
284
- **nodemail** brings this same elegance to Node.js/TypeScript:
487
+ **@impruthvi/nodemail** brings this same elegance to Node.js/TypeScript:
285
488
 
286
489
  ```typescript
287
- // nodemail (TypeScript)
490
+ // @impruthvi/nodemail (TypeScript)
288
491
  await Mail.to(user.email).send(new WelcomeEmail(user));
289
492
  ```
290
493
 
@@ -6,6 +6,7 @@ declare class MailFacade {
6
6
  private static getInstance;
7
7
  static to(address: string | string[]): import("./MailManager").MessageBuilder;
8
8
  static mailer(name: string): MailManager;
9
+ static send(mailable: import('./Mailable').Mailable): Promise<import('../types').MailResponse>;
9
10
  static fake(): void;
10
11
  static assertSent(): void;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MailFacade.d.ts","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAO1C,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM;IAO1B,MAAM,CAAC,IAAI,IAAI,IAAI;IAQnB,MAAM,CAAC,UAAU,IAAI,IAAI;CAI1B;AAED,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"MailFacade.d.ts","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,cAAM,UAAU;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAO1C,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAOpC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM;WAOb,IAAI,CAAC,QAAQ,EAAE,OAAO,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,UAAU,EAAE,YAAY,CAAC;IAQpG,MAAM,CAAC,IAAI,IAAI,IAAI;IAQnB,MAAM,CAAC,UAAU,IAAI,IAAI;CAI1B;AAED,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAC"}
@@ -19,6 +19,10 @@ class MailFacade {
19
19
  static mailer(name) {
20
20
  return this.getInstance().mailer(name);
21
21
  }
22
+ static async send(mailable) {
23
+ mailable.setMailManager(this.getInstance());
24
+ return mailable.send();
25
+ }
22
26
  static fake() {
23
27
  throw new Error('Mail.fake() not yet implemented');
24
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MailFacade.js","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":";;;AAKA,+CAA4C;AAG5C,MAAM,UAAU;IACN,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAKO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,MAAM,CAAC,EAAE,CAAC,OAA0B;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAKD,MAAM,CAAC,IAAI;QAET,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAKD,MAAM,CAAC,UAAU;QAEf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;;AAGoB,0BAAI"}
1
+ {"version":3,"file":"MailFacade.js","sourceRoot":"","sources":["../../src/core/MailFacade.ts"],"names":[],"mappings":";;;AAKA,+CAA4C;AAG5C,MAAM,UAAU;IACN,MAAM,CAAC,QAAQ,GAAuB,IAAI,CAAC;IAKnD,MAAM,CAAC,SAAS,CAAC,MAAkB;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAKO,MAAM,CAAC,WAAW;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAKD,MAAM,CAAC,EAAE,CAAC,OAA0B;QAClC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAKD,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAKD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAuC;QACvD,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAKD,MAAM,CAAC,IAAI;QAET,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAKD,MAAM,CAAC,UAAU;QAEf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;;AAGoB,0BAAI"}
@@ -1,8 +1,10 @@
1
- import type { MailConfig, MailOptions, MailResponse } from '../types';
1
+ import type { MailConfig, MailOptions, MailResponse, Attachment } from '../types';
2
2
  export declare class MailManager {
3
3
  private config;
4
4
  private providers;
5
+ private templateEngine?;
5
6
  constructor(config: MailConfig);
7
+ private initializeTemplateEngine;
6
8
  private createProvider;
7
9
  private getProvider;
8
10
  to(address: string | string[]): MessageBuilder;
@@ -18,6 +20,13 @@ export declare class MessageBuilder {
18
20
  html(html: string): this;
19
21
  text(text: string): this;
20
22
  from(from: string): this;
21
- send(): Promise<MailResponse>;
23
+ cc(cc: string | string[]): this;
24
+ bcc(bcc: string | string[]): this;
25
+ replyTo(replyTo: string): this;
26
+ attachments(attachments: Attachment[]): this;
27
+ headers(headers: Record<string, string>): this;
28
+ template(template: string): this;
29
+ data(data: Record<string, unknown>): this;
30
+ send(mailable?: import('./Mailable').Mailable): Promise<MailResponse>;
22
31
  }
23
32
  //# sourceMappingURL=MailManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MailManager.d.ts","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,YAAY,EAEb,MAAM,UAAU,CAAC;AAKlB,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAwC;gBAE7C,MAAM,EAAE,UAAU;IAO9B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,WAAW;IAyBnB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAO7B,MAAM,CAAC,IAAI,EAAE,MAAM;IAab,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAQvD,gBAAgB,IAAI,MAAM;CAG3B;AAKD,qBAAa,cAAc;IAIvB,OAAO,CAAC,OAAO;IAHV,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;gBAGhC,OAAO,EAAE,WAAW,EAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKvB,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKX,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;CAOpC"}
1
+ {"version":3,"file":"MailManager.d.ts","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEX,YAAY,EAEZ,UAAU,EACX,MAAM,UAAU,CAAC;AAYlB,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,MAAM,EAAE,UAAU;IAS9B,OAAO,CAAC,wBAAwB;IA0ChC,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,WAAW;IAyBnB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAO7B,MAAM,CAAC,IAAI,EAAE,MAAM;IAab,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBvD,gBAAgB,IAAI,MAAM;CAG3B;AAKD,qBAAa,cAAc;IAIvB,OAAO,CAAC,OAAO;IAHV,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;gBAGhC,OAAO,EAAE,WAAW,EAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKvB,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,IAAI,CAAC,IAAI,EAAE,MAAM;IAKjB,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE;IAKxB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAK1B,OAAO,CAAC,OAAO,EAAE,MAAM;IAKvB,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE;IAKrC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKvC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAKzB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAK5B,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;CAoB5E"}
@@ -4,11 +4,52 @@ exports.MessageBuilder = exports.MailManager = void 0;
4
4
  const SmtpProvider_1 = require("../providers/SmtpProvider");
5
5
  const SendGridProvider_1 = require("../providers/SendGridProvider");
6
6
  const SesProvider_1 = require("../providers/SesProvider");
7
+ const MailgunProvider_1 = require("../providers/MailgunProvider");
8
+ const ResendProvider_1 = require("../providers/ResendProvider");
9
+ const PostmarkProvider_1 = require("../providers/PostmarkProvider");
10
+ const HandlebarsEngine_1 = require("../templates/HandlebarsEngine");
11
+ const EjsEngine_1 = require("../templates/EjsEngine");
12
+ const PugEngine_1 = require("../templates/PugEngine");
7
13
  class MailManager {
8
14
  config;
9
15
  providers = new Map();
16
+ templateEngine;
10
17
  constructor(config) {
11
18
  this.config = config;
19
+ this.initializeTemplateEngine();
20
+ }
21
+ initializeTemplateEngine() {
22
+ if (!this.config.templates) {
23
+ return;
24
+ }
25
+ const { engine, viewsPath, extension, cache, options } = this.config.templates;
26
+ if (!engine) {
27
+ return;
28
+ }
29
+ const engineOptions = {
30
+ ...(viewsPath && { viewsPath }),
31
+ ...(extension && { extension }),
32
+ ...(cache !== undefined && { cache }),
33
+ ...(options && { options }),
34
+ };
35
+ if (typeof engine === 'string') {
36
+ switch (engine) {
37
+ case 'handlebars':
38
+ this.templateEngine = new HandlebarsEngine_1.HandlebarsEngine(engineOptions);
39
+ break;
40
+ case 'ejs':
41
+ this.templateEngine = new EjsEngine_1.EjsEngine(engineOptions);
42
+ break;
43
+ case 'pug':
44
+ this.templateEngine = new PugEngine_1.PugEngine(engineOptions);
45
+ break;
46
+ default:
47
+ throw new Error(`Unsupported template engine: ${engine}`);
48
+ }
49
+ }
50
+ else {
51
+ this.templateEngine = engine;
52
+ }
12
53
  }
13
54
  createProvider(mailerConfig) {
14
55
  switch (mailerConfig.driver) {
@@ -18,6 +59,12 @@ class MailManager {
18
59
  return new SendGridProvider_1.SendGridProvider(mailerConfig);
19
60
  case 'ses':
20
61
  return new SesProvider_1.SesProvider(mailerConfig);
62
+ case 'mailgun':
63
+ return new MailgunProvider_1.MailgunProvider(mailerConfig);
64
+ case 'resend':
65
+ return new ResendProvider_1.ResendProvider(mailerConfig);
66
+ case 'postmark':
67
+ return new PostmarkProvider_1.PostmarkProvider(mailerConfig);
21
68
  default:
22
69
  throw new Error(`Unsupported mail driver: ${mailerConfig.driver}`);
23
70
  }
@@ -49,6 +96,10 @@ class MailManager {
49
96
  return new MailManager(newConfig);
50
97
  }
51
98
  async send(options) {
99
+ if (options.template && this.templateEngine) {
100
+ const html = await this.templateEngine.renderFile(options.template, options.data);
101
+ options = { ...options, html };
102
+ }
52
103
  const provider = this.getProvider();
53
104
  return provider.send(options);
54
105
  }
@@ -80,7 +131,43 @@ class MessageBuilder {
80
131
  this.options.from = from;
81
132
  return this;
82
133
  }
83
- async send() {
134
+ cc(cc) {
135
+ this.options.cc = cc;
136
+ return this;
137
+ }
138
+ bcc(bcc) {
139
+ this.options.bcc = bcc;
140
+ return this;
141
+ }
142
+ replyTo(replyTo) {
143
+ this.options.replyTo = replyTo;
144
+ return this;
145
+ }
146
+ attachments(attachments) {
147
+ this.options.attachments = attachments;
148
+ return this;
149
+ }
150
+ headers(headers) {
151
+ this.options.headers = headers;
152
+ return this;
153
+ }
154
+ template(template) {
155
+ this.options.template = template;
156
+ return this;
157
+ }
158
+ data(data) {
159
+ this.options.data = data;
160
+ return this;
161
+ }
162
+ async send(mailable) {
163
+ if (mailable) {
164
+ mailable.setMailManager(this.manager);
165
+ const mailOptions = mailable.getMailOptions();
166
+ return this.manager.send({
167
+ ...mailOptions,
168
+ to: this.options.to,
169
+ });
170
+ }
84
171
  if (!this.options.subject) {
85
172
  throw new Error('Email subject is required');
86
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MailManager.js","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":";;;AAYA,4DAAyD;AACzD,oEAAiE;AACjE,0DAAuD;AAEvD,MAAa,WAAW;IACd,MAAM,CAAa;IACnB,SAAS,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAKO,cAAc,CAAC,YAA0B;QAC/C,QAAQ,YAAY,CAAC,MAAM,EAAE,CAAC;YAC5B,KAAK,MAAM;gBACT,OAAO,IAAI,2BAAY,CAAC,YAA6C,CAAC,CAAC;YACzE,KAAK,UAAU;gBACb,OAAO,IAAI,mCAAgB,CAAC,YAAiD,CAAC,CAAC;YACjF,KAAK,KAAK;gBACR,OAAO,IAAI,yBAAW,CAAC,YAA4C,CAAC,CAAC;YACvE;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAKO,WAAW,CAAC,IAAa;QAC/B,MAAM,UAAU,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAE/C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,qBAAqB,CAAC,CAAC;QAC9D,CAAC;QAGD,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEd,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,2BAA2B,CAAC,CAAC;YACpE,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAKD,EAAE,CAAC,OAA0B;QAC3B,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAKD,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,qBAAqB,CAAC,CAAC;QACxD,CAAC;QAGD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpD,OAAO,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAKD,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;CACF;AAnFD,kCAmFC;AAKD,MAAa,cAAc;IAIf;IAHH,OAAO,GAAyB,EAAE,CAAC;IAE1C,YACU,OAAoB,EAC5B,EAAqB;QADb,YAAO,GAAP,OAAO,CAAa;QAG5B,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAsB,CAAC,CAAC;IACxD,CAAC;CACF;AArCD,wCAqCC"}
1
+ {"version":3,"file":"MailManager.js","sourceRoot":"","sources":["../../src/core/MailManager.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,22 @@
1
- import type { MailOptions } from '../types';
1
+ import type { MailOptions, MailResponse } from '../types';
2
+ import type { MailManager } from './MailManager';
2
3
  export declare abstract class Mailable {
3
4
  protected options: Partial<MailOptions>;
5
+ private recipients;
6
+ private mailManager?;
4
7
  abstract build(): this;
8
+ to(recipients: string | string[]): this;
9
+ setMailManager(manager: MailManager): this;
10
+ send(): Promise<MailResponse>;
5
11
  protected subject(subject: string): this;
6
12
  protected html(html: string): this;
7
13
  protected text(text: string): this;
8
14
  protected view(template: string, data?: Record<string, unknown>): this;
9
- protected attach(path: string): this;
15
+ protected cc(cc: string | string[]): this;
16
+ protected bcc(bcc: string | string[]): this;
17
+ protected replyTo(replyTo: string): this;
18
+ protected attach(path: string, filename?: string): this;
19
+ protected withHeaders(headers: Record<string, string>): this;
10
20
  getMailOptions(): Partial<MailOptions>;
11
21
  }
12
22
  //# sourceMappingURL=Mailable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Mailable.d.ts","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAM7C,QAAQ,CAAC,KAAK,IAAI,IAAI;IAKtB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtE,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWpC,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;CAIvC"}
1
+ {"version":3,"file":"Mailable.d.ts","sourceRoot":"","sources":["../../src/core/Mailable.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,8BAAsB,QAAQ;IAC5B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAC7C,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAC,CAAc;IAMlC,QAAQ,CAAC,KAAK,IAAI,IAAI;IAKtB,EAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQvC,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAQpC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAmBnC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQlC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQzC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAQ3C,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQxC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAcvD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ5D,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;CAIvC"}