@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,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuntimeSimplePayProviderService = void 0;
4
+ const client_1 = require("./client");
5
+ const config_1 = require("./config");
6
+ const durable_service_1 = require("./durable-service");
7
+ /**
8
+ * Keeps the Medusa payment provider registered for the lifetime of the process,
9
+ * while resolving SimplePay credentials from the live integration runtime for
10
+ * every provider operation. This lets Admin -> Integrációk enable, rotate or
11
+ * disable SimplePay without rebuilding the Medusa module graph.
12
+ */
13
+ class RuntimeSimplePayProviderService extends durable_service_1.DurableSimplePayProviderService {
14
+ static validateOptions(_options) {
15
+ // Runtime settings are validated by integration-settings. The provider must
16
+ // also be allowed to boot before SimplePay is configured.
17
+ }
18
+ constructor(cradle, options) {
19
+ const bootstrapOptions = {
20
+ sandbox: true,
21
+ timeoutMs: 15_000,
22
+ paymentTimeoutMs: 30 * 60_000,
23
+ returnBaseUrl: options?.returnBaseUrl ||
24
+ `${(process.env.MEDUSA_BACKEND_URL || "http://localhost:9000").replace(/\/$/, "")}/store/simplepay/back`,
25
+ };
26
+ super(cradle, bootstrapOptions);
27
+ Object.defineProperty(this, "options", {
28
+ configurable: true,
29
+ get: () => runtimeOptions(options),
30
+ });
31
+ Object.defineProperty(this, "client", {
32
+ configurable: true,
33
+ get: () => new client_1.SimplePayClient(runtimeOptions(options)),
34
+ });
35
+ }
36
+ }
37
+ exports.RuntimeSimplePayProviderService = RuntimeSimplePayProviderService;
38
+ RuntimeSimplePayProviderService.identifier = "simplepay";
39
+ function runtimeOptions(fallback) {
40
+ if (process.env.SIMPLEPAY_ENABLED === "false") {
41
+ return (0, config_1.simplePayOptionsFromEnv)(process.env);
42
+ }
43
+ const runtime = (0, config_1.simplePayOptionsFromEnv)(process.env);
44
+ const hasRuntimeConfig = [
45
+ "SIMPLEPAY_HUF_MERCHANT",
46
+ "SIMPLEPAY_HUF_SECRET_KEY",
47
+ "SIMPLEPAY_EUR_MERCHANT",
48
+ "SIMPLEPAY_EUR_SECRET_KEY",
49
+ "SIMPLEPAY_USD_MERCHANT",
50
+ "SIMPLEPAY_USD_SECRET_KEY",
51
+ "SIMPLEPAY_RETURN_BASE_URL",
52
+ ].some((name) => Object.prototype.hasOwnProperty.call(process.env, name));
53
+ return hasRuntimeConfig ? runtime : fallback;
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9zaW1wbGVwYXkvcnVudGltZS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUEwQztBQUMxQyxxQ0FBa0Q7QUFDbEQsdURBQW1FO0FBR25FOzs7OztHQUtHO0FBQ0gsTUFBYSwrQkFBZ0MsU0FBUSxpREFBK0I7SUFHbEYsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFpQztRQUN0RCw0RUFBNEU7UUFDNUUsMERBQTBEO0lBQzVELENBQUM7SUFFRCxZQUFZLE1BQStCLEVBQUUsT0FBaUM7UUFDNUUsTUFBTSxnQkFBZ0IsR0FBNkI7WUFDakQsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsTUFBTTtZQUNqQixnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsTUFBTTtZQUM3QixhQUFhLEVBQ1gsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsdUJBQXVCO1NBQzNHLENBQUE7UUFDRCxLQUFLLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUE7UUFFL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLFlBQVksRUFBRSxJQUFJO1lBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO1NBQ25DLENBQUMsQ0FBQTtRQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNwQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSx3QkFBZSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN4RCxDQUFDLENBQUE7SUFDSixDQUFDOztBQTNCSCwwRUE0QkM7QUEzQlEsMENBQVUsR0FBRyxXQUFXLENBQUE7QUE2QmpDLFNBQVMsY0FBYyxDQUFDLFFBQWtDO0lBQ3hELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUM5QyxPQUFPLElBQUEsZ0NBQXVCLEVBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFBLGdDQUF1QixFQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwRCxNQUFNLGdCQUFnQixHQUFHO1FBQ3ZCLHdCQUF3QjtRQUN4QiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLDBCQUEwQjtRQUMxQix3QkFBd0I7UUFDeEIsMEJBQTBCO1FBQzFCLDJCQUEyQjtLQUM1QixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUV6RSxPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQTtBQUM5QyxDQUFDIn0=
@@ -3,6 +3,7 @@ import { AbstractPaymentProvider } from "@medusajs/framework/utils";
3
3
  import { type SimplePayClientOptions } from "./client";
4
4
  export type SimplePayProviderOptions = SimplePayClientOptions & {
5
5
  returnBaseUrl: string;
6
+ paymentTimeoutMs?: number;
6
7
  };
7
8
  export declare class SimplePayProviderService extends AbstractPaymentProvider<SimplePayProviderOptions> {
8
9
  static identifier: string;
@@ -10,6 +11,7 @@ export declare class SimplePayProviderService extends AbstractPaymentProvider<Si
10
11
  private readonly options;
11
12
  static validateOptions(options: Record<string, unknown>): void;
12
13
  constructor(cradle: Record<string, unknown>, options: SimplePayProviderOptions);
14
+ private paymentDeadline;
13
15
  private queryFromData;
14
16
  initiatePayment(input: InitiatePaymentInput): Promise<InitiatePaymentOutput>;
15
17
  authorizePayment(input: AuthorizePaymentInput): Promise<AuthorizePaymentOutput>;
@@ -68,6 +68,29 @@ function mergeTransaction(data, transaction) {
68
68
  resultCode: transaction.resultCode,
69
69
  };
70
70
  }
71
+ function assertTransactionMatchesSession(data, transaction) {
72
+ const mismatches = [];
73
+ if (data.orderRef && transaction.orderRef !== data.orderRef)
74
+ mismatches.push("orderRef");
75
+ if (typeof data.transactionId === "number" &&
76
+ transaction.transactionId !== data.transactionId) {
77
+ mismatches.push("transactionId");
78
+ }
79
+ const expectedCurrency = data.currency
80
+ ? normalizeCurrency(String(data.currency))
81
+ : transaction.currency;
82
+ if (transaction.currency !== expectedCurrency)
83
+ mismatches.push("currency");
84
+ if (data.total !== undefined && data.total !== null) {
85
+ const expectedTotal = (0, client_1.normalizeSimplePayAmount)(data.total, expectedCurrency);
86
+ const actualTotal = (0, client_1.normalizeSimplePayAmount)(transaction.total, transaction.currency);
87
+ if (expectedTotal !== actualTotal)
88
+ mismatches.push("total");
89
+ }
90
+ if (mismatches.length) {
91
+ throw new Error(`SimplePay query does not match payment session (${mismatches.join(", ")})`);
92
+ }
93
+ }
71
94
  class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
72
95
  static validateOptions(options) {
73
96
  if (!options.returnBaseUrl)
@@ -78,12 +101,21 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
78
101
  });
