@spinajs/email 2.0.530 → 2.0.531

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.
@@ -7,7 +7,8 @@ export * from './jobs/EmailSend.js';
7
7
  export * from './events/EmailSent.js';
8
8
  export * from './events/EmailSendFailed.js';
9
9
  export * from './helpers.js';
10
- export * from "./fp.js";
10
+ export * from './fp.js';
11
+ export * from './redirect.js';
11
12
  export declare class LogBotstrapper extends Bootstrapper {
12
13
  bootstrap(): void;
13
14
  }
@@ -15,6 +16,19 @@ export declare class LogBotstrapper extends Bootstrapper {
15
16
  * Email sending service.
16
17
  */
17
18
  export declare class DefaultEmailService extends EmailService {
19
+ /**
20
+ * The environment configuration resolved — `Env ?? APP_ENV ?? NODE_ENV ?? 'development'`.
21
+ * The same value that chose which config file loaded, so this guard and the loaded
22
+ * configuration cannot disagree.
23
+ */
24
+ /**
25
+ * The framework's single source of truth for "am I running as production", derived from the
26
+ * same value that selected the config files and overridable by an app's own config. Read it
27
+ * rather than re-deriving from APP_ENV here: two matchers for one question drift, and a local
28
+ * one cannot see an override.
29
+ */
30
+ protected IsProduction: boolean;
31
+ resolve(): Promise<void>;
18
32
  /**
19
33
  *
20
34
  * Tries to sends email immediately
@@ -1 +1 @@
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,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AAExB,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI,CAEvB;CACF;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B9C;IAEY,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB3D;IAEY,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,YAAY,EAAc,MAAM,aAAa,CAAC;AAG3D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAE9B,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI,CAEvB;CACF;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD;;;;OAIG;IACH;;;;;OAKG;IAEH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpC;IAED;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD9C;IAEY,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB3D;IAEY,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;CACF"}
package/lib/cjs/index.js CHANGED
@@ -19,6 +19,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
19
19
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
20
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
21
  };
22
+ var __metadata = (this && this.__metadata) || function (k, v) {
23
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24
+ };
22
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
23
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
27
  };
@@ -27,10 +30,12 @@ exports.DefaultEmailService = exports.LogBotstrapper = void 0;
27
30
  const exceptions_1 = require("@spinajs/exceptions");
28
31
  const di_1 = require("@spinajs/di");
29
32
  const log_1 = require("@spinajs/log");
33
+ const configuration_1 = require("@spinajs/configuration");
30
34
  const interfaces_js_1 = require("./interfaces.js");
31
35
  const email_smtp_configuration_js_1 = __importDefault(require("./schemas/email.smtp.configuration.js"));
32
36
  const EmailSent_js_1 = require("./events/EmailSent.js");
33
37
  const EmailSend_js_1 = require("./jobs/EmailSend.js");
38
+ const redirect_js_1 = require("./redirect.js");
34
39
  __exportStar(require("./interfaces.js"), exports);
35
40
  __exportStar(require("./transports.js"), exports);
36
41
  __exportStar(require("./jobs/EmailSend.js"), exports);
@@ -38,6 +43,7 @@ __exportStar(require("./events/EmailSent.js"), exports);
38
43
  __exportStar(require("./events/EmailSendFailed.js"), exports);
39
44
  __exportStar(require("./helpers.js"), exports);
40
45
  __exportStar(require("./fp.js"), exports);
46
+ __exportStar(require("./redirect.js"), exports);
41
47
  let LogBotstrapper = class LogBotstrapper extends di_1.Bootstrapper {
42
48
  bootstrap() {
43
49
  di_1.DI.register(email_smtp_configuration_js_1.default).asValue('__configurationSchema__');
@@ -51,6 +57,21 @@ exports.LogBotstrapper = LogBotstrapper = __decorate([
51
57
  * Email sending service.
52
58
  */
53
59
  let DefaultEmailService = class DefaultEmailService extends interfaces_js_1.EmailService {
60
+ async resolve() {
61
+ await super.resolve();
62
+ if (!this.IsProduction) {
63
+ return;
64
+ }
65
+ // Visibility only - send() enforces this independently. Scans the configuration rather
66
+ // than the Senders map because config data is plainly present here, whereas the
67
+ // population order of an @AutoinjectService field relative to resolve() is not
68
+ // guaranteed, and a guard that silently no-ops is worse than no guard.
69
+ for (const c of this.Configuration?.connections ?? []) {
70
+ if (c.redirectTo?.length) {
71
+ this.Log.error(`Email connection ${c.name} configures redirectTo, which is refused on production. Recipients are NOT redirected.`);
72
+ }
73
+ }
74
+ }
54
75
  /**
55
76
  *
56
77
  * Tries to sends email immediately
@@ -64,8 +85,22 @@ let DefaultEmailService = class DefaultEmailService extends interfaces_js_1.Emai
64
85
  log_1.Perf.count('email.send.failed', 1, { connection });
65
86
  throw new exceptions_1.InvalidOperation(`Email sender ${connection} not exists. Please check your configuration files.`);
66
87
  }
88
+ // Production never redirects, whatever the connection configures. Enforced here rather
89
+ // than by editing the options at startup so the guarantee does not depend on injection
90
+ // order. No error log on this path: prod mail volume would flood it, and resolve()
91
+ // already reported the misconfiguration once.
92
+ const target = this.IsProduction ? undefined : this.Senders.get(connection).Options.redirectTo;
93
+ const redirected = (0, redirect_js_1.redirectRecipients)(email, target);
94
+ if (redirected) {
95
+ this.Log.warn(`Email on connection ${connection} redirected to ${target.length} configured address(es), ${email.to?.length ?? 0} original recipient(s) replaced`);
96
+ this.Log.trace(`Original recipients on connection ${connection}: ${(email.to ?? []).join(', ')}`);
97
+ }
98
+ // Only the transport sees the redirected copy. Every log line below, and the EmailSent
99
+ // event, keep referencing the caller's original `email` - the redirected subject embeds
100
+ // the real recipients by construction, and those log lines print the subject at INFO/ERROR.
101
+ const outgoing = redirected ?? email;
67
102
  try {
68
- await log_1.Perf.measure('email.send', () => this.Senders.get(connection).send(email), { labels: { connection } });
103
+ await log_1.Perf.measure('email.send', () => this.Senders.get(connection).send(outgoing), { labels: { connection } });
69
104
  }
70
105
  catch (err) {
71
106
  // full recipient addresses are PII - keep them at trace level only, log just the count otherwise.
@@ -106,6 +141,10 @@ let DefaultEmailService = class DefaultEmailService extends interfaces_js_1.Emai
106
141
  }
107
142
  };
108
143
  exports.DefaultEmailService = DefaultEmailService;
144
+ __decorate([
145
+ (0, configuration_1.Config)('configuration.isProduction', { defaultValue: false }),
146
+ __metadata("design:type", Boolean)
147
+ ], DefaultEmailService.prototype, "IsProduction", void 0);
109
148
  exports.DefaultEmailService = DefaultEmailService = __decorate([
110
149
  (0, di_1.Injectable)(interfaces_js_1.EmailService)
111
150
  ], DefaultEmailService);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -152,6 +152,14 @@ export interface EmailConnectionOptions {
152
152
  */
153
153
  mailFrom?: string;
154
154
  };
155
+ /**
156
+ * Replaces every recipient of every email on this connection with these addresses,
157
+ * recording the real ones in the subject. For dev and staging stacks that must exercise
158
+ * the real SMTP path without mailing real people.
159
+ *
160
+ * Refused outright when the app runs as production, decided by `configuration.isProduction`.
161
+ */
162
+ redirectTo?: string[];
155
163
  /**
156
164
  * In-process SMTP send resilience ( retry / timeout ) applied by transports when
157
165
  * talking to the SMTP server, independent of the queue-level job retry.
@@ -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,oCAAoH;AACpH,sCAA2C;AAC3C,0DAAmE;AACnE,0CAA8C;AAE9C,oCAAwC;AACxC,iBAAkC,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,IAAA,UAAK,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE3D,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;;AAnBW;IADT,IAAA,sBAAM,EAAC,kBAAkB,CAAC;;0DACa;AAuBnC,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAKnD,YAAmB,OAA+B;QAChD,KAAK,EAAE,CAAC;uBADS,OAAO;IAE1B,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,IAAA,YAAM,EAAC,OAAO,CAAC;8BACD,SAAG;iDAAC;+BAFR,oBAAoB;IAFhC,IAAA,eAAU,EAAC,WAAW,CAAC;IACvB,IAAA,gBAAW,GAAE;;GACD,oBAAoB,CAahC;AAuMD,kBAAmC,SAAQ,iBAAY;CAmCtD;;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
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAoH;AACpH,sCAA2C;AAC3C,0DAAmE;AACnE,0CAA8C;AAE9C,oCAAwC;AACxC,iBAAkC,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,IAAA,UAAK,EAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE3D,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;;AAnBW;IADT,IAAA,sBAAM,EAAC,kBAAkB,CAAC;;0DACa;AAuBnC,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,WAAW;IAInD,YAAmB,OAA+B;QAChD,KAAK,EAAE,CAAC;uBADS,OAAO;IAE1B,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;;AAVW;IADT,IAAA,YAAM,EAAC,OAAO,CAAC;8BACD,SAAG;iDAAC;+BAFR,oBAAoB;IAFhC,IAAA,eAAU,EAAC,WAAW,CAAC;IACvB,IAAA,gBAAW,GAAE;;GACD,oBAAoB,CAYhC;AA6MD,kBAAmC,SAAQ,iBAAY;CAkCtD;;AAhCW;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"}
@@ -0,0 +1,12 @@
1
+ import { IEmail } from './interfaces.js';
2
+ /**
3
+ * Replaces every recipient of `email` with `redirectTo`, recording the real ones in the
4
+ * subject. Returns `null` when no redirect is configured, so the caller can send the
5
+ * original untouched.
6
+ *
7
+ * Returns a COPY. Never mutate the argument: `EmailSend.execute()` runs again on the same
8
+ * job instance when the queue retries, so mutating would stack a second prefix per retry
9
+ * and corrupt the persisted job.
10
+ */
11
+ export declare function redirectRecipients(email: IEmail, redirectTo?: string[]): IEmail | null;
12
+ //# sourceMappingURL=redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA8BzC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAYtF"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirectRecipients = redirectRecipients;
4
+ /**
5
+ * Recipient redirection is refused outright on production, whatever a connection configures.
6
+ * That decision is NOT made here: it reads `configuration.isProduction`, the framework's single
7
+ * source of truth, which derives from the same value that selects the config files and which an
8
+ * app may override in its own config.
9
+ *
10
+ * This module used to carry its own `isProductionEnv` matcher over `APP_ENV`. Two sources of
11
+ * truth for one question is how they drift - and the local one could not see an app's override.
12
+ */
13
+ /** How many original recipients the subject prefix names before it summarises the rest. */
14
+ const MAX_LISTED_RECIPIENTS = 3;
15
+ /**
16
+ * ASCII rather than a Unicode arrow: subject lines are encoded and re-encoded by mail
17
+ * clients, and an ASCII prefix survives that untouched.
18
+ */
19
+ function subjectPrefix(originalTo) {
20
+ if (originalTo.length === 0) {
21
+ return '[DEV] ';
22
+ }
23
+ const listed = originalTo.slice(0, MAX_LISTED_RECIPIENTS).join(',');
24
+ const remaining = originalTo.length - MAX_LISTED_RECIPIENTS;
25
+ return remaining > 0 ? `[DEV->${listed} +${remaining} more] ` : `[DEV->${listed}] `;
26
+ }
27
+ /**
28
+ * Replaces every recipient of `email` with `redirectTo`, recording the real ones in the
29
+ * subject. Returns `null` when no redirect is configured, so the caller can send the
30
+ * original untouched.
31
+ *
32
+ * Returns a COPY. Never mutate the argument: `EmailSend.execute()` runs again on the same
33
+ * job instance when the queue retries, so mutating would stack a second prefix per retry
34
+ * and corrupt the persisted job.
35
+ */
36
+ function redirectRecipients(email, redirectTo) {
37
+ if (!redirectTo || redirectTo.length === 0) {
38
+ return null;
39
+ }
40
+ return {
41
+ ...email,
42
+ to: [...redirectTo],
43
+ cc: undefined,
44
+ bcc: undefined,
45
+ subject: `${subjectPrefix(email.to ?? [])}${email.subject ?? ''}`,
46
+ };
47
+ }
48
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/redirect.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;GAQG;AAEH,2FAA2F;AAC3F,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAoB;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,qBAAqB,CAAC;IAE5D,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,4BAAmC,KAAa,EAAE,UAAqB;IACrE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC;QACnB,EAAE,EAAE,SAAS;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;KAClE,CAAC;AACJ,CAAC"}
@@ -70,6 +70,12 @@ declare const CONFIGURATION_SCHEMA: {
70
70
  };
71
71
  };
72
72
  };
