@hszrdm/core 1.7.0 → 1.8.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 (183) hide show
  1. package/.medusa/server/src/admin/index.js +6223 -4784
  2. package/.medusa/server/src/admin/index.mjs +6224 -4785
  3. package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.d.ts +2 -0
  4. package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.js +26 -0
  5. package/.medusa/server/src/api/admin/billingo/advance/route.d.ts +8 -0
  6. package/.medusa/server/src/api/admin/billingo/advance/route.js +55 -0
  7. package/.medusa/server/src/api/admin/billingo/partial-credit/route.d.ts +8 -0
  8. package/.medusa/server/src/api/admin/billingo/partial-credit/route.js +69 -0
  9. package/.medusa/server/src/api/admin/documents/[id]/route.d.ts +22 -0
  10. package/.medusa/server/src/api/admin/documents/[id]/route.js +107 -0
  11. package/.medusa/server/src/api/admin/documents/route.d.ts +21 -0
  12. package/.medusa/server/src/api/admin/documents/route.js +117 -0
  13. package/.medusa/server/src/api/admin/google-ads/diagnostics/route.d.ts +2 -0
  14. package/.medusa/server/src/api/admin/google-ads/diagnostics/route.js +26 -0
  15. package/.medusa/server/src/api/admin/google-ads/oauth/start/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/google-ads/oauth/start/route.js +27 -0
  17. package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.js +69 -0
  19. package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.d.ts +2 -0
  20. package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.js +26 -0
  21. package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.d.ts +2 -0
  22. package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.js +25 -0
  23. package/.medusa/server/src/api/admin/orders/[id]/shipping/route.js +28 -28
  24. package/.medusa/server/src/api/admin/shipping/mpl/close/route.d.ts +1 -1
  25. package/.medusa/server/src/api/admin/shipping/mpl/close/route.js +48 -70
  26. package/.medusa/server/src/api/auth/google-ads/callback/route.d.ts +2 -0
  27. package/.medusa/server/src/api/auth/google-ads/callback/route.js +58 -0
  28. package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.d.ts +2 -0
  29. package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.js +33 -0
  30. package/.medusa/server/src/api/feeds/google-merchant.xml/route.js +5 -3
  31. package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.d.ts +2 -0
  32. package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.js +211 -0
  33. package/.medusa/server/src/api/hooks/simplepay/ipn/route.js +113 -23
  34. package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.d.ts +2 -0
  35. package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.js +113 -0
  36. package/.medusa/server/src/api/store/arukereso/backlink/route.d.ts +2 -0
  37. package/.medusa/server/src/api/store/arukereso/backlink/route.js +73 -0
  38. package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.d.ts +2 -0
  39. package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.js +84 -0
  40. package/.medusa/server/src/api/store/arukereso/widget/route.d.ts +2 -0
  41. package/.medusa/server/src/api/store/arukereso/widget/route.js +64 -0
  42. package/.medusa/server/src/api/store/documents/route.d.ts +2 -0
  43. package/.medusa/server/src/api/store/documents/route.js +84 -0
  44. package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.d.ts +2 -0
  45. package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.js +50 -0
  46. package/.medusa/server/src/config.d.ts +3 -3
  47. package/.medusa/server/src/config.js +64 -87
  48. package/.medusa/server/src/core/documents.d.ts +31 -0
  49. package/.medusa/server/src/core/documents.js +47 -0
  50. package/.medusa/server/src/core/version.d.ts +2 -2
  51. package/.medusa/server/src/core/version.js +2 -2
  52. package/.medusa/server/src/lib/modules/arukereso/index.d.ts +1 -0
  53. package/.medusa/server/src/lib/modules/arukereso/index.js +2 -1
  54. package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.d.ts +19 -0
  55. package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.js +100 -0
  56. package/.medusa/server/src/lib/modules/billingo/actions.js +42 -12
  57. package/.medusa/server/src/lib/modules/billingo/advance.d.ts +68 -0
  58. package/.medusa/server/src/lib/modules/billingo/advance.js +309 -0
  59. package/.medusa/server/src/lib/modules/billingo/automation.js +49 -9
  60. package/.medusa/server/src/lib/modules/billingo/client.d.ts +5 -1
  61. package/.medusa/server/src/lib/modules/billingo/client.js +12 -6
  62. package/.medusa/server/src/lib/modules/billingo/index.d.ts +2 -0
  63. package/.medusa/server/src/lib/modules/billingo/index.js +3 -1
  64. package/.medusa/server/src/lib/modules/billingo/mapper.d.ts +38 -1
  65. package/.medusa/server/src/lib/modules/billingo/mapper.js +32 -1
  66. package/.medusa/server/src/lib/modules/billingo/partial-credit.d.ts +55 -0
  67. package/.medusa/server/src/lib/modules/billingo/partial-credit.js +338 -0
  68. package/.medusa/server/src/lib/modules/billingo/types.d.ts +7 -2
  69. package/.medusa/server/src/lib/modules/google-ads/adjustments.d.ts +21 -0
  70. package/.medusa/server/src/lib/modules/google-ads/adjustments.js +146 -0
  71. package/.medusa/server/src/lib/modules/google-ads/api.d.ts +23 -0
  72. package/.medusa/server/src/lib/modules/google-ads/api.js +171 -0
  73. package/.medusa/server/src/lib/modules/google-ads/diagnostics.d.ts +47 -0
  74. package/.medusa/server/src/lib/modules/google-ads/diagnostics.js +164 -0
  75. package/.medusa/server/src/lib/modules/google-merchant/category-fields.d.ts +7 -0
  76. package/.medusa/server/src/lib/modules/google-merchant/category-fields.js +210 -0
  77. package/.medusa/server/src/lib/modules/google-merchant/data-source.d.ts +17 -0
  78. package/.medusa/server/src/lib/modules/google-merchant/data-source.js +132 -0
  79. package/.medusa/server/src/lib/modules/google-merchant/diagnostics.d.ts +33 -0
  80. package/.medusa/server/src/lib/modules/google-merchant/diagnostics.js +113 -0
  81. package/.medusa/server/src/lib/modules/google-merchant/index.d.ts +5 -0
  82. package/.medusa/server/src/lib/modules/google-merchant/index.js +6 -1
  83. package/.medusa/server/src/lib/modules/google-merchant/merchant-api.d.ts +18 -0
  84. package/.medusa/server/src/lib/modules/google-merchant/merchant-api.js +120 -0
  85. package/.medusa/server/src/lib/modules/google-merchant/shipping.d.ts +13 -0
  86. package/.medusa/server/src/lib/modules/google-merchant/shipping.js +97 -0
  87. package/.medusa/server/src/lib/modules/google-tag-manager/api.d.ts +1 -0
  88. package/.medusa/server/src/lib/modules/google-tag-manager/api.js +3 -0
  89. package/.medusa/server/src/lib/modules/google-tag-manager/index.d.ts +1 -0
  90. package/.medusa/server/src/lib/modules/google-tag-manager/index.js +3 -0
  91. package/.medusa/server/src/lib/modules/google-tag-manager/sync.d.ts +1 -0
  92. package/.medusa/server/src/lib/modules/google-tag-manager/sync.js +3 -0
  93. package/.medusa/server/src/lib/modules/shipping/actions.js +163 -352
  94. package/.medusa/server/src/lib/modules/shipping/durable-create.d.ts +2 -1
  95. package/.medusa/server/src/lib/modules/shipping/durable-create.js +33 -5
  96. package/.medusa/server/src/lib/modules/shipping/idempotency.js +4 -2
  97. package/.medusa/server/src/lib/modules/shipping/types.d.ts +1 -1
  98. package/.medusa/server/src/modules/core-documents/index.d.ts +38 -0
  99. package/.medusa/server/src/modules/core-documents/index.js +18 -0
  100. package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.d.ts +5 -0
  101. package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.js +22 -0
  102. package/.medusa/server/src/modules/core-documents/models/core-document-assignment.d.ts +9 -0
  103. package/.medusa/server/src/modules/core-documents/models/core-document-assignment.js +18 -0
  104. package/.medusa/server/src/modules/core-documents/models/core-document.d.ts +18 -0
  105. package/.medusa/server/src/modules/core-documents/models/core-document.js +27 -0
  106. package/.medusa/server/src/modules/core-documents/service.d.ts +38 -0
  107. package/.medusa/server/src/modules/core-documents/service.js +13 -0
  108. package/.medusa/server/src/modules/integration-operation/state.d.ts +1 -0
  109. package/.medusa/server/src/modules/integration-operation/state.js +11 -50
  110. package/.medusa/server/src/modules/integration-operation/types.d.ts +1 -1
  111. package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +19 -2
  112. package/.medusa/server/src/modules/integration-settings/connection-test.js +14 -1
  113. package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.d.ts +2 -0
  114. package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.js +49 -0
  115. package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.d.ts +1 -0
  116. package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.js +35 -0
  117. package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +23 -2
  118. package/.medusa/server/src/modules/integration-settings/hot-reload-registration.d.ts +1 -0
  119. package/.medusa/server/src/modules/integration-settings/hot-reload-registration.js +23 -0
  120. package/.medusa/server/src/modules/integration-settings/index.d.ts +4 -0
  121. package/.medusa/server/src/modules/integration-settings/index.js +5 -1
  122. package/.medusa/server/src/modules/integration-settings/manager.js +38 -4
  123. package/.medusa/server/src/modules/integration-settings/reloadable.d.ts +10 -0
  124. package/.medusa/server/src/modules/integration-settings/reloadable.js +58 -0
  125. package/.medusa/server/src/modules/integration-settings/runtime-snapshot.d.ts +9 -0
  126. package/.medusa/server/src/modules/integration-settings/runtime-snapshot.js +48 -3
  127. package/.medusa/server/src/modules/integration-settings/simplepay-registration.d.ts +1 -0
  128. package/.medusa/server/src/modules/integration-settings/simplepay-registration.js +18 -0
  129. package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -5
  130. package/.medusa/server/src/providers/csomagpiac/client.d.ts +25 -0
  131. package/.medusa/server/src/providers/csomagpiac/client.js +144 -0
  132. package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.d.ts +45 -0
  133. package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.js +221 -0
  134. package/.medusa/server/src/providers/csomagpiac/index.d.ts +7 -0
  135. package/.medusa/server/src/providers/csomagpiac/index.js +30 -0
  136. package/.medusa/server/src/providers/csomagpiac/service.d.ts +46 -0
  137. package/.medusa/server/src/providers/csomagpiac/service.js +226 -0
  138. package/.medusa/server/src/providers/csomagpiac/types.d.ts +65 -0
  139. package/.medusa/server/src/providers/csomagpiac/types.js +27 -0
  140. package/.medusa/server/src/providers/dpd/fulfillment-provider.d.ts +2 -1
  141. package/.medusa/server/src/providers/dpd/fulfillment-provider.js +83 -25
  142. package/.medusa/server/src/providers/dpd/service.js +5 -3
  143. package/.medusa/server/src/providers/email/service.d.ts +7 -6
  144. package/.medusa/server/src/providers/email/service.js +51 -25
  145. package/.medusa/server/src/providers/foxpost/foxpost-service.js +5 -9
  146. package/.medusa/server/src/providers/foxpost/fulfillment-provider.d.ts +1 -0
  147. package/.medusa/server/src/providers/foxpost/fulfillment-provider.js +76 -66
  148. package/.medusa/server/src/providers/gls/fulfillment-provider.d.ts +1 -0
  149. package/.medusa/server/src/providers/gls/fulfillment-provider.js +76 -13
  150. package/.medusa/server/src/providers/gls/gls-service.d.ts +16 -0
  151. package/.medusa/server/src/providers/gls/gls-service.js +26 -65
  152. package/.medusa/server/src/providers/gls/types.d.ts +15 -0
  153. package/.medusa/server/src/providers/mpl/fulfillment-provider.d.ts +1 -0
  154. package/.medusa/server/src/providers/mpl/fulfillment-provider.js +61 -186
  155. package/.medusa/server/src/providers/mpl/index.d.ts +2 -0
  156. package/.medusa/server/src/providers/mpl/index.js +7 -2
  157. package/.medusa/server/src/providers/mpl/service.d.ts +35 -1
  158. package/.medusa/server/src/providers/mpl/service.js +82 -370
  159. package/.medusa/server/src/providers/mpl/types.d.ts +18 -0
  160. package/.medusa/server/src/providers/mpl/types.js +1 -1
  161. package/.medusa/server/src/providers/packeta/client.d.ts +2 -1
  162. package/.medusa/server/src/providers/packeta/client.js +24 -2
  163. package/.medusa/server/src/providers/packeta/fulfillment-provider.d.ts +1 -0
  164. package/.medusa/server/src/providers/packeta/fulfillment-provider.js +73 -5
  165. package/.medusa/server/src/providers/packeta/service.d.ts +1 -0
  166. package/.medusa/server/src/providers/packeta/service.js +85 -22
  167. package/.medusa/server/src/providers/packeta/types.d.ts +26 -0
  168. package/.medusa/server/src/providers/packeta/types.js +1 -1
  169. package/.medusa/server/src/providers/resilient-stripe/index.d.ts +19 -1
  170. package/.medusa/server/src/providers/resilient-stripe/index.js +55 -3
  171. package/.medusa/server/src/providers/simplepay/config.js +11 -1
  172. package/.medusa/server/src/providers/simplepay/index.d.ts +2 -0
  173. package/.medusa/server/src/providers/simplepay/index.js +5 -3
  174. package/.medusa/server/src/providers/simplepay/runtime-service.d.ts +13 -0
  175. package/.medusa/server/src/providers/simplepay/runtime-service.js +55 -0
  176. package/.medusa/server/src/providers/simplepay/service.d.ts +2 -0
  177. package/.medusa/server/src/providers/simplepay/service.js +40 -5
  178. package/.medusa/server/src/subscribers/google-ads-order-canceled.d.ts +7 -0
  179. package/.medusa/server/src/subscribers/google-ads-order-canceled.js +50 -0
  180. package/.medusa/server/src/subscribers/google-ads-payment-refunded.d.ts +7 -0
  181. package/.medusa/server/src/subscribers/google-ads-payment-refunded.js +181 -0
  182. package/.medusa/server/src/subscribers/simplepay-paid-order-recovery.js +14 -1
  183. package/package.json +6 -2
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const integration_settings_1 = require("../../../../../modules/integration-settings");
8
+ const RESPONSE_VERSION = "v1.0.0";
9
+ async function POST(req, res) {
10
+ const store = req.scope.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
11
+ const resolved = await (0, integration_settings_1.resolvedIntegrationEnvironment)(store, "arukereso");
12
+ const env = resolved.env;
13
+ const enabled = resolved.enabled && env.ARUKERESO_MARKETPLACE_ENABLED === "true";
14
+ const expectedApiKey = String(env.ARUKERESO_MARKETPLACE_API_KEY || "").trim();
15
+ const regionId = String(env.ARUKERESO_MARKETPLACE_REGION_ID || "").trim();
16
+ const salesChannelId = String(env.ARUKERESO_MARKETPLACE_SALES_CHANNEL_ID || "").trim();
17
+ if (!enabled) {
18
+ return errorResponse(res, 503, ["Marketplace API is disabled."]);
19
+ }
20
+ if (!expectedApiKey || !regionId || !salesChannelId) {
21
+ return errorResponse(res, 503, ["Marketplace API is not fully configured."]);
22
+ }
23
+ const suppliedApiKey = String(req.headers["api-key"] || "").trim();
24
+ if (!safeEqual(suppliedApiKey, expectedApiKey)) {
25
+ return errorResponse(res, 401, ["Invalid Api-Key."]);
26
+ }
27
+ const payload = (req.body || {});
28
+ const order = payload.data;
29
+ const errors = validatePayload(payload);
30
+ if (!order || errors.length) {
31
+ return errorResponse(res, 400, errors.length ? errors : ["Order data is required."]);
32
+ }
33
+ const orderCode = String(order.code || "").trim();
34
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
35
+ const existing = await query.graph({
36
+ entity: "order",
37
+ fields: ["id", "display_id", "metadata"],
38
+ filters: {
39
+ metadata: {
40
+ arukereso_marketplace_order_code: orderCode,
41
+ },
42
+ },
43
+ });
44
+ if (existing.data[0]) {
45
+ return successResponse(res, orderCode, existing.data[0]);
46
+ }
47
+ const marketplaceProducts = Array.isArray(order.products) ? order.products : [];
48
+ const variantIds = marketplaceProducts.map((item) => String(item.code || "").trim());
49
+ const { data: variants } = await query.graph({
50
+ entity: "variant",
51
+ fields: ["id", "title", "product.id", "product.title"],
52
+ filters: { id: variantIds },
53
+ });
54
+ const variantMap = new Map(variants.map((variant) => [String(variant.id), variant]));
55
+ const missingVariantIds = variantIds.filter((id) => !variantMap.has(id));
56
+ if (missingVariantIds.length) {
57
+ return errorResponse(res, 400, [
58
+ `Unknown product code(s): ${missingVariantIds.join(", ")}`,
59
+ ]);
60
+ }
61
+ const currencyCode = String(marketplaceProducts[0]?.grossUnitPriceCurrency ||
62
+ order.grossDeliveryPriceCurrency ||
63
+ "HUF").toLowerCase();
64
+ const items = marketplaceProducts.map((item) => {
65
+ const variantId = String(item.code || "").trim();
66
+ const variant = variantMap.get(variantId);
67
+ return {
68
+ title: String(item.name || variant.product?.title || variant.title || variantId),
69
+ quantity: numberValue(item.quantity),
70
+ unit_price: numberValue(item.grossUnitPrice),
71
+ variant_id: variantId,
72
+ product_id: String(variant.product?.id || ""),
73
+ metadata: {
74
+ arukereso_commission: numberValue(item.commission),
75
+ arukereso_commission_currency: item.commissionCurrency || null,
76
+ arukereso_vat: item.vat || null,
77
+ arukereso_merchant_id: item.merchantId || null,
78
+ },
79
+ };
80
+ });
81
+ const shippingAmount = numberValue(order.grossDeliveryPrice) + numberValue(order.grossCODFee);
82
+ const shippingMethods = [
83
+ {
84
+ name: String(order.courierName || "Árukereső Marketplace szállítás"),
85
+ amount: shippingAmount,
86
+ data: {
87
+ source: "arukereso_marketplace",
88
+ delivery_mode: order.deliveryMode ?? null,
89
+ store_id: order.storeId ?? null,
90
+ home_delivery_id: order.homeDeliveryId ?? null,
91
+ pickup_point_id: order.pickUpPointId ?? null,
92
+ cod_fee: numberValue(order.grossCODFee),
93
+ },
94
+ },
95
+ ];
96
+ const orderInput = {
97
+ region_id: regionId,
98
+ sales_channel_id: salesChannelId,
99
+ currency_code: currencyCode,
100
+ email: String(order.email || "").trim().toLowerCase(),
101
+ shipping_address: mapAddress(order.deliveryAddress, order),
102
+ billing_address: mapAddress(order.billingAddress, order),
103
+ items,
104
+ shipping_methods: shippingMethods,
105
+ metadata: {
106
+ source: "arukereso_marketplace",
107
+ arukereso_marketplace_order_code: orderCode,
108
+ arukereso_order_date: order.orderDate || null,
109
+ arukereso_status: order.status ?? null,
110
+ arukereso_delivery_mode: order.deliveryMode ?? null,
111
+ arukereso_payment_mode: order.paymentMode ?? null,
112
+ arukereso_online_payment_mode: order.onlinePaymentMode || null,
113
+ arukereso_payment_status: order.paymentStatus || null,
114
+ arukereso_payment_id: order.paymentId || null,
115
+ arukereso_comment: order.comment || null,
116
+ arukereso_request_version: payload.version || null,
117
+ arukereso_request_timestamp: payload.timestamp ?? null,
118
+ },
119
+ };
120
+ try {
121
+ const result = await (0, core_flows_1.createOrderWorkflow)(req.scope).run({
122
+ input: orderInput,
123
+ });
124
+ return successResponse(res, orderCode, result.result);
125
+ }
126
+ catch (error) {
127
+ return errorResponse(res, 400, [
128
+ error instanceof Error ? error.message : "Order import failed.",
129
+ ]);
130
+ }
131
+ }
132
+ function validatePayload(payload) {
133
+ const errors = [];
134
+ const order = payload.data;
135
+ if (!order)
136
+ return ["Order data is required."];
137
+ if (!String(order.code || "").trim())
138
+ errors.push("Code is required.");
139
+ if (!String(order.email || "").includes("@"))
140
+ errors.push("Valid email is required.");
141
+ if (!String(order.countryCode || "").trim())
142
+ errors.push("CountryCode is required.");
143
+ if (!Array.isArray(order.products) || !order.products.length) {
144
+ errors.push("Products are required.");
145
+ }
146
+ else {
147
+ order.products.forEach((item, index) => {
148
+ if (!String(item.code || "").trim())
149
+ errors.push(`Products[${index}].code is required.`);
150
+ if (numberValue(item.quantity) <= 0)
151
+ errors.push(`Products[${index}].quantity is invalid.`);
152
+ if (numberValue(item.grossUnitPrice) < 0)
153
+ errors.push(`Products[${index}].grossUnitPrice is invalid.`);
154
+ });
155
+ }
156
+ if (payload.timestamp != null && !Number.isFinite(Number(payload.timestamp))) {
157
+ errors.push("Timestamp is invalid.");
158
+ }
159
+ return errors;
160
+ }
161
+ function mapAddress(address, order) {
162
+ const value = address || {};
163
+ const address1 = String(value.addressLine1 || value.street || "").trim();
164
+ return {
165
+ first_name: String(value.firstName || order.firstName || "").trim(),
166
+ last_name: String(value.lastName || order.lastName || "").trim(),
167
+ company: String(value.name || "").trim() || undefined,
168
+ address_1: address1,
169
+ address_2: String(value.addressLine2 || "").trim() || undefined,
170
+ city: String(value.city || "").trim(),
171
+ postal_code: String(value.postalCode || "").trim(),
172
+ country_code: String(value.countryCode || order.countryCode || "HU").toLowerCase(),
173
+ phone: String(order.phone || "").trim() || undefined,
174
+ metadata: value.taxNumber
175
+ ? { tax_number: String(value.taxNumber).trim() }
176
+ : undefined,
177
+ };
178
+ }
179
+ function numberValue(value) {
180
+ const result = Number(value ?? 0);
181
+ return Number.isFinite(result) ? result : 0;
182
+ }
183
+ function safeEqual(actual, expected) {
184
+ const actualBuffer = Buffer.from(actual);
185
+ const expectedBuffer = Buffer.from(expected);
186
+ return (actualBuffer.length === expectedBuffer.length &&
187
+ (0, node_crypto_1.timingSafeEqual)(actualBuffer, expectedBuffer));
188
+ }
189
+ function successResponse(res, orderCode, order) {
190
+ const internalOrderId = String(order.display_id || order.id || "");
191
+ return res.status(201).json({
192
+ message: "Success",
193
+ code: 0,
194
+ version: RESPONSE_VERSION,
195
+ data: {
196
+ orderCode,
197
+ internalOrderId,
198
+ variableSymbol: internalOrderId,
199
+ },
200
+ });
201
+ }
202
+ function errorResponse(res, status, errors) {
203
+ return res.status(status).json({
204
+ message: "Error",
205
+ code: 0,
206
+ version: RESPONSE_VERSION,
207
+ data: [],
208
+ errors,
209
+ });
210
+ }
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL2FydWtlcmVzby9tYXJrZXRwbGFjZS9vcmRlci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZFQSxvQkE2SUM7QUExTkQsNkNBQTZDO0FBRTdDLHFEQUFxRTtBQUNyRSw0REFBaUU7QUFDakUsc0ZBSW9EO0FBbUVwRCxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQTtBQUUxQixLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQzdCLGtEQUEyQixDQUNXLENBQUE7SUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLHFEQUE4QixFQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUN6RSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFBO0lBQ3hCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLDZCQUE2QixLQUFLLE1BQU0sQ0FBQTtJQUNoRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzdFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsK0JBQStCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDekUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUMzQixHQUFHLENBQUMsc0NBQXNDLElBQUksRUFBRSxDQUNqRCxDQUFDLElBQUksRUFBRSxDQUFBO0lBRVIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FB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
@@ -10,14 +10,61 @@ const state_1 = require("../../../../modules/integration-operation/state");
10
10
  function headerValue(value) {
11
11
  return Array.isArray(value) ? value[0] : value;
12
12
  }
