@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,285 +1,115 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactionalEmailEnabled = transactionalEmailEnabled;
3
4
  exports.queueOrderLifecycleEmail = queueOrderLifecycleEmail;
4
5
  exports.resolveOrderIdForPayment = resolveOrderIdForPayment;
5
6
  exports.resolveRefundEmailContexts = resolveRefundEmailContexts;
6
7
  exports.resolveShipmentEmailContext = resolveShipmentEmailContext;
7
8
  const utils_1 = require("@medusajs/framework/utils");
9
+ const email_center_1 = require("../modules/email-center");
8
10
  const EMAIL_CONFIG = {
9
- order_placed: {
10
- enabled: "SENDGRID_ORDER_PLACED_ENABLED",
11
- templatePrefix: "SENDGRID_ORDER_PLACED_TEMPLATE_ID",
12
- },
13
- payment_captured: {
14
- enabled: "SENDGRID_PAYMENT_CAPTURED_ENABLED",
15
- templatePrefix: "SENDGRID_PAYMENT_CAPTURED_TEMPLATE_ID",
16
- },
17
- fulfillment_created: {
18
- enabled: "SENDGRID_FULFILLMENT_CREATED_ENABLED",
19
- templatePrefix: "SENDGRID_FULFILLMENT_CREATED_TEMPLATE_ID",
20
- },
21
- shipment_created: {
22
- enabled: "SENDGRID_SHIPMENT_CREATED_ENABLED",
23
- templatePrefix: "SENDGRID_SHIPMENT_CREATED_TEMPLATE_ID",
24
- },
25
- order_canceled: {
26
- enabled: "SENDGRID_ORDER_CANCELED_ENABLED",
27
- templatePrefix: "SENDGRID_ORDER_CANCELED_TEMPLATE_ID",
28
- },
29
- payment_refunded: {
30
- enabled: "SENDGRID_PAYMENT_REFUNDED_ENABLED",
31
- templatePrefix: "SENDGRID_PAYMENT_REFUNDED_TEMPLATE_ID",
32
- },
11
+ order_placed: { enabled: "EMAIL_ORDER_PLACED_ENABLED", legacyEnabled: "SENDGRID_ORDER_PLACED_ENABLED", templatePrefix: "SENDGRID_ORDER_PLACED_TEMPLATE_ID", coreKey: "order.placed" },
12
+ payment_captured: { enabled: "EMAIL_PAYMENT_CAPTURED_ENABLED", legacyEnabled: "SENDGRID_PAYMENT_CAPTURED_ENABLED", templatePrefix: "SENDGRID_PAYMENT_CAPTURED_TEMPLATE_ID", coreKey: "order.paid" },
13
+ fulfillment_created: { enabled: "EMAIL_FULFILLMENT_CREATED_ENABLED", legacyEnabled: "SENDGRID_FULFILLMENT_CREATED_ENABLED", templatePrefix: "SENDGRID_FULFILLMENT_CREATED_TEMPLATE_ID", coreKey: "order.fulfilled" },
14
+ shipment_created: { enabled: "EMAIL_SHIPMENT_CREATED_ENABLED", legacyEnabled: "SENDGRID_SHIPMENT_CREATED_ENABLED", templatePrefix: "SENDGRID_SHIPMENT_CREATED_TEMPLATE_ID", coreKey: "order.shipped" },
15
+ order_canceled: { enabled: "EMAIL_ORDER_CANCELED_ENABLED", legacyEnabled: "SENDGRID_ORDER_CANCELED_ENABLED", templatePrefix: "SENDGRID_ORDER_CANCELED_TEMPLATE_ID", coreKey: "order.cancelled" },
16
+ payment_refunded: { enabled: "EMAIL_PAYMENT_REFUNDED_ENABLED", legacyEnabled: "SENDGRID_PAYMENT_REFUNDED_ENABLED", templatePrefix: "SENDGRID_PAYMENT_REFUNDED_TEMPLATE_ID", coreKey: "order.refunded" },
33
17
  };
