@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.
Files changed (51) hide show
  1. package/lib/cjs/cli/EmailSrv.js +1 -1
  2. package/lib/cjs/config/email.d.ts +11 -1
  3. package/lib/cjs/config/email.d.ts.map +1 -1
  4. package/lib/cjs/config/email.js +9 -1
  5. package/lib/cjs/config/email.js.map +1 -1
  6. package/lib/cjs/events/EmailSendFailed.d.ts +44 -0
  7. package/lib/cjs/events/EmailSendFailed.d.ts.map +1 -0
  8. package/lib/cjs/events/EmailSendFailed.js +41 -0
  9. package/lib/cjs/events/EmailSendFailed.js.map +1 -0
  10. package/lib/cjs/index.d.ts +3 -1
  11. package/lib/cjs/index.d.ts.map +1 -1
  12. package/lib/cjs/index.js +32 -6
  13. package/lib/cjs/index.js.map +1 -1
  14. package/lib/cjs/interfaces.d.ts +39 -3
  15. package/lib/cjs/interfaces.d.ts.map +1 -1
  16. package/lib/cjs/interfaces.js.map +1 -1
  17. package/lib/cjs/jobs/EmailSend.d.ts +4 -3
  18. package/lib/cjs/jobs/EmailSend.d.ts.map +1 -1
  19. package/lib/cjs/jobs/EmailSend.js +7 -0
  20. package/lib/cjs/jobs/EmailSend.js.map +1 -1
  21. package/lib/cjs/schemas/email.smtp.configuration.d.ts +30 -3
  22. package/lib/cjs/schemas/email.smtp.configuration.d.ts.map +1 -1
  23. package/lib/cjs/schemas/email.smtp.configuration.js +18 -3
  24. package/lib/cjs/schemas/email.smtp.configuration.js.map +1 -1
  25. package/lib/mjs/cli/EmailSrv.js +1 -1
  26. package/lib/mjs/config/email.d.ts +11 -1
  27. package/lib/mjs/config/email.d.ts.map +1 -1
  28. package/lib/mjs/config/email.js +9 -1
  29. package/lib/mjs/config/email.js.map +1 -1
  30. package/lib/mjs/events/EmailSendFailed.d.ts +44 -0
  31. package/lib/mjs/events/EmailSendFailed.d.ts.map +1 -0
  32. package/lib/mjs/events/EmailSendFailed.js +38 -0
  33. package/lib/mjs/events/EmailSendFailed.js.map +1 -0
  34. package/lib/mjs/index.d.ts +3 -1
  35. package/lib/mjs/index.d.ts.map +1 -1
  36. package/lib/mjs/index.js +32 -6
  37. package/lib/mjs/index.js.map +1 -1
  38. package/lib/mjs/interfaces.d.ts +39 -3
  39. package/lib/mjs/interfaces.d.ts.map +1 -1
  40. package/lib/mjs/interfaces.js.map +1 -1
  41. package/lib/mjs/jobs/EmailSend.d.ts +4 -3
  42. package/lib/mjs/jobs/EmailSend.d.ts.map +1 -1
  43. package/lib/mjs/jobs/EmailSend.js +8 -1
  44. package/lib/mjs/jobs/EmailSend.js.map +1 -1
  45. package/lib/mjs/schemas/email.smtp.configuration.d.ts +30 -3
  46. package/lib/mjs/schemas/email.smtp.configuration.d.ts.map +1 -1
  47. package/lib/mjs/schemas/email.smtp.configuration.js +18 -3
  48. package/lib/mjs/schemas/email.smtp.configuration.js.map +1 -1
  49. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  50. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  51. package/package.json +17 -18
@@ -22,11 +22,18 @@ const email = {
22
22
  * FS must be set in configuration on server/app that sends emails
23
23
  */
24
24
  templateFs: "email-templates",
25
+ /**
26
+ * Default queue-level retry count for deferred emails.
27
+ */
28
+ retry: {
29
+ count: 3,
30
+ },
25
31
  },
