@impruthvi/nodemail 0.4.0 → 0.6.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 (50) hide show
  1. package/README.md +123 -78
  2. package/dist/core/MailFacade.d.ts +49 -5
  3. package/dist/core/MailFacade.d.ts.map +1 -1
  4. package/dist/core/MailFacade.js +286 -4
  5. package/dist/core/MailFacade.js.map +1 -1
  6. package/dist/core/MailManager.d.ts +13 -1
  7. package/dist/core/MailManager.d.ts.map +1 -1
  8. package/dist/core/MailManager.js +64 -0
  9. package/dist/core/MailManager.js.map +1 -1
  10. package/dist/core/Mailable.d.ts +1 -0
  11. package/dist/core/Mailable.d.ts.map +1 -1
  12. package/dist/core/Mailable.js +4 -0
  13. package/dist/core/Mailable.js.map +1 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +9 -2
  17. package/dist/index.js.map +1 -1
  18. package/dist/queue/QueueManager.d.ts +21 -0
  19. package/dist/queue/QueueManager.d.ts.map +1 -0
  20. package/dist/queue/QueueManager.js +131 -0
  21. package/dist/queue/QueueManager.js.map +1 -0
  22. package/dist/queue/drivers/BullDriver.d.ts +16 -0
  23. package/dist/queue/drivers/BullDriver.d.ts.map +1 -0
  24. package/dist/queue/drivers/BullDriver.js +137 -0
  25. package/dist/queue/drivers/BullDriver.js.map +1 -0
  26. package/dist/queue/drivers/BullMQDriver.d.ts +18 -0
  27. package/dist/queue/drivers/BullMQDriver.d.ts.map +1 -0
  28. package/dist/queue/drivers/BullMQDriver.js +150 -0
  29. package/dist/queue/drivers/BullMQDriver.js.map +1 -0
  30. package/dist/queue/index.d.ts +4 -0
  31. package/dist/queue/index.d.ts.map +1 -0
  32. package/dist/queue/index.js +10 -0
  33. package/dist/queue/index.js.map +1 -0
  34. package/dist/testing/AssertableMessage.d.ts +40 -0
  35. package/dist/testing/AssertableMessage.d.ts.map +1 -0
  36. package/dist/testing/AssertableMessage.js +158 -0
  37. package/dist/testing/AssertableMessage.js.map +1 -0
  38. package/dist/testing/MailFake.d.ts +34 -0
  39. package/dist/testing/MailFake.d.ts.map +1 -0
  40. package/dist/testing/MailFake.js +161 -0
  41. package/dist/testing/MailFake.js.map +1 -0
  42. package/dist/testing/index.d.ts +4 -0
  43. package/dist/testing/index.d.ts.map +1 -0
  44. package/dist/testing/index.js +8 -0
  45. package/dist/testing/index.js.map +1 -0
  46. package/dist/types/index.d.ts +45 -0
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/examples/queue-example.ts +313 -0
  49. package/examples/testing-example.ts +303 -0
  50. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ import type { QueueConfig, QueueDriver, QueuedMailJob, QueueJobResult, MailResponse } from '../../types';
