@hszrdm/core 1.3.0 → 1.5.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 +5572 -3759
- package/.medusa/server/src/admin/index.mjs +5572 -3759
- package/.medusa/server/src/api/admin/back-in-stock/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/back-in-stock/route.js +70 -0
- package/.medusa/server/src/api/admin/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-activation/route.js +97 -0
- package/.medusa/server/src/api/admin/customer-import/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-import/route.js +166 -0
- package/.medusa/server/src/api/admin/order-export/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/order-export/route.js +88 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.js +164 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.js +204 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.js +24 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +36 -4
- package/.medusa/server/src/api/admin/product-reviews/settings/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-reviews/settings/route.js +63 -0
- package/.medusa/server/src/api/admin/system-runtime/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/system-runtime/route.js +18 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.js +55 -0
- package/.medusa/server/src/api/mcp/route.d.ts +4 -0
- package/.medusa/server/src/api/mcp/route.js +19 -0
- package/.medusa/server/src/api/middlewares.js +16 -1
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.d.ts +2 -0
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.js +37 -0
- package/.medusa/server/src/api/store/back-in-stock/route.d.ts +8 -0
- package/.medusa/server/src/api/store/back-in-stock/route.js +124 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.js +96 -0
- package/.medusa/server/src/api/store/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/route.js +34 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +1 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.js +76 -34
- package/.medusa/server/src/api/store/review-request/route.d.ts +2 -0
- package/.medusa/server/src/api/store/review-request/route.js +60 -0
- package/.medusa/server/src/config.d.ts +1 -1
- package/.medusa/server/src/core/abandoned-cart.d.ts +64 -0
- package/.medusa/server/src/core/abandoned-cart.js +197 -0
- package/.medusa/server/src/core/back-in-stock.d.ts +51 -0
- package/.medusa/server/src/core/back-in-stock.js +107 -0
- package/.medusa/server/src/core/checkout-contract.d.ts +1 -0
- package/.medusa/server/src/core/checkout-contract.js +2 -1
- package/.medusa/server/src/core/customer-account-contract.d.ts +3 -0
- package/.medusa/server/src/core/customer-account-contract.js +4 -1
- package/.medusa/server/src/core/customer-activation.d.ts +120 -0
- package/.medusa/server/src/core/customer-activation.js +169 -0
- package/.medusa/server/src/core/customer-email.d.ts +1 -1
- package/.medusa/server/src/core/customer-email.js +4 -1
- package/.medusa/server/src/core/native-migration-export.d.ts +6 -0
- package/.medusa/server/src/core/native-migration-export.js +105 -0
- package/.medusa/server/src/core/order-export.d.ts +11 -0
- package/.medusa/server/src/core/order-export.js +297 -0
- package/.medusa/server/src/core/review-request.d.ts +61 -0
- package/.medusa/server/src/core/review-request.js +105 -0
- package/.medusa/server/src/core/review-reward.d.ts +94 -0
- package/.medusa/server/src/core/review-reward.js +124 -0
- package/.medusa/server/src/core/runtime-health.d.ts +39 -0
- package/.medusa/server/src/core/runtime-health.js +250 -0
- package/.medusa/server/src/core/store-mcp.d.ts +19 -0
- package/.medusa/server/src/core/store-mcp.js +541 -0
- package/.medusa/server/src/core/storefront-core-config.d.ts +10 -0
- package/.medusa/server/src/core/storefront-core-config.js +26 -1
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/abandoned-cart-recovery.d.ts +23 -0
- package/.medusa/server/src/jobs/abandoned-cart-recovery.js +138 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.d.ts +15 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.js +90 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.d.ts +17 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.js +107 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.d.ts +19 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.js +183 -0
- package/.medusa/server/src/jobs/mpl-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/mpl-status-sync.js +12 -7
- package/.medusa/server/src/jobs/product-review-request-dispatch.d.ts +28 -0
- package/.medusa/server/src/jobs/product-review-request-dispatch.js +84 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.d.ts +12 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.js +13 -0
- package/.medusa/server/src/jobs/shipping-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/shipping-status-sync.js +11 -14
- package/.medusa/server/src/lib/modules/shipping/idempotency.js +3 -3
- package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
- package/.medusa/server/src/lib/modules/shipping/tracking.d.ts +48 -0
- package/.medusa/server/src/lib/modules/shipping/tracking.js +368 -0
- package/.medusa/server/src/lib/modules/shipping/webhooks.d.ts +6 -9
- package/.medusa/server/src/lib/modules/shipping/webhooks.js +24 -137
- package/.medusa/server/src/localized-config.d.ts +1 -1
- package/.medusa/server/src/modules/back-in-stock/index.d.ts +23 -0
- package/.medusa/server/src/modules/back-in-stock/index.js +16 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.d.ts +5 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.js +18 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.d.ts +13 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.js +23 -0
- package/.medusa/server/src/modules/back-in-stock/service.d.ts +22 -0
- package/.medusa/server/src/modules/back-in-stock/service.js +12 -0
- package/.medusa/server/src/modules/cms/index.d.ts +32 -1
- package/.medusa/server/src/modules/core-audit/index.d.ts +18 -1
- package/.medusa/server/src/modules/core-audit/writer.d.ts +14 -1
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/campaign.d.ts +69 -3
- package/.medusa/server/src/modules/email-center/defaults.js +7 -1
- package/.medusa/server/src/modules/email-center/index.d.ts +49 -1
- package/.medusa/server/src/modules/email-center/index.js +3 -1
- package/.medusa/server/src/modules/integration-operation/index.d.ts +18 -1
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.js +30 -0
- package/.medusa/server/src/modules/integration-settings/index.d.ts +19 -1
- package/.medusa/server/src/modules/integration-settings/index.js +2 -1
- package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -1
- package/.medusa/server/src/modules/lead/index.d.ts +18 -1
- package/.medusa/server/src/modules/legal-consent/consent.d.ts +4 -4
- package/.medusa/server/src/modules/legal-consent/index.d.ts +46 -1
- package/.medusa/server/src/modules/newsletter/index.d.ts +18 -1
- package/.medusa/server/src/modules/product-review/index.d.ts +32 -1
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.js +28 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.js +20 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.js +18 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.d.ts +15 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.js +19 -0
- package/.medusa/server/src/modules/product-review/models/product-review.d.ts +6 -2
- package/.medusa/server/src/modules/product-review/models/product-review.js +7 -3
- package/.medusa/server/src/modules/product-review/service.d.ts +22 -1
- package/.medusa/server/src/modules/product-review/service.js +3 -2
- package/.medusa/server/src/modules/quote-request/index.d.ts +18 -1
- package/.medusa/server/src/modules/seo/index.d.ts +32 -1
- package/.medusa/server/src/modules/webshop-analytics/index.d.ts +18 -1
- package/.medusa/server/src/modules/wishlist/index.d.ts +18 -1
- package/.medusa/server/src/providers/dpd/index.d.ts +3 -1
- package/.medusa/server/src/providers/dpd/index.js +3 -1
- package/.medusa/server/src/providers/dpd/statusdata-ftp.d.ts +16 -0
- package/.medusa/server/src/providers/dpd/statusdata-ftp.js +268 -0
- package/.medusa/server/src/providers/dpd/statusdata.d.ts +14 -0
- package/.medusa/server/src/providers/dpd/statusdata.js +161 -0
- package/.medusa/server/src/providers/email/index.d.ts +1 -1
- package/.medusa/server/src/providers/foxpost/index.d.ts +1 -1
- package/.medusa/server/src/providers/gls/index.d.ts +1 -1
- package/.medusa/server/src/providers/mpl/client.d.ts +3 -1
- package/.medusa/server/src/providers/mpl/client.js +154 -2
- package/.medusa/server/src/providers/mpl/index.d.ts +1 -1
- package/.medusa/server/src/providers/mpl/service.js +31 -20
- package/.medusa/server/src/providers/mpl/types.d.ts +25 -0
- package/.medusa/server/src/providers/mpl/types.js +1 -1
- package/.medusa/server/src/providers/packeta/index.d.ts +2 -1
- package/.medusa/server/src/providers/packeta/index.js +2 -1
- package/.medusa/server/src/providers/packeta/push-tracking.d.ts +8 -0
- package/.medusa/server/src/providers/packeta/push-tracking.js +96 -0
- package/.medusa/server/src/providers/packeta/service.js +22 -2
- package/.medusa/server/src/providers/resilient-stripe/index.d.ts +1 -1
- package/.medusa/server/src/providers/simplepay/index.d.ts +1 -1
- package/.medusa/server/src/scripts/core-init.d.ts +1 -1
- package/.medusa/server/src/scripts/core-init.js +3 -2
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.d.ts +7 -0
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.js +65 -0
- package/.medusa/server/src/workflows/link-migrated-customer.d.ts +8 -0
- package/.medusa/server/src/workflows/link-migrated-customer.js +17 -0
- package/package.json +2 -1
|
@@ -5,6 +5,8 @@ exports.POST = POST;
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const core_audit_1 = require("../../../../../modules/core-audit");
|
|
7
7
|
const product_review_1 = require("../../../../../modules/product-review");
|
|
8
|
+
const review_reward_1 = require("../../../../../core/review-reward");
|
|
9
|
+
const review_request_1 = require("../../../../../core/review-request");
|
|
8
10
|
async function GET(req, res) {
|
|
9
11
|
const config = (0, product_review_1.loadProductReviewConfig)();
|
|
10
12
|
if (!config.enabled)
|
|
@@ -13,7 +15,7 @@ async function GET(req, res) {
|
|
|
13
15
|
const limit = clamp(req.query?.limit, 1, 100, 20);
|
|
14
16
|
const offset = clamp(req.query?.offset, 0, 100_000, 0);
|
|
15
17
|
const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
16
|
-
const result = await
|
|
18
|
+
const result = await publishedReviewPage(service, productId, offset, limit);
|
|
17
19
|
return res.json({
|
|
18
20
|
reviews: result.reviews,
|
|
19
21
|
summary: { average: result.average, count: result.count },
|
|
@@ -49,7 +51,13 @@ async function POST(req, res) {
|
|
|
49
51
|
const [existing] = await service.listProductReviews({ product_id: productId, customer_id: customerId }, { take: 1 });
|
|
50
52
|
if (existing)
|
|
51
53
|
return res.status(409).json({ message: "Ezt a terméket már értékelted." });
|
|
52
|
-
const
|
|
54
|
+
const requestToken = text(req.body?.review_request_token, 4096);
|
|
55
|
+
const purchase = requestToken
|
|
56
|
+
? await purchaseFromReviewRequestToken(query, requestToken, customerId, productId)
|
|
57
|
+
: await findVerifiedPurchase(query, customerId, productId);
|
|
58
|
+
if (requestToken && !purchase) {
|
|
59
|
+
return res.status(400).json({ message: "Az értékelési link nem ehhez a vásárlóhoz vagy termékhez tartozik." });
|
|
60
|
+
}
|
|
53
61
|
if (config.requireVerifiedPurchase && !purchase) {
|
|
54
62
|
return res.status(403).json({ message: "Ehhez a termékhez csak korábbi vásárlás után küldhetsz értékelést." });
|
|
55
63
|
}
|
|
@@ -61,6 +69,9 @@ async function POST(req, res) {
|
|
|
61
69
|
});
|
|
62
70
|
const customer = customerResult.data?.[0] || {};
|
|
63
71
|
const customerName = publicCustomerName(customer.first_name, customer.last_name);
|
|
72
|
+
const settings = await reviewSettings(service);
|
|
73
|
+
const suspicious = (0, review_reward_1.isSuspiciousReview)(body);
|
|
74
|
+
const initialStatus = settings.auto_publish === true && !suspicious ? "published" : "pending";
|
|
64
75
|
let review;
|
|
65
76
|
try {
|
|
66
77
|
review = await service.createProductReviews({
|
|
@@ -69,9 +80,11 @@ async function POST(req, res) {
|
|
|
69
80
|
customer_name: customerName,
|
|
70
81
|
rating,
|
|
71
82
|
body,
|
|
72
|
-
status:
|
|
83
|
+
status: initialStatus,
|
|
73
84
|
verified_purchase: Boolean(purchase),
|
|
74
85
|
order_id: purchase?.id || null,
|
|
86
|
+
moderated_at: initialStatus === "published" ? new Date() : null,
|
|
87
|
+
moderation_note: suspicious ? "Automatikus ellenőrzés: gyanús/spam mintázat, kézi jóváhagyás szükséges." : null,
|
|
75
88
|
});
|
|
76
89
|
}
|
|
77
90
|
catch (error) {
|
|
@@ -80,6 +93,15 @@ async function POST(req, res) {
|
|
|
80
93
|
return res.status(409).json({ message: "Ezt a terméket már értékelted." });
|
|
81
94
|
throw error;
|
|
82
95
|
}
|
|
96
|
+
let rewardError = null;
|
|
97
|
+
if (initialStatus === "published") {
|
|
98
|
+
try {
|
|
99
|
+
review = await rewardPublishedReview(req.scope, service, review, settings);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
rewardError = error instanceof Error ? error.message : "Az értékelési jutalom létrehozása nem sikerült.";
|
|
103
|
+
}
|
|
104
|
+
}
|
|
83
105
|
await (0, core_audit_1.writeCoreAudit)(req.scope, {
|
|
84
106
|
action: "product_review.create",
|
|
85
107
|
resourceType: "product_review",
|
|
@@ -87,18 +109,43 @@ async function POST(req, res) {
|
|
|
87
109
|
integration: "product-review",
|
|
88
110
|
actorId: customerId,
|
|
89
111
|
summary: `Új termékértékelés érkezett (${rating}/5).`,
|
|
90
|
-
details: { product_id: productId, verified_purchase: Boolean(purchase), status:
|
|
112
|
+
details: { product_id: productId, verified_purchase: Boolean(purchase), status: initialStatus, suspicious, reward_error: rewardError, order_id: purchase?.id || null },
|
|
91
113
|
});
|
|
92
|
-
return res.status(201).json({ review: ownReview(review) });
|
|
114
|
+
return res.status(201).json({ review: ownReview(review), reward_error: rewardError });
|
|
115
|
+
}
|
|
116
|
+
async function rewardPublishedReview(container, service, review, settings) {
|
|
117
|
+
const reward = await (0, review_reward_1.issuePublishedReviewReward)({ container, review, settings });
|
|
118
|
+
if (!reward || reward.existing)
|
|
119
|
+
return review;
|
|
120
|
+
let updated = await service.updateProductReviews({
|
|
121
|
+
id: review.id,
|
|
122
|
+
reward_promotion_id: reward.id,
|
|
123
|
+
reward_coupon_code: reward.code,
|
|
124
|
+
reward_issued_at: new Date(),
|
|
125
|
+
});
|
|
126
|
+
try {
|
|
127
|
+
const mail = await (0, review_reward_1.sendPublishedReviewRewardEmail)({ container, review: updated, reward: reward });
|
|
128
|
+
if (!mail?.skipped) {
|
|
129
|
+
updated = await service.updateProductReviews({ id: review.id, reward_email_sent_at: new Date() });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// A kupon megmarad és nem generálódik újra; az e-mail külön újrapróbálható később.
|
|
134
|
+
}
|
|
135
|
+
return updated;
|
|
136
|
+
}
|
|
137
|
+
async function reviewSettings(service) {
|
|
138
|
+
const [settings] = await service.listProductReviewSettings({}, { take: 1 });
|
|
139
|
+
return settings || { auto_publish: false, reward_enabled: true, reward_type: "percentage", reward_value: 5, reward_currency_code: "huf" };
|
|
93
140
|
}
|
|
94
|
-
async function
|
|
141
|
+
async function publishedReviewPage(service, productId, offset, limit) {
|
|
95
142
|
const pageSize = 500;
|
|
96
143
|
let skip = 0;
|
|
97
144
|
let count = 0;
|
|
98
145
|
let ratingSum = 0;
|
|
99
146
|
const reviews = [];
|
|
100
147
|
while (true) {
|
|
101
|
-
const batch = await service.listProductReviews({ product_id: productId, status: "
|
|
148
|
+
const batch = await service.listProductReviews({ product_id: productId, status: "published" }, { take: pageSize, skip, order: { id: "DESC" } });
|
|
102
149
|
for (const review of batch) {
|
|
103
150
|
const rating = Number(review.rating);
|
|
104
151
|
if (!Number.isFinite(rating) || rating < 1 || rating > 5)
|
|
@@ -112,11 +159,24 @@ async function approvedReviewPage(service, productId, offset, limit) {
|
|
|
112
159
|
break;
|
|
113
160
|
skip += pageSize;
|
|
114
161
|
}
|
|
115
|
-
return {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
162
|
+
return { reviews, count, average: count ? Math.round((ratingSum / count) * 100) / 100 : 0 };
|
|
163
|
+
}
|
|
164
|
+
async function purchaseFromReviewRequestToken(query, token, customerId, productId) {
|
|
165
|
+
const payload = (0, review_request_1.verifyReviewRequestToken)(token);
|
|
166
|
+
if (!payload || payload.customer_id !== customerId)
|
|
167
|
+
return null;
|
|
168
|
+
const result = await query.graph({
|
|
169
|
+
entity: "order",
|
|
170
|
+
fields: ["id", "customer_id", "items.product_id"],
|
|
171
|
+
filters: { id: payload.order_id },
|
|
172
|
+
pagination: { take: 1, skip: 0 },
|
|
173
|
+
});
|
|
174
|
+
const order = result.data?.[0];
|
|
175
|
+
if (!order || String(order.customer_id || "") !== customerId)
|
|
176
|
+
return null;
|
|
177
|
+
return Array.isArray(order.items) && order.items.some((item) => String(item?.product_id || "") === productId)
|
|
178
|
+
? order
|
|
179
|
+
: null;
|
|
120
180
|
}
|
|
121
181
|
async function findVerifiedPurchase(query, customerId, productId) {
|
|
122
182
|
const pageSize = 200;
|
|
@@ -137,23 +197,9 @@ async function findVerifiedPurchase(query, customerId, productId) {
|
|
|
137
197
|
}
|
|
138
198
|
}
|
|
139
199
|
function publicReview(review) {
|
|
140
|
-
return {
|
|
141
|
-
id: review.id,
|
|
142
|
-
product_id: review.product_id,
|
|
143
|
-
customer_name: review.customer_name || "Vásárló",
|
|
144
|
-
rating: Number(review.rating),
|
|
145
|
-
body: review.body,
|
|
146
|
-
verified_purchase: review.verified_purchase === true,
|
|
147
|
-
created_at: review.created_at,
|
|
148
|
-
updated_at: review.updated_at,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
function ownReview(review) {
|
|
152
|
-
return {
|
|
153
|
-
...publicReview(review),
|
|
154
|
-
status: review.status,
|
|
155
|
-
};
|
|
200
|
+
return { id: review.id, product_id: review.product_id, customer_name: review.customer_name || "Vásárló", rating: Number(review.rating), body: review.body, verified_purchase: review.verified_purchase === true, created_at: review.created_at, updated_at: review.updated_at };
|
|
156
201
|
}
|
|
202
|
+
function ownReview(review) { return { ...publicReview(review), status: review.status }; }
|
|
157
203
|
function publicCustomerName(firstName, lastName) {
|
|
158
204
|
const first = typeof firstName === "string" ? firstName.trim() : "";
|
|
159
205
|
const last = typeof lastName === "string" ? lastName.trim() : "";
|
|
@@ -161,14 +207,10 @@ function publicCustomerName(firstName, lastName) {
|
|
|
161
207
|
return `${first} ${last.slice(0, 1).toUpperCase()}.`;
|
|
162
208
|
return first || "Vásárló";
|
|
163
209
|
}
|
|
164
|
-
function text(value, max) {
|
|
165
|
-
if (typeof value !== "string")
|
|
166
|
-
return "";
|
|
167
|
-
return value.trim().slice(0, max);
|
|
168
|
-
}
|
|
210
|
+
function text(value, max) { return typeof value === "string" ? value.trim().slice(0, max) : ""; }
|
|
169
211
|
function clamp(value, min, max, fallback) {
|
|
170
212
|
const raw = Array.isArray(value) ? value[0] : value;
|
|
171
213
|
const number = Number(raw);
|
|
172
214
|
return Number.isFinite(number) ? Math.max(min, Math.min(max, Math.trunc(number))) : fallback;
|
|
173
215
|
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3RzL1tpZF0vcmV2aWV3cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSxrQkFnQkM7QUFFRCxvQkE2RUM7QUE1R0QscURBQXFFO0FBQ3JFLGtFQUFrRTtBQUNsRSwwRUFJOEM7QUFPdkMsS0FBSyxVQUFVLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEdBQW1CO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsd0NBQXVCLEdBQUUsQ0FBQTtJQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLENBQUMsQ0FBQTtJQUU1RyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDcEQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDakQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDdEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQXlCLENBQUE7SUFDaEYsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUUxRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDZCxP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
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb2R1Y3RzL1tpZF0vcmV2aWV3cy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdCQSxrQkFnQkM7QUFFRCxvQkFpR0M7QUF0SUQscURBQXFFO0FBQ3JFLGtFQUFrRTtBQUNsRSwwRUFJOEM7QUFDOUMscUVBSTBDO0FBQzFDLHVFQUE2RTtBQU90RSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBQSx3Q0FBdUIsR0FBRSxDQUFBO0lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztRQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsNkNBQTZDLEVBQUUsQ0FBQyxDQUFBO0lBRTVHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNwRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQ0FBcUIsQ0FBeUIsQ0FBQTtJQUNoRixNQUFNLE1BQU0sR0FBRyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBRTNFLE9BQU8s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
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const review_request_1 = require("../../../core/review-request");
|
|
6
|
+
const product_review_1 = require("../../../modules/product-review");
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
const token = String(req.query?.token || "").trim();
|
|
9
|
+
const payload = (0, review_request_1.verifyReviewRequestToken)(token);
|
|
10
|
+
if (!payload)
|
|
11
|
+
return res.status(400).json({ message: "Az értékelési link érvénytelen vagy lejárt." });
|
|
12
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
13
|
+
const result = await query.graph({
|
|
14
|
+
entity: "order",
|
|
15
|
+
fields: [
|
|
16
|
+
"id",
|
|
17
|
+
"customer_id",
|
|
18
|
+
"display_id",
|
|
19
|
+
"items.id",
|
|
20
|
+
"items.product_id",
|
|
21
|
+
"items.title",
|
|
22
|
+
"items.thumbnail",
|
|
23
|
+
"items.product.handle",
|
|
24
|
+
"items.product.title",
|
|
25
|
+
"items.product.thumbnail",
|
|
26
|
+
],
|
|
27
|
+
filters: { id: payload.order_id },
|
|
28
|
+
pagination: { take: 1, skip: 0 },
|
|
29
|
+
});
|
|
30
|
+
const order = result.data?.[0];
|
|
31
|
+
if (!order || String(order.customer_id || "") !== payload.customer_id) {
|
|
32
|
+
return res.status(404).json({ message: "A rendelés nem található." });
|
|
33
|
+
}
|
|
34
|
+
const reviewService = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
35
|
+
const reviews = await reviewService.listProductReviews({ customer_id: payload.customer_id, order_id: payload.order_id }, { take: 200 });
|
|
36
|
+
const reviewed = new Set(reviews.map((review) => String(review.product_id)));
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const products = (Array.isArray(order.items) ? order.items : [])
|
|
39
|
+
.map((item) => {
|
|
40
|
+
const productId = String(item.product_id || item.product?.id || "");
|
|
41
|
+
if (!productId || seen.has(productId))
|
|
42
|
+
return null;
|
|
43
|
+
seen.add(productId);
|
|
44
|
+
return {
|
|
45
|
+
product_id: productId,
|
|
46
|
+
title: item.product?.title || item.title || "Termék",
|
|
47
|
+
handle: item.product?.handle || null,
|
|
48
|
+
thumbnail: item.product?.thumbnail || item.thumbnail || null,
|
|
49
|
+
reviewed: reviewed.has(productId),
|
|
50
|
+
};
|
|
51
|
+
})
|
|
52
|
+
.filter(Boolean);
|
|
53
|
+
res.setHeader("Cache-Control", "no-store");
|
|
54
|
+
return res.json({
|
|
55
|
+
order: { id: order.id, display_id: order.display_id || null },
|
|
56
|
+
products,
|
|
57
|
+
reward: { available_after_publish: true },
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Jldmlldy1yZXF1ZXN0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esa0JBd0RDO0FBaEVELHFEQUFxRTtBQUNyRSxpRUFBdUU7QUFDdkUsb0VBQWtHO0FBTTNGLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBQSx5Q0FBd0IsRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUMvQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsNkNBQTZDLEVBQUUsQ0FBQyxDQUFBO0lBRXJHLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBeUIsQ0FBQTtJQUN4RixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0IsTUFBTSxFQUFFLE9BQU87UUFDZixNQUFNLEVBQUU7WUFDTixJQUFJO1lBQ0osYUFBYTtZQUNiLFlBQVk7WUFDWixVQUFVO1lBQ1Ysa0JBQWtCO1lBQ2xCLGFBQWE7WUFDYixpQkFBaUI7WUFDakIsc0JBQXNCO1lBQ3RCLHFCQUFxQjtZQUNyQix5QkFBeUI7U0FDMUI7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRTtRQUNqQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7S0FDakMsQ0FBQyxDQUFB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
|
|
@@ -9,4 +9,4 @@ export type HszrdmCommerceConfigOptions = {
|
|
|
9
9
|
* helper. Shared modules, providers and Core plugin resources remain owned by
|
|
10
10
|
* @hszrdm/core; project-specific customizations stay in the host application.
|
|
11
11
|
*/
|
|
12
|
-
export declare function createHszrdmCommerceConfig(options?: HszrdmCommerceConfigOptions): ConfigModule;
|
|
12
|
+
export declare function createHszrdmCommerceConfig(options?: HszrdmCommerceConfigOptions): import("@medusajs/types").ConfigModule;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export type AbandonedCartConfig = {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
delayHours: number;
|
|
4
|
+
recoveryTtlHours: number;
|
|
5
|
+
couponEnabled: boolean;
|
|
6
|
+
couponType: "percentage" | "fixed";
|
|
7
|
+
couponValue: number;
|
|
8
|
+
couponCurrency: string;
|
|
9
|
+
};
|
|
10
|
+
export type AbandonedCartRecoveryPayload = {
|
|
11
|
+
cart_id: string;
|
|
12
|
+
email_hash: string;
|
|
13
|
+
locale: "hu-HU" | "en-US";
|
|
14
|
+
exp: number;
|
|
15
|
+
};
|
|
16
|
+
type Container = {
|
|
17
|
+
resolve: (key: string) => unknown;
|
|
18
|
+
};
|
|
19
|
+
type CartLike = {
|
|
20
|
+
id: string;
|
|
21
|
+
email?: string | null;
|
|
22
|
+
locale?: string | null;
|
|
23
|
+
currency_code?: string | null;
|
|
24
|
+
total?: number | null;
|
|
25
|
+
items?: Array<{
|
|
26
|
+
quantity?: number | null;
|
|
27
|
+
}> | null;
|
|
28
|
+
metadata?: Record<string, any> | null;
|
|
29
|
+
};
|
|
30
|
+
export declare function normalizeAbandonedCartConfig(env: Record<string, string | undefined>): AbandonedCartConfig;
|
|
31
|
+
export declare function createAbandonedCartRecoveryToken(cartId: string, email: string, locale: unknown, ttlHours?: number): string;
|
|
32
|
+
export declare function verifyAbandonedCartRecoveryToken(token: string): AbandonedCartRecoveryPayload | null;
|
|
33
|
+
export declare function abandonedCartRecoveryUrl(cartId: string, email: string, locale: unknown, ttlHours?: number): string;
|
|
34
|
+
export declare function abandonedCartEmailHash(email: unknown): string;
|
|
35
|
+
export declare function subscribedNewsletterRecipient(container: Container, email: string): Promise<Record<string, any>>;
|
|
36
|
+
export declare function issueAbandonedCartCoupon(input: {
|
|
37
|
+
container: Container;
|
|
38
|
+
cartId: string;
|
|
39
|
+
config: AbandonedCartConfig;
|
|
40
|
+
}): Promise<{
|
|
41
|
+
id: any;
|
|
42
|
+
code: any;
|
|
43
|
+
existing: boolean;
|
|
44
|
+
} | null>;
|
|
45
|
+
export declare function sendAbandonedCartRecoveryEmail(input: {
|
|
46
|
+
container: Container;
|
|
47
|
+
cart: CartLike;
|
|
48
|
+
config: AbandonedCartConfig;
|
|
49
|
+
couponCode?: string | null;
|
|
50
|
+
}): Promise<{
|
|
51
|
+
skipped: boolean;
|
|
52
|
+
delivery: Record<string, any>;
|
|
53
|
+
notification?: undefined;
|
|
54
|
+
} | {
|
|
55
|
+
skipped: boolean;
|
|
56
|
+
delivery: Record<string, any>;
|
|
57
|
+
notification: unknown;
|
|
58
|
+
} | {
|
|
59
|
+
skipped: boolean;
|
|
60
|
+
reason: "not-subscribed";
|
|
61
|
+
}>;
|
|
62
|
+
export declare function abandonedCartCouponCode(cartId: string): string;
|
|
63
|
+
export declare function cartLocale(cart: CartLike): "hu-HU" | "en-US";
|
|
64
|
+
export {};
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeAbandonedCartConfig = normalizeAbandonedCartConfig;
|
|
4
|
+
exports.createAbandonedCartRecoveryToken = createAbandonedCartRecoveryToken;
|
|
5
|
+
exports.verifyAbandonedCartRecoveryToken = verifyAbandonedCartRecoveryToken;
|
|
6
|
+
exports.abandonedCartRecoveryUrl = abandonedCartRecoveryUrl;
|
|
7
|
+
exports.abandonedCartEmailHash = abandonedCartEmailHash;
|
|
8
|
+
exports.subscribedNewsletterRecipient = subscribedNewsletterRecipient;
|
|
9
|
+
exports.issueAbandonedCartCoupon = issueAbandonedCartCoupon;
|
|
10
|
+
exports.sendAbandonedCartRecoveryEmail = sendAbandonedCartRecoveryEmail;
|
|
11
|
+
exports.abandonedCartCouponCode = abandonedCartCouponCode;
|
|
12
|
+
exports.cartLocale = cartLocale;
|
|
13
|
+
const node_crypto_1 = require("node:crypto");
|
|
14
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
15
|
+
const newsletter_1 = require("../modules/newsletter");
|
|
16
|
+
const email_center_1 = require("../modules/email-center");
|
|
17
|
+
const customer_email_1 = require("./customer-email");
|
|
18
|
+
function normalizeAbandonedCartConfig(env) {
|
|
19
|
+
const couponType = env.ABANDONED_CART_COUPON_TYPE === "fixed" ? "fixed" : "percentage";
|
|
20
|
+
const fallbackValue = couponType === "fixed" ? 2000 : 5;
|
|
21
|
+
const rawValue = Number(env.ABANDONED_CART_COUPON_VALUE ?? fallbackValue);
|
|
22
|
+
const couponValue = Number.isFinite(rawValue) && rawValue > 0
|
|
23
|
+
? couponType === "percentage"
|
|
24
|
+
? Math.min(100, rawValue)
|
|
25
|
+
: rawValue
|
|
26
|
+
: fallbackValue;
|
|
27
|
+
return {
|
|
28
|
+
enabled: env.ABANDONED_CART_ENABLED === "true",
|
|
29
|
+
delayHours: boundedInteger(env.ABANDONED_CART_DELAY_HOURS, 24, 1, 720),
|
|
30
|
+
recoveryTtlHours: boundedInteger(env.ABANDONED_CART_RECOVERY_TTL_HOURS, 168, 1, 720),
|
|
31
|
+
couponEnabled: env.ABANDONED_CART_COUPON_ENABLED === "true",
|
|
32
|
+
couponType,
|
|
33
|
+
couponValue,
|
|
34
|
+
couponCurrency: String(env.ABANDONED_CART_COUPON_CURRENCY || "huf").trim().toLowerCase() || "huf",
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function createAbandonedCartRecoveryToken(cartId, email, locale, ttlHours = 168) {
|
|
38
|
+
const payload = {
|
|
39
|
+
cart_id: String(cartId || "").trim(),
|
|
40
|
+
email_hash: abandonedCartEmailHash(email),
|
|
41
|
+
locale: normalizeRecoveryLocale(locale),
|
|
42
|
+
exp: Math.floor(Date.now() / 1000) + Math.max(1, Math.min(720, Math.trunc(Number(ttlHours) || 168))) * 3600,
|
|
43
|
+
};
|
|
44
|
+
if (!payload.cart_id)
|
|
45
|
+
throw new Error("A kosár azonosítója hiányzik.");
|
|
46
|
+
const encoded = Buffer.from(JSON.stringify(payload)).toString("base64url");
|
|
47
|
+
return `${encoded}.${sign(encoded)}`;
|
|
48
|
+
}
|
|
49
|
+
function verifyAbandonedCartRecoveryToken(token) {
|
|
50
|
+
const [encoded, signature] = String(token || "").trim().split(".");
|
|
51
|
+
if (!encoded || !signature)
|
|
52
|
+
return null;
|
|
53
|
+
const expected = Buffer.from(sign(encoded), "utf8");
|
|
54
|
+
const actual = Buffer.from(signature, "utf8");
|
|
55
|
+
if (expected.length !== actual.length || !(0, node_crypto_1.timingSafeEqual)(expected, actual))
|
|
56
|
+
return null;
|
|
57
|
+
try {
|
|
58
|
+
const payload = JSON.parse(Buffer.from(encoded, "base64url").toString("utf8"));
|
|
59
|
+
if (!payload.cart_id || !payload.email_hash || !payload.exp)
|
|
60
|
+
return null;
|
|
61
|
+
if (payload.exp <= Math.floor(Date.now() / 1000))
|
|
62
|
+
return null;
|
|
63
|
+
payload.locale = normalizeRecoveryLocale(payload.locale);
|
|
64
|
+
return payload;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function abandonedCartRecoveryUrl(cartId, email, locale, ttlHours = 168) {
|
|
71
|
+
const normalizedLocale = normalizeRecoveryLocale(locale);
|
|
72
|
+
const token = createAbandonedCartRecoveryToken(cartId, email, normalizedLocale, ttlHours);
|
|
73
|
+
const path = normalizedLocale === "en-US" ? "/en/cart-recovery" : "/hu/kosar-visszaallitas";
|
|
74
|
+
return `${(0, customer_email_1.storefrontUrl)()}${path}?token=${encodeURIComponent(token)}`;
|
|
75
|
+
}
|
|
76
|
+
function abandonedCartEmailHash(email) {
|
|
77
|
+
return (0, node_crypto_1.createHash)("sha256")
|
|
78
|
+
.update((0, newsletter_1.normalizeNewsletterEmail)(email), "utf8")
|
|
79
|
+
.digest("hex");
|
|
80
|
+
}
|
|
81
|
+
async function subscribedNewsletterRecipient(container, email) {
|
|
82
|
+
const normalized = (0, newsletter_1.normalizeNewsletterEmail)(email);
|
|
83
|
+
const newsletter = container.resolve(newsletter_1.NEWSLETTER_MODULE);
|
|
84
|
+
const rows = await newsletter.listNewsletterSubscribers({ email: normalized, status: "subscribed" }, { take: 1 });
|
|
85
|
+
return rows[0] || null;
|
|
86
|
+
}
|
|
87
|
+
async function issueAbandonedCartCoupon(input) {
|
|
88
|
+
if (!input.config.couponEnabled)
|
|
89
|
+
return null;
|
|
90
|
+
const promotionService = input.container.resolve(utils_1.Modules.PROMOTION);
|
|
91
|
+
const code = abandonedCartCouponCode(input.cartId);
|
|
92
|
+
const existing = await promotionService.listPromotions({ code }, { take: 1 });
|
|
93
|
+
if (existing?.[0]) {
|
|
94
|
+
return { id: existing[0].id, code: existing[0].code || code, existing: true };
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const promotion = await promotionService.createPromotions({
|
|
98
|
+
code,
|
|
99
|
+
type: "standard",
|
|
100
|
+
status: "active",
|
|
101
|
+
limit: 1,
|
|
102
|
+
application_method: {
|
|
103
|
+
type: input.config.couponType,
|
|
104
|
+
target_type: "order",
|
|
105
|
+
value: input.config.couponValue,
|
|
106
|
+
...(input.config.couponType === "fixed"
|
|
107
|
+
? { currency_code: input.config.couponCurrency }
|
|
108
|
+
: {}),
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
return { id: promotion.id, code: promotion.code || code, existing: false };
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const retried = await promotionService.listPromotions({ code }, { take: 1 });
|
|
115
|
+
if (retried?.[0]) {
|
|
116
|
+
return { id: retried[0].id, code: retried[0].code || code, existing: true };
|
|
117
|
+
}
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function sendAbandonedCartRecoveryEmail(input) {
|
|
122
|
+
const email = (0, newsletter_1.normalizeNewsletterEmail)(input.cart.email);
|
|
123
|
+
const subscriber = await subscribedNewsletterRecipient(input.container, email);
|
|
124
|
+
if (!subscriber)
|
|
125
|
+
return { skipped: true, reason: "not-subscribed" };
|
|
126
|
+
const locale = cartLocale(input.cart);
|
|
127
|
+
const unsubscribeToken = (0, newsletter_1.createNewsletterUnsubscribeToken)(String(subscriber.id), email);
|
|
128
|
+
const unsubscribeUrl = (0, newsletter_1.newsletterUnsubscribeUrl)(unsubscribeToken);
|
|
129
|
+
const recoveryUrl = abandonedCartRecoveryUrl(input.cart.id, email, locale, input.config.recoveryTtlHours);
|
|
130
|
+
const couponMessage = input.couponCode
|
|
131
|
+
? locale === "en-US"
|
|
132
|
+
? `Your single-use discount code: ${input.couponCode}`
|
|
133
|
+
: `Az egyszer használható kedvezménykódod: ${input.couponCode}`
|
|
134
|
+
: "";
|
|
135
|
+
const content = await (0, email_center_1.resolveEmailContent)({
|
|
136
|
+
container: input.container,
|
|
137
|
+
key: "cart.abandoned",
|
|
138
|
+
locale,
|
|
139
|
+
data: {
|
|
140
|
+
recovery_url: recoveryUrl,
|
|
141
|
+
coupon_code: input.couponCode || "",
|
|
142
|
+
coupon_message: couponMessage,
|
|
143
|
+
unsubscribe_url: unsubscribeUrl,
|
|
144
|
+
item_count: cartItemCount(input.cart),
|
|
145
|
+
total: input.cart.total ?? "",
|
|
146
|
+
currency_code: input.cart.currency_code || "",
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
if (!content)
|
|
150
|
+
throw new Error("A cart.abandoned Email Center sablon nem érhető el.");
|
|
151
|
+
return (0, email_center_1.sendManagedEmail)({
|
|
152
|
+
container: input.container,
|
|
153
|
+
to: email,
|
|
154
|
+
key: "cart.abandoned",
|
|
155
|
+
locale,
|
|
156
|
+
content: (0, email_center_1.ensureMarketingUnsubscribe)(content, unsubscribeUrl, locale),
|
|
157
|
+
idempotencyKey: `abandoned-cart:${input.cart.id}`,
|
|
158
|
+
resourceId: input.cart.id,
|
|
159
|
+
resourceType: "cart",
|
|
160
|
+
track: true,
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function abandonedCartCouponCode(cartId) {
|
|
164
|
+
const digest = (0, node_crypto_1.createHmac)("sha256", tokenSecret())
|
|
165
|
+
.update(String(cartId || ""), "utf8")
|
|
166
|
+
.digest("hex")
|
|
167
|
+
.slice(0, 10)
|
|
168
|
+
.toUpperCase();
|
|
169
|
+
return `CART-${digest}`;
|
|
170
|
+
}
|
|
171
|
+
function cartLocale(cart) {
|
|
172
|
+
return normalizeRecoveryLocale(cart.locale || cart.metadata?.storefront_locale || cart.metadata?.locale);
|
|
173
|
+
}
|
|
174
|
+
function cartItemCount(cart) {
|
|
175
|
+
return (cart.items || []).reduce((sum, item) => sum + Math.max(0, Number(item?.quantity) || 0), 0);
|
|
176
|
+
}
|
|
177
|
+
function normalizeRecoveryLocale(value) {
|
|
178
|
+
return String(value || "").trim().toLowerCase().startsWith("en") ? "en-US" : "hu-HU";
|
|
179
|
+
}
|
|
180
|
+
function boundedInteger(value, fallback, min, max) {
|
|
181
|
+
const parsed = Number(value);
|
|
182
|
+
return Number.isFinite(parsed) ? Math.max(min, Math.min(max, Math.trunc(parsed))) : fallback;
|
|
183
|
+
}
|
|
184
|
+
function sign(value) {
|
|
185
|
+
return (0, node_crypto_1.createHmac)("sha256", tokenSecret()).update(value, "utf8").digest("base64url");
|
|
186
|
+
}
|
|
187
|
+
function tokenSecret() {
|
|
188
|
+
const secret = String(process.env.ABANDONED_CART_TOKEN_SECRET ||
|
|
189
|
+
process.env.COOKIE_SECRET ||
|
|
190
|
+
process.env.JWT_SECRET ||
|
|
191
|
+
"").trim();
|
|
192
|
+
if (secret.length < 16) {
|
|
193
|
+
throw new Error("ABANDONED_CART_TOKEN_SECRET, COOKIE_SECRET vagy JWT_SECRET szükséges a kosár-visszaállító linkekhez.");
|
|
194
|
+
}
|
|
195
|
+
return secret;
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJhbmRvbmVkLWNhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9hYmFuZG9uZWQtY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZDQSxvRUFtQkM7QUFFRCw0RUFlQztBQUVELDRFQWdCQztBQUVELDREQVVDO0FBRUQsd0RBSUM7QUFFRCxzRUFRQztBQUVELDREQXFDQztBQUVELHdFQW9EQztBQUVELDBEQU9DO0FBRUQsZ0NBSUM7QUEzT0QsNkNBQXFFO0FBQ3JFLHFEQUFtRDtBQUNuRCxzREFNOEI7QUFDOUIsMERBSWdDO0FBQ2hDLHFEQUFnRDtBQStCaEQsU0FBZ0IsNEJBQTRCLENBQUMsR0FBdUM7SUFDbEYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUE7SUFDdEYsTUFBTSxhQUFhLEdBQUcsVUFBVSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxhQUFhLENBQUMsQ0FBQTtJQUN6RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDO1FBQzNELENBQUMsQ0FBQyxVQUFVLEtBQUssWUFBWTtZQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxRQUFRO1FBQ1osQ0FBQyxDQUFDLGFBQWEsQ0FBQTtJQUVqQixPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsS0FBSyxNQUFNO1FBQzlDLFVBQVUsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsRUFB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
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getTotalVariantAvailability } from "@medusajs/framework/utils";
|
|
2
|
+
export type BackInStockVariant = {
|
|
3
|
+
id: string;
|
|
4
|
+
title?: string | null;
|
|
5
|
+
sku?: string | null;
|
|
6
|
+
manage_inventory?: boolean | null;
|
|
7
|
+
allow_backorder?: boolean | null;
|
|
8
|
+
metadata?: Record<string, unknown> | null;
|
|
9
|
+
product?: {
|
|
10
|
+
id?: string | null;
|
|
11
|
+
title?: string | null;
|
|
12
|
+
handle?: string | null;
|
|
13
|
+
metadata?: Record<string, unknown> | null;
|
|
14
|
+
} | null;
|
|
15
|
+
};
|
|
16
|
+
type Query = Parameters<typeof getTotalVariantAvailability>[0];
|
|
17
|
+
type ResolveContainer = {
|
|
18
|
+
resolve: (key: string) => unknown;
|
|
19
|
+
};
|
|
20
|
+
export declare function variantAvailability(query: Query, variantId: string): Promise<number | null>;
|
|
21
|
+
export declare function variantMinimumOrderQuantity(variant: BackInStockVariant): number;
|
|
22
|
+
export declare function variantIsPurchasable(variant: BackInStockVariant, availability: number | null): boolean;
|
|
23
|
+
export declare function backInStockProductUrl(variant: BackInStockVariant, locale: string): string;
|
|
24
|
+
export declare function dispatchBackInStockVariant(input: {
|
|
25
|
+
container: ResolveContainer;
|
|
26
|
+
query: Query;
|
|
27
|
+
variant: BackInStockVariant;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
available: boolean;
|
|
30
|
+
sent: number;
|
|
31
|
+
availability: number | null;
|
|
32
|
+
}>;
|
|
33
|
+
export declare function sendBackInStockEmail(input: {
|
|
34
|
+
container: ResolveContainer;
|
|
35
|
+
subscription: {
|
|
36
|
+
id: string;
|
|
37
|
+
email: string;
|
|
38
|
+
locale?: string | null;
|
|
39
|
+
notificationCycle?: number | null;
|
|
40
|
+
};
|
|
41
|
+
variant: BackInStockVariant;
|
|
42
|
+
}): Promise<{
|
|
43
|
+
skipped: boolean;
|
|
44
|
+
delivery: Record<string, any>;
|
|
45
|
+
notification?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
skipped: boolean;
|
|
48
|
+
delivery: Record<string, any>;
|
|
49
|
+
notification: unknown;
|
|
50
|
+
}>;
|
|
51
|
+
export {};
|