34
- const ORDER_FIELDS = [
35
- "id",
36
- "display_id",
37
- "email",
38
- "currency_code",
39
- "total",
40
- "subtotal",
41
- "tax_total",
42
- "shipping_total",
43
- "discount_total",
44
- "created_at",
45
- "updated_at",
46
- "payment_status",
47
- "fulfillment_status",
48
- "metadata",
49
- "items.id",
50
- "items.title",
51
- "items.product_title",
52
- "items.variant_title",
53
- "items.quantity",
54
- "items.unit_price",
55
- "items.total",
56
- "items.thumbnail",
57
- "shipping_address.first_name",
58
- "shipping_address.last_name",
59
- "shipping_address.company",
60
- "shipping_address.address_1",
61
- "shipping_address.address_2",
62
- "shipping_address.postal_code",
63
- "shipping_address.city",
64
- "shipping_address.country_code",
65
- "shipping_address.phone",
66
- "billing_address.first_name",
67
- "billing_address.last_name",
68
- "billing_address.company",
69
- "billing_address.address_1",
70
- "billing_address.address_2",
71
- "billing_address.postal_code",
72
- "billing_address.city",
73
- "billing_address.country_code",
74
- "billing_address.phone",
75
- "shipping_methods.id",
76
- "shipping_methods.name",
77
- "shipping_methods.amount",
78
- ];
18
+ const ORDER_FIELDS = ["id", "display_id", "email", "currency_code", "total", "subtotal", "tax_total", "shipping_total", "discount_total", "created_at", "updated_at", "payment_status", "fulfillment_status", "metadata", "items.id", "items.title", "items.product_title", "items.variant_title", "items.quantity", "items.unit_price", "items.total", "items.thumbnail", "shipping_address.first_name", "shipping_address.last_name", "shipping_address.company", "shipping_address.address_1", "shipping_address.address_2", "shipping_address.postal_code", "shipping_address.city", "shipping_address.country_code", "shipping_address.phone", "billing_address.first_name", "billing_address.last_name", "billing_address.company", "billing_address.address_1", "billing_address.address_2", "billing_address.postal_code", "billing_address.city", "billing_address.country_code", "billing_address.phone", "shipping_methods.id", "shipping_methods.name", "shipping_methods.amount"];
19
+ function transactionalEmailEnabled(kind) {
20
+ const config = EMAIL_CONFIG[kind];
21
+ const explicit = boolEnv(config.enabled);
22
+ if (explicit != null)
23
+ return explicit;
24
+ const legacy = boolEnv(config.legacyEnabled);
25
+ if (legacy != null)
26
+ return legacy;
27
+ return process.env.EMAIL_CENTER_ENABLED === "true";
28
+ }
79
29
  async function queueOrderLifecycleEmail(input) {
80
30
  const logger = input.container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
81
31
  const config = EMAIL_CONFIG[input.kind];
82
- if (process.env[config.enabled] !== "true") {
32
+ if (!transactionalEmailEnabled(input.kind))
83
33
  return { skipped: true, reason: "disabled" };
84
- }
85
- // Production e-mail delivery is intentionally tied to the configured
86
- // SendGrid provider. In development the local Notification provider can
87
- // still be used to inspect the same notification payloads safely.
88
- if (isProductionRuntime() && process.env.SENDGRID_ENABLED !== "true") {
89
- logger.warn(`Transactional email ${input.kind} skipped: SENDGRID_ENABLED is not true in production.`);
90
- return { skipped: true, reason: "provider-disabled" };
91
- }
92
34
  const query = input.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
93
- const { data } = await query.graph({
94
- entity: "order",
95
- fields: ORDER_FIELDS,
96
- filters: { id: input.orderId },
97
- });
35
+ const { data } = await query.graph({ entity: "order", fields: ORDER_FIELDS, filters: { id: input.orderId } });
98
36
  const order = data[0];
99
- if (!order?.email) {
100
- logger.warn(`Transactional email ${input.kind} skipped for order ${input.orderId}: customer email is missing.`);
37
+ if (!order?.email)
101
38
  return { skipped: true, reason: "missing-email" };
102
- }
103
39
  const locale = resolveLocale(order);
104
- const template = resolveTemplate(config.templatePrefix, locale);
105
- if (!template) {
106
- logger.warn(`Transactional email ${input.kind} skipped for order ${input.orderId}: no HU/EN template is configured.`);
107
- return { skipped: true, reason: "missing-template" };
108
- }
109
- const notificationService = input.container.resolve(utils_1.Modules.NOTIFICATION);
110
40
  const notificationData = {
111
- event: input.kind,
112
- locale,
113
- language: locale.toLowerCase().startsWith("en") ? "en" : "hu",
114
- store_name: process.env.STORE_NAME || "Webshop",
115
- storefront_url: storefrontUrl(),
116
- support_email: process.env.SUPPORT_EMAIL || null,
117
- store_order_email: process.env.ORDER_EMAIL || null,
118
- billing_email: process.env.BILLING_EMAIL || null,
119
- order_id: order.id,
120
- order_display_id: order.display_id,
121
- order_number: order.display_id,
122
- customer_email: order.email,
123
- order_email: order.email,
124
- currency_code: order.currency_code,
125
- total: order.total,
126
- subtotal: order.subtotal,
127
- tax_total: order.tax_total,
128
- shipping_total: order.shipping_total,
129
- discount_total: order.discount_total,
130
- payment_status: order.payment_status,
131
- fulfillment_status: order.fulfillment_status,
132
- created_at: order.created_at,
133
- updated_at: order.updated_at,
134
- items: order.items ?? [],
135
- shipping_address: order.shipping_address ?? null,
136
- billing_address: order.billing_address ?? null,
137
- shipping_methods: order.shipping_methods ?? [],
138
- ...(input.extraData ?? {}),
139
- };
140
- await notificationService.createNotifications({
141
- to: String(order.email),
142
- channel: "email",
143
- template,
144
- data: notificationData,
145
- trigger_type: `core.email.${input.kind}`,
146
- resource_id: order.id,
147
- resource_type: "order",
148
- idempotency_key: input.idempotencyKey,
149
- });
150
- logger.info(`Transactional email ${input.kind} queued for order ${input.orderId} (${locale}).`);
151
- return {
152
- skipped: false,
153
- orderId: order.id,
154
- locale,
155
- template,
41
+ event: input.kind, locale, language: locale.startsWith("en") ? "en" : "hu", store_name: process.env.STORE_NAME || "Webshop", storefront_url: storefrontUrl(),
42
+ support_email: process.env.SUPPORT_EMAIL || null, store_order_email: process.env.ORDER_EMAIL || null, billing_email: process.env.BILLING_EMAIL || null,
43
+ order_id: order.id, order_display_id: order.display_id, order_number: order.display_id, customer_email: order.email, order_email: order.email,
44
+ currency_code: order.currency_code, total: order.total, subtotal: order.subtotal, tax_total: order.tax_total, shipping_total: order.shipping_total,
45
+ discount_total: order.discount_total, payment_status: order.payment_status, fulfillment_status: order.fulfillment_status,
46
+ created_at: order.created_at, updated_at: order.updated_at, items: order.items ?? [], shipping_address: order.shipping_address ?? null,
47
+ billing_address: order.billing_address ?? null, shipping_methods: order.shipping_methods ?? [], ...(input.extraData ?? {}),
156
48
  };
49
+ if (emailCenterAvailable(input.container)) {
50
+ const result = await (0, email_center_1.sendManagedEmail)({ container: input.container, to: String(order.email), key: config.coreKey, locale, data: notificationData, idempotencyKey: input.idempotencyKey, resourceId: order.id, resourceType: "order", track: true });
51
+ logger.info(`Transactional email ${input.kind} queued for order ${input.orderId} (${locale}) via Email Center.`);
52
+ return { skipped: result.skipped, orderId: order.id, locale, template: config.coreKey };
53
+ }
54
+ if (isProductionRuntime() && process.env.SENDGRID_ENABLED !== "true") {
55
+ logger.warn(`Transactional email ${input.kind} skipped: legacy SendGrid fallback is disabled in production.`);
56
+ return { skipped: true, reason: "provider-disabled" };
57
+ }
58
+ const template = resolveTemplate(config.templatePrefix, locale);
59
+ if (!template)
60
+ return { skipped: true, reason: "missing-template" };
61
+ const notifications = input.container.resolve(utils_1.Modules.NOTIFICATION);
62
+ await notifications.createNotifications({ to: String(order.email), channel: "email", template, data: notificationData, trigger_type: `core.email.${input.kind}`, resource_id: order.id, resource_type: "order", idempotency_key: input.idempotencyKey });
63
+ return { skipped: false, orderId: order.id, locale, template };
157
64
  }
