@hartl-services/medusa-base 2.2.0 → 2.3.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/.medusa/server/src/admin/index.js +29 -4
- package/.medusa/server/src/admin/index.mjs +29 -4
- package/.medusa/server/src/email/config/index.js +7 -4
- package/.medusa/server/src/email/domain/business-keys.js +4 -2
- package/.medusa/server/src/email/domain/sender.js +28 -0
- package/.medusa/server/src/email/plugin-features.js +3 -3
- package/.medusa/server/src/email/rendering/default-templates.js +37 -2
- package/.medusa/server/src/email/rendering/render-email.js +2 -1
- package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +5 -1
- package/.medusa/server/src/email/types/email-kinds.js +2 -1
- package/.medusa/server/src/email/types/template-data.js +12 -1
- package/.medusa/server/src/modules/email/migrations/Migration20261001120000.js +16 -0
- package/.medusa/server/src/providers/smtp/service.js +4 -4
- package/.medusa/server/src/shop-config/build-food-shop-config.js +3 -1
- package/.medusa/server/src/subscribers/affiliate-application-submitted.js +26 -0
- package/.medusa/server/src/workflows/email/prepare-affiliate-application-email.js +46 -0
- package/README.md +51 -8
- package/dist/email/config/index.js +6 -3
- package/dist/email/domain/sender.d.ts +12 -0
- package/dist/email/domain/sender.js +27 -0
- package/dist/email/types/email-kinds.d.ts +2 -1
- package/dist/email/types/email-kinds.js +1 -0
- package/dist/email/types/shop-configuration.d.ts +8 -0
- package/dist/email/types/template-data.d.ts +18 -0
- package/dist/email/types/template-data.js +11 -0
- package/dist/shop-config/build-food-shop-config.js +2 -0
- package/package.json +2 -2
|
@@ -12,6 +12,7 @@ exports.EMAIL_KINDS = [
|
|
|
12
12
|
"order.refunded",
|
|
13
13
|
"auth.password_reset",
|
|
14
14
|
"affiliate.consignment_report_due",
|
|
15
|
+
"affiliate.application_submitted.admin",
|
|
15
16
|
"user.invite",
|
|
16
17
|
"auth.verification",
|
|
17
18
|
];
|
|
@@ -27,4 +28,4 @@ exports.EPHEMERAL_EMAIL_KINDS = [
|
|
|
27
28
|
];
|
|
28
29
|
const isEphemeralEmailKind = (kind) => exports.EPHEMERAL_EMAIL_KINDS.includes(kind);
|
|
29
30
|
exports.isEphemeralEmailKind = isEphemeralEmailKind;
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwta2luZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZW1haWwvdHlwZXMvZW1haWwta2luZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQTRDO0FBRS9CLFFBQUEsV0FBVyxHQUFHO0lBQ3pCLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQix3QkFBd0I7SUFDeEIsdUJBQXVCO0lBQ3ZCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsa0NBQWtDO0lBQ2xDLHVDQUF1QztJQUN2QyxhQUFhO0lBQ2IsbUJBQW1CO0NBQ1gsQ0FBQztBQUVFLFFBQUEsZUFBZSxHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUMsbUJBQVcsQ0FBQyxDQUFDO0FBSW5EOzs7O0dBSUc7QUFDVSxRQUFBLHFCQUFxQixHQUFHO0lBQ25DLHFCQUFxQjtJQUNyQixtQkFBbUI7Q0FDb0IsQ0FBQztBQUVuQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsSUFBZSxFQUFXLEVBQUUsQ0FDOUQsNkJBQThDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRHBELFFBQUEsb0JBQW9CLHdCQUNnQyJ9
|
|
@@ -214,6 +214,17 @@ exports.EmailPersistedDataSchemas = {
|
|
|
214
214
|
locale: NullableLocaleSchema,
|
|
215
215
|
})
|
|
216
216
|
.strict(),
|
|
217
|
+
"affiliate.application_submitted.admin": zod_1.z
|
|
218
|
+
.object({
|
|
219
|
+
application_id: NonEmptyStringSchema,
|
|
220
|
+
customer_id: NonEmptyStringSchema,
|
|
221
|
+
customer_email: NonEmptyStringSchema.nullable(),
|
|
222
|
+
customer_first_name: NonEmptyStringSchema.nullable(),
|
|
223
|
+
customer_last_name: NonEmptyStringSchema.nullable(),
|
|
224
|
+
company_name: NonEmptyStringSchema.nullable(),
|
|
225
|
+
message: NonEmptyStringSchema.nullable(),
|
|
226
|
+
})
|
|
227
|
+
.strict(),
|
|
217
228
|
"user.invite": zod_1.z.object({}).strict(),
|
|
218
229
|
"auth.verification": zod_1.z
|
|
219
230
|
.object({
|
|
@@ -237,4 +248,4 @@ exports.EmailRenderDataSchemas = {
|
|
|
237
248
|
verify_url: zod_1.z.string().url(),
|
|
238
249
|
}),
|
|
239
250
|
};
|
|
240
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbWFpbC90eXBlcy90ZW1wbGF0ZS1kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE0QztBQUM1QyxtR0FHNkU7QUFJN0UsTUFBTSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3JFLE1BQU0sOEJBQThCLEdBQUcsT0FBQztLQUNyQyxNQUFNLEVBQUU7S0FDUixLQUFLLENBQUMsZ0JBQWdCLENBQUM7S0FDdkIsUUFBUSxFQUFFLENBQUM7QUFFZCxNQUFNLFlBQVksR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDekQsTUFBTSxrQkFBa0IsR0FBRyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7QUFFakQsTUFBTSx5QkFBeUIsR0FBRyxPQUFDO0tBQ2hDLE1BQU0sQ0FBQztJQUNOLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUIsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixPQUFPLEVBQUUsa0JBQWtCO0lBQzNCLFNBQVMsRUFBRSxrQkFBa0I7SUFDN0IsU0FBUyxFQUFFLGtCQUFrQjtJQUM3QixXQUFXLEVBQUUsa0JBQWtCO0lBQy9CLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsWUFBWSxFQUFFLGtCQUFrQjtDQUNqQyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWjs7Ozs7R0FLRztBQUNVLFFBQUEsa0JBQWtCLEdBQUcsT0FBQztLQUNoQyxNQUFNLENBQUM7SUFDTixVQUFVLEVBQUUsT0FBQyxDQUFDLE1B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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261001120000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261001120000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
|
|
8
|
+
this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.received.admin', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due', 'affiliate.application_submitted.admin', 'user.invite', 'auth.verification'));`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
|
|
12
|
+
this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.received.admin', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due', 'user.invite', 'auth.verification'));`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20261001120000 = Migration20261001120000;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMDExMjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYxMDAxMTIwMDAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsOFhBQThYLENBQUMsQ0FBQztJQUM5WSxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMscVZBQXFWLENBQUMsQ0FBQztJQUNyVyxDQUFDO0NBRUY7QUFkRCwwREFjQyJ9
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.SmtpNotificationService = exports.SMTP_TIMEOUTS = void 0;
|
|
7
7
|
const utils_1 = require("@medusajs/framework/utils");
|
|
8
8
|
const nodemailer_1 = __importDefault(require("nodemailer"));
|
|
9
|
+
const sender_1 = require("../../email/domain/sender");
|
|
9
10
|
const service_1 = require("../../modules/email/service");
|
|
10
11
|
const types_1 = require("./types");
|
|
11
12
|
exports.SMTP_TIMEOUTS = {
|
|
@@ -13,7 +14,6 @@ exports.SMTP_TIMEOUTS = {
|
|
|
13
14
|
greeting: 10_000,
|
|
14
15
|
socket: 30_000,
|
|
15
16
|
};
|
|
16
|
-
const emailAddressPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
17
17
|
const connectionFailureCodes = new Set(["ECONNREFUSED", "EDNS"]);
|
|
18
18
|
const invalidOptions = () => {
|
|
19
19
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid SMTP notification provider options.");
|
|
@@ -111,7 +111,7 @@ class SmtpNotificationService extends utils_1.AbstractNotificationProviderServic
|
|
|
111
111
|
}
|
|
112
112
|
const configuration = smtp;
|
|
113
113
|
if (!isNonEmptyString(configuration.from) ||
|
|
114
|
-
!
|
|
114
|
+
!(0, sender_1.parseEmailSender)(configuration.from) ||
|
|
115
115
|
!isNonEmptyString(configuration.host) ||
|
|
116
116
|
!isNonEmptyString(configuration.password) ||
|
|
117
117
|
!Number.isInteger(configuration.port) ||
|
|
@@ -145,7 +145,7 @@ class SmtpNotificationService extends utils_1.AbstractNotificationProviderServic
|
|
|
145
145
|
filename: attachment.filename,
|
|
146
146
|
};
|
|
147
147
|
});
|
|
148
|
-
const from = notification.from &&
|
|
148
|
+
const from = notification.from && (0, sender_1.parseEmailSender)(notification.from)
|
|
149
149
|
? notification.from
|
|
150
150
|
: this.options_.smtp.from;
|
|
151
151
|
const identity = deliveryIdentity(notification);
|
|
@@ -233,4 +233,4 @@ class SmtpNotificationService extends utils_1.AbstractNotificationProviderServic
|
|
|
233
233
|
}
|
|
234
234
|
exports.SmtpNotificationService = SmtpNotificationService;
|
|
235
235
|
SmtpNotificationService.identifier = "smtp";
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc210cC9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUltQztBQUNuQyw0REFBb0M7QUFFcEMsc0RBQTZEO0FBQzdELHlEQUFxRTtBQUNyRSxtQ0FNaUI7QUFrQ0osUUFBQSxhQUFhLEdBQUc7SUFDM0IsVUFBVSxFQUFFLE1BQU07SUFDbEIsUUFBUSxFQUFFLE1BQU07SUFDaEIsTUFBTSxFQUFFLE1BQU07Q0FDTixDQUFDO0FBRVgsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRWpFLE1BQU0sY0FBYyxHQUFHLEdBQVUsRUFBRTtJQUNqQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw2Q0FBNkMsQ0FDOUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFjLEVBQW1CLEVBQUUsQ0FDM0QsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVyRCxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLFlBQTJELEVBQ2xDLEVBQUU7SUFDM0IsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQztJQUMxRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUksWUFBaUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsSUFDRSxDQUFDLFlBQVk7UUFDYixDQUFDLGdCQUFnQixD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
|
|
@@ -144,6 +144,8 @@ function buildFoodShopConfig(options, environment = process.env) {
|
|
|
144
144
|
email: {
|
|
145
145
|
jwtSecret: env.JWT_SECRET,
|
|
146
146
|
shop: {
|
|
147
|
+
// The Admin page lists the applications; the id is not part of the URL.
|
|
148
|
+
adminAffiliateApplicationsUrl: () => new URL("/app/affiliates/applications", backendOrigin).toString(),
|
|
147
149
|
// The Admin dashboard mounts under admin.path ("/app").
|
|
148
150
|
adminOrderUrl: ({ orderId }) => new URL(`/app/orders/${encodeURIComponent(orderId)}`, backendOrigin).toString(),
|
|
149
151
|
displayName: options.displayName,
|
|
@@ -260,4 +262,4 @@ function buildFoodShopConfig(options, environment = process.env) {
|
|
|
260
262
|
function defineFoodShopConfig(options, environment = process.env) {
|
|
261
263
|
return (0, utils_1.defineConfig)(buildFoodShopConfig(options, environment));
|
|
262
264
|
}
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZm9vZC1zaG9wLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaG9wLWNvbmZpZy9idWlsZC1mb29kLXNob3AtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMEVBLGtEQWdUQztBQUdELG9EQUtDO0FBbFlELHVEQUFvRDtBQUNwRCxxREFBMkU7QUFFM0UsNkNBb0IwQjtBQUMxQiw0RkFBcUY7QUFDckYsMkRBQW1FO0FBRW5FLHVDQUdtQjtBQW1DbkI7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FDakMsT0FBOEIsRUFDOUIsY0FBaUMsT0FBTyxDQUFDLEdBQUc7SUFFNUMsSUFBQSxxQ0FBMkIsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUVyQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDbEMsSUFBQSxlQUFPLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsa0JBQWtCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM5RSxNQUFNLGFBQWEsR0FBRyxJQUFBLG9DQUEyQixFQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV0RSxNQUFNLEdBQUcsR0FBRyxJQUFBLDJCQUFrQixFQUM1QixXQUFXLEVBQ1g7UUFDRSxjQUFjO1FBQ2QsWUFBWTtRQUNaLFlBQVk7UUFDWixXQUFXO1FBQ1gsWUFBWTtRQUNaLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsZ0JBQWdCO1FBQ2hCLEdBQUcsbUNBQTBCO1FBQzdCLGdCQUFnQjtRQUNoQix1QkFBdUI7UUFDdkIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6Qix5QkFBeUI7S0FDMUIs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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = affiliateApplicationSubmittedSubscriber;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const affiliate_1 = require("@hartl-services/medusa-food-supplements-contracts/events/affiliate");
|
|
7
|
+
const plugin_features_1 = require("../email/plugin-features");
|
|
8
|
+
const prepare_affiliate_application_email_1 = require("../workflows/email/prepare-affiliate-application-email");
|
|
9
|
+
async function affiliateApplicationSubmittedSubscriber({ event, container, }) {
|
|
10
|
+
try {
|
|
11
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.emailPluginFeatures, "affiliate_reminders"))) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const payload = affiliate_1.AffiliateApplicationSubmittedEventSchema.parse(event.data);
|
|
15
|
+
await (0, prepare_affiliate_application_email_1.prepareAffiliateApplicationEmailWorkflow)(container).run({
|
|
16
|
+
input: payload,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error("EMAIL_AFFILIATE_APPLICATION_SUBSCRIBER_FAILED");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.config = {
|
|
24
|
+
event: affiliate_1.AFFILIATE_APPLICATION_SUBMITTED_EVENT,
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaWxpYXRlLWFwcGxpY2F0aW9uLXN1Ym1pdHRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9hZmZpbGlhdGUtYXBwbGljYXRpb24tc3VibWl0dGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWFBLDBEQXFCQztBQWxDRCxzQ0FBbUQ7QUFLbkQsa0dBRzRFO0FBRTVFLDhEQUErRDtBQUMvRCxnSEFBa0g7QUFFbkcsS0FBSyxVQUFVLHVDQUF1QyxDQUFDLEVBQ3BFLEtBQUssRUFDTCxTQUFTLEdBQ2U7SUFDeEIsSUFBSSxDQUFDO1FBQ0gsSUFDRSxDQUFDLENBQUMsTUFBTSxJQUFBLCtCQUFzQixFQUM1QixTQUFTLEVBQ1QscUNBQW1CLEVBQ25CLHFCQUFxQixDQUN0QixDQUFDLEVBQ0YsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsb0RBQXdDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUEsOEVBQXdDLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzVELEtBQUssRUFBRSxPQUFPO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaURBQXFDO0NBQzdDLENBQUMifQ==
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareAffiliateApplicationEmailWorkflow = exports.prepareAffiliateApplicationEmail = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const business_keys_1 = require("../../email/domain/business-keys");
|
|
6
|
+
const email_1 = require("../../modules/email");
|
|
7
|
+
const dispatch_email_message_1 = require("./dispatch-email-message");
|
|
8
|
+
/**
|
|
9
|
+
* Notifies the shop about a new partner application. The business key is the
|
|
10
|
+
* application, so a replayed event or a concurrent request never creates a
|
|
11
|
+
* second message.
|
|
12
|
+
*/
|
|
13
|
+
const prepareAffiliateApplicationEmail = async (container, input) => {
|
|
14
|
+
const email = container.resolve(email_1.EMAIL_MODULE);
|
|
15
|
+
const message = await email.upsertMessageFact({
|
|
16
|
+
kind: "affiliate.application_submitted.admin",
|
|
17
|
+
business_key: (0, business_keys_1.affiliateApplicationSubmittedAdminBusinessKey)(input.application_id),
|
|
18
|
+
resource_type: "affiliate_application",
|
|
19
|
+
resource_id: input.application_id,
|
|
20
|
+
recipient: email.getDispatchConfiguration().orderNotificationEmail,
|
|
21
|
+
required_facts: ["submitted"],
|
|
22
|
+
fact: "submitted",
|
|
23
|
+
template_data: {
|
|
24
|
+
application_id: input.application_id,
|
|
25
|
+
customer_id: input.customer_id,
|
|
26
|
+
customer_email: input.customer_email,
|
|
27
|
+
customer_first_name: input.customer_first_name,
|
|
28
|
+
customer_last_name: input.customer_last_name,
|
|
29
|
+
company_name: input.company_name,
|
|
30
|
+
message: input.message,
|
|
31
|
+
},
|
|
32
|
+
suppression_code: null,
|
|
33
|
+
});
|
|
34
|
+
const { result: delivery } = await (0, dispatch_email_message_1.dispatchEmailMessageWorkflow)(container).run({
|
|
35
|
+
input: { message_id: message.id },
|
|
36
|
+
});
|
|
37
|
+
return {
|
|
38
|
+
delivery_status: delivery.status,
|
|
39
|
+
message_id: message.id,
|
|
40
|
+
status: message.status,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
exports.prepareAffiliateApplicationEmail = prepareAffiliateApplicationEmail;
|
|
44
|
+
const prepareAffiliateApplicationEmailStep = (0, workflows_sdk_1.createStep)("email-prepare-affiliate-application-submitted", async (input, { container }) => new workflows_sdk_1.StepResponse(await (0, exports.prepareAffiliateApplicationEmail)(container, input)));
|
|
45
|
+
exports.prepareAffiliateApplicationEmailWorkflow = (0, workflows_sdk_1.createWorkflow)("email-prepare-affiliate-application-submitted", (input) => new workflows_sdk_1.WorkflowResponse(prepareAffiliateApplicationEmailStep(input)));
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS1hZmZpbGlhdGUtYXBwbGljYXRpb24tZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2VtYWlsL3ByZXBhcmUtYWZmaWxpYXRlLWFwcGxpY2F0aW9uLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFFQUsyQztBQUczQyxvRUFBaUc7QUFDakcsK0NBQW1EO0FBRW5ELHFFQUF3RTtBQVF4RTs7OztHQUlHO0FBQ0ksTUFBTSxnQ0FBZ0MsR0FBRyxLQUFLLEVBQ25ELFNBQTBCLEVBQzFCLEtBQXlDLEVBQ1EsRUFBRTtJQUNuRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFxQixvQkFBWSxDQUFDLENBQUM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDNUMsSUFBSSxFQUFFLHVDQUF1QztRQUM3QyxZQUFZLEVBQUUsSUFBQSw2REFBNkMsRUFDekQsS0FBSyxDQUFDLGNBQWMsQ0FDckI7UUFDRCxhQUFhLEVBQUUsdUJBQXVCO1FBQ3RDLFdBQVcsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNqQyxTQUFTLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUMsc0JBQXNCO1FBQ2xFLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztRQUM3QixJQUFJLEVBQUUsV0FBVztRQUNqQixhQUFhLEVBQUU7WUFDYixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQzlDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7WUFDNUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztTQUN2QjtRQUNELGdCQUFnQixFQUFFLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUEscURBQTRCLEVBQzdELFNBQVMsQ0FDVixDQUFDLEdBQUcsQ0FBQztRQUNKLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFO0tBQ2xDLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxlQUFlLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDaEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBcENXLFFBQUEsZ0NBQWdDLG9DQW9DM0M7QUFFRixNQUFNLG9DQUFvQyxHQUFHLElBQUEsMEJBQVUsRUFLckQsK0NBQStDLEVBQy9DLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQzdCLElBQUksNEJBQVksQ0FBQyxNQUFNLElBQUEsd0NBQWdDLEVBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQzdFLENBQUM7QUFFVyxRQUFBLHdDQUF3QyxHQUFHLElBQUEsOEJBQWMsRUFDcEUsK0NBQStDLEVBQy9DLENBQUMsS0FBeUMsRUFBRSxFQUFFLENBQzVDLElBQUksZ0NBQWdCLENBQUMsb0NBQW9DLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDcEUsQ0FBQyJ9
|
package/README.md
CHANGED
|
@@ -864,6 +864,10 @@ Options of the `email` namespace:
|
|
|
864
864
|
`orderNotificationEmail` mailbox. `verifyAccountUrl` (optional builder,
|
|
865
865
|
like `passwordResetUrl`; the mail appends `#token=`) is the storefront page
|
|
866
866
|
that confirms an account, needed while `customer_verification` is on.
|
|
867
|
+
`adminAffiliateApplicationsUrl` (optional builder, receives
|
|
868
|
+
`{ applicationId }`) is the Admin page of the partner applications; the
|
|
869
|
+
notification about a new application shows its "Im Admin prüfen" button
|
|
870
|
+
only with it.
|
|
867
871
|
`layout` and `renderers` are optional overrides, see "Shop configuration and
|
|
868
872
|
default templates".
|
|
869
873
|
|
|
@@ -878,7 +882,7 @@ is off. The former `documentsEnabled` option no longer exists: Documents is
|
|
|
878
882
|
always part of the base.
|
|
879
883
|
|
|
880
884
|
The event contracts the module consumes for shipment, cancellation, refund and
|
|
881
|
-
affiliate-reminder e-mails come from
|
|
885
|
+
affiliate-reminder and partner-application e-mails come from
|
|
882
886
|
`@hartl-services/medusa-food-supplements-contracts/events/documents` and
|
|
883
887
|
`/events/affiliate`, so installing the base does not pull in Affiliate.
|
|
884
888
|
|
|
@@ -916,7 +920,7 @@ feature is switched on again.
|
|
|
916
920
|
| `order_mails` | Bestell-Mails | on | subscribers `order-placed`, `email-shipment-created`, `email-order-canceled`, `return-requested`, `return-received`, `documents-shipment-invoice-assignment-decided`, `documents-order-cancellation-ready`, `documents-refund-ready` | jobs, Admin routes, already created messages |
|
|
917
921
|
| `account_mails` | Konto-Mails | on | subscribers `password-reset`, `user-invite`, `customer-verification` (the last one only with `customer_verification` on as well) | jobs, Admin routes, already created messages |
|
|
918
922
|
| `customer_verification` | Kontobestätigung per E-Mail | off | Medusa's e-mail verification of customer logins (see "Kontobestätigung per E-Mail"), route `POST /store/customer-verification/resend` (404 while off), subscriber `customer-verification`; child of `account_mails` | checkout and orders; confirmed accounts stay confirmed, already created messages |
|
|
919
|
-
| `affiliate_reminders` | Affiliate-
|
|
923
|
+
| `affiliate_reminders` | Affiliate-Mails | on | subscribers `affiliate-consignment-reminder-due` (reminders to affiliates) and `affiliate-application-submitted` (notification to the shop about a new partner application) | jobs, Admin routes, already created messages |
|
|
920
924
|
|
|
921
925
|
With the plugin switched off the three jobs return immediately, so nothing
|
|
922
926
|
is sent, retried or reconciled until it is switched on again; then the jobs
|
|
@@ -1043,7 +1047,8 @@ Storefront contract (DTOs, schema and path from the Contracts package,
|
|
|
1043
1047
|
### Ownership
|
|
1044
1048
|
|
|
1045
1049
|
- Documents owns document issuance and publishes immutable document facts.
|
|
1046
|
-
- Affiliate owns reminder eligibility and publishes reminder
|
|
1050
|
+
- Affiliate owns reminder eligibility and publishes reminder and application
|
|
1051
|
+
facts.
|
|
1047
1052
|
- Email resolves recipients, renders content, attaches files, and owns delivery
|
|
1048
1053
|
status plus the append-only global Terms PDF history.
|
|
1049
1054
|
- Public HTTP DTOs, schemas, and paths remain in
|
|
@@ -1167,6 +1172,28 @@ type Payload = {
|
|
|
1167
1172
|
};
|
|
1168
1173
|
```
|
|
1169
1174
|
|
|
1175
|
+
`affiliate.application_submitted.v1`
|
|
1176
|
+
|
|
1177
|
+
```ts
|
|
1178
|
+
type Payload = {
|
|
1179
|
+
schema_version: 1;
|
|
1180
|
+
application_id: string;
|
|
1181
|
+
customer_id: string;
|
|
1182
|
+
customer_email: string | null;
|
|
1183
|
+
customer_first_name: string | null;
|
|
1184
|
+
customer_last_name: string | null;
|
|
1185
|
+
company_name: string | null;
|
|
1186
|
+
message: string | null;
|
|
1187
|
+
};
|
|
1188
|
+
```
|
|
1189
|
+
|
|
1190
|
+
Affiliate publishes it when `POST /store/affiliates/register` has stored an
|
|
1191
|
+
application. Email creates one `affiliate.application_submitted.admin` message
|
|
1192
|
+
per `application_id` (business key
|
|
1193
|
+
`affiliate-application-submitted-admin:<application_id>`, so a replay or a
|
|
1194
|
+
concurrent request never sends a second mail) addressed to
|
|
1195
|
+
`orderNotificationEmail`. The persisted template data are exactly these facts.
|
|
1196
|
+
|
|
1170
1197
|
`period_start` is a valid `YYYY-MM-01`, `due_date` is a valid `YYYY-MM-DD`, and
|
|
1171
1198
|
`reminder_key` is exactly
|
|
1172
1199
|
`affiliate-consignment:<affiliate_id>:<period_start>`. `locale`, when present,
|
|
@@ -1177,7 +1204,8 @@ has at most 35 characters. Email runtime-validates every contract before use.
|
|
|
1177
1204
|
- The accepted kinds are exactly `order.received`, `order.received.admin`, `order.shipped`,
|
|
1178
1205
|
`order.canceled`, `order.return_requested`, `order.return_received`,
|
|
1179
1206
|
`order.refunded`, `auth.password_reset`, `auth.verification`,
|
|
1180
|
-
`affiliate.consignment_report_due
|
|
1207
|
+
`affiliate.consignment_report_due`, `affiliate.application_submitted.admin`
|
|
1208
|
+
and `user.invite`.
|
|
1181
1209
|
- Every automatic message has a deterministic business key.
|
|
1182
1210
|
- Every placed Order creates independent customer and Shop intents. The customer
|
|
1183
1211
|
intent honors `no_notification`; the Shop intent always targets the static
|
|
@@ -1248,7 +1276,7 @@ an info box lists number, customer, e-mail and order time, followed by an
|
|
|
1248
1276
|
button is left out without it) and `timeZone` (IANA; the order time is left
|
|
1249
1277
|
out without it). `buildFoodShopConfig` sets both (`<MEDUSA_BACKEND_URL>/app/
|
|
1250
1278
|
orders/<id>` and its `timeZone` option). The layout receives `audience`
|
|
1251
|
-
(`"shop"` for this kind and `user.invite`, `"customer"` for all others) and
|
|
1279
|
+
(`"shop"` for this kind, `affiliate.application_submitted.admin` and `user.invite`, `"customer"` for all others) and
|
|
1252
1280
|
shows the contact line only to customers.
|
|
1253
1281
|
|
|
1254
1282
|
The shipping confirmation (`order.shipped`, one per fulfillment) receives a
|
|
@@ -1329,6 +1357,17 @@ Partnerbereich" button and says the mail can be ignored once the report is
|
|
|
1329
1357
|
submitted. The button leads to a 404 while the affiliate plugin's
|
|
1330
1358
|
`partner_portal` toggle is off.
|
|
1331
1359
|
|
|
1360
|
+
The partner application notification (`affiliate.application_submitted.admin`)
|
|
1361
|
+
goes to `orderNotificationEmail`, like the order notification, and is gated by
|
|
1362
|
+
the `affiliate_reminders` feature ("Affiliate-Mails"). Its subject is "Neue
|
|
1363
|
+
Partner-Bewerbung von <Firma>" (without a company the applicant's name, then
|
|
1364
|
+
the e-mail address; just "Neue Partner-Bewerbung" if none is known). An info
|
|
1365
|
+
box lists company, name and e-mail (only the present ones), the applicant's
|
|
1366
|
+
message follows as an escaped paragraph, and an "Im Admin prüfen" button links
|
|
1367
|
+
`adminAffiliateApplicationsUrl` (left out without it; `buildFoodShopConfig`
|
|
1368
|
+
sets `<MEDUSA_BACKEND_URL>/app/affiliates/applications`). Its layout audience
|
|
1369
|
+
is `"shop"`. All applicant text is HTML-escaped.
|
|
1370
|
+
|
|
1332
1371
|
The Admin invite (`user.invite`) has the subject "Einladung ins Admin-Team von
|
|
1333
1372
|
<displayName>", an "Einladung annehmen" button with the link as copyable text,
|
|
1334
1373
|
the invite's current expiry ("Die Einladung ist gültig bis 02.10.2026, 01:40
|
|
@@ -1378,7 +1417,9 @@ deployment variables:
|
|
|
1378
1417
|
build); otherwise `SMTP_SECURE` or `SMTP_REQUIRE_TLS` must be `true`.
|
|
1379
1418
|
|
|
1380
1419
|
Runtime requires `SMTP_HOST`, `SMTP_PORT`, `SMTP_SECURE`, `SMTP_REQUIRE_TLS`,
|
|
1381
|
-
`SMTP_USER`, `SMTP_PASSWORD`, and `SMTP_FROM`. `
|
|
1420
|
+
`SMTP_USER`, `SMTP_PASSWORD`, and `SMTP_FROM`. `SMTP_FROM` is a bare address
|
|
1421
|
+
or carries the sender's display name: `Example GmbH <info@example.com>` (quote
|
|
1422
|
+
the value in a `.env` file). `SMTP_SECURE=true` selects
|
|
1382
1423
|
implicit TLS; `SMTP_REQUIRE_TLS=true` requires STARTTLS. Outside development
|
|
1383
1424
|
and test, at least one must be true. Certificate verification is never
|
|
1384
1425
|
disabled. Development and test may set both to `false` for an isolated local
|
|
@@ -1454,8 +1495,10 @@ composes the base's `PluginPageShell` and `PluginFeatureSections` from
|
|
|
1454
1495
|
two operations sections below them, in this order: **AGB/PDF-Versionen** and,
|
|
1455
1496
|
as the last section, the **E-Mail-Protokoll**. They show Terms PDF and mail
|
|
1456
1497
|
log state to act on, not configuration the plugin reads at run time. The mail
|
|
1457
|
-
log provides bounded server pagination, allowlisted status/kind filters,
|
|
1458
|
-
|
|
1498
|
+
log provides bounded server pagination, allowlisted status/kind filters, a
|
|
1499
|
+
search by the exact resource ID (e.g. `order_…`, `cus_…`, as pasted from
|
|
1500
|
+
elsewhere), safe message and attempt status, and an explicitly confirmed
|
|
1501
|
+
resend action.
|
|
1459
1502
|
Recipient, template, and payload data are intentionally absent from the page.
|
|
1460
1503
|
|
|
1461
1504
|
The `AGB/PDF-Versionen` section manages the global Terms PDFs. Admins can
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveSmtp = exports.SMTP_BUILD_PLACEHOLDERS = exports.SMTP_ENVIRONMENT_VARIABLES = exports.defineShopEmailConfiguration = exports.createSmtpNotificationModuleConfig = void 0;
|
|
4
|
+
const sender_1 = require("../domain/sender");
|
|
4
5
|
var notification_module_1 = require("./notification-module");
|
|
5
6
|
Object.defineProperty(exports, "createSmtpNotificationModuleConfig", { enumerable: true, get: function () { return notification_module_1.createSmtpNotificationModuleConfig; } });
|
|
6
7
|
const defineShopEmailConfiguration = (configuration) => configuration;
|
|
@@ -63,11 +64,13 @@ const resolveSmtp = (values, allowInsecure) => {
|
|
|
63
64
|
if (port === undefined) {
|
|
64
65
|
throw new TypeError("SMTP_PORT is required.");
|
|
65
66
|
}
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
// A display name is allowed: "Example GmbH <info@example.com>".
|
|
68
|
+
const sender = (0, sender_1.parseEmailSender)(values.SMTP_FROM);
|
|
69
|
+
if (!sender) {
|
|
70
|
+
throw new TypeError('SMTP_FROM must be an email address, optionally as "Name <address>".');
|
|
68
71
|
}
|
|
69
72
|
const smtp = {
|
|
70
|
-
from:
|
|
73
|
+
from: (0, sender_1.formatEmailSender)(sender),
|
|
71
74
|
host: values.SMTP_HOST,
|
|
72
75
|
password: values.SMTP_PASSWORD,
|
|
73
76
|
port,
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type EmailSender = {
|
|
2
|
+
address: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Reads a sender as either a bare address (`info@example.com`) or with a
|
|
7
|
+
* display name (`Example GmbH <info@example.com>`, the name optionally in
|
|
8
|
+
* double quotes). Returns undefined when the address is not valid.
|
|
9
|
+
*/
|
|
10
|
+
export declare const parseEmailSender: (value: string) => EmailSender | undefined;
|
|
11
|
+
/** Writes the sender for a mail header, quoting the display name. */
|
|
12
|
+
export declare const formatEmailSender: ({ address, name }: EmailSender) => string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatEmailSender = exports.parseEmailSender = void 0;
|
|
4
|
+
const emailAddressPattern = /^[^\s@<>"]+@[^\s@<>"]+\.[^\s@<>"]+$/;
|
|
5
|
+
const namedSenderPattern = /^(.*?)\s*<([^<>]*)>$/;
|
|
6
|
+
/**
|
|
7
|
+
* Reads a sender as either a bare address (`info@example.com`) or with a
|
|
8
|
+
* display name (`Example GmbH <info@example.com>`, the name optionally in
|
|
9
|
+
* double quotes). Returns undefined when the address is not valid.
|
|
10
|
+
*/
|
|
11
|
+
const parseEmailSender = (value) => {
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
const named = namedSenderPattern.exec(trimmed);
|
|
14
|
+
const address = (named ? named[2] : trimmed).trim();
|
|
15
|
+
if (!emailAddressPattern.test(address)) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const name = named?.[1]
|
|
19
|
+
.trim()
|
|
20
|
+
.replace(/^"(.*)"$/, "$1")
|
|
21
|
+
.trim();
|
|
22
|
+
return name ? { address, name } : { address };
|
|
23
|
+
};
|
|
24
|
+
exports.parseEmailSender = parseEmailSender;
|
|
25
|
+
/** Writes the sender for a mail header, quoting the display name. */
|
|
26
|
+
const formatEmailSender = ({ address, name }) => name ? `"${name.replace(/["\\]/g, "\\$&")}" <${address}>` : address;
|
|
27
|
+
exports.formatEmailSender = formatEmailSender;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from "@medusajs/framework/zod";
|
|
2
|
-
export declare const EMAIL_KINDS: readonly ["order.received", "order.received.admin", "order.shipped", "order.canceled", "order.return_requested", "order.return_received", "order.refunded", "auth.password_reset", "affiliate.consignment_report_due", "user.invite", "auth.verification"];
|
|
2
|
+
export declare const EMAIL_KINDS: readonly ["order.received", "order.received.admin", "order.shipped", "order.canceled", "order.return_requested", "order.return_received", "order.refunded", "auth.password_reset", "affiliate.consignment_report_due", "affiliate.application_submitted.admin", "user.invite", "auth.verification"];
|
|
3
3
|
export declare const EmailKindSchema: z.ZodEnum<{
|
|
4
4
|
"order.received": "order.received";
|
|
5
5
|
"order.received.admin": "order.received.admin";
|
|
@@ -10,6 +10,7 @@ export declare const EmailKindSchema: z.ZodEnum<{
|
|
|
10
10
|
"order.refunded": "order.refunded";
|
|
11
11
|
"auth.password_reset": "auth.password_reset";
|
|
12
12
|
"affiliate.consignment_report_due": "affiliate.consignment_report_due";
|
|
13
|
+
"affiliate.application_submitted.admin": "affiliate.application_submitted.admin";
|
|
13
14
|
"user.invite": "user.invite";
|
|
14
15
|
"auth.verification": "auth.verification";
|
|
15
16
|
}>;
|
|
@@ -39,6 +39,14 @@ export type ShopEmailConfiguration = Readonly<{
|
|
|
39
39
|
adminOrderUrl?: (input: Readonly<{
|
|
40
40
|
orderId: string;
|
|
41
41
|
}>) => string;
|
|
42
|
+
/**
|
|
43
|
+
* Link to the partner applications in the Medusa Admin; the shop's
|
|
44
|
+
* notification about a new partner application shows an "Im Admin prüfen"
|
|
45
|
+
* button only when it is set.
|
|
46
|
+
*/
|
|
47
|
+
adminAffiliateApplicationsUrl?: (input: Readonly<{
|
|
48
|
+
applicationId: string;
|
|
49
|
+
}>) => string;
|
|
42
50
|
affiliatePortalUrl: string;
|
|
43
51
|
displayName: string;
|
|
44
52
|
inviteUrl: (input: Readonly<{
|
|
@@ -362,6 +362,15 @@ export declare const EmailPersistedDataSchemas: {
|
|
|
362
362
|
due_date: z.ZodString;
|
|
363
363
|
locale: z.ZodNullable<z.ZodString>;
|
|
364
364
|
}, z.core.$strict>;
|
|
365
|
+
readonly "affiliate.application_submitted.admin": z.ZodObject<{
|
|
366
|
+
application_id: z.ZodString;
|
|
367
|
+
customer_id: z.ZodString;
|
|
368
|
+
customer_email: z.ZodNullable<z.ZodString>;
|
|
369
|
+
customer_first_name: z.ZodNullable<z.ZodString>;
|
|
370
|
+
customer_last_name: z.ZodNullable<z.ZodString>;
|
|
371
|
+
company_name: z.ZodNullable<z.ZodString>;
|
|
372
|
+
message: z.ZodNullable<z.ZodString>;
|
|
373
|
+
}, z.core.$strict>;
|
|
365
374
|
readonly "user.invite": z.ZodObject<{}, z.core.$strict>;
|
|
366
375
|
readonly "auth.verification": z.ZodObject<{
|
|
367
376
|
locale: z.ZodNullable<z.ZodString>;
|
|
@@ -596,6 +605,15 @@ export declare const EmailRenderDataSchemas: {
|
|
|
596
605
|
due_date: z.ZodString;
|
|
597
606
|
locale: z.ZodNullable<z.ZodString>;
|
|
598
607
|
}, z.core.$strict>;
|
|
608
|
+
readonly "affiliate.application_submitted.admin": z.ZodObject<{
|
|
609
|
+
application_id: z.ZodString;
|
|
610
|
+
customer_id: z.ZodString;
|
|
611
|
+
customer_email: z.ZodNullable<z.ZodString>;
|
|
612
|
+
customer_first_name: z.ZodNullable<z.ZodString>;
|
|
613
|
+
customer_last_name: z.ZodNullable<z.ZodString>;
|
|
614
|
+
company_name: z.ZodNullable<z.ZodString>;
|
|
615
|
+
message: z.ZodNullable<z.ZodString>;
|
|
616
|
+
}, z.core.$strict>;
|
|
599
617
|
};
|
|
600
618
|
export type EmailPersistedDataMap = {
|
|
601
619
|
readonly [Kind in EmailKind]: Readonly<z.infer<(typeof EmailPersistedDataSchemas)[Kind]>>;
|
|
@@ -214,6 +214,17 @@ exports.EmailPersistedDataSchemas = {
|
|
|
214
214
|
locale: NullableLocaleSchema,
|
|
215
215
|
})
|
|
216
216
|
.strict(),
|
|
217
|
+
"affiliate.application_submitted.admin": zod_1.z
|
|
218
|
+
.object({
|
|
219
|
+
application_id: NonEmptyStringSchema,
|
|
220
|
+
customer_id: NonEmptyStringSchema,
|
|
221
|
+
customer_email: NonEmptyStringSchema.nullable(),
|
|
222
|
+
customer_first_name: NonEmptyStringSchema.nullable(),
|
|
223
|
+
customer_last_name: NonEmptyStringSchema.nullable(),
|
|
224
|
+
company_name: NonEmptyStringSchema.nullable(),
|
|
225
|
+
message: NonEmptyStringSchema.nullable(),
|
|
226
|
+
})
|
|
227
|
+
.strict(),
|
|
217
228
|
"user.invite": zod_1.z.object({}).strict(),
|
|
218
229
|
"auth.verification": zod_1.z
|
|
219
230
|
.object({
|
|
@@ -144,6 +144,8 @@ function buildFoodShopConfig(options, environment = process.env) {
|
|
|
144
144
|
email: {
|
|
145
145
|
jwtSecret: env.JWT_SECRET,
|
|
146
146
|
shop: {
|
|
147
|
+
// The Admin page lists the applications; the id is not part of the URL.
|
|
148
|
+
adminAffiliateApplicationsUrl: () => new URL("/app/affiliates/applications", backendOrigin).toString(),
|
|
147
149
|
// The Admin dashboard mounts under admin.path ("/app").
|
|
148
150
|
adminOrderUrl: ({ orderId }) => new URL(`/app/orders/${encodeURIComponent(orderId)}`, backendOrigin).toString(),
|
|
149
151
|
displayName: options.displayName,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hartl-services/medusa-base",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Base plugin for Hartl Services Medusa shops: per-plugin feature toggles with a generic Admin settings page, a Store endpoint for storefronts, enforcement helpers, the complete-cart hook composition, the root redirect, cart-promotion link repair, the built-in E-Mail, Documents and S3 file storage modules, config helpers with the turnkey food-shop preset, and the Sentry logger wrapper and instrumentation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"mime-types": "3.0.1",
|
|
89
89
|
"nodemailer": "6.10.1",
|
|
90
90
|
"ulid": "^2.4.0",
|
|
91
|
-
"@hartl-services/medusa-food-supplements-contracts": "^0.
|
|
91
|
+
"@hartl-services/medusa-food-supplements-contracts": "^0.21.0"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@medusajs/admin-sdk": "2.19.0",
|