26
32
  queue: {
27
33
  routing: {
28
- EmailSendJob: { connection: 'email-queue-black-hole' },
34
+ EmailSend: { connection: 'email-queue-black-hole' },
29
35
  EmailSent: { connection: 'email-queue-black-hole' },
36
+ EmailSendFailed: { connection: 'email-queue-black-hole' },
30
37
  },
31
38
  // by default we dont have queue server for sending emails
32
39
  connections: [
@@ -35,6 +42,7 @@ const email = {
35
42
  service: 'BlackHoleQueueClient',
36
43
  defaultQueueChannel: 'email-jobs',
37
44
  defaultTopicChannel: 'email-events',
45
+ defaultQueueDeadLetterChannel: 'email-jobs-dlq',
38
46
  },
39
47
  ],
40
48
  },
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,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,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,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;KAC9B;IACD,KAAK,EAAE;QACL,OAAO,EAAE;YACP,YAAY,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;YACtD,SAAS,EAAE,EAAE,UAAU,EAAE,wBAAwB,EAAE;SACpD;QAED,0DAA0D;QAC1D,WAAW,EAAE;YACX;gBACE,IAAI,EAAE,wBAAwB;gBAC9B,OAAO,EAAE,sBAAsB;gBAC/B,mBAAmB,EAAE,YAAY;gBACjC,mBAAmB,EAAE,cAAc;aACpC;SACF;KACF;CACF,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/config/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEhD,SAAS,GAAG,CAAC,IAAY;IACvB,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC;IACjD,OAAO;QACL,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,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,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,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,eAAe,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,38 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { QueueEvent, Event } from '@spinajs/queue';
11
+ import { DateTime } from 'luxon';
12
+ /**
13
+ * Emitted when a deferred email job has finally failed ( retries exhausted ).
14
+ * Carries only wire-safe fields so it can be routed to alerting / dead-letter handling.
15
+ */
16
+ let EmailSendFailed = class EmailSendFailed extends QueueEvent {
17
+ constructor(email, err, ctx) {
18
+ super();
19
+ this.Connection = email.connection;
20
+ this.From = email.from ?? '';
21
+ this.To = email.to;
22
+ this.Subject = email.subject;
23
+ this.Template = email.template;
24
+ this.Tag = email.tag;
25
+ this.EmailId = email.emailId;
26
+ this.JobId = ctx?.jobId;
27
+ this.Attempt = ctx?.attempt;
28
+ this.MaxAttempts = ctx?.maxAttempts;
29
+ this.Error = err instanceof Error ? err.message : String(err);
30
+ this.FailedAt = DateTime.now();
31
+ }
32
+ };
33
+ EmailSendFailed = __decorate([
34
+ Event(),
35
+ __metadata("design:paramtypes", [Object, Object, Object])
36
+ ], EmailSendFailed);
37
+ export { EmailSendFailed };
38
+ //# sourceMappingURL=EmailSendFailed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailSendFailed.js","sourceRoot":"","sources":["../../../src/events/EmailSendFailed.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAsB,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC;;;GAGG;AAEI,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU;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,QAAQ,CAAC,GAAG,EAAE,CAAC;IACjC,CAAC;CACF,CAAA;AAjEY,eAAe;IAD3B,KAAK,EAAE;;GACK,eAAe,CAiE3B"}
@@ -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
- processDefferedEmails(): Promise<void>;
25
+ processDeferredEmails(): Promise<void>;
24
26
  }
25
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,YAAY,EAAc,MAAM,aAAa,CAAC;AAC3D,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,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;IAWlC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiB/C,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpD"}
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/mjs/index.js CHANGED
@@ -6,6 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { InvalidOperation } from '@spinajs/exceptions';
8
8
  import { DI, Bootstrapper, Injectable } from '@spinajs/di';
9
+ import { Perf } from '@spinajs/log';
9
10
  import { EmailService } from './interfaces.js';
10
11
  import CONFIGURATION_SCHEMA from './schemas/email.smtp.configuration.js';
11
12
  import { EmailSent } from './events/EmailSent.js';
@@ -13,6 +14,8 @@ import { EmailSend } from './jobs/EmailSend.js';
13
14
  export * from './interfaces.js';
14
15
  export * from './transports.js';
15
16
  export * from './jobs/EmailSend.js';
17
+ export * from './events/EmailSent.js';
18
+ export * from './events/EmailSendFailed.js';
16
19
  export * from "./fp.js";