13
+ function text(value) {
14
+ return typeof value === "string" || typeof value === "number"
15
+ ? String(value).trim()
16
+ : "";
17
+ }
18
+ function numberValue(value) {
19
+ const number = Number(value && typeof value === "object" && "toString" in value
20
+ ? value.toString()
21
+ : value);
22
+ return Number.isFinite(number) ? number : undefined;
23
+ }
24
+ function normalizedAmount(value, currency) {
25
+ const number = numberValue(value);
26
+ if (number === undefined)
27
+ return undefined;
28
+ return currency.toUpperCase() === "HUF"
29
+ ? Math.round(number)
30
+ : Math.round(number * 100) / 100;
31
+ }
32
+ function consistencyErrors(event, sessionData) {
33
+ const errors = [];
34
+ const expectedOrderRef = text(sessionData.orderRef);
35
+ const expectedTransactionId = numberValue(sessionData.transactionId);
36
+ const expectedCurrency = text(sessionData.currency).toUpperCase();
37
+ const receivedCurrency = text(event.currency).toUpperCase();
38
+ const expectedTotal = normalizedAmount(sessionData.total, expectedCurrency || receivedCurrency);
39
+ const receivedTotal = normalizedAmount(event.total, receivedCurrency || expectedCurrency);
40
+ if (!event.orderRef || !expectedOrderRef || event.orderRef !== expectedOrderRef) {
41
+ errors.push("orderRef");
42
+ }
43
+ if (typeof event.transactionId !== "number" ||
44
+ expectedTransactionId === undefined ||
45
+ event.transactionId !== expectedTransactionId) {
46
+ errors.push("transactionId");
47
+ }
48
+ if (!receivedCurrency || !expectedCurrency || receivedCurrency !== expectedCurrency) {
49
+ errors.push("currency");
50
+ }
51
+ if (receivedTotal === undefined ||
52
+ expectedTotal === undefined ||
53
+ receivedTotal !== expectedTotal) {
54
+ errors.push("total");
55
+ }
56
+ return errors;
57
+ }
13
58
  async function POST(req, res) {
14
59
  if (process.env.SIMPLEPAY_ENABLED !== "true") {
15
60
  res.status(404).send("Not found");
16
61
  return;
17
62
  }
18
- const raw = req.rawBody
19
- ? req.rawBody.toString("utf8")
20
- : JSON.stringify(req.body ?? {});
63
+ if (!req.rawBody?.length) {
64
+ res.status(400).send("SimplePay IPN raw body is required");
65
+ return;
66
+ }
67
+ const raw = req.rawBody.toString("utf8");
21
68
  const signature = headerValue(req.headers["signature"]);
22
69
  const client = new client_1.SimplePayClient((0, config_1.simplePayOptionsFromEnv)());
23
70
  let event;
@@ -30,29 +77,78 @@ async function POST(req, res) {
30
77
  res.status(400).send("Invalid SimplePay IPN");
31
78
  return;
32
79
  }
33
- const fingerprint = typeof event.transactionId === "number" && event.status
80
+ if (!event.orderRef ||
81
+ typeof event.transactionId !== "number" ||
82
+ !event.currency ||
83
+ typeof event.total !== "number") {
84
+ res.status(400).send("Incomplete SimplePay IPN");
85
+ return;
86
+ }
87
+ const paymentSessionId = event.orderRef.split("-r-")[0];
88
+ const fingerprint = event.status
34
89
  ? `${event.transactionId}:${event.status}`
35
90
  : (0, node_crypto_1.createHash)("sha256").update(raw).digest("hex");
36
- const entityId = typeof event.transactionId === "number"
37
- ? String(event.transactionId)
38
- : event.orderRef || fingerprint;
91
+ const entityId = String(event.transactionId);
39
92
  let durable;
40
93
  try {
41
94
  const store = req.scope.resolve(integration_operation_1.INTEGRATION_OPERATION_MODULE);
95
+ const paymentService = req.scope.resolve(utils_1.Modules.PAYMENT);
96
+ const paymentSession = await paymentService.retrievePaymentSession(paymentSessionId);
97
+ const sessionData = paymentSession.data ?? {};
98
+ const mismatches = consistencyErrors(event, sessionData);
99
+ if (mismatches.length) {
100
+ const integrity = await (0, state_1.acquireOperation)(store, {
101
+ provider: "simplepay",
102
+ operation_type: "ipn.integrity_mismatch",
103
+ entity_type: "payment_transaction",
104
+ entity_id: entityId,
105
+ external_id: entityId,
106
+ idempotency_key: `simplepay:ipn-integrity:${fingerprint}`,
107
+ reference_data: {
108
+ replay_safe: true,
109
+ paymentSessionId,
110
+ transactionId: event.transactionId,
111
+ orderRef: event.orderRef,
112
+ status: event.status ?? null,
113
+ currency: event.currency,
114
+ total: event.total,
115
+ expected_orderRef: sessionData.orderRef ?? null,
116
+ expected_transactionId: sessionData.transactionId ?? null,
117
+ expected_currency: sessionData.currency ?? null,
118
+ expected_total: sessionData.total ?? null,
119
+ mismatches,
120
+ fingerprint,
121
+ },
122
+ });
123
+ if (integrity.acquired) {
124
+ await store.updateIntegrationOperations({
125
+ id: integrity.operation.id,
126
+ status: "needs_reconciliation",
127
+ next_attempt_at: new Date(Date.now() + 5 * 60_000),
128
+ });
129
+ }
130
+ // The callback is authentic, but it does not belong to the current
131
+ // payment-session state. Acknowledge it to stop provider retries while
132
+ // deliberately not dispatching it into Medusa payment processing.
133
+ res.setHeader("Signature", confirmation.signature);
134
+ res.status(200).type("application/json").send(confirmation.body);
135
+ return;
136
+ }
42
137
  durable = await (0, state_1.acquireOperation)(store, {
43
138
  provider: "simplepay",
44
139
  operation_type: "ipn.dispatch",
45
140
  entity_type: "payment_transaction",
46
141
  entity_id: entityId,
47
- external_id: typeof event.transactionId === "number"
48
- ? String(event.transactionId)
49
- : undefined,
142
+ external_id: entityId,
50
143
  idempotency_key: `simplepay:ipn-dispatch:${fingerprint}`,
51
144
  reference_data: {
52
145
  replay_safe: true,
53
- transactionId: event.transactionId ?? null,
54
- orderRef: event.orderRef ?? null,
146
+ paymentSessionId,
147
+ transactionId: event.transactionId,
148
+ orderRef: event.orderRef,
55
149
  status: event.status ?? null,
150
+ currency: event.currency,
151
+ total: event.total,
56
152
  fingerprint,
57
153
  },
58
154
  });
@@ -80,20 +176,16 @@ async function POST(req, res) {
80
176
  },
81
177
  },
82
178
  }, { delay: 500, attempts: 3 });
