@spinajs/email 2.0.529 → 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.
- package/lib/cjs/index.d.ts +15 -1
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +40 -1
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +8 -0
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/redirect.d.ts +12 -0
- package/lib/cjs/redirect.d.ts.map +1 -0
- package/lib/cjs/redirect.js +48 -0
- package/lib/cjs/redirect.js.map +1 -0
- package/lib/cjs/schemas/email.smtp.configuration.d.ts +6 -0
- package/lib/cjs/schemas/email.smtp.configuration.d.ts.map +1 -1
- package/lib/cjs/schemas/email.smtp.configuration.js +4 -0
- package/lib/cjs/schemas/email.smtp.configuration.js.map +1 -1
- package/lib/mjs/index.d.ts +15 -1
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +41 -2
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +8 -0
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/redirect.d.ts +12 -0
- package/lib/mjs/redirect.d.ts.map +1 -0
- package/lib/mjs/redirect.js +45 -0
- package/lib/mjs/redirect.js.map +1 -0
- package/lib/mjs/schemas/email.smtp.configuration.d.ts +6 -0
- package/lib/mjs/schemas/email.smtp.configuration.d.ts.map +1 -1
- package/lib/mjs/schemas/email.smtp.configuration.js +4 -0
- 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 +10 -10
package/lib/cjs/index.d.ts
CHANGED
|
@@ -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
|
|
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
|
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;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(
|
|
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);
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/interfaces.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAc,gBAAgB,EAA6C,MAAM,aAAa,CAAC;AACpH,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,EAAS,MAAM,aAAa,CAAC;AACxC,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,CAAC;IAE/B,OAAO,kBAQnB;CACF;AAED,qBAEa,oBAAqB,SAAQ,WAAW;
|
|
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;
|
|
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"}
|
|
@@ -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
|
|
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"}
|
|
@@ -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"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -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
|
|
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
|
package/lib/mjs/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;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
|
|
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(
|
|
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);
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/interfaces.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAc,gBAAgB,EAA6C,MAAM,aAAa,CAAC;AACpH,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,EAAS,MAAM,aAAa,CAAC;AACxC,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,CAAC;IAE/B,OAAO,kBAQnB;CACF;AAED,qBAEa,oBAAqB,SAAQ,WAAW;
|
|
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;
|
|
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"}
|
|
@@ -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
|
|
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"}
|
|
@@ -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"}
|