73
+ redirectTo: {
74
+ type: string;
75
+ items: {
76
+ type: string;
77
+ };
78
+ };
73
79
  };
74
80
  required: string[];
75
81
  };
@@ -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;IACxB,GAAG;IACH,oBAAoB;IACpB,WAAW;IACX,IAAI;IACJ,UAAU;QACR,KAAK;YAAI,IAAI;;QACb,UAAU;YAAI,IAAI;;QAClB,KAAK;YACH,IAAI;YACJ,UAAU;gBACR,KAAK;oBAAI,IAAI;;;;QAGjB,WAAW;YACT,IAAI;YACJ,WAAW;YACX,KAAK;gBACH,IAAI;gBACJ,UAAU;oBACR,GAAG;wBAAI,IAAI;;oBACX,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,QAAQ;wBAAI,IAAI;;oBAChB,IAAI;wBAAI,IAAI;;oBACZ,OAAO;wBAAI,IAAI;;oBACf,OAAO;wBACL,IAAI;;oBAEN,UAAU;wBACR,IAAI;wBACJ,UAAU;4BACR,OAAO;gCAAI,IAAI;;4BACf,KAAK;gCAAI,IAAI;;4BACb,OAAO;gCAAI,IAAI;;;;oBAGnB,QAAQ;wBACN,IAAI;wBACJ,UAAU;4BACR,QAAQ;gCAAI,IAAI;;;;;gBAItB,QAAQ;;;;CAIf,CAAC;eAEa,oBAAoB"}
1
+ {"version":3,"file":"email.smtp.configuration.d.ts","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB;IACxB,GAAG;IACH,oBAAoB;IACpB,WAAW;IACX,IAAI;IACJ,UAAU;QACR,KAAK;YAAI,IAAI;;QACb,UAAU;YAAI,IAAI;;QAClB,KAAK;YACH,IAAI;YACJ,UAAU;gBACR,KAAK;oBAAI,IAAI;;;;QAGjB,WAAW;YACT,IAAI;YACJ,WAAW;YACX,KAAK;gBACH,IAAI;gBACJ,UAAU;oBACR,GAAG;wBAAI,IAAI;;oBACX,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,QAAQ;wBAAI,IAAI;;oBAChB,IAAI;wBAAI,IAAI;;oBACZ,OAAO;wBAAI,IAAI;;oBACf,OAAO;wBACL,IAAI;;oBAEN,UAAU;wBACR,IAAI;wBACJ,UAAU;4BACR,OAAO;gCAAI,IAAI;;4BACf,KAAK;gCAAI,IAAI;;4BACb,OAAO;gCAAI,IAAI;;;;oBAGnB,QAAQ;wBACN,IAAI;wBACJ,UAAU;4BACR,QAAQ;gCAAI,IAAI;;;;oBAGpB,UAAU;wBACR,IAAI;wBACJ,KAAK;4BAAI,IAAI;;;;gBAGjB,QAAQ;;;;CAIf,CAAC;eAEa,oBAAoB"}
@@ -44,6 +44,10 @@ const CONFIGURATION_SCHEMA = {
44
44
  mailFrom: { type: 'string' },
45
45
  },
