@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
|
@@ -6,7 +6,7 @@ import { EventWithContext } from './types';
|
|
|
6
6
|
* An EmailEventListener is used to listen for events and set up a {@link EmailEventHandler} which
|
|
7
7
|
* defines how an email will be generated from this event.
|
|
8
8
|
*
|
|
9
|
-
* @docsCategory EmailPlugin
|
|
9
|
+
* @docsCategory core plugins/EmailPlugin
|
|
10
10
|
*/
|
|
11
11
|
export declare class EmailEventListener<T extends string> {
|
|
12
12
|
type: T;
|
|
@@ -7,7 +7,7 @@ const event_handler_1 = require("./event-handler");
|
|
|
7
7
|
* An EmailEventListener is used to listen for events and set up a {@link EmailEventHandler} which
|
|
8
8
|
* defines how an email will be generated from this event.
|
|
9
9
|
*
|
|
10
|
-
* @docsCategory EmailPlugin
|
|
10
|
+
* @docsCategory core plugins/EmailPlugin
|
|
11
11
|
*/
|
|
12
12
|
class EmailEventListener {
|
|
13
13
|
constructor(type) {
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { EmailGenerator
|
|
1
|
+
import { EmailGenerator } from './email-generator';
|
|
2
|
+
import { InitializedEmailPluginOptions } from './types';
|
|
2
3
|
/**
|
|
3
4
|
* @description
|
|
4
5
|
* Uses Handlebars (https://handlebarsjs.com/) to output MJML (https://mjml.io) which is then
|
|
5
6
|
* compiled down to responsive email HTML.
|
|
6
7
|
*
|
|
7
|
-
* @docsCategory EmailPlugin
|
|
8
|
+
* @docsCategory core plugins/EmailPlugin
|
|
8
9
|
* @docsPage EmailGenerator
|
|
9
10
|
*/
|
|
10
11
|
export declare class HandlebarsMjmlGenerator implements EmailGenerator {
|
|
11
|
-
onInit(options:
|
|
12
|
+
onInit(options: InitializedEmailPluginOptions): Promise<void>;
|
|
12
13
|
generate(from: string, subject: string, template: string, templateVars: any): {
|
|
13
14
|
from: string;
|
|
14
15
|
subject: string;
|
|
15
16
|
body: string;
|
|
16
17
|
};
|
|
17
|
-
private registerPartials;
|
|
18
18
|
private registerHelpers;
|
|
19
19
|
}
|
|
@@ -5,22 +5,22 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.HandlebarsMjmlGenerator = void 0;
|
|
7
7
|
const dateformat_1 = __importDefault(require("dateformat"));
|
|
8
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
8
|
const handlebars_1 = __importDefault(require("handlebars"));
|
|
10
9
|
const mjml_1 = __importDefault(require("mjml"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
10
|
/**
|
|
13
11
|
* @description
|
|
14
12
|
* Uses Handlebars (https://handlebarsjs.com/) to output MJML (https://mjml.io) which is then
|
|
15
13
|
* compiled down to responsive email HTML.
|
|
16
14
|
*
|
|
17
|
-
* @docsCategory EmailPlugin
|
|
15
|
+
* @docsCategory core plugins/EmailPlugin
|
|
18
16
|
* @docsPage EmailGenerator
|
|
19
17
|
*/
|
|
20
18
|
class HandlebarsMjmlGenerator {
|
|
21
|
-
onInit(options) {
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
async onInit(options) {
|
|
20
|
+
if (options.templateLoader.loadPartials) {
|
|
21
|
+
const partials = await options.templateLoader.loadPartials();
|
|
22
|
+
partials.forEach(({ name, content }) => handlebars_1.default.registerPartial(name, content));
|
|
23
|
+
}
|
|
24
24
|
this.registerHelpers();
|
|
25
25
|
}
|
|
26
26
|
generate(from, subject, template, templateVars) {
|
|
@@ -38,13 +38,6 @@ class HandlebarsMjmlGenerator {
|
|
|
38
38
|
const body = (0, mjml_1.default)(mjml).html;
|
|
39
39
|
return { from: fromResult, subject: subjectResult, body };
|
|
40
40
|
}
|
|
41
|
-
registerPartials(partialsPath) {
|
|
42
|
-
const partialsFiles = fs_extra_1.default.readdirSync(partialsPath);
|
|
43
|
-
for (const partialFile of partialsFiles) {
|
|
44
|
-
const partialContent = fs_extra_1.default.readFileSync(path_1.default.join(partialsPath, partialFile), 'utf-8');
|
|
45
|
-
handlebars_1.default.registerPartial(path_1.default.basename(partialFile, '.hbs'), partialContent);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
41
|
registerHelpers() {
|
|
49
42
|
handlebars_1.default.registerHelper('formatDate', (date, format) => {
|
|
50
43
|
if (!date) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlebars-mjml-generator.js","sourceRoot":"","sources":["../../src/handlebars-mjml-generator.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;
|
|
1
|
+
{"version":3,"file":"handlebars-mjml-generator.js","sourceRoot":"","sources":["../../src/handlebars-mjml-generator.ts"],"names":[],"mappings":";;;;;;AAAA,4DAAoC;AAEpC,4DAAoC;AACpC,gDAA6B;AAW7B;;;;;;;GAOG;AACH,MAAa,uBAAuB;IAChC,KAAK,CAAC,MAAM,CAAC,OAAsC;QAC/C,IAAI,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE;YACrC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC;YAC7D,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,oBAAU,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SACtF;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,QAAgB,EAAE,YAAiB;QACvE,MAAM,YAAY,GAAG,oBAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,eAAe,GAAG,oBAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,oBAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtD,0EAA0E;QAC1E,kHAAkH;QAClH,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,eAAe,GAAmB,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC;QAChF,MAAM,UAAU,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,CAAC;QACvF,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,EAAE,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,IAAA,cAAS,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAEO,eAAe;QACnB,oBAAU,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAsB,EAAE,MAAuB,EAAE,EAAE;YACxF,IAAI,CAAC,IAAI,EAAE;gBACP,OAAO,IAAI,CAAC;aACf;YACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC5B,MAAM,GAAG,SAAS,CAAC;aACtB;YACD,OAAO,IAAA,oBAAU,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,oBAAU,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,MAAe,EAAE,EAAE;YACzD,IAAI,MAAM,IAAI,IAAI,EAAE;gBAChB,OAAO,MAAM,CAAC;aACjB;YACD,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA3CD,0DA2CC"}
|
package/lib/src/mock-events.js
CHANGED
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.mockEmailAddressChangeEvent = exports.mockPasswordResetEvent = exports.mockAccountRegistrationEvent = exports.mockOrderStateTransitionEvent = void 0;
|
|
4
4
|
const generated_shop_types_1 = require("@vendure/common/lib/generated-shop-types");
|
|
5
5
|
const core_1 = require("@vendure/core");
|
|
6
|
-
const shipping_line_entity_1 = require("@vendure/core/dist/entity/shipping-line/shipping-line.entity");
|
|
7
6
|
exports.mockOrderStateTransitionEvent = new core_1.OrderStateTransitionEvent('ArrangingPayment', 'PaymentSettled', {}, new core_1.Order({
|
|
8
7
|
id: '6',
|
|
9
8
|
currencyCode: core_1.CurrencyCode.USD,
|
|
@@ -30,22 +29,18 @@ exports.mockOrderStateTransitionEvent = new core_1.OrderStateTransitionEvent('Ar
|
|
|
30
29
|
name: 'Curvy Monitor 24 inch',
|
|
31
30
|
sku: 'C24F390',
|
|
32
31
|
}),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
description: '$10 off computer equipment',
|
|
44
|
-
},
|
|
45
|
-
],
|
|
46
|
-
taxLines: [],
|
|
47
|
-
}),
|
|
32
|
+
quantity: 1,
|
|
33
|
+
listPrice: 14374,
|
|
34
|
+
listPriceIncludesTax: true,
|
|
35
|
+
adjustments: [
|
|
36
|
+
{
|
|
37
|
+
adjustmentSource: 'Promotion:1',
|
|
38
|
+
type: generated_shop_types_1.AdjustmentType.PROMOTION,
|
|
39
|
+
amount: -1000,
|
|
40
|
+
description: '$10 off computer equipment',
|
|
41
|
+
},
|
|
48
42
|
],
|
|
43
|
+
taxLines: [],
|
|
49
44
|
}),
|
|
50
45
|
new core_1.OrderLine({
|
|
51
46
|
id: '6',
|
|
@@ -57,22 +52,18 @@ exports.mockOrderStateTransitionEvent = new core_1.OrderStateTransitionEvent('Ar
|
|
|
57
52
|
name: 'Hard Drive 1TB',
|
|
58
53
|
sku: 'IHD455T1',
|
|
59
54
|
}),
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
adjustments: [],
|
|
66
|
-
taxLines: [],
|
|
67
|
-
}),
|
|
68
|
-
],
|
|
55
|
+
quantity: 1,
|
|
56
|
+
listPrice: 3799,
|
|
57
|
+
listPriceIncludesTax: true,
|
|
58
|
+
adjustments: [],
|
|
59
|
+
taxLines: [],
|
|
69
60
|
}),
|
|
70
61
|
],
|
|
71
62
|
subTotal: 15144,
|
|
72
63
|
subTotalWithTax: 18173,
|
|
73
64
|
shipping: 1000,
|
|
74
65
|
shippingLines: [
|
|
75
|
-
new
|
|
66
|
+
new core_1.ShippingLine({
|
|
76
67
|
listPrice: 1000,
|
|
77
68
|
listPriceIncludesTax: true,
|
|
78
69
|
taxLines: [{ taxRate: 20, description: 'shipping tax' }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-events.js","sourceRoot":"","sources":["../../src/mock-events.ts"],"names":[],"mappings":";;;AAAA,mFAA0E;AAC1E,wCAauB;
|
|
1
|
+
{"version":3,"file":"mock-events.js","sourceRoot":"","sources":["../../src/mock-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Stream } from 'stream';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { EmailSender } from './email-sender';
|
|
4
|
+
import { EmailDetails, EmailTransportOptions } from './types';
|
|
5
|
+
export type StreamTransportInfo = {
|
|
5
6
|
envelope: {
|
|
6
7
|
from: string;
|
|
7
8
|
to: string[];
|
|
@@ -13,14 +14,16 @@ export declare type StreamTransportInfo = {
|
|
|
13
14
|
* @description
|
|
14
15
|
* Uses the configured transport to send the generated email.
|
|
15
16
|
*
|
|
16
|
-
* @docsCategory EmailPlugin
|
|
17
|
+
* @docsCategory core plugins/EmailPlugin
|
|
17
18
|
* @docsPage EmailSender
|
|
18
19
|
*/
|
|
19
20
|
export declare class NodemailerEmailSender implements EmailSender {
|
|
20
21
|
private _smtpTransport;
|
|
21
22
|
private _sendMailTransport;
|
|
23
|
+
private _sesTransport;
|
|
22
24
|
send(email: EmailDetails, options: EmailTransportOptions): Promise<undefined>;
|
|
23
25
|
private getSmtpTransport;
|
|
26
|
+
private getSesTransport;
|
|
24
27
|
private getSendMailTransport;
|
|
25
28
|
private sendMail;
|
|
26
29
|
private sendFileJson;
|
|
@@ -16,7 +16,7 @@ const constants_1 = require("./constants");
|
|
|
16
16
|
* @description
|
|
17
17
|
* Uses the configured transport to send the generated email.
|
|
18
18
|
*
|
|
19
|
-
* @docsCategory EmailPlugin
|
|
19
|
+
* @docsCategory core plugins/EmailPlugin
|
|
20
20
|
* @docsPage EmailSender
|
|
21
21
|
*/
|
|
22
22
|
class NodemailerEmailSender {
|
|
@@ -38,6 +38,9 @@ class NodemailerEmailSender {
|
|
|
38
38
|
case 'sendmail':
|
|
39
39
|
await this.sendMail(email, this.getSendMailTransport(options));
|
|
40
40
|
break;
|
|
41
|
+
case 'ses':
|
|
42
|
+
await this.sendMail(email, this.getSesTransport(options));
|
|
43
|
+
break;
|
|
41
44
|
case 'smtp':
|
|
42
45
|
await this.sendMail(email, this.getSmtpTransport(options));
|
|
43
46
|
break;
|
|
@@ -55,6 +58,12 @@ class NodemailerEmailSender {
|
|
|
55
58
|
}
|
|
56
59
|
return this._smtpTransport;
|
|
57
60
|
}
|
|
61
|
+
getSesTransport(options) {
|
|
62
|
+
if (!this._sesTransport) {
|
|
63
|
+
this._sesTransport = (0, nodemailer_1.createTransport)(options);
|
|
64
|
+
}
|
|
65
|
+
return this._sesTransport;
|
|
66
|
+
}
|
|
58
67
|
getSendMailTransport(options) {
|
|
59
68
|
if (!this._sendMailTransport) {
|
|
60
69
|
this._sendMailTransport = (0, nodemailer_1.createTransport)(Object.assign({ sendmail: true }, options));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodemailer-email-sender.js","sourceRoot":"","sources":["../../src/nodemailer-email-sender.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAuE;AACvE,mEAA+D;AAC/D,wCAAuC;AACvC,wDAA0B;AAC1B,2CAA6C;AAG7C,gDAAwB;AAExB,+BAA8B;AAE9B,2CAAwC;
|
|
1
|
+
{"version":3,"file":"nodemailer-email-sender.js","sourceRoot":"","sources":["../../src/nodemailer-email-sender.ts"],"names":[],"mappings":"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"}
|
package/lib/src/plugin.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MiddlewareConsumer, NestModule, OnApplicationBootstrap } from '@nestjs/common';
|
|
1
|
+
import { MiddlewareConsumer, NestModule, OnApplicationBootstrap, OnApplicationShutdown } from '@nestjs/common';
|
|
2
2
|
import { ModuleRef } from '@nestjs/core';
|
|
3
3
|
import { EventBus, JobQueueService, ProcessContext, Type } from '@vendure/core';
|
|
4
4
|
import { EmailProcessor } from './email-processor';
|
|
5
|
-
import { EmailPluginDevModeOptions, EmailPluginOptions } from './types';
|
|
5
|
+
import { EmailPluginDevModeOptions, EmailPluginOptions, InitializedEmailPluginOptions } from './types';
|
|
6
6
|
/**
|
|
7
7
|
* @description
|
|
8
8
|
* The EmailPlugin creates and sends transactional emails based on Vendure events. By default, it uses an [MJML](https://mjml.io/)-based
|
|
@@ -63,6 +63,14 @@ import { EmailPluginDevModeOptions, EmailPluginOptions } from './types';
|
|
|
63
63
|
* `node_modules/\@vendure/email-plugin/templates` to a location of your choice, and then point the `templatePath` config
|
|
64
64
|
* property at that directory.
|
|
65
65
|
*
|
|
66
|
+
* * ### Dynamic Email Templates
|
|
67
|
+
* Instead of passing a static value to `templatePath`, use `templateLoader` to define a template path.
|
|
68
|
+
* ```ts
|
|
69
|
+
* EmailPlugin.init({
|
|
70
|
+
* ...,
|
|
71
|
+
* templateLoader: new FileBasedTemplateLoader(my/order-confirmation/templates)
|
|
72
|
+
* })
|
|
73
|
+
* ```
|
|
66
74
|
* ## Customizing templates
|
|
67
75
|
*
|
|
68
76
|
* Emails are generated from templates which use [MJML](https://mjml.io/) syntax. MJML is an open-source HTML-like markup
|
|
@@ -98,8 +106,87 @@ import { EmailPluginDevModeOptions, EmailPluginOptions } from './types';
|
|
|
98
106
|
*
|
|
99
107
|
* The `defaultEmailHandlers` array defines the default handlers such as for handling new account registration, order confirmation, password reset
|
|
100
108
|
* etc. These defaults can be extended by adding custom templates for languages other than the default, or even completely new types of emails
|
|
101
|
-
* which respond to any of the available [VendureEvents](/docs/typescript-api/events/).
|
|
102
|
-
*
|
|
109
|
+
* which respond to any of the available [VendureEvents](/docs/typescript-api/events/).
|
|
110
|
+
*
|
|
111
|
+
* A good way to learn how to create your own email handlers is to take a look at the
|
|
112
|
+
* [source code of the default handlers](https://github.com/vendure-ecommerce/vendure/blob/master/packages/email-plugin/src/default-email-handlers.ts).
|
|
113
|
+
* New handlers are defined in exactly the same way.
|
|
114
|
+
*
|
|
115
|
+
* It is also possible to modify the default handlers:
|
|
116
|
+
*
|
|
117
|
+
* ```TypeScript
|
|
118
|
+
* // Rather than importing `defaultEmailHandlers`, you can
|
|
119
|
+
* // import the handlers individually
|
|
120
|
+
* import {
|
|
121
|
+
* orderConfirmationHandler,
|
|
122
|
+
* emailVerificationHandler,
|
|
123
|
+
* passwordResetHandler,
|
|
124
|
+
* emailAddressChangeHandler,
|
|
125
|
+
* } from '\@vendure/email-plugin';
|
|
126
|
+
* import { CustomerService } from '\@vendure/core';
|
|
127
|
+
*
|
|
128
|
+
* // This allows you to then customize each handler to your needs.
|
|
129
|
+
* // For example, let's set a new subject line to the order confirmation:
|
|
130
|
+
* orderConfirmationHandler
|
|
131
|
+
* .setSubject(`We received your order!`);
|
|
132
|
+
*
|
|
133
|
+
* // Another example: loading additional data and setting new
|
|
134
|
+
* // template variables.
|
|
135
|
+
* passwordResetHandler
|
|
136
|
+
* .loadData(async ({ event, injector }) => {
|
|
137
|
+
* const customerService = injector.get(CustomerService);
|
|
138
|
+
* const customer = await customerService.findOneByUserId(event.ctx, event.user.id);
|
|
139
|
+
* return { customer };
|
|
140
|
+
* })
|
|
141
|
+
* .setTemplateVars(event => ({
|
|
142
|
+
* passwordResetToken: event.user.getNativeAuthenticationMethod().passwordResetToken,
|
|
143
|
+
* customer: event.data.customer,
|
|
144
|
+
* }));
|
|
145
|
+
*
|
|
146
|
+
* // Then you pass the handlers to the EmailPlugin init method
|
|
147
|
+
* // individually
|
|
148
|
+
* EmailPlugin.init({
|
|
149
|
+
* handlers: [
|
|
150
|
+
* orderConfirmationHandler,
|
|
151
|
+
* emailVerificationHandler,
|
|
152
|
+
* passwordResetHandler,
|
|
153
|
+
* emailAddressChangeHandler,
|
|
154
|
+
* ],
|
|
155
|
+
* // ...
|
|
156
|
+
* }),
|
|
157
|
+
* ```
|
|
158
|
+
*
|
|
159
|
+
* For all available methods of extending a handler, see the {@link EmailEventHandler} documentation.
|
|
160
|
+
*
|
|
161
|
+
* ## Dynamic SMTP settings
|
|
162
|
+
*
|
|
163
|
+
* Instead of defining static transport settings, you can also provide a function that dynamically resolves
|
|
164
|
+
* channel aware transport settings.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* import { defaultEmailHandlers, EmailPlugin } from '\@vendure/email-plugin';
|
|
169
|
+
* import { MyTransportService } from './transport.services.ts';
|
|
170
|
+
* const config: VendureConfig = {
|
|
171
|
+
* plugins: [
|
|
172
|
+
* EmailPlugin.init({
|
|
173
|
+
* handlers: defaultEmailHandlers,
|
|
174
|
+
* templatePath: path.join(__dirname, 'static/email/templates'),
|
|
175
|
+
* transport: (injector, ctx) => {
|
|
176
|
+
* if (ctx) {
|
|
177
|
+
* return injector.get(MyTransportService).getSettings(ctx);
|
|
178
|
+
* } else {
|
|
179
|
+
* return {
|
|
180
|
+
type: 'smtp',
|
|
181
|
+
host: 'smtp.example.com',
|
|
182
|
+
// ... etc.
|
|
183
|
+
}
|
|
184
|
+
* }
|
|
185
|
+
* }
|
|
186
|
+
* }),
|
|
187
|
+
* ],
|
|
188
|
+
* };
|
|
189
|
+
* ```
|
|
103
190
|
*
|
|
104
191
|
* ## Dev mode
|
|
105
192
|
*
|
|
@@ -107,7 +194,7 @@ import { EmailPluginDevModeOptions, EmailPluginOptions } from './types';
|
|
|
107
194
|
* file transport (See {@link FileTransportOptions}) and outputs emails as rendered HTML files in the directory specified by the
|
|
108
195
|
* `outputPath` property.
|
|
109
196
|
*
|
|
110
|
-
* ```
|
|
197
|
+
* ```TypeScript
|
|
111
198
|
* EmailPlugin.init({
|
|
112
199
|
* devMode: true,
|
|
113
200
|
* route: 'mailbox',
|
|
@@ -151,27 +238,31 @@ import { EmailPluginDevModeOptions, EmailPluginOptions } from './types';
|
|
|
151
238
|
* };
|
|
152
239
|
* ```
|
|
153
240
|
*
|
|
154
|
-
* @docsCategory EmailPlugin
|
|
241
|
+
* @docsCategory core plugins/EmailPlugin
|
|
155
242
|
*/
|
|
156
|
-
export declare class EmailPlugin implements OnApplicationBootstrap, NestModule {
|
|
243
|
+
export declare class EmailPlugin implements OnApplicationBootstrap, OnApplicationShutdown, NestModule {
|
|
157
244
|
private eventBus;
|
|
158
245
|
private moduleRef;
|
|
159
246
|
private emailProcessor;
|
|
160
247
|
private jobQueueService;
|
|
161
248
|
private processContext;
|
|
249
|
+
private options;
|
|
162
250
|
private static options;
|
|
163
251
|
private devMailbox;
|
|
164
252
|
private jobQueue;
|
|
165
253
|
private testingProcessor;
|
|
166
254
|
/** @internal */
|
|
167
|
-
constructor(eventBus: EventBus, moduleRef: ModuleRef, emailProcessor: EmailProcessor, jobQueueService: JobQueueService, processContext: ProcessContext);
|
|
255
|
+
constructor(eventBus: EventBus, moduleRef: ModuleRef, emailProcessor: EmailProcessor, jobQueueService: JobQueueService, processContext: ProcessContext, options: InitializedEmailPluginOptions);
|
|
168
256
|
/**
|
|
169
257
|
* Set the plugin options.
|
|
170
258
|
*/
|
|
171
259
|
static init(options: EmailPluginOptions | EmailPluginDevModeOptions): Type<EmailPlugin>;
|
|
172
260
|
/** @internal */
|
|
173
261
|
onApplicationBootstrap(): Promise<void>;
|
|
262
|
+
onApplicationShutdown(): Promise<void>;
|
|
174
263
|
configure(consumer: MiddlewareConsumer): void;
|
|
264
|
+
private initInjectableStrategies;
|
|
265
|
+
private destroyInjectableStrategies;
|
|
175
266
|
private setupEventSubscribers;
|
|
176
267
|
private handleEvent;
|
|
177
268
|
}
|