@bernierllc/email-manager 0.1.1
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/LICENSE +5 -0
- package/README.md +534 -0
- package/dist/email-manager.d.ts +134 -0
- package/dist/email-manager.d.ts.map +1 -0
- package/dist/email-manager.js +360 -0
- package/dist/email-manager.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/email-analytics.d.ts +92 -0
- package/dist/managers/email-analytics.d.ts.map +1 -0
- package/dist/managers/email-analytics.js +375 -0
- package/dist/managers/email-analytics.js.map +1 -0
- package/dist/managers/email-scheduler.d.ts +81 -0
- package/dist/managers/email-scheduler.d.ts.map +1 -0
- package/dist/managers/email-scheduler.js +288 -0
- package/dist/managers/email-scheduler.js.map +1 -0
- package/dist/managers/provider-manager.d.ts +104 -0
- package/dist/managers/provider-manager.d.ts.map +1 -0
- package/dist/managers/provider-manager.js +436 -0
- package/dist/managers/provider-manager.js.map +1 -0
- package/dist/managers/template-manager.d.ts +65 -0
- package/dist/managers/template-manager.d.ts.map +1 -0
- package/dist/managers/template-manager.js +314 -0
- package/dist/managers/template-manager.js.map +1 -0
- package/dist/types.d.ts +507 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/simple-template-engine.d.ts +27 -0
- package/dist/utils/simple-template-engine.d.ts.map +1 -0
- package/dist/utils/simple-template-engine.js +61 -0
- package/dist/utils/simple-template-engine.js.map +1 -0
- package/package.json +57 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Email Manager Configuration
|
|
4
|
+
*/
|
|
5
|
+
export interface EmailManagerConfig {
|
|
6
|
+
defaultProvider?: string;
|
|
7
|
+
providers: EmailProvider[];
|
|
8
|
+
templates?: EmailTemplate[];
|
|
9
|
+
scheduling?: SchedulingConfig;
|
|
10
|
+
analytics?: AnalyticsConfig;
|
|
11
|
+
retry?: RetryConfig;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Email Data Interface
|
|
15
|
+
*/
|
|
16
|
+
export interface EmailData {
|
|
17
|
+
to: string | string[];
|
|
18
|
+
cc?: string | string[];
|
|
19
|
+
bcc?: string | string[];
|
|
20
|
+
subject: string;
|
|
21
|
+
text?: string;
|
|
22
|
+
html?: string;
|
|
23
|
+
templateId?: string;
|
|
24
|
+
templateContext?: TemplateContext;
|
|
25
|
+
attachments?: Attachment[];
|
|
26
|
+
metadata?: Record<string, any>;
|
|
27
|
+
provider?: string;
|
|
28
|
+
priority?: 'low' | 'normal' | 'high';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Email Template Interface
|
|
32
|
+
*/
|
|
33
|
+
export interface EmailTemplate {
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
subject: string;
|
|
37
|
+
htmlTemplate: string;
|
|
38
|
+
textTemplate?: string;
|
|
39
|
+
variables: TemplateVariable[];
|
|
40
|
+
category?: string;
|
|
41
|
+
version: string;
|
|
42
|
+
isActive: boolean;
|
|
43
|
+
createdAt: Date;
|
|
44
|
+
updatedAt: Date;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Template Variable Definition
|
|
48
|
+
*/
|
|
49
|
+
export interface TemplateVariable {
|
|
50
|
+
name: string;
|
|
51
|
+
type: 'string' | 'number' | 'boolean' | 'object';
|
|
52
|
+
required: boolean;
|
|
53
|
+
description?: string;
|
|
54
|
+
defaultValue?: any;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Template Context for Rendering
|
|
58
|
+
*/
|
|
59
|
+
export interface TemplateContext {
|
|
60
|
+
[key: string]: any;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Email Provider Configuration
|
|
64
|
+
*/
|
|
65
|
+
export interface EmailProvider {
|
|
66
|
+
id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
type: 'sendgrid' | 'mailgun' | 'ses' | 'smtp' | 'postmark';
|
|
69
|
+
config: ProviderConfig;
|
|
70
|
+
isActive: boolean;
|
|
71
|
+
priority: number;
|
|
72
|
+
rateLimit?: RateLimit;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Provider-specific Configuration
|
|
76
|
+
*/
|
|
77
|
+
export interface ProviderConfig {
|
|
78
|
+
[key: string]: any;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Rate Limiting Configuration
|
|
82
|
+
*/
|
|
83
|
+
export interface RateLimit {
|
|
84
|
+
maxPerMinute: number;
|
|
85
|
+
maxPerHour: number;
|
|
86
|
+
maxPerDay: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Email Attachment
|
|
90
|
+
*/
|
|
91
|
+
export interface Attachment {
|
|
92
|
+
filename: string;
|
|
93
|
+
content: Buffer | string;
|
|
94
|
+
contentType: string;
|
|
95
|
+
contentDisposition?: 'attachment' | 'inline';
|
|
96
|
+
cid?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Send Result
|
|
100
|
+
*/
|
|
101
|
+
export interface SendResult {
|
|
102
|
+
success: boolean;
|
|
103
|
+
messageId?: string;
|
|
104
|
+
provider: string;
|
|
105
|
+
sentAt: Date;
|
|
106
|
+
errors?: SendError[];
|
|
107
|
+
metadata?: Record<string, any>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Send Error
|
|
111
|
+
*/
|
|
112
|
+
export interface SendError {
|
|
113
|
+
code: string;
|
|
114
|
+
message: string;
|
|
115
|
+
recipient?: string;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Schedule Result
|
|
119
|
+
*/
|
|
120
|
+
export interface ScheduleResult {
|
|
121
|
+
success: boolean;
|
|
122
|
+
scheduleId: string;
|
|
123
|
+
scheduledFor: Date;
|
|
124
|
+
emailId: string;
|
|
125
|
+
status: 'scheduled' | 'cancelled' | 'sent';
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Scheduled Email
|
|
129
|
+
*/
|
|
130
|
+
export interface ScheduledEmail {
|
|
131
|
+
id: string;
|
|
132
|
+
email: EmailData;
|
|
133
|
+
scheduledFor: Date;
|
|
134
|
+
status: 'scheduled' | 'cancelled' | 'sent' | 'failed';
|
|
135
|
+
createdAt: Date;
|
|
136
|
+
sentAt?: Date;
|
|
137
|
+
result?: SendResult;
|
|
138
|
+
error?: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Template Result
|
|
142
|
+
*/
|
|
143
|
+
export interface TemplateResult {
|
|
144
|
+
success: boolean;
|
|
145
|
+
template?: EmailTemplate;
|
|
146
|
+
errors?: string[];
|
|
147
|
+
message?: string;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Rendered Template
|
|
151
|
+
*/
|
|
152
|
+
export interface RenderedTemplate {
|
|
153
|
+
subject: string;
|
|
154
|
+
html: string;
|
|
155
|
+
text?: string;
|
|
156
|
+
templateId: string;
|
|
157
|
+
version: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Validation Result
|
|
161
|
+
*/
|
|
162
|
+
export interface ValidationResult {
|
|
163
|
+
isValid: boolean;
|
|
164
|
+
errors: string[];
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Provider Result
|
|
168
|
+
*/
|
|
169
|
+
export interface ProviderResult {
|
|
170
|
+
success: boolean;
|
|
171
|
+
provider?: EmailProvider;
|
|
172
|
+
errors?: string[];
|
|
173
|
+
message?: string;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Delete Result
|
|
177
|
+
*/
|
|
178
|
+
export interface DeleteResult {
|
|
179
|
+
success: boolean;
|
|
180
|
+
message?: string;
|
|
181
|
+
error?: string;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Template List
|
|
185
|
+
*/
|
|
186
|
+
export interface TemplateList {
|
|
187
|
+
templates: EmailTemplate[];
|
|
188
|
+
total: number;
|
|
189
|
+
page: number;
|
|
190
|
+
pageSize: number;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Provider List
|
|
194
|
+
*/
|
|
195
|
+
export interface ProviderList {
|
|
196
|
+
providers: EmailProvider[];
|
|
197
|
+
total: number;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* List Options
|
|
201
|
+
*/
|
|
202
|
+
export interface ListOptions {
|
|
203
|
+
page?: number;
|
|
204
|
+
pageSize?: number;
|
|
205
|
+
category?: string;
|
|
206
|
+
active?: boolean;
|
|
207
|
+
search?: string;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Email Statistics
|
|
211
|
+
*/
|
|
212
|
+
export interface EmailStats {
|
|
213
|
+
emailId: string;
|
|
214
|
+
sent: number;
|
|
215
|
+
delivered: number;
|
|
216
|
+
opened: number;
|
|
217
|
+
clicked: number;
|
|
218
|
+
bounced: number;
|
|
219
|
+
deliveryRate: number;
|
|
220
|
+
openRate: number;
|
|
221
|
+
clickRate: number;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Delivery Report
|
|
225
|
+
*/
|
|
226
|
+
export interface DeliveryReport {
|
|
227
|
+
period: {
|
|
228
|
+
startDate: Date;
|
|
229
|
+
endDate: Date;
|
|
230
|
+
};
|
|
231
|
+
totalSent: number;
|
|
232
|
+
totalDelivered: number;
|
|
233
|
+
totalOpened: number;
|
|
234
|
+
totalClicked: number;
|
|
235
|
+
totalBounced: number;
|
|
236
|
+
deliveryRate: number;
|
|
237
|
+
openRate: number;
|
|
238
|
+
clickRate: number;
|
|
239
|
+
bounceRate: number;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Bounce Report
|
|
243
|
+
*/
|
|
244
|
+
export interface BounceReport {
|
|
245
|
+
period: {
|
|
246
|
+
startDate: Date;
|
|
247
|
+
endDate: Date;
|
|
248
|
+
};
|
|
249
|
+
totalBounces: number;
|
|
250
|
+
bouncesByReason: Record<string, number>;
|
|
251
|
+
bouncesByProvider: Record<string, number>;
|
|
252
|
+
bounceRate: number;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Report Options
|
|
256
|
+
*/
|
|
257
|
+
export interface ReportOptions {
|
|
258
|
+
startDate?: Date;
|
|
259
|
+
endDate?: Date;
|
|
260
|
+
provider?: string;
|
|
261
|
+
templateId?: string;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Provider Status
|
|
265
|
+
*/
|
|
266
|
+
export interface ProviderStatus {
|
|
267
|
+
id: string;
|
|
268
|
+
isActive: boolean;
|
|
269
|
+
isHealthy: boolean;
|
|
270
|
+
lastHealthCheck: Date;
|
|
271
|
+
currentUsage: {
|
|
272
|
+
minute: number;
|
|
273
|
+
hour: number;
|
|
274
|
+
day: number;
|
|
275
|
+
};
|
|
276
|
+
rateLimit?: RateLimit;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Test Result
|
|
280
|
+
*/
|
|
281
|
+
export interface TestResult {
|
|
282
|
+
success: boolean;
|
|
283
|
+
message: string;
|
|
284
|
+
details?: any;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Email Event for Analytics
|
|
288
|
+
*/
|
|
289
|
+
export interface EmailEvent {
|
|
290
|
+
type: 'sent' | 'delivered' | 'opened' | 'clicked' | 'bounced';
|
|
291
|
+
emailId: string;
|
|
292
|
+
recipient: string;
|
|
293
|
+
provider?: string;
|
|
294
|
+
url?: string;
|
|
295
|
+
reason?: string;
|
|
296
|
+
timestamp: Date;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Cancel Result
|
|
300
|
+
*/
|
|
301
|
+
export interface CancelResult {
|
|
302
|
+
success: boolean;
|
|
303
|
+
error?: string;
|
|
304
|
+
message?: string;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Scheduling Configuration
|
|
308
|
+
*/
|
|
309
|
+
export interface SchedulingConfig {
|
|
310
|
+
enabled: boolean;
|
|
311
|
+
checkIntervalMs: number;
|
|
312
|
+
maxRetries: number;
|
|
313
|
+
retryDelayMs: number;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Analytics Configuration
|
|
317
|
+
*/
|
|
318
|
+
export interface AnalyticsConfig {
|
|
319
|
+
enabled: boolean;
|
|
320
|
+
trackOpens: boolean;
|
|
321
|
+
trackClicks: boolean;
|
|
322
|
+
trackBounces: boolean;
|
|
323
|
+
maxEvents: number;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Retry Configuration
|
|
327
|
+
*/
|
|
328
|
+
export interface RetryConfig {
|
|
329
|
+
maxRetries: number;
|
|
330
|
+
initialDelayMs: number;
|
|
331
|
+
maxDelayMs: number;
|
|
332
|
+
backoffFactor: number;
|
|
333
|
+
jitter: boolean;
|
|
334
|
+
}
|
|
335
|
+
export declare const EmailDataSchema: z.ZodObject<{
|
|
336
|
+
to: z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>;
|
|
337
|
+
cc: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
|
|
338
|
+
bcc: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
|
|
339
|
+
subject: z.ZodString;
|
|
340
|
+
text: z.ZodOptional<z.ZodString>;
|
|
341
|
+
html: z.ZodOptional<z.ZodString>;
|
|
342
|
+
templateId: z.ZodOptional<z.ZodString>;
|
|
343
|
+
templateContext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
344
|
+
attachments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
345
|
+
filename: z.ZodString;
|
|
346
|
+
content: z.ZodUnion<[z.ZodString, z.ZodType<Buffer<ArrayBufferLike>, z.ZodTypeDef, Buffer<ArrayBufferLike>>]>;
|
|
347
|
+
contentType: z.ZodString;
|
|
348
|
+
}, "strip", z.ZodTypeAny, {
|
|
349
|
+
filename: string;
|
|
350
|
+
content: string | Buffer<ArrayBufferLike>;
|
|
351
|
+
contentType: string;
|
|
352
|
+
}, {
|
|
353
|
+
filename: string;
|
|
354
|
+
content: string | Buffer<ArrayBufferLike>;
|
|
355
|
+
contentType: string;
|
|
356
|
+
}>, "many">>;
|
|
357
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
358
|
+
provider: z.ZodOptional<z.ZodString>;
|
|
359
|
+
priority: z.ZodOptional<z.ZodEnum<["low", "normal", "high"]>>;
|
|
360
|
+
}, "strip", z.ZodTypeAny, {
|
|
361
|
+
to: string | string[];
|
|
362
|
+
subject: string;
|
|
363
|
+
cc?: string | string[] | undefined;
|
|
364
|
+
bcc?: string | string[] | undefined;
|
|
365
|
+
text?: string | undefined;
|
|
366
|
+
html?: string | undefined;
|
|
367
|
+
templateId?: string | undefined;
|
|
368
|
+
templateContext?: Record<string, any> | undefined;
|
|
369
|
+
attachments?: {
|
|
370
|
+
filename: string;
|
|
371
|
+
content: string | Buffer<ArrayBufferLike>;
|
|
372
|
+
contentType: string;
|
|
373
|
+
}[] | undefined;
|
|
374
|
+
metadata?: Record<string, any> | undefined;
|
|
375
|
+
provider?: string | undefined;
|
|
376
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
377
|
+
}, {
|
|
378
|
+
to: string | string[];
|
|
379
|
+
subject: string;
|
|
380
|
+
cc?: string | string[] | undefined;
|
|
381
|
+
bcc?: string | string[] | undefined;
|
|
382
|
+
text?: string | undefined;
|
|
383
|
+
html?: string | undefined;
|
|
384
|
+
templateId?: string | undefined;
|
|
385
|
+
templateContext?: Record<string, any> | undefined;
|
|
386
|
+
attachments?: {
|
|
387
|
+
filename: string;
|
|
388
|
+
content: string | Buffer<ArrayBufferLike>;
|
|
389
|
+
contentType: string;
|
|
390
|
+
}[] | undefined;
|
|
391
|
+
metadata?: Record<string, any> | undefined;
|
|
392
|
+
provider?: string | undefined;
|
|
393
|
+
priority?: "low" | "normal" | "high" | undefined;
|
|
394
|
+
}>;
|
|
395
|
+
export declare const EmailTemplateSchema: z.ZodObject<{
|
|
396
|
+
id: z.ZodString;
|
|
397
|
+
name: z.ZodString;
|
|
398
|
+
subject: z.ZodString;
|
|
399
|
+
htmlTemplate: z.ZodString;
|
|
400
|
+
textTemplate: z.ZodOptional<z.ZodString>;
|
|
401
|
+
variables: z.ZodArray<z.ZodObject<{
|
|
402
|
+
name: z.ZodString;
|
|
403
|
+
type: z.ZodEnum<["string", "number", "boolean", "object"]>;
|
|
404
|
+
required: z.ZodBoolean;
|
|
405
|
+
description: z.ZodOptional<z.ZodString>;
|
|
406
|
+
defaultValue: z.ZodOptional<z.ZodAny>;
|
|
407
|
+
}, "strip", z.ZodTypeAny, {
|
|
408
|
+
type: "string" | "number" | "boolean" | "object";
|
|
409
|
+
name: string;
|
|
410
|
+
required: boolean;
|
|
411
|
+
description?: string | undefined;
|
|
412
|
+
defaultValue?: any;
|
|
413
|
+
}, {
|
|
414
|
+
type: "string" | "number" | "boolean" | "object";
|
|
415
|
+
name: string;
|
|
416
|
+
required: boolean;
|
|
417
|
+
description?: string | undefined;
|
|
418
|
+
defaultValue?: any;
|
|
419
|
+
}>, "many">;
|
|
420
|
+
category: z.ZodOptional<z.ZodString>;
|
|
421
|
+
version: z.ZodString;
|
|
422
|
+
isActive: z.ZodBoolean;
|
|
423
|
+
createdAt: z.ZodDate;
|
|
424
|
+
updatedAt: z.ZodDate;
|
|
425
|
+
}, "strip", z.ZodTypeAny, {
|
|
426
|
+
subject: string;
|
|
427
|
+
id: string;
|
|
428
|
+
name: string;
|
|
429
|
+
htmlTemplate: string;
|
|
430
|
+
variables: {
|
|
431
|
+
type: "string" | "number" | "boolean" | "object";
|
|
432
|
+
name: string;
|
|
433
|
+
required: boolean;
|
|
434
|
+
description?: string | undefined;
|
|
435
|
+
defaultValue?: any;
|
|
436
|
+
}[];
|
|
437
|
+
version: string;
|
|
438
|
+
isActive: boolean;
|
|
439
|
+
createdAt: Date;
|
|
440
|
+
updatedAt: Date;
|
|
441
|
+
textTemplate?: string | undefined;
|
|
442
|
+
category?: string | undefined;
|
|
443
|
+
}, {
|
|
444
|
+
subject: string;
|
|
445
|
+
id: string;
|
|
446
|
+
name: string;
|
|
447
|
+
htmlTemplate: string;
|
|
448
|
+
variables: {
|
|
449
|
+
type: "string" | "number" | "boolean" | "object";
|
|
450
|
+
name: string;
|
|
451
|
+
required: boolean;
|
|
452
|
+
description?: string | undefined;
|
|
453
|
+
defaultValue?: any;
|
|
454
|
+
}[];
|
|
455
|
+
version: string;
|
|
456
|
+
isActive: boolean;
|
|
457
|
+
createdAt: Date;
|
|
458
|
+
updatedAt: Date;
|
|
459
|
+
textTemplate?: string | undefined;
|
|
460
|
+
category?: string | undefined;
|
|
461
|
+
}>;
|
|
462
|
+
export declare const EmailProviderSchema: z.ZodObject<{
|
|
463
|
+
id: z.ZodString;
|
|
464
|
+
name: z.ZodString;
|
|
465
|
+
type: z.ZodEnum<["sendgrid", "mailgun", "ses", "smtp", "postmark"]>;
|
|
466
|
+
config: z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
467
|
+
isActive: z.ZodBoolean;
|
|
468
|
+
priority: z.ZodNumber;
|
|
469
|
+
rateLimit: z.ZodOptional<z.ZodObject<{
|
|
470
|
+
maxPerMinute: z.ZodNumber;
|
|
471
|
+
maxPerHour: z.ZodNumber;
|
|
472
|
+
maxPerDay: z.ZodNumber;
|
|
473
|
+
}, "strip", z.ZodTypeAny, {
|
|
474
|
+
maxPerMinute: number;
|
|
475
|
+
maxPerHour: number;
|
|
476
|
+
maxPerDay: number;
|
|
477
|
+
}, {
|
|
478
|
+
maxPerMinute: number;
|
|
479
|
+
maxPerHour: number;
|
|
480
|
+
maxPerDay: number;
|
|
481
|
+
}>>;
|
|
482
|
+
}, "strip", z.ZodTypeAny, {
|
|
483
|
+
type: "sendgrid" | "mailgun" | "ses" | "smtp" | "postmark";
|
|
484
|
+
priority: number;
|
|
485
|
+
id: string;
|
|
486
|
+
name: string;
|
|
487
|
+
isActive: boolean;
|
|
488
|
+
config: Record<string, any>;
|
|
489
|
+
rateLimit?: {
|
|
490
|
+
maxPerMinute: number;
|
|
491
|
+
maxPerHour: number;
|
|
492
|
+
maxPerDay: number;
|
|
493
|
+
} | undefined;
|
|
494
|
+
}, {
|
|
495
|
+
type: "sendgrid" | "mailgun" | "ses" | "smtp" | "postmark";
|
|
496
|
+
priority: number;
|
|
497
|
+
id: string;
|
|
498
|
+
name: string;
|
|
499
|
+
isActive: boolean;
|
|
500
|
+
config: Record<string, any>;
|
|
501
|
+
rateLimit?: {
|
|
502
|
+
maxPerMinute: number;
|
|
503
|
+
maxPerHour: number;
|
|
504
|
+
maxPerDay: number;
|
|
505
|
+
} | undefined;
|
|
506
|
+
}>;
|
|
507
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
// Zod Validation Schemas
|
|
10
|
+
export const EmailDataSchema = z.object({
|
|
11
|
+
to: z.union([z.string().email(), z.array(z.string().email())]),
|
|
12
|
+
cc: z.union([z.string().email(), z.array(z.string().email())]).optional(),
|
|
13
|
+
bcc: z.union([z.string().email(), z.array(z.string().email())]).optional(),
|
|
14
|
+
subject: z.string().min(1),
|
|
15
|
+
text: z.string().optional(),
|
|
16
|
+
html: z.string().optional(),
|
|
17
|
+
templateId: z.string().optional(),
|
|
18
|
+
templateContext: z.record(z.any()).optional(),
|
|
19
|
+
attachments: z.array(z.object({
|
|
20
|
+
filename: z.string(),
|
|
21
|
+
content: z.union([z.string(), z.instanceof(Buffer)]),
|
|
22
|
+
contentType: z.string()
|
|
23
|
+
})).optional(),
|
|
24
|
+
metadata: z.record(z.any()).optional(),
|
|
25
|
+
provider: z.string().optional(),
|
|
26
|
+
priority: z.enum(['low', 'normal', 'high']).optional()
|
|
27
|
+
});
|
|
28
|
+
export const EmailTemplateSchema = z.object({
|
|
29
|
+
id: z.string().min(1),
|
|
30
|
+
name: z.string().min(1),
|
|
31
|
+
subject: z.string().min(1),
|
|
32
|
+
htmlTemplate: z.string().min(1),
|
|
33
|
+
textTemplate: z.string().optional(),
|
|
34
|
+
variables: z.array(z.object({
|
|
35
|
+
name: z.string(),
|
|
36
|
+
type: z.enum(['string', 'number', 'boolean', 'object']),
|
|
37
|
+
required: z.boolean(),
|
|
38
|
+
description: z.string().optional(),
|
|
39
|
+
defaultValue: z.any().optional()
|
|
40
|
+
})),
|
|
41
|
+
category: z.string().optional(),
|
|
42
|
+
version: z.string().min(1),
|
|
43
|
+
isActive: z.boolean(),
|
|
44
|
+
createdAt: z.date(),
|
|
45
|
+
updatedAt: z.date()
|
|
46
|
+
});
|
|
47
|
+
export const EmailProviderSchema = z.object({
|
|
48
|
+
id: z.string().min(1),
|
|
49
|
+
name: z.string().min(1),
|
|
50
|
+
type: z.enum(['sendgrid', 'mailgun', 'ses', 'smtp', 'postmark']),
|
|
51
|
+
config: z.record(z.any()),
|
|
52
|
+
isActive: z.boolean(),
|
|
53
|
+
priority: z.number().min(1),
|
|
54
|
+
rateLimit: z.object({
|
|
55
|
+
maxPerMinute: z.number().min(1),
|
|
56
|
+
maxPerHour: z.number().min(1),
|
|
57
|
+
maxPerDay: z.number().min(1)
|
|
58
|
+
}).optional()
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple template engine for email-manager
|
|
3
|
+
* This provides basic template rendering capabilities until @bernierllc/template-engine is available
|
|
4
|
+
*/
|
|
5
|
+
export interface TemplateContext {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
export declare class SimpleTemplateEngine {
|
|
9
|
+
/**
|
|
10
|
+
* Render a template with context data
|
|
11
|
+
*/
|
|
12
|
+
render(template: string, context: TemplateContext): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Validate template syntax
|
|
15
|
+
*/
|
|
16
|
+
validate(template: string): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Process template with simple variable substitution
|
|
19
|
+
*/
|
|
20
|
+
private processTemplate;
|
|
21
|
+
/**
|
|
22
|
+
* Get nested property value from context
|
|
23
|
+
* Supports dot notation like 'user.name'
|
|
24
|
+
*/
|
|
25
|
+
private getNestedValue;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=simple-template-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-template-engine.d.ts","sourceRoot":"","sources":["../../src/utils/simple-template-engine.ts"],"names":[],"mappings":"AAQA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IA2BnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;;OAGG;IACH,OAAO,CAAC,cAAc;CAKvB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2025 Bernier LLC
|
|
3
|
+
|
|
4
|
+
This file is licensed to the client under a limited-use license.
|
|
5
|
+
The client may use and modify this code *only within the scope of the project it was delivered for*.
|
|
6
|
+
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
|
|
7
|
+
*/
|
|
8
|
+
export class SimpleTemplateEngine {
|
|
9
|
+
/**
|
|
10
|
+
* Render a template with context data
|
|
11
|
+
*/
|
|
12
|
+
async render(template, context) {
|
|
13
|
+
return this.processTemplate(template, context);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate template syntax
|
|
17
|
+
*/
|
|
18
|
+
validate(template) {
|
|
19
|
+
try {
|
|
20
|
+
// Check for unmatched braces
|
|
21
|
+
const openBraces = (template.match(/\{\{/g) || []).length;
|
|
22
|
+
const closeBraces = (template.match(/\}\}/g) || []).length;
|
|
23
|
+
if (openBraces !== closeBraces) {
|
|
24
|
+
throw new Error('Unmatched template braces');
|
|
25
|
+
}
|
|
26
|
+
// Check for valid variable syntax
|
|
27
|
+
const variables = template.match(/\{\{\s*([^}]+)\s*\}\}/g);
|
|
28
|
+
if (variables) {
|
|
29
|
+
for (const variable of variables) {
|
|
30
|
+
const varName = variable.replace(/\{\{\s*/, '').replace(/\s*\}\}/, '');
|
|
31
|
+
if (!varName || varName.trim() === '') {
|
|
32
|
+
throw new Error('Empty template variable');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new Error(`Template validation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Process template with simple variable substitution
|
|
44
|
+
*/
|
|
45
|
+
processTemplate(template, context) {
|
|
46
|
+
return template.replace(/\{\{\s*([^}]+)\s*\}\}/g, (match, variable) => {
|
|
47
|
+
const value = this.getNestedValue(context, variable.trim());
|
|
48
|
+
return value !== undefined ? String(value) : '';
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get nested property value from context
|
|
53
|
+
* Supports dot notation like 'user.name'
|
|
54
|
+
*/
|
|
55
|
+
getNestedValue(obj, path) {
|
|
56
|
+
return path.split('.').reduce((current, key) => {
|
|
57
|
+
return current && current[key] !== undefined ? current[key] : undefined;
|
|
58
|
+
}, obj);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=simple-template-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-template-engine.js","sourceRoot":"","sources":["../../src/utils/simple-template-engine.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAWF,MAAM,OAAO,oBAAoB;IAC/B;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAAwB;QACrD,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAgB;QACvB,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,UAAU,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC1D,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAE3D,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;YAED,kCAAkC;YAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC3D,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;oBACvE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;wBACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAgB,EAAE,OAAwB;QAChE,OAAO,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,GAAQ,EAAE,IAAY;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YAC7C,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;CACF"}
|