@hszrdm/core 1.7.0 → 1.9.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 +6832 -5418
- package/.medusa/server/src/admin/index.mjs +6834 -5420
- 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/integrations/[key]/verify/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/integrations/[key]/verify/route.js +79 -0
- package/.medusa/server/src/api/admin/orders/[id]/billingo/route.js +10 -1
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.d.ts +3 -5
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.js +7 -14
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/label/route.js +12 -6
- package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.d.ts +2 -1
- package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.js +6 -14
- package/.medusa/server/src/api/admin/orders/[id]/gls/label/route.js +9 -4
- package/.medusa/server/src/api/admin/orders/[id]/shipping/label/route.js +4 -2
- package/.medusa/server/src/api/admin/orders/[id]/shipping/route.d.ts +1 -2
- package/.medusa/server/src/api/admin/orders/[id]/shipping/route.js +46 -8
- package/.medusa/server/src/api/admin/shipping/bulk/create/route.d.ts +3 -6
- package/.medusa/server/src/api/admin/shipping/bulk/create/route.js +6 -57
- package/.medusa/server/src/api/admin/shipping/bulk/labels/route.js +4 -2
- 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/admin/shipping/orders/route.js +19 -4
- 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/cms/entries/[slug]/route.js +3 -2
- package/.medusa/server/src/api/store/cms/entries/route.js +3 -2
- 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 +70 -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/jobs/mpl-status-sync.js +10 -6
- package/.medusa/server/src/jobs/shipping-status-sync-eligibility.d.ts +5 -0
- package/.medusa/server/src/jobs/shipping-status-sync-eligibility.js +26 -0
- package/.medusa/server/src/jobs/shipping-status-sync.d.ts +6 -0
- package/.medusa/server/src/jobs/shipping-status-sync.js +63 -28
- 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 -2
- package/.medusa/server/src/lib/modules/billingo/client.js +17 -8
- 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 +42 -2
- package/.medusa/server/src/lib/modules/billingo/mapper.js +77 -4
- 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 +21 -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.d.ts +2 -2
- package/.medusa/server/src/lib/modules/shipping/actions.js +171 -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/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
- package/.medusa/server/src/lib/modules/shipping/native-fulfillment.d.ts +73 -0
- package/.medusa/server/src/lib/modules/shipping/native-fulfillment.js +191 -0
- package/.medusa/server/src/lib/modules/shipping/operations.d.ts +28 -0
- package/.medusa/server/src/lib/modules/shipping/operations.js +9 -1
- package/.medusa/server/src/lib/modules/shipping/print-eligibility.d.ts +12 -0
- package/.medusa/server/src/lib/modules/shipping/print-eligibility.js +34 -0
- package/.medusa/server/src/lib/modules/shipping/recipient-email.d.ts +18 -0
- package/.medusa/server/src/lib/modules/shipping/recipient-email.js +29 -0
- package/.medusa/server/src/lib/modules/shipping/resolve.d.ts +9 -0
- package/.medusa/server/src/lib/modules/shipping/resolve.js +65 -0
- 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/migrations/Migration20261104010000.d.ts +5 -0
- package/.medusa/server/src/modules/integration-operation/migrations/Migration20261104010000.js +34 -0
- package/.medusa/server/src/modules/integration-operation/models/integration-operation.d.ts +1 -1
- package/.medusa/server/src/modules/integration-operation/models/integration-operation.js +2 -2
- package/.medusa/server/src/modules/integration-operation/service.d.ts +1 -1
- 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 +20 -4
- 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/registry.js +1 -14
- 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 +50 -0
- package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.js +248 -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 +60 -0
- package/.medusa/server/src/providers/csomagpiac/service.js +296 -0
- package/.medusa/server/src/providers/csomagpiac/types.d.ts +66 -0
- package/.medusa/server/src/providers/csomagpiac/types.js +27 -0
- package/.medusa/server/src/providers/dpd/fulfillment-provider.d.ts +5 -1
- package/.medusa/server/src/providers/dpd/fulfillment-provider.js +94 -27
- package/.medusa/server/src/providers/dpd/service.d.ts +2 -0
- package/.medusa/server/src/providers/dpd/service.js +32 -4
- package/.medusa/server/src/providers/dpd/types.d.ts +1 -0
- package/.medusa/server/src/providers/dpd/types.js +1 -1
- 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.d.ts +3 -1
- package/.medusa/server/src/providers/foxpost/foxpost-service.js +19 -17
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.d.ts +10 -3
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.js +99 -69
- package/.medusa/server/src/providers/foxpost/types.d.ts +1 -0
- package/.medusa/server/src/providers/gls/fulfillment-provider.d.ts +4 -0
- package/.medusa/server/src/providers/gls/fulfillment-provider.js +87 -17
- package/.medusa/server/src/providers/gls/gls-service.d.ts +19 -1
- package/.medusa/server/src/providers/gls/gls-service.js +32 -64
- package/.medusa/server/src/providers/gls/types.d.ts +16 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.d.ts +4 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.js +67 -176
- 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 +37 -1
- package/.medusa/server/src/providers/mpl/service.js +113 -366
- package/.medusa/server/src/providers/mpl/types.d.ts +19 -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 +4 -0
- package/.medusa/server/src/providers/packeta/fulfillment-provider.js +84 -9
- package/.medusa/server/src/providers/packeta/point-validation.d.ts +2 -0
- package/.medusa/server/src/providers/packeta/point-validation.js +99 -0
- package/.medusa/server/src/providers/packeta/service.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/service.js +91 -23
- package/.medusa/server/src/providers/packeta/types.d.ts +27 -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 +59 -12
- 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/scripts/verify-runtime-modules.d.ts +7 -0
- package/.medusa/server/src/scripts/verify-runtime-modules.js +46 -0
- 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 +23 -18
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getGoogleMerchantDiagnostics = getGoogleMerchantDiagnostics;
|
|
4
|
+
const merchant_api_1 = require("./merchant-api");
|
|
5
|
+
const MERCHANT_API_BASE = "https://merchantapi.googleapis.com";
|
|
6
|
+
async function getGoogleMerchantDiagnostics(env) {
|
|
7
|
+
const accountId = required(env, "GOOGLE_MERCHANT_ACCOUNT_ID").replace(/^accounts\//, "");
|
|
8
|
+
const accessToken = await (0, merchant_api_1.getGoogleMerchantAccessToken)(env);
|
|
9
|
+
const languageCode = normalizeLanguage(env.GOOGLE_MERCHANT_LOCALE);
|
|
10
|
+
const timeZone = env.GOOGLE_MERCHANT_DATA_SOURCE_TIME_ZONE?.trim() || "Europe/Budapest";
|
|
11
|
+
const [accountIssues, productResult] = await Promise.all([
|
|
12
|
+
listAccountIssues({ accountId, accessToken, languageCode, timeZone }),
|
|
13
|
+
listProductIssues({ accountId, accessToken }),
|
|
14
|
+
]);
|
|
15
|
+
return {
|
|
16
|
+
accountIssues,
|
|
17
|
+
productIssues: productResult.issues,
|
|
18
|
+
productsScanned: productResult.productsScanned,
|
|
19
|
+
generatedAt: new Date().toISOString(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async function listAccountIssues(input) {
|
|
23
|
+
const out = [];
|
|
24
|
+
let pageToken = "";
|
|
25
|
+
do {
|
|
26
|
+
const url = new URL(`${MERCHANT_API_BASE}/accounts/v1/accounts/${encodeURIComponent(input.accountId)}/issues`);
|
|
27
|
+
url.searchParams.set("page_size", "1000");
|
|
28
|
+
url.searchParams.set("language_code", input.languageCode);
|
|
29
|
+
url.searchParams.set("time_zone.id", input.timeZone);
|
|
30
|
+
if (pageToken)
|
|
31
|
+
url.searchParams.set("page_token", pageToken);
|
|
32
|
+
const data = await merchantGet(url.toString(), input.accessToken);
|
|
33
|
+
const issues = Array.isArray(data.accountIssues) ? data.accountIssues : [];
|
|
34
|
+
for (const issue of issues) {
|
|
35
|
+
out.push({
|
|
36
|
+
name: String(issue?.name || ""),
|
|
37
|
+
title: String(issue?.title || issue?.name || "Merchant account issue"),
|
|
38
|
+
detail: stringValue(issue?.detail),
|
|
39
|
+
severity: stringValue(issue?.severity),
|
|
40
|
+
documentationUri: stringValue(issue?.documentationUri),
|
|
41
|
+
impactedDestinations: Array.isArray(issue?.impactedDestinations)
|
|
42
|
+
? issue.impactedDestinations
|
|
43
|
+
: [],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
pageToken = String(data.nextPageToken || "");
|
|
47
|
+
} while (pageToken);
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
async function listProductIssues(input) {
|
|
51
|
+
const issues = [];
|
|
52
|
+
let productsScanned = 0;
|
|
53
|
+
let pageToken = "";
|
|
54
|
+
do {
|
|
55
|
+
const url = new URL(`${MERCHANT_API_BASE}/products/v1/accounts/${encodeURIComponent(input.accountId)}/products`);
|
|
56
|
+
url.searchParams.set("pageSize", "250");
|
|
57
|
+
if (pageToken)
|
|
58
|
+
url.searchParams.set("pageToken", pageToken);
|
|
59
|
+
const data = await merchantGet(url.toString(), input.accessToken);
|
|
60
|
+
const products = Array.isArray(data.products) ? data.products : [];
|
|
61
|
+
productsScanned += products.length;
|
|
62
|
+
for (const product of products) {
|
|
63
|
+
const productName = String(product?.name || product?.productName || "");
|
|
64
|
+
const offerId = stringValue(product?.offerId || product?.productInput?.offerId || product?.offer_id);
|
|
65
|
+
const itemLevelIssues = Array.isArray(product?.productStatus?.itemLevelIssues)
|
|
66
|
+
? product.productStatus.itemLevelIssues
|
|
67
|
+
: Array.isArray(product?.itemLevelIssues)
|
|
68
|
+
? product.itemLevelIssues
|
|
69
|
+
: [];
|
|
70
|
+
for (const issue of itemLevelIssues) {
|
|
71
|
+
issues.push({
|
|
72
|
+
productName,
|
|
73
|
+
offerId,
|
|
74
|
+
title: String(issue?.description || issue?.detail || issue?.code || "Product issue"),
|
|
75
|
+
detail: stringValue(issue?.detail || issue?.description),
|
|
76
|
+
severity: stringValue(issue?.severity),
|
|
77
|
+
code: stringValue(issue?.code),
|
|
78
|
+
attribute: stringValue(issue?.attribute),
|
|
79
|
+
documentationUri: stringValue(issue?.documentationUri),
|
|
80
|
+
destination: stringValue(issue?.destination),
|
|
81
|
+
resolution: stringValue(issue?.resolution),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
pageToken = String(data.nextPageToken || "");
|
|
86
|
+
} while (pageToken);
|
|
87
|
+
return { issues, productsScanned };
|
|
88
|
+
}
|
|
89
|
+
async function merchantGet(url, accessToken) {
|
|
90
|
+
const response = await fetch(url, {
|
|
91
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
92
|
+
signal: AbortSignal.timeout(15000),
|
|
93
|
+
});
|
|
94
|
+
const data = (await response.json().catch(() => ({})));
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw new Error(data?.error?.message || `Merchant API hiba (${response.status}).`);
|
|
97
|
+
}
|
|
98
|
+
return data;
|
|
99
|
+
}
|
|
100
|
+
function normalizeLanguage(value) {
|
|
101
|
+
const raw = String(value || "hu-HU").trim();
|
|
102
|
+
return raw || "hu-HU";
|
|
103
|
+
}
|
|
104
|
+
function required(env, key) {
|
|
105
|
+
const value = String(env[key] || "").trim();
|
|
106
|
+
if (!value)
|
|
107
|
+
throw new Error(`Hiányzó Google Merchant API beállítás: ${key}`);
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
function stringValue(value) {
|
|
111
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLW1lcmNoYW50L2RpYWdub3N0aWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUNBLG9FQWlCQztBQWxERCxpREFBd0Y7QUFFeEYsTUFBTSxpQkFBaUIsR0FBRyxvQ0FBb0MsQ0FBQTtBQStCdkQsS0FBSyxVQUFVLDRCQUE0QixDQUFDLEdBQXlCO0lBQzFFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSwyQ0FBNEIsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUMzRCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUNsRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMscUNBQXFDLEVBQUUsSUFBSSxFQUFFLElBQUksaUJBQWlCLENBQUE7SUFFdkYsTUFBTSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkQsaUJBQWlCLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNyRSxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztLQUM5QyxDQUFDLENBQUE7SUFFRixPQUFPO1FBQ0wsYUFBYTtRQUNiLGFBQWEsRUFBRSxhQUFhLENBQUMsTUFBTTtRQUNuQyxlQUFlLEVBQUUsYUFBYSxDQUFDLGVBQWU7UUFDOUMsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO0tBQ0YsQ0FBQTtBQUN2QyxDQUFDO0FBRUQsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEtBS2hDO0lBQ0MsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQTtJQUN0QyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFbEIsR0FBRyxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQ2pCLEdBQUcsaUJBQWlCLHlCQUF5QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FDMUYsQ0FBQTtRQUNELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN6QyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3pELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEQsSUFBSSxTQUFTO1lBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBRTVELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDakUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMxRSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksd0JBQXdCLENBQUM7Z0JBQ3RFLE1BQU0sRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztnQkFDbEMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO2dCQUN0QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDO2dCQUN0RCxvQkFBb0IsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7b0JBQzVCLENBQUMsQ0FBQyxFQUFFO2FBQ1AsQ0FBQyxDQUFBO1FBQ0osQ0FBQztRQUNELFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM5QyxDQUFDLFFBQVEsU0FBUyxFQUFDO0lBRW5CLE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQUVELEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxLQUFpRDtJQUNoRixNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFBO0lBQ3pDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQTtJQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUE7SUFFbEIsR0FBRyxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQ2pCLEdBQUcsaUJBQWlCLHlCQUF5QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FDNUYsQ0FBQTtRQUNELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN2QyxJQUFJLFNBQVM7WUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7UUFFM0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2xFLGVBQWUsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFBO1FBRWxDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUN2RSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQ3pCLE9BQU8sRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FDeEUsQ0FBQTtZQUNELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLENBQUM7Z0JBQzVFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGVBQWU7Z0JBQ3ZDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUM7b0JBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZTtvQkFDekIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUVSLEtBQUssTUFBTSxLQUFLLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsV0FBVztvQkFDWCxPQUFPO29CQUNQLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksZUFBZSxDQUFDO29CQUNwRixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksS0FBSyxFQUFFLFdBQVcsQ0FBQztvQkFDeEQsUUFBUSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDO29CQUN0QyxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7b0JBQzlCLFNBQVMsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztvQkFDeEMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQztvQkFDdEQsV0FBVyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO29CQUM1QyxVQUFVLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7aUJBQzNDLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQzlDLENBQUMsUUFBUSxTQUFTLEVBQUM7SUFFbkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQTtBQUNwQyxDQUFDO0FBRUQsS0FBSyxVQUFVLFdBQVcsQ0FBQyxHQUFXLEVBQUUsV0FBbUI7SUFDekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2hDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLFdBQVcsRUFBRSxFQUFFO1FBQ25ELE1BQU0sRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUNuQyxDQUFDLENBQUE7SUFDRixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQXdCLENBQUE7SUFDN0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHNCQUFzQixRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtJQUNwRixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxLQUFjO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDM0MsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxHQUF5QixFQUFFLEdBQVc7SUFDdEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsS0FBSztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUUsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0FBQzdFLENBQUMifQ==
|
|
@@ -16,4 +16,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./config"), exports);
|
|
18
18
|
__exportStar(require("./feed"), exports);
|
|
19
|
-
|
|
19
|
+
__exportStar(require("./shipping"), exports);
|
|
20
|
+
__exportStar(require("./category-fields"), exports);
|
|
21
|
+
__exportStar(require("./merchant-api"), exports);
|
|
22
|
+
__exportStar(require("./data-source"), exports);
|
|
23
|
+
__exportStar(require("./diagnostics"), exports);
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLW1lcmNoYW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBd0I7QUFDeEIseUNBQXNCO0FBQ3RCLDZDQUEwQjtBQUMxQixvREFBaUM7QUFDakMsaURBQThCO0FBQzlCLGdEQUE2QjtBQUM3QixnREFBNkIifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const GOOGLE_MERCHANT_SCOPE = "https://www.googleapis.com/auth/content";
|
|
2
|
+
export type GoogleMerchantApiEnv = Record<string, string>;
|
|
3
|
+
export declare function buildGoogleMerchantAuthorizationUrl(env: GoogleMerchantApiEnv, state: string): string;
|
|
4
|
+
export declare function exchangeGoogleMerchantAuthorizationCode(env: GoogleMerchantApiEnv, code: string): Promise<{
|
|
5
|
+
access_token?: string;
|
|
6
|
+
refresh_token?: string;
|
|
7
|
+
error?: string;
|
|
8
|
+
error_description?: string;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function getGoogleMerchantAccessToken(env: GoogleMerchantApiEnv): Promise<string>;
|
|
11
|
+
export declare function getGoogleMerchantAccount(env: GoogleMerchantApiEnv): Promise<Record<string, any>>;
|
|
12
|
+
export declare function createGoogleMerchantOAuthState(input: {
|
|
13
|
+
actorId?: string | null;
|
|
14
|
+
}): string;
|
|
15
|
+
export declare function verifyGoogleMerchantOAuthState(state: string): {
|
|
16
|
+
ts?: number;
|
|
17
|
+
actorId?: string | null;
|
|
18
|
+
};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GOOGLE_MERCHANT_SCOPE = void 0;
|
|
4
|
+
exports.buildGoogleMerchantAuthorizationUrl = buildGoogleMerchantAuthorizationUrl;
|
|
5
|
+
exports.exchangeGoogleMerchantAuthorizationCode = exchangeGoogleMerchantAuthorizationCode;
|
|
6
|
+
exports.getGoogleMerchantAccessToken = getGoogleMerchantAccessToken;
|
|
7
|
+
exports.getGoogleMerchantAccount = getGoogleMerchantAccount;
|
|
8
|
+
exports.createGoogleMerchantOAuthState = createGoogleMerchantOAuthState;
|
|
9
|
+
exports.verifyGoogleMerchantOAuthState = verifyGoogleMerchantOAuthState;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
exports.GOOGLE_MERCHANT_SCOPE = "https://www.googleapis.com/auth/content";
|
|
12
|
+
const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
13
|
+
const GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
14
|
+
const MERCHANT_API_BASE = "https://merchantapi.googleapis.com";
|
|
15
|
+
function buildGoogleMerchantAuthorizationUrl(env, state) {
|
|
16
|
+
const clientId = required(env, "GOOGLE_MERCHANT_API_CLIENT_ID");
|
|
17
|
+
const redirectUri = required(env, "GOOGLE_MERCHANT_API_REDIRECT_URI");
|
|
18
|
+
const url = new URL(GOOGLE_AUTH_URL);
|
|
19
|
+
url.searchParams.set("client_id", clientId);
|
|
20
|
+
url.searchParams.set("redirect_uri", redirectUri);
|
|
21
|
+
url.searchParams.set("response_type", "code");
|
|
22
|
+
url.searchParams.set("scope", exports.GOOGLE_MERCHANT_SCOPE);
|
|
23
|
+
url.searchParams.set("access_type", "offline");
|
|
24
|
+
url.searchParams.set("prompt", "consent");
|
|
25
|
+
url.searchParams.set("include_granted_scopes", "true");
|
|
26
|
+
url.searchParams.set("state", state);
|
|
27
|
+
return url.toString();
|
|
28
|
+
}
|
|
29
|
+
async function exchangeGoogleMerchantAuthorizationCode(env, code) {
|
|
30
|
+
const body = new URLSearchParams({
|
|
31
|
+
client_id: required(env, "GOOGLE_MERCHANT_API_CLIENT_ID"),
|
|
32
|
+
client_secret: required(env, "GOOGLE_MERCHANT_API_CLIENT_SECRET"),
|
|
33
|
+
redirect_uri: required(env, "GOOGLE_MERCHANT_API_REDIRECT_URI"),
|
|
34
|
+
code,
|
|
35
|
+
grant_type: "authorization_code",
|
|
36
|
+
});
|
|
37
|
+
const response = await fetch(GOOGLE_TOKEN_URL, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
40
|
+
body,
|
|
41
|
+
signal: AbortSignal.timeout(10000),
|
|
42
|
+
});
|
|
43
|
+
const data = (await response.json().catch(() => ({})));
|
|
44
|
+
if (!response.ok || !data.refresh_token) {
|
|
45
|
+
throw new Error(data.error_description || data.error || "A Google OAuth refresh token nem kérhető le.");
|
|
46
|
+
}
|
|
47
|
+
return data;
|
|
48
|
+
}
|
|
49
|
+
async function getGoogleMerchantAccessToken(env) {
|
|
50
|
+
const body = new URLSearchParams({
|
|
51
|
+
client_id: required(env, "GOOGLE_MERCHANT_API_CLIENT_ID"),
|
|
52
|
+
client_secret: required(env, "GOOGLE_MERCHANT_API_CLIENT_SECRET"),
|
|
53
|
+
refresh_token: required(env, "GOOGLE_MERCHANT_API_REFRESH_TOKEN"),
|
|
54
|
+
grant_type: "refresh_token",
|
|
55
|
+
});
|
|
56
|
+
const response = await fetch(GOOGLE_TOKEN_URL, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
59
|
+
body,
|
|
60
|
+
signal: AbortSignal.timeout(10000),
|
|
61
|
+
});
|
|
62
|
+
const data = (await response.json().catch(() => ({})));
|
|
63
|
+
if (!response.ok || !data.access_token) {
|
|
64
|
+
throw new Error(data.error_description || data.error || "A Google OAuth access token nem kérhető le.");
|
|
65
|
+
}
|
|
66
|
+
return data.access_token;
|
|
67
|
+
}
|
|
68
|
+
async function getGoogleMerchantAccount(env) {
|
|
69
|
+
const accountId = required(env, "GOOGLE_MERCHANT_ACCOUNT_ID").replace(/^accounts\//, "");
|
|
70
|
+
const accessToken = await getGoogleMerchantAccessToken(env);
|
|
71
|
+
const response = await fetch(`${MERCHANT_API_BASE}/accounts/v1/accounts/${encodeURIComponent(accountId)}`, {
|
|
72
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
73
|
+
signal: AbortSignal.timeout(10000),
|
|
74
|
+
});
|
|
75
|
+
const data = (await response.json().catch(() => ({})));
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
throw new Error(data?.error?.message || `Merchant API hiba (${response.status}).`);
|
|
78
|
+
}
|
|
79
|
+
return data;
|
|
80
|
+
}
|
|
81
|
+
function createGoogleMerchantOAuthState(input) {
|
|
82
|
+
const secret = oauthStateSecret();
|
|
83
|
+
const payload = Buffer.from(JSON.stringify({ ts: Date.now(), actorId: input.actorId || null })).toString("base64url");
|
|
84
|
+
const signature = (0, node_crypto_1.createHmac)("sha256", secret).update(payload).digest("base64url");
|
|
85
|
+
return `${payload}.${signature}`;
|
|
86
|
+
}
|
|
87
|
+
function verifyGoogleMerchantOAuthState(state) {
|
|
88
|
+
const [payload, suppliedSignature] = state.split(".");
|
|
89
|
+
if (!payload || !suppliedSignature)
|
|
90
|
+
throw new Error("Érvénytelen OAuth state.");
|
|
91
|
+
const expected = (0, node_crypto_1.createHmac)("sha256", oauthStateSecret()).update(payload).digest();
|
|
92
|
+
let supplied;
|
|
93
|
+
try {
|
|
94
|
+
supplied = Buffer.from(suppliedSignature, "base64url");
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
throw new Error("Érvénytelen OAuth state.");
|
|
98
|
+
}
|
|
99
|
+
if (expected.length !== supplied.length || !(0, node_crypto_1.timingSafeEqual)(expected, supplied)) {
|
|
100
|
+
throw new Error("Érvénytelen OAuth state aláírás.");
|
|
101
|
+
}
|
|
102
|
+
const parsed = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
103
|
+
if (!parsed.ts || Date.now() - parsed.ts > 10 * 60 * 1000) {
|
|
104
|
+
throw new Error("Az OAuth state lejárt.");
|
|
105
|
+
}
|
|
106
|
+
return parsed;
|
|
107
|
+
}
|
|
108
|
+
function required(env, key) {
|
|
109
|
+
const value = String(env[key] || "").trim();
|
|
110
|
+
if (!value)
|
|
111
|
+
throw new Error(`Hiányzó Google Merchant API beállítás: ${key}`);
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
function oauthStateSecret() {
|
|
115
|
+
const secret = String(process.env.COOKIE_SECRET || process.env.JWT_SECRET || "").trim();
|
|
116
|
+
if (!secret)
|
|
117
|
+
throw new Error("COOKIE_SECRET vagy JWT_SECRET szükséges a Google OAuth state aláírásához.");
|
|
118
|
+
return secret;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyY2hhbnQtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGVzL2dvb2dsZS1tZXJjaGFudC9tZXJjaGFudC1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0Esa0ZBYUM7QUFFRCwwRkE2QkM7QUFFRCxvRUF3QkM7QUFFRCw0REFpQkM7QUFFRCx3RUFPQztBQUVELHdFQXFCQztBQWxJRCw2Q0FBeUQ7QUFFNUMsUUFBQSxxQkFBcUIsR0FBRyx5Q0FBeUMsQ0FBQTtBQUM5RSxNQUFNLGVBQWUsR0FBRyw4Q0FBOEMsQ0FBQTtBQUN0RSxNQUFNLGdCQUFnQixHQUFHLHFDQUFxQyxDQUFBO0FBQzlELE1BQU0saUJBQWlCLEdBQUcsb0NBQW9DLENBQUE7QUFJOUQsU0FBZ0IsbUNBQW1DLENBQUMsR0FBeUIsRUFBRSxLQUFhO0lBQzFGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUMsQ0FBQTtJQUMvRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLGtDQUFrQyxDQUFDLENBQUE7SUFDckUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDcEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzNDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNqRCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDN0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDZCQUFxQixDQUFDLENBQUE7SUFDcEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQzlD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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type GoogleMerchantShippingConfig = {
|
|
2
|
+
enabled: boolean;
|
|
3
|
+
country: string;
|
|
4
|
+
service?: string;
|
|
5
|
+
price: string;
|
|
6
|
+
minHandlingTime?: number;
|
|
7
|
+
maxHandlingTime?: number;
|
|
8
|
+
minTransitTime?: number;
|
|
9
|
+
maxTransitTime?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function applyGoogleMerchantShipping(container: {
|
|
12
|
+
resolve(name: string): unknown;
|
|
13
|
+
}, xml: string): Promise<string>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyGoogleMerchantShipping = applyGoogleMerchantShipping;
|
|
4
|
+
const integration_settings_1 = require("../../../modules/integration-settings");
|
|
5
|
+
async function applyGoogleMerchantShipping(container, xml) {
|
|
6
|
+
const store = container.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
|
|
7
|
+
const resolved = await (0, integration_settings_1.resolvedIntegrationEnvironment)(store, "google-merchant");
|
|
8
|
+
const shipping = getShippingConfig(resolved.env);
|
|
9
|
+
if (!shipping.enabled)
|
|
10
|
+
return xml;
|
|
11
|
+
const fragment = buildShippingXml(shipping);
|
|
12
|
+
return xml.replaceAll("</item>", `${fragment}</item>`);
|
|
13
|
+
}
|
|
14
|
+
function getShippingConfig(env) {
|
|
15
|
+
const enabled = env.GOOGLE_MERCHANT_SHIPPING_ENABLED === "true";
|
|
16
|
+
const country = String(env.GOOGLE_MERCHANT_SHIPPING_COUNTRY ||
|
|
17
|
+
env.GOOGLE_MERCHANT_COUNTRY_CODE ||
|
|
18
|
+
process.env.STORE_DEFAULT_COUNTRY ||
|
|
19
|
+
"HU")
|
|
20
|
+
.trim()
|
|
21
|
+
.toUpperCase();
|
|
22
|
+
const currency = String(env.GOOGLE_MERCHANT_CURRENCY_CODE || process.env.STORE_DEFAULT_CURRENCY || "HUF")
|
|
23
|
+
.trim()
|
|
24
|
+
.toUpperCase();
|
|
25
|
+
const rawPrice = String(env.GOOGLE_MERCHANT_SHIPPING_PRICE || "").trim();
|
|
26
|
+
const service = String(env.GOOGLE_MERCHANT_SHIPPING_SERVICE || "").trim() || undefined;
|
|
27
|
+
if (!enabled) {
|
|
28
|
+
return { enabled: false, country, price: "" };
|
|
29
|
+
}
|
|
30
|
+
if (!/^[A-Z]{2}$/.test(country)) {
|
|
31
|
+
throw new Error("A Google Merchant szállítási célország kétbetűs ISO kód legyen, például HU.");
|
|
32
|
+
}
|
|
33
|
+
if (!/^[A-Z]{3}$/.test(currency)) {
|
|
34
|
+
throw new Error("A Google Merchant szállítás pénzneme hárombetűs ISO kód legyen, például HUF.");
|
|
35
|
+
}
|
|
36
|
+
const amount = Number(rawPrice.replace(",", "."));
|
|
37
|
+
if (!rawPrice || !Number.isFinite(amount) || amount < 0) {
|
|
38
|
+
throw new Error("Bekapcsolt Merchant szállításnál érvényes, nem negatív szállítási díj szükséges.");
|
|
39
|
+
}
|
|
40
|
+
const minHandlingTime = optionalNonNegativeInteger(env.GOOGLE_MERCHANT_MIN_HANDLING_TIME, "minimum kezelési idő");
|
|
41
|
+
const maxHandlingTime = optionalNonNegativeInteger(env.GOOGLE_MERCHANT_MAX_HANDLING_TIME, "maximum kezelési idő");
|
|
42
|
+
const minTransitTime = optionalNonNegativeInteger(env.GOOGLE_MERCHANT_MIN_TRANSIT_TIME, "minimum szállítási idő");
|
|
43
|
+
const maxTransitTime = optionalNonNegativeInteger(env.GOOGLE_MERCHANT_MAX_TRANSIT_TIME, "maximum szállítási idő");
|
|
44
|
+
if (minHandlingTime != null &&
|
|
45
|
+
maxHandlingTime != null &&
|
|
46
|
+
minHandlingTime > maxHandlingTime) {
|
|
47
|
+
throw new Error("A minimum kezelési idő nem lehet nagyobb a maximumnál.");
|
|
48
|
+
}
|
|
49
|
+
if (minTransitTime != null &&
|
|
50
|
+
maxTransitTime != null &&
|
|
51
|
+
minTransitTime > maxTransitTime) {
|
|
52
|
+
throw new Error("A minimum szállítási idő nem lehet nagyobb a maximumnál.");
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
enabled: true,
|
|
56
|
+
country,
|
|
57
|
+
service,
|
|
58
|
+
price: `${amount.toFixed(2)} ${currency}`,
|
|
59
|
+
minHandlingTime,
|
|
60
|
+
maxHandlingTime,
|
|
61
|
+
minTransitTime,
|
|
62
|
+
maxTransitTime,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function buildShippingXml(config) {
|
|
66
|
+
const optional = (name, value) => value === undefined || value === ""
|
|
67
|
+
? ""
|
|
68
|
+
: `<g:${name}>${xmlEscape(String(value))}</g:${name}>`;
|
|
69
|
+
return (`<g:shipping>` +
|
|
70
|
+
`<g:country>${xmlEscape(config.country)}</g:country>` +
|
|
71
|
+
optional("service", config.service) +
|
|
72
|
+
`<g:price>${xmlEscape(config.price)}</g:price>` +
|
|
73
|
+
optional("min_handling_time", config.minHandlingTime) +
|
|
74
|
+
optional("max_handling_time", config.maxHandlingTime) +
|
|
75
|
+
optional("min_transit_time", config.minTransitTime) +
|
|
76
|
+
optional("max_transit_time", config.maxTransitTime) +
|
|
77
|
+
`</g:shipping>`);
|
|
78
|
+
}
|
|
79
|
+
function optionalNonNegativeInteger(value, label) {
|
|
80
|
+
const raw = String(value || "").trim();
|
|
81
|
+
if (!raw)
|
|
82
|
+
return undefined;
|
|
83
|
+
const parsed = Number(raw);
|
|
84
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
85
|
+
throw new Error(`A Google Merchant ${label} csak nem negatív egész szám lehet.`);
|
|
86
|
+
}
|
|
87
|
+
return parsed;
|
|
88
|
+
}
|
|
89
|
+
function xmlEscape(value) {
|
|
90
|
+
return value
|
|
91
|
+
.replace(/&/g, "&")
|
|
92
|
+
.replace(/</g, "<")
|
|
93
|
+
.replace(/>/g, ">")
|
|
94
|
+
.replace(/"/g, """)
|
|
95
|
+
.replace(/'/g, "'");
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLW1lcmNoYW50L3NoaXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLGtFQWNDO0FBL0JELGdGQUk4QztBQWF2QyxLQUFLLFVBQVUsMkJBQTJCLENBQy9DLFNBQTZDLEVBQzdDLEdBQVc7SUFFWCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QixrREFBMkIsQ0FDVyxDQUFBO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxxREFBOEIsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUMvRSxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFFakMsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDM0MsT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxHQUFHLFFBQVEsU0FBUyxDQUFDLENBQUE7QUFDeEQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsR0FBMkI7SUFDcEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLGdDQUFnQyxLQUFLLE1BQU0sQ0FBQTtJQUMvRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQ3BCLEdBQUcsQ0FBQyxnQ0FBZ0M7UUFDbEMsR0FBRyxDQUFDLDRCQUE0QjtRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtRQUNqQyxJQUFJLENBQ1A7U0FDRSxJQUFJLEVBQUU7U0FDTixXQUFXLEVBQUUsQ0FBQTtJQUNoQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLEdBQUcsQ0FBQyw2QkFBNkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFz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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGVzL2dvb2dsZS10YWctbWFuYWdlci9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLXRhZy1tYW5hZ2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvbW9kdWxlcy9nb29nbGUtdGFnLW1hbmFnZXIvc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -33,12 +33,12 @@ export declare function executeShippingAction(input: {
|
|
|
33
33
|
} | null;
|
|
34
34
|
alreadyExisted?: undefined;
|
|
35
35
|
}>;
|
|
36
|
-
export declare function labelsForOrders(orderService: ShippingOrderService, orderIds: string[], requestedFormat: unknown, actorId?: string): Promise<{
|
|
36
|
+
export declare function labelsForOrders(orderService: ShippingOrderService, orderIds: string[], requestedFormat: unknown, actorId?: string, operationStore?: IntegrationOperationStore): Promise<{
|
|
37
37
|
pdf: Buffer<ArrayBuffer>;
|
|
38
38
|
format: ShippingLabelFormat;
|
|
39
39
|
count: number;
|
|
40
40
|
}>;
|
|
41
|
-
export declare function labelForOrder(orderService: ShippingOrderService, orderId: string, requestedFormat: unknown, actorId?: string): Promise<{
|
|
41
|
+
export declare function labelForOrder(orderService: ShippingOrderService, orderId: string, requestedFormat: unknown, actorId?: string, operationStore?: IntegrationOperationStore): Promise<{
|
|
42
42
|
pdf: Buffer<ArrayBuffer>;
|
|
43
43
|
format: ShippingLabelFormat;
|
|
44
44
|
count: number;
|