158
65
  async function resolveOrderIdForPayment(container, paymentId) {
159
- const paymentService = container.resolve(utils_1.Modules.PAYMENT);
160
- const payment = await paymentService.retrievePayment(paymentId);
66
+ const service = container.resolve(utils_1.Modules.PAYMENT);
67
+ const payment = await service.retrievePayment(paymentId);
161
68
  return resolveOrderIdForPaymentCollection(container, payment.payment_collection_id);
162
69
  }
163
70
  async function resolveRefundEmailContexts(container, paymentId) {
164
- const paymentService = container.resolve(utils_1.Modules.PAYMENT);
165
- const payment = await paymentService.retrievePayment(paymentId);
71
+ const service = container.resolve(utils_1.Modules.PAYMENT);
72
+ const payment = await service.retrievePayment(paymentId);
166
73
  const orderId = await resolveOrderIdForPaymentCollection(container, payment.payment_collection_id);
167
74
  if (!orderId)
168
75
  return null;
169
- // One payment can have multiple partial refunds. The payment.refunded event
170
- // only carries the payment ID in Medusa 2.21.2, so every refund record gets
171
- // its own Notification idempotency key. Replayed/concurrent payment events
172
- // can safely walk the same list without losing or duplicating a refund mail.
173
- const refunds = await paymentService.listRefunds({ payment_id: paymentId }, { take: 100 });
174
- const normalized = refunds
175
- .filter((refund) => Boolean(refund?.id))
176
- .sort((left, right) => dateValue(left.created_at) - dateValue(right.created_at))
177
- .map((refund) => ({
178
- refund_id: refund.id,
179
- refund_amount: plainAmount(refund.amount),
180
- refund_created_at: toIsoDate(refund.created_at),
181
- refund_reason_id: refund.refund_reason_id ?? null,
182
- refund_note: refund.note ?? null,
183
- }));
184
- return {
185
- orderId,
186
- paymentId,
187
- refunds: normalized,
188
- };
76
+ const refunds = await service.listRefunds({ payment_id: paymentId }, { take: 100 });
77
+ return { orderId, paymentId, refunds: refunds.filter((refund) => Boolean(refund?.id)).sort((a, b) => dateValue(a.created_at) - dateValue(b.created_at)).map((refund) => ({ refund_id: refund.id, refund_amount: plainAmount(refund.amount), refund_created_at: toIsoDate(refund.created_at), refund_reason_id: refund.refund_reason_id ?? null, refund_note: refund.note ?? null })) };
189
78
  }