46
46
  },
47
+ redirectTo: {
48
+ type: 'array',
49
+ items: { type: 'string' },
50
+ },
47
51
  },
48
52
  required: ['name', 'service'],
49
53
  },
@@ -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,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;kBAEa,oBAAoB"}
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;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC9B;SACF;KACF;CACF,CAAC;kBAEa,oBAAoB"}
@@ -7,7 +7,8 @@ export * from './jobs/EmailSend.js';
7
7
  export * from './events/EmailSent.js';
8
8
  export * from './events/EmailSendFailed.js';
9
9
  export * from './helpers.js';
10
- export * from "./fp.js";
10
+ export * from './fp.js';
11
+ export * from './redirect.js';
11
12
  export declare class LogBotstrapper extends Bootstrapper {
12
13
  bootstrap(): void;
13
14
  }
@@ -15,6 +16,19 @@ export declare class LogBotstrapper extends Bootstrapper {
15
16
  * Email sending service.
16
17
  */
17
18
  export declare class DefaultEmailService extends EmailService {
19
+ /**
20
+ * The environment configuration resolved — `Env ?? APP_ENV ?? NODE_ENV ?? 'development'`.
21
+ * The same value that chose which config file loaded, so this guard and the loaded
22
+ * configuration cannot disagree.
23
+ */
24
+ /**
25
+ * The framework's single source of truth for "am I running as production", derived from the
26
+ * same value that selected the config files and overridable by an app's own config. Read it
27
+ * rather than re-deriving from APP_ENV here: two matchers for one question drift, and a local
28
+ * one cannot see an override.
29
+ */
30
+ protected IsProduction: boolean;
31
+ resolve(): Promise<void>;
18
32
  /**
19
33
  *
20
34
  * Tries to sends email immediately
@@ -1 +1 @@
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,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AAExB,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI,CAEvB;CACF;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B9C;IAEY,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB3D;IAEY,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;CACF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAM,YAAY,EAAc,MAAM,aAAa,CAAC;AAG3D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAE9B,qBACa,cAAe,SAAQ,YAAY;IACvC,SAAS,IAAI,IAAI,CAEvB;CACF;AAED;;GAEG;AACH,qBACa,mBAAoB,SAAQ,YAAY;IACnD;;;;OAIG;IACH;;;;;OAKG;IAEH,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBpC;IAED;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD9C;IAEY,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAkB3D;IAEY,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;CACF"}
package/lib/mjs/index.js CHANGED
@@ -4,20 +4,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
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
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
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
+ };
7
10
  import { InvalidOperation } from '@spinajs/exceptions';
8
11
  import { DI, Bootstrapper, Injectable } from '@spinajs/di';
9
12
  import { Perf } from '@spinajs/log';
13
+ import { Config } from '@spinajs/configuration';
10
14
  import { EmailService } from './interfaces.js';
11
15
  import CONFIGURATION_SCHEMA from './schemas/email.smtp.configuration.js';
12
16
  import { EmailSent } from './events/EmailSent.js';
13
17
  import { EmailSend } from './jobs/EmailSend.js';
18
+ import { redirectRecipients } from './redirect.js';
14
19
  export * from './interfaces.js';
15
20
  export * from './transports.js';
16
21
  export * from './jobs/EmailSend.js';
17
22
  export * from './events/EmailSent.js';
18
23
  export * from './events/EmailSendFailed.js';
19
24
  export * from './helpers.js';
20
- export * from "./fp.js";
25
+ export * from './fp.js';
26
+ export * from './redirect.js';
21
27
  let LogBotstrapper = class LogBotstrapper extends Bootstrapper {
22
28
  bootstrap() {
23
29
  DI.register(CONFIGURATION_SCHEMA).asValue('__configurationSchema__');
@@ -31,6 +37,21 @@ export { LogBotstrapper };
31
37
  * Email sending service.
32
38
  */
33
39
  let DefaultEmailService = class DefaultEmailService extends EmailService {
40
+ async resolve() {
41
+ await super.resolve();
42
+ if (!this.IsProduction) {
43
+ return;
44
+ }
45
+ // Visibility only - send() enforces this independently. Scans the configuration rather
46
+ // than the Senders map because config data is plainly present here, whereas the
47
+ // population order of an @AutoinjectService field relative to resolve() is not
48
+ // guaranteed, and a guard that silently no-ops is worse than no guard.
49
+ for (const c of this.Configuration?.connections ?? []) {
50
+ if (c.redirectTo?.length) {
51
+ this.Log.error(`Email connection ${c.name} configures redirectTo, which is refused on production. Recipients are NOT redirected.`);
52
+ }
53
+ }
54
+ }
34
55
  /**
35
56
  *
36
57
  * Tries to sends email immediately
@@ -44,8 +65,22 @@ let DefaultEmailService = class DefaultEmailService extends EmailService {
44
65
  Perf.count('email.send.failed', 1, { connection });
45
66
  throw new InvalidOperation(`Email sender ${connection} not exists. Please check your configuration files.`);
46
67
  }
68
+ // Production never redirects, whatever the connection configures. Enforced here rather
69
+ // than by editing the options at startup so the guarantee does not depend on injection
70
+ // order. No error log on this path: prod mail volume would flood it, and resolve()
71
+ // already reported the misconfiguration once.
72
+ const target = this.IsProduction ? undefined : this.Senders.get(connection).Options.redirectTo;
73
+ const redirected = redirectRecipients(email, target);
74
+ if (redirected) {
75
+ this.Log.warn(`Email on connection ${connection} redirected to ${target.length} configured address(es), ${email.to?.length ?? 0} original recipient(s) replaced`);
76
+ this.Log.trace(`Original recipients on connection ${connection}: ${(email.to ?? []).join(', ')}`);
77
+ }
78
+ // Only the transport sees the redirected copy. Every log line below, and the EmailSent
79
+ // event, keep referencing the caller's original `email` - the redirected subject embeds
80
+ // the real recipients by construction, and those log lines print the subject at INFO/ERROR.
81
+ const outgoing = redirected ?? email;
47
82
  try {
48
- await Perf.measure('email.send', () => this.Senders.get(connection).send(email), { labels: { connection } });
83
+ await Perf.measure('email.send', () => this.Senders.get(connection).send(outgoing), { labels: { connection } });
49
84
  }
50
85
  catch (err) {
51
86
  // full recipient addresses are PII - keep them at trace level only, log just the count otherwise.
@@ -85,6 +120,10 @@ let DefaultEmailService = class DefaultEmailService extends EmailService {
85
120
  await this.Queue.consume(EmailSend);
86
121
  }
87
122
  };
123
+ __decorate([
124
+ Config('configuration.isProduction', { defaultValue: false }),
125
+ __metadata("design:type", Boolean)
126
+ ], DefaultEmailService.prototype, "IsProduction", void 0);
88
127
  DefaultEmailService = __decorate([
89
128
  Injectable(EmailService)
90
129
  ], DefaultEmailService);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -152,6 +152,14 @@ export interface EmailConnectionOptions {
152
152
  */
153
153
  mailFrom?: string;
154
154
  };
155
+ /**
156
+ * Replaces every recipient of every email on this connection with these addresses,
157
+ * recording the real ones in the subject. For dev and staging stacks that must exercise
158
+ * the real SMTP path without mailing real people.
159
+ *
160
+ * Refused outright when the app runs as production, decided by `configuration.isProduction`.
161
+ */
162
+ redirectTo?: string[];
155
163
  /**
156
164
  * In-process SMTP send resilience ( retry / timeout ) applied by transports when
157
165
  * talking to the SMTP server, independent of the queue-level job retry.
@@ -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,EAAoB,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpH,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;AAE9C,OAAO,EAAM,KAAK,EAAE,MAAM,aAAa,CAAC;AACxC,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,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE3D,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;uBADS,OAAO;IAE1B,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
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAoB,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpH,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;AAE9C,OAAO,EAAM,KAAK,EAAE,MAAM,aAAa,CAAC;AACxC,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,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE3D,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;IAInD,YAAmB,OAA+B;QAChD,KAAK,EAAE,CAAC;uBADS,OAAO;IAE1B,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;AAVW;IADT,MAAM,CAAC,OAAO,CAAC;8BACD,GAAG;iDAAC;AAFR,oBAAoB;IAFhC,UAAU,CAAC,WAAW,CAAC;IACvB,WAAW,EAAE;;GACD,oBAAoB,CAYhC;;AA6MD,MAAM,OAAgB,YAAa,SAAQ,YAAY;CAkCtD;AAhCW;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"}
@@ -0,0 +1,12 @@
1
+ import { IEmail } from './interfaces.js';
2
+ /**
3
+ * Replaces every recipient of `email` with `redirectTo`, recording the real ones in the
4
+ * subject. Returns `null` when no redirect is configured, so the caller can send the
5
+ * original untouched.
6
+ *
7
+ * Returns a COPY. Never mutate the argument: `EmailSend.execute()` runs again on the same
8
+ * job instance when the queue retries, so mutating would stack a second prefix per retry
9
+ * and corrupt the persisted job.
10
+ */
11
+ export declare function redirectRecipients(email: IEmail, redirectTo?: string[]): IEmail | null;
12
+ //# sourceMappingURL=redirect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.d.ts","sourceRoot":"","sources":["../../src/redirect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA8BzC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAYtF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Recipient redirection is refused outright on production, whatever a connection configures.
3
+ * That decision is NOT made here: it reads `configuration.isProduction`, the framework's single
4
+ * source of truth, which derives from the same value that selects the config files and which an
5
+ * app may override in its own config.
6
+ *
7
+ * This module used to carry its own `isProductionEnv` matcher over `APP_ENV`. Two sources of
8
+ * truth for one question is how they drift - and the local one could not see an app's override.
9
+ */
10
+ /** How many original recipients the subject prefix names before it summarises the rest. */
11
+ const MAX_LISTED_RECIPIENTS = 3;
12
+ /**
13
+ * ASCII rather than a Unicode arrow: subject lines are encoded and re-encoded by mail
14
+ * clients, and an ASCII prefix survives that untouched.
15
+ */
16
+ function subjectPrefix(originalTo) {
17
+ if (originalTo.length === 0) {
18
+ return '[DEV] ';
19
+ }
20
+ const listed = originalTo.slice(0, MAX_LISTED_RECIPIENTS).join(',');
21
+ const remaining = originalTo.length - MAX_LISTED_RECIPIENTS;
22
+ return remaining > 0 ? `[DEV->${listed} +${remaining} more] ` : `[DEV->${listed}] `;
23
+ }
24
+ /**
25
+ * Replaces every recipient of `email` with `redirectTo`, recording the real ones in the
26
+ * subject. Returns `null` when no redirect is configured, so the caller can send the
27
+ * original untouched.
28
+ *
29
+ * Returns a COPY. Never mutate the argument: `EmailSend.execute()` runs again on the same
30
+ * job instance when the queue retries, so mutating would stack a second prefix per retry
31
+ * and corrupt the persisted job.
32
+ */
33
+ export function redirectRecipients(email, redirectTo) {
34
+ if (!redirectTo || redirectTo.length === 0) {
35
+ return null;
36
+ }
37
+ return {
38
+ ...email,
39
+ to: [...redirectTo],
40
+ cc: undefined,
41
+ bcc: undefined,
42
+ subject: `${subjectPrefix(email.to ?? [])}${email.subject ?? ''}`,
43
+ };
44
+ }
45
+ //# sourceMappingURL=redirect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/redirect.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,2FAA2F;AAC3F,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;GAGG;AACH,SAAS,aAAa,CAAC,UAAoB;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,GAAG,qBAAqB,CAAC;IAE5D,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,KAAK,SAAS,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC;AACtF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,UAAqB;IACrE,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,GAAG,KAAK;QACR,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC;QACnB,EAAE,EAAE,SAAS;QACb,GAAG,EAAE,SAAS;QACd,OAAO,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE;KAClE,CAAC;AACJ,CAAC"}
@@ -70,6 +70,12 @@ declare const CONFIGURATION_SCHEMA: {
70
70
  };
71
71
  };
72
72
  };
