@spinajs/email 2.0.481 → 2.0.482
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/lib/cjs/cli/EmailSrv.js +1 -1
- package/lib/cjs/config/email.d.ts +11 -1
- package/lib/cjs/config/email.d.ts.map +1 -1
- package/lib/cjs/config/email.js +9 -1
- package/lib/cjs/config/email.js.map +1 -1
- package/lib/cjs/events/EmailSendFailed.d.ts +44 -0
- package/lib/cjs/events/EmailSendFailed.d.ts.map +1 -0
- package/lib/cjs/events/EmailSendFailed.js +41 -0
- package/lib/cjs/events/EmailSendFailed.js.map +1 -0
- package/lib/cjs/index.d.ts +3 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +32 -6
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +39 -3
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/jobs/EmailSend.d.ts +4 -3
- package/lib/cjs/jobs/EmailSend.d.ts.map +1 -1
- package/lib/cjs/jobs/EmailSend.js +7 -0
- package/lib/cjs/jobs/EmailSend.js.map +1 -1
- package/lib/cjs/schemas/email.smtp.configuration.d.ts +30 -3
- package/lib/cjs/schemas/email.smtp.configuration.d.ts.map +1 -1
- package/lib/cjs/schemas/email.smtp.configuration.js +18 -3
- package/lib/cjs/schemas/email.smtp.configuration.js.map +1 -1
- package/lib/mjs/cli/EmailSrv.js +1 -1
- package/lib/mjs/config/email.d.ts +11 -1
- package/lib/mjs/config/email.d.ts.map +1 -1
- package/lib/mjs/config/email.js +9 -1
- package/lib/mjs/config/email.js.map +1 -1
- package/lib/mjs/events/EmailSendFailed.d.ts +44 -0
- package/lib/mjs/events/EmailSendFailed.d.ts.map +1 -0
- package/lib/mjs/events/EmailSendFailed.js +38 -0
- package/lib/mjs/events/EmailSendFailed.js.map +1 -0
- package/lib/mjs/index.d.ts +3 -1
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +32 -6
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +39 -3
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/jobs/EmailSend.d.ts +4 -3
- package/lib/mjs/jobs/EmailSend.d.ts.map +1 -1
- package/lib/mjs/jobs/EmailSend.js +8 -1
- package/lib/mjs/jobs/EmailSend.js.map +1 -1
- package/lib/mjs/schemas/email.smtp.configuration.d.ts +30 -3
- package/lib/mjs/schemas/email.smtp.configuration.d.ts.map +1 -1
- package/lib/mjs/schemas/email.smtp.configuration.js +18 -3
- package/lib/mjs/schemas/email.smtp.configuration.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +17 -18
package/lib/cjs/cli/EmailSrv.js
CHANGED
|
@@ -16,7 +16,7 @@ const log_common_1 = require("@spinajs/log-common");
|
|
|
16
16
|
const index_js_1 = require("./../index.js");
|
|
17
17
|
let EmailServer = class EmailServer extends cli_1.CliCommand {
|
|
18
18
|
async execute() {
|
|
19
|
-
await this.EmailService.
|
|
19
|
+
await this.EmailService.processDeferredEmails();
|
|
20
20
|
}
|
|
21
21
|
};
|
|
22
22
|
exports.EmailServer = EmailServer;
|
|
@@ -12,21 +12,31 @@ declare const email: {
|
|
|
12
12
|
* FS must be set in configuration on server/app that sends emails
|
|
13
13
|
*/
|
|
14
14
|
templateFs: string;
|
|
15
|
+
/**
|
|
16
|
+
* Default queue-level retry count for deferred emails.
|
|
17
|
+
*/
|
|
18
|
+
retry: {
|
|
19
|
+
count: number;
|
|
20
|
+
};
|
|
15
21
|
};
|
|
16
22
|
queue: {
|
|
17
23
|
routing: {
|
|
18
|
-
|
|
24
|
+
EmailSend: {
|
|
19
25
|
connection: string;
|
|
20
26
|
};
|
|
21
27
|
EmailSent: {
|
|
22
28
|
connection: string;
|
|
23
29
|
};
|
|
30
|
+
EmailSendFailed: {
|
|
31
|
+
connection: string;
|
|
32
|
+
};
|
|
24
33
|
};
|
|
25
34
|
connections: {
|
|
26
35
|
name: string;
|
|
27
36
|
service: string;
|
|
28
37
|
defaultQueueChannel: string;
|
|
29
38
|
defaultTopicChannel: string;
|
|
39
|
+
defaultQueueDeadLetterChannel: string;
|
|
30
40
|
}[];
|
|
31
41
|
};
|
|
32
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,KAAK;;;;;;;;;QAWP;;;WAGG
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,KAAK;;;;;;;;;QAWP;;;WAGG;;QAGH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;CAuBN,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/lib/cjs/config/email.js
CHANGED
|
@@ -24,11 +24,18 @@ const email = {
|
|
|
24
24
|
* FS must be set in configuration on server/app that sends emails
|
|
25
25
|
*/
|
|
26
26
|
templateFs: "email-templates",
|
|
27
|
+
/**
|
|
28
|
+
* Default queue-level retry count for deferred emails.
|
|
29
|
+
*/
|
|
30
|
+
retry: {
|
|
31
|
+
count: 3,
|
|
32
|
+
},
|
|
27
33
|
},
|
|
28
34
|
queue: {
|
|
29
35
|
routing: {
|
|
30
|
-
|
|
36
|
+
EmailSend: { connection: 'email-queue-black-hole' },
|
|
31
37
|
EmailSent: { connection: 'email-queue-black-hole' },
|
|
38
|
+
EmailSendFailed: { connection: 'email-queue-black-hole' },
|
|
32
39
|
},
|
|
33
40
|
// by default we dont have queue server for sending emails
|
|
34
41
|
connections: [
|
|
@@ -37,6 +44,7 @@ const email = {
|
|
|
37
44
|
service: 'BlackHoleQueueClient',
|
|
38
45
|
defaultQueueChannel: 'email-jobs',
|
|
39
46
|
defaultTopicChannel: 'email-events',
|
|
47
|
+
defaultQueueDeadLetterChannel: 'email-jobs-dlq',
|
|
40
48
|
},
|
|
41
49
|
],
|
|
42
50
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAExJ,4CAA4C;QAC5C,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KAC9J,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAG;IACZ,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;SACvB;KACF;IACD,KAAK,EAAE;QACL,kCAAkC;QAClC,KAAK,EAAE,wBAAwB;QAE/B;;;WAGG;QACH,UAAU,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":";;AAAA,+BAAgD;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAExJ,4CAA4C;QAC5C,IAAA,cAAO,EAAC,IAAA,gBAAS,EAAC,IAAA,WAAI,EAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,EAAC,KAAK,EAAC,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KAC9J,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAG;IACZ,MAAM,EAAE;QACN,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;SACvB;KACF;IACD,KAAK,EAAE;QACL,kCAAkC;QAClC,KAAK,EAAE,wBAAwB;QAE/B;;;WAGG;QACH,UAAU,EAAE,iBAAiB;QAE7B;;WAEG;QACH,KAAK,EAAE;YACL,KAAK,EAAE,CAAC;SACT;KACF;IACD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,SAAS,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;YACnD,SAAS,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;YACnD,eAAe,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;SAC1D;QAED,0DAA0D;QAC1D,WAAW,EAAE;YACX;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,sBAAsB;gBAC/B,mBAAmB,EAAE,YAAY;gBACjC,mBAAmB,EAAE,cAAc;gBACnC,6BAA6B,EAAE,gBAAgB;aAChD;SACF;KACF;CACF,CAAC;AAEF,kBAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { QueueEvent, IJobFailureContext } from '@spinajs/queue';
|
|
2
|
+
import { DateTime } from 'luxon';
|
|
3
|
+
import { IEmail, IEmailTemplate } from '../interfaces.js';
|
|
4
|
+
/**
|
|
5
|
+
* Emitted when a deferred email job has finally failed ( retries exhausted ).
|
|
6
|
+
* Carries only wire-safe fields so it can be routed to alerting / dead-letter handling.
|
|
7
|
+
*/
|
|
8
|
+
export declare class EmailSendFailed extends QueueEvent {
|
|
9
|
+
Connection?: string;
|
|
10
|
+
From: string;
|
|
11
|
+
To: string[];
|
|
12
|
+
Subject: string;
|
|
13
|
+
/**
|
|
14
|
+
* Email template eg. pug file or mustashe
|
|
15
|
+
*/
|
|
16
|
+
Template?: string | IEmailTemplate;
|
|
17
|
+
/**
|
|
18
|
+
* Additional tag for email, usefull for identyfying emails by category or module that sends it
|
|
19
|
+
*/
|
|
20
|
+
Tag?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Unique email id, for identification eg. in case of delivery failure
|
|
23
|
+
*/
|
|
24
|
+
EmailId?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Id of the failed queue job.
|
|
27
|
+
*/
|
|
28
|
+
JobId?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Failure reason - message only, so it stays wire-safe ( no stack / PII ).
|
|
31
|
+
*/
|
|
32
|
+
Error: string;
|
|
33
|
+
/**
|
|
34
|
+
* The attempt number that finally failed.
|
|
35
|
+
*/
|
|
36
|
+
Attempt?: number;
|
|
37
|
+
/**
|
|
38
|
+
* The total allowed executions for the job ( retries + 1 ).
|
|
39
|
+
*/
|
|
40
|
+
MaxAttempts?: number;
|
|
41
|
+
FailedAt: DateTime;
|
|
42
|
+
constructor(email: IEmail, err: unknown, ctx?: IJobFailureContext);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=EmailSendFailed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailSendFailed.d.ts","sourceRoot":"","sources":["../../../src/events/EmailSendFailed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAS,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;GAGG;AACH,qBACa,eAAgB,SAAQ,UAAU;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,EAAE,EAAE,MAAM,EAAE,CAAC;IAEb,OAAO,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACI,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAE1C;;OAEG;IACI,GAAG,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACI,KAAK,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACI,KAAK,EAAE,MAAM,CAAC;IAErB;;OAEG;IACI,OAAO,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACI,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,QAAQ,CAAC;gBAEd,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,kBAAkB;CAmBlE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EmailSendFailed = void 0;
|
|
13
|
+
const queue_1 = require("@spinajs/queue");
|
|
14
|
+
const luxon_1 = require("luxon");
|
|
15
|
+
/**
|
|
16
|
+
* Emitted when a deferred email job has finally failed ( retries exhausted ).
|
|
17
|
+
* Carries only wire-safe fields so it can be routed to alerting / dead-letter handling.
|
|
18
|
+
*/
|
|
19
|
+
let EmailSendFailed = class EmailSendFailed extends queue_1.QueueEvent {
|
|
20
|
+
constructor(email, err, ctx) {
|
|
21
|
+
super();
|
|
22
|
+
this.Connection = email.connection;
|
|
23
|
+
this.From = email.from ?? '';
|
|
24
|
+
this.To = email.to;
|
|
25
|
+
this.Subject = email.subject;
|
|
26
|
+
this.Template = email.template;
|
|
27
|
+
this.Tag = email.tag;
|
|
28
|
+
this.EmailId = email.emailId;
|
|
29
|
+
this.JobId = ctx?.jobId;
|
|
30
|
+
this.Attempt = ctx?.attempt;
|
|
31
|
+
this.MaxAttempts = ctx?.maxAttempts;
|
|
32
|
+
this.Error = err instanceof Error ? err.message : String(err);
|
|
33
|
+
this.FailedAt = luxon_1.DateTime.now();
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
exports.EmailSendFailed = EmailSendFailed;
|
|
37
|
+
exports.EmailSendFailed = EmailSendFailed = __decorate([
|
|
38
|
+
(0, queue_1.Event)(),
|
|
39
|
+
__metadata("design:paramtypes", [Object, Object, Object])
|
|
40
|
+
], EmailSendFailed);
|
|
41
|
+
//# sourceMappingURL=EmailSendFailed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailSendFailed.js","sourceRoot":"","sources":["../../../src/events/EmailSendFailed.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0CAAuE;AACvE,iCAAiC;AAGjC;;;GAGG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,kBAAU;IA8C7C,YAAY,KAAa,EAAE,GAAY,EAAE,GAAwB;QAC/D,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE7B,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,GAAG,EAAE,WAAW,CAAC;QAEpC,IAAI,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9D,IAAI,CAAC,QAAQ,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF,CAAA;AAjEY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,aAAK,GAAE;;GACK,eAAe,CAiE3B"}
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { EmailSend } from './jobs/EmailSend.js';
|
|
|
4
4
|
export * from './interfaces.js';
|
|
5
5
|
export * from './transports.js';
|
|
6
6
|
export * from './jobs/EmailSend.js';
|
|
7
|
+
export * from './events/EmailSent.js';
|
|
8
|
+
export * from './events/EmailSendFailed.js';
|
|
7
9
|
export * from "./fp.js";
|
|
8
10
|
export declare class LogBotstrapper extends Bootstrapper {
|
|
9
11
|
bootstrap(): void;
|
|
@@ -20,6 +22,6 @@ export declare class DefaultEmailService extends EmailService {
|
|
|
20
22
|
*/
|
|
21
23
|
send(email: IEmail): Promise<void>;
|
|
22
24
|
sendDeferred(email: IEmail): Promise<EmailSend>;
|
|
23
|
-
|
|
25
|
+
processDeferredEmails(): Promise<void>;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,YAAY,EAAc,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,YAAY,EAAc,MAAM,aAAa,CAAC;AAE3D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC;AAExB,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI;CAGzB;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiClC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoB/C,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpD"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.DefaultEmailService = exports.LogBotstrapper = void 0;
|
|
27
27
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
28
28
|
const di_1 = require("@spinajs/di");
|
|
29
|
+
const log_1 = require("@spinajs/log");
|
|
29
30
|
const interfaces_js_1 = require("./interfaces.js");
|
|
30
31
|
const email_smtp_configuration_js_1 = __importDefault(require("./schemas/email.smtp.configuration.js"));
|
|
31
32
|
const EmailSent_js_1 = require("./events/EmailSent.js");
|
|
@@ -33,6 +34,8 @@ const EmailSend_js_1 = require("./jobs/EmailSend.js");
|
|
|
33
34
|
__exportStar(require("./interfaces.js"), exports);
|
|
34
35
|
__exportStar(require("./transports.js"), exports);
|
|
35
36
|
__exportStar(require("./jobs/EmailSend.js"), exports);
|
|
37
|
+
__exportStar(require("./events/EmailSent.js"), exports);
|
|
38
|
+
__exportStar(require("./events/EmailSendFailed.js"), exports);
|
|
36
39
|
__exportStar(require("./fp.js"), exports);
|
|
37
40
|
let LogBotstrapper = class LogBotstrapper extends di_1.Bootstrapper {
|
|
38
41
|
bootstrap() {
|
|
@@ -54,16 +57,39 @@ let DefaultEmailService = class DefaultEmailService extends interfaces_js_1.Emai
|
|
|
54
57
|
* @param email - email struct
|
|
55
58
|
*/
|
|
56
59
|
async send(email) {
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
const connection = email.connection;
|
|
61
|
+
if (!this.Senders.has(connection)) {
|
|
62
|
+
this.Log.error(`Email sender ${connection} not exists. Please check your configuration files.`);
|
|
63
|
+
log_1.Perf.count('email.send.failed', 1, { connection });
|
|
64
|
+
throw new exceptions_1.InvalidOperation(`Email sender ${connection} not exists. Please check your configuration files.`);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
await log_1.Perf.measure('email.send', () => this.Senders.get(connection).send(email), { labels: { connection } });
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
// full recipient addresses are PII - keep them at trace level only, log just the count otherwise.
|
|
71
|
+
this.Log.error(err, `Cannot send email on connection ${connection}, subject: ${email.subject}, recipients: ${email.to?.length ?? 0}`);
|
|
72
|
+
this.Log.trace(`Failed email recipients on connection ${connection}: ${(email.to ?? []).join(', ')}`);
|
|
73
|
+
log_1.Perf.count('email.send.failed', 1, { connection });
|
|
74
|
+
// rethrow the ORIGINAL error so the queue consumer sees the failure and can retry / dead-letter.
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
log_1.Perf.count('email.sent', 1, { connection });
|
|
78
|
+
this.Log.info(`Email sent on connection ${connection}, subject: ${email.subject}, recipients: ${email.to?.length ?? 0}`);
|
|
79
|
+
// inform others of email event. Guard separately: rethrowing after a successful SMTP send
|
|
80
|
+
// would make the queue retry the job and send a DUPLICATE email.
|
|
81
|
+
try {
|
|
82
|
+
await this.Queue.emit(new EmailSent_js_1.EmailSent(email));
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
this.Log.error(err, `Failed to emit EmailSent event on connection ${connection}, subject: ${email.subject}`);
|
|
59
86
|
}
|
|
60
|
-
await this.Senders.get(email.connection).send(email);
|
|
61
|
-
// inform others of email event
|
|
62
|
-
await this.Queue.emit(new EmailSent_js_1.EmailSent(email));
|
|
63
87
|
}
|
|
64
88
|
async sendDeferred(email) {
|
|
65
89
|
const dEmail = new EmailSend_js_1.EmailSend();
|
|
66
90
|
dEmail.hydrate(email);
|
|
91
|
+
// queue-level retry: per-email override wins, then config default, then 3.
|
|
92
|
+
dEmail.RetryCount = email.retryCount ?? this.Configuration.retry?.count ?? 3;
|
|
67
93
|
/** set queue schedule */
|
|
68
94
|
if (email.schedule) {
|
|
69
95
|
dEmail.ScheduleCron = email.schedule.cron;
|
|
@@ -74,7 +100,7 @@ let DefaultEmailService = class DefaultEmailService extends interfaces_js_1.Emai
|
|
|
74
100
|
await this.Queue.emit(dEmail);
|
|
75
101
|
return dEmail;
|
|
76
102
|
}
|
|
77
|
-
async
|
|
103
|
+
async processDeferredEmails() {
|
|
78
104
|
await this.Queue.consume(EmailSend_js_1.EmailSend);
|
|
79
105
|
}
|
|
80
106
|
};
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAuD;AACvD,oCAA2D;AAC3D,mDAAuD;AACvD,wGAAyE;AACzE,wDAAkD;AAClD,sDAAgD;AAEhD,kDAAgC;AAChC,kDAAgC;AAChC,sDAAoC;AACpC,0CAAwB;AAGjB,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,iBAAY;IACvC,SAAS;QACd,OAAE,CAAC,QAAQ,CAAC,qCAAoB,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACvE,CAAC;CACF,CAAA;AAJY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,eAAU,EAAC,iBAAY,CAAC;GACZ,cAAc,CAI1B;AAED;;GAEG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,4BAAY;IACnD;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAuD;AACvD,oCAA2D;AAC3D,sCAAoC;AACpC,mDAAuD;AACvD,wGAAyE;AACzE,wDAAkD;AAClD,sDAAgD;AAEhD,kDAAgC;AAChC,kDAAgC;AAChC,sDAAoC;AACpC,wDAAsC;AACtC,8DAA4C;AAC5C,0CAAwB;AAGjB,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,iBAAY;IACvC,SAAS;QACd,OAAE,CAAC,QAAQ,CAAC,qCAAoB,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACvE,CAAC;CACF,CAAA;AAJY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,eAAU,EAAC,iBAAY,CAAC;GACZ,cAAc,CAI1B;AAED;;GAEG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,4BAAY;IACnD;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,UAAU,qDAAqD,CAAC,CAAC;YAChG,UAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,6BAAgB,CAAC,gBAAgB,UAAU,qDAAqD,CAAC,CAAC;QAC9G,CAAC;QAED,IAAI,CAAC;YACH,MAAM,UAAI,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAChH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,kGAAkG;YAClG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,mCAAmC,UAAU,cAAc,KAAK,CAAC,OAAO,iBAAiB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACtI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,UAAU,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtG,UAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAEnD,iGAAiG;YACjG,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,UAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,UAAU,cAAc,KAAK,CAAC,OAAO,iBAAiB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;QAEzH,0FAA0F;QAC1F,iEAAiE;QACjE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,wBAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,gDAAgD,UAAU,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa;QACrC,MAAM,MAAM,GAAG,IAAI,wBAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEtB,2EAA2E;QAC3E,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;QAE7E,yBAAyB;QACzB,IAAG,KAAK,CAAC,QAAQ,EAAC,CAAC;YACjB,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5C,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC9C,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE9B,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAS,CAAC,CAAC;IACtC,CAAC;CACF,CAAA;AA/DY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,eAAU,EAAC,4BAAY,CAAC;GACZ,mBAAmB,CA+D/B"}
|
package/lib/cjs/interfaces.d.ts
CHANGED
|
@@ -88,6 +88,11 @@ export interface IEmail {
|
|
|
88
88
|
* Unique email id, for identification eg. in case of delivery failure
|
|
89
89
|
*/
|
|
90
90
|
emailId?: string;
|
|
91
|
+
/**
|
|
92
|
+
* Per-email override of the queue-level retry count used when the email is sent deferred.
|
|
93
|
+
* Falls back to `email.retry.count` configuration when not set.
|
|
94
|
+
*/
|
|
95
|
+
retryCount?: number;
|
|
91
96
|
/**
|
|
92
97
|
* Email delivery schedule. If we want to repeat email, schedule to send at specific time, send delayed etc..
|
|
93
98
|
*/
|
|
@@ -113,14 +118,27 @@ export interface IEmail {
|
|
|
113
118
|
export interface EmailConfiguration {
|
|
114
119
|
connections: EmailConnectionOptions[];
|
|
115
120
|
defaultConnection: string;
|
|
121
|
+
/**
|
|
122
|
+
* Default queue-level retry policy for deferred emails.
|
|
123
|
+
*/
|
|
124
|
+
retry?: {
|
|
125
|
+
/**
|
|
126
|
+
* How many times a deferred email job is retried on failure. Defaults to 3.
|
|
127
|
+
*/
|
|
128
|
+
count?: number;
|
|
129
|
+
};
|
|
116
130
|
}
|
|
117
131
|
export interface EmailConnectionOptions {
|
|
118
|
-
|
|
132
|
+
/**
|
|
133
|
+
* DI service name of the {@link EmailSender} implementation handling this connection.
|
|
134
|
+
* Selected via {@link AutoinjectService} ( reads the `service` key of each connection entry ).
|
|
135
|
+
*/
|
|
136
|
+
service: string;
|
|
119
137
|
name: string;
|
|
120
138
|
host?: string;
|
|
121
139
|
port?: number;
|
|
122
140
|
user?: string;
|
|
123
|
-
|
|
141
|
+
password?: string;
|
|
124
142
|
ssl?: boolean;
|
|
125
143
|
templates?: {
|
|
126
144
|
defaults?: any;
|
|
@@ -134,6 +152,24 @@ export interface EmailConnectionOptions {
|
|
|
134
152
|
*/
|
|
135
153
|
mailFrom?: string;
|
|
136
154
|
};
|
|
155
|
+
/**
|
|
156
|
+
* In-process SMTP send resilience ( retry / timeout ) applied by transports when
|
|
157
|
+
* talking to the SMTP server, independent of the queue-level job retry.
|
|
158
|
+
*/
|
|
159
|
+
resilience?: {
|
|
160
|
+
/**
|
|
161
|
+
* How many times the transport retries a failed SMTP send.
|
|
162
|
+
*/
|
|
163
|
+
retries?: number;
|
|
164
|
+
/**
|
|
165
|
+
* Delay ( ms ) between SMTP send retries.
|
|
166
|
+
*/
|
|
167
|
+
delay?: number;
|
|
168
|
+
/**
|
|
169
|
+
* Timeout ( ms ) for a single SMTP send attempt.
|
|
170
|
+
*/
|
|
171
|
+
timeout?: number;
|
|
172
|
+
};
|
|
137
173
|
/**
|
|
138
174
|
* Additional options passed
|
|
139
175
|
* lib specific
|
|
@@ -163,6 +199,6 @@ export declare abstract class EmailService extends AsyncService {
|
|
|
163
199
|
/**
|
|
164
200
|
* Subscribte to queue for emails to send
|
|
165
201
|
*/
|
|
166
|
-
abstract
|
|
202
|
+
abstract processDeferredEmails(): Promise<void>;
|
|
167
203
|
}
|
|
168
204
|
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,gBAAgB,EAA6C,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,GAAG,EAAU,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,8BAAsB,WAAY,SAAQ,YAAa,YAAW,gBAAgB;IACzE,OAAO,EAAE,sBAAsB,CAAC;IAGvC,SAAS,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAExC,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAEhC,IAAW,WAAW,WAErB;IAED,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE9B,OAAO;CASrB;AAED,qBAEa,oBAAqB,SAAQ,WAAW;IAKhC,OAAO,EAAE,sBAAsB;IAHlD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;gBAGA,OAAO,EAAE,sBAAsB;IAIrC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIjD;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAE7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,EAAE,CAAC;IAEb,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAEd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IAEnC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,KAAK,CAAC,EAAE,GAAG,CAAC;IAEZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,OAAO,EAAE,MAAM,CAAC;IAEhB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE;QAET;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAA;KAEhB,CAAA;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,sBAAsB,EAAE,CAAC;IACtC,iBAAiB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAwH;AACxH,sCAA2C;AAC3C,0DAAmE;AACnE,0CAA8C;AAG9C,MAAsB,WAAY,SAAQ,iBAAY;IAQpD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAIM,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,OAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAEvF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,IAAI,qBAAgB,CAAC,oCAAoC,GAAG,IAAI,CAAC,qBAAqB,GAAG,4GAA4G,GAAG,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;YAC/P,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvBD,kCAuBC;AAnBW;IADT,IAAA,sBAAM,EAAC,kBAAkB,CAAC;;0DACa;AAuBnC,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAKnD,YAAmB,OAA+B;QAChD,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAwB;IAElD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;CACF,CAAA;AAbY,oDAAoB;AAErB;IADT,IAAA,YAAM,EAAC,OAAO,CAAC;8BACD,SAAG;iDAAC;+BAFR,oBAAoB;IAFhC,IAAA,eAAU,EAAC,WAAW,CAAC;IACvB,IAAA,gBAAW,GAAE;;GACD,oBAAoB,CAahC;
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAwH;AACxH,sCAA2C;AAC3C,0DAAmE;AACnE,0CAA8C;AAG9C,MAAsB,WAAY,SAAQ,iBAAY;IAQpD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAIM,KAAK,CAAC,OAAO;QAClB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,OAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAEvF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,IAAI,qBAAgB,CAAC,oCAAoC,GAAG,IAAI,CAAC,qBAAqB,GAAG,4GAA4G,GAAG,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;YAC/P,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAvBD,kCAuBC;AAnBW;IADT,IAAA,sBAAM,EAAC,kBAAkB,CAAC;;0DACa;AAuBnC,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAKnD,YAAmB,OAA+B;QAChD,KAAK,EAAE,CAAC;QADS,YAAO,GAAP,OAAO,CAAwB;IAElD,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;CACF,CAAA;AAbY,oDAAoB;AAErB;IADT,IAAA,YAAM,EAAC,OAAO,CAAC;8BACD,SAAG;iDAAC;+BAFR,oBAAoB;IAFhC,IAAA,eAAU,EAAC,WAAW,CAAC;IACvB,IAAA,gBAAW,GAAE;;GACD,oBAAoB,CAahC;AAuMD,MAAsB,YAAa,SAAQ,iBAAY;CAmCtD;AAnCD,oCAmCC;AAjCW;IADT,IAAA,YAAM,EAAC,OAAO,CAAC;8BACD,SAAG;yCAAC;AAGT;IADT,IAAA,iCAAiB,EAAC,mBAAmB,EAAE,WAAW,CAAC;8BACjC,GAAG;6CAAsB;AAGlC;IADT,IAAA,sBAAM,EAAC,OAAO,CAAC;;mDAC4B;AAGlC;IADT,IAAA,eAAU,EAAC,oBAAY,CAAC;8BACR,oBAAY;2CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { QueueJob } from '@spinajs/queue';
|
|
2
|
-
import { IEmail, IEmailAttachement } from '../interfaces.js';
|
|
1
|
+
import { QueueJob, IJobFailureContext } from '@spinajs/queue';
|
|
2
|
+
import { IEmail, IEmailAttachement, IEmailTemplate } from '../interfaces.js';
|
|
3
3
|
/**
|
|
4
4
|
* Job for sending emails in background
|
|
5
5
|
*/
|
|
@@ -10,7 +10,7 @@ export declare class EmailSend extends QueueJob implements IEmail {
|
|
|
10
10
|
from: string;
|
|
11
11
|
connection: string;
|
|
12
12
|
attachements?: IEmailAttachement[];
|
|
13
|
-
template?: string;
|
|
13
|
+
template?: string | IEmailTemplate;
|
|
14
14
|
templateId?: string;
|
|
15
15
|
model?: unknown;
|
|
16
16
|
text?: string;
|
|
@@ -23,5 +23,6 @@ export declare class EmailSend extends QueueJob implements IEmail {
|
|
|
23
23
|
execute(): Promise<{
|
|
24
24
|
result: boolean;
|
|
25
25
|
}>;
|
|
26
|
+
onFailed(err: unknown, ctx: IJobFailureContext): Promise<void>;
|
|
26
27
|
}
|
|
27
28
|
//# sourceMappingURL=EmailSend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailSend.d.ts","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"EmailSend.d.ts","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAqB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAgB,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG3F;;GAEG;AACH,qBACa,SAAU,SAAQ,QAAS,YAAW,MAAM;IAChD,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IAEX,OAAO;;;IAQP,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,kBAAkB;CAK5D"}
|
|
@@ -10,6 +10,7 @@ exports.EmailSend = void 0;
|
|
|
10
10
|
const di_1 = require("@spinajs/di");
|
|
11
11
|
const queue_1 = require("@spinajs/queue");
|
|
12
12
|
const interfaces_js_1 = require("../interfaces.js");
|
|
13
|
+
const EmailSendFailed_js_1 = require("../events/EmailSendFailed.js");
|
|
13
14
|
/**
|
|
14
15
|
* Job for sending emails in background
|
|
15
16
|
*/
|
|
@@ -21,6 +22,12 @@ let EmailSend = class EmailSend extends queue_1.QueueJob {
|
|
|
21
22
|
result: true,
|
|
22
23
|
};
|
|
23
24
|
}
|
|
25
|
+
async onFailed(err, ctx) {
|
|
26
|
+
if (!ctx.isFinal)
|
|
27
|
+
return;
|
|
28
|
+
const queue = await di_1.DI.resolve(queue_1.QueueService);
|
|
29
|
+
await queue.emit(new EmailSendFailed_js_1.EmailSendFailed(this, err, ctx));
|
|
30
|
+
}
|
|
24
31
|
};
|
|
25
32
|
exports.EmailSend = EmailSend;
|
|
26
33
|
exports.EmailSend = EmailSend = __decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EmailSend.js","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oCAAiC;AACjC,
|
|
1
|
+
{"version":3,"file":"EmailSend.js","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oCAAiC;AACjC,0CAAiF;AACjF,oDAA2F;AAC3F,qEAA+D;AAE/D;;GAEG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,gBAAQ;IAkB9B,KAAK,CAAC,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,OAAE,CAAC,OAAO,CAAC,4BAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,GAAY,EAAE,GAAuB;QACzD,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QACzB,MAAM,KAAK,GAAG,MAAM,OAAE,CAAC,OAAO,CAAC,oBAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,oCAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AA/BY,8BAAS;oBAAT,SAAS;IADrB,IAAA,WAAG,GAAE;GACO,SAAS,CA+BrB"}
|
|
@@ -4,7 +4,20 @@ declare const CONFIGURATION_SCHEMA: {
|
|
|
4
4
|
description: string;
|
|
5
5
|
type: string;
|
|
6
6
|
properties: {
|
|
7
|
-
queue:
|
|
7
|
+
queue: {
|
|
8
|
+
type: string;
|
|
9
|
+
};
|
|
10
|
+
templateFs: {
|
|
11
|
+
type: string;
|
|
12
|
+
};
|
|
13
|
+
retry: {
|
|
14
|
+
type: string;
|
|
15
|
+
properties: {
|
|
16
|
+
count: {
|
|
17
|
+
type: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
8
21
|
connections: {
|
|
9
22
|
type: string;
|
|
10
23
|
uniqueItems: boolean;
|
|
@@ -29,12 +42,26 @@ declare const CONFIGURATION_SCHEMA: {
|
|
|
29
42
|
name: {
|
|
30
43
|
type: string;
|
|
31
44
|
};
|
|
32
|
-
|
|
45
|
+
service: {
|
|
33
46
|
type: string;
|
|
34
47
|
};
|
|
35
48
|
options: {
|
|
36
49
|
type: string;
|
|
37
50
|
};
|
|
51
|
+
resilience: {
|
|
52
|
+
type: string;
|
|
53
|
+
properties: {
|
|
54
|
+
retries: {
|
|
55
|
+
type: string;
|
|
56
|
+
};
|
|
57
|
+
delay: {
|
|
58
|
+
type: string;
|
|
59
|
+
};
|
|
60
|
+
timeout: {
|
|
61
|
+
type: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
38
65
|
defaults: {
|
|
39
66
|
type: string;
|
|
40
67
|
properties: {
|
|
@@ -44,10 +71,10 @@ declare const CONFIGURATION_SCHEMA: {
|
|
|
44
71
|
};
|
|
45
72
|
};
|
|
46
73
|
};
|
|
74
|
+
required: string[];
|
|
47
75
|
};
|
|
48
76
|
};
|
|
49
77
|
};
|
|
50
|
-
required: string[];
|
|
51
78
|
};
|
|
52
79
|
export default CONFIGURATION_SCHEMA;
|
|
53
80
|
//# sourceMappingURL=email.smtp.configuration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.smtp.configuration.d.ts","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB
|
|
1
|
+
{"version":3,"file":"email.smtp.configuration.d.ts","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -6,7 +6,14 @@ const CONFIGURATION_SCHEMA = {
|
|
|
6
6
|
description: 'Email smtp transport configuration option validation',
|
|
7
7
|
type: 'object',
|
|
8
8
|
properties: {
|
|
9
|
-
queue: 'string',
|
|
9
|
+
queue: { type: 'string' },
|
|
10
|
+
templateFs: { type: 'string' },
|
|
11
|
+
retry: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {
|
|
14
|
+
count: { type: 'number' },
|
|
15
|
+
},
|
|
16
|
+
},
|
|
10
17
|
connections: {
|
|
11
18
|
type: 'array',
|
|
12
19
|
uniqueItems: true,
|
|
@@ -19,10 +26,18 @@ const CONFIGURATION_SCHEMA = {
|
|
|
19
26
|
user: { type: 'string' },
|
|
20
27
|
password: { type: 'string' },
|
|
21
28
|
name: { type: 'string' },
|
|
22
|
-
|
|
29
|
+
service: { type: 'string' },
|
|
23
30
|
options: {
|
|
24
31
|
type: 'object',
|
|
25
32
|
},
|
|
33
|
+
resilience: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
properties: {
|
|
36
|
+
retries: { type: 'number' },
|
|
37
|
+
delay: { type: 'number' },
|
|
38
|
+
timeout: { type: 'number' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
26
41
|
defaults: {
|
|
27
42
|
type: 'object',
|
|
28
43
|
properties: {
|
|
@@ -30,10 +45,10 @@ const CONFIGURATION_SCHEMA = {
|
|
|
30
45
|
},
|
|
31
46
|
},
|
|
32
47
|
},
|
|
48
|
+
required: ['name', 'service'],
|
|
33
49
|
},
|
|
34
50
|
},
|
|
35
51
|
},
|
|
36
|
-
required: ['name', 'sender'],
|
|
37
52
|
};
|
|
38
53
|
exports.default = CONFIGURATION_SCHEMA;
|
|
39
54
|
//# sourceMappingURL=email.smtp.configuration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.smtp.configuration.js","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":";;AAAA,MAAM,oBAAoB,GAAG;IAC3B,GAAG,EAAE,yCAAyC;IAC9C,oBAAoB,EAAE,OAAO;IAC7B,WAAW,EAAE,sDAAsD;IACnE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"email.smtp.configuration.js","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":";;AAAA,MAAM,oBAAoB,GAAG;IAC3B,GAAG,EAAE,yCAAyC;IAC9C,oBAAoB,EAAE,OAAO;IAC7B,WAAW,EAAE,sDAAsD;IACnE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;aAC1B;SACF;QACD,WAAW,EAAE;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,IAAI;YACjB,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC3B,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;qBACf;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC5B;qBACF;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC7B;qBACF;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC9B;SACF;KACF;CACF,CAAC;AAEF,kBAAe,oBAAoB,CAAC"}
|
package/lib/mjs/cli/EmailSrv.js
CHANGED
|
@@ -13,7 +13,7 @@ import { Logger, Log } from '@spinajs/log-common';
|
|
|
13
13
|
import { EmailService } from './../index.js';
|
|
14
14
|
let EmailServer = class EmailServer extends CliCommand {
|
|
15
15
|
async execute() {
|
|
16
|
-
await this.EmailService.
|
|
16
|
+
await this.EmailService.processDeferredEmails();
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
19
|
__decorate([
|
|
@@ -12,21 +12,31 @@ declare const email: {
|
|
|
12
12
|
* FS must be set in configuration on server/app that sends emails
|
|
13
13
|
*/
|
|
14
14
|
templateFs: string;
|
|
15
|
+
/**
|
|
16
|
+
* Default queue-level retry count for deferred emails.
|
|
17
|
+
*/
|
|
18
|
+
retry: {
|
|
19
|
+
count: number;
|
|
20
|
+
};
|
|
15
21
|
};
|
|
16
22
|
queue: {
|
|
17
23
|
routing: {
|
|
18
|
-
|
|
24
|
+
EmailSend: {
|
|
19
25
|
connection: string;
|
|
20
26
|
};
|
|
21
27
|
EmailSent: {
|
|
22
28
|
connection: string;
|
|
23
29
|
};
|
|
30
|
+
EmailSendFailed: {
|
|
31
|
+
connection: string;
|
|
32
|
+
};
|
|
24
33
|
};
|
|
25
34
|
connections: {
|
|
26
35
|
name: string;
|
|
27
36
|
service: string;
|
|
28
37
|
defaultQueueChannel: string;
|
|
29
38
|
defaultTopicChannel: string;
|
|
39
|
+
defaultQueueDeadLetterChannel: string;
|
|
30
40
|
}[];
|
|
31
41
|
};
|
|
32
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,KAAK;;;;;;;;;QAWP;;;WAGG
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAYA,QAAA,MAAM,KAAK;;;;;;;;;QAWP;;;WAGG;;QAGH;;WAEG;;;;;;;;;;;;;;;;;;;;;;;;;CAuBN,CAAC;AAEF,eAAe,KAAK,CAAC"}
|