83
- if (event.status === "FINISHED" &&
84
- event.orderRef &&
85
- typeof event.transactionId === "number") {
179
+ if (event.status === "FINISHED") {
86
180
  await eventBus.emit({
87
181
  name: "simplepay.payment_finished",
88
182
  data: {
89
- paymentSessionId: event.orderRef.split("-r-")[0],
183
+ paymentSessionId,
90
184
  transactionId: event.transactionId,
91
185
  },
92
186
  }, { delay: 750, attempts: 5 });
93
187
  }
94
- await (0, state_1.operationSucceeded)(store, durable.operation, typeof event.transactionId === "number"
95
- ? String(event.transactionId)
96
- : undefined, {
188
+ await (0, state_1.operationSucceeded)(store, durable.operation, entityId, {
97
189
  ...(durable.operation.reference_data ?? {}),
98
190
  replay_safe: true,
99
191
  queued_at: new Date().toISOString(),
@@ -105,9 +197,7 @@ async function POST(req, res) {
105
197
  if (durable?.acquired) {
106
198
  try {
107
199
  const store = req.scope.resolve(integration_operation_1.INTEGRATION_OPERATION_MODULE);
108
- await (0, state_1.operationFailed)(store, durable.operation, error, false, typeof event.transactionId === "number"
109
- ? String(event.transactionId)
110
- : undefined, {
200
+ await (0, state_1.operationFailed)(store, durable.operation, error, false, entityId, {
111
201
  ...(durable.operation.reference_data ?? {}),
112
202
  replay_safe: true,
113
203
  });
@@ -121,4 +211,4 @@ async function POST(req, res) {
121
211
  res.status(503).send("SimplePay IPN processing failed");
122
212
  }
123
213
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3NpbXBsZXBheS9pcG4vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsb0JBdUpDO0FBMUtELDZDQUF3QztBQUV4QyxxREFBeUU7QUFDekUsbUVBQXdFO0FBQ3hFLG1FQUFnRjtBQUNoRixxRkFHa0Q7QUFDbEQsMkVBSXdEO0FBRXhELFNBQVMsV0FBVyxDQUFDLEtBQW9DO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDaEQsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDN0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDakMsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTztRQUNyQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUE7SUFDbEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBa0MsQ0FDMUQsQ0FBQTtJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksd0JBQWUsQ0FBQyxJQUFBLGdDQUF1QixHQUFFLENBQUMsQ0FBQTtJQUU3RCxJQUFJLEtBQStDLENBQUE7SUFDbkQsSUFBSSxZQUFrRSxDQUFBO0lBRXRFLElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUN4QyxZQUFZLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUN6QyxLQUEyQyxDQUM1QyxDQUFBO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDN0MsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FDZixPQUFPLEtBQUssQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNO1FBQ3JELENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtRQUMxQyxDQUFDLENBQUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQ1osT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVE7UUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQTtJQUVuQyxJQUFJLE9BQWlFLENBQUE7SUFFckUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQzdCLG9EQUE0QixDQUNFLENBQUE7UUFDaEMsT0FBTyxHQUFHLE1BQU0sSUFBQSx3QkFBZ0IsRUFBQyxLQUFLLEVBQUU7WUFDdEMsUUFBUSxFQUFFLFdBQVc7WUFDckIsY0FBYyxFQUFFLGNBQWM7WUFDOUIsV0FBVyxFQUFFLHFCQUFxQjtZQUNsQyxTQUFTLEVBQUUsUUFBUTtZQUNuQixXQUFXLEVBQ1QsT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVE7Z0JBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLFNBQVM7WUFDZixlQUFlLEVBQUUsMEJBQTBCLFdBQVcsRUFBRTtZQUN4RCxjQUFjLEVBQUU7Z0JBQ2QsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUk7Z0JBQzFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUk7Z0JBQ2hDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUk7Z0JBQzVCLFdBQVc7YUFDWjtTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUUsQ0FBQztnQkFDN0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUNsRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2hFLE9BQU07WUFDUixDQUFDO1lBRUQseUVBQXlFO1lBQ3pFLDBFQUEwRTtZQUMxRSw4REFBOEQ7WUFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQTtZQUNoRSxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQ2pCO1lBQ0UsSUFBSSxFQUFFLDRCQUFvQixDQUFDLGVBQWU7WUFDMUMsSUFBSSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7b0JBQ2QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO29CQUNwQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87aUJBQ3JCO2FBQ0Y7U0FDRixFQUNELEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQzVCLENBQUE7UUFFRCxJQUNFLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVTtZQUMzQixLQUFLLENBQUMsUUFBUTtZQUNkLE9BQU8sS0FBSyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQ3ZDLENBQUM7WUFDRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQ2pCO2dCQUNFLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLElBQUksRUFBRTtvQkFDSixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hELGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtpQkFDbkM7YUFDRixFQUNELEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQzVCLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFBLDBCQUFrQixFQUN0QixLQUFLLEVBQ0wsT0FBTyxDQUFDLFNBQVMsRUFDakIsT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVE7WUFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQ2I7WUFDRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1lBQzNDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtTQUNwQyxDQUNGLENBQUE7UUFFRCxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDbEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUM3QixvREFBNEIsQ0FDRSxDQUFBO2dCQUNoQyxNQUFNLElBQUEsdUJBQWUsRUFDbkIsS0FBSyxFQUNMLE9BQU8sQ0FBQyxTQUFTLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVE7b0JBQ3JDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztvQkFDN0IsQ0FBQyxDQUFDLFNBQVMsRUFDYjtvQkFDRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO29CQUMzQyxXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FDRixDQUFBO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxvREFBb0Q7WUFDdEQsQ0FBQztRQUNILENBQUM7UUFFRCwwRUFBMEU7UUFDMUUsOERBQThEO1FBQzlELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7SUFDekQsQ0FBQztBQUNILENBQUMifQ==
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3NpbXBsZXBheS9pcG4vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtRkEsb0JBeU1DO0FBNVJELDZDQUF3QztBQUV4QyxxREFBeUU7QUFDekUsbUVBQXdFO0FBQ3hFLG1FQUFnRjtBQUNoRixxRkFHa0Q7QUFDbEQsMkVBSXdEO0FBRXhELFNBQVMsV0FBVyxDQUFDLEtBQW9DO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDaEQsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLEtBQWM7SUFDMUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUMzRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtRQUN0QixDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ1IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUNuQixLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxLQUFLO1FBQ3ZELENBQUMsQ0FBRSxLQUFnQyxDQUFDLFFBQVEsRUFBRTtRQUM5QyxDQUFDLENBQUMsS0FBSyxDQUNWLENBQUE7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0FBQ3JELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWMsRUFBRSxRQUFnQjtJQUN4RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7SUFD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
@@ -0,0 +1,2 @@
1
+ import type { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare const POST: (req: AuthenticatedMedusaRequest, res: MedusaResponse) => Promise<void>;
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
6
+ function itemTitle(item) {
7
+ return item.product_title || item.title || item.variant_title || "Korábbi rendelési tétel";
8
+ }
9
+ function errorMessage(error) {
10
+ return error instanceof Error && error.message
11
+ ? error.message
12
+ : "A termék jelenleg nem tehető kosárba.";
13
+ }
14
+ const POST = async (req, res) => {
15
+ const customerId = req.auth_context?.actor_id;
16
+ if (!customerId) {
17
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Customer authentication is required.");
18
+ }
19
+ const orderId = req.params.id;
20
+ const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
21
+ const { data: orders } = await query.graph({
22
+ entity: "order",
23
+ fields: [
24
+ "id",
25
+ "customer_id",
26
+ "email",
27
+ "region_id",
28
+ "sales_channel_id",
29
+ "items.id",
30
+ "items.title",
31
+ "items.product_title",
32
+ "items.variant_title",
33
+ "items.variant_id",
34
+ "items.quantity",
35
+ ],
36
+ filters: { id: orderId },
37
+ });
38
+ const order = orders[0];
39
+ if (!order || order.customer_id !== customerId) {
40
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Order not found.");
41
+ }
42
+ const { result: createdCart } = await (0, core_flows_1.createCartWorkflow)(req.scope).run({
43
+ input: {
44
+ region_id: order.region_id,
45
+ sales_channel_id: order.sales_channel_id,
46
+ customer_id: customerId,
47
+ email: order.email || undefined,
48
+ },
49
+ });
50
+ const skippedItems = [];
51
+ let addedCount = 0;
52
+ for (const rawItem of (order.items || [])) {
53
+ const quantity = Number(rawItem.quantity || 0);
54
+ const variantId = rawItem.variant_id || null;
55
+ if (!variantId || !Number.isFinite(quantity) || quantity <= 0) {
56
+ skippedItems.push({
57
+ order_item_id: rawItem.id,
58
+ title: itemTitle(rawItem),
59
+ variant_id: variantId,
60
+ quantity: Math.max(0, quantity || 0),
61
+ reason: !variantId
62
+ ? "A korábbi termékváltozat már nem érhető el."
63
+ : "A korábbi tétel mennyisége nem érvényes.",
64
+ });
65
+ continue;
66
+ }
67
+ try {
68
+ await (0, core_flows_1.addToCartWorkflow)(req.scope).run({
69
+ input: {
70
+ cart_id: createdCart.id,
71
+ items: [
72
+ {
73
+ variant_id: variantId,
74
+ quantity,
75
+ },
76
+ ],
77
+ },
78
+ });
79
+ addedCount += 1;
80
+ }
81
+ catch (error) {
82
+ skippedItems.push({
83
+ order_item_id: rawItem.id,
84
+ title: itemTitle(rawItem),
85
+ variant_id: variantId,
86
+ quantity,
87
+ reason: errorMessage(error),
88
+ });
89
+ }
90
+ }
91
+ const { data: carts } = await query.graph({
92
+ entity: "cart",
93
+ fields: [
94
+ "id",
95
+ "customer_id",
96
+ "currency_code",
97
+ "region_id",
98
+ "sales_channel_id",
99
+ "subtotal",
100
+ "item_total",
101
+ "total",
102
+ "items.*",
103
+ ],
104
+ filters: { id: createdCart.id },
105
+ });
106
+ res.status(200).json({
107
+ cart: carts[0] || createdCart,
108
+ added_count: addedCount,
109
+ skipped_items: skippedItems,
110
+ });
111
+ };
112
+ exports.POST = POST;
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2FjY291bnQvb3JkZXJzL1tpZF0vcmVvcmRlci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBa0Y7QUFDbEYsNERBR29DO0FBeUJwQyxTQUFTLFNBQVMsQ0FBQyxJQUFlO0lBQ2hDLE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUkseUJBQXlCLENBQUE7QUFDNUYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWM7SUFDbEMsT0FBTyxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPO1FBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNmLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQTtBQUM3QyxDQUFDO0FBRU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUE7SUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNDQUFzQyxDQUN2QyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO0lBQzdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUM3QixpQ0FBeUIsQ0FBQyxLQUFLLENBQ1IsQ0FBQTtJQUV6QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLEVBQUUsT0FBTztRQUNm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
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
2
+ export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;