@simplens/nodemailer-gmail 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -5,7 +5,7 @@ Gmail/SMTP email provider plugin for SimpleNS using Nodemailer.
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @simplens/nodemailer-gmail simplens-sdk
8
+ npm install @simplens/nodemailer-gmail
9
9
  ```
10
10
 
11
11
  ## Configuration
package/dist/index.d.ts CHANGED
@@ -15,7 +15,6 @@ declare const gmailNotificationSchema: z.ZodObject<{
15
15
  variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
16
16
  webhook_url: z.ZodString;
17
17
  retry_count: z.ZodNumber;
18
- created_at: z.ZodDate;
19
18
  } & {
20
19
  channel: z.ZodLiteral<"email">;
21
20
  recipient: z.ZodObject<{
@@ -38,6 +37,7 @@ declare const gmailNotificationSchema: z.ZodObject<{
38
37
  message: string;
39
38
  subject?: string | undefined;
40
39
  }>;
40
+ created_at: z.ZodDate;
41
41
  }, z.core.$strip, z.ZodTypeAny, {
42
42
  notification_id: string;
43
43
  request_id: string;
@@ -103,7 +103,6 @@ export declare class GmailProvider implements SimpleNSProvider<GmailNotification
103
103
  variables: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
104
104
  webhook_url: z.ZodString;
105
105
  retry_count: z.ZodNumber;
106
- created_at: z.ZodDate;
107
106
  } & {
108
107
  channel: z.ZodLiteral<"email">;
109
108
  recipient: z.ZodObject<{
@@ -126,6 +125,7 @@ export declare class GmailProvider implements SimpleNSProvider<GmailNotification
126
125
  message: string;
127
126
  subject?: string | undefined;
128
127
  }>;
128
+ created_at: z.ZodDate;
129
129
  }, z.core.$strip, z.ZodTypeAny, {
130
130
  notification_id: string;
131
131
  request_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACH,CAAC,EACD,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EAIvB,MAAM,eAAe,CAAC;AAkBvB;;GAEG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAI3B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,gBAAgB,CAAC,iBAAiB,CAAC;IACrE,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAA+B;IAE7C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAUjC;IAEF,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIrB,kBAAkB;;;;;;;;;;IAIlB,gBAAgB;;;;;;;;;;IAIhB,kBAAkB,IAAI,eAAe;IAa/B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAe/B,IAAI,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqE9D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOlC;AAGD,eAAe,aAAa,CAAC;AAG7B,wBAAgB,cAAc,IAAI,aAAa,CAE9C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACH,CAAC,EACD,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,eAAe,EAIvB,MAAM,eAAe,CAAC;AAkBvB;;GAEG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,gBAAgB,CAAC,iBAAiB,CAAC;IACrE,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,MAAM,CAA+B;IAE7C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAUjC;IAEF,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIrB,kBAAkB;;;;;;;;;;IAIlB,gBAAgB;;;;;;;;;;IAIhB,kBAAkB,IAAI,eAAe;IAa/B,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAe/B,IAAI,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqE9D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAOlC;AAGD,eAAe,aAAa,CAAC;AAG7B,wBAAgB,cAAc,IAAI,aAAa,CAE9C"}
package/dist/index.js CHANGED
@@ -26,7 +26,8 @@ const contentSchema = z.object({
26
26
  const gmailNotificationSchema = baseNotificationSchema.extend({
27
27
  channel: z.literal('email'),
28
28
  recipient: recipientSchema,
29
- content: contentSchema
29
+ content: contentSchema,
30
+ created_at: z.coerce.date(),
30
31
  });
31
32
  /**
32
33
  * Gmail Provider
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,484 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import nodemailer from 'nodemailer';
3
+ import { GmailProvider, createProvider } from './index.js';
4
+ // Mock nodemailer
5
+ vi.mock('nodemailer', () => ({
6
+ default: {
7
+ createTransport: vi.fn(),
8
+ },
9
+ }));
10
+ // Mock @simplens/sdk
11
+ vi.mock('@simplens/sdk', async () => {
12
+ const { z } = await import('zod');
13
+ return {
14
+ z,
15
+ baseNotificationSchema: z.object({
16
+ notification_id: z.string(),
17
+ channel: z.string(),
18
+ priority: z.enum(['high', 'normal', 'low']).optional(),
19
+ variables: z.record(z.string(), z.unknown()).optional(),
20
+ }),
21
+ replaceVariables: vi.fn((message, variables) => {
22
+ let result = message;
23
+ for (const [key, value] of Object.entries(variables)) {
24
+ result = result.replace(new RegExp(`{{${key}}}`, 'g'), String(value));
25
+ }
26
+ return result;
27
+ }),
28
+ isHtmlContent: vi.fn((content) => {
29
+ return /<[^>]+>/.test(content);
30
+ }),
31
+ };
32
+ });
33
+ describe('GmailProvider', () => {
34
+ let provider;
35
+ let mockTransporter;
36
+ beforeEach(() => {
37
+ provider = new GmailProvider();
38
+ mockTransporter = {
39
+ verify: vi.fn(),
40
+ sendMail: vi.fn(),
41
+ close: vi.fn(),
42
+ };
43
+ vi.mocked(nodemailer.createTransport).mockReturnValue(mockTransporter);
44
+ // Suppress console.log/error during tests
45
+ vi.spyOn(console, 'log').mockImplementation(() => { });
46
+ vi.spyOn(console, 'error').mockImplementation(() => { });
47
+ });
48
+ afterEach(() => {
49
+ vi.clearAllMocks();
50
+ });
51
+ describe('manifest', () => {
52
+ it('should have correct manifest properties', () => {
53
+ expect(provider.manifest).toEqual({
54
+ name: 'simplens-plugin-nodemailer-gmail',
55
+ version: '1.0.0',
56
+ channel: 'email',
57
+ displayName: 'Gmail (Nodemailer)',
58
+ description: 'Send emails via Gmail SMTP using Nodemailer',
59
+ author: 'Adhish Krishna S',
60
+ homepage: 'https://github.com/SimpleNotificationSystem/plugin-nodemailer-gmail',
61
+ requiredCredentials: ['EMAIL_USER', 'EMAIL_PASS'],
62
+ optionalConfig: ['EMAIL_HOST', 'EMAIL_PORT', 'EMAIL_FROM'],
63
+ });
64
+ });
65
+ });
66
+ describe('getNotificationSchema', () => {
67
+ it('should return a valid zod schema', () => {
68
+ const schema = provider.getNotificationSchema();
69
+ expect(schema).toBeDefined();
70
+ expect(typeof schema.parse).toBe('function');
71
+ });
72
+ });
73
+ describe('getRecipientSchema', () => {
74
+ it('should return a valid zod schema', () => {
75
+ const schema = provider.getRecipientSchema();
76
+ expect(schema).toBeDefined();
77
+ expect(typeof schema.parse).toBe('function');
78
+ });
79
+ it('should validate correct recipient', () => {
80
+ const schema = provider.getRecipientSchema();
81
+ const result = schema.safeParse({
82
+ user_id: 'user123',
83
+ email: 'test@example.com',
84
+ });
85
+ expect(result.success).toBe(true);
86
+ });
87
+ it('should reject invalid email', () => {
88
+ const schema = provider.getRecipientSchema();
89
+ const result = schema.safeParse({
90
+ user_id: 'user123',
91
+ email: 'invalid-email',
92
+ });
93
+ expect(result.success).toBe(false);
94
+ });
95
+ });
96
+ describe('getContentSchema', () => {
97
+ it('should return a valid zod schema', () => {
98
+ const schema = provider.getContentSchema();
99
+ expect(schema).toBeDefined();
100
+ expect(typeof schema.parse).toBe('function');
101
+ });
102
+ it('should validate content with subject', () => {
103
+ const schema = provider.getContentSchema();
104
+ const result = schema.safeParse({
105
+ subject: 'Test Subject',
106
+ message: 'Test message',
107
+ });
108
+ expect(result.success).toBe(true);
109
+ });
110
+ it('should validate content without subject (optional)', () => {
111
+ const schema = provider.getContentSchema();
112
+ const result = schema.safeParse({
113
+ message: 'Test message',
114
+ });
115
+ expect(result.success).toBe(true);
116
+ });
117
+ it('should reject content without message', () => {
118
+ const schema = provider.getContentSchema();
119
+ const result = schema.safeParse({
120
+ subject: 'Test Subject',
121
+ });
122
+ expect(result.success).toBe(false);
123
+ });
124
+ });
125
+ describe('getRateLimitConfig', () => {
126
+ it('should return default rate limit config when not initialized', () => {
127
+ const config = provider.getRateLimitConfig();
128
+ expect(config).toEqual({
129
+ maxTokens: 100,
130
+ refillRate: 10,
131
+ });
132
+ });
133
+ it('should return custom rate limit config from options', async () => {
134
+ await provider.initialize({
135
+ id: 'test',
136
+ credentials: {
137
+ EMAIL_USER: 'test@gmail.com',
138
+ EMAIL_PASS: 'password123',
139
+ },
140
+ options: {
141
+ rateLimit: {
142
+ maxTokens: 200,
143
+ refillRate: 20,
144
+ },
145
+ },
146
+ });
147
+ const config = provider.getRateLimitConfig();
148
+ expect(config).toEqual({
149
+ maxTokens: 200,
150
+ refillRate: 20,
151
+ });
152
+ });
153
+ });
154
+ describe('initialize', () => {
155
+ it('should initialize with required credentials', async () => {
156
+ await provider.initialize({
157
+ id: 'test',
158
+ credentials: {
159
+ EMAIL_USER: 'test@gmail.com',
160
+ EMAIL_PASS: 'password123',
161
+ },
162
+ });
163
+ expect(nodemailer.createTransport).toHaveBeenCalledWith({
164
+ host: 'smtp.gmail.com',
165
+ port: 587,
166
+ secure: false,
167
+ auth: { user: 'test@gmail.com', pass: 'password123' },
168
+ connectionTimeout: 10000,
169
+ greetingTimeout: 10000,
170
+ socketTimeout: 30000,
171
+ });
172
+ });
173
+ it('should use custom host and port', async () => {
174
+ await provider.initialize({
175
+ id: 'test',
176
+ credentials: {
177
+ EMAIL_USER: 'test@example.com',
178
+ EMAIL_PASS: 'password123',
179
+ EMAIL_HOST: 'smtp.example.com',
180
+ EMAIL_PORT: '465',
181
+ },
182
+ });
183
+ expect(nodemailer.createTransport).toHaveBeenCalledWith({
184
+ host: 'smtp.example.com',
185
+ port: 465,
186
+ secure: true, // Port 465 should be secure
187
+ auth: { user: 'test@example.com', pass: 'password123' },
188
+ connectionTimeout: 10000,
189
+ greetingTimeout: 10000,
190
+ socketTimeout: 30000,
191
+ });
192
+ });
193
+ it('should throw error when EMAIL_USER is missing', async () => {
194
+ await expect(provider.initialize({
195
+ id: 'test',
196
+ credentials: {
197
+ EMAIL_PASS: 'password123',
198
+ },
199
+ })).rejects.toThrow('EMAIL_USER and EMAIL_PASS are required');
200
+ });
201
+ it('should throw error when EMAIL_PASS is missing', async () => {
202
+ await expect(provider.initialize({
203
+ id: 'test',
204
+ credentials: {
205
+ EMAIL_USER: 'test@gmail.com',
206
+ },
207
+ })).rejects.toThrow('EMAIL_USER and EMAIL_PASS are required');
208
+ });
209
+ });
210
+ describe('healthCheck', () => {
211
+ it('should return false when transporter is not initialized', async () => {
212
+ const result = await provider.healthCheck();
213
+ expect(result).toBe(false);
214
+ });
215
+ it('should return true when transporter verification succeeds', async () => {
216
+ mockTransporter.verify.mockResolvedValue(true);
217
+ await provider.initialize({
218
+ id: 'test',
219
+ credentials: {
220
+ EMAIL_USER: 'test@gmail.com',
221
+ EMAIL_PASS: 'password123',
222
+ },
223
+ });
224
+ const result = await provider.healthCheck();
225
+ expect(result).toBe(true);
226
+ expect(mockTransporter.verify).toHaveBeenCalled();
227
+ });
228
+ it('should return false when transporter verification fails', async () => {
229
+ mockTransporter.verify.mockRejectedValue(new Error('Connection failed'));
230
+ await provider.initialize({
231
+ id: 'test',
232
+ credentials: {
233
+ EMAIL_USER: 'test@gmail.com',
234
+ EMAIL_PASS: 'password123',
235
+ },
236
+ });
237
+ const result = await provider.healthCheck();
238
+ expect(result).toBe(false);
239
+ });
240
+ });
241
+ describe('send', () => {
242
+ const createNotification = (overrides = {}) => ({
243
+ notification_id: 'notif-123',
244
+ request_id: crypto.randomUUID(),
245
+ client_id: crypto.randomUUID(),
246
+ channel: 'email',
247
+ recipient: {
248
+ user_id: 'user-456',
249
+ email: 'recipient@example.com',
250
+ },
251
+ webhook_url: 'https://example.com/webhook',
252
+ retry_count: 3,
253
+ content: {
254
+ subject: 'Test Subject',
255
+ message: 'Hello, this is a test message.',
256
+ },
257
+ created_at: new Date(),
258
+ ...overrides,
259
+ });
260
+ it('should return error when transporter is not initialized', async () => {
261
+ const notification = createNotification();
262
+ const result = await provider.send(notification);
263
+ expect(result.success).toBe(false);
264
+ expect(result.error).toEqual({
265
+ code: 'NOT_INITIALIZED',
266
+ message: 'Transporter not initialized',
267
+ retryable: false,
268
+ });
269
+ });
270
+ it('should send email successfully with plain text', async () => {
271
+ mockTransporter.sendMail.mockResolvedValue({
272
+ messageId: '<msg-id-123@gmail.com>',
273
+ });
274
+ await provider.initialize({
275
+ id: 'test',
276
+ credentials: {
277
+ EMAIL_USER: 'sender@gmail.com',
278
+ EMAIL_PASS: 'password123',
279
+ },
280
+ });
281
+ const notification = createNotification();
282
+ const result = await provider.send(notification);
283
+ expect(result.success).toBe(true);
284
+ expect(result.messageId).toBe('<msg-id-123@gmail.com>');
285
+ expect(mockTransporter.sendMail).toHaveBeenCalledWith({
286
+ from: 'sender@gmail.com',
287
+ to: 'recipient@example.com',
288
+ subject: 'Test Subject',
289
+ text: 'Hello, this is a test message.',
290
+ });
291
+ });
292
+ it('should send email with HTML content', async () => {
293
+ mockTransporter.sendMail.mockResolvedValue({
294
+ messageId: '<msg-id-456@gmail.com>',
295
+ });
296
+ await provider.initialize({
297
+ id: 'test',
298
+ credentials: {
299
+ EMAIL_USER: 'sender@gmail.com',
300
+ EMAIL_PASS: 'password123',
301
+ },
302
+ });
303
+ const notification = createNotification({
304
+ content: {
305
+ subject: 'HTML Email',
306
+ message: '<h1>Hello</h1><p>This is HTML content</p>',
307
+ },
308
+ });
309
+ const result = await provider.send(notification);
310
+ expect(result.success).toBe(true);
311
+ expect(mockTransporter.sendMail).toHaveBeenCalledWith({
312
+ from: 'sender@gmail.com',
313
+ to: 'recipient@example.com',
314
+ subject: 'HTML Email',
315
+ html: '<h1>Hello</h1><p>This is HTML content</p>',
316
+ });
317
+ });
318
+ it('should use default subject when not provided', async () => {
319
+ mockTransporter.sendMail.mockResolvedValue({
320
+ messageId: '<msg-id-789@gmail.com>',
321
+ });
322
+ await provider.initialize({
323
+ id: 'test',
324
+ credentials: {
325
+ EMAIL_USER: 'sender@gmail.com',
326
+ EMAIL_PASS: 'password123',
327
+ },
328
+ });
329
+ const notification = createNotification({
330
+ content: {
331
+ message: 'Message without subject',
332
+ },
333
+ });
334
+ const result = await provider.send(notification);
335
+ expect(result.success).toBe(true);
336
+ expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
337
+ subject: 'Notification',
338
+ }));
339
+ });
340
+ it('should replace template variables', async () => {
341
+ mockTransporter.sendMail.mockResolvedValue({
342
+ messageId: '<msg-id-var@gmail.com>',
343
+ });
344
+ await provider.initialize({
345
+ id: 'test',
346
+ credentials: {
347
+ EMAIL_USER: 'sender@gmail.com',
348
+ EMAIL_PASS: 'password123',
349
+ },
350
+ });
351
+ const notification = createNotification({
352
+ content: {
353
+ subject: 'Welcome',
354
+ message: 'Hello {{name}}, your order {{orderId}} is confirmed.',
355
+ },
356
+ variables: {
357
+ name: 'John',
358
+ orderId: '12345',
359
+ },
360
+ });
361
+ const result = await provider.send(notification);
362
+ expect(result.success).toBe(true);
363
+ expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
364
+ text: 'Hello John, your order 12345 is confirmed.',
365
+ }));
366
+ });
367
+ it('should use custom FROM address', async () => {
368
+ mockTransporter.sendMail.mockResolvedValue({
369
+ messageId: '<msg-id-from@gmail.com>',
370
+ });
371
+ await provider.initialize({
372
+ id: 'test',
373
+ credentials: {
374
+ EMAIL_USER: 'sender@gmail.com',
375
+ EMAIL_PASS: 'password123',
376
+ EMAIL_FROM: 'noreply@mycompany.com',
377
+ },
378
+ });
379
+ const notification = createNotification();
380
+ const result = await provider.send(notification);
381
+ expect(result.success).toBe(true);
382
+ expect(mockTransporter.sendMail).toHaveBeenCalledWith(expect.objectContaining({
383
+ from: 'noreply@mycompany.com',
384
+ }));
385
+ });
386
+ it('should return retryable error for connection issues', async () => {
387
+ mockTransporter.sendMail.mockRejectedValue(new Error('Connection timeout'));
388
+ await provider.initialize({
389
+ id: 'test',
390
+ credentials: {
391
+ EMAIL_USER: 'sender@gmail.com',
392
+ EMAIL_PASS: 'password123',
393
+ },
394
+ });
395
+ const notification = createNotification();
396
+ const result = await provider.send(notification);
397
+ expect(result.success).toBe(false);
398
+ expect(result.error).toEqual({
399
+ code: 'SEND_FAILED',
400
+ message: 'Connection timeout',
401
+ retryable: true,
402
+ });
403
+ });
404
+ it('should return non-retryable error for authentication failure', async () => {
405
+ mockTransporter.sendMail.mockRejectedValue(new Error('Invalid login credentials'));
406
+ await provider.initialize({
407
+ id: 'test',
408
+ credentials: {
409
+ EMAIL_USER: 'sender@gmail.com',
410
+ EMAIL_PASS: 'wrong-password',
411
+ },
412
+ });
413
+ const notification = createNotification();
414
+ const result = await provider.send(notification);
415
+ expect(result.success).toBe(false);
416
+ expect(result.error?.retryable).toBe(false);
417
+ });
418
+ it('should return non-retryable error for invalid email address', async () => {
419
+ mockTransporter.sendMail.mockRejectedValue(new Error('Invalid email address'));
420
+ await provider.initialize({
421
+ id: 'test',
422
+ credentials: {
423
+ EMAIL_USER: 'sender@gmail.com',
424
+ EMAIL_PASS: 'password123',
425
+ },
426
+ });
427
+ const notification = createNotification();
428
+ const result = await provider.send(notification);
429
+ expect(result.success).toBe(false);
430
+ expect(result.error?.retryable).toBe(false);
431
+ });
432
+ it('should handle unknown error type', async () => {
433
+ mockTransporter.sendMail.mockRejectedValue('String error');
434
+ await provider.initialize({
435
+ id: 'test',
436
+ credentials: {
437
+ EMAIL_USER: 'sender@gmail.com',
438
+ EMAIL_PASS: 'password123',
439
+ },
440
+ });
441
+ const notification = createNotification();
442
+ const result = await provider.send(notification);
443
+ expect(result.success).toBe(false);
444
+ expect(result.error?.message).toBe('Unknown error');
445
+ });
446
+ });
447
+ describe('shutdown', () => {
448
+ it('should close transporter when initialized', async () => {
449
+ await provider.initialize({
450
+ id: 'test',
451
+ credentials: {
452
+ EMAIL_USER: 'test@gmail.com',
453
+ EMAIL_PASS: 'password123',
454
+ },
455
+ });
456
+ await provider.shutdown();
457
+ expect(mockTransporter.close).toHaveBeenCalled();
458
+ });
459
+ it('should do nothing when transporter is not initialized', async () => {
460
+ await provider.shutdown();
461
+ expect(mockTransporter.close).not.toHaveBeenCalled();
462
+ });
463
+ it('should set transporter to null after shutdown', async () => {
464
+ await provider.initialize({
465
+ id: 'test',
466
+ credentials: {
467
+ EMAIL_USER: 'test@gmail.com',
468
+ EMAIL_PASS: 'password123',
469
+ },
470
+ });
471
+ await provider.shutdown();
472
+ // Verify transporter is null by checking healthCheck returns false
473
+ const result = await provider.healthCheck();
474
+ expect(result).toBe(false);
475
+ });
476
+ });
477
+ });
478
+ describe('createProvider', () => {
479
+ it('should create a new GmailProvider instance', () => {
480
+ const provider = createProvider();
481
+ expect(provider).toBeInstanceOf(GmailProvider);
482
+ });
483
+ });
484
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simplens/nodemailer-gmail",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Gmail/SMTP email provider plugin for SimpleNS using Nodemailer",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -14,6 +14,9 @@
14
14
  "type": "module",
15
15
  "scripts": {
16
16
  "build": "tsc",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "test:coverage": "vitest run --coverage",
17
20
  "prepublishOnly": "npm run build"
18
21
  },
19
22
  "keywords": [
@@ -27,12 +30,13 @@
27
30
  "author": "SimpleNS Team",
28
31
  "license": "MIT",
29
32
  "dependencies": {
30
- "nodemailer": "^6.9.0",
31
- "@simplens/sdk": "^1.0.2"
33
+ "@simplens/sdk": "^1.0.3",
34
+ "nodemailer": "^6.9.0"
32
35
  },
33
36
  "devDependencies": {
34
37
  "@types/nodemailer": "^6.4.0",
35
- "typescript": "^5.0.0"
38
+ "typescript": "^5.0.0",
39
+ "vitest": "^4.0.16"
36
40
  },
37
41
  "files": [
38
42
  "dist",