73
+ redirectTo: {
74
+ type: string;
75
+ items: {
76
+ type: string;
77
+ };
78
+ };
73
79
  };
74
80
  required: string[];
75
81
  };
@@ -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;IACxB,GAAG;IACH,oBAAoB;IACpB,WAAW;IACX,IAAI;IACJ,UAAU;QACR,KAAK;YAAI,IAAI;;QACb,UAAU;YAAI,IAAI;;QAClB,KAAK;YACH,IAAI;YACJ,UAAU;gBACR,KAAK;oBAAI,IAAI;;;;QAGjB,WAAW;YACT,IAAI;YACJ,WAAW;YACX,KAAK;gBACH,IAAI;gBACJ,UAAU;oBACR,GAAG;wBAAI,IAAI;;oBACX,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,QAAQ;wBAAI,IAAI;;oBAChB,IAAI;wBAAI,IAAI;;oBACZ,OAAO;wBAAI,IAAI;;oBACf,OAAO;wBACL,IAAI;;oBAEN,UAAU;wBACR,IAAI;wBACJ,UAAU;4BACR,OAAO;gCAAI,IAAI;;4BACf,KAAK;gCAAI,IAAI;;4BACb,OAAO;gCAAI,IAAI;;;;oBAGnB,QAAQ;wBACN,IAAI;wBACJ,UAAU;4BACR,QAAQ;gCAAI,IAAI;;;;;gBAItB,QAAQ;;;;CAIf,CAAC;eAEa,oBAAoB"}
1
+ {"version":3,"file":"email.smtp.configuration.d.ts","sourceRoot":"","sources":["../../../src/schemas/email.smtp.configuration.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,oBAAoB;IACxB,GAAG;IACH,oBAAoB;IACpB,WAAW;IACX,IAAI;IACJ,UAAU;QACR,KAAK;YAAI,IAAI;;QACb,UAAU;YAAI,IAAI;;QAClB,KAAK;YACH,IAAI;YACJ,UAAU;gBACR,KAAK;oBAAI,IAAI;;;;QAGjB,WAAW;YACT,IAAI;YACJ,WAAW;YACX,KAAK;gBACH,IAAI;gBACJ,UAAU;oBACR,GAAG;wBAAI,IAAI;;oBACX,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,IAAI;wBAAI,IAAI;;oBACZ,QAAQ;wBAAI,IAAI;;oBAChB,IAAI;wBAAI,IAAI;;oBACZ,OAAO;wBAAI,IAAI;;oBACf,OAAO;wBACL,IAAI;;oBAEN,UAAU;wBACR,IAAI;wBACJ,UAAU;4BACR,OAAO;gCAAI,IAAI;;4BACf,KAAK;gCAAI,IAAI;;4BACb,OAAO;gCAAI,IAAI;;;;oBAGnB,QAAQ;wBACN,IAAI;wBACJ,UAAU;4BACR,QAAQ;gCAAI,IAAI;;;;oBAGpB,UAAU;wBACR,IAAI;wBACJ,KAAK;4BAAI,IAAI;;;;gBAGjB,QAAQ;;;;CAIf,CAAC;eAEa,oBAAoB"}
@@ -42,6 +42,10 @@ const CONFIGURATION_SCHEMA = {
42
42
  mailFrom: { type: 'string' },
43
43
  },
44
44
  },
45
+ redirectTo: {
46
+ type: 'array',
47
+ items: { type: 'string' },
48
+ },
45
49
  },
46
50
  required: ['name', 'service'],
47
51
  },
@@ -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,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"}
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;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;qBAC1B;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;aAC9B;SACF;KACF;CACF,CAAC;AAEF,eAAe,oBAAoB,CAAC"}