@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.
Files changed (72) hide show
  1. package/.medusa/server/src/admin/index.js +3439 -3192
  2. package/.medusa/server/src/admin/index.mjs +3439 -3192
  3. package/.medusa/server/src/api/admin/email/preview/route.d.ts +2 -0
  4. package/.medusa/server/src/api/admin/email/preview/route.js +20 -0
  5. package/.medusa/server/src/api/admin/email/templates/[id]/route.d.ts +4 -0
  6. package/.medusa/server/src/api/admin/email/templates/[id]/route.js +25 -0
  7. package/.medusa/server/src/api/admin/email/templates/route.d.ts +3 -0
  8. package/.medusa/server/src/api/admin/email/templates/route.js +40 -0
  9. package/.medusa/server/src/api/admin/email/test-send/route.d.ts +2 -0
  10. package/.medusa/server/src/api/admin/email/test-send/route.js +64 -0
  11. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.d.ts +2 -0
  12. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/cancel/route.js +15 -0
  13. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.d.ts +4 -0
  14. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/route.js +39 -0
  15. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/send/route.js +14 -0
  17. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/stats/route.js +17 -0
  19. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.d.ts +2 -0
  20. package/.medusa/server/src/api/admin/newsletter/campaigns/[id]/test-send/route.js +23 -0
  21. package/.medusa/server/src/api/admin/newsletter/campaigns/route.d.ts +3 -0
  22. package/.medusa/server/src/api/admin/newsletter/campaigns/route.js +40 -0
  23. package/.medusa/server/src/api/hooks/email/status/route.d.ts +2 -0
  24. package/.medusa/server/src/api/hooks/email/status/route.js +69 -0
  25. package/.medusa/server/src/api/store/email/track/click/[token]/route.d.ts +2 -0
  26. package/.medusa/server/src/api/store/email/track/click/[token]/route.js +19 -0
  27. package/.medusa/server/src/api/store/email/track/open/[token]/route.d.ts +2 -0
  28. package/.medusa/server/src/api/store/email/track/open/[token]/route.js +22 -0
  29. package/.medusa/server/src/api/store/leads/route.js +27 -93
  30. package/.medusa/server/src/api/store/newsletter/route.js +24 -107
  31. package/.medusa/server/src/api/store/quote-requests/route.js +41 -129
  32. package/.medusa/server/src/config.js +38 -15
  33. package/.medusa/server/src/core/customer-email.d.ts +5 -5
  34. package/.medusa/server/src/core/customer-email.js +55 -109
  35. package/.medusa/server/src/core/transactional-email.d.ts +9 -8
  36. package/.medusa/server/src/core/transactional-email.js +74 -244
  37. package/.medusa/server/src/core/version.d.ts +2 -2
  38. package/.medusa/server/src/core/version.js +2 -2
  39. package/.medusa/server/src/jobs/email-campaign-dispatch.d.ts +6 -0
  40. package/.medusa/server/src/jobs/email-campaign-dispatch.js +18 -0
  41. package/.medusa/server/src/modules/email-center/campaign.d.ts +8 -0
  42. package/.medusa/server/src/modules/email-center/campaign.js +193 -0
  43. package/.medusa/server/src/modules/email-center/constants.d.ts +1 -0
  44. package/.medusa/server/src/modules/email-center/constants.js +5 -0
  45. package/.medusa/server/src/modules/email-center/defaults.d.ts +10 -0
  46. package/.medusa/server/src/modules/email-center/defaults.js +49 -0
  47. package/.medusa/server/src/modules/email-center/index.d.ts +11 -0
  48. package/.medusa/server/src/modules/email-center/index.js +42 -0
  49. package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.d.ts +5 -0
  50. package/.medusa/server/src/modules/email-center/migrations/Migration20261030173000.js +25 -0
  51. package/.medusa/server/src/modules/email-center/models/email-campaign.d.ts +22 -0
  52. package/.medusa/server/src/modules/email-center/models/email-campaign.js +37 -0
  53. package/.medusa/server/src/modules/email-center/models/email-delivery.d.ts +21 -0
  54. package/.medusa/server/src/modules/email-center/models/email-delivery.js +38 -0
  55. package/.medusa/server/src/modules/email-center/models/email-template.d.ts +13 -0
  56. package/.medusa/server/src/modules/email-center/models/email-template.js +20 -0
  57. package/.medusa/server/src/modules/email-center/render.d.ts +31 -0
  58. package/.medusa/server/src/modules/email-center/render.js +92 -0
  59. package/.medusa/server/src/modules/email-center/send.d.ts +27 -0
  60. package/.medusa/server/src/modules/email-center/send.js +67 -0
  61. package/.medusa/server/src/modules/email-center/service.d.ts +56 -0
  62. package/.medusa/server/src/modules/email-center/service.js +13 -0
  63. package/.medusa/server/src/modules/email-center/tracking.d.ts +9 -0
  64. package/.medusa/server/src/modules/email-center/tracking.js +92 -0
  65. package/.medusa/server/src/providers/email/index.d.ts +2 -0
  66. package/.medusa/server/src/providers/email/index.js +11 -0
  67. package/.medusa/server/src/providers/email/service.d.ts +24 -0
  68. package/.medusa/server/src/providers/email/service.js +117 -0
  69. package/.medusa/server/src/scripts/core-init.js +20 -3
  70. package/.medusa/server/src/scripts/verify-bootstrap.js +1 -7
  71. package/.medusa/server/src/subscribers/transactional-email-shipment-created.js +6 -2
  72. 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
- form_key: form.key,
52
- status: "new",
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 admin = (0, lead_1.leadAdminEmail)(lead, brand);
96
- for (const to of adminEmails) {
97
- tasks.push(notifications.createNotifications({
98
- to, channel: "email", content: admin,
99
- trigger_type: "lead.created.admin", resource_id: lead.id, resource_type: "lead",
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 customer = (0, lead_1.leadCustomerEmail)(lead, brand);
105
- tasks.push(notifications.createNotifications({
106
- to: lead.email, channel: "email", content: customer,
107
- trigger_type: "lead.created.customer", resource_id: lead.id, resource_type: "lead",
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
- if (!value || typeof value !== "object" || Array.isArray(value))
160
- return {};
161
- return Object.fromEntries(Object.entries(value).slice(0, maxEntries).map(([key, raw]) => [key.slice(0, 80), optionalText(raw, maxLength)]));
162
- }
163
- function requiredText(value, label, max) {
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
- ? new Date(now.getTime() + config.confirmationTtlHours * 60 * 60 * 1000)
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
- action: "newsletter.confirmation.error",
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
- const message = !config.doubleOptIn
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 content = (0, newsletter_1.newsletterConfirmationEmail)({
129
- brand,
130
- confirmUrl: (0, newsletter_1.newsletterConfirmUrl)(confirmToken, config),
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 notifications.createNotifications({
135
- to: subscriber.email,
136
- channel: "email",
137
- content,
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL25ld3NsZXR0ZXIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQkEsb0JBMkhDO0FBL0lELHFEQUFtRDtBQUNuRCw0REFBNEQ7QUFDNUQsNERBYW9DO0FBSzdCLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBd0IsRUFBRSxHQUFtQjtJQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFBLGlDQUFvQixHQUFFLENBQUE7SUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxnREFBZ0QsRUFBRSxDQUFDLENBQUE7SUFDL0csSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJO1FBQUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxDQUFDLENBQUE7SUFDeEgsSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9DLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsMkVBQTJFLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZILENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFBLHFDQUF3QixFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxHQUFH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
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==