2
+ export declare class BullMQDriver implements QueueDriver {
3
+ private queues;
4
+ private workers;
5
+ private config;
6
+ private Queue;
7
+ private Worker;
8
+ constructor(config: QueueConfig);
9
+ private loadBullMQ;
10
+ private getQueue;
11
+ private getConnectionOptions;
12
+ add(job: QueuedMailJob, queueName?: string): Promise<QueueJobResult>;
13
+ addDelayed(job: QueuedMailJob, delaySeconds: number, queueName?: string): Promise<QueueJobResult>;
14
+ addScheduled(job: QueuedMailJob, date: Date, queueName?: string): Promise<QueueJobResult>;
15
+ process(queueName: string, handler: (job: QueuedMailJob) => Promise<MailResponse>): void;
16
+ close(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=BullMQDriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BullMQDriver.d.ts","sourceRoot":"","sources":["../../../src/queue/drivers/BullMQDriver.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,qBAAa,YAAa,YAAW,WAAW;IAC9C,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,MAAM,CAA+C;gBAEjD,MAAM,EAAE,WAAW;YAOjB,UAAU;YAiBV,QAAQ;IA6BtB,OAAO,CAAC,oBAAoB;IAkBtB,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2BpE,UAAU,CACd,GAAG,EAAE,aAAa,EAClB,YAAY,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IA6BpB,YAAY,CAChB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,IAAI,EACV,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,cAAc,CAAC;IAY1B,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,YAAY,CAAC,GACrD,IAAI;IA4CD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa7B"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BullMQDriver = void 0;
4
+ class BullMQDriver {
5
+ queues = new Map();
6
+ workers = new Map();
7
+ config;
8
+ Queue = null;
9
+ Worker = null;
10
+ constructor(config) {
11
+ this.config = config;
12
+ }
13
+ async loadBullMQ() {
14
+ if (this.Queue && this.Worker)
15
+ return;
16
+ try {
17
+ const bullmq = await import('bullmq');
18
+ this.Queue = bullmq.Queue;
19
+ this.Worker = bullmq.Worker;
20
+ }
21
+ catch {
22
+ throw new Error('BullMQ is not installed. Please install it with: npm install bullmq ioredis');
23
+ }
24
+ }
25
+ async getQueue(name) {
26
+ await this.loadBullMQ();
27
+ const queueName = `${this.config.prefix}:${name}`;
28
+ let queue = this.queues.get(queueName);
29
+ if (!queue) {
30
+ const connectionOptions = this.getConnectionOptions();
31
+ queue = new this.Queue(queueName, {
32
+ connection: connectionOptions,
33
+ defaultJobOptions: {
34
+ attempts: this.config.retries || 3,
35
+ backoff: {
36
+ type: this.config.backoff?.type || 'exponential',
37
+ delay: this.config.backoff?.delay || 1000,
38
+ },
39
+ removeOnComplete: true,
40
+ removeOnFail: false,
41
+ },
42
+ });
43
+ this.queues.set(queueName, queue);
44
+ }
45
+ return queue;
46
+ }
47
+ getConnectionOptions() {
48
+ const conn = this.config.connection || {};
49
+ if (conn.url) {
50
+ return { url: conn.url };
51
+ }
52
+ return {
53
+ host: conn.host || 'localhost',
54
+ port: conn.port || 6379,
55
+ password: conn.password,
56
+ db: conn.db || 0,
57
+ };
58
+ }
59
+ async add(job, queueName) {
60
+ const name = queueName || this.config.defaultQueue || 'mail';
61
+ const queue = await this.getQueue(name);
62
+ try {
63
+ const bullJob = await queue.add('send-mail', job, {
64
+ jobId: job.id,
65
+ });
66
+ return {
67
+ success: true,
68
+ jobId: bullJob.id || job.id,
69
+ queue: name,
70
+ };
71
+ }
72
+ catch (error) {
73
+ return {
74
+ success: false,
75
+ jobId: job.id,
76
+ queue: name,
77
+ error: error instanceof Error ? error.message : 'Failed to add job to queue',
78
+ };
79
+ }
80
+ }
81
+ async addDelayed(job, delaySeconds, queueName) {
82
+ const name = queueName || this.config.defaultQueue || 'mail';
83
+ const queue = await this.getQueue(name);
84
+ try {
85
+ const bullJob = await queue.add('send-mail', job, {
86
+ jobId: job.id,
87
+ delay: delaySeconds * 1000,
88
+ });
89
+ return {
90
+ success: true,
91
+ jobId: bullJob.id || job.id,
92
+ queue: name,
93
+ scheduledAt: new Date(Date.now() + delaySeconds * 1000),
94
+ };
95
+ }
96
+ catch (error) {
97
+ return {
98
+ success: false,
99
+ jobId: job.id,
100
+ queue: name,
101
+ error: error instanceof Error ? error.message : 'Failed to add delayed job to queue',
102
+ };
103
+ }
104
+ }
105
+ async addScheduled(job, date, queueName) {
106
+ const delayMs = date.getTime() - Date.now();
107
+ if (delayMs < 0) {
108
+ return this.add(job, queueName);
109
+ }
110
+ return this.addDelayed(job, Math.floor(delayMs / 1000), queueName);
111
+ }
112
+ process(queueName, handler) {
113
+ void (async () => {
114
+ await this.loadBullMQ();
115
+ const fullQueueName = `${this.config.prefix}:${queueName}`;
116
+ const connectionOptions = this.getConnectionOptions();
117
+ const worker = new this.Worker(fullQueueName, async (bullJob) => {
118
+ const mailJob = bullJob.data;
119
+ mailJob.attempts = (bullJob.attemptsMade || 0) + 1;
120
+ const result = await handler(mailJob);
121
+ if (!result.success) {
122
+ throw new Error(result.error || 'Failed to send email');
123
+ }
124
+ return result;
125
+ }, {
126
+ connection: connectionOptions,
127
+ concurrency: 5,
128
+ });
129
+ worker.on('completed', (job) => {
130
+ console.warn(`[Queue] Job ${String(job.id)} completed`);
131
+ });
132
+ worker.on('failed', (job, error) => {
133
+ console.error(`[Queue] Job ${String(job?.id)} failed:`, error.message);
134
+ });
135
+ this.workers.set(fullQueueName, worker);
136
+ })();
137
+ }
138
+ async close() {
139
+ for (const worker of this.workers.values()) {
140
+ await worker.close();
141
+ }
142
+ this.workers.clear();
143
+ for (const queue of this.queues.values()) {
144
+ await queue.close();
145
+ }
146
+ this.queues.clear();
147
+ }
148
+ }
149
+ exports.BullMQDriver = BullMQDriver;
150
+ //# sourceMappingURL=BullMQDriver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BullMQDriver.js","sourceRoot":"","sources":["../../../src/queue/drivers/BullMQDriver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { QueueManager } from './QueueManager';
2
+ export { BullMQDriver } from './drivers/BullMQDriver';
3
+ export { BullDriver } from './drivers/BullDriver';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BullDriver = exports.BullMQDriver = exports.QueueManager = void 0;
4
+ var QueueManager_1 = require("./QueueManager");
5
+ Object.defineProperty(exports, "QueueManager", { enumerable: true, get: function () { return QueueManager_1.QueueManager; } });
6
+ var BullMQDriver_1 = require("./drivers/BullMQDriver");
7
+ Object.defineProperty(exports, "BullMQDriver", { enumerable: true, get: function () { return BullMQDriver_1.BullMQDriver; } });
8
+ var BullDriver_1 = require("./drivers/BullDriver");
9
+ Object.defineProperty(exports, "BullDriver", { enumerable: true, get: function () { return BullDriver_1.BullDriver; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":";;;AAIA,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AACrB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA"}
@@ -0,0 +1,40 @@
1
+ import type { MailOptions, Attachment } from '../types';
2
+ import type { Mailable } from '../core/Mailable';
3
+ export declare class AssertableMessage {
4
+ private readonly options;
5
+ private readonly mailable?;
6
+ constructor(options: MailOptions, mailable?: Mailable | undefined);
7
+ getOptions(): MailOptions;
8
+ getMailable(): Mailable | undefined;
9
+ hasTo(email: string): boolean;
10
+ hasCc(email: string): boolean;
11
+ hasBcc(email: string): boolean;
12
+ hasFrom(email: string): boolean;
13
+ hasSubject(subject: string): boolean;
14
+ subjectContains(text: string): boolean;
15
+ hasReplyTo(email: string): boolean;
16
+ hasHtml(): boolean;
17
+ htmlContains(text: string): boolean;
18
+ hasText(): boolean;
19
+ textContains(text: string): boolean;
20
+ hasAttachments(): boolean;
21
+ hasAttachment(filename: string): boolean;
22
+ getAttachments(): Attachment[];
23
+ hasHeader(name: string, value?: string): boolean;
24
+ getHeader(name: string): string | undefined;
25
+ hasTemplate(template: string): boolean;
26
+ hasData(key: string, value?: unknown): boolean;
27
+ getData(key: string): unknown;
28
+ getAllData(): Record<string, unknown> | undefined;
29
+ getTo(): string[];
30
+ getCc(): string[];
31
+ getBcc(): string[];
32
+ getSubject(): string;
33
+ getFrom(): string | undefined;
34
+ getHtml(): string | undefined;
35
+ getText(): string | undefined;
36
+ getTemplate(): string | undefined;
37
+ private hasRecipient;
38
+ private normalizeRecipients;
39
+ }
40
+ //# sourceMappingURL=AssertableMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssertableMessage.d.ts","sourceRoot":"","sources":["../../src/testing/AssertableMessage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAe,UAAU,EAAE,MAAM,UAAU,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBADT,OAAO,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAMtC,UAAU,IAAI,WAAW;IAOzB,WAAW,IAAI,QAAQ,GAAG,SAAS;IAOnC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAO7B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ7B,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAQ9B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAW/B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOtC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWlC,OAAO,IAAI,OAAO;IAOlB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQnC,OAAO,IAAI,OAAO;IAOlB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQnC,cAAc,IAAI,OAAO;IAOzB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAUxC,cAAc,IAAI,UAAU,EAAE;IAO9B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAgBhD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAO3C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAOtC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAa9C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAO7B,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAOjD,KAAK,IAAI,MAAM,EAAE;IAOjB,KAAK,IAAI,MAAM,EAAE;IAQjB,MAAM,IAAI,MAAM,EAAE;IAQlB,UAAU,IAAI,MAAM;IAOpB,OAAO,IAAI,MAAM,GAAG,SAAS;IAS7B,OAAO,IAAI,MAAM,GAAG,SAAS;IAO7B,OAAO,IAAI,MAAM,GAAG,SAAS;IAO7B,WAAW,IAAI,MAAM,GAAG,SAAS;IAOjC,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,mBAAmB;CAW5B"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssertableMessage = void 0;
4
+ class AssertableMessage {
5
+ options;
6
+ mailable;
7
+ constructor(options, mailable) {
8
+ this.options = options;
9
+ this.mailable = mailable;
10
+ }
11
+ getOptions() {
12
+ return this.options;
13
+ }
14
+ getMailable() {
15
+ return this.mailable;
16
+ }
17
+ hasTo(email) {
18
+ return this.hasRecipient(this.options.to, email);
19
+ }
20
+ hasCc(email) {
21
+ if (!this.options.cc)
22
+ return false;
23
+ return this.hasRecipient(this.options.cc, email);
24
+ }
25
+ hasBcc(email) {
26
+ if (!this.options.bcc)
27
+ return false;
28
+ return this.hasRecipient(this.options.bcc, email);
29
+ }
30
+ hasFrom(email) {
31
+ if (!this.options.from)
32
+ return false;
33
+ if (typeof this.options.from === 'string') {
34
+ return this.options.from.toLowerCase() === email.toLowerCase();
35
+ }
36
+ return this.options.from.address.toLowerCase() === email.toLowerCase();
37
+ }
38
+ hasSubject(subject) {
39
+ return this.options.subject === subject;
40
+ }
41
+ subjectContains(text) {
42
+ return this.options.subject.toLowerCase().includes(text.toLowerCase());
43
+ }
44
+ hasReplyTo(email) {
45
+ if (!this.options.replyTo)
46
+ return false;
47
+ if (typeof this.options.replyTo === 'string') {
48
+ return this.options.replyTo.toLowerCase() === email.toLowerCase();
49
+ }
50
+ return this.options.replyTo.address.toLowerCase() === email.toLowerCase();
51
+ }
52
+ hasHtml() {
53
+ return !!this.options.html;
54
+ }
55
+ htmlContains(text) {
56
+ if (!this.options.html)
57
+ return false;
58
+ return this.options.html.includes(text);
59
+ }
60
+ hasText() {
61
+ return !!this.options.text;
62
+ }
63
+ textContains(text) {
64
+ if (!this.options.text)
65
+ return false;
66
+ return this.options.text.includes(text);
67
+ }
68
+ hasAttachments() {
69
+ return !!this.options.attachments && this.options.attachments.length > 0;
70
+ }
71
+ hasAttachment(filename) {
72
+ if (!this.options.attachments)
73
+ return false;
74
+ return this.options.attachments.some((a) => a.filename.toLowerCase() === filename.toLowerCase());
75
+ }
76
+ getAttachments() {
77
+ return this.options.attachments || [];
78
+ }
79
+ hasHeader(name, value) {
80
+ if (!this.options.headers)
81
+ return false;
82
+ const headerValue = this.options.headers[name];
83
+ if (headerValue === undefined)
84
+ return false;
85
+ if (value !== undefined) {
86
+ return headerValue === value;
87
+ }
88
+ return true;
89
+ }
90
+ getHeader(name) {
91
+ return this.options.headers?.[name];
92
+ }
93
+ hasTemplate(template) {
94
+ return this.options.template === template;
95
+ }
96
+ hasData(key, value) {
97
+ if (!this.options.data)
98
+ return false;
99
+ if (value !== undefined) {
100
+ return this.options.data[key] === value;
101
+ }
102
+ return key in this.options.data;
103
+ }
104
+ getData(key) {
105
+ return this.options.data?.[key];
106
+ }
107
+ getAllData() {
108
+ return this.options.data;
109
+ }
110
+ getTo() {
111
+ return this.normalizeRecipients(this.options.to);
112
+ }
113
+ getCc() {
114
+ if (!this.options.cc)
115
+ return [];
116
+ return this.normalizeRecipients(this.options.cc);
117
+ }
118
+ getBcc() {
119
+ if (!this.options.bcc)
120
+ return [];
121
+ return this.normalizeRecipients(this.options.bcc);
122
+ }
123
+ getSubject() {
124
+ return this.options.subject;
125
+ }
126
+ getFrom() {
127
+ if (!this.options.from)
128
+ return undefined;
129
+ if (typeof this.options.from === 'string')
130
+ return this.options.from;
131
+ return this.options.from.address;
132
+ }
133
+ getHtml() {
134
+ return this.options.html;
135
+ }
136
+ getText() {
137
+ return this.options.text;
138
+ }
139
+ getTemplate() {
140
+ return this.options.template;
141
+ }
142
+ hasRecipient(recipients, email) {
143
+ const normalizedEmail = email.toLowerCase();
144
+ const recipientList = this.normalizeRecipients(recipients);
145
+ return recipientList.some((r) => r.toLowerCase() === normalizedEmail);
146
+ }
147
+ normalizeRecipients(recipients) {
148
+ if (typeof recipients === 'string') {
149
+ return [recipients];
150
+ }
151
+ if (Array.isArray(recipients)) {
152
+ return recipients.map((r) => (typeof r === 'string' ? r : r.address));
153
+ }
154
+ return [recipients.address];
155
+ }
156
+ }
157
+ exports.AssertableMessage = AssertableMessage;
158
+ //# sourceMappingURL=AssertableMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssertableMessage.js","sourceRoot":"","sources":["../../src/testing/AssertableMessage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { MailOptions, MailResponse, MailProvider, MailConfig } from '../types';
2
+ import type { Mailable } from '../core/Mailable';
3
+ import { AssertableMessage } from './AssertableMessage';
4
+ export interface SentMessage {
5
+ options: MailOptions;
6
+ mailable: Mailable | undefined;
7
+ timestamp: Date;
8
+ }
9
+ export declare class MailFake implements MailProvider {
10
+ private sentMessages;
11
+ private queuedMessages;
12
+ constructor(_config?: MailConfig);
13
+ send(options: MailOptions, mailable?: Mailable): Promise<MailResponse>;
14
+ queue(options: MailOptions, mailable?: Mailable): Promise<MailResponse>;
15
+ later(options: MailOptions, _delaySeconds: number, mailable?: Mailable): Promise<MailResponse>;
16
+ at(options: MailOptions, _date: Date, mailable?: Mailable): Promise<MailResponse>;
17
+ sent<T extends Mailable>(mailableClass?: new (...args: any[]) => T): AssertableMessage[];
18
+ queued<T extends Mailable>(mailableClass?: new (...args: any[]) => T): AssertableMessage[];
19
+ assertSent<T extends Mailable>(mailableClass: new (...args: any[]) => T, callback?: (message: AssertableMessage) => boolean): void;
20
+ assertSentCount<T extends Mailable>(mailableClass: new (...args: any[]) => T, count: number): void;
21
+ assertNotSent<T extends Mailable>(mailableClass: new (...args: any[]) => T, callback?: (message: AssertableMessage) => boolean): void;
22
+ assertNothingSent(): void;
23
+ assertQueued<T extends Mailable>(mailableClass: new (...args: any[]) => T, callback?: (message: AssertableMessage) => boolean): void;
24
+ assertQueuedCount<T extends Mailable>(mailableClass: new (...args: any[]) => T, count: number): void;
25
+ assertNotQueued<T extends Mailable>(mailableClass: new (...args: any[]) => T, callback?: (message: AssertableMessage) => boolean): void;
26
+ assertNothingQueued(): void;
27
+ hasSent(): boolean;
28
+ hasQueued(): boolean;
29
+ sentCount(): number;
30
+ queuedCount(): number;
31
+ clear(): void;
32
+ private normalizeRecipients;
33
+ }
34
+ //# sourceMappingURL=MailFake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MailFake.d.ts","sourceRoot":"","sources":["../../src/testing/MailFake.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,qBAAa,QAAS,YAAW,YAAY;IAC3C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;gBAE/B,OAAO,CAAC,EAAE,UAAU;IAOhC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAqBtE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBvE,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAO9F,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IAQjF,IAAI,CAAC,CAAC,SAAS,QAAQ,EAAE,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,iBAAiB,EAAE;IAaxF,MAAM,CAAC,CAAC,SAAS,QAAQ,EAAE,aAAa,CAAC,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,iBAAiB,EAAE;IAa1F,UAAU,CAAC,CAAC,SAAS,QAAQ,EAC3B,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GACjD,IAAI;IAsBP,eAAe,CAAC,CAAC,SAAS,QAAQ,EAChC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,IAAI;IAaP,aAAa,CAAC,CAAC,SAAS,QAAQ,EAC9B,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GACjD,IAAI;IAoBP,iBAAiB,IAAI,IAAI;IAczB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GACjD,IAAI;IAsBP,iBAAiB,CAAC,CAAC,SAAS,QAAQ,EAClC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,KAAK,EAAE,MAAM,GACZ,IAAI;IAaP,eAAe,CAAC,CAAC,SAAS,QAAQ,EAChC,aAAa,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,EACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,GACjD,IAAI;IAoBP,mBAAmB,IAAI,IAAI;IAc3B,OAAO,IAAI,OAAO;IAOlB,SAAS,IAAI,OAAO;IAOpB,SAAS,IAAI,MAAM;IAOnB,WAAW,IAAI,MAAM;IAOrB,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,mBAAmB;CAa5B"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MailFake = void 0;
4
+ const AssertableMessage_1 = require("./AssertableMessage");
5
+ class MailFake {
6
+ sentMessages = [];
7
+ queuedMessages = [];
8
+ constructor(_config) {
9
+ }
10
+ send(options, mailable) {
11
+ const message = {
12
+ options,
13
+ mailable,
14
+ timestamp: new Date(),
15
+ };
16
+ this.sentMessages.push(message);
17
+ return Promise.resolve({
18
+ success: true,
19
+ messageId: `fake-${Date.now()}-${this.sentMessages.length}`,
20
+ accepted: this.normalizeRecipients(options.to),
21
+ rejected: [],
22
+ response: 'Message stored in fake mailer',
23
+ });
24
+ }
25
+ queue(options, mailable) {
26
+ const message = {
27
+ options,
28
+ mailable,
29
+ timestamp: new Date(),
30
+ };
31
+ this.queuedMessages.push(message);
32
+ return Promise.resolve({
33
+ success: true,
34
+ messageId: `fake-queued-${Date.now()}-${this.queuedMessages.length}`,
35
+ response: 'Message queued in fake mailer',
36
+ });
37
+ }
38
+ later(options, _delaySeconds, mailable) {
39
+ return this.queue(options, mailable);
40
+ }
41
+ at(options, _date, mailable) {
42
+ return this.queue(options, mailable);
43
+ }
44
+ sent(mailableClass) {
45
+ let messages = this.sentMessages;
46
+ if (mailableClass) {
47
+ messages = messages.filter((m) => m.mailable instanceof mailableClass);
48
+ }
49
+ return messages.map((m) => new AssertableMessage_1.AssertableMessage(m.options, m.mailable));
50
+ }
51
+ queued(mailableClass) {
52
+ let messages = this.queuedMessages;
53
+ if (mailableClass) {
54
+ messages = messages.filter((m) => m.mailable instanceof mailableClass);
55
+ }
56
+ return messages.map((m) => new AssertableMessage_1.AssertableMessage(m.options, m.mailable));
57
+ }
58
+ assertSent(mailableClass, callback) {
59
+ const messages = this.sent(mailableClass);
60
+ if (messages.length === 0) {
61
+ throw new Error(`The expected [${mailableClass.name}] mailable was not sent.`);
62
+ }
63
+ if (callback) {
64
+ const matchingMessages = messages.filter(callback);
65
+ if (matchingMessages.length === 0) {
66
+ throw new Error(`The expected [${mailableClass.name}] mailable was sent, but the callback returned false for all sent messages.`);
67
+ }
68
+ }
69
+ }
70
+ assertSentCount(mailableClass, count) {
71
+ const messages = this.sent(mailableClass);
72
+ if (messages.length !== count) {
73
+ throw new Error(`Expected [${mailableClass.name}] to be sent ${count} time(s), but it was sent ${messages.length} time(s).`);
74
+ }
75
+ }
76
+ assertNotSent(mailableClass, callback) {
77
+ const messages = this.sent(mailableClass);
78
+ if (callback) {
79
+ const matchingMessages = messages.filter(callback);
80
+ if (matchingMessages.length > 0) {
81
+ throw new Error(`The unexpected [${mailableClass.name}] mailable was sent.`);
82
+ }
83
+ }
84
+ else if (messages.length > 0) {
85
+ throw new Error(`The unexpected [${mailableClass.name}] mailable was sent.`);
86
+ }
87
+ }
88
+ assertNothingSent() {
89
+ if (this.sentMessages.length > 0) {
90
+ const mailableNames = this.sentMessages
91
+ .map((m) => m.mailable?.constructor.name || 'Unknown')
92
+ .join(', ');
93
+ throw new Error(`Expected no mailables to be sent, but ${this.sentMessages.length} were sent: [${mailableNames}]`);
94
+ }
95
+ }
96
+ assertQueued(mailableClass, callback) {
97
+ const messages = this.queued(mailableClass);
98
+ if (messages.length === 0) {
99
+ throw new Error(`The expected [${mailableClass.name}] mailable was not queued.`);
100
+ }
101
+ if (callback) {
102
+ const matchingMessages = messages.filter(callback);
103
+ if (matchingMessages.length === 0) {
104
+ throw new Error(`The expected [${mailableClass.name}] mailable was queued, but the callback returned false for all queued messages.`);
105
+ }
106
+ }
107
+ }
108
+ assertQueuedCount(mailableClass, count) {
109
+ const messages = this.queued(mailableClass);
110
+ if (messages.length !== count) {
111
+ throw new Error(`Expected [${mailableClass.name}] to be queued ${count} time(s), but it was queued ${messages.length} time(s).`);
112
+ }
113
+ }
114
+ assertNotQueued(mailableClass, callback) {
115
+ const messages = this.queued(mailableClass);
116
+ if (callback) {
117
+ const matchingMessages = messages.filter(callback);
118
+ if (matchingMessages.length > 0) {
119
+ throw new Error(`The unexpected [${mailableClass.name}] mailable was queued.`);
120
+ }
121
+ }
122
+ else if (messages.length > 0) {
123
+ throw new Error(`The unexpected [${mailableClass.name}] mailable was queued.`);
124
+ }
125
+ }
126
+ assertNothingQueued() {
127
+ if (this.queuedMessages.length > 0) {
128
+ const mailableNames = this.queuedMessages
129
+ .map((m) => m.mailable?.constructor.name || 'Unknown')
130
+ .join(', ');
131
+ throw new Error(`Expected no mailables to be queued, but ${this.queuedMessages.length} were queued: [${mailableNames}]`);
132
+ }
133
+ }
134
+ hasSent() {
135
+ return this.sentMessages.length > 0;
136
+ }
137
+ hasQueued() {
138
+ return this.queuedMessages.length > 0;
139
+ }
140
+ sentCount() {
141
+ return this.sentMessages.length;
142
+ }
143
+ queuedCount() {
144
+ return this.queuedMessages.length;
145
+ }
146
+ clear() {
147
+ this.sentMessages = [];
148
+ this.queuedMessages = [];
149
+ }
150
+ normalizeRecipients(to) {
151
+ if (typeof to === 'string') {
152
+ return [to];
153
+ }
154
+ if (Array.isArray(to)) {
155
+ return to.map((recipient) => typeof recipient === 'string' ? recipient : recipient.address);
156
+ }
157
+ return [to.address];
158
+ }
159
+ }
160
+ exports.MailFake = MailFake;
161
+ //# sourceMappingURL=MailFake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MailFake.js","sourceRoot":"","sources":["../../src/testing/MailFake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { MailFake } from './MailFake';
2
+ export type { SentMessage } from './MailFake';
3
+ export { AssertableMessage } from './AssertableMessage';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssertableMessage = exports.MailFake = void 0;
4
+ var MailFake_1 = require("./MailFake");
5
+ Object.defineProperty(exports, "MailFake", { enumerable: true, get: function () { return MailFake_1.MailFake; } });
6
+ var AssertableMessage_1 = require("./AssertableMessage");
7
+ Object.defineProperty(exports, "AssertableMessage", { enumerable: true, get: function () { return AssertableMessage_1.AssertableMessage; } });
8
+ //# sourceMappingURL=index.js.map