@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.
- package/.medusa/server/src/admin/index.js +6223 -4784
- package/.medusa/server/src/admin/index.mjs +6224 -4785
- package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.js +26 -0
- package/.medusa/server/src/api/admin/billingo/advance/route.d.ts +8 -0
- package/.medusa/server/src/api/admin/billingo/advance/route.js +55 -0
- package/.medusa/server/src/api/admin/billingo/partial-credit/route.d.ts +8 -0
- package/.medusa/server/src/api/admin/billingo/partial-credit/route.js +69 -0
- package/.medusa/server/src/api/admin/documents/[id]/route.d.ts +22 -0
- package/.medusa/server/src/api/admin/documents/[id]/route.js +107 -0
- package/.medusa/server/src/api/admin/documents/route.d.ts +21 -0
- package/.medusa/server/src/api/admin/documents/route.js +117 -0
- package/.medusa/server/src/api/admin/google-ads/diagnostics/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-ads/diagnostics/route.js +26 -0
- package/.medusa/server/src/api/admin/google-ads/oauth/start/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-ads/oauth/start/route.js +27 -0
- package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.js +69 -0
- package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.js +26 -0
- package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.js +25 -0
- package/.medusa/server/src/api/admin/orders/[id]/shipping/route.js +28 -28
- package/.medusa/server/src/api/admin/shipping/mpl/close/route.d.ts +1 -1
- package/.medusa/server/src/api/admin/shipping/mpl/close/route.js +48 -70
- package/.medusa/server/src/api/auth/google-ads/callback/route.d.ts +2 -0
- package/.medusa/server/src/api/auth/google-ads/callback/route.js +58 -0
- package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.d.ts +2 -0
- package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.js +33 -0
- package/.medusa/server/src/api/feeds/google-merchant.xml/route.js +5 -3
- package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.js +211 -0
- package/.medusa/server/src/api/hooks/simplepay/ipn/route.js +113 -23
- package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.d.ts +2 -0
- package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.js +113 -0
- package/.medusa/server/src/api/store/arukereso/backlink/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/backlink/route.js +73 -0
- package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.js +84 -0
- package/.medusa/server/src/api/store/arukereso/widget/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/widget/route.js +64 -0
- package/.medusa/server/src/api/store/documents/route.d.ts +2 -0
- package/.medusa/server/src/api/store/documents/route.js +84 -0
- package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.d.ts +2 -0
- package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.js +50 -0
- package/.medusa/server/src/config.d.ts +3 -3
- package/.medusa/server/src/config.js +64 -87
- package/.medusa/server/src/core/documents.d.ts +31 -0
- package/.medusa/server/src/core/documents.js +47 -0
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/lib/modules/arukereso/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/arukereso/index.js +2 -1
- package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.d.ts +19 -0
- package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.js +100 -0
- package/.medusa/server/src/lib/modules/billingo/actions.js +42 -12
- package/.medusa/server/src/lib/modules/billingo/advance.d.ts +68 -0
- package/.medusa/server/src/lib/modules/billingo/advance.js +309 -0
- package/.medusa/server/src/lib/modules/billingo/automation.js +49 -9
- package/.medusa/server/src/lib/modules/billingo/client.d.ts +5 -1
- package/.medusa/server/src/lib/modules/billingo/client.js +12 -6
- package/.medusa/server/src/lib/modules/billingo/index.d.ts +2 -0
- package/.medusa/server/src/lib/modules/billingo/index.js +3 -1
- package/.medusa/server/src/lib/modules/billingo/mapper.d.ts +38 -1
- package/.medusa/server/src/lib/modules/billingo/mapper.js +32 -1
- package/.medusa/server/src/lib/modules/billingo/partial-credit.d.ts +55 -0
- package/.medusa/server/src/lib/modules/billingo/partial-credit.js +338 -0
- package/.medusa/server/src/lib/modules/billingo/types.d.ts +7 -2
- package/.medusa/server/src/lib/modules/google-ads/adjustments.d.ts +21 -0
- package/.medusa/server/src/lib/modules/google-ads/adjustments.js +146 -0
- package/.medusa/server/src/lib/modules/google-ads/api.d.ts +23 -0
- package/.medusa/server/src/lib/modules/google-ads/api.js +171 -0
- package/.medusa/server/src/lib/modules/google-ads/diagnostics.d.ts +47 -0
- package/.medusa/server/src/lib/modules/google-ads/diagnostics.js +164 -0
- package/.medusa/server/src/lib/modules/google-merchant/category-fields.d.ts +7 -0
- package/.medusa/server/src/lib/modules/google-merchant/category-fields.js +210 -0
- package/.medusa/server/src/lib/modules/google-merchant/data-source.d.ts +17 -0
- package/.medusa/server/src/lib/modules/google-merchant/data-source.js +132 -0
- package/.medusa/server/src/lib/modules/google-merchant/diagnostics.d.ts +33 -0
- package/.medusa/server/src/lib/modules/google-merchant/diagnostics.js +113 -0
- package/.medusa/server/src/lib/modules/google-merchant/index.d.ts +5 -0
- package/.medusa/server/src/lib/modules/google-merchant/index.js +6 -1
- package/.medusa/server/src/lib/modules/google-merchant/merchant-api.d.ts +18 -0
- package/.medusa/server/src/lib/modules/google-merchant/merchant-api.js +120 -0
- package/.medusa/server/src/lib/modules/google-merchant/shipping.d.ts +13 -0
- package/.medusa/server/src/lib/modules/google-merchant/shipping.js +97 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/api.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/api.js +3 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/index.js +3 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/sync.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/sync.js +3 -0
- package/.medusa/server/src/lib/modules/shipping/actions.js +163 -352
- package/.medusa/server/src/lib/modules/shipping/durable-create.d.ts +2 -1
- package/.medusa/server/src/lib/modules/shipping/durable-create.js +33 -5
- package/.medusa/server/src/lib/modules/shipping/idempotency.js +4 -2
- package/.medusa/server/src/lib/modules/shipping/types.d.ts +1 -1
- package/.medusa/server/src/modules/core-documents/index.d.ts +38 -0
- package/.medusa/server/src/modules/core-documents/index.js +18 -0
- package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.d.ts +5 -0
- package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.js +22 -0
- package/.medusa/server/src/modules/core-documents/models/core-document-assignment.d.ts +9 -0
- package/.medusa/server/src/modules/core-documents/models/core-document-assignment.js +18 -0
- package/.medusa/server/src/modules/core-documents/models/core-document.d.ts +18 -0
- package/.medusa/server/src/modules/core-documents/models/core-document.js +27 -0
- package/.medusa/server/src/modules/core-documents/service.d.ts +38 -0
- package/.medusa/server/src/modules/core-documents/service.js +13 -0
- package/.medusa/server/src/modules/integration-operation/state.d.ts +1 -0
- package/.medusa/server/src/modules/integration-operation/state.js +11 -50
- package/.medusa/server/src/modules/integration-operation/types.d.ts +1 -1
- package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +19 -2
- package/.medusa/server/src/modules/integration-settings/connection-test.js +14 -1
- package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.d.ts +2 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.js +49 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.js +35 -0
- package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +23 -2
- package/.medusa/server/src/modules/integration-settings/hot-reload-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/hot-reload-registration.js +23 -0
- package/.medusa/server/src/modules/integration-settings/index.d.ts +4 -0
- package/.medusa/server/src/modules/integration-settings/index.js +5 -1
- package/.medusa/server/src/modules/integration-settings/manager.js +38 -4
- package/.medusa/server/src/modules/integration-settings/reloadable.d.ts +10 -0
- package/.medusa/server/src/modules/integration-settings/reloadable.js +58 -0
- package/.medusa/server/src/modules/integration-settings/runtime-snapshot.d.ts +9 -0
- package/.medusa/server/src/modules/integration-settings/runtime-snapshot.js +48 -3
- package/.medusa/server/src/modules/integration-settings/simplepay-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/simplepay-registration.js +18 -0
- package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -5
- package/.medusa/server/src/providers/csomagpiac/client.d.ts +25 -0
- package/.medusa/server/src/providers/csomagpiac/client.js +144 -0
- package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.d.ts +45 -0
- package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.js +221 -0
- package/.medusa/server/src/providers/csomagpiac/index.d.ts +7 -0
- package/.medusa/server/src/providers/csomagpiac/index.js +30 -0
- package/.medusa/server/src/providers/csomagpiac/service.d.ts +46 -0
- package/.medusa/server/src/providers/csomagpiac/service.js +226 -0
- package/.medusa/server/src/providers/csomagpiac/types.d.ts +65 -0
- package/.medusa/server/src/providers/csomagpiac/types.js +27 -0
- package/.medusa/server/src/providers/dpd/fulfillment-provider.d.ts +2 -1
- package/.medusa/server/src/providers/dpd/fulfillment-provider.js +83 -25
- package/.medusa/server/src/providers/dpd/service.js +5 -3
- package/.medusa/server/src/providers/email/service.d.ts +7 -6
- package/.medusa/server/src/providers/email/service.js +51 -25
- package/.medusa/server/src/providers/foxpost/foxpost-service.js +5 -9
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.d.ts +1 -0
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.js +76 -66
- package/.medusa/server/src/providers/gls/fulfillment-provider.d.ts +1 -0
- package/.medusa/server/src/providers/gls/fulfillment-provider.js +76 -13
- package/.medusa/server/src/providers/gls/gls-service.d.ts +16 -0
- package/.medusa/server/src/providers/gls/gls-service.js +26 -65
- package/.medusa/server/src/providers/gls/types.d.ts +15 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.d.ts +1 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.js +61 -186
- package/.medusa/server/src/providers/mpl/index.d.ts +2 -0
- package/.medusa/server/src/providers/mpl/index.js +7 -2
- package/.medusa/server/src/providers/mpl/service.d.ts +35 -1
- package/.medusa/server/src/providers/mpl/service.js +82 -370
- package/.medusa/server/src/providers/mpl/types.d.ts +18 -0
- package/.medusa/server/src/providers/mpl/types.js +1 -1
- package/.medusa/server/src/providers/packeta/client.d.ts +2 -1
- package/.medusa/server/src/providers/packeta/client.js +24 -2
- package/.medusa/server/src/providers/packeta/fulfillment-provider.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/fulfillment-provider.js +73 -5
- package/.medusa/server/src/providers/packeta/service.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/service.js +85 -22
- package/.medusa/server/src/providers/packeta/types.d.ts +26 -0
- package/.medusa/server/src/providers/packeta/types.js +1 -1
- package/.medusa/server/src/providers/resilient-stripe/index.d.ts +19 -1
- package/.medusa/server/src/providers/resilient-stripe/index.js +55 -3
- package/.medusa/server/src/providers/simplepay/config.js +11 -1
- package/.medusa/server/src/providers/simplepay/index.d.ts +2 -0
- package/.medusa/server/src/providers/simplepay/index.js +5 -3
- package/.medusa/server/src/providers/simplepay/runtime-service.d.ts +13 -0
- package/.medusa/server/src/providers/simplepay/runtime-service.js +55 -0
- package/.medusa/server/src/providers/simplepay/service.d.ts +2 -0
- package/.medusa/server/src/providers/simplepay/service.js +40 -5
- package/.medusa/server/src/subscribers/google-ads-order-canceled.d.ts +7 -0
- package/.medusa/server/src/subscribers/google-ads-order-canceled.js +50 -0
- package/.medusa/server/src/subscribers/google-ads-payment-refunded.d.ts +7 -0
- package/.medusa/server/src/subscribers/google-ads-payment-refunded.js +181 -0
- package/.medusa/server/src/subscribers/simplepay-paid-order-recovery.js +14 -1
- 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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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 =
|
|
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:
|
|
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
|
-
|
|
54
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
214
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3NpbXBsZXBheS9pcG4vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtRkEsb0JBeU1DO0FBNVJELDZDQUF3QztBQUV4QyxxREFBeUU7QUFDekUsbUVBQXdFO0FBQ3hFLG1FQUFnRjtBQUNoRixxRkFHa0Q7QUFDbEQsMkVBSXdEO0FBRXhELFNBQVMsV0FBVyxDQUFDLEtBQW9DO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFDaEQsQ0FBQztBQUVELFNBQVMsSUFBSSxDQUFDLEtBQWM7SUFDMUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUMzRCxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtRQUN0QixDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ1IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUNuQixLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLFVBQVUsSUFBSSxLQUFLO1FBQ3ZELENBQUMsQ0FBRSxLQUFnQyxDQUFDLFFBQVEsRUFBRTtRQUM5QyxDQUFDLENBQUMsS0FBSyxDQUNWLENBQUE7SUFDRCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0FBQ3JELENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWMsRUFBRSxRQUFnQjtJQUN4RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUE7SUFD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
|
|
@@ -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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
|