@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,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getGoogleAdsConversionDiagnostics = getGoogleAdsConversionDiagnostics;
|
|
4
|
+
const api_1 = require("./api");
|
|
5
|
+
const GOOGLE_ADS_API_BASE = "https://googleads.googleapis.com/v26";
|
|
6
|
+
async function getGoogleAdsConversionDiagnostics(env) {
|
|
7
|
+
if (env.GOOGLE_ADS_API_ENABLED !== "true") {
|
|
8
|
+
throw new Error("A Google Ads API kapcsolat nincs bekapcsolva.");
|
|
9
|
+
}
|
|
10
|
+
const customerId = digits(required(env, "GOOGLE_ADS_CUSTOMER_ID"));
|
|
11
|
+
const loginCustomerId = digits(env.GOOGLE_ADS_LOGIN_CUSTOMER_ID);
|
|
12
|
+
const developerToken = required(env, "GOOGLE_ADS_DEVELOPER_TOKEN");
|
|
13
|
+
const configuredActionId = digits(env.GOOGLE_ADS_CONVERSION_ACTION_ID);
|
|
14
|
+
const accessToken = await (0, api_1.getGoogleAdsAccessToken)(env);
|
|
15
|
+
const headers = {
|
|
16
|
+
authorization: `Bearer ${accessToken}`,
|
|
17
|
+
"developer-token": developerToken,
|
|
18
|
+
"content-type": "application/json",
|
|
19
|
+
};
|
|
20
|
+
if (loginCustomerId)
|
|
21
|
+
headers["login-customer-id"] = loginCustomerId;
|
|
22
|
+
const query = [
|
|
23
|
+
"SELECT",
|
|
24
|
+
"conversion_action.id,",
|
|
25
|
+
"conversion_action.name,",
|
|
26
|
+
"conversion_action.type,",
|
|
27
|
+
"conversion_action.category,",
|
|
28
|
+
"conversion_action.status,",
|
|
29
|
+
"conversion_action.origin,",
|
|
30
|
+
"conversion_action.primary_for_goal,",
|
|
31
|
+
"conversion_action.counting_type,",
|
|
32
|
+
"conversion_action.tag_snippets,",
|
|
33
|
+
"metrics.all_conversions,",
|
|
34
|
+
"metrics.all_conversions_value,",
|
|
35
|
+
"metrics.conversion_last_conversion_date,",
|
|
36
|
+
"metrics.conversion_last_received_request_date_time",
|
|
37
|
+
"FROM conversion_action",
|
|
38
|
+
"WHERE conversion_action.status != 'REMOVED'",
|
|
39
|
+
].join(" ");
|
|
40
|
+
const response = await fetch(`${GOOGLE_ADS_API_BASE}/customers/${customerId}/googleAds:search`, {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers,
|
|
43
|
+
body: JSON.stringify({ query, pageSize: 1000 }),
|
|
44
|
+
signal: AbortSignal.timeout(20000),
|
|
45
|
+
});
|
|
46
|
+
const data = await json(response);
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
throw new Error(`Google Ads diagnostics hiba (${response.status}): ${errorMessage(data)}`);
|
|
49
|
+
}
|
|
50
|
+
const rows = Array.isArray(data.results) ? data.results : [];
|
|
51
|
+
const actions = rows
|
|
52
|
+
.map((row) => normalizeAction(row, configuredActionId))
|
|
53
|
+
.filter((item) => Boolean(item));
|
|
54
|
+
return {
|
|
55
|
+
customerId,
|
|
56
|
+
actions,
|
|
57
|
+
summary: {
|
|
58
|
+
total: actions.length,
|
|
59
|
+
enabled: actions.filter((item) => item.status === "ENABLED").length,
|
|
60
|
+
purchase: actions.filter((item) => item.category === "PURCHASE").length,
|
|
61
|
+
errors: actions.filter((item) => item.severity === "error").length,
|
|
62
|
+
warnings: actions.filter((item) => item.severity === "warning").length,
|
|
63
|
+
primary: actions.filter((item) => item.primaryForGoal).length,
|
|
64
|
+
},
|
|
65
|
+
generatedAt: new Date().toISOString(),
|
|
66
|
+
requestId: response.headers.get("request-id"),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function normalizeAction(row, configuredActionId) {
|
|
70
|
+
const root = record(row);
|
|
71
|
+
const action = record(root?.conversionAction);
|
|
72
|
+
const metrics = record(root?.metrics);
|
|
73
|
+
if (!action)
|
|
74
|
+
return null;
|
|
75
|
+
const id = text(action.id);
|
|
76
|
+
const status = text(action.status).toUpperCase() || "UNKNOWN";
|
|
77
|
+
const category = text(action.category).toUpperCase() || "UNKNOWN";
|
|
78
|
+
const type = text(action.type).toUpperCase() || "UNKNOWN";
|
|
79
|
+
const origin = text(action.origin).toUpperCase() || "UNKNOWN";
|
|
80
|
+
const primaryForGoal = Boolean(action.primaryForGoal);
|
|
81
|
+
const tagSnippetCount = Array.isArray(action.tagSnippets) ? action.tagSnippets.length : 0;
|
|
82
|
+
const configuredPurchaseAction = Boolean(configuredActionId && id === configuredActionId);
|
|
83
|
+
const messages = [];
|
|
84
|
+
let severity = "ok";
|
|
85
|
+
if (status !== "ENABLED") {
|
|
86
|
+
severity = "error";
|
|
87
|
+
messages.push(`A conversion action státusza ${status}.`);
|
|
88
|
+
}
|
|
89
|
+
if (!primaryForGoal) {
|
|
90
|
+
if (severity !== "error")
|
|
91
|
+
severity = "warning";
|
|
92
|
+
messages.push("Secondary conversion action: standard bidding optimalizációban nem primary cél.");
|
|
93
|
+
}
|
|
94
|
+
if (category === "PURCHASE" && type.includes("WEB") && tagSnippetCount === 0) {
|
|
95
|
+
if (severity !== "error")
|
|
96
|
+
severity = "warning";
|
|
97
|
+
messages.push("Webes purchase action, de a Google Ads API nem adott vissza tag snippetet.");
|
|
98
|
+
}
|
|
99
|
+
const lastReceivedRequestDateTime = text(metrics?.conversionLastReceivedRequestDateTime) || undefined;
|
|
100
|
+
const lastConversionDate = text(metrics?.conversionLastConversionDate) || undefined;
|
|
101
|
+
if (status === "ENABLED" && !lastReceivedRequestDateTime) {
|
|
102
|
+
if (severity !== "error")
|
|
103
|
+
severity = "warning";
|
|
104
|
+
messages.push("Nincs visszaadott utolsó conversion request időpont.");
|
|
105
|
+
}
|
|
106
|
+
if (configuredPurchaseAction && category !== "PURCHASE") {
|
|
107
|
+
severity = "error";
|
|
108
|
+
messages.push("A Core-ban purchase conversion actionként beállított ID Google Ads szerint nem PURCHASE kategória.");
|
|
109
|
+
}
|
|
110
|
+
if (!messages.length)
|
|
111
|
+
messages.push("Nem látszik konfigurációs probléma a Google Ads API által visszaadott jelek alapján.");
|
|
112
|
+
return {
|
|
113
|
+
id,
|
|
114
|
+
name: text(action.name) || `Conversion ${id}`,
|
|
115
|
+
type,
|
|
116
|
+
category,
|
|
117
|
+
status,
|
|
118
|
+
origin,
|
|
119
|
+
primaryForGoal,
|
|
120
|
+
countingType: text(action.countingType).toUpperCase() || "UNKNOWN",
|
|
121
|
+
tagSnippetCount,
|
|
122
|
+
allConversions: number(metrics?.allConversions),
|
|
123
|
+
allConversionsValue: number(metrics?.allConversionsValue),
|
|
124
|
+
lastConversionDate,
|
|
125
|
+
lastReceivedRequestDateTime,
|
|
126
|
+
configuredPurchaseAction,
|
|
127
|
+
severity,
|
|
128
|
+
messages,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
function required(env, key) {
|
|
132
|
+
const value = text(env[key]);
|
|
133
|
+
if (!value)
|
|
134
|
+
throw new Error(`Hiányzó Google Ads API beállítás: ${key}`);
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
function digits(value) {
|
|
138
|
+
return text(value).replace(/[^0-9]/g, "");
|
|
139
|
+
}
|
|
140
|
+
function text(value) {
|
|
141
|
+
return typeof value === "string" || typeof value === "number" ? String(value).trim() : "";
|
|
142
|
+
}
|
|
143
|
+
function number(value) {
|
|
144
|
+
const parsed = Number(value);
|
|
145
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
146
|
+
}
|
|
147
|
+
function record(value) {
|
|
148
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
149
|
+
? value
|
|
150
|
+
: null;
|
|
151
|
+
}
|
|
152
|
+
async function json(response) {
|
|
153
|
+
return await response.json().catch(() => ({}));
|
|
154
|
+
}
|
|
155
|
+
function errorMessage(data) {
|
|
156
|
+
const direct = text(data.message) || text(data.error_description);
|
|
157
|
+
if (direct)
|
|
158
|
+
return direct;
|
|
159
|
+
const error = record(data.error);
|
|
160
|
+
if (error)
|
|
161
|
+
return text(error.message) || text(error.status) || JSON.stringify(error).slice(0, 1000);
|
|
162
|
+
return JSON.stringify(data).slice(0, 1000);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLWFkcy9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNDQSw4RUFzRUM7QUE1R0QsK0JBQXFFO0FBRXJFLE1BQU0sbUJBQW1CLEdBQUcsc0NBQXNDLENBQUE7QUFvQzNELEtBQUssVUFBVSxpQ0FBaUMsQ0FBQyxHQUFvQjtJQUMxRSxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7SUFDbEUsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDLENBQUMsQ0FBQTtJQUNsRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDaEUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2xFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSw2QkFBdUIsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUV0RCxNQUFNLE9BQU8sR0FBMkI7UUFDdEMsYUFBYSxFQUFFLFVBQVUsV0FBVyxFQUFFO1FBQ3RDLGlCQUFpQixFQUFFLGNBQWM7UUFDakMsY0FBYyxFQUFFLGtCQUFrQjtLQUNuQyxDQUFBO0lBQ0QsSUFBSSxlQUFlO1FBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsZUFBZSxDQUFBO0lBRW5FLE1BQU0sS0FBSyxHQUFHO1FBQ1osUUFBUTtRQUNSLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLDZC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
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyGoogleMerchantCategoryFields = applyGoogleMerchantCategoryFields;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const SIZE_SYSTEMS = new Set([
|
|
6
|
+
"AU", "BR", "CN", "DE", "EU", "FR", "IT", "JP", "MEX", "UK", "US",
|
|
7
|
+
]);
|
|
8
|
+
const SIZE_TYPES = new Set(["regular", "petite", "plus", "tall", "big", "maternity"]);
|
|
9
|
+
async function applyGoogleMerchantCategoryFields(container, xml, items) {
|
|
10
|
+
if (!items.length)
|
|
11
|
+
return xml;
|
|
12
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
13
|
+
const ids = items.map((item) => item.id).filter(Boolean);
|
|
14
|
+
const { data: variants } = await query.graph({
|
|
15
|
+
entity: "variant",
|
|
16
|
+
fields: ["id", "metadata", "product.metadata"],
|
|
17
|
+
filters: { id: ids },
|
|
18
|
+
});
|
|
19
|
+
let result = xml;
|
|
20
|
+
for (const variant of variants || []) {
|
|
21
|
+
const id = String(variant.id || "");
|
|
22
|
+
if (!id)
|
|
23
|
+
continue;
|
|
24
|
+
const variantMetadata = asMetadata(variant.metadata);
|
|
25
|
+
const productMetadata = asMetadata(variant.product?.metadata);
|
|
26
|
+
const fragment = buildCategorySpecificXml(productMetadata, variantMetadata);
|
|
27
|
+
if (!fragment)
|
|
28
|
+
continue;
|
|
29
|
+
const marker = `<g:id>${xmlEscape(id)}</g:id>`;
|
|
30
|
+
result = result.replace(marker, `${marker}${fragment}`);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
function buildCategorySpecificXml(productMetadata, variantMetadata) {
|
|
35
|
+
const out = [];
|
|
36
|
+
const sizeSystem = firstString(metadataString(variantMetadata, "google_size_system"), metadataString(productMetadata, "google_size_system"))?.toUpperCase();
|
|
37
|
+
if (sizeSystem && SIZE_SYSTEMS.has(sizeSystem)) {
|
|
38
|
+
out.push(tag("size_system", sizeSystem));
|
|
39
|
+
}
|
|
40
|
+
const sizeTypes = firstList(variantMetadata.google_size_type, productMetadata.google_size_type)
|
|
41
|
+
.map((value) => value.toLowerCase())
|
|
42
|
+
.filter((value) => SIZE_TYPES.has(value))
|
|
43
|
+
.slice(0, 2);
|
|
44
|
+
for (const value of sizeTypes)
|
|
45
|
+
out.push(tag("size_type", value));
|
|
46
|
+
const adult = firstBoolean(metadataBoolean(variantMetadata, "google_adult"), metadataBoolean(productMetadata, "google_adult"));
|
|
47
|
+
if (adult !== undefined)
|
|
48
|
+
out.push(tag("adult", adult ? "yes" : "no"));
|
|
49
|
+
const isBundle = firstBoolean(metadataBoolean(variantMetadata, "google_is_bundle"), metadataBoolean(productMetadata, "google_is_bundle"));
|
|
50
|
+
if (isBundle !== undefined)
|
|
51
|
+
out.push(tag("is_bundle", isBundle ? "yes" : "no"));
|
|
52
|
+
const multipack = firstPositiveInteger(variantMetadata.google_multipack, productMetadata.google_multipack);
|
|
53
|
+
if (multipack !== undefined)
|
|
54
|
+
out.push(tag("multipack", String(multipack)));
|
|
55
|
+
const unitPricingMeasure = firstString(metadataString(variantMetadata, "google_unit_pricing_measure"), metadataString(productMetadata, "google_unit_pricing_measure"));
|
|
56
|
+
if (unitPricingMeasure)
|
|
57
|
+
out.push(tag("unit_pricing_measure", truncate(unitPricingMeasure, 50)));
|
|
58
|
+
const unitPricingBaseMeasure = firstString(metadataString(variantMetadata, "google_unit_pricing_base_measure"), metadataString(productMetadata, "google_unit_pricing_base_measure"));
|
|
59
|
+
if (unitPricingBaseMeasure) {
|
|
60
|
+
out.push(tag("unit_pricing_base_measure", truncate(unitPricingBaseMeasure, 50)));
|
|
61
|
+
}
|
|
62
|
+
const eprelCode = firstString(metadataString(variantMetadata, "google_eprel_code"), metadataString(productMetadata, "google_eprel_code"));
|
|
63
|
+
if (eprelCode) {
|
|
64
|
+
out.push(`<g:certification>` +
|
|
65
|
+
`<g:certification_authority>EC</g:certification_authority>` +
|
|
66
|
+
`<g:certification_name>EPREL</g:certification_name>` +
|
|
67
|
+
`<g:certification_code>${xmlEscape(truncate(eprelCode, 100))}</g:certification_code>` +
|
|
68
|
+
`</g:certification>`);
|
|
69
|
+
}
|
|
70
|
+
const highlights = firstList(variantMetadata.google_product_highlights, productMetadata.google_product_highlights)
|
|
71
|
+
.map((value) => truncate(value, 150))
|
|
72
|
+
.filter(Boolean)
|
|
73
|
+
.slice(0, 100);
|
|
74
|
+
for (const highlight of highlights)
|
|
75
|
+
out.push(tag("product_highlight", highlight));
|
|
76
|
+
const details = firstProductDetails(variantMetadata.google_product_details, productMetadata.google_product_details).slice(0, 100);
|
|
77
|
+
for (const detail of details) {
|
|
78
|
+
out.push(`<g:product_detail>` +
|
|
79
|
+
(detail.sectionName ? tag("section_name", truncate(detail.sectionName, 140)) : "") +
|
|
80
|
+
tag("attribute_name", truncate(detail.attributeName, 140)) +
|
|
81
|
+
tag("attribute_value", truncate(detail.attributeValue, 1000)) +
|
|
82
|
+
`</g:product_detail>`);
|
|
83
|
+
}
|
|
84
|
+
return out.join("");
|
|
85
|
+
}
|
|
86
|
+
function firstProductDetails(...values) {
|
|
87
|
+
for (const value of values) {
|
|
88
|
+
const parsed = parseProductDetails(value);
|
|
89
|
+
if (parsed.length)
|
|
90
|
+
return parsed;
|
|
91
|
+
}
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
function parseProductDetails(value) {
|
|
95
|
+
let source = value;
|
|
96
|
+
if (typeof source === "string") {
|
|
97
|
+
const trimmed = source.trim();
|
|
98
|
+
if (!trimmed)
|
|
99
|
+
return [];
|
|
100
|
+
try {
|
|
101
|
+
source = JSON.parse(trimmed);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (!Array.isArray(source))
|
|
108
|
+
return [];
|
|
109
|
+
return source
|
|
110
|
+
.map((entry) => {
|
|
111
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
112
|
+
return null;
|
|
113
|
+
const row = entry;
|
|
114
|
+
const attributeName = stringValue(row.attribute_name ?? row.attributeName);
|
|
115
|
+
const attributeValue = stringValue(row.attribute_value ?? row.attributeValue);
|
|
116
|
+
if (!attributeName || !attributeValue)
|
|
117
|
+
return null;
|
|
118
|
+
return {
|
|
119
|
+
sectionName: stringValue(row.section_name ?? row.sectionName) || undefined,
|
|
120
|
+
attributeName,
|
|
121
|
+
attributeValue,
|
|
122
|
+
};
|
|
123
|
+
})
|
|
124
|
+
.filter(Boolean);
|
|
125
|
+
}
|
|
126
|
+
function firstList(...values) {
|
|
127
|
+
for (const value of values) {
|
|
128
|
+
const parsed = parseList(value);
|
|
129
|
+
if (parsed.length)
|
|
130
|
+
return parsed;
|
|
131
|
+
}
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
function parseList(value) {
|
|
135
|
+
if (Array.isArray(value)) {
|
|
136
|
+
return value.map(stringValue).filter(Boolean);
|
|
137
|
+
}
|
|
138
|
+
if (typeof value !== "string")
|
|
139
|
+
return [];
|
|
140
|
+
const trimmed = value.trim();
|
|
141
|
+
if (!trimmed)
|
|
142
|
+
return [];
|
|
143
|
+
try {
|
|
144
|
+
const parsed = JSON.parse(trimmed);
|
|
145
|
+
if (Array.isArray(parsed)) {
|
|
146
|
+
return parsed.map(stringValue).filter(Boolean);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
// Accept human-friendly newline/pipe/comma separated metadata too.
|
|
151
|
+
}
|
|
152
|
+
return trimmed
|
|
153
|
+
.split(/\r?\n|\||,/)
|
|
154
|
+
.map((item) => item.trim())
|
|
155
|
+
.filter(Boolean);
|
|
156
|
+
}
|
|
157
|
+
function firstPositiveInteger(...values) {
|
|
158
|
+
for (const value of values) {
|
|
159
|
+
if (value === null || value === undefined || value === "")
|
|
160
|
+
continue;
|
|
161
|
+
const parsed = Number(value);
|
|
162
|
+
if (Number.isInteger(parsed) && parsed > 0)
|
|
163
|
+
return parsed;
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
function metadataString(metadata, key) {
|
|
168
|
+
return stringValue(metadata[key]);
|
|
169
|
+
}
|
|
170
|
+
function metadataBoolean(metadata, key) {
|
|
171
|
+
const value = metadata[key];
|
|
172
|
+
if (value === true || value === "true" || value === "yes" || value === 1)
|
|
173
|
+
return true;
|
|
174
|
+
if (value === false || value === "false" || value === "no" || value === 0)
|
|
175
|
+
return false;
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
function firstString(...values) {
|
|
179
|
+
return values.find((value) => Boolean(value?.trim()))?.trim();
|
|
180
|
+
}
|
|
181
|
+
function firstBoolean(...values) {
|
|
182
|
+
return values.find((value) => value !== undefined);
|
|
183
|
+
}
|
|
184
|
+
function stringValue(value) {
|
|
185
|
+
if (typeof value === "string" && value.trim())
|
|
186
|
+
return value.trim();
|
|
187
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
188
|
+
return String(value);
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
function asMetadata(value) {
|
|
192
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
193
|
+
? value
|
|
194
|
+
: {};
|
|
195
|
+
}
|
|
196
|
+
function tag(name, value) {
|
|
197
|
+
return `<g:${name}>${xmlEscape(value)}</g:${name}>`;
|
|
198
|
+
}
|
|
199
|
+
function truncate(value, max) {
|
|
200
|
+
return value.replace(/\s+/g, " ").trim().slice(0, max);
|
|
201
|
+
}
|
|
202
|
+
function xmlEscape(value) {
|
|
203
|
+
return value
|
|
204
|
+
.replace(/&/g, "&")
|
|
205
|
+
.replace(/</g, "<")
|
|
206
|
+
.replace(/>/g, ">")
|
|
207
|
+
.replace(/"/g, """)
|
|
208
|
+
.replace(/'/g, "'");
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGVzL2dvb2dsZS1tZXJjaGFudC9jYXRlZ29yeS1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFxQkEsOEVBOEJDO0FBbkRELHFEQUFxRTtBQUVyRSxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMzQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSTtDQUNsRSxDQUFDLENBQUE7QUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQWdCOUUsS0FBSyxVQUFVLGlDQUFpQyxDQUNyRCxTQUE2QyxFQUM3QyxHQUFXLEVBQ1gsS0FBeUI7SUFFekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFFN0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQXlCLENBQUE7SUFDeEYsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMzQyxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDO1FB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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type GoogleMerchantApiEnv } from "./merchant-api";
|
|
2
|
+
export type GoogleMerchantDataSourceSyncInput = {
|
|
3
|
+
env: GoogleMerchantApiEnv;
|
|
4
|
+
feedUrl: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
countryCode: string;
|
|
7
|
+
contentLanguage: string;
|
|
8
|
+
fetchHour: number;
|
|
9
|
+
timeZone: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function syncGoogleMerchantDataSource(input: GoogleMerchantDataSourceSyncInput): Promise<{
|
|
12
|
+
action: "created" | "updated";
|
|
13
|
+
dataSourceId: string;
|
|
14
|
+
name: string;
|
|
15
|
+
displayName: string;
|
|
16
|
+
feedUrl: string;
|
|
17
|
+
}>;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncGoogleMerchantDataSource = syncGoogleMerchantDataSource;
|
|
4
|
+
const merchant_api_1 = require("./merchant-api");
|
|
5
|
+
const DATA_SOURCES_BASE = "https://merchantapi.googleapis.com/datasources/v1";
|
|
6
|
+
async function syncGoogleMerchantDataSource(input) {
|
|
7
|
+
const accountId = required(input.env, "GOOGLE_MERCHANT_ACCOUNT_ID").replace(/^accounts\//, "");
|
|
8
|
+
validateInput(input);
|
|
9
|
+
const accessToken = await (0, merchant_api_1.getGoogleMerchantAccessToken)(input.env);
|
|
10
|
+
const parent = `accounts/${accountId}`;
|
|
11
|
+
const payload = buildPayload(input);
|
|
12
|
+
let dataSource = await resolveExistingDataSource({
|
|
13
|
+
accessToken,
|
|
14
|
+
parent,
|
|
15
|
+
configuredId: input.env.GOOGLE_MERCHANT_DATA_SOURCE_ID,
|
|
16
|
+
displayName: input.displayName,
|
|
17
|
+
});
|
|
18
|
+
let action;
|
|
19
|
+
if (dataSource?.name) {
|
|
20
|
+
dataSource = await merchantRequest(`${DATA_SOURCES_BASE}/${dataSource.name}?updateMask=${encodeURIComponent("displayName,primaryProductDataSource,fileInput")}`, accessToken, { method: "PATCH", body: payload });
|
|
21
|
+
action = "updated";
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
dataSource = await merchantRequest(`${DATA_SOURCES_BASE}/${parent}/dataSources`, accessToken, { method: "POST", body: payload });
|
|
25
|
+
action = "created";
|
|
26
|
+
}
|
|
27
|
+
if (!dataSource?.name || !dataSource?.dataSourceId) {
|
|
28
|
+
throw new Error("A Google Merchant API nem adott vissza data source azonosítót.");
|
|
29
|
+
}
|
|
30
|
+
await merchantRequest(`${DATA_SOURCES_BASE}/${dataSource.name}:fetch`, accessToken, { method: "POST" });
|
|
31
|
+
return {
|
|
32
|
+
action,
|
|
33
|
+
dataSourceId: String(dataSource.dataSourceId),
|
|
34
|
+
name: dataSource.name,
|
|
35
|
+
displayName: dataSource.displayName || input.displayName,
|
|
36
|
+
feedUrl: input.feedUrl,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function resolveExistingDataSource(input) {
|
|
40
|
+
const configuredId = String(input.configuredId || "").trim();
|
|
41
|
+
if (configuredId) {
|
|
42
|
+
try {
|
|
43
|
+
return await merchantRequest(`${DATA_SOURCES_BASE}/${input.parent}/dataSources/${encodeURIComponent(configuredId)}`, input.accessToken);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
if (!isNotFound(error))
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
let pageToken = "";
|
|
51
|
+
do {
|
|
52
|
+
const query = pageToken ? `?pageToken=${encodeURIComponent(pageToken)}` : "";
|
|
53
|
+
const page = await merchantRequest(`${DATA_SOURCES_BASE}/${input.parent}/dataSources${query}`, input.accessToken);
|
|
54
|
+
const match = (page.dataSources || []).find((source) => source.displayName === input.displayName && source.input === "FILE");
|
|
55
|
+
if (match)
|
|
56
|
+
return match;
|
|
57
|
+
pageToken = page.nextPageToken || "";
|
|
58
|
+
} while (pageToken);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
function buildPayload(input) {
|
|
62
|
+
return {
|
|
63
|
+
displayName: input.displayName,
|
|
64
|
+
primaryProductDataSource: {
|
|
65
|
+
channel: "ONLINE_PRODUCTS",
|
|
66
|
+
contentLanguage: input.contentLanguage.toLowerCase(),
|
|
67
|
+
feedLabel: input.countryCode.toUpperCase(),
|
|
68
|
+
countries: [input.countryCode.toUpperCase()],
|
|
69
|
+
},
|
|
70
|
+
fileInput: {
|
|
71
|
+
fetchSettings: {
|
|
72
|
+
enabled: true,
|
|
73
|
+
timeOfDay: { hours: input.fetchHour },
|
|
74
|
+
timeZone: input.timeZone,
|
|
75
|
+
frequency: "FREQUENCY_DAILY",
|
|
76
|
+
fetchUri: input.feedUrl,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
async function merchantRequest(url, accessToken, options = {}) {
|
|
82
|
+
const response = await fetch(url, {
|
|
83
|
+
method: options.method || "GET",
|
|
84
|
+
headers: {
|
|
85
|
+
Authorization: `Bearer ${accessToken}`,
|
|
86
|
+
...(options.body ? { "Content-Type": "application/json" } : {}),
|
|
87
|
+
},
|
|
88
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
89
|
+
signal: AbortSignal.timeout(15000),
|
|
90
|
+
});
|
|
91
|
+
const data = (await response.json().catch(() => ({})));
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
const message = data?.error?.message || `Merchant Data Sources API hiba (${response.status}).`;
|
|
94
|
+
const error = new Error(message);
|
|
95
|
+
error.status = response.status;
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
return data;
|
|
99
|
+
}
|
|
100
|
+
function validateInput(input) {
|
|
101
|
+
let feedUrl;
|
|
102
|
+
try {
|
|
103
|
+
feedUrl = new URL(input.feedUrl);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw new Error("Érvénytelen Google Merchant feed URL.");
|
|
107
|
+
}
|
|
108
|
+
if (feedUrl.protocol !== "https:") {
|
|
109
|
+
throw new Error("Az automatikus Google Merchant data source feed URL-je HTTPS legyen.");
|
|
110
|
+
}
|
|
111
|
+
if (!input.displayName.trim())
|
|
112
|
+
throw new Error("A Merchant data source neve kötelező.");
|
|
113
|
+
if (!/^[A-Za-z]{2}$/.test(input.countryCode))
|
|
114
|
+
throw new Error("Érvénytelen data source célország.");
|
|
115
|
+
if (!/^[a-z]{2}$/i.test(input.contentLanguage))
|
|
116
|
+
throw new Error("Érvénytelen data source tartalomnyelv.");
|
|
117
|
+
if (!Number.isInteger(input.fetchHour) || input.fetchHour < 0 || input.fetchHour > 23) {
|
|
118
|
+
throw new Error("A Merchant data source lekérési órája 0 és 23 közötti egész szám legyen.");
|
|
119
|
+
}
|
|
120
|
+
if (!input.timeZone.trim())
|
|
121
|
+
throw new Error("A Merchant data source időzónája kötelező.");
|
|
122
|
+
}
|
|
123
|
+
function isNotFound(error) {
|
|
124
|
+
return Boolean(error && typeof error === "object" && error.status === 404);
|
|
125
|
+
}
|
|
126
|
+
function required(env, key) {
|
|
127
|
+
const value = String(env[key] || "").trim();
|
|
128
|
+
if (!value)
|
|
129
|
+
throw new Error(`Hiányzó Google Merchant API beállítás: ${key}`);
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLW1lcmNoYW50L2RhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBOEJBLG9FQWdEQztBQTlFRCxpREFBd0Y7QUFFeEYsTUFBTSxpQkFBaUIsR0FBRyxtREFBbUQsQ0FBQTtBQTRCdEUsS0FBSyxVQUFVLDRCQUE0QixDQUFDLEtBQXdDO0lBQ3pGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5RixhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFBLDJDQUE0QixFQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqRSxNQUFNLE1BQU0sR0FBRyxZQUFZLFNBQVMsRUFBRSxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVuQyxJQUFJLFVBQVUsR0FBRyxNQUFNLHlCQUF5QixDQUFDO1FBQy9DLFdBQVc7UUFDWCxNQUFNO1FBQ04sWUFBWSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsOEJBQThCO1FBQ3RELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztLQUMvQixDQUFDLENBQUE7SUFDRixJQUFJLE1BQTZCLENBQUE7SUFFakMsSUFBSSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckIsVUFBVSxHQUFHLE1BQU0sZUFBZSxDQUNoQyxHQUFHLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxJQUFJLGVBQWUsa0JBQWtCLENBQUMsZ0RBQWdELENBQUMsRUFBRSxFQUM1SCxXQUFXLEVBQ1gsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFP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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type GoogleMerchantApiEnv } from "./merchant-api";
|
|
2
|
+
export type MerchantAccountIssue = {
|
|
3
|
+
name: string;
|
|
4
|
+
title: string;
|
|
5
|
+
detail?: string;
|
|
6
|
+
severity?: string;
|
|
7
|
+
documentationUri?: string;
|
|
8
|
+
impactedDestinations: Array<Record<string, unknown>>;
|
|
9
|
+
};
|
|
10
|
+
export type MerchantProductIssue = {
|
|
11
|
+
productName: string;
|
|
12
|
+
offerId?: string;
|
|
13
|
+
title: string;
|
|
14
|
+
detail?: string;
|
|
15
|
+
severity?: string;
|
|
16
|
+
code?: string;
|
|
17
|
+
attribute?: string;
|
|
18
|
+
documentationUri?: string;
|
|
19
|
+
destination?: string;
|
|
20
|
+
resolution?: string;
|
|
21
|
+
};
|
|
22
|
+
export type GoogleMerchantDiagnostics = {
|
|
23
|
+
accountIssues: MerchantAccountIssue[];
|
|
24
|
+
productIssues: MerchantProductIssue[];
|
|
25
|
+
productsScanned: number;
|
|
26
|
+
generatedAt: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function getGoogleMerchantDiagnostics(env: GoogleMerchantApiEnv): Promise<{
|
|
29
|
+
accountIssues: MerchantAccountIssue[];
|
|
30
|
+
productIssues: MerchantProductIssue[];
|
|
31
|
+
productsScanned: number;
|
|
32
|
+
generatedAt: string;
|
|
33
|
+
}>;
|