190
79
  async function resolveShipmentEmailContext(container, fulfillmentId) {
191
80
  const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
192
- const { data } = await query.graph({
193
- entity: "fulfillment",
194
- fields: [
195
- "id",
196
- "provider_id",
197
- "shipped_at",
198
- "labels.tracking_number",
199
- "labels.tracking_url",
200
- "order.id",
201
- ],
202
- filters: { id: fulfillmentId },
203
- });
81
+ const { data } = await query.graph({ entity: "fulfillment", fields: ["id", "provider_id", "shipped_at", "labels.tracking_number", "labels.tracking_url", "order.id"], filters: { id: fulfillmentId } });
204
82
  const fulfillment = data[0];
205
83
  const orderId = fulfillment?.order?.id;
206
84
  if (!fulfillment || !orderId)
207
85
  return null;
208
86
  const labels = Array.isArray(fulfillment.labels) ? fulfillment.labels : [];
209
- const tracking = labels.map((label) => ({
210
- tracking_number: label.tracking_number ?? null,
211
- tracking_url: label.tracking_url ?? null,
212
- }));
213
- return {
214
- orderId: String(orderId),
215
- shipment: {
216
- fulfillment_id: fulfillment.id,
217
- provider_id: fulfillment.provider_id ?? null,
218
- shipped_at: fulfillment.shipped_at ?? null,
219
- tracking,
220
- tracking_number: tracking[0]?.tracking_number ?? null,
221
- tracking_url: tracking[0]?.tracking_url ?? null,
222
- },
223
- };
87
+ const tracking = labels.map((label) => ({ tracking_number: label.tracking_number ?? null, tracking_url: label.tracking_url ?? null }));
88
+ return { orderId: String(orderId), shipment: { fulfillment_id: fulfillment.id, provider_id: fulfillment.provider_id ?? null, shipped_at: fulfillment.shipped_at ?? null, tracking, tracking_number: tracking[0]?.tracking_number ?? null, tracking_url: tracking[0]?.tracking_url ?? null } };
224
89
  }
