@codee-sh/medusa-plugin-notification-emails 0.1.0 → 0.1.1
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/.medusa/server/src/admin/index.js +445 -4410
- package/.medusa/server/src/admin/index.mjs +445 -4410
- package/.medusa/server/src/api/admin/notification-plugin/render-template/route.js +8 -5
- package/.medusa/server/src/hooks/api/preview.js +5 -4
- package/.medusa/server/src/subscribers/order-completed.js +14 -62
- package/.medusa/server/src/subscribers/order-placed.js +12 -58
- package/.medusa/server/src/templates/emails/blocks/components/repeater.js +1 -1
- package/.medusa/server/src/templates/emails/contact-form/config.js +5 -21
- package/.medusa/server/src/templates/emails/index.js +18 -8
- package/.medusa/server/src/templates/emails/order/completed/config.js +221 -0
- package/.medusa/server/src/templates/emails/{order-placed → order/completed}/index.js +1 -1
- package/.medusa/server/src/templates/emails/{order-completed → order/completed}/translations/en.json +1 -1
- package/.medusa/server/src/templates/emails/{order-placed → order/completed}/translations/index.js +1 -1
- package/.medusa/server/src/templates/emails/{order-completed → order/completed}/translations/pl.json +1 -1
- package/.medusa/server/src/templates/emails/{order-completed → order/placed}/config.js +24 -36
- package/.medusa/server/src/templates/emails/{order-completed → order/placed}/index.js +1 -1
- package/.medusa/server/src/templates/emails/{order-completed → order/placed}/translations/index.js +1 -1
- package/.medusa/server/src/templates/emails/{order-placed → order/placed}/translations/pl.json +1 -1
- package/.medusa/server/src/templates/emails/{order-placed → order/updated}/config.js +12 -12
- package/.medusa/server/src/templates/emails/order/updated/index.js +7 -0
- package/.medusa/server/src/templates/emails/order/updated/translations/en.json +24 -0
- package/.medusa/server/src/templates/emails/order/updated/translations/index.js +15 -0
- package/.medusa/server/src/templates/emails/order/updated/translations/pl.json +24 -0
- package/.medusa/server/src/templates/emails/types.js +2 -1
- package/.medusa/server/src/utils/attribute-helpers.js +17 -0
- package/.medusa/server/src/utils/data/modules/index.js +15 -0
- package/.medusa/server/src/utils/data/modules/inventory/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/inventory/inventory.js +108 -0
- package/.medusa/server/src/utils/data/modules/order/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/order/order.js +415 -0
- package/.medusa/server/src/utils/data/modules/product/helpers.js +9 -0
- package/.medusa/server/src/utils/data/modules/product/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/product/product.js +276 -0
- package/.medusa/server/src/utils/data/modules/product-category/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/product-category/product-category.js +75 -0
- package/.medusa/server/src/utils/data/modules/product-tag/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/product-tag/product-tag.js +39 -0
- package/.medusa/server/src/utils/data/modules/product-type/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/product-type/product-type.js +39 -0
- package/.medusa/server/src/utils/data/modules/product-variant/index.js +18 -0
- package/.medusa/server/src/utils/data/modules/product-variant/product-variant.js +139 -0
- package/.medusa/server/src/utils/i18n/i18n.js +2 -20
- package/.medusa/server/src/utils/index.js +7 -1
- package/.medusa/server/src/utils/transforms/index.js +42 -0
- package/.medusa/server/src/utils/transforms/order-transformer.js +42 -0
- package/.medusa/server/src/workflows/order/get-order-by-id.js +23 -0
- package/.medusa/server/src/workflows/order/index.js +18 -0
- package/.medusa/server/src/workflows/order/steps/get-order-by-id.js +40 -0
- package/.medusa/server/src/workflows/order/steps/index.js +18 -0
- package/package.json +1 -1
- /package/.medusa/server/src/templates/emails/{order-placed → order/placed}/translations/en.json +0 -0
|
@@ -2,18 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const plugins_1 = require("../../../../utils/plugins");
|
|
6
5
|
const theme_1 = require("../../../../templates/shared/theme");
|
|
7
6
|
const emails_1 = require("../../../../templates/emails");
|
|
7
|
+
const transforms_1 = require("../../../../utils/transforms");
|
|
8
|
+
const plugins_1 = require("../../../../utils/plugins");
|
|
8
9
|
async function POST(req, res) {
|
|
9
10
|
const pluginOptions = (0, plugins_1.getPluginOptions)(req.scope, "@codee-sh/medusa-plugin-notification");
|
|
10
11
|
const templateName = req.body?.templateName;
|
|
11
|
-
const
|
|
12
|
+
const context = req.body?.context;
|
|
13
|
+
const contextType = req.body?.contextType;
|
|
12
14
|
const locale = req.body?.locale || "pl";
|
|
13
|
-
if (!templateName || !
|
|
15
|
+
if (!templateName || !context || !locale) {
|
|
14
16
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Template name, template data and locale are required");
|
|
15
17
|
}
|
|
16
|
-
const
|
|
18
|
+
const transformedTemplateData = (0, transforms_1.transformContext)(contextType, context, locale);
|
|
19
|
+
const { html, text } = await (0, emails_1.renderTemplate)(templateName, transformedTemplateData, {
|
|
17
20
|
locale: locale,
|
|
18
21
|
theme: pluginOptions?.theme || theme_1.defaultTheme,
|
|
19
22
|
customTranslations: pluginOptions?.customTranslations?.[templateName]
|
|
@@ -23,4 +26,4 @@ async function POST(req, res) {
|
|
|
23
26
|
text,
|
|
24
27
|
});
|
|
25
28
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25vdGlmaWNhdGlvbi1wbHVnaW4vcmVuZGVyLXRlbXBsYXRlL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBT0Esb0JBZ0NDO0FBdENELHFEQUF1RDtBQUN2RCw4REFBaUU7QUFDakUseURBQXlGO0FBQ3pGLDZEQUErRDtBQUMvRCx1REFBNEQ7QUFFckQsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBNEYsRUFDNUYsR0FBbUI7SUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBQSwwQkFBZ0IsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLENBQUE7SUFFekYsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxZQUE0QixDQUFBO0lBQzNELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBdUIsQ0FBQTtJQUNqRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQTtJQUV6QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUE7SUFFdkMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLHNEQUFzRCxDQUFDLENBQUE7SUFDbkgsQ0FBQztJQUVELE1BQU0sdUJBQXVCLEdBQUcsSUFBQSw2QkFBZ0IsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFBLHVCQUFjLEVBQ3pDLFlBQVksRUFDWix1QkFBdUIsRUFDdkI7UUFDRSxNQUFNLEVBQUUsTUFBTTtRQUNkLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxJQUFJLG9CQUFZO1FBQzNDLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFlBQVksQ0FBQztLQUN0RSxDQUNGLENBQUE7SUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJO1FBQ0osSUFBSTtLQUNMLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
|
|
@@ -4,7 +4,7 @@ exports.usePreview = void 0;
|
|
|
4
4
|
const react_query_1 = require("@tanstack/react-query");
|
|
5
5
|
const sdk_1 = require("../../admin/lib/sdk");
|
|
6
6
|
const usePreview = (params, options) => {
|
|
7
|
-
const { templateName,
|
|
7
|
+
const { templateName, context, contextType, locale, extraKey = [], enabled = false, } = params;
|
|
8
8
|
const queryKey = [
|
|
9
9
|
"preview",
|
|
10
10
|
templateName,
|
|
@@ -18,16 +18,17 @@ const usePreview = (params, options) => {
|
|
|
18
18
|
method: "POST",
|
|
19
19
|
body: {
|
|
20
20
|
templateName: templateName,
|
|
21
|
-
|
|
21
|
+
context: context,
|
|
22
|
+
contextType: contextType,
|
|
22
23
|
locale: locale,
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
26
|
},
|
|
26
27
|
staleTime: 0,
|
|
27
|
-
enabled: enabled && !!templateName && !!
|
|
28
|
+
enabled: enabled && !!templateName && !!context && !!locale,
|
|
28
29
|
...options,
|
|
29
30
|
});
|
|
30
31
|
return { data, ...rest };
|
|
31
32
|
};
|
|
32
33
|
exports.usePreview = usePreview;
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ob29rcy9hcGkvcHJldmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx1REFNOEI7QUFDOUIsNkNBQXlDO0FBZ0JsQyxNQUFNLFVBQVUsR0FBRyxDQUN4QixNQUF3QixFQUN4QixPQVFDLEVBQ0QsRUFBRTtJQUNGLE1BQU0sRUFDSixZQUFZLEVBQ1osT0FBTyxFQUNQLFdBQVcsRUFDWCxNQUFNLEVBQ04sUUFBUSxHQUFHLEVBQUUsRUFDYixPQUFPLEdBQUcsS0FBSyxHQUNoQixHQUFHLE1BQU0sQ0FBQTtJQUVWLE1BQU0sUUFBUSxHQUFhO1FBQ3pCLFNBQVM7UUFDVCxZQUFZO1FBQ1osTUFBTTtRQUNOLEdBQUcsUUFBUTtLQUNaLENBQUE7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBQSxzQkFBUSxFQUtoQztRQUNBLFFBQVE7UUFDUixPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUM5QixPQUFPLE1BQU0sU0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLEVBQUU7Z0JBQzFFLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRTtvQkFDSixZQUFZLEVBQUUsWUFBWTtvQkFDMUIsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixNQUFNLEVBQUUsTUFBTTtpQkFDZjthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNO1FBQzNELEdBQUksT0FBZTtLQUNwQixDQUFDLENBQUE7SUFFRixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUE7QUFDMUIsQ0FBQyxDQUFBO0FBcERZLFFBQUEsVUFBVSxjQW9EdEIifQ==
|
|
@@ -1,85 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.config = void 0;
|
|
4
|
-
exports.default =
|
|
4
|
+
exports.default = orderPlacedEmailsHandler;
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
-
const emails_1 = require("
|
|
7
|
-
const types_1 = require("
|
|
8
|
-
const
|
|
9
|
-
const plugins_1 = require("
|
|
10
|
-
|
|
6
|
+
const emails_1 = require("../templates/emails");
|
|
7
|
+
const types_1 = require("../templates/emails/types");
|
|
8
|
+
const transforms_1 = require("../utils/transforms");
|
|
9
|
+
const plugins_1 = require("../utils/plugins");
|
|
10
|
+
const get_order_by_id_1 = require("../workflows/order/get-order-by-id");
|
|
11
|
+
async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } }, container, }) {
|
|
11
12
|
const pluginOptions = (0, plugins_1.getPluginOptions)(container, "@codee-sh/medusa-plugin-notification-emails");
|
|
12
13
|
const notificationModuleService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
13
|
-
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
14
14
|
const triggerType = trigger_type || 'system';
|
|
15
15
|
if (!id) {
|
|
16
16
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Order ID is required");
|
|
17
17
|
}
|
|
18
|
-
const {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"id",
|
|
22
|
-
"email",
|
|
23
|
-
"created_at",
|
|
24
|
-
"updated_at",
|
|
25
|
-
"payment_collections.*",
|
|
26
|
-
"items.*",
|
|
27
|
-
"items.variant.*",
|
|
28
|
-
"items.variant.product.*",
|
|
29
|
-
"currency_code",
|
|
30
|
-
"display_id",
|
|
31
|
-
"sales_channel.name",
|
|
32
|
-
"sales_channel.description",
|
|
33
|
-
"shipping_address.*",
|
|
34
|
-
"billing_address.*",
|
|
35
|
-
"summary.*",
|
|
36
|
-
"tax_total",
|
|
37
|
-
"discount_total",
|
|
38
|
-
],
|
|
39
|
-
filters: {
|
|
40
|
-
id: id,
|
|
18
|
+
const { result: order } = await (0, get_order_by_id_1.getOrderByIdWorkflow)(container).run({
|
|
19
|
+
input: {
|
|
20
|
+
order_id: id,
|
|
41
21
|
},
|
|
42
22
|
});
|
|
43
23
|
if (!order) {
|
|
44
24
|
return;
|
|
45
25
|
}
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
const templateData = {
|
|
49
|
-
sales_channel: {
|
|
50
|
-
name: order?.sales_channel?.name,
|
|
51
|
-
description: order?.sales_channel?.description,
|
|
52
|
-
},
|
|
53
|
-
orderNumber: `#${order.display_id}`,
|
|
54
|
-
customerName: order.email,
|
|
55
|
-
customerEmail: order.email,
|
|
56
|
-
orderDate: (0, utils_2.formatDate)({ date: order.created_at, includeTime: true, localeCode: "pl" }),
|
|
57
|
-
completedDate: (0, utils_2.formatDate)({ date: order.updated_at || order.created_at, includeTime: true, localeCode: "pl" }),
|
|
58
|
-
totalAmount: order.items.reduce((acc, item) => acc + (item.variant?.prices?.[0]?.amount || 0) * item.quantity, 0),
|
|
59
|
-
currency: order.currency_code,
|
|
60
|
-
items: order.items.map((item) => ({
|
|
61
|
-
thumbnail: item.thumbnail,
|
|
62
|
-
title: item.title,
|
|
63
|
-
quantity: item.quantity,
|
|
64
|
-
price: (0, utils_2.getLocaleAmount)(item.unit_price, order.currency_code),
|
|
65
|
-
})),
|
|
66
|
-
shippingAddress: shippingAddressText,
|
|
67
|
-
billingAddress: billingAddressText,
|
|
68
|
-
summary: {
|
|
69
|
-
total: (0, utils_2.getLocaleAmount)(order.summary.original_order_total, order.currency_code),
|
|
70
|
-
paid_total: (0, utils_2.getLocaleAmount)((0, utils_2.getTotalCaptured)(order.payment_collections || []), order.currency_code),
|
|
71
|
-
tax_total: (0, utils_2.getLocaleAmount)(order.tax_total, order.currency_code),
|
|
72
|
-
discount_total: (0, utils_2.getLocaleAmount)(order.discount_total, order.currency_code),
|
|
73
|
-
currency_code: order.currency_code,
|
|
74
|
-
}
|
|
75
|
-
};
|
|
26
|
+
// Transform raw order data to email template format
|
|
27
|
+
const templateData = (0, transforms_1.transformContext)("order", order, "pl");
|
|
76
28
|
const templateName = types_1.TEMPLATES_NAMES.ORDER_COMPLETED;
|
|
77
29
|
const { html, text, subject } = await (0, emails_1.renderTemplate)(templateName, templateData, {
|
|
78
30
|
locale: "pl",
|
|
79
31
|
customTranslations: pluginOptions?.customTranslations?.[templateName]
|
|
80
32
|
});
|
|
81
33
|
const result = await notificationModuleService.createNotifications({
|
|
82
|
-
to: order.email,
|
|
34
|
+
to: order.order.customer.email,
|
|
83
35
|
channel: "email",
|
|
84
36
|
template: templateName,
|
|
85
37
|
trigger_type: triggerType,
|
|
@@ -96,4 +48,4 @@ async function orderCompletedEmailsHandler({ event: { data: { id, trigger_type }
|
|
|
96
48
|
exports.config = {
|
|
97
49
|
event: "order.completed",
|
|
98
50
|
};
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFvRDtBQUNwRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLGVBQWUsQ0FBQTtJQUVwRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFDbEQsWUFBWSxFQUNaLFlBQVksRUFDWjtRQUNFLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ3RFLENBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUEifQ==
|
|
@@ -3,81 +3,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.config = void 0;
|
|
4
4
|
exports.default = orderPlacedEmailsHandler;
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
-
const emails_1 = require("
|
|
7
|
-
const types_1 = require("
|
|
8
|
-
const
|
|
9
|
-
const plugins_1 = require("
|
|
6
|
+
const emails_1 = require("../templates/emails");
|
|
7
|
+
const types_1 = require("../templates/emails/types");
|
|
8
|
+
const transforms_1 = require("../utils/transforms");
|
|
9
|
+
const plugins_1 = require("../utils/plugins");
|
|
10
|
+
const get_order_by_id_1 = require("../workflows/order/get-order-by-id");
|
|
10
11
|
async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } }, container, }) {
|
|
11
12
|
const pluginOptions = (0, plugins_1.getPluginOptions)(container, "@codee-sh/medusa-plugin-notification-emails");
|
|
12
13
|
const notificationModuleService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
13
|
-
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
14
14
|
const triggerType = trigger_type || 'system';
|
|
15
15
|
if (!id) {
|
|
16
16
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_ARGUMENT, "Order ID is required");
|
|
17
17
|
}
|
|
18
|
-
const {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
"id",
|
|
22
|
-
"email",
|
|
23
|
-
"created_at",
|
|
24
|
-
"payment_collections.*",
|
|
25
|
-
"items.*",
|
|
26
|
-
"items.variant.*",
|
|
27
|
-
"items.variant.product.*",
|
|
28
|
-
"currency_code",
|
|
29
|
-
"display_id",
|
|
30
|
-
"sales_channel.name",
|
|
31
|
-
"sales_channel.description",
|
|
32
|
-
"shipping_address.*",
|
|
33
|
-
"billing_address.*",
|
|
34
|
-
"summary.*",
|
|
35
|
-
"tax_total",
|
|
36
|
-
"discount_total",
|
|
37
|
-
],
|
|
38
|
-
filters: {
|
|
39
|
-
id: id,
|
|
18
|
+
const { result: order } = await (0, get_order_by_id_1.getOrderByIdWorkflow)(container).run({
|
|
19
|
+
input: {
|
|
20
|
+
order_id: id,
|
|
40
21
|
},
|
|
41
22
|
});
|
|
42
23
|
if (!order) {
|
|
43
24
|
return;
|
|
44
25
|
}
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
const templateData = {
|
|
48
|
-
sales_channel: {
|
|
49
|
-
name: order?.sales_channel?.name,
|
|
50
|
-
description: order?.sales_channel?.description,
|
|
51
|
-
},
|
|
52
|
-
orderNumber: `#${order.display_id}`,
|
|
53
|
-
customerName: order.email,
|
|
54
|
-
customerEmail: order.email,
|
|
55
|
-
orderDate: (0, utils_2.formatDate)({ date: order.created_at, includeTime: true, localeCode: "pl" }),
|
|
56
|
-
totalAmount: order.items.reduce((acc, item) => acc + (item.variant?.prices?.[0]?.amount || 0) * item.quantity, 0),
|
|
57
|
-
currency: order.currency_code,
|
|
58
|
-
items: order.items.map((item) => ({
|
|
59
|
-
thumbnail: item.thumbnail,
|
|
60
|
-
title: item.title,
|
|
61
|
-
quantity: item.quantity,
|
|
62
|
-
price: (0, utils_2.getLocaleAmount)(item.unit_price, order.currency_code),
|
|
63
|
-
})),
|
|
64
|
-
shippingAddress: shippingAddressText,
|
|
65
|
-
billingAddress: billingAddressText,
|
|
66
|
-
summary: {
|
|
67
|
-
total: (0, utils_2.getLocaleAmount)(order.summary.original_order_total, order.currency_code),
|
|
68
|
-
paid_total: (0, utils_2.getLocaleAmount)((0, utils_2.getTotalCaptured)(order.payment_collections || []), order.currency_code),
|
|
69
|
-
tax_total: (0, utils_2.getLocaleAmount)(order.tax_total, order.currency_code),
|
|
70
|
-
discount_total: (0, utils_2.getLocaleAmount)(order.discount_total, order.currency_code),
|
|
71
|
-
currency_code: order.currency_code,
|
|
72
|
-
}
|
|
73
|
-
};
|
|
26
|
+
// Transform raw order data to email template format
|
|
27
|
+
const templateData = (0, transforms_1.transformContext)("order", order, "pl");
|
|
74
28
|
const templateName = types_1.TEMPLATES_NAMES.ORDER_PLACED;
|
|
75
29
|
const { html, text, subject } = await (0, emails_1.renderTemplate)(templateName, templateData, {
|
|
76
30
|
locale: "pl",
|
|
77
31
|
customTranslations: pluginOptions?.customTranslations?.[templateName]
|
|
78
32
|
});
|
|
79
33
|
const result = await notificationModuleService.createNotifications({
|
|
80
|
-
to: order.email,
|
|
34
|
+
to: order.order.customer.email,
|
|
81
35
|
channel: "email",
|
|
82
36
|
template: templateName,
|
|
83
37
|
trigger_type: triggerType,
|
|
@@ -94,4 +48,4 @@ async function orderPlacedEmailsHandler({ event: { data: { id, trigger_type } },
|
|
|
94
48
|
exports.config = {
|
|
95
49
|
event: "order.placed",
|
|
96
50
|
};
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSwyQ0FxREM7QUE1REQscURBQWdFO0FBQ2hFLGdEQUFvRDtBQUNwRCxxREFBMkQ7QUFDM0Qsb0RBQXNEO0FBQ3RELDhDQUFtRDtBQUNuRCx3RUFBeUU7QUFFMUQsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUNyQyxTQUFTLEdBQzRDO0lBQ3JELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWdCLEVBQUMsU0FBUyxFQUFFLDZDQUE2QyxDQUFDLENBQUE7SUFFaEcsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNqRCxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQTtJQUU1QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBb0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDbEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7U0FDYjtLQUNGLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU07SUFDUixDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELE1BQU0sWUFBWSxHQUFHLElBQUEsNkJBQWdCLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUUzRCxNQUFNLFlBQVksR0FBRyx1QkFBZSxDQUFDLFlBQVksQ0FBQTtJQUVqRCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFDbEQsWUFBWSxFQUNaLFlBQVksRUFDWjtRQUNFLE1BQU0sRUFBRSxJQUFJO1FBQ1osa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLENBQUMsWUFBWSxDQUFDO0tBQ3RFLENBQ0YsQ0FBQTtJQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQXlCLENBQUMsbUJBQW1CLENBQUM7UUFDakUsRUFBRSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUIsT0FBTyxFQUFFLE9BQU87UUFDaEIsUUFBUSxFQUFFLFlBQVk7UUFDdEIsWUFBWSxFQUFFLFdBQVc7UUFDekIsV0FBVyxFQUFFLEVBQUU7UUFDZixhQUFhLEVBQUUsT0FBTztRQUN0QixJQUFJLEVBQUUsWUFBWTtRQUNsQixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsT0FBTztZQUNoQixJQUFJO1lBQ0osSUFBSTtTQUNMO0tBQ0YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsY0FBYztDQUN0QixDQUFBIn0=
|
|
@@ -23,4 +23,4 @@ function RepeaterBlock({ id, props, data, }) {
|
|
|
23
23
|
const array = props.itemBlocks;
|
|
24
24
|
return (0, jsx_runtime_1.jsx)(index_1.BlockRenderer, { blocks: array, data: data });
|
|
25
25
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwZWF0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9ibG9ja3MvY29tcG9uZW50cy9yZXBlYXRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsc0NBaUJDOztBQWxDRCxvQ0FBeUM7QUFFekM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFnQixhQUFhLENBQUMsRUFDNUIsRUFBRSxFQUNGLEtBQUssRUFDTCxJQUFJLEdBU0w7SUFDQywyQkFBMkI7SUFDM0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztJQUUvQixPQUFPLHVCQUFDLHFCQUFhLElBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFJLENBQUE7QUFDckQsQ0FBQyJ9
|
|
@@ -45,7 +45,7 @@ exports.templateBlocks = [
|
|
|
45
45
|
type: "row",
|
|
46
46
|
props: {
|
|
47
47
|
label: "{{translations.labels.email}}",
|
|
48
|
-
value: "{{data.email}}",
|
|
48
|
+
value: "{{data.contact_form.email}}",
|
|
49
49
|
},
|
|
50
50
|
},
|
|
51
51
|
{
|
|
@@ -57,7 +57,7 @@ exports.templateBlocks = [
|
|
|
57
57
|
type: "row",
|
|
58
58
|
props: {
|
|
59
59
|
label: "{{translations.labels.phone}}",
|
|
60
|
-
value: "{{data.phone}}",
|
|
60
|
+
value: "{{data.contact_form.phone}}",
|
|
61
61
|
},
|
|
62
62
|
},
|
|
63
63
|
{
|
|
@@ -69,27 +69,11 @@ exports.templateBlocks = [
|
|
|
69
69
|
type: "row",
|
|
70
70
|
props: {
|
|
71
71
|
label: "{{translations.labels.message}}",
|
|
72
|
-
value: "{{data.message}}",
|
|
72
|
+
value: "{{data.contact_form.message}}",
|
|
73
73
|
},
|
|
74
|
-
}
|
|
75
|
-
// {
|
|
76
|
-
// id: "repeater-1",
|
|
77
|
-
// type: "repeater",
|
|
78
|
-
// props: {
|
|
79
|
-
// arrayPath: "items",
|
|
80
|
-
// itemBlocks: [
|
|
81
|
-
// {
|
|
82
|
-
// id: "text-3",
|
|
83
|
-
// type: "text",
|
|
84
|
-
// props: {
|
|
85
|
-
// value: "{{data.items.label}} - {{data.items.value}} {{translations.email}}",
|
|
86
|
-
// },
|
|
87
|
-
// },
|
|
88
|
-
// ]
|
|
89
|
-
// },
|
|
90
|
-
// },
|
|
74
|
+
}
|
|
91
75
|
],
|
|
92
76
|
},
|
|
93
77
|
},
|
|
94
78
|
];
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3RlbXBsYXRlcy9lbWFpbHMvY29udGFjdC1mb3JtL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxRUFBd0M7QUFJL0IsYUFKRixpQkFBRSxDQUlFO0FBSFgscUVBQXdDO0FBRzNCLGFBSE4saUJBQUUsQ0FHTTtBQUZmLHFFQUF3QztBQUV2QixhQUZWLGlCQUFFLENBRVU7QUFFTixRQUFBLFlBQVksR0FBcUI7SUFDNUMsRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0lBQ04sRUFBRSxFQUFFLGlCQUFFO0NBQ1AsQ0FBQztBQUVXLFFBQUEsY0FBYyxHQUFHO0lBQzVCO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixFQUFFLEVBQUUsV0FBVztRQUNmLEtBQUssRUFBRTtZQUNMLE1BQU0sRUFBRTtnQkFDTjtvQkFDRSxFQUFFLEVBQUUsV0FBVztvQkFDZixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUU7d0JBQ0wsS0FBSyxFQUFFLDhCQUE4QjtxQkFDdEM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0Y7SUFDRDtRQUNFLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxXQUFXO0tBQ2xCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEVBQUUsRUFBRSxXQUFXO1FBQ2YsS0FBSyxFQUFFO1lBQ0wsTUFBTSxFQUFFO2dCQUNOO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsK0JBQStCO3dCQUN0QyxLQUFLLEVBQUUsNkJBQTZCO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxFQUFFLEVBQUUsYUFBYTtvQkFDakIsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO2dCQUNEO29CQUNFLEVBQUUsRUFBRSxPQUFPO29CQUNYLElBQUksRUFBRSxLQUFLO29CQUNYLEtBQUssRUFBRTt3QkFDTCxLQUFLLEVBQUUsaUNBQWlDO3dCQUN4QyxLQUFLLEVBQUUsK0JBQStCO3FCQUN2QztpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMifQ==
|
|
@@ -10,8 +10,9 @@ const types_1 = require("./types");
|
|
|
10
10
|
Object.defineProperty(exports, "TEMPLATES_NAMES", { enumerable: true, get: function () { return types_1.TEMPLATES_NAMES; } });
|
|
11
11
|
const contact_form_1 = require("./contact-form");
|
|
12
12
|
const inventory_level_1 = require("./inventory-level");
|
|
13
|
-
const
|
|
14
|
-
const
|
|
13
|
+
const placed_1 = require("./order/placed");
|
|
14
|
+
const completed_1 = require("./order/completed");
|
|
15
|
+
const updated_1 = require("./order/updated");
|
|
15
16
|
const utils_1 = require("../../utils");
|
|
16
17
|
/**
|
|
17
18
|
* Template translations registry mapping template names to their translations
|
|
@@ -50,8 +51,8 @@ const templateRegistry = {
|
|
|
50
51
|
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
51
52
|
getConfig: () => {
|
|
52
53
|
return {
|
|
53
|
-
blocks:
|
|
54
|
-
translations:
|
|
54
|
+
blocks: placed_1.templateBlocks,
|
|
55
|
+
translations: placed_1.translations,
|
|
55
56
|
};
|
|
56
57
|
},
|
|
57
58
|
},
|
|
@@ -59,8 +60,17 @@ const templateRegistry = {
|
|
|
59
60
|
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
60
61
|
getConfig: () => {
|
|
61
62
|
return {
|
|
62
|
-
blocks:
|
|
63
|
-
translations:
|
|
63
|
+
blocks: completed_1.templateBlocks,
|
|
64
|
+
translations: completed_1.translations,
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
[types_1.TEMPLATES_NAMES.ORDER_UPDATED]: {
|
|
69
|
+
...baseTemplateConfig[types_1.TEMPLATES_NAMES.BASE_TEMPLATE],
|
|
70
|
+
getConfig: () => {
|
|
71
|
+
return {
|
|
72
|
+
blocks: updated_1.templateBlocks,
|
|
73
|
+
translations: updated_1.translations,
|
|
64
74
|
};
|
|
65
75
|
},
|
|
66
76
|
},
|
|
@@ -76,7 +86,7 @@ const templateRegistry = {
|
|
|
76
86
|
};
|
|
77
87
|
/**
|
|
78
88
|
* Recursively interpolate text in blocks
|
|
79
|
-
* Processes props.
|
|
89
|
+
* Processes props.[property] in each block and nested blocks
|
|
80
90
|
*/
|
|
81
91
|
function interpolateBlocks(blocks, data, translator, config) {
|
|
82
92
|
return blocks.map((block) => {
|
|
@@ -241,4 +251,4 @@ function renderTemplateSync(templateName, data, options) {
|
|
|
241
251
|
: undefined,
|
|
242
252
|
};
|
|
243
253
|
}
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGVtcGxhdGVzL2VtYWlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUErSkEsOENBd0VDO0FBU0Qsa0NBVUM7QUFrRUQsd0NBdUVDO0FBRUQsZ0RBZ0JDO0FBblpELGlEQUkrQjtBQUUvQixtQ0FBMEM7QUFpQ2pDLGdHQWpDQSx1QkFBZSxPQWlDQTtBQS9CeEIsaURBR3dCO0FBQ3hCLHVEQUcyQjtBQUMzQiwyQ0FHd0I7QUFDeEIsaURBRzJCO0FBQzNCLDZDQUd5QjtBQUV6Qix1Q0FLcUI7QUFpQnJCOztHQUVHO0FBQ0gsTUFBTSw0QkFBNEIsR0FFOUI7SUFDRixDQUFDLHVCQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsOEJBQTBCO0NBQzlELENBQUM7QUFFRixNQUFNLGtCQUFrQixHQUEyQztJQUNqRSxDQUFDLHVCQUFlLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDL0IsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFDWixJQUFTLEVBQ1QsT0FBNkIsRUFDWixFQUFFO1lBQ25CLE9BQU8sTUFBTSxJQUFBLDJCQUFtQixFQUFDLElBQUksRUFBRSxPQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsWUFBWSxFQUFFLENBQ1osSUFBUyxFQUNULE9BQTZCLEVBQ1osRUFBRTtZQUNuQixPQUFPLElBQUEsZ0NBQXdCLEVBQUMsSUFBSSxFQUFFLE9BQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7S0FDRjtDQUNGLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBUWxCO0lBQ0YsR0FBRyxrQkFBa0I7SUFDckIsQ0FBQyx1QkFBZSxDQUFD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
|