@vendure/email-plugin 2.0.0-next.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +2 -0
- package/lib/index.js +7 -1
- package/lib/index.js.map +1 -1
- package/lib/src/common.d.ts +3 -1
- package/lib/src/common.js +10 -1
- package/lib/src/common.js.map +1 -1
- package/lib/src/default-email-handlers.js +9 -9
- package/lib/src/default-email-handlers.js.map +1 -1
- package/lib/src/dev-mailbox.js +9 -6
- package/lib/src/dev-mailbox.js.map +1 -1
- package/lib/src/email-generator.d.ts +25 -0
- package/lib/src/email-generator.js +3 -0
- package/lib/src/email-generator.js.map +1 -0
- package/lib/src/email-processor.d.ts +10 -6
- package/lib/src/email-processor.js +31 -13
- package/lib/src/email-processor.js.map +1 -1
- package/lib/src/email-sender.d.ts +45 -0
- package/lib/src/email-sender.js +3 -0
- package/lib/src/email-sender.js.map +1 -0
- package/lib/src/event-handler.d.ts +14 -2
- package/lib/src/event-handler.js +21 -7
- package/lib/src/event-handler.js.map +1 -1
- package/lib/src/event-listener.d.ts +1 -1
- package/lib/src/event-listener.js +1 -1
- package/lib/src/handlebars-mjml-generator.d.ts +4 -4
- package/lib/src/handlebars-mjml-generator.js +6 -13
- package/lib/src/handlebars-mjml-generator.js.map +1 -1
- package/lib/src/mock-events.js +17 -26
- package/lib/src/mock-events.js.map +1 -1
- package/lib/src/nodemailer-email-sender.d.ts +6 -3
- package/lib/src/nodemailer-email-sender.js +10 -1
- package/lib/src/nodemailer-email-sender.js.map +1 -1
- package/lib/src/noop-email-generator.d.ts +1 -1
- package/lib/src/plugin.d.ts +99 -8
- package/lib/src/plugin.js +143 -14
- package/lib/src/plugin.js.map +1 -1
- package/lib/src/template-loader.d.ts +5 -2
- package/lib/src/template-loader.js +17 -9
- package/lib/src/template-loader.js.map +1 -1
- package/lib/src/types.d.ts +140 -173
- package/package.json +42 -42
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -19,4 +23,6 @@ __exportStar(require("./src/noop-email-generator"), exports);
|
|
|
19
23
|
__exportStar(require("./src/plugin"), exports);
|
|
20
24
|
__exportStar(require("./src/template-loader"), exports);
|
|
21
25
|
__exportStar(require("./src/types"), exports);
|
|
26
|
+
__exportStar(require("./src/email-generator"), exports);
|
|
27
|
+
__exportStar(require("./src/email-sender"), exports);
|
|
22
28
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,gEAA8C;AAC9C,sDAAoC;AACpC,uDAAqC;AACrC,kEAAgD;AAChD,6DAA2C;AAC3C,+CAA6B;AAC7B,wDAAsC;AACtC,8CAA4B;AAC5B,wDAAsC;AACtC,qDAAmC"}
|
package/lib/src/common.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Injector, RequestContext } from '@vendure/core';
|
|
2
|
+
import { EmailPluginDevModeOptions, EmailPluginOptions, EmailTransportOptions } from './types';
|
|
2
3
|
export declare function isDevModeOptions(input: EmailPluginOptions | EmailPluginDevModeOptions): input is EmailPluginDevModeOptions;
|
|
4
|
+
export declare function resolveTransportSettings(options: EmailPluginOptions, injector: Injector, ctx?: RequestContext): Promise<EmailTransportOptions>;
|
package/lib/src/common.js
CHANGED
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isDevModeOptions = void 0;
|
|
3
|
+
exports.resolveTransportSettings = exports.isDevModeOptions = void 0;
|
|
4
4
|
function isDevModeOptions(input) {
|
|
5
5
|
return input.devMode === true;
|
|
6
6
|
}
|
|
7
7
|
exports.isDevModeOptions = isDevModeOptions;
|
|
8
|
+
async function resolveTransportSettings(options, injector, ctx) {
|
|
9
|
+
if (typeof options.transport === 'function') {
|
|
10
|
+
return options.transport(injector, ctx);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return options.transport;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.resolveTransportSettings = resolveTransportSettings;
|
|
8
17
|
//# sourceMappingURL=common.js.map
|
package/lib/src/common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/common.ts"],"names":[],"mappings":";;;AAIA,SAAgB,gBAAgB,CAC5B,KAAqD;IAErD,OAAQ,KAAmC,CAAC,OAAO,KAAK,IAAI,CAAC;AACjE,CAAC;AAJD,4CAIC;AAEM,KAAK,UAAU,wBAAwB,CAC1C,OAA2B,EAC3B,QAAkB,EAClB,GAAoB;IAEpB,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU,EAAE;QACzC,OAAO,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAC3C;SAAM;QACH,OAAO,OAAO,CAAC,SAAS,CAAC;KAC5B;AACL,CAAC;AAVD,4DAUC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hydrateShippingLines = exports.transformOrderLineAssetUrls = exports.defaultEmailHandlers = exports.emailAddressChangeHandler = exports.passwordResetHandler = exports.emailVerificationHandler = exports.orderConfirmationHandler = void 0;
|
|
4
|
-
/*
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
5
5
|
const core_1 = require("@vendure/core");
|
|
6
6
|
const event_listener_1 = require("./event-listener");
|
|
7
7
|
const mock_events_1 = require("./mock-events");
|
|
@@ -14,8 +14,8 @@ exports.orderConfirmationHandler = new event_listener_1.EmailEventListener('orde
|
|
|
14
14
|
return { shippingLines };
|
|
15
15
|
})
|
|
16
16
|
.setRecipient(event => event.order.customer.emailAddress)
|
|
17
|
-
.setFrom(
|
|
18
|
-
.setSubject(
|
|
17
|
+
.setFrom('{{ fromAddress }}')
|
|
18
|
+
.setSubject('Order confirmation for #{{ order.code }}')
|
|
19
19
|
.setTemplateVars(event => ({ order: event.order, shippingLines: event.data.shippingLines }))
|
|
20
20
|
.setMockEvent(mock_events_1.mockOrderStateTransitionEvent);
|
|
21
21
|
exports.emailVerificationHandler = new event_listener_1.EmailEventListener('email-verification')
|
|
@@ -26,8 +26,8 @@ exports.emailVerificationHandler = new event_listener_1.EmailEventListener('emai
|
|
|
26
26
|
return (nativeAuthMethod && !!nativeAuthMethod.identifier) || false;
|
|
27
27
|
})
|
|
28
28
|
.setRecipient(event => event.user.identifier)
|
|
29
|
-
.setFrom(
|
|
30
|
-
.setSubject(
|
|
29
|
+
.setFrom('{{ fromAddress }}')
|
|
30
|
+
.setSubject('Please verify your email address')
|
|
31
31
|
.setTemplateVars(event => ({
|
|
32
32
|
verificationToken: event.user.getNativeAuthenticationMethod().verificationToken,
|
|
33
33
|
}))
|
|
@@ -35,8 +35,8 @@ exports.emailVerificationHandler = new event_listener_1.EmailEventListener('emai
|
|
|
35
35
|
exports.passwordResetHandler = new event_listener_1.EmailEventListener('password-reset')
|
|
36
36
|
.on(core_1.PasswordResetEvent)
|
|
37
37
|
.setRecipient(event => event.user.identifier)
|
|
38
|
-
.setFrom(
|
|
39
|
-
.setSubject(
|
|
38
|
+
.setFrom('{{ fromAddress }}')
|
|
39
|
+
.setSubject('Forgotten password reset')
|
|
40
40
|
.setTemplateVars(event => ({
|
|
41
41
|
passwordResetToken: event.user.getNativeAuthenticationMethod().passwordResetToken,
|
|
42
42
|
}))
|
|
@@ -44,8 +44,8 @@ exports.passwordResetHandler = new event_listener_1.EmailEventListener('password
|
|
|
44
44
|
exports.emailAddressChangeHandler = new event_listener_1.EmailEventListener('email-address-change')
|
|
45
45
|
.on(core_1.IdentifierChangeRequestEvent)
|
|
46
46
|
.setRecipient(event => event.user.getNativeAuthenticationMethod().pendingIdentifier)
|
|
47
|
-
.setFrom(
|
|
48
|
-
.setSubject(
|
|
47
|
+
.setFrom('{{ fromAddress }}')
|
|
48
|
+
.setSubject('Please verify your change of email address')
|
|
49
49
|
.setTemplateVars(event => ({
|
|
50
50
|
identifierChangeToken: event.user.getNativeAuthenticationMethod().identifierChangeToken,
|
|
51
51
|
}))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-email-handlers.js","sourceRoot":"","sources":["../../src/default-email-handlers.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"default-email-handlers.js","sourceRoot":"","sources":["../../src/default-email-handlers.ts"],"names":[],"mappings":"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"}
|
package/lib/src/dev-mailbox.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.DevMailbox = void 0;
|
|
7
7
|
const core_1 = require("@vendure/core");
|
|
8
|
-
const express_1 =
|
|
8
|
+
const express_1 = require("express");
|
|
9
9
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
10
10
|
const path_1 = __importDefault(require("path"));
|
|
11
11
|
/**
|
|
@@ -14,7 +14,7 @@ const path_1 = __importDefault(require("path"));
|
|
|
14
14
|
class DevMailbox {
|
|
15
15
|
serve(options) {
|
|
16
16
|
const { outputPath, handlers } = options;
|
|
17
|
-
const server = express_1.
|
|
17
|
+
const server = (0, express_1.Router)();
|
|
18
18
|
server.get('/', (req, res) => {
|
|
19
19
|
res.sendFile(path_1.default.join(__dirname, '../../dev-mailbox.html'));
|
|
20
20
|
});
|
|
@@ -36,7 +36,7 @@ class DevMailbox {
|
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
try {
|
|
39
|
-
|
|
39
|
+
this.handleMockEventFn(handler, Object.assign(Object.assign({}, handler.mockEvent), { ctx: this.createRequestContext(languageCode, req) }));
|
|
40
40
|
res.send({ success: true });
|
|
41
41
|
}
|
|
42
42
|
catch (e) {
|
|
@@ -46,7 +46,7 @@ class DevMailbox {
|
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
|
-
res.send({ success: false, error:
|
|
49
|
+
res.send({ success: false, error: 'Mock email generation not set up.' });
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
server.get('/item/:id', async (req, res) => {
|
|
@@ -55,7 +55,9 @@ class DevMailbox {
|
|
|
55
55
|
res.send(content);
|
|
56
56
|
});
|
|
57
57
|
server.get('/placeholder-image', async (req, res) => {
|
|
58
|
-
const img = Buffer.from(
|
|
58
|
+
const img = Buffer.from(
|
|
59
|
+
// eslint-disable-next-line max-len
|
|
60
|
+
'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iJnfaemDXGV6R400ttQ0vzI8mSE7to7jvXnFACUUUUDCu++H27+zp8/d8zj8q4NVLsFUZJOAK9R8M6a2l6TFFJ/rG+ZvbPOKBMb4r/5AN1/u15dXo3jm8Fvo/lZw0rYH0HWvOaAQUUUUDCvU/Cv/ACL9l/uf1NeWV6n4V/5F+y/3P6mgTNWiiigkKKKKACiiigAooooAKKKKACiiigDnfHn/ACAf+2q/1rzmvRvHn/IB/wC2q/1rzmgpBRRRQMK6XwXrQ0+8NvKwEM3dj0Nc1SgkHI4NAHs/DDB5FcVr3ghy0lxYndk7jD/hS+GfGQAW2v2wBwsx/ka7KORJlDIwdT0KnNBOx5BcWNxasVmheNh2YU+1026vGCwwPIf9kV69tHpRgelAXOS8N+DvsrLc3oDSD7sfYe9dazBVJJwB1qOe4jtoy8rrGo7sa4bxN4u+3BrazYrD0aTpu/8ArUBuZ/irWjq2oELxDF8qjPU9zWJRRQUFFFFABXqfhX/kX7L/AHP6mvLK9T8K/wDIv2X+5/U0CZq0UUUEhRRRQAUUUUAFFFFABRRRQAUUUUAYHjiMyaC2P4XVj+tebV7BqFmmoWcsD9HGK8o1Cxl026kgmXDKcZ7H3FBSK1FFFAwooooAKuWerXmnsDBcPHjoucj8jVOigDpY/HmoR7dyxyY67h1ps3jrUZFYL5cZPQqOn51zlFAizdajc3rEzzvJnsTx+VVqKKBhRRRQAUUUUAFeq+GY2i0GzVhhgnT8TXnWh6TJq9/HCo+TOXbsBXqsMSwQpGowqjAoEx9FFFBIUUUUAFFFFABRRRQAUUUUAFFFFABVHVtFttYhCTplh91x1FXqKAOIuPh5Lu/cXSbf+mgP9Ki/4V5d/wDP1D+R/wAK7yigdzg/+FeXf/P1D+R/wo/4V5d/8/UP5H/Cu8ooC5wf/CvLv/n6h/I/4Uf8K8u/+fqH8j/hXeUUBc4P/hXl3/z9Q/kf8KP+FeXf/P1D+R/wrvKKAucH/wAK8u/+fqH8j/hR/wAK8u/+fqH8j/hXeUUBc4P/AIV5d/8AP1D+R/wo/wCFeXf/AD9Q/kf8K7yigLnB/wDCvLv/AJ+ofyP+FWLX4ekMDc3KkZ6Rg12lFAXKmm6VbaVD5dvGEB6nuat0UUCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9k=', 'base64');
|
|
59
61
|
res.writeHead(200, {
|
|
60
62
|
'Content-Type': 'image/png',
|
|
61
63
|
'Content-Length': img.length,
|
|
@@ -92,9 +94,10 @@ class DevMailbox {
|
|
|
92
94
|
const content = JSON.parse(json);
|
|
93
95
|
return content;
|
|
94
96
|
}
|
|
95
|
-
createRequestContext(languageCode) {
|
|
97
|
+
createRequestContext(languageCode, req) {
|
|
96
98
|
return new core_1.RequestContext({
|
|
97
99
|
languageCode,
|
|
100
|
+
req,
|
|
98
101
|
apiType: 'admin',
|
|
99
102
|
session: {},
|
|
100
103
|
isAuthorized: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-mailbox.js","sourceRoot":"","sources":["../../src/dev-mailbox.ts"],"names":[],"mappings":";;;;;;AACA,wCAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"dev-mailbox.js","sourceRoot":"","sources":["../../src/dev-mailbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { InjectableStrategy, VendureEvent } from '@vendure/core';
|
|
2
|
+
import { EmailDetails, EmailPluginOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @description
|
|
5
|
+
* An EmailGenerator generates the subject and body details of an email.
|
|
6
|
+
*
|
|
7
|
+
* @docsCategory core plugins/EmailPlugin
|
|
8
|
+
* @docsPage EmailGenerator
|
|
9
|
+
* @docsWeight 0
|
|
10
|
+
*/
|
|
11
|
+
export interface EmailGenerator<T extends string = any, E extends VendureEvent = any> extends InjectableStrategy {
|
|
12
|
+
/**
|
|
13
|
+
* @description
|
|
14
|
+
* Any necessary setup can be performed here.
|
|
15
|
+
*/
|
|
16
|
+
onInit?(options: EmailPluginOptions): void | Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* @description
|
|
19
|
+
* Given a subject and body from an email template, this method generates the final
|
|
20
|
+
* interpolated email text.
|
|
21
|
+
*/
|
|
22
|
+
generate(from: string, subject: string, body: string, templateVars: {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
}): Pick<EmailDetails, 'from' | 'subject' | 'body'>;
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-generator.js","sourceRoot":"","sources":["../../src/email-generator.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ModuleRef } from '@nestjs/core';
|
|
2
|
+
import { Injector, RequestContext } from '@vendure/core';
|
|
3
|
+
import { EmailGenerator } from './email-generator';
|
|
4
|
+
import { EmailSender } from './email-sender';
|
|
5
|
+
import { EmailTransportOptions, InitializedEmailPluginOptions, IntermediateEmailDetails } from './types';
|
|
3
6
|
/**
|
|
4
7
|
* This class combines the template loading, generation, and email sending - the actual "work" of
|
|
5
8
|
* the EmailPlugin. It is arranged this way primarily to accommodate easier testing, so that the
|
|
6
9
|
* tests can be run without needing all the JobQueue stuff which would require a full e2e test.
|
|
7
10
|
*/
|
|
8
11
|
export declare class EmailProcessor {
|
|
9
|
-
protected options:
|
|
10
|
-
|
|
12
|
+
protected options: InitializedEmailPluginOptions;
|
|
13
|
+
private moduleRef;
|
|
11
14
|
protected emailSender: EmailSender;
|
|
12
15
|
protected generator: EmailGenerator;
|
|
13
|
-
protected transport: EmailTransportOptions;
|
|
14
|
-
constructor(options:
|
|
16
|
+
protected transport: EmailTransportOptions | ((injector?: Injector, ctx?: RequestContext) => EmailTransportOptions | Promise<EmailTransportOptions>);
|
|
17
|
+
constructor(options: InitializedEmailPluginOptions, moduleRef: ModuleRef);
|
|
15
18
|
init(): Promise<void>;
|
|
16
19
|
process(data: IntermediateEmailDetails): Promise<boolean>;
|
|
20
|
+
getTransportSettings(ctx?: RequestContext): Promise<EmailTransportOptions>;
|
|
17
21
|
}
|
|
@@ -17,25 +17,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.EmailProcessor = void 0;
|
|
19
19
|
const common_1 = require("@nestjs/common");
|
|
20
|
-
const core_1 = require("@
|
|
20
|
+
const core_1 = require("@nestjs/core");
|
|
21
|
+
const core_2 = require("@vendure/core");
|
|
21
22
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
22
23
|
const attachment_utils_1 = require("./attachment-utils");
|
|
23
24
|
const common_2 = require("./common");
|
|
24
25
|
const constants_1 = require("./constants");
|
|
25
26
|
const handlebars_mjml_generator_1 = require("./handlebars-mjml-generator");
|
|
26
27
|
const nodemailer_email_sender_1 = require("./nodemailer-email-sender");
|
|
27
|
-
const template_loader_1 = require("./template-loader");
|
|
28
28
|
/**
|
|
29
29
|
* This class combines the template loading, generation, and email sending - the actual "work" of
|
|
30
30
|
* the EmailPlugin. It is arranged this way primarily to accommodate easier testing, so that the
|
|
31
31
|
* tests can be run without needing all the JobQueue stuff which would require a full e2e test.
|
|
32
32
|
*/
|
|
33
33
|
let EmailProcessor = class EmailProcessor {
|
|
34
|
-
constructor(options) {
|
|
34
|
+
constructor(options, moduleRef) {
|
|
35
35
|
this.options = options;
|
|
36
|
+
this.moduleRef = moduleRef;
|
|
36
37
|
}
|
|
37
38
|
async init() {
|
|
38
|
-
this.templateLoader = new template_loader_1.TemplateLoader(this.options.templatePath);
|
|
39
39
|
this.emailSender = this.options.emailSender ? this.options.emailSender : new nodemailer_email_sender_1.NodemailerEmailSender();
|
|
40
40
|
this.generator = this.options.emailGenerator
|
|
41
41
|
? this.options.emailGenerator
|
|
@@ -52,40 +52,58 @@ let EmailProcessor = class EmailProcessor {
|
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
if (!this.options.transport) {
|
|
55
|
-
throw new
|
|
55
|
+
throw new core_2.InternalServerError("When devMode is not set to true, the 'transport' property must be set.");
|
|
56
56
|
}
|
|
57
57
|
this.transport = this.options.transport;
|
|
58
58
|
}
|
|
59
|
-
|
|
59
|
+
const transport = await this.getTransportSettings();
|
|
60
|
+
if (transport.type === 'file') {
|
|
60
61
|
// ensure the configured directory exists before
|
|
61
62
|
// we attempt to write files to it
|
|
62
|
-
const emailPath =
|
|
63
|
+
const emailPath = transport.outputPath;
|
|
63
64
|
await fs_extra_1.default.ensureDir(emailPath);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
async process(data) {
|
|
67
68
|
try {
|
|
68
|
-
const
|
|
69
|
-
const
|
|
69
|
+
const ctx = core_2.RequestContext.deserialize(data.ctx);
|
|
70
|
+
const bodySource = await this.options.templateLoader.loadTemplate(new core_2.Injector(this.moduleRef), ctx, {
|
|
71
|
+
templateName: data.templateFile,
|
|
72
|
+
type: data.type,
|
|
73
|
+
});
|
|
74
|
+
const generated = this.generator.generate(data.from, data.subject, bodySource, data.templateVars);
|
|
70
75
|
const emailDetails = Object.assign(Object.assign({}, generated), { recipient: data.recipient, attachments: (0, attachment_utils_1.deserializeAttachments)(data.attachments), cc: data.cc, bcc: data.bcc, replyTo: data.replyTo });
|
|
71
|
-
await this.
|
|
76
|
+
const transportSettings = await this.getTransportSettings(ctx);
|
|
77
|
+
await this.emailSender.send(emailDetails, transportSettings);
|
|
72
78
|
return true;
|
|
73
79
|
}
|
|
74
80
|
catch (err) {
|
|
75
81
|
if (err instanceof Error) {
|
|
76
|
-
|
|
82
|
+
core_2.Logger.error(err.message, constants_1.loggerCtx, err.stack);
|
|
77
83
|
}
|
|
78
84
|
else {
|
|
79
|
-
|
|
85
|
+
core_2.Logger.error(String(err), constants_1.loggerCtx);
|
|
80
86
|
}
|
|
81
87
|
throw err;
|
|
82
88
|
}
|
|
83
89
|
}
|
|
90
|
+
async getTransportSettings(ctx) {
|
|
91
|
+
if ((0, common_2.isDevModeOptions)(this.options)) {
|
|
92
|
+
return {
|
|
93
|
+
type: 'file',
|
|
94
|
+
raw: false,
|
|
95
|
+
outputPath: this.options.outputPath,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return (0, common_2.resolveTransportSettings)(this.options, new core_2.Injector(this.moduleRef), ctx);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
84
102
|
};
|
|
85
103
|
EmailProcessor = __decorate([
|
|
86
104
|
(0, common_1.Injectable)(),
|
|
87
105
|
__param(0, (0, common_1.Inject)(constants_1.EMAIL_PLUGIN_OPTIONS)),
|
|
88
|
-
__metadata("design:paramtypes", [Object])
|
|
106
|
+
__metadata("design:paramtypes", [Object, core_1.ModuleRef])
|
|
89
107
|
], EmailProcessor);
|
|
90
108
|
exports.EmailProcessor = EmailProcessor;
|
|
91
109
|
//# sourceMappingURL=email-processor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-processor.js","sourceRoot":"","sources":["../../src/email-processor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,
|
|
1
|
+
{"version":3,"file":"email-processor.js","sourceRoot":"","sources":["../../src/email-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { InjectableStrategy } from '@vendure/core';
|
|
2
|
+
import { EmailDetails, EmailTransportOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* @description
|
|
5
|
+
* An EmailSender is responsible for sending the email, e.g. via an SMTP connection
|
|
6
|
+
* or using some other mail-sending API. By default, the EmailPlugin uses the
|
|
7
|
+
* {@link NodemailerEmailSender}, but it is also possible to supply a custom implementation:
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```TypeScript
|
|
11
|
+
* const sgMail = require('\@sendgrid/mail');
|
|
12
|
+
*
|
|
13
|
+
* sgMail.setApiKey(process.env.SENDGRID_API_KEY);
|
|
14
|
+
*
|
|
15
|
+
* class SendgridEmailSender implements EmailSender {
|
|
16
|
+
* async send(email: EmailDetails) {
|
|
17
|
+
* await sgMail.send({
|
|
18
|
+
* to: email.recipient,
|
|
19
|
+
* from: email.from,
|
|
20
|
+
* subject: email.subject,
|
|
21
|
+
* html: email.body,
|
|
22
|
+
* });
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* const config: VendureConfig = {
|
|
27
|
+
* logger: new DefaultLogger({ level: LogLevel.Debug })
|
|
28
|
+
* // ...
|
|
29
|
+
* plugins: [
|
|
30
|
+
* EmailPlugin.init({
|
|
31
|
+
* // ... template, handlers config omitted
|
|
32
|
+
* transport: { type: 'none' },
|
|
33
|
+
* emailSender: new SendgridEmailSender(),
|
|
34
|
+
* }),
|
|
35
|
+
* ],
|
|
36
|
+
* };
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @docsCategory core plugins/EmailPlugin
|
|
40
|
+
* @docsPage EmailSender
|
|
41
|
+
* @docsWeight 0
|
|
42
|
+
*/
|
|
43
|
+
export interface EmailSender extends InjectableStrategy {
|
|
44
|
+
send: (email: EmailDetails, options: EmailTransportOptions) => void | Promise<void>;
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-sender.js","sourceRoot":"","sources":["../../src/email-sender.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LanguageCode } from '@vendure/common/lib/generated-types';
|
|
1
2
|
import { Type } from '@vendure/common/lib/shared-types';
|
|
2
3
|
import { Injector } from '@vendure/core';
|
|
3
4
|
import { EmailEventListener } from './event-listener';
|
|
@@ -111,12 +112,13 @@ import { EmailTemplateConfig, EventWithAsyncData, EventWithContext, Intermediate
|
|
|
111
112
|
* };
|
|
112
113
|
* ```
|
|
113
114
|
*
|
|
114
|
-
* @docsCategory EmailPlugin
|
|
115
|
+
* @docsCategory core plugins/EmailPlugin
|
|
115
116
|
*/
|
|
116
117
|
export declare class EmailEventHandler<T extends string = string, Event extends EventWithContext = EventWithContext> {
|
|
117
118
|
listener: EmailEventListener<T>;
|
|
118
119
|
event: Type<Event>;
|
|
119
120
|
private setRecipientFn;
|
|
121
|
+
private setLanguageCodeFn;
|
|
120
122
|
private setTemplateVarsFn;
|
|
121
123
|
private setAttachmentsFn?;
|
|
122
124
|
private setOptionalAddressFieldsFn?;
|
|
@@ -146,6 +148,13 @@ export declare class EmailEventHandler<T extends string = string, Event extends
|
|
|
146
148
|
* Or a comma-separated list of addresses: `'foobar@example.com, "Ноде Майлер" <bar@example.com>'`
|
|
147
149
|
*/
|
|
148
150
|
setRecipient(setRecipientFn: (event: Event) => string): EmailEventHandler<T, Event>;
|
|
151
|
+
/**
|
|
152
|
+
* @description
|
|
153
|
+
* A function which allows to override the language of the email. If not defined, the language from the context will be used.
|
|
154
|
+
*
|
|
155
|
+
* @since 1.8.0
|
|
156
|
+
*/
|
|
157
|
+
setLanguageCode(setLanguageCodeFn: (event: Event) => LanguageCode | undefined): EmailEventHandler<T, Event>;
|
|
149
158
|
/**
|
|
150
159
|
* @description
|
|
151
160
|
* A function which returns an object hash of variables which will be made available to the Handlebars template
|
|
@@ -202,6 +211,9 @@ export declare class EmailEventHandler<T extends string = string, Event extends
|
|
|
202
211
|
* @description
|
|
203
212
|
* Add configuration for another template other than the default `"body.hbs"`. Use this method to define specific
|
|
204
213
|
* templates for channels or languageCodes other than the default.
|
|
214
|
+
*
|
|
215
|
+
* @deprecated Define a custom TemplateLoader on plugin initalization to define templates based on the RequestContext.
|
|
216
|
+
* E.g. `EmailPlugin.init({ templateLoader: new CustomTemplateLoader() })`
|
|
205
217
|
*/
|
|
206
218
|
addTemplate(config: EmailTemplateConfig): EmailEventHandler<T, Event>;
|
|
207
219
|
/**
|
|
@@ -250,7 +262,7 @@ export declare class EmailEventHandler<T extends string = string, Event extends
|
|
|
250
262
|
* Identical to the {@link EmailEventHandler} but with a `data` property added to the `event` based on the result
|
|
251
263
|
* of the `.loadData()` function.
|
|
252
264
|
*
|
|
253
|
-
* @docsCategory EmailPlugin
|
|
265
|
+
* @docsCategory core plugins/EmailPlugin
|
|
254
266
|
*/
|
|
255
267
|
export declare class EmailEventHandlerWithAsyncData<Data, T extends string = string, InputEvent extends EventWithContext = EventWithContext, Event extends EventWithAsyncData<InputEvent, Data> = EventWithAsyncData<InputEvent, Data>> extends EmailEventHandler<T, Event> {
|
|
256
268
|
_loadDataFn: LoadDataFn<InputEvent, Data>;
|
package/lib/src/event-handler.js
CHANGED
|
@@ -113,7 +113,7 @@ const constants_1 = require("./constants");
|
|
|
113
113
|
* };
|
|
114
114
|
* ```
|
|
115
115
|
*
|
|
116
|
-
* @docsCategory EmailPlugin
|
|
116
|
+
* @docsCategory core plugins/EmailPlugin
|
|
117
117
|
*/
|
|
118
118
|
class EmailEventHandler {
|
|
119
119
|
constructor(listener, event) {
|
|
@@ -151,6 +151,16 @@ class EmailEventHandler {
|
|
|
151
151
|
this.setRecipientFn = setRecipientFn;
|
|
152
152
|
return this;
|
|
153
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* @description
|
|
156
|
+
* A function which allows to override the language of the email. If not defined, the language from the context will be used.
|
|
157
|
+
*
|
|
158
|
+
* @since 1.8.0
|
|
159
|
+
*/
|
|
160
|
+
setLanguageCode(setLanguageCodeFn) {
|
|
161
|
+
this.setLanguageCodeFn = setLanguageCodeFn;
|
|
162
|
+
return this;
|
|
163
|
+
}
|
|
154
164
|
/**
|
|
155
165
|
* @description
|
|
156
166
|
* A function which returns an object hash of variables which will be made available to the Handlebars template
|
|
@@ -222,6 +232,9 @@ class EmailEventHandler {
|
|
|
222
232
|
* @description
|
|
223
233
|
* Add configuration for another template other than the default `"body.hbs"`. Use this method to define specific
|
|
224
234
|
* templates for channels or languageCodes other than the default.
|
|
235
|
+
*
|
|
236
|
+
* @deprecated Define a custom TemplateLoader on plugin initalization to define templates based on the RequestContext.
|
|
237
|
+
* E.g. `EmailPlugin.init({ templateLoader: new CustomTemplateLoader() })`
|
|
225
238
|
*/
|
|
226
239
|
addTemplate(config) {
|
|
227
240
|
this.configurations.push(config);
|
|
@@ -270,7 +283,7 @@ class EmailEventHandler {
|
|
|
270
283
|
* @internal
|
|
271
284
|
*/
|
|
272
285
|
async handle(event, globals = {}, injector) {
|
|
273
|
-
var _a, _b, _c, _d;
|
|
286
|
+
var _a, _b, _c, _d, _e;
|
|
274
287
|
for (const filterFn of this.filterFns) {
|
|
275
288
|
if (!filterFn(event)) {
|
|
276
289
|
return;
|
|
@@ -302,7 +315,8 @@ class EmailEventHandler {
|
|
|
302
315
|
`Remember to call ".setFrom()" when setting up the EmailEventHandler for ${this.type}`);
|
|
303
316
|
}
|
|
304
317
|
const { ctx } = event;
|
|
305
|
-
const
|
|
318
|
+
const languageCode = ((_a = this.setLanguageCodeFn) === null || _a === void 0 ? void 0 : _a.call(this, event)) || ctx.languageCode;
|
|
319
|
+
const configuration = this.getBestConfiguration(ctx.channel.code, languageCode);
|
|
306
320
|
const subject = configuration ? configuration.subject : this.defaultSubject;
|
|
307
321
|
if (subject == null) {
|
|
308
322
|
throw new Error(`No subject field has been defined. ` +
|
|
@@ -312,14 +326,14 @@ class EmailEventHandler {
|
|
|
312
326
|
const templateVars = this.setTemplateVarsFn ? this.setTemplateVarsFn(event, globals) : {};
|
|
313
327
|
let attachmentsArray = [];
|
|
314
328
|
try {
|
|
315
|
-
attachmentsArray = (
|
|
329
|
+
attachmentsArray = (_c = (await ((_b = this.setAttachmentsFn) === null || _b === void 0 ? void 0 : _b.call(this, event)))) !== null && _c !== void 0 ? _c : [];
|
|
316
330
|
}
|
|
317
331
|
catch (e) {
|
|
318
332
|
core_1.Logger.error(e, constants_1.loggerCtx, e.stack);
|
|
319
333
|
}
|
|
320
334
|
const attachments = await (0, attachment_utils_1.serializeAttachments)(attachmentsArray);
|
|
321
|
-
const optionalAddressFields = (
|
|
322
|
-
return Object.assign({ type: this.type, recipient, from: this.from, templateVars: Object.assign(Object.assign({}, globals), templateVars), subject, templateFile: configuration ? configuration.templateFile : 'body.hbs', attachments }, optionalAddressFields);
|
|
335
|
+
const optionalAddressFields = (_e = (await ((_d = this.setOptionalAddressFieldsFn) === null || _d === void 0 ? void 0 : _d.call(this, event)))) !== null && _e !== void 0 ? _e : {};
|
|
336
|
+
return Object.assign({ ctx: event.ctx.serialize(), type: this.type, recipient, from: this.from, templateVars: Object.assign(Object.assign({}, globals), templateVars), subject, templateFile: configuration ? configuration.templateFile : 'body.hbs', attachments }, optionalAddressFields);
|
|
323
337
|
}
|
|
324
338
|
/**
|
|
325
339
|
* @description
|
|
@@ -354,7 +368,7 @@ exports.EmailEventHandler = EmailEventHandler;
|
|
|
354
368
|
* Identical to the {@link EmailEventHandler} but with a `data` property added to the `event` based on the result
|
|
355
369
|
* of the `.loadData()` function.
|
|
356
370
|
*
|
|
357
|
-
* @docsCategory EmailPlugin
|
|
371
|
+
* @docsCategory core plugins/EmailPlugin
|
|
358
372
|
*/
|
|
359
373
|
class EmailEventHandlerWithAsyncData extends EmailEventHandler {
|
|
360
374
|
constructor(_loadDataFn, listener, event) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/event-handler.ts"],"names":[],"mappings":";;;AAEA,wCAAiD;AAEjD,yDAA0D;AAC1D,2CAAwC;AAcxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8GG;AACH,MAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"event-handler.js","sourceRoot":"","sources":["../../src/event-handler.ts"],"names":[],"mappings":"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"}
|