@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
4
|
const core_audit_1 = require("../../../modules/core-audit");
|
|
5
|
+
const email_center_1 = require("../../../modules/email-center");
|
|
6
6
|
const lead_1 = require("../../../modules/lead");
|
|
7
7
|
async function POST(req, res) {
|
|
8
8
|
const config = (0, lead_1.loadLeadConfig)();
|
|
@@ -15,67 +15,28 @@ async function POST(req, res) {
|
|
|
15
15
|
return res.status(404).json({ message: "Ismeretlen vagy kikapcsolt űrlap." });
|
|
16
16
|
const fingerprint = (0, lead_1.clientFingerprint)(req.headers);
|
|
17
17
|
const email = optionalText(req.body.email, 240)?.toLowerCase() || null;
|
|
18
|
-
const allowed = await (0, lead_1.checkLeadRateLimit)({
|
|
19
|
-
fingerprint,
|
|
20
|
-
email,
|
|
21
|
-
max: config.rateLimitMax,
|
|
22
|
-
windowSeconds: config.rateLimitWindowSeconds,
|
|
23
|
-
});
|
|
18
|
+
const allowed = await (0, lead_1.checkLeadRateLimit)({ fingerprint, email, max: config.rateLimitMax, windowSeconds: config.rateLimitWindowSeconds });
|
|
24
19
|
if (!allowed)
|
|
25
20
|
return res.status(429).json({ message: "Túl sok beküldési kísérlet. Próbáld újra később." });
|
|
26
|
-
const spam = (0, lead_1.assessLeadSpam)({
|
|
27
|
-
honeypotValue: req.body[config.honeypotField],
|
|
28
|
-
formStartedAt: req.body.form_started_at,
|
|
29
|
-
});
|
|
30
|
-
// Honeypot hits are intentionally acknowledged but not persisted. This
|
|
31
|
-
// avoids filling the database with bot payloads and doesn't reveal the trap.
|
|
21
|
+
const spam = (0, lead_1.assessLeadSpam)({ honeypotValue: req.body[config.honeypotField], formStartedAt: req.body.form_started_at });
|
|
32
22
|
if (spam.spam)
|
|
33
23
|
return res.status(201).json({ lead: { id: null, status: "received" } });
|
|
34
24
|
if (config.turnstile.enabled) {
|
|
35
|
-
const turnstileOk = await (0, lead_1.verifyTurnstile)({
|
|
36
|
-
token: optionalText(req.body.turnstile_token, 5000),
|
|
37
|
-
secretKey: config.turnstile.secretKey,
|
|
38
|
-
});
|
|
25
|
+
const turnstileOk = await (0, lead_1.verifyTurnstile)({ token: optionalText(req.body.turnstile_token, 5000), secretKey: config.turnstile.secretKey });
|
|
39
26
|
if (!turnstileOk)
|
|
40
27
|
return res.status(400).json({ message: "A spamvédelmi ellenőrzés nem sikerült." });
|
|
41
28
|
}
|
|
42
29
|
const standard = normalizeStandardFields(req.body, form.required_standard_fields);
|
|
43
30
|
const fields = normalizeFields(req.body.fields, form.fields);
|
|
44
31
|
const consentAccepted = req.body.privacy_consent === true;
|
|
45
|
-
if (form.privacy.required && !consentAccepted)
|
|
32
|
+
if (form.privacy.required && !consentAccepted)
|
|
46
33
|
throw new Error("Az adatkezelési hozzájárulás kötelező.");
|
|
47
|
-
}
|
|
48
34
|
const service = req.scope.resolve(lead_1.LEAD_MODULE);
|
|
49
35
|
const customerId = req.auth_context?.actor_id || null;
|
|
50
|
-
const lead = await service.createLeads({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
...standard,
|
|
54
|
-
fields,
|
|
55
|
-
source: optionalText(req.body.source, 160),
|
|
56
|
-
page_url: optionalText(req.body.page_url, 2000),
|
|
57
|
-
referrer: optionalText(req.body.referrer, 2000),
|
|
58
|
-
utm: normalizeRecord(req.body.utm, 20, 500),
|
|
59
|
-
customer_id: customerId,
|
|
60
|
-
privacy_consent_at: consentAccepted ? new Date() : null,
|
|
61
|
-
privacy_policy_version: form.privacy.version,
|
|
62
|
-
privacy_policy_url: form.privacy.url,
|
|
63
|
-
privacy_policy_label: form.privacy.label,
|
|
64
|
-
request_fingerprint: fingerprint,
|
|
65
|
-
spam_score: spam.score,
|
|
66
|
-
spam_reasons: spam.reasons,
|
|
67
|
-
});
|
|
68
|
-
await (0, core_audit_1.writeCoreAudit)(req.scope, {
|
|
69
|
-
action: "lead.created",
|
|
70
|
-
resourceType: "lead",
|
|
71
|
-
resourceId: lead.id,
|
|
72
|
-
integration: "lead",
|
|
73
|
-
summary: `Új lead: ${form.key}.`,
|
|
74
|
-
details: { form_key: form.key, spam_score: spam.score, spam_reasons: spam.reasons },
|
|
75
|
-
});
|
|
76
|
-
if (config.emailEnabled) {
|
|
36
|
+
const lead = await service.createLeads({ form_key: form.key, status: "new", ...standard, fields, source: optionalText(req.body.source, 160), page_url: optionalText(req.body.page_url, 2000), referrer: optionalText(req.body.referrer, 2000), utm: normalizeRecord(req.body.utm, 20, 500), customer_id: customerId, privacy_consent_at: consentAccepted ? new Date() : null, privacy_policy_version: form.privacy.version, privacy_policy_url: form.privacy.url, privacy_policy_label: form.privacy.label, request_fingerprint: fingerprint, spam_score: spam.score, spam_reasons: spam.reasons });
|
|
37
|
+
await (0, core_audit_1.writeCoreAudit)(req.scope, { action: "lead.created", resourceType: "lead", resourceId: lead.id, integration: "lead", summary: `Új lead: ${form.key}.`, details: { form_key: form.key, spam_score: spam.score, spam_reasons: spam.reasons } });
|
|
38
|
+
if (config.emailEnabled)
|
|
77
39
|
await notify(req, lead, config.adminEmails, config.customerEmailEnabled);
|
|
78
|
-
}
|
|
79
40
|
return res.status(201).json({ lead: { id: lead.id, status: "new" } });
|
|
80
41
|
}
|
|
81
42
|
catch (error) {
|
|
@@ -83,41 +44,25 @@ async function POST(req, res) {
|
|
|
83
44
|
}
|
|
84
45
|
}
|
|
85
46
|
async function notify(req, lead, adminEmails, customerEmailEnabled) {
|
|
86
|
-
let notifications;
|
|
87
|
-
try {
|
|
88
|
-
notifications = req.scope.resolve(utils_1.Modules.NOTIFICATION);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
47
|
const brand = process.env.STORE_NAME || process.env.VITE_ADMIN_BRAND_NAME || "HSZRDM Commerce";
|
|
48
|
+
const locale = process.env.STORE_LOCALE;
|
|
49
|
+
const data = { lead_id: lead.id, form_key: lead.form_key, name: lead.name || "", email: lead.email || "", phone: lead.phone || "", company: lead.company || "", message: lead.message || "", fields: lead.fields || {}, source: lead.source || "" };
|
|
94
50
|
const tasks = [];
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
idempotency_key: `lead-created-admin-${lead.id}-${to}`,
|
|
101
|
-
}));
|
|
102
|
-
}
|
|
51
|
+
const adminFallback = (0, lead_1.leadAdminEmail)(lead, brand);
|
|
52
|
+
const adminContent = await (0, email_center_1.resolveEmailContent)({ container: req.scope, key: "lead.created.admin", locale, data, fallback: adminFallback });
|
|
53
|
+
if (adminContent)
|
|
54
|
+
for (const to of adminEmails)
|
|
55
|
+
tasks.push((0, email_center_1.sendManagedEmail)({ container: req.scope, to, key: "lead.created.admin", locale, content: adminContent, idempotencyKey: `lead-created-admin-${lead.id}-${to}`, resourceId: lead.id, resourceType: "lead", track: false }));
|
|
103
56
|
if (customerEmailEnabled && lead.email) {
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
idempotency_key: `lead-created-customer-${lead.id}`,
|
|
109
|
-
}));
|
|
57
|
+
const customerFallback = (0, lead_1.leadCustomerEmail)(lead, brand);
|
|
58
|
+
const customerContent = await (0, email_center_1.resolveEmailContent)({ container: req.scope, key: "lead.created", locale, data, fallback: customerFallback });
|
|
59
|
+
if (customerContent)
|
|
60
|
+
tasks.push((0, email_center_1.sendManagedEmail)({ container: req.scope, to: lead.email, key: "lead.created", locale, content: customerContent, idempotencyKey: `lead-created-customer-${lead.id}`, resourceId: lead.id, resourceType: "lead", track: false }));
|
|
110
61
|
}
|
|
111
62
|
await Promise.allSettled(tasks);
|
|
112
63
|
}
|
|
113
64
|
function normalizeStandardFields(body, required) {
|
|
114
|
-
const values = {
|
|
115
|
-
name: optionalText(body.name, 240),
|
|
116
|
-
email: optionalText(body.email, 240)?.toLowerCase() || null,
|
|
117
|
-
phone: optionalText(body.phone, 80),
|
|
118
|
-
company: optionalText(body.company, 240),
|
|
119
|
-
message: optionalText(body.message, 10000),
|
|
120
|
-
};
|
|
65
|
+
const values = { name: optionalText(body.name, 240), email: optionalText(body.email, 240)?.toLowerCase() || null, phone: optionalText(body.phone, 80), company: optionalText(body.company, 240), message: optionalText(body.message, 10000) };
|
|
121
66
|
for (const key of required)
|
|
122
67
|
if (!values[key])
|
|
123
68
|
throw new Error(`${key} megadása kötelező.`);
|
|
@@ -155,22 +100,11 @@ function normalizeField(value, field) {
|
|
|
155
100
|
throw new Error(`${field.label}: érvénytelen választás.`);
|
|
156
101
|
return text;
|
|
157
102
|
}
|
|
158
|
-
function normalizeRecord(value, maxEntries, maxLength) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
const result = optionalText(value, max);
|
|
165
|
-
if (!result)
|
|
166
|
-
throw new Error(`${label} megadása kötelező.`);
|
|
167
|
-
return result;
|
|
168
|
-
}
|
|
169
|
-
function optionalText(value, max) {
|
|
170
|
-
if (typeof value !== "string")
|
|
171
|
-
return null;
|
|
172
|
-
const result = value.trim();
|
|
173
|
-
return result ? result.slice(0, max) : null;
|
|
174
|
-
}
|
|
103
|
+
function normalizeRecord(value, maxEntries, maxLength) { if (!value || typeof value !== "object" || Array.isArray(value))
|
|
104
|
+
return {}; return Object.fromEntries(Object.entries(value).slice(0, maxEntries).map(([key, raw]) => [key.slice(0, 80), optionalText(raw, maxLength)])); }
|
|
105
|
+
function requiredText(value, label, max) { const result = optionalText(value, max); if (!result)
|
|
106
|
+
throw new Error(`${label} megadása kötelező.`); return result; }
|
|
107
|
+
function optionalText(value, max) { if (typeof value !== "string")
|
|
108
|
+
return null; const result = value.trim(); return result ? result.slice(0, max) : null; }
|
|
175
109
|
function isEmpty(value) { return value == null || value === "" || value === false; }
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2xlYWRzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUJBLG9CQWdGQztBQWxHRCxxREFBbUQ7QUFDbkQsNERBQTREO0FBQzVELGdEQVc4QjtBQUt2QixLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXdCLEVBQUUsR0FBbUI7SUFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxHQUFFLENBQUE7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxDQUFDLENBQUE7SUFFeEcsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDN0YsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLENBQUMsQ0FBQTtRQUV4RixNQUFNLFdBQVcsR0FBRyxJQUFBLHdCQUFpQixFQUFDLEdBQUcsQ0FBQyxPQUFrQyxDQUFDLENBQUE7UUFDN0UsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUks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
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2xlYWRzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9CQXFDQztBQXRERCw0REFBNEQ7QUFDNUQsZ0VBQXFGO0FBQ3JGLGdEQVc4QjtBQUl2QixLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQXdCLEVBQUUsR0FBbUI7SUFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxHQUFFLENBQUE7SUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxDQUFDLENBQUE7SUFFeEcsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDN0YsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLENBQUMsQ0FBQTtRQUV4RixNQUFNLFdBQVcsR0FBRyxJQUFBLHdCQUFpQixFQUFDLEdBQUcsQ0FBQyxPQUFrQyxDQUFDLENBQUE7UUFDN0UsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUks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
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
4
|
const core_audit_1 = require("../../../modules/core-audit");
|
|
5
|
+
const email_center_1 = require("../../../modules/email-center");
|
|
6
6
|
const newsletter_1 = require("../../../modules/newsletter");
|
|
7
7
|
async function POST(req, res) {
|
|
8
8
|
const config = (0, newsletter_1.loadNewsletterConfig)();
|
|
@@ -10,9 +10,8 @@ async function POST(req, res) {
|
|
|
10
10
|
return res.status(404).json({ message: "A hírlevél-feliratkozás jelenleg nem elérhető." });
|
|
11
11
|
if (req.body?.consent !== true)
|
|
12
12
|
return res.status(400).json({ message: "A hírlevél-hozzájárulás elfogadása kötelező." });
|
|
13
|
-
if (config.doubleOptIn && !config.emailEnabled)
|
|
13
|
+
if (config.doubleOptIn && !config.emailEnabled)
|
|
14
14
|
return res.status(503).json({ message: "A double opt-in aktív, de a megerősítő e-mail küldése nincs engedélyezve." });
|
|
15
|
-
}
|
|
16
15
|
try {
|
|
17
16
|
const email = (0, newsletter_1.normalizeNewsletterEmail)(req.body.email);
|
|
18
17
|
const source = optionalText(req.body.source, 160);
|
|
@@ -22,51 +21,22 @@ async function POST(req, res) {
|
|
|
22
21
|
const now = new Date();
|
|
23
22
|
const [existing] = await service.listNewsletterSubscribers({ email }, { take: 1 });
|
|
24
23
|
if (existing?.status === "subscribed") {
|
|
25
|
-
const updated = await service.updateNewsletterSubscribers({
|
|
26
|
-
id: existing.id,
|
|
27
|
-
consent_at: now,
|
|
28
|
-
consent_version: config.consentVersion,
|
|
29
|
-
consent_url: config.consentUrl,
|
|
30
|
-
source: source || existing.source || null,
|
|
31
|
-
page_url: pageUrl || existing.page_url || null,
|
|
32
|
-
utm: Object.keys(utm).length ? utm : existing.utm || null,
|
|
33
|
-
});
|
|
24
|
+
const updated = await service.updateNewsletterSubscribers({ id: existing.id, consent_at: now, consent_version: config.consentVersion, consent_url: config.consentUrl, source: source || existing.source || null, page_url: pageUrl || existing.page_url || null, utm: Object.keys(utm).length ? utm : existing.utm || null });
|
|
34
25
|
await audit(req, updated, "newsletter.subscription.duplicate", "Meglévő hírlevél-feliratkozás megerősítve.");
|
|
35
26
|
return res.status(200).json({ subscriber: publicState(updated), message: "A feliratkozás már aktív." });
|
|
36
27
|
}
|
|
37
28
|
const confirmation = config.doubleOptIn ? (0, newsletter_1.createNewsletterToken)() : null;
|
|
38
|
-
const confirmationExpiresAt = confirmation
|
|
39
|
-
|
|
40
|
-
: null;
|
|
41
|
-
const input = {
|
|
42
|
-
email,
|
|
43
|
-
status: config.doubleOptIn ? "pending" : "subscribed",
|
|
44
|
-
source,
|
|
45
|
-
page_url: pageUrl,
|
|
46
|
-
utm: Object.keys(utm).length ? utm : null,
|
|
47
|
-
consent_at: now,
|
|
48
|
-
consent_version: config.consentVersion,
|
|
49
|
-
consent_url: config.consentUrl,
|
|
50
|
-
double_opt_in: config.doubleOptIn,
|
|
51
|
-
confirmation_token_hash: confirmation?.hash || null,
|
|
52
|
-
confirmation_sent_at: null,
|
|
53
|
-
confirmation_expires_at: confirmationExpiresAt,
|
|
54
|
-
confirmed_at: null,
|
|
55
|
-
subscribed_at: config.doubleOptIn ? null : now,
|
|
56
|
-
unsubscribed_at: null,
|
|
57
|
-
};
|
|
29
|
+
const confirmationExpiresAt = confirmation ? new Date(now.getTime() + config.confirmationTtlHours * 60 * 60 * 1000) : null;
|
|
30
|
+
const input = { email, status: config.doubleOptIn ? "pending" : "subscribed", source, page_url: pageUrl, utm: Object.keys(utm).length ? utm : null, consent_at: now, consent_version: config.consentVersion, consent_url: config.consentUrl, double_opt_in: config.doubleOptIn, confirmation_token_hash: confirmation?.hash || null, confirmation_sent_at: null, confirmation_expires_at: confirmationExpiresAt, confirmed_at: null, subscribed_at: config.doubleOptIn ? null : now, unsubscribed_at: null };
|
|
58
31
|
let subscriber;
|
|
59
32
|
let ownsGeneratedConfirmationToken = true;
|
|
60
|
-
if (existing)
|
|
33
|
+
if (existing)
|
|
61
34
|
subscriber = await service.updateNewsletterSubscribers({ id: existing.id, ...input });
|
|
62
|
-
}
|
|
63
35
|
else {
|
|
64
36
|
try {
|
|
65
37
|
subscriber = await service.createNewsletterSubscribers(input);
|
|
66
38
|
}
|
|
67
39
|
catch (error) {
|
|
68
|
-
// A unique e-mail index protects concurrent duplicate submissions. If
|
|
69
|
-
// another request won the race, its confirmation token remains authoritative.
|
|
70
40
|
const [raced] = await service.listNewsletterSubscribers({ email }, { take: 1 });
|
|
71
41
|
if (!raced)
|
|
72
42
|
throw error;
|
|
@@ -77,69 +47,33 @@ async function POST(req, res) {
|
|
|
77
47
|
if (config.doubleOptIn && confirmation && subscriber.status === "pending" && ownsGeneratedConfirmationToken) {
|
|
78
48
|
const sent = await sendConfirmation(req, subscriber, confirmation.token);
|
|
79
49
|
if (!sent) {
|
|
80
|
-
await (0, core_audit_1.writeCoreAudit)(req.scope, {
|
|
81
|
-
|
|
82
|
-
resourceType: "newsletter_subscriber",
|
|
83
|
-
resourceId: subscriber.id,
|
|
84
|
-
integration: "newsletter",
|
|
85
|
-
status: "error",
|
|
86
|
-
summary: "A hírlevél megerősítő e-mail létrehozása nem sikerült.",
|
|
87
|
-
details: { source: subscriber.source, consent_version: subscriber.consent_version },
|
|
88
|
-
});
|
|
89
|
-
return res.status(503).json({
|
|
90
|
-
subscriber: publicState(subscriber),
|
|
91
|
-
message: "A feliratkozást rögzítettük, de a megerősítő e-mail küldése nem sikerült. Próbáld újra később.",
|
|
92
|
-
});
|
|
50
|
+
await (0, core_audit_1.writeCoreAudit)(req.scope, { action: "newsletter.confirmation.error", resourceType: "newsletter_subscriber", resourceId: subscriber.id, integration: "newsletter", status: "error", summary: "A hírlevél megerősítő e-mail létrehozása nem sikerült.", details: { source: subscriber.source, consent_version: subscriber.consent_version } });
|
|
51
|
+
return res.status(503).json({ subscriber: publicState(subscriber), message: "A feliratkozást rögzítettük, de a megerősítő e-mail küldése nem sikerült. Próbáld újra később." });
|
|
93
52
|
}
|
|
94
|
-
subscriber = await service.updateNewsletterSubscribers({
|
|
95
|
-
id: subscriber.id,
|
|
96
|
-
confirmation_sent_at: new Date(),
|
|
97
|
-
});
|
|
53
|
+
subscriber = await service.updateNewsletterSubscribers({ id: subscriber.id, confirmation_sent_at: new Date() });
|
|
98
54
|
}
|
|
99
55
|
await audit(req, subscriber, existing || !ownsGeneratedConfirmationToken ? "newsletter.subscription.resubscribe" : "newsletter.subscription.create", config.doubleOptIn ? "Hírlevél-feliratkozás megerősítésre vár." : "Hírlevél-feliratkozás aktiválva.");
|
|
100
|
-
if (ownsGeneratedConfirmationToken)
|
|
56
|
+
if (ownsGeneratedConfirmationToken)
|
|
101
57
|
await (0, newsletter_1.emitNewsletterEvent)(req.scope, subscriber.status === "pending" ? newsletter_1.NEWSLETTER_EVENTS.pending : newsletter_1.NEWSLETTER_EVENTS.subscribed, subscriber);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
? "A hírlevél-feliratkozás sikeres."
|
|
105
|
-
: ownsGeneratedConfirmationToken
|
|
106
|
-
? "Küldtünk egy megerősítő e-mailt. A feliratkozás a link megnyitása után válik aktívvá."
|
|
107
|
-
: "A feliratkozás megerősítésre vár. Ha nem érkezik meg a megerősítő e-mail, próbáld újra később.";
|
|
108
|
-
return res.status(existing || !ownsGeneratedConfirmationToken ? 200 : 201).json({
|
|
109
|
-
subscriber: publicState(subscriber),
|
|
110
|
-
message,
|
|
111
|
-
});
|
|
58
|
+
const message = !config.doubleOptIn ? "A hírlevél-feliratkozás sikeres." : ownsGeneratedConfirmationToken ? "Küldtünk egy megerősítő e-mailt. A feliratkozás a link megnyitása után válik aktívvá." : "A feliratkozás megerősítésre vár. Ha nem érkezik meg a megerősítő e-mail, próbáld újra később.";
|
|
59
|
+
return res.status(existing || !ownsGeneratedConfirmationToken ? 200 : 201).json({ subscriber: publicState(subscriber), message });
|
|
112
60
|
}
|
|
113
61
|
catch (error) {
|
|
114
62
|
return res.status(400).json({ message: error instanceof Error ? error.message : "A hírlevél-feliratkozás nem sikerült." });
|
|
115
63
|
}
|
|
116
64
|
}
|
|
117
65
|
async function sendConfirmation(req, subscriber, confirmToken) {
|
|
118
|
-
let notifications;
|
|
119
|
-
try {
|
|
120
|
-
notifications = req.scope.resolve(utils_1.Modules.NOTIFICATION);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
66
|
const config = (0, newsletter_1.loadNewsletterConfig)();
|
|
126
67
|
const brand = process.env.STORE_NAME || process.env.VITE_ADMIN_BRAND_NAME || "HSZRDM Commerce";
|
|
127
68
|
const unsubscribeToken = (0, newsletter_1.createNewsletterUnsubscribeToken)(subscriber.id, subscriber.email);
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
unsubscribeUrl: (0, newsletter_1.newsletterUnsubscribeUrl)(unsubscribeToken, config),
|
|
132
|
-
});
|
|
69
|
+
const confirmUrl = (0, newsletter_1.newsletterConfirmUrl)(confirmToken, config);
|
|
70
|
+
const unsubscribeUrl = (0, newsletter_1.newsletterUnsubscribeUrl)(unsubscribeToken, config);
|
|
71
|
+
const fallback = (0, newsletter_1.newsletterConfirmationEmail)({ brand, confirmUrl, unsubscribeUrl });
|
|
133
72
|
try {
|
|
134
|
-
await
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
trigger_type: "newsletter.confirmation",
|
|
139
|
-
resource_id: subscriber.id,
|
|
140
|
-
resource_type: "newsletter_subscriber",
|
|
141
|
-
idempotency_key: `newsletter-confirmation-${subscriber.id}-${subscriber.updated_at || Date.now()}`,
|
|
142
|
-
});
|
|
73
|
+
const content = await (0, email_center_1.resolveEmailContent)({ container: req.scope, key: "newsletter.confirmation", locale: process.env.STORE_LOCALE, data: { confirm_url: confirmUrl, unsubscribe_url: unsubscribeUrl, email: subscriber.email }, fallback });
|
|
74
|
+
if (!content)
|
|
75
|
+
return false;
|
|
76
|
+
await (0, email_center_1.sendManagedEmail)({ container: req.scope, to: subscriber.email, key: "newsletter.confirmation", locale: process.env.STORE_LOCALE, content, idempotencyKey: `newsletter-confirmation-${subscriber.id}-${subscriber.confirmation_token_hash || subscriber.updated_at || Date.now()}`, resourceId: subscriber.id, resourceType: "newsletter_subscriber", track: false });
|
|
143
77
|
return true;
|
|
144
78
|
}
|
|
145
79
|
catch {
|
|
@@ -147,26 +81,9 @@ async function sendConfirmation(req, subscriber, confirmToken) {
|
|
|
147
81
|
}
|
|
148
82
|
}
|
|
149
83
|
async function audit(req, subscriber, action, summary) {
|
|
150
|
-
await (0, core_audit_1.writeCoreAudit)(req.scope, {
|
|
151
|
-
action,
|
|
152
|
-
resourceType: "newsletter_subscriber",
|
|
153
|
-
resourceId: subscriber.id,
|
|
154
|
-
integration: "newsletter",
|
|
155
|
-
summary,
|
|
156
|
-
details: { status: subscriber.status, source: subscriber.source, consent_version: subscriber.consent_version },
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
function publicState(subscriber) {
|
|
160
|
-
return {
|
|
161
|
-
id: subscriber.id,
|
|
162
|
-
status: subscriber.status,
|
|
163
|
-
double_opt_in: Boolean(subscriber.double_opt_in),
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
function optionalText(value, max) {
|
|
167
|
-
if (typeof value !== "string")
|
|
168
|
-
return null;
|
|
169
|
-
const result = value.trim();
|
|
170
|
-
return result ? result.slice(0, max) : null;
|
|
84
|
+
await (0, core_audit_1.writeCoreAudit)(req.scope, { action, resourceType: "newsletter_subscriber", resourceId: subscriber.id, integration: "newsletter", summary, details: { status: subscriber.status, source: subscriber.source, consent_version: subscriber.consent_version } });
|
|
171
85
|
}
|
|
172
|
-
|
|
86
|
+
function publicState(subscriber) { return { id: subscriber.id, status: subscriber.status, double_opt_in: Boolean(subscriber.double_opt_in) }; }
|
|
87
|
+
function optionalText(value, max) { if (typeof value !== "string")
|
|
88
|
+
return null; const result = value.trim(); return result ? result.slice(0, max) : null; }
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL25ld3NsZXR0ZXIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsb0JBc0RDO0FBekVELDREQUE0RDtBQUM1RCxnRUFBcUY7QUFDckYsNERBYW9DO0FBSTdCLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBd0IsRUFBRSxHQUFtQjtJQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFBLGlDQUFvQixHQUFFLENBQUE7SUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxDQUFDLENBQUE7SUFDL0csSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxDQUFDLENBQUE7SUFDeEgsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLDJFQUEyRSxFQUFFLENBQUMsQ0FBQTtJQUVySyxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFBLHFDQUF3QixFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEs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QUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDNVEsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLFVBQStCLElBQUksT0FBTyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUEsQ0FBQyxDQUFDO0FBQ25LLFNBQVMsWUFBWSxDQUFDLEtBQWMsRUFBRSxHQUFXLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO0lBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMifQ==
|