17
20
  let LogBotstrapper = class LogBotstrapper extends Bootstrapper {
18
21
  bootstrap() {
@@ -34,16 +37,39 @@ let DefaultEmailService = class DefaultEmailService extends EmailService {
34
37
  * @param email - email struct
35
38
  */
36
39
  async send(email) {
37
- if (!this.Senders.has(email.connection)) {
38
- throw new InvalidOperation(`Email sender ${email.connection} not exists. Please check your configuration files.`);
40
+ const connection = email.connection;
41
+ if (!this.Senders.has(connection)) {
42
+ this.Log.error(`Email sender ${connection} not exists. Please check your configuration files.`);
43
+ Perf.count('email.send.failed', 1, { connection });
44
+ throw new InvalidOperation(`Email sender ${connection} not exists. Please check your configuration files.`);
45
+ }
46
+ try {
47
+ await Perf.measure('email.send', () => this.Senders.get(connection).send(email), { labels: { connection } });
48
+ }
49
+ catch (err) {
50
+ // full recipient addresses are PII - keep them at trace level only, log just the count otherwise.
51
+ this.Log.error(err, `Cannot send email on connection ${connection}, subject: ${email.subject}, recipients: ${email.to?.length ?? 0}`);
52
+ this.Log.trace(`Failed email recipients on connection ${connection}: ${(email.to ?? []).join(', ')}`);
53
+ Perf.count('email.send.failed', 1, { connection });
54
+ // rethrow the ORIGINAL error so the queue consumer sees the failure and can retry / dead-letter.
55
+ throw err;
56
+ }
57
+ Perf.count('email.sent', 1, { connection });
58
+ this.Log.info(`Email sent on connection ${connection}, subject: ${email.subject}, recipients: ${email.to?.length ?? 0}`);
59
+ // inform others of email event. Guard separately: rethrowing after a successful SMTP send
60
+ // would make the queue retry the job and send a DUPLICATE email.
61
+ try {
62
+ await this.Queue.emit(new EmailSent(email));
63
+ }
64
+ catch (err) {
65
+ this.Log.error(err, `Failed to emit EmailSent event on connection ${connection}, subject: ${email.subject}`);
39
66
  }
40
- await this.Senders.get(email.connection).send(email);
41
- // inform others of email event
42
- await this.Queue.emit(new EmailSent(email));
43
67
  }
44
68
  async sendDeferred(email) {
45
69
  const dEmail = new EmailSend();
46
70
  dEmail.hydrate(email);
71
+ // queue-level retry: per-email override wins, then config default, then 3.
72
+ dEmail.RetryCount = email.retryCount ?? this.Configuration.retry?.count ?? 3;
47
73
  /** set queue schedule */
48
74
  if (email.schedule) {
49
75
  dEmail.ScheduleCron = email.schedule.cron;
@@ -54,7 +80,7 @@ let DefaultEmailService = class DefaultEmailService extends EmailService {
54
80
  await this.Queue.emit(dEmail);
55
81
  return dEmail;
56
82
  }
57
- async processDefferedEmails() {
83
+ async processDeferredEmails() {
58
84
  await this.Queue.consume(EmailSend);
59
85
  }
60
86
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAU,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,oBAAoB,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC;AAGjB,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,YAAY;IACvC,SAAS;QACd,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACvE,CAAC;CACF,CAAA;AAJY,cAAc;IAD1B,UAAU,CAAC,YAAY,CAAC;GACZ,cAAc,CAI1B;;AAED;;GAEG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,YAAY;IACnD;;;;;OAKG;IACI,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,gBAAgB,CAAC,gBAAgB,KAAK,CAAC,UAAU,qDAAqD,CAAC,CAAC;QACpH,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtD,+BAA+B;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,KAAa;QACrC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEtB,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,SAAS,CAAC,CAAC;IACtC,CAAC;CACF,CAAA;AAtCY,mBAAmB;IAD/B,UAAU,CAAC,YAAY,CAAC;GACZ,mBAAmB,CAsC/B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -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
- sender: string;
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
- pass?: string;
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 processDefferedEmails(): Promise<void>;
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":"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"}
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,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAoB,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,OAAgB,WAAY,SAAQ,YAAY;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,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAEvF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,GAAG,IAAI,CAAC,qBAAqB,GAAG,4GAA4G,GAAG,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;YAC/P,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnBW;IADT,MAAM,CAAC,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;AAXW;IADT,MAAM,CAAC,OAAO,CAAC;8BACD,GAAG;iDAAC;AAFR,oBAAoB;IAFhC,UAAU,CAAC,WAAW,CAAC;IACvB,WAAW,EAAE;;GACD,oBAAoB,CAahC;;AAgKD,MAAM,OAAgB,YAAa,SAAQ,YAAY;CAmCtD;AAjCW;IADT,MAAM,CAAC,OAAO,CAAC;8BACD,GAAG;yCAAC;AAGT;IADT,iBAAiB,CAAC,mBAAmB,EAAE,WAAW,CAAC;8BACjC,GAAG;6CAAsB;AAGlC;IADT,MAAM,CAAC,OAAO,CAAC;;mDAC4B;AAGlC;IADT,UAAU,CAAC,YAAY,CAAC;8BACR,YAAY;2CAAC"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,EAAE,EAAoB,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxH,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,OAAgB,WAAY,SAAQ,YAAY;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,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAEvF,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,GAAG,IAAI,CAAC,qBAAqB,GAAG,4GAA4G,GAAG,IAAI,CAAC,qBAAqB,GAAG,gBAAgB,CAAC,CAAC;YAC/P,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAnBW;IADT,MAAM,CAAC,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;AAXW;IADT,MAAM,CAAC,OAAO,CAAC;8BACD,GAAG;iDAAC;AAFR,oBAAoB;IAFhC,UAAU,CAAC,WAAW,CAAC;IACvB,WAAW,EAAE;;GACD,oBAAoB,CAahC;;AAuMD,MAAM,OAAgB,YAAa,SAAQ,YAAY;CAmCtD;AAjCW;IADT,MAAM,CAAC,OAAO,CAAC;8BACD,GAAG;yCAAC;AAGT;IADT,iBAAiB,CAAC,mBAAmB,EAAE,WAAW,CAAC;8BACjC,GAAG;6CAAsB;AAGlC;IADT,MAAM,CAAC,OAAO,CAAC;;mDAC4B;AAGlC;IADT,UAAU,CAAC,YAAY,CAAC;8BACR,YAAY;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,EAAO,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAgB,MAAM,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE3E;;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,CAAC;IAClB,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;;;CAOrB"}
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"}
@@ -5,8 +5,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { DI } from '@spinajs/di';
8
- import { QueueJob, Job } from '@spinajs/queue';
8
+ import { QueueJob, Job, QueueService } from '@spinajs/queue';
9
9
  import { EmailService } from '../interfaces.js';
10
+ import { EmailSendFailed } from '../events/EmailSendFailed.js';
10
11
  /**
11
12
  * Job for sending emails in background
12
13
  */
@@ -18,6 +19,12 @@ let EmailSend = class EmailSend extends QueueJob {
18
19
  result: true,
19
20
  };
20
21
  }
22
+ async onFailed(err, ctx) {
23
+ if (!ctx.isFinal)
24
+ return;
25
+ const queue = await DI.resolve(QueueService);
26
+ await queue.emit(new EmailSendFailed(this, err, ctx));
27
+ }
21
28
  };
22
29
  EmailSend = __decorate([
23
30
  Job()
@@ -1 +1 @@
1
- {"version":3,"file":"EmailSend.js","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAA6B,MAAM,kBAAkB,CAAC;AAE3E;;GAEG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,QAAQ;IAkB9B,KAAK,CAAC,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO;YACL,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;CACF,CAAA;AAzBY,SAAS;IADrB,GAAG,EAAE;GACO,SAAS,CAyBrB"}
1
+ {"version":3,"file":"EmailSend.js","sourceRoot":"","sources":["../../../src/jobs/EmailSend.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,YAAY,EAA6C,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D;;GAEG;AAEI,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,QAAQ;IAkB9B,KAAK,CAAC,OAAO;QAClB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,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,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;CACF,CAAA;AA/BY,SAAS;IADrB,GAAG,EAAE;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: string;
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
- sender: {
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
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"}
@@ -4,7 +4,14 @@ const CONFIGURATION_SCHEMA = {
4
4
  description: 'Email smtp transport configuration option validation',
5
5
  type: 'object',
6
6
  properties: {
7
- queue: 'string',
7
+ queue: { type: 'string' },
8
+ templateFs: { type: 'string' },
9
+ retry: {
10
+ type: 'object',
11
+ properties: {
12
+ count: { type: 'number' },
13
+ },
14
+ },
8
15
  connections: {
9
16
  type: 'array',
10
17
  uniqueItems: true,
@@ -17,10 +24,18 @@ const CONFIGURATION_SCHEMA = {
17
24
  user: { type: 'string' },
18
25
  password: { type: 'string' },
19
26
  name: { type: 'string' },
20
- sender: { type: 'string' },
27
+ service: { type: 'string' },
21
28
  options: {
22
29
  type: 'object',
23
30
  },
31
+ resilience: {
32
+ type: 'object',
33
+ properties: {
34
+ retries: { type: 'number' },
35
+ delay: { type: 'number' },
36
+ timeout: { type: 'number' },
37
+ },
38
+ },
24
39
  defaults: {
25
40
  type: 'object',
26
41
  properties: {
@@ -28,10 +43,10 @@ const CONFIGURATION_SCHEMA = {
28
43
  },
29
44
  },
30
45
  },
46
+ required: ['name', 'service'],
31
47
  },
32
48
  },
33
49
  },
34
- required: ['name', 'sender'],
35
50
  };
36
51
  export default CONFIGURATION_SCHEMA;
37
52
  //# 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;QACf,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,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBAC1B,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;qBACf;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE;4BACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC7B;qBACF;iBACF;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC7B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
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,eAAe,oBAAoB,CAAC"}