225
90
  async function resolveOrderIdForPaymentCollection(container, paymentCollectionId) {
226
91
  const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
227
- const { data } = await query.graph({
228
- entity: "order_payment_collection",
229
- fields: ["order.id"],
230
- filters: { payment_collection_id: paymentCollectionId },
231
- });
92
+ const { data } = await query.graph({ entity: "order_payment_collection", fields: ["order.id"], filters: { payment_collection_id: paymentCollectionId } });
232
93
  return data[0]?.order?.id ? String(data[0].order.id) : null;
233
94
  }
234
- function resolveLocale(order) {
235
- const metadata = order.metadata && typeof order.metadata === "object"
236
- ? order.metadata
237
- : {};
238
- const raw = stringValue(metadata.locale) ||
239
- stringValue(metadata.language) ||
240
- process.env.STORE_LOCALE?.trim() ||
241
- "hu-HU";
242
- return raw.toLowerCase().startsWith("en") ? "en-US" : "hu-HU";
243
- }
244
- function resolveTemplate(prefix, locale) {
245
- const hu = process.env[`${prefix}_HU`]?.trim();
246
- const en = process.env[`${prefix}_EN`]?.trim();
247
- return locale.toLowerCase().startsWith("en")
248
- ? en || hu || null
249
- : hu || en || null;
250
- }
251
- function storefrontUrl() {
252
- const explicit = process.env.STOREFRONT_URL?.trim();
253
- if (explicit)
254
- return explicit.replace(/\/$/, "");
255
- const firstStoreOrigin = process.env.STORE_CORS
256
- ?.split(",")
257
- .map((value) => value.trim())
258
- .find(Boolean);
259
- return (firstStoreOrigin || "http://localhost:3000").replace(/\/$/, "");
260
- }
261
- function isProductionRuntime() {
262
- return (process.env.APP_ENV === "production" ||
263
- process.env.NODE_ENV === "production");
264
- }
265
- function stringValue(value) {
266
- return typeof value === "string" && value.trim() ? value.trim() : undefined;
267
- }
268
- function plainAmount(value) {
269
- if (typeof value === "number" || typeof value === "string")
270
- return value;
271
- if (value == null)
272
- return null;
273
- const text = String(value);
274
- const number = Number(text);
275
- return Number.isFinite(number) ? number : text;
276
- }
277
- function dateValue(value) {
278
- const time = new Date(value).getTime();
279
- return Number.isFinite(time) ? time : 0;
280
- }
281
- function toIsoDate(value) {
282
- const date = new Date(value);
283
- return Number.isFinite(date.getTime()) ? date.toISOString() : String(value);
95
+ function resolveLocale(order) { const metadata = order.metadata && typeof order.metadata === "object" ? order.metadata : {}; const raw = stringValue(metadata.locale) || stringValue(metadata.language) || process.env.STORE_LOCALE?.trim() || "hu-HU"; return raw.toLowerCase().startsWith("en") ? "en-US" : "hu-HU"; }
96
+ function resolveTemplate(prefix, locale) { const hu = process.env[`${prefix}_HU`]?.trim(); const en = process.env[`${prefix}_EN`]?.trim(); return locale.startsWith("en") ? en || hu || null : hu || en || null; }
97
+ function storefrontUrl() { const explicit = process.env.STOREFRONT_URL?.trim(); if (explicit)
98
+ return explicit.replace(/\/$/, ""); const origin = process.env.STORE_CORS?.split(",").map(v => v.trim()).find(Boolean); return (origin || "http://localhost:3000").replace(/\/$/, ""); }
99
+ function emailCenterAvailable(container) { if (process.env.EMAIL_CENTER_ENABLED === "false")
100
+ return false; try {
101
+ return Boolean(container.resolve(email_center_1.EMAIL_CENTER_MODULE));
284
102
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25hbC1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RyYW5zYWN0aW9uYWwtZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwSEEsNERBd0dDO0FBRUQsNERBVUM7QUFFRCxnRUF3Q0M7QUFFRCxrRUF1Q0M7QUFqVUQscURBQThFO0FBOEM5RSxNQUFNLFlBQVksR0FHZDtJQUNGLFlBQVksRUFBRTtRQUNaLE9BQU8sRUFBRSwrQkFBK0I7UUFDeEMsY0FBYyxFQUFFLG1DQUFtQztLQUNwRDtJQUNELGdCQUFnQixFQUFFO1FBQ2hCLE9BQU8sRUFBRSxtQ0FBbUM7UUFDNUMsY0FBYyxFQUFFLHVDQUF1QztLQUN4RDtJQUNELG1CQUFtQixFQUFFO1FBQ25CLE9BQU8sRUFBRSxzQ0FBc0M7UUFDL0MsY0FBYyxFQUFFLDBDQUEwQztLQUMzRDtJQUNELGdCQUFnQixFQUFFO1FBQ2hCLE9BQU8sRUFBRSxtQ0FBbUM7UUFDNUMsY0FBYyxFQUFFLHVDQUF1QztLQUN4RDtJQUNELGNBQWMsRUFBRTtRQUNkLE9BQU8sRUFBRSxpQ0FBaUM7UUFDMUMsY0FBYyxFQUFFLHFDQUFxQztLQUN0RDtJQUNELGdCQUFnQixFQUFFO1FBQ2hCLE9BQU8sRUFBRSxtQ0FBbUM7UUFDNUMsY0FBYyxFQUFFLHVDQUF1QztLQUN4RDtDQUNGLENBQUE7QUFFRCxNQUFNLFlBQVksR0FBRztJQUNuQixJQUFJO0lBQ0osWUFBWTtJQUNaLE9BQU87SUFDUCxlQUFlO0lBQ2YsT0FBTztJQUNQLFVBQVU7SUFDVixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixvQkFBb0I7SUFDcEIsVUFBVTtJQUNWLFVBQVU7SUFDVixhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsa0JBQWtCO0lBQ2xCLGFBQWE7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
103
+ catch {
104
+ return false;
105
+ } }
106
+ function isProductionRuntime() { return process.env.APP_ENV === "production" || process.env.NODE_ENV === "production"; }
107
+ function stringValue(value) { return typeof value === "string" && value.trim() ? value.trim() : undefined; }
108
+ function boolEnv(key) { const raw = process.env[key]?.trim(); if (!raw)
109
+ return null; return raw === "true"; }
110
+ function plainAmount(value) { if (typeof value === "number" || typeof value === "string")
111
+ return value; if (value == null)
112
+ return null; const text = String(value); const number = Number(text); return Number.isFinite(number) ? number : text; }
113
+ function dateValue(value) { const time = new Date(value).getTime(); return Number.isFinite(time) ? time : 0; }
114
+ function toIsoDate(value) { const date = new Date(value); return Number.isFinite(date.getTime()) ? date.toISOString() : String(value); }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25hbC1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RyYW5zYWN0aW9uYWwtZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsOERBT0M7QUFFRCw0REFrQ0M7QUFFRCw0REFJQztBQUVELGdFQU9DO0FBRUQsa0VBUUM7QUExRkQscURBQThFO0FBQzlFLDBEQUErRTtBQVcvRSxNQUFNLFlBQVksR0FBNkQ7SUFDN0UsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLGFBQWEsRUFBRSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsbUNBQW1DLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRTtJQUNyTCxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsbUNBQW1DLEVBQUUsY0FBYyxFQUFFLHVDQUF1QyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUU7SUFDbk0sbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsYUFBYSxFQUFFLHNDQUFzQyxFQUFFLGNBQWMsRUFBRSwwQ0FBMEMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUU7SUFDcE4sZ0JBQWdCLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsYUFBYSxFQUFFLG1DQUFtQyxFQUFFLGNBQWMsRUFBRSx1Q0FBdUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFO0lBQ3RNLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxhQUFhLEVBQUUsaUNBQWlDLEVBQUUsY0FBYyxFQUFFLHFDQUFxQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRTtJQUNoTSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsbUNBQW1DLEVBQUUsY0FBYyxFQUFFLHVDQUF1QyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0Is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
@@ -1,4 +1,4 @@
1
- export declare const CORE_VERSION = "1.2.0";
1
+ export declare const CORE_VERSION = "1.3.0";
2
2
  export declare const CORE_API_CONTRACT_VERSION = "1.0";
3
3
  export declare const STOREFRONT_CORE_CONFIG_SCHEMA_VERSION = 1;
4
- export declare const CORE_DB_SCHEMA_VERSION = 4;
4
+ export declare const CORE_DB_SCHEMA_VERSION = 5;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CORE_DB_SCHEMA_VERSION = exports.STOREFRONT_CORE_CONFIG_SCHEMA_VERSION = exports.CORE_API_CONTRACT_VERSION = exports.CORE_VERSION = void 0;
4
- exports.CORE_VERSION = "1.2.0";
4
+ exports.CORE_VERSION = "1.3.0";
5
5
  exports.CORE_API_CONTRACT_VERSION = "1.0";
6
6
  exports.STOREFRONT_CORE_CONFIG_SCHEMA_VERSION = 1;
7
- exports.CORE_DB_SCHEMA_VERSION = 4;
7
+ exports.CORE_DB_SCHEMA_VERSION = 5;
8
8
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxZQUFZLEdBQUcsT0FBTyxDQUFBO0FBQ3RCLFFBQUEseUJBQXlCLEdBQUcsS0FBSyxDQUFBO0FBQ2pDLFFBQUEscUNBQXFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pDLFFBQUEsc0JBQXNCLEdBQUcsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,6 @@
1
+ import type { MedusaContainer } from "@medusajs/framework/types";
2
+ export default function emailCampaignDispatch(container: MedusaContainer): Promise<void>;
3
+ export declare const config: {
4
+ name: string;
5
+ schedule: string;
6
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = emailCampaignDispatch;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const email_center_1 = require("../modules/email-center");
7
+ async function emailCampaignDispatch(container) {
8
+ const locking = container.resolve("locking");
9
+ try {
10
+ return await locking.execute("job:email-campaign-dispatch", () => (0, email_center_1.dispatchDueCampaigns)(container), { timeout: 1, expire: 55 });
11
+ }
12
+ catch (error) {
13
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
14
+ logger.info(JSON.stringify({ event: "scheduled_job_skipped_locked", job: "email-campaign-dispatch", message: error instanceof Error ? error.message : String(error) }));
15
+ }
16
+ }
17
+ exports.config = { name: "email-campaign-dispatch", schedule: "* * * * *" };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtY2FtcGFpZ24tZGlzcGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9lbWFpbC1jYW1wYWlnbi1kaXNwYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0FRQztBQVhELHFEQUFxRTtBQUNyRSwwREFBOEQ7QUFFL0MsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFNBQTBCO0lBQzVFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFxSCxDQUFBO0lBQ2hLLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUEsbUNBQW9CLEVBQUMsU0FBa0IsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN6SSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLDhCQUE4QixFQUFFLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3pLLENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFBIn0=
@@ -0,0 +1,8 @@
1
+ type Container = {
2
+ resolve: (key: string) => unknown;
3
+ };
4
+ export declare function prepareCampaign(container: Container, campaignId: string): Promise<any>;
5
+ export declare function processCampaignBatch(container: Container, campaignId: string, batchSize?: number): Promise<any>;
6
+ export declare function refreshCampaignStats(container: Container, campaignId: string): Promise<InferEntityType<T[Key]>>;
7
+ export declare function dispatchDueCampaigns(container: Container): Promise<void>;
8
+ export {};