79
102
  if (!hasAnyAccount)
80
103
  throw new Error("At least one SimplePay merchant account is required");
104
+ if (options.paymentTimeoutMs !== undefined) {
105
+ const timeout = Number(options.paymentTimeoutMs);
106
+ if (!Number.isFinite(timeout) || timeout < 60_000 || timeout > 24 * 60 * 60 * 1000) {
107
+ throw new Error("SimplePay paymentTimeoutMs must be between 1 minute and 24 hours");
108
+ }
109
+ }
81
110
  }
82
111
  constructor(cradle, options) {
83
112
  super(cradle, options);
84
113
  this.options = options;
85
114
  this.client = new client_1.SimplePayClient(options);
86
115
  }
116
+ paymentDeadline() {
117
+ return new Date(Date.now() + (this.options.paymentTimeoutMs ?? 30 * 60_000)).toISOString();
118
+ }
87
119
  async queryFromData(data) {
88
120
  const currency = normalizeCurrency(String(data.currency ?? "HUF"));
89
121
  const response = await this.client.query({
@@ -96,6 +128,7 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
96
128
  const transaction = response.transactions?.[0];
97
129
  if (!transaction)
98
130
  throw new Error("SimplePay transaction was not found");
131
+ assertTransactionMatchesSession(data, transaction);
99
132
  return transaction;
100
133
  }
101
134
  async initiatePayment(input) {
@@ -148,7 +181,7 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
148
181
  total: amount,
149
182
  customerEmail: email,
150
183
  language: data.language === "EN" ? "EN" : "HU",
151
- timeout: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
184
+ timeout: this.paymentDeadline(),
152
185
  url: returnUrl,
153
186
  customer: customerName,
154
187
  invoice: data.invoice,
@@ -274,7 +307,7 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
274
307
  total: Number(input.amount?.toString?.() ?? input.amount),
275
308
  customerEmail: email,
276
309
  language: data.language === "EN" ? "EN" : "HU",
277
- timeout: new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString(),
310
+ timeout: this.paymentDeadline(),
278
311
  url: `${this.options.returnBaseUrl.replace(/\/$/, "")}/${encodeURIComponent(cartId)}`,
279
312
  customer: typeof data.customer_name === "string" ? data.customer_name : undefined,
280
313
  invoice: data.invoice,
@@ -358,9 +391,11 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
358
391
  async getWebhookActionAndData(payload) {
359
392
  const raw = Buffer.isBuffer(payload.rawData)
360
393
  ? payload.rawData.toString("utf8")
361
- : typeof payload.rawData === "string"
394
+ : typeof payload.rawData === "string" && payload.rawData.length
362
395
  ? payload.rawData
363
- : JSON.stringify(payload.data ?? {});
396
+ : null;
397
+ if (!raw)
398
+ throw new Error("SimplePay webhook raw body is required");
364
399
  const headers = payload.headers;
365
400
  const signature = headers?.signature;
366
401
  const event = this.client.verifyIpn(raw, Array.isArray(signature) ? signature[0] : signature);
@@ -419,4 +454,4 @@ class SimplePayProviderService extends utils_1.AbstractPaymentProvider {
419
454
  exports.SimplePayProviderService = SimplePayProviderService;
420
455
  SimplePayProviderService.identifier = "simplepay";
421
456
  exports.default = SimplePayProviderService;
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc2ltcGxlcGF5L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBLHFEQUlrQztBQUNsQyxxQ0FNaUI7QUFDakIscUVBQWlIO0FBd0JqSCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BDLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBa0M7SUFDdkQsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssVUFBVTtZQUNiLE9BQU8sNEJBQW9CLENBQUMsUUFBUSxDQUFBO1FBQ3RDLEtBQUssWUFBWTtZQUNmLE9BQU8sNEJBQW9CLENBQUMsVUFBVSxDQUFBO1FBQ3hDLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxVQUFVO1lBQ2IsT0FBTyw0QkFBb0IsQ0FBQyxRQUFRLENBQUE7UUFDdEMsS0FBSyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLGVBQWUsQ0FBQztRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLDRCQUFvQixDQUFDLEtBQUssQ0FBQTtRQUNuQyxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssa0JBQWtCLENBQUM7UUFDeEIsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxTQUFTLENBQUM7UUFDZjtZQUNFLE9BQU8sNEJBQW9CLENBQUMscUJBQXFCLENBQUE7SUFDckQsQ0FBQztBQUNILENBQUM7QUFF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
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvc2ltcGxlcGF5L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBc0JBLHFEQUlrQztBQUNsQyxxQ0FPaUI7QUFDakIscUVBQWlIO0FBeUJqSCxTQUFTLGlCQUFpQixDQUFDLEtBQWE7SUFDdEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BDLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxLQUFLLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBa0M7SUFDdkQsUUFBUSxNQUFNLEVBQUUsQ0FBQztRQUNmLEtBQUssVUFBVTtZQUNiLE9BQU8sNEJBQW9CLENBQUMsUUFBUSxDQUFBO1FBQ3RDLEtBQUssWUFBWTtZQUNmLE9BQU8sNEJBQW9CLENBQUMsVUFBVSxDQUFBO1FBQ3hDLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssU0FBUyxDQUFDO1FBQ2YsS0FBSyxVQUFVO1lBQ2IsT0FBTyw0QkFBb0IsQ0FBQyxRQUFRLENBQUE7UUFDdEMsS0FBSyxrQkFBa0IsQ0FBQztRQUN4QixLQUFLLGVBQWUsQ0FBQztRQUNyQixLQUFLLE9BQU87WUFDVixPQUFPLDRCQUFvQixDQUFDLEtBQUssQ0FBQTtRQUNuQyxLQUFLLE1BQU0sQ0FBQztRQUNaLEtBQUssa0JBQWtCLENBQUM7UUFDeEIsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxTQUFTLENBQUM7UUFDZjtZQUNFLE9BQU8sNEJBQW9CLENBQUMscUJBQXFCLENBQUE7SUFDckQsQ0FBQztBQUNILENBQUM7QUFF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
@@ -0,0 +1,7 @@
1
+ import type { ExecArgs } from "@medusajs/framework/types";
2
+ /**
3
+ * Read-only diagnostic: verifies that Medusa actually registered the Core
4
+ * services and that their database tables are available after migrations.
5
+ * Does not create orders, invoices, shipments, or integration operations.
6
+ */
7
+ export default function verifyRuntimeModules({ container }: ExecArgs): Promise<void>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = verifyRuntimeModules;
4
+ const integration_operation_1 = require("../modules/integration-operation");
5
+ const back_in_stock_1 = require("../modules/back-in-stock");
6
+ /**
7
+ * Read-only diagnostic: verifies that Medusa actually registered the Core
8
+ * services and that their database tables are available after migrations.
9
+ * Does not create orders, invoices, shipments, or integration operations.
10
+ */
11
+ async function verifyRuntimeModules({ container }) {
12
+ const checks = [
13
+ {
14
+ name: "integrationOperation",
15
+ key: integration_operation_1.INTEGRATION_OPERATION_MODULE,
16
+ run: async () => {
17
+ const service = container.resolve(integration_operation_1.INTEGRATION_OPERATION_MODULE);
18
+ await service.listIntegrationOperations({}, { take: 1 });
19
+ },
20
+ },
21
+ {
22
+ name: "backInStock",
23
+ key: back_in_stock_1.BACK_IN_STOCK_MODULE,
24
+ run: async () => {
25
+ const service = container.resolve(back_in_stock_1.BACK_IN_STOCK_MODULE);
26
+ await service.listBackInStockSubscriptions({}, { take: 1 });
27
+ },
28
+ },
29
+ ];
30
+ let failed = false;
31
+ for (const check of checks) {
32
+ try {
33
+ await check.run();
34
+ console.log(`✅ ${check.name}: service registered, database query OK`);
35
+ }
36
+ catch (error) {
37
+ failed = true;
38
+ const reason = error instanceof Error ? error.message : String(error);
39
+ console.error(`❌ ${check.name} (${check.key}): ${reason}`);
40
+ }
41
+ }
42
+ if (failed) {
43
+ throw new Error("Core runtime module/table verification failed. Run the backend db:migrate command, restart Medusa, then repeat this check. If service resolution still fails, inspect module registration.");
44
+ }
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXJ1bnRpbWUtbW9kdWxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zY3JpcHRzL3ZlcmlmeS1ydW50aW1lLW1vZHVsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSx1Q0FxQ0M7QUFuREQsNEVBR3lDO0FBQ3pDLDREQUdpQztBQUVqQzs7OztHQUlHO0FBQ1ksS0FBSyxVQUFVLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFZO0lBQ3hFLE1BQU0sTUFBTSxHQUFHO1FBQ2I7WUFDRSxJQUFJLEVBQUUsc0JBQXNCO1lBQzVCLEdBQUcsRUFBRSxvREFBNEI7WUFDakMsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNkLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0RBQTRCLENBQWdDLENBQUE7Z0JBQzlGLE1BQU0sT0FBTyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzFELENBQUM7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLGFBQWE7WUFDbkIsR0FBRyxFQUFFLG9DQUFvQjtZQUN6QixHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2QsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0IsQ0FBdUIsQ0FBQTtnQkFDN0UsTUFBTSxPQUFPLENBQUMsNEJBQTRCLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDN0QsQ0FBQztTQUNGO0tBQ0YsQ0FBQTtJQUVELElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQTtJQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSx5Q0FBeUMsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUNiLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyRSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxNQUFNLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYiw0TEFBNEwsQ0FDN0wsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDIn0=
@@ -0,0 +1,7 @@
1
+ import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework";
2
+ type OrderCanceledData = {
3
+ id: string;
4
+ };
5
+ export default function googleAdsOrderCanceled({ event, container, }: SubscriberArgs<OrderCanceledData>): Promise<void>;
6
+ export declare const config: SubscriberConfig;
7
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = googleAdsOrderCanceled;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const core_audit_1 = require("../modules/core-audit");
7
+ const adjustments_1 = require("../lib/modules/google-ads/adjustments");
8
+ const integration_settings_1 = require("../modules/integration-settings");
9
+ async function googleAdsOrderCanceled({ event, container, }) {
10
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
11
+ try {
12
+ const store = container.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
13
+ const { enabled, env } = await (0, integration_settings_1.resolvedIntegrationEnvironment)(store, "google-ads");
14
+ if (!enabled || !(0, adjustments_1.googleAdsAdjustmentsEnabled)(env))
15
+ return;
16
+ const config = (0, adjustments_1.googleAdsAdjustmentConfig)(env);
17
+ await (0, adjustments_1.uploadGoogleAdsConversionAdjustment)(config, {
18
+ orderId: event.data.id,
19
+ type: "RETRACTION",
20
+ });
21
+ await (0, core_audit_1.writeCoreAudit)(container, {
22
+ action: "google_ads.conversion_retraction",
23
+ resourceType: "order",
24
+ resourceId: event.data.id,
25
+ integration: "google-ads",
26
+ actorId: "google-ads-order-canceled",
27
+ summary: "A lemondott rendelés Google Ads purchase konverziója visszavonva.",
28
+ details: { adjustmentType: "RETRACTION" },
29
+ });
30
+ logger.info(`Google Ads conversion retracted for canceled order ${event.data.id}.`);
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : String(error);
34
+ logger.error(`Google Ads order.canceled adjustment failed for ${event.data.id}: ${message}`);
35
+ await (0, core_audit_1.writeCoreAudit)(container, {
36
+ action: "google_ads.conversion_retraction",
37
+ resourceType: "order",
38
+ resourceId: event.data.id,
39
+ integration: "google-ads",
40
+ actorId: "google-ads-order-canceled",
41
+ status: "error",
42
+ summary: `A Google Ads konverzió-visszavonás nem sikerült: ${message}`,
43
+ });
44
+ }
45
+ }
46
+ exports.config = {
47
+ event: "order.canceled",
48
+ context: { subscriberId: "google-ads-order-canceled" },
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWFkcy1vcmRlci1jYW5jZWxlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9nb29nbGUtYWRzLW9yZGVyLWNhbmNlbGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFCQSx5Q0EwQ0M7QUE5REQscURBQXFFO0FBQ3JFLHNEQUFzRDtBQUN0RCx1RUFJOEM7QUFDOUMsMEVBSXdDO0FBU3pCLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxFQUNuRCxLQUFLLEVBQ0wsU0FBUyxHQUN5QjtJQUNsQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBc0IsQ0FBQTtJQUV2RixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUM3QixrREFBMkIsQ0FDVyxDQUFBO1FBQ3hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFBLHFEQUE4QixFQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUNsRixJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBQSx5Q0FBMkIsRUFBQyxHQUFHLENBQUM7WUFBRSxPQUFNO1FBRXpELE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQXlCLEVBQUMsR0FBRyxDQUFDLENBQUE7UUFDN0MsTUFBTSxJQUFBLGlEQUFtQyxFQUFDLE1BQU0sRUFBRTtZQUNoRCxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksRUFBRSxZQUFZO1NBQ25CLENBQUMsQ0FBQTtRQUVGLE1BQU0sSUFBQSwyQkFBYyxFQUFDLFNBQVMsRUFBRTtZQUM5QixNQUFNLEVBQUUsa0NBQWtDO1lBQzFDLFlBQVksRUFBRSxPQUFPO1lBQ3JCLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekIsV0FBVyxFQUFFLFlBQVk7WUFDekIsT0FBTyxFQUFFLDJCQUEyQjtZQUNwQyxPQUFPLEVBQUUsbUVBQW1FO1lBQzVFLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUU7U0FDMUMsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxzREFBc0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3RFLE1BQU0sQ0FBQyxLQUFLLENBQUMsbURBQW1ELEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUE7UUFDNUYsTUFBTSxJQUFBLDJCQUFjLEVBQUMsU0FBUyxFQUFFO1lBQzlCLE1BQU0sRUFBRSxrQ0FBa0M7WUFDMUMsWUFBWSxFQUFFLE9BQU87WUFDckIsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixXQUFXLEVBQUUsWUFBWTtZQUN6QixPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsT0FBTyxFQUFFLG9EQUFvRCxPQUFPLEVBQUU7U0FDdkUsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLGdCQUFnQjtJQUN2QixPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUU7Q0FDdkQsQ0FBQSJ9
@@ -0,0 +1,7 @@
1
+ import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework";
2
+ type PaymentRefundedData = {
3
+ id: string;
4
+ };
5
+ export default function googleAdsPaymentRefunded({ event, container, }: SubscriberArgs<PaymentRefundedData>): Promise<void>;
6
+ export declare const config: SubscriberConfig;
7
+ export {};
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = googleAdsPaymentRefunded;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const core_audit_1 = require("../modules/core-audit");
7
+ const adjustments_1 = require("../lib/modules/google-ads/adjustments");
8
+ const integration_settings_1 = require("../modules/integration-settings");
9
+ async function googleAdsPaymentRefunded({ event, container, }) {
10
+ const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
11
+ try {
12
+ const store = container.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
13
+ const { enabled, env } = await (0, integration_settings_1.resolvedIntegrationEnvironment)(store, "google-ads");
14
+ if (!enabled || !(0, adjustments_1.googleAdsAdjustmentsEnabled)(env))
15
+ return;
16
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
17
+ const order = await resolveOrderForPayment(query, event.data.id);
18
+ if (!order) {
19
+ logger.warn(`Google Ads refund adjustment skipped for payment ${event.data.id}: order not found.`);
20
+ return;
21
+ }
22
+ const orderId = stringValue(order.id);
23
+ if (!orderId)
24
+ throw new Error("A refundhoz tartozó rendelésnek nincs azonosítója.");
25
+ const originalValue = originalOrderValue(order);
26
+ if (!Number.isFinite(originalValue) || originalValue < 0) {
27
+ throw new Error(`A rendelés eredeti értéke nem határozható meg: ${orderId}`);
28
+ }
29
+ const refundedTotal = refundedOrderValue(order);
30
+ if (refundedTotal <= 0) {
31
+ logger.warn(`Google Ads refund adjustment skipped for order ${orderId}: no refund transaction found.`);
32
+ return;
33
+ }
34
+ const adjustedValue = Math.max(0, roundMoney(originalValue - refundedTotal));
35
+ const currencyCode = stringValue(order.currency_code).toUpperCase() || undefined;
36
+ const adjustmentType = adjustedValue <= 0 ? "RETRACTION" : "RESTATEMENT";
37
+ const config = (0, adjustments_1.googleAdsAdjustmentConfig)(env);
38
+ await (0, adjustments_1.uploadGoogleAdsConversionAdjustment)(config, {
39
+ orderId,
40
+ type: adjustmentType,
41
+ ...(adjustmentType === "RESTATEMENT"
42
+ ? { adjustedValue, currencyCode }
43
+ : {}),
44
+ });
45
+ await (0, core_audit_1.writeCoreAudit)(container, {
46
+ action: adjustmentType === "RETRACTION"
47
+ ? "google_ads.conversion_retraction"
48
+ : "google_ads.conversion_restatement",
49
+ resourceType: "order",
50
+ resourceId: orderId,
51
+ integration: "google-ads",
52
+ actorId: "google-ads-payment-refunded",
53
+ summary: adjustmentType === "RETRACTION"
54
+ ? "A teljesen visszatérített rendelés Google Ads purchase konverziója visszavonva."
55
+ : "A részlegesen visszatérített rendelés Google Ads purchase értéke korrigálva.",
56
+ details: {
57
+ paymentId: event.data.id,
58
+ adjustmentType,
59
+ originalValue,
60
+ refundedTotal,
61
+ adjustedValue,
62
+ currencyCode: currencyCode ?? null,
63
+ },
64
+ });
65
+ logger.info(`Google Ads ${adjustmentType} applied for refunded order ${orderId}: ${adjustedValue} ${currencyCode || ""}.`);
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : String(error);
69
+ logger.error(`Google Ads payment.refunded adjustment failed for ${event.data.id}: ${message}`);
70
+ await (0, core_audit_1.writeCoreAudit)(container, {
71
+ action: "google_ads.refund_adjustment",
72
+ resourceType: "payment",
73
+ resourceId: event.data.id,
74
+ integration: "google-ads",
75
+ actorId: "google-ads-payment-refunded",
76
+ status: "error",
77
+ summary: `A Google Ads refund konverzió-korrekció nem sikerült: ${message}`,
78
+ });
79
+ }
80
+ }
81
+ async function resolveOrderForPayment(query, paymentId) {
82
+ const { data: payments } = await query.graph({
83
+ entity: "payment",
84
+ fields: ["id", "payment_collection.id"],
85
+ filters: { id: paymentId },
86
+ });
87
+ const payment = payments[0];
88
+ const paymentCollection = record(payment?.payment_collection);
89
+ const paymentCollectionId = stringValue(paymentCollection?.id);
90
+ if (!paymentCollectionId)
91
+ return null;
92
+ const { data: collections } = await query.graph({
93
+ entity: "payment_collection",
94
+ fields: ["id", "order.id"],
95
+ filters: { id: paymentCollectionId },
96
+ });
97
+ const collection = collections[0];
98
+ const linkedOrder = record(collection?.order);
99
+ const orderId = stringValue(linkedOrder?.id);
100
+ if (!orderId)
101
+ return null;
102
+ const { data: orders } = await query.graph({
103
+ entity: "order",
104
+ fields: [
105
+ "id",
106
+ "currency_code",
107
+ "total",
108
+ "summary.original_order_total",
109
+ "transactions.amount",
110
+ "transactions.reference",
111
+ ],
112
+ filters: { id: orderId },
113
+ });
114
+ return orders[0] || null;
115
+ }
116
+ function originalOrderValue(order) {
117
+ const summary = record(order.summary);
118
+ return numberValue(summary?.original_order_total) ?? numberValue(order.total) ?? Number.NaN;
119
+ }
120
+ function refundedOrderValue(order) {
121
+ const transactions = Array.isArray(order.transactions)
122
+ ? order.transactions.filter(isRecord)
123
+ : [];
124
+ return roundMoney(transactions.reduce((sum, transaction) => {
125
+ if (stringValue(transaction.reference).toLowerCase() !== "refund")
126
+ return sum;
127
+ const amount = numberValue(transaction.amount);
128
+ return amount === undefined ? sum : sum + Math.abs(amount);
129
+ }, 0));
130
+ }
131
+ function numberValue(value) {
132
+ if (typeof value === "number" && Number.isFinite(value))
133
+ return value;
134
+ if (typeof value === "string" && value.trim()) {
135
+ const parsed = Number(value);
136
+ return Number.isFinite(parsed) ? parsed : undefined;
137
+ }
138
+ const object = record(value);
139
+ if (!object)
140
+ return undefined;
141
+ const numeric = object.numeric;
142
+ if (typeof numeric === "number" && Number.isFinite(numeric))
143
+ return numeric;
144
+ if (typeof numeric === "string" && numeric.trim()) {
145
+ const parsed = Number(numeric);
146
+ if (Number.isFinite(parsed))
147
+ return parsed;
148
+ }
149
+ const toNumber = object.toNumber;
150
+ if (typeof toNumber === "function") {
151
+ try {
152
+ const parsed = toNumber();
153
+ return typeof parsed === "number" && Number.isFinite(parsed) ? parsed : undefined;
154
+ }
155
+ catch {
156
+ return undefined;
157
+ }
158
+ }
159
+ return undefined;
160
+ }
161
+ function roundMoney(value) {
162
+ return Math.round((value + Number.EPSILON) * 1_000_000) / 1_000_000;
163
+ }
164
+ function stringValue(value) {
165
+ return typeof value === "string" || typeof value === "number"
166
+ ? String(value).trim()
167
+ : "";
168
+ }
169
+ function record(value) {
170
+ return value && typeof value === "object" && !Array.isArray(value)
171
+ ? value
172
+ : null;
173
+ }
174
+ function isRecord(value) {
175
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
176
+ }
177
+ exports.config = {
178
+ event: "payment.refunded",
179
+ context: { subscriberId: "google-ads-payment-refunded" },
180
+ };
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLWFkcy1wYXltZW50LXJlZnVuZGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2dvb2dsZS1hZHMtcGF5bWVudC1yZWZ1bmRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0QkEsMkNBc0ZDO0FBakhELHFEQUFxRTtBQUNyRSxzREFBc0Q7QUFDdEQsdUVBSThDO0FBQzlDLDBFQUl3QztBQWdCekIsS0FBSyxVQUFVLHdCQUF3QixDQUFDLEVBQ3JELEtBQUssRUFDTCxTQUFTLEdBQzJCO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFzQixDQUFBO0lBRXZGLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzdCLGtEQUEyQixDQUNXLENBQUE7UUFDeEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUEscURBQThCLEVBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ2xGLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFBLHlDQUEyQixFQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU07UUFFekQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQXFCLENBQUE7UUFDcEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLG9EQUFvRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQTtZQUNsRyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxLQUFL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QUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzlDLE9BQU8sTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ04sQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDckUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDckQsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQzdCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUE7SUFDOUIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQTtJQUMzRSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFBO0lBQzVDLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0lBQ2hDLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUksUUFBMEIsRUFBRSxDQUFBO1lBQzVDLE9BQU8sT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBQ25GLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFBO0FBQ3JFLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7UUFDdEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNSLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxLQUFnQztRQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ1YsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RSxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxrQkFBa0I7SUFDekIsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLDZCQUE2QixFQUFFO0NBQ3pELENBQUEifQ==