@hszrdm/core 1.2.0 → 1.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 +3439 -3192
- package/.medusa/server/src/admin/index.mjs +3439 -3192
- package/.medusa/server/src/api/admin/email/preview/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/email/preview/route.js +20 -0
- package/.medusa/server/src/api/admin/email/templates/[id]/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/email/templates/[id]/route.js +25 -0
- package/.medusa/server/src/api/admin/email/templates/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/email/templates/route.js +40 -0
- package/.medusa/server/src/api/admin/email/test-send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/email/test-send/route.js +64 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.js +15 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.js +39 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.js +14 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.js +17 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.js +23 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/newsletter/campaigns/route.js +40 -0
- package/.medusa/server/src/api/hooks/email/status/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/email/status/route.js +69 -0
- package/.medusa/server/src/api/store/email/track/click/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/email/track/click/[token]/route.js +19 -0
- package/.medusa/server/src/api/store/email/track/open/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/email/track/open/[token]/route.js +22 -0
- package/.medusa/server/src/api/store/leads/route.js +27 -93
- package/.medusa/server/src/api/store/newsletter/route.js +24 -107
- package/.medusa/server/src/api/store/quote-requests/route.js +41 -129
- package/.medusa/server/src/config.js +38 -15
- package/.medusa/server/src/core/customer-email.d.ts +5 -5
- package/.medusa/server/src/core/customer-email.js +55 -109
- package/.medusa/server/src/core/transactional-email.d.ts +9 -8
- package/.medusa/server/src/core/transactional-email.js +74 -244
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/email-campaign-dispatch.d.ts +6 -0
- package/.medusa/server/src/jobs/email-campaign-dispatch.js +18 -0
- package/.medusa/server/src/modules/email-center/campaign.d.ts +8 -0
- package/.medusa/server/src/modules/email-center/campaign.js +193 -0
- package/.medusa/server/src/modules/email-center/constants.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/constants.js +5 -0
- package/.medusa/server/src/modules/email-center/defaults.d.ts +10 -0
- package/.medusa/server/src/modules/email-center/defaults.js +49 -0
- package/.medusa/server/src/modules/email-center/index.d.ts +11 -0
- package/.medusa/server/src/modules/email-center/index.js +42 -0
- package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.d.ts +5 -0
- package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.js +25 -0
- package/.medusa/server/src/modules/email-center/models/email-campaign.d.ts +22 -0
- package/.medusa/server/src/modules/email-center/models/email-campaign.js +37 -0
- package/.medusa/server/src/modules/email-center/models/email-delivery.d.ts +21 -0
- package/.medusa/server/src/modules/email-center/models/email-delivery.js +38 -0
- package/.medusa/server/src/modules/email-center/models/email-template.d.ts +13 -0
- package/.medusa/server/src/modules/email-center/models/email-template.js +20 -0
- package/.medusa/server/src/modules/email-center/render.d.ts +31 -0
- package/.medusa/server/src/modules/email-center/render.js +92 -0
- package/.medusa/server/src/modules/email-center/send.d.ts +27 -0
- package/.medusa/server/src/modules/email-center/send.js +67 -0
- package/.medusa/server/src/modules/email-center/service.d.ts +56 -0
- package/.medusa/server/src/modules/email-center/service.js +13 -0
- package/.medusa/server/src/modules/email-center/tracking.d.ts +9 -0
- package/.medusa/server/src/modules/email-center/tracking.js +92 -0
- package/.medusa/server/src/providers/email/index.d.ts +2 -0
- package/.medusa/server/src/providers/email/index.js +11 -0
- package/.medusa/server/src/providers/email/service.d.ts +24 -0
- package/.medusa/server/src/providers/email/service.js +117 -0
- package/.medusa/server/src/scripts/core-init.js +20 -3
- package/.medusa/server/src/scripts/verify-bootstrap.js +1 -7
- package/.medusa/server/src/subscribers/transactional-email-shipment-created.js +6 -2
- package/package.json +3 -3
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const email_center_1 = require("../../../../modules/email-center");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const body = req.body || {};
|
|
7
|
+
if (body.key) {
|
|
8
|
+
const content = await (0, email_center_1.resolveEmailContent)({ container: req.scope, key: String(body.key), locale: body.locale, data: body.data || {} });
|
|
9
|
+
if (!content)
|
|
10
|
+
return res.status(404).json({ message: "E-mail sablon nem található." });
|
|
11
|
+
return res.json({ content });
|
|
12
|
+
}
|
|
13
|
+
const data = body.data && typeof body.data === "object" ? body.data : {};
|
|
14
|
+
return res.json({ content: {
|
|
15
|
+
subject: (0, email_center_1.renderTemplateString)(String(body.subject || ""), data, false),
|
|
16
|
+
html: (0, email_center_1.renderTemplateString)(String(body.html || ""), data, true),
|
|
17
|
+
text: (0, email_center_1.renderTemplateString)(String(body.text || ""), data, false),
|
|
18
|
+
} });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3ByZXZpZXcvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxvQkFhQztBQWZELG1FQUE0RjtBQUVyRixLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXVDLEVBQUUsR0FBbUI7SUFDckYsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFDM0IsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsa0NBQW1CLEVBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQWMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQy9JLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxDQUFDLENBQUE7UUFDdEYsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUM5QixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDeEUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFO1lBQ3pCLE9BQU8sRUFBRSxJQUFBLG1DQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDdEUsSUFBSSxFQUFFLElBQUEsbUNBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztZQUMvRCxJQUFJLEVBQUUsSUFBQSxtQ0FBb0IsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO1NBQ2pFLEVBQUUsQ0FBQyxDQUFBO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
3
|
+
export declare function POST(req: MedusaRequest<Record<string, unknown>>, res: MedusaResponse): Promise<MedusaResponse>;
|
|
4
|
+
export declare function DELETE(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
exports.DELETE = DELETE;
|
|
6
|
+
const email_center_1 = require("../../../../../modules/email-center");
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
9
|
+
return res.json({ template: await service.retrieveEmailTemplate(req.params.id) });
|
|
10
|
+
}
|
|
11
|
+
async function POST(req, res) {
|
|
12
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
13
|
+
const allowed = ["name", "subject", "html", "text", "enabled", "metadata"];
|
|
14
|
+
const values = { id: req.params.id };
|
|
15
|
+
for (const key of allowed)
|
|
16
|
+
if (key in (req.body || {}))
|
|
17
|
+
values[key] = req.body[key];
|
|
18
|
+
return res.json({ template: await service.updateEmailTemplates(values) });
|
|
19
|
+
}
|
|
20
|
+
async function DELETE(req, res) {
|
|
21
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
22
|
+
await service.deleteEmailTemplates(req.params.id);
|
|
23
|
+
return res.status(200).json({ id: req.params.id, deleted: true });
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3RlbXBsYXRlcy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esa0JBR0M7QUFFRCxvQkFNQztBQUVELHdCQUlDO0FBbkJELHNFQUFrRztBQUUzRixLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ25GLENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQTJDLEVBQUUsR0FBbUI7SUFDekYsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sTUFBTSxHQUE0QixFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBQzdELEtBQUssTUFBTSxHQUFHLElBQUksT0FBTztRQUFFLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNuRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUMsTUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQ3BGLENBQUM7QUFFTSxLQUFLLFVBQVUsTUFBTSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDbEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ25FLENBQUMifQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
3
|
+
export declare function POST(req: MedusaRequest<Record<string, unknown>>, res: MedusaResponse): Promise<MedusaResponse>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const email_center_1 = require("../../../../modules/email-center");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
8
|
+
const rows = await service.listEmailTemplates({}, { take: 500, order: { key: "ASC", locale: "ASC" } });
|
|
9
|
+
const overrides = new Map(rows.map((row) => [`${row.key}:${row.locale}`, row]));
|
|
10
|
+
const defaults = email_center_1.DEFAULT_EMAIL_TEMPLATES.map((item) => overrides.get(`${item.key}:${item.locale}`) || { ...item, id: null, enabled: true, system: true, default: true });
|
|
11
|
+
const custom = rows.filter((row) => !email_center_1.DEFAULT_EMAIL_TEMPLATES.some((item) => item.key === row.key && item.locale === row.locale));
|
|
12
|
+
return res.json({ templates: [...defaults, ...custom] });
|
|
13
|
+
}
|
|
14
|
+
async function POST(req, res) {
|
|
15
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
16
|
+
const body = req.body || {};
|
|
17
|
+
const key = required(body.key, "Kulcs");
|
|
18
|
+
const locale = localeOf(body.locale);
|
|
19
|
+
const existing = await service.listEmailTemplates({ key, locale }, { take: 1 });
|
|
20
|
+
const values = {
|
|
21
|
+
key,
|
|
22
|
+
locale,
|
|
23
|
+
name: required(body.name, "Név"),
|
|
24
|
+
subject: required(body.subject, "Tárgy"),
|
|
25
|
+
html: required(body.html, "HTML tartalom"),
|
|
26
|
+
text: required(body.text, "Szöveges tartalom"),
|
|
27
|
+
enabled: body.enabled !== false,
|
|
28
|
+
system: body.system === true,
|
|
29
|
+
metadata: objectOrNull(body.metadata),
|
|
30
|
+
};
|
|
31
|
+
const template = existing[0]
|
|
32
|
+
? await service.updateEmailTemplates({ id: existing[0].id, ...values })
|
|
33
|
+
: await service.createEmailTemplates(values);
|
|
34
|
+
return res.status(existing[0] ? 200 : 201).json({ template });
|
|
35
|
+
}
|
|
36
|
+
function required(value, label) { const text = typeof value === "string" ? value.trim() : ""; if (!text)
|
|
37
|
+
throw new Error(`${label} megadása kötelező.`); return text; }
|
|
38
|
+
function localeOf(value) { return String(value || "hu-HU").toLowerCase().startsWith("en") ? "en-US" : "hu-HU"; }
|
|
39
|
+
function objectOrNull(value) { return value && typeof value === "object" && !Array.isArray(value) ? value : null; }
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3RlbXBsYXRlcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLGtCQU9DO0FBRUQsb0JBcUJDO0FBaENELG1FQUF3SDtBQUVqSCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBVyxDQUEwQyxDQUFBO0lBQ3hKLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0UsTUFBTSxRQUFRLEdBQUcsc0NBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3hLLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENB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
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const email_center_1 = require("../../../../modules/email-center");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const body = req.body || {};
|
|
7
|
+
const to = String(body.to || "").trim().toLowerCase();
|
|
8
|
+
if (!/^\S+@\S+\.\S+$/.test(to)) {
|
|
9
|
+
return res.status(400).json({ message: "Érvényes teszt e-mail-cím szükséges." });
|
|
10
|
+
}
|
|
11
|
+
const data = (0, email_center_1.emailVariables)({
|
|
12
|
+
store_name: "HSZRDM Commerce",
|
|
13
|
+
first_name: "Teszt",
|
|
14
|
+
email: to,
|
|
15
|
+
verification_code: "123456",
|
|
16
|
+
reset_url: "https://example.com/reset-password?token=test",
|
|
17
|
+
order_number: "1001",
|
|
18
|
+
total: "19 990",
|
|
19
|
+
currency_code: "HUF",
|
|
20
|
+
tracking_number: "TEST123456",
|
|
21
|
+
tracking_url: "https://example.com/tracking/TEST123456",
|
|
22
|
+
refund_amount: "5 000",
|
|
23
|
+
contact_name: "Teszt Kapcsolattartó",
|
|
24
|
+
contact_email: to,
|
|
25
|
+
company_name: "Teszt Kft.",
|
|
26
|
+
quote_request_id: "quote_test",
|
|
27
|
+
name: "Teszt Felhasználó",
|
|
28
|
+
phone: "+36 20 123 4567",
|
|
29
|
+
form_key: "contact",
|
|
30
|
+
lead_id: "lead_test",
|
|
31
|
+
confirm_url: "https://example.com/newsletter/confirm?token=test",
|
|
32
|
+
unsubscribe_url: "https://example.com/newsletter/unsubscribe?token=test",
|
|
33
|
+
...(body.data || {}),
|
|
34
|
+
test_email: true,
|
|
35
|
+
});
|
|
36
|
+
let content = body.use_raw === true
|
|
37
|
+
? null
|
|
38
|
+
: body.key
|
|
39
|
+
? await (0, email_center_1.resolveEmailContent)({
|
|
40
|
+
container: req.scope,
|
|
41
|
+
key: String(body.key),
|
|
42
|
+
locale: body.locale,
|
|
43
|
+
data,
|
|
44
|
+
})
|
|
45
|
+
: null;
|
|
46
|
+
if (!content) {
|
|
47
|
+
content = {
|
|
48
|
+
subject: (0, email_center_1.renderTemplateString)(String(body.subject || "Teszt e-mail"), data, false),
|
|
49
|
+
html: (0, email_center_1.renderEmailHtmlDocument)((0, email_center_1.renderTemplateString)(String(body.html || "<p>Teszt e-mail</p>"), data, true), data),
|
|
50
|
+
text: (0, email_center_1.renderTemplateString)(String(body.text || "Teszt e-mail"), data, false),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const result = await (0, email_center_1.sendManagedEmail)({
|
|
54
|
+
container: req.scope,
|
|
55
|
+
to,
|
|
56
|
+
key: body.key || null,
|
|
57
|
+
locale: body.locale,
|
|
58
|
+
content,
|
|
59
|
+
idempotencyKey: `email-test:${Date.now()}:${to}`,
|
|
60
|
+
track: false,
|
|
61
|
+
});
|
|
62
|
+
return res.status(201).json({ delivery: result.delivery });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2VtYWlsL3Rlc3Qtc2VuZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLG9CQW9FQztBQTVFRCxtRUFNeUM7QUFFbEMsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBdUMsRUFDdkMsR0FBbUI7SUFFbkIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7SUFDM0IsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFBLDZCQUFjLEVBQUM7UUFDMUIsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixVQUFVLEVBQUUsT0FBTztRQUNuQixLQUFLLEVBQUUsRUFBRTtRQUNULGlCQUFpQixFQUFFLFFBQVE7UUFDM0IsU0FBUyxFQUFFLCtDQUErQztRQUMxRCxZQUFZLEVBQUUsTUFBTTtRQUNwQixLQUFLLEVBQUUsUUFBUTtRQUNmLGFBQWEsRUFBRSxLQUFLO1FBQ3BCLGVBQWUsRUFBRSxZQUFZO1FBQzdCLFlBQVksRUFBRSx5Q0FBeUM7UUFDdkQsYUFBYSxFQUFFLE9BQU87UUFDdEIsWUFBWSxFQUFFLHNCQUFzQjtRQUNwQyxhQUFhLEVBQUUsRUFBRTtRQUNqQixZQUFZLEVBQUUsWUFBWTtRQUMxQixnQkFBZ0IsRUFBRSxZQUFZO1FBQzlCLElBQUksRUFBRSxtQkFBbUI7UUFDekIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsV0FBVztRQUNwQixXQUFXLEVBQUUsbURBQW1EO1FBQ2hFLGVBQWUsRUFBRSx1REFBdUQ7UUFDeEUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3BCLFVBQVUsRUFBRSxJQUFJO0tBQ2pCLENBQUMsQ0FBQTtJQUVGLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSTtRQUNqQyxDQUFDLENBQUMsSUFBSTtRQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUNSLENBQUMsQ0FBQyxNQUFNLElBQUEsa0NBQW1CLEVBQUM7Z0JBQ3hCLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBYztnQkFDN0IsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLElBQUk7YUFDTCxDQUFDO1lBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVWLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRztZQUNSLE9BQU8sRUFBRSxJQUFBLG1DQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7WUFDbEYsSUFBSSxFQUFFLElBQUEsc0NBQXVCLEVBQzNCLElBQUEsbUNBQW9CLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUkscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQzVFLElBQUksQ0FDTDtZQUNELElBQUksRUFBRSxJQUFBLG1DQUFvQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUM7U0FDN0UsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsK0JBQWdCLEVBQUM7UUFDcEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFjO1FBQzdCLEVBQUU7UUFDRixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJO1FBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtRQUNuQixPQUFPO1FBQ1AsY0FBYyxFQUFFLGNBQWMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNoRCxLQUFLLEVBQUUsS0FBSztLQUNiLENBQUMsQ0FBQTtJQUNGLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7QUFDNUQsQ0FBQyJ9
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
7
|
+
const campaign = await service.retrieveEmailCampaign(req.params.id);
|
|
8
|
+
if (campaign.status === "sent")
|
|
9
|
+
return res.status(409).json({ message: "Elküldött kampány nem állítható le." });
|
|
10
|
+
if (campaign.status === "cancelled")
|
|
11
|
+
return res.json({ campaign });
|
|
12
|
+
const updated = await service.updateEmailCampaigns({ id: campaign.id, status: "cancelled", completed_at: new Date() });
|
|
13
|
+
return res.json({ campaign: updated });
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vY2FuY2VsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esb0JBT0M7QUFURCx5RUFBcUc7QUFFOUYsS0FBSyxVQUFVLElBQUksQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUF1QixDQUFBO0lBQzVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFtQyxDQUFBO0lBQ3JHLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxNQUFNO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxDQUFDLENBQUE7SUFDL0csSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBVyxDQUFDLENBQUE7SUFDL0gsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDeEMsQ0FBQyJ9
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
3
|
+
export declare function POST(req: MedusaRequest<Record<string, any>>, res: MedusaResponse): Promise<MedusaResponse>;
|
|
4
|
+
export declare function DELETE(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
exports.DELETE = DELETE;
|
|
6
|
+
const email_center_1 = require("../../../../../modules/email-center");
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
9
|
+
const campaign = await service.retrieveEmailCampaign(req.params.id);
|
|
10
|
+
const [deliveries, deliveryCount] = await service.listAndCountEmailDeliveries({ campaign_id: req.params.id }, { take: 100, order: { created_at: "DESC" } });
|
|
11
|
+
return res.json({ campaign, deliveries, delivery_count: deliveryCount });
|
|
12
|
+
}
|
|
13
|
+
async function POST(req, res) {
|
|
14
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
15
|
+
const current = await service.retrieveEmailCampaign(req.params.id);
|
|
16
|
+
if (["sending", "sent"].includes(current.status))
|
|
17
|
+
return res.status(409).json({ message: "Küldés alatt vagy már elküldött kampány tartalma nem módosítható." });
|
|
18
|
+
const body = req.body || {};
|
|
19
|
+
const values = { id: req.params.id };
|
|
20
|
+
for (const key of ["name", "subject", "html", "text", "template_key", "segment", "metadata"])
|
|
21
|
+
if (key in body)
|
|
22
|
+
values[key] = body[key];
|
|
23
|
+
if ("locale" in body)
|
|
24
|
+
values.locale = (0, email_center_1.normalizeLocale)(body.locale);
|
|
25
|
+
if ("scheduled_at" in body) {
|
|
26
|
+
values.scheduled_at = body.scheduled_at ? new Date(body.scheduled_at) : null;
|
|
27
|
+
values.status = body.scheduled_at ? "scheduled" : "draft";
|
|
28
|
+
}
|
|
29
|
+
return res.json({ campaign: await service.updateEmailCampaigns(values) });
|
|
30
|
+
}
|
|
31
|
+
async function DELETE(req, res) {
|
|
32
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
33
|
+
const current = await service.retrieveEmailCampaign(req.params.id);
|
|
34
|
+
if (current.status === "sending")
|
|
35
|
+
return res.status(409).json({ message: "Küldés alatt álló kampány nem törölhető." });
|
|
36
|
+
await service.deleteEmailCampaigns(req.params.id);
|
|
37
|
+
return res.json({ id: req.params.id, deleted: true });
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFLQztBQUVELG9CQWFDO0FBRUQsd0JBTUM7QUE5QkQsc0VBQW1IO0FBRTVHLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFXLENBQUMsQ0FBQTtJQUM3SyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFBO0FBQzFFLENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXVDLEVBQUUsR0FBbUI7SUFDckYsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQW1DLENBQUE7SUFDcEcsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsbUVBQW1FLEVBQUUsQ0FBQyxDQUFBO0lBQy9KLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFBO0lBQzNCLE1BQU0sTUFBTSxHQUE0QixFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFBO0lBQzdELEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7UUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0SSxJQUFJLFFBQVEsSUFBSSxJQUFJO1FBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFBLDhCQUFlLEVBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ2xFLElBQUksY0FBYyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDNUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUMzRCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDLG9CQUFvQixDQUFDLE1BQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUNwRixDQUFDO0FBRU0sS0FBSyxVQUFVLE1BQU0sQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUF1QixDQUFBO0lBQzVFLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFtQyxDQUFBO0lBQ3BHLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxDQUFDLENBQUE7SUFDdEgsTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDdkQsQ0FBQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
7
|
+
const campaign = await service.retrieveEmailCampaign(req.params.id);
|
|
8
|
+
if (["sent", "cancelled"].includes(campaign.status))
|
|
9
|
+
return res.status(409).json({ message: "Ez a kampány már nem indítható." });
|
|
10
|
+
await service.updateEmailCampaigns({ id: campaign.id, status: "sending", scheduled_at: null, started_at: campaign.started_at || new Date() });
|
|
11
|
+
const updated = await (0, email_center_1.processCampaignBatch)(req.scope, campaign.id);
|
|
12
|
+
return res.json({ campaign: updated });
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vc2VuZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLG9CQU9DO0FBVEQseUVBQTJIO0FBRXBILEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBbUMsQ0FBQTtJQUNyRyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDLENBQUE7SUFDaEksTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBVyxDQUFDLENBQUE7SUFDdEosTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLG1DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFjLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3hDLENBQUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
await (0, email_center_1.refreshCampaignStats)(req.scope, req.params.id);
|
|
7
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
8
|
+
const campaign = await service.retrieveEmailCampaign(req.params.id);
|
|
9
|
+
const statuses = ["queued", "sent", "delivered", "opened", "clicked", "failed", "bounced"];
|
|
10
|
+
const deliveries = {};
|
|
11
|
+
for (const status of statuses) {
|
|
12
|
+
const [, count] = await service.listAndCountEmailDeliveries({ campaign_id: req.params.id, status }, { take: 1 });
|
|
13
|
+
deliveries[status] = count;
|
|
14
|
+
}
|
|
15
|
+
return res.json({ campaign, deliveries });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vc3RhdHMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFXQztBQWJELHlFQUEySDtBQUVwSCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxJQUFBLG1DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFjLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM3RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ25FLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDMUYsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQTtJQUM3QyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBVyxDQUF3QyxDQUFBO1FBQ3pLLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDNUIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0FBQzNDLENBQUMifQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
async function POST(req, res) {
|
|
6
|
+
const to = String(req.body?.to || "").trim().toLowerCase();
|
|
7
|
+
if (!/^\S+@\S+\.\S+$/.test(to))
|
|
8
|
+
return res.status(400).json({ message: "Érvényes teszt e-mail-cím szükséges." });
|
|
9
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
10
|
+
const campaign = await service.retrieveEmailCampaign(req.params.id);
|
|
11
|
+
const unsubscribeUrl = "https://example.com/unsubscribe-test";
|
|
12
|
+
const data = (0, email_center_1.emailVariables)({ email: to, unsubscribe_url: unsubscribeUrl });
|
|
13
|
+
let content = {
|
|
14
|
+
subject: (0, email_center_1.renderTemplateString)(campaign.subject, data, false),
|
|
15
|
+
html: (0, email_center_1.renderTemplateString)(campaign.html, data, true),
|
|
16
|
+
text: (0, email_center_1.renderTemplateString)(campaign.text, data, false),
|
|
17
|
+
};
|
|
18
|
+
content = (0, email_center_1.ensureMarketingUnsubscribe)(content, unsubscribeUrl, campaign.locale);
|
|
19
|
+
content.html = (0, email_center_1.renderEmailHtmlDocument)(content.html, data);
|
|
20
|
+
const result = await (0, email_center_1.sendManagedEmail)({ container: req.scope, to, content, locale: campaign.locale, idempotencyKey: `campaign-test:${campaign.id}:${Date.now()}:${to}`, track: false });
|
|
21
|
+
return res.status(201).json({ delivery: result.delivery });
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL1tpZF0vdGVzdC1zZW5kL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esb0JBZ0JDO0FBbEJELHlFQUFrTjtBQUUzTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXVDLEVBQUUsR0FBbUI7SUFDckYsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDLENBQUE7SUFDaEgsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQW1CLENBQXVCLENBQUE7SUFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQW1DLENBQUE7SUFDckcsTUFBTSxjQUFjLEdBQUcsc0NBQXNDLENBQUE7SUFDN0QsTUFBTSxJQUFJLEdBQUcsSUFBQSw2QkFBYyxFQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUMzRSxJQUFJLE9BQU8sR0FBRztRQUNaLE9BQU8sRUFBRSxJQUFBLG1DQUFvQixFQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUM1RCxJQUFJLEVBQUUsSUFBQSxtQ0FBb0IsRUFBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7UUFDckQsSUFBSSxFQUFFLElBQUEsbUNBQW9CLEVBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDO0tBQ3ZELENBQUE7SUFDRCxPQUFPLEdBQUcsSUFBQSx5Q0FBMEIsRUFBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM5RSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUEsc0NBQXVCLEVBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsK0JBQWdCLEVBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQWMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDaE0sT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtBQUM1RCxDQUFDIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
3
|
+
export declare function POST(req: MedusaRequest<Record<string, any>>, res: MedusaResponse): Promise<MedusaResponse>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const email_center_1 = require("../../../../modules/email-center");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
8
|
+
const limit = clamp(req.query?.limit, 1, 200, 50);
|
|
9
|
+
const offset = clamp(req.query?.offset, 0, 1000000, 0);
|
|
10
|
+
const filters = {};
|
|
11
|
+
if (typeof req.query?.status === "string" && req.query.status)
|
|
12
|
+
filters.status = req.query.status;
|
|
13
|
+
const [campaigns, count] = await service.listAndCountEmailCampaigns(filters, { take: limit, skip: offset, order: { created_at: "DESC" } });
|
|
14
|
+
return res.json({ campaigns, count, limit, offset });
|
|
15
|
+
}
|
|
16
|
+
async function POST(req, res) {
|
|
17
|
+
const body = req.body || {};
|
|
18
|
+
const name = required(body.name, "Kampánynév");
|
|
19
|
+
const subject = required(body.subject, "Tárgy");
|
|
20
|
+
const html = required(body.html, "HTML tartalom");
|
|
21
|
+
const text = required(body.text, "Szöveges tartalom");
|
|
22
|
+
const scheduledAt = body.scheduled_at ? new Date(body.scheduled_at) : null;
|
|
23
|
+
if (scheduledAt && Number.isNaN(scheduledAt.getTime()))
|
|
24
|
+
return res.status(400).json({ message: "Érvénytelen időzítés." });
|
|
25
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
26
|
+
const campaign = await service.createEmailCampaigns({
|
|
27
|
+
name, subject, html, text,
|
|
28
|
+
locale: (0, email_center_1.normalizeLocale)(body.locale),
|
|
29
|
+
template_key: typeof body.template_key === "string" && body.template_key.trim() ? body.template_key.trim() : null,
|
|
30
|
+
segment: body.segment && typeof body.segment === "object" ? body.segment : null,
|
|
31
|
+
scheduled_at: scheduledAt,
|
|
32
|
+
status: scheduledAt ? "scheduled" : "draft",
|
|
33
|
+
metadata: body.metadata && typeof body.metadata === "object" ? body.metadata : null,
|
|
34
|
+
});
|
|
35
|
+
return res.status(201).json({ campaign });
|
|
36
|
+
}
|
|
37
|
+
function required(value, label) { const text = typeof value === "string" ? value.trim() : ""; if (!text)
|
|
38
|
+
throw new Error(`${label} megadása kötelező.`); return text; }
|
|
39
|
+
function clamp(value, min, max, fallback) { const n = Number(Array.isArray(value) ? value[0] : value); return Number.isInteger(n) ? Math.max(min, Math.min(max, n)) : fallback; }
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL25ld3NsZXR0ZXIvY2FtcGFpZ25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esa0JBUUM7QUFFRCxvQkFtQkM7QUEvQkQsbUVBQWdIO0FBRXpHLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBbUIsQ0FBdUIsQ0FBQTtJQUM1RSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN0RCxNQUFNLE9BQU8sR0FBNEIsRUFBRSxDQUFBO0lBQzNDLElBQUksT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtJQUNoRyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLDBCQUEwQixDQUFDLE9BQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFXLENBQUMsQ0FBQTtJQUM1SixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxN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
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const email_center_1 = require("../../../../modules/email-center");
|
|
6
|
+
async function POST(req, res) {
|
|
7
|
+
if (!authorized(req))
|
|
8
|
+
return res.status(401).json({ message: "Unauthorized" });
|
|
9
|
+
const events = Array.isArray(req.body) ? req.body : [req.body || {}];
|
|
10
|
+
const results = [];
|
|
11
|
+
for (const body of events.slice(0, 1000))
|
|
12
|
+
results.push(await processEvent(req, body));
|
|
13
|
+
return res.json({ processed: results.length, results });
|
|
14
|
+
}
|
|
15
|
+
async function processEvent(req, body) {
|
|
16
|
+
const event = normalizeEvent(body.event || body.type);
|
|
17
|
+
if (!event)
|
|
18
|
+
return { ok: false, message: "Unsupported event" };
|
|
19
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
20
|
+
const deliveryId = String(body.delivery_id || body.hszrdm_delivery_id || body.unique_args?.hszrdm_delivery_id || body.custom_args?.hszrdm_delivery_id || "").trim();
|
|
21
|
+
const providerMessageId = String(body.provider_message_id || body.message_id || body.sg_message_id || "").trim();
|
|
22
|
+
let delivery;
|
|
23
|
+
if (deliveryId) {
|
|
24
|
+
try {
|
|
25
|
+
delivery = await service.retrieveEmailDelivery(deliveryId);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
delivery = undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!delivery && providerMessageId) {
|
|
32
|
+
const rows = await service.listEmailDeliveries({ provider_message_id: providerMessageId }, { take: 1 });
|
|
33
|
+
delivery = rows[0];
|
|
34
|
+
}
|
|
35
|
+
if (!delivery)
|
|
36
|
+
return { ok: false, message: "Delivery not found", delivery_id: deliveryId || null, provider_message_id: providerMessageId || null };
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const preserveEngagement = ["opened", "clicked"].includes(delivery.status) && event === "delivered";
|
|
39
|
+
const updated = await service.updateEmailDeliveries({
|
|
40
|
+
id: delivery.id,
|
|
41
|
+
status: preserveEngagement ? delivery.status : event,
|
|
42
|
+
provider_message_id: providerMessageId || delivery.provider_message_id || null,
|
|
43
|
+
...(event === "delivered" ? { delivered_at: delivery.delivered_at || now } : { failed_at: delivery.failed_at || now, error: String(body.error || body.reason || body.response || event).slice(0, 4000) }),
|
|
44
|
+
});
|
|
45
|
+
if (delivery.campaign_id)
|
|
46
|
+
await (0, email_center_1.refreshCampaignStats)(req.scope, delivery.campaign_id);
|
|
47
|
+
return { ok: true, delivery_id: delivery.id, status: preserveEngagement ? delivery.status : event, delivery: updated };
|
|
48
|
+
}
|
|
49
|
+
function normalizeEvent(value) {
|
|
50
|
+
const event = String(value || "").toLowerCase();
|
|
51
|
+
if (["delivered", "delivery"].includes(event))
|
|
52
|
+
return "delivered";
|
|
53
|
+
if (["bounce", "bounced", "blocked", "dropped"].includes(event))
|
|
54
|
+
return "bounced";
|
|
55
|
+
if (["failed", "failure", "deferred"].includes(event))
|
|
56
|
+
return "failed";
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function authorized(req) {
|
|
60
|
+
const secret = process.env.EMAIL_WEBHOOK_SECRET || "";
|
|
61
|
+
if (!secret)
|
|
62
|
+
return false;
|
|
63
|
+
const auth = String(req.headers.authorization || "");
|
|
64
|
+
const supplied = auth.startsWith("Bearer ") ? auth.slice(7) : String(req.headers["x-email-webhook-secret"] || "");
|
|
65
|
+
const a = Buffer.from((0, node_crypto_1.createHash)("sha256").update(supplied).digest("hex"));
|
|
66
|
+
const b = Buffer.from((0, node_crypto_1.createHash)("sha256").update(secret).digest("hex"));
|
|
67
|
+
return a.length === b.length && (0, node_crypto_1.timingSafeEqual)(a, b);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL2VtYWlsL3N0YXR1cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLG9CQU1DO0FBVkQsNkNBQXlEO0FBRXpELG1FQUFxSDtBQUU5RyxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQW9FLEVBQUUsR0FBbUI7SUFDbEgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDOUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNwRSxNQUFNLE9BQU8sR0FBbUMsRUFBRSxDQUFBO0lBQ2xELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNyRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFFRCxLQUFLLFVBQVUsWUFBWSxDQUFDLEdBQWtCLEVBQUUsSUFBeUI7SUFDdkUsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQyxLQUFLO1FB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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
const payload = (0, email_center_1.verifyEmailTrackingToken)(req.params.token);
|
|
7
|
+
if (!payload?.url)
|
|
8
|
+
return res.status(400).json({ message: "Érvénytelen tracking link." });
|
|
9
|
+
try {
|
|
10
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
11
|
+
const delivery = await service.retrieveEmailDelivery(payload.delivery_id);
|
|
12
|
+
await service.updateEmailDeliveries({ id: delivery.id, status: "clicked", opened_at: delivery.opened_at || new Date(), clicked_at: delivery.clicked_at || new Date(), click_count: Number(delivery.click_count || 0) + 1 });
|
|
13
|
+
if (delivery.campaign_id)
|
|
14
|
+
await (0, email_center_1.refreshCampaignStats)(req.scope, delivery.campaign_id);
|
|
15
|
+
}
|
|
16
|
+
catch { /* A valid signed URL can still redirect if persistence is unavailable. */ }
|
|
17
|
+
return res.redirect(302, payload.url);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2VtYWlsL3RyYWNrL2NsaWNrL1t0b2tlbl0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxrQkFVQztBQVpELHlFQUFxSjtBQUU5SSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBQSx1Q0FBd0IsRUFBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzFELElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQyxDQUFBO0lBQ3pGLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUF1QixDQUFBO1FBQzVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQW1DLENBQUE7UUFDM0csTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFXLENBQUMsQ0FBQTtRQUNwTyxJQUFJLFFBQVEsQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFBLG1DQUFvQixFQUFDLEdBQUcsQ0FBQyxLQUFjLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2hHLENBQUM7SUFBQyxNQUFNLENBQUMsQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3ZDLENBQUMifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const email_center_1 = require("../../../../../../modules/email-center");
|
|
5
|
+
const GIF = Buffer.from("R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=", "base64");
|
|
6
|
+
async function GET(req, res) {
|
|
7
|
+
const payload = (0, email_center_1.verifyEmailTrackingToken)(req.params.token);
|
|
8
|
+
if (payload) {
|
|
9
|
+
try {
|
|
10
|
+
const service = req.scope.resolve(email_center_1.EMAIL_CENTER_MODULE);
|
|
11
|
+
const delivery = await service.retrieveEmailDelivery(payload.delivery_id);
|
|
12
|
+
await service.updateEmailDeliveries({ id: delivery.id, status: delivery.status === "clicked" ? "clicked" : "opened", opened_at: delivery.opened_at || new Date(), open_count: Number(delivery.open_count || 0) + 1 });
|
|
13
|
+
if (delivery.campaign_id)
|
|
14
|
+
await (0, email_center_1.refreshCampaignStats)(req.scope, delivery.campaign_id);
|
|
15
|
+
}
|
|
16
|
+
catch { /* Tracking must never break image delivery. */ }
|
|
17
|
+
}
|
|
18
|
+
res.setHeader("Content-Type", "image/gif");
|
|
19
|
+
res.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate");
|
|
20
|
+
return res.status(200).send(GIF);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2VtYWlsL3RyYWNrL29wZW4vW3Rva2VuXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLGtCQWFDO0FBaEJELHlFQUFxSjtBQUVySixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0FBQ2xFLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFBLHVDQUF3QixFQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtDQUFtQixDQUF1QixDQUFBO1lBQzVFLE1BQU0sUUFBUSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQW1DLENBQUE7WUFDM0csTUFBTSxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBVyxDQUFDLENBQUE7WUFDOU4sSUFBSSxRQUFRLENBQUMsV0FBVztnQkFBRSxNQUFNLElBQUEsbUNBQW9CLEVBQUMsR0FBRyxDQUFDLEtBQWMsRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDaEcsQ0FBQztRQUFDLE1BQU0sQ0FBQyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQzFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLHVEQUF1RCxDQUFDLENBQUE7SUFDdkYsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNsQyxDQUFDIn0=
|