@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.
Files changed (233) hide show
  1. package/.medusa/server/src/admin/index.js +6832 -5418
  2. package/.medusa/server/src/admin/index.mjs +6834 -5420
  3. package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.d.ts +2 -0
  4. package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.js +26 -0
  5. package/.medusa/server/src/api/admin/billingo/advance/route.d.ts +8 -0
  6. package/.medusa/server/src/api/admin/billingo/advance/route.js +55 -0
  7. package/.medusa/server/src/api/admin/billingo/partial-credit/route.d.ts +8 -0
  8. package/.medusa/server/src/api/admin/billingo/partial-credit/route.js +69 -0
  9. package/.medusa/server/src/api/admin/documents/[id]/route.d.ts +22 -0
  10. package/.medusa/server/src/api/admin/documents/[id]/route.js +107 -0
  11. package/.medusa/server/src/api/admin/documents/route.d.ts +21 -0
  12. package/.medusa/server/src/api/admin/documents/route.js +117 -0
  13. package/.medusa/server/src/api/admin/google-ads/diagnostics/route.d.ts +2 -0
  14. package/.medusa/server/src/api/admin/google-ads/diagnostics/route.js +26 -0
  15. package/.medusa/server/src/api/admin/google-ads/oauth/start/route.d.ts +2 -0
  16. package/.medusa/server/src/api/admin/google-ads/oauth/start/route.js +27 -0
  17. package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.d.ts +2 -0
  18. package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.js +69 -0
  19. package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.d.ts +2 -0
  20. package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.js +26 -0
  21. package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.d.ts +2 -0
  22. package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.js +25 -0
  23. package/.medusa/server/src/api/admin/integrations/[key]/verify/route.d.ts +2 -0
  24. package/.medusa/server/src/api/admin/integrations/[key]/verify/route.js +79 -0
  25. package/.medusa/server/src/api/admin/orders/[id]/billingo/route.js +10 -1
  26. package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.d.ts +3 -5
  27. package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.js +7 -14
  28. package/.medusa/server/src/api/admin/orders/[id]/foxpost/label/route.js +12 -6
  29. package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.d.ts +2 -1
  30. package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.js +6 -14
  31. package/.medusa/server/src/api/admin/orders/[id]/gls/label/route.js +9 -4
  32. package/.medusa/server/src/api/admin/orders/[id]/shipping/label/route.js +4 -2
  33. package/.medusa/server/src/api/admin/orders/[id]/shipping/route.d.ts +1 -2
  34. package/.medusa/server/src/api/admin/orders/[id]/shipping/route.js +46 -8
  35. package/.medusa/server/src/api/admin/shipping/bulk/create/route.d.ts +3 -6
  36. package/.medusa/server/src/api/admin/shipping/bulk/create/route.js +6 -57
  37. package/.medusa/server/src/api/admin/shipping/bulk/labels/route.js +4 -2
  38. package/.medusa/server/src/api/admin/shipping/mpl/close/route.d.ts +1 -1
  39. package/.medusa/server/src/api/admin/shipping/mpl/close/route.js +48 -70
  40. package/.medusa/server/src/api/admin/shipping/orders/route.js +19 -4
  41. package/.medusa/server/src/api/auth/google-ads/callback/route.d.ts +2 -0
  42. package/.medusa/server/src/api/auth/google-ads/callback/route.js +58 -0
  43. package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.d.ts +2 -0
  44. package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.js +33 -0
  45. package/.medusa/server/src/api/feeds/google-merchant.xml/route.js +5 -3
  46. package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.d.ts +2 -0
  47. package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.js +211 -0
  48. package/.medusa/server/src/api/hooks/simplepay/ipn/route.js +113 -23
  49. package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.d.ts +2 -0
  50. package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.js +113 -0
  51. package/.medusa/server/src/api/store/arukereso/backlink/route.d.ts +2 -0
  52. package/.medusa/server/src/api/store/arukereso/backlink/route.js +73 -0
  53. package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.d.ts +2 -0
  54. package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.js +84 -0
  55. package/.medusa/server/src/api/store/arukereso/widget/route.d.ts +2 -0
  56. package/.medusa/server/src/api/store/arukereso/widget/route.js +64 -0
  57. package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +3 -2
  58. package/.medusa/server/src/api/store/cms/entries/route.js +3 -2
  59. package/.medusa/server/src/api/store/documents/route.d.ts +2 -0
  60. package/.medusa/server/src/api/store/documents/route.js +84 -0
  61. package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.d.ts +2 -0
  62. package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.js +50 -0
  63. package/.medusa/server/src/config.d.ts +3 -3
  64. package/.medusa/server/src/config.js +70 -87
  65. package/.medusa/server/src/core/documents.d.ts +31 -0
  66. package/.medusa/server/src/core/documents.js +47 -0
  67. package/.medusa/server/src/core/version.d.ts +2 -2
  68. package/.medusa/server/src/core/version.js +2 -2
  69. package/.medusa/server/src/jobs/mpl-status-sync.js +10 -6
  70. package/.medusa/server/src/jobs/shipping-status-sync-eligibility.d.ts +5 -0
  71. package/.medusa/server/src/jobs/shipping-status-sync-eligibility.js +26 -0
  72. package/.medusa/server/src/jobs/shipping-status-sync.d.ts +6 -0
  73. package/.medusa/server/src/jobs/shipping-status-sync.js +63 -28
  74. package/.medusa/server/src/lib/modules/arukereso/index.d.ts +1 -0
  75. package/.medusa/server/src/lib/modules/arukereso/index.js +2 -1
  76. package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.d.ts +19 -0
  77. package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.js +100 -0
  78. package/.medusa/server/src/lib/modules/billingo/actions.js +42 -12
  79. package/.medusa/server/src/lib/modules/billingo/advance.d.ts +68 -0
  80. package/.medusa/server/src/lib/modules/billingo/advance.js +309 -0
  81. package/.medusa/server/src/lib/modules/billingo/automation.js +49 -9
  82. package/.medusa/server/src/lib/modules/billingo/client.d.ts +5 -2
  83. package/.medusa/server/src/lib/modules/billingo/client.js +17 -8
  84. package/.medusa/server/src/lib/modules/billingo/index.d.ts +2 -0
  85. package/.medusa/server/src/lib/modules/billingo/index.js +3 -1
  86. package/.medusa/server/src/lib/modules/billingo/mapper.d.ts +42 -2
  87. package/.medusa/server/src/lib/modules/billingo/mapper.js +77 -4
  88. package/.medusa/server/src/lib/modules/billingo/partial-credit.d.ts +55 -0
  89. package/.medusa/server/src/lib/modules/billingo/partial-credit.js +338 -0
  90. package/.medusa/server/src/lib/modules/billingo/types.d.ts +21 -2
  91. package/.medusa/server/src/lib/modules/google-ads/adjustments.d.ts +21 -0
  92. package/.medusa/server/src/lib/modules/google-ads/adjustments.js +146 -0
  93. package/.medusa/server/src/lib/modules/google-ads/api.d.ts +23 -0
  94. package/.medusa/server/src/lib/modules/google-ads/api.js +171 -0
  95. package/.medusa/server/src/lib/modules/google-ads/diagnostics.d.ts +47 -0
  96. package/.medusa/server/src/lib/modules/google-ads/diagnostics.js +164 -0
  97. package/.medusa/server/src/lib/modules/google-merchant/category-fields.d.ts +7 -0
  98. package/.medusa/server/src/lib/modules/google-merchant/category-fields.js +210 -0
  99. package/.medusa/server/src/lib/modules/google-merchant/data-source.d.ts +17 -0
  100. package/.medusa/server/src/lib/modules/google-merchant/data-source.js +132 -0
  101. package/.medusa/server/src/lib/modules/google-merchant/diagnostics.d.ts +33 -0
  102. package/.medusa/server/src/lib/modules/google-merchant/diagnostics.js +113 -0
  103. package/.medusa/server/src/lib/modules/google-merchant/index.d.ts +5 -0
  104. package/.medusa/server/src/lib/modules/google-merchant/index.js +6 -1
  105. package/.medusa/server/src/lib/modules/google-merchant/merchant-api.d.ts +18 -0
  106. package/.medusa/server/src/lib/modules/google-merchant/merchant-api.js +120 -0
  107. package/.medusa/server/src/lib/modules/google-merchant/shipping.d.ts +13 -0
  108. package/.medusa/server/src/lib/modules/google-merchant/shipping.js +97 -0
  109. package/.medusa/server/src/lib/modules/google-tag-manager/api.d.ts +1 -0
  110. package/.medusa/server/src/lib/modules/google-tag-manager/api.js +3 -0
  111. package/.medusa/server/src/lib/modules/google-tag-manager/index.d.ts +1 -0
  112. package/.medusa/server/src/lib/modules/google-tag-manager/index.js +3 -0
  113. package/.medusa/server/src/lib/modules/google-tag-manager/sync.d.ts +1 -0
  114. package/.medusa/server/src/lib/modules/google-tag-manager/sync.js +3 -0
  115. package/.medusa/server/src/lib/modules/shipping/actions.d.ts +2 -2
  116. package/.medusa/server/src/lib/modules/shipping/actions.js +171 -352
  117. package/.medusa/server/src/lib/modules/shipping/durable-create.d.ts +2 -1
  118. package/.medusa/server/src/lib/modules/shipping/durable-create.js +33 -5
  119. package/.medusa/server/src/lib/modules/shipping/idempotency.js +4 -2
  120. package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
  121. package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
  122. package/.medusa/server/src/lib/modules/shipping/native-fulfillment.d.ts +73 -0
  123. package/.medusa/server/src/lib/modules/shipping/native-fulfillment.js +191 -0
  124. package/.medusa/server/src/lib/modules/shipping/operations.d.ts +28 -0
  125. package/.medusa/server/src/lib/modules/shipping/operations.js +9 -1
  126. package/.medusa/server/src/lib/modules/shipping/print-eligibility.d.ts +12 -0
  127. package/.medusa/server/src/lib/modules/shipping/print-eligibility.js +34 -0
  128. package/.medusa/server/src/lib/modules/shipping/recipient-email.d.ts +18 -0
  129. package/.medusa/server/src/lib/modules/shipping/recipient-email.js +29 -0
  130. package/.medusa/server/src/lib/modules/shipping/resolve.d.ts +9 -0
  131. package/.medusa/server/src/lib/modules/shipping/resolve.js +65 -0
  132. package/.medusa/server/src/lib/modules/shipping/types.d.ts +1 -1
  133. package/.medusa/server/src/modules/core-documents/index.d.ts +38 -0
  134. package/.medusa/server/src/modules/core-documents/index.js +18 -0
  135. package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.d.ts +5 -0
  136. package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.js +22 -0
  137. package/.medusa/server/src/modules/core-documents/models/core-document-assignment.d.ts +9 -0
  138. package/.medusa/server/src/modules/core-documents/models/core-document-assignment.js +18 -0
  139. package/.medusa/server/src/modules/core-documents/models/core-document.d.ts +18 -0
  140. package/.medusa/server/src/modules/core-documents/models/core-document.js +27 -0
  141. package/.medusa/server/src/modules/core-documents/service.d.ts +38 -0
  142. package/.medusa/server/src/modules/core-documents/service.js +13 -0
  143. package/.medusa/server/src/modules/integration-operation/migrations/Migration20261104010000.d.ts +5 -0
  144. package/.medusa/server/src/modules/integration-operation/migrations/Migration20261104010000.js +34 -0
  145. package/.medusa/server/src/modules/integration-operation/models/integration-operation.d.ts +1 -1
  146. package/.medusa/server/src/modules/integration-operation/models/integration-operation.js +2 -2
  147. package/.medusa/server/src/modules/integration-operation/service.d.ts +1 -1
  148. package/.medusa/server/src/modules/integration-operation/state.d.ts +1 -0
  149. package/.medusa/server/src/modules/integration-operation/state.js +11 -50
  150. package/.medusa/server/src/modules/integration-operation/types.d.ts +1 -1
  151. package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +19 -2
  152. package/.medusa/server/src/modules/integration-settings/connection-test.js +20 -4
  153. package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.d.ts +2 -0
  154. package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.js +49 -0
  155. package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.d.ts +1 -0
  156. package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.js +35 -0
  157. package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +23 -2
  158. package/.medusa/server/src/modules/integration-settings/hot-reload-registration.d.ts +1 -0
  159. package/.medusa/server/src/modules/integration-settings/hot-reload-registration.js +23 -0
  160. package/.medusa/server/src/modules/integration-settings/index.d.ts +4 -0
  161. package/.medusa/server/src/modules/integration-settings/index.js +5 -1
  162. package/.medusa/server/src/modules/integration-settings/manager.js +38 -4
  163. package/.medusa/server/src/modules/integration-settings/registry.js +1 -14
  164. package/.medusa/server/src/modules/integration-settings/reloadable.d.ts +10 -0
  165. package/.medusa/server/src/modules/integration-settings/reloadable.js +58 -0
  166. package/.medusa/server/src/modules/integration-settings/runtime-snapshot.d.ts +9 -0
  167. package/.medusa/server/src/modules/integration-settings/runtime-snapshot.js +48 -3
  168. package/.medusa/server/src/modules/integration-settings/simplepay-registration.d.ts +1 -0
  169. package/.medusa/server/src/modules/integration-settings/simplepay-registration.js +18 -0
  170. package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -5
  171. package/.medusa/server/src/providers/csomagpiac/client.d.ts +25 -0
  172. package/.medusa/server/src/providers/csomagpiac/client.js +144 -0
  173. package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.d.ts +50 -0
  174. package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.js +248 -0
  175. package/.medusa/server/src/providers/csomagpiac/index.d.ts +7 -0
  176. package/.medusa/server/src/providers/csomagpiac/index.js +30 -0
  177. package/.medusa/server/src/providers/csomagpiac/service.d.ts +60 -0
  178. package/.medusa/server/src/providers/csomagpiac/service.js +296 -0
  179. package/.medusa/server/src/providers/csomagpiac/types.d.ts +66 -0
  180. package/.medusa/server/src/providers/csomagpiac/types.js +27 -0
  181. package/.medusa/server/src/providers/dpd/fulfillment-provider.d.ts +5 -1
  182. package/.medusa/server/src/providers/dpd/fulfillment-provider.js +94 -27
  183. package/.medusa/server/src/providers/dpd/service.d.ts +2 -0
  184. package/.medusa/server/src/providers/dpd/service.js +32 -4
  185. package/.medusa/server/src/providers/dpd/types.d.ts +1 -0
  186. package/.medusa/server/src/providers/dpd/types.js +1 -1
  187. package/.medusa/server/src/providers/email/service.d.ts +7 -6
  188. package/.medusa/server/src/providers/email/service.js +51 -25
  189. package/.medusa/server/src/providers/foxpost/foxpost-service.d.ts +3 -1
  190. package/.medusa/server/src/providers/foxpost/foxpost-service.js +19 -17
  191. package/.medusa/server/src/providers/foxpost/fulfillment-provider.d.ts +10 -3
  192. package/.medusa/server/src/providers/foxpost/fulfillment-provider.js +99 -69
  193. package/.medusa/server/src/providers/foxpost/types.d.ts +1 -0
  194. package/.medusa/server/src/providers/gls/fulfillment-provider.d.ts +4 -0
  195. package/.medusa/server/src/providers/gls/fulfillment-provider.js +87 -17
  196. package/.medusa/server/src/providers/gls/gls-service.d.ts +19 -1
  197. package/.medusa/server/src/providers/gls/gls-service.js +32 -64
  198. package/.medusa/server/src/providers/gls/types.d.ts +16 -0
  199. package/.medusa/server/src/providers/mpl/fulfillment-provider.d.ts +4 -0
  200. package/.medusa/server/src/providers/mpl/fulfillment-provider.js +67 -176
  201. package/.medusa/server/src/providers/mpl/index.d.ts +2 -0
  202. package/.medusa/server/src/providers/mpl/index.js +7 -2
  203. package/.medusa/server/src/providers/mpl/service.d.ts +37 -1
  204. package/.medusa/server/src/providers/mpl/service.js +113 -366
  205. package/.medusa/server/src/providers/mpl/types.d.ts +19 -0
  206. package/.medusa/server/src/providers/mpl/types.js +1 -1
  207. package/.medusa/server/src/providers/packeta/client.d.ts +2 -1
  208. package/.medusa/server/src/providers/packeta/client.js +24 -2
  209. package/.medusa/server/src/providers/packeta/fulfillment-provider.d.ts +4 -0
  210. package/.medusa/server/src/providers/packeta/fulfillment-provider.js +84 -9
  211. package/.medusa/server/src/providers/packeta/point-validation.d.ts +2 -0
  212. package/.medusa/server/src/providers/packeta/point-validation.js +99 -0
  213. package/.medusa/server/src/providers/packeta/service.d.ts +1 -0
  214. package/.medusa/server/src/providers/packeta/service.js +91 -23
  215. package/.medusa/server/src/providers/packeta/types.d.ts +27 -0
  216. package/.medusa/server/src/providers/packeta/types.js +1 -1
  217. package/.medusa/server/src/providers/resilient-stripe/index.d.ts +19 -1
  218. package/.medusa/server/src/providers/resilient-stripe/index.js +59 -12
  219. package/.medusa/server/src/providers/simplepay/config.js +11 -1
  220. package/.medusa/server/src/providers/simplepay/index.d.ts +2 -0
  221. package/.medusa/server/src/providers/simplepay/index.js +5 -3
  222. package/.medusa/server/src/providers/simplepay/runtime-service.d.ts +13 -0
  223. package/.medusa/server/src/providers/simplepay/runtime-service.js +55 -0
  224. package/.medusa/server/src/providers/simplepay/service.d.ts +2 -0
  225. package/.medusa/server/src/providers/simplepay/service.js +40 -5
  226. package/.medusa/server/src/scripts/verify-runtime-modules.d.ts +7 -0
  227. package/.medusa/server/src/scripts/verify-runtime-modules.js +46 -0
  228. package/.medusa/server/src/subscribers/google-ads-order-canceled.d.ts +7 -0
  229. package/.medusa/server/src/subscribers/google-ads-order-canceled.js +50 -0
  230. package/.medusa/server/src/subscribers/google-ads-payment-refunded.d.ts +7 -0
  231. package/.medusa/server/src/subscribers/google-ads-payment-refunded.js +181 -0
  232. package/.medusa/server/src/subscribers/simplepay-paid-order-recovery.js +14 -1
  233. 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,7 @@
1
+ type MerchantItemLike = {
2
+ id: string;
3
+ };
4
+ export declare function applyGoogleMerchantCategoryFields(container: {
5
+ resolve(name: string): unknown;
6
+ }, xml: string, items: MerchantItemLike[]): Promise<string>;
7
+ export {};
@@ -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, "&amp;")
205
+ .replace(/</g, "&lt;")
206
+ .replace(/>/g, "&gt;")
207
+ .replace(/"/g, "&quot;")
208
+ .replace(/'/g, "&apos;");
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
+ }>;