@hszrdm/core 1.7.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +6832 -5418
- package/.medusa/server/src/admin/index.mjs +6834 -5420
- package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/arukereso/marketplace-preview/route.js +26 -0
- package/.medusa/server/src/api/admin/billingo/advance/route.d.ts +8 -0
- package/.medusa/server/src/api/admin/billingo/advance/route.js +55 -0
- package/.medusa/server/src/api/admin/billingo/partial-credit/route.d.ts +8 -0
- package/.medusa/server/src/api/admin/billingo/partial-credit/route.js +69 -0
- package/.medusa/server/src/api/admin/documents/[id]/route.d.ts +22 -0
- package/.medusa/server/src/api/admin/documents/[id]/route.js +107 -0
- package/.medusa/server/src/api/admin/documents/route.d.ts +21 -0
- package/.medusa/server/src/api/admin/documents/route.js +117 -0
- package/.medusa/server/src/api/admin/google-ads/diagnostics/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-ads/diagnostics/route.js +26 -0
- package/.medusa/server/src/api/admin/google-ads/oauth/start/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-ads/oauth/start/route.js +27 -0
- package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/data-source/sync/route.js +69 -0
- package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/diagnostics/route.js +26 -0
- package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/google-merchant/oauth/start/route.js +25 -0
- package/.medusa/server/src/api/admin/integrations/[key]/verify/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/integrations/[key]/verify/route.js +79 -0
- package/.medusa/server/src/api/admin/orders/[id]/billingo/route.js +10 -1
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.d.ts +3 -5
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/create/route.js +7 -14
- package/.medusa/server/src/api/admin/orders/[id]/foxpost/label/route.js +12 -6
- package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.d.ts +2 -1
- package/.medusa/server/src/api/admin/orders/[id]/gls/create/route.js +6 -14
- package/.medusa/server/src/api/admin/orders/[id]/gls/label/route.js +9 -4
- package/.medusa/server/src/api/admin/orders/[id]/shipping/label/route.js +4 -2
- package/.medusa/server/src/api/admin/orders/[id]/shipping/route.d.ts +1 -2
- package/.medusa/server/src/api/admin/orders/[id]/shipping/route.js +46 -8
- package/.medusa/server/src/api/admin/shipping/bulk/create/route.d.ts +3 -6
- package/.medusa/server/src/api/admin/shipping/bulk/create/route.js +6 -57
- package/.medusa/server/src/api/admin/shipping/bulk/labels/route.js +4 -2
- package/.medusa/server/src/api/admin/shipping/mpl/close/route.d.ts +1 -1
- package/.medusa/server/src/api/admin/shipping/mpl/close/route.js +48 -70
- package/.medusa/server/src/api/admin/shipping/orders/route.js +19 -4
- package/.medusa/server/src/api/auth/google-ads/callback/route.d.ts +2 -0
- package/.medusa/server/src/api/auth/google-ads/callback/route.js +58 -0
- package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.d.ts +2 -0
- package/.medusa/server/src/api/feeds/arukereso-marketplace.xml/route.js +33 -0
- package/.medusa/server/src/api/feeds/google-merchant.xml/route.js +5 -3
- package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/arukereso/marketplace/order/route.js +211 -0
- package/.medusa/server/src/api/hooks/simplepay/ipn/route.js +113 -23
- package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.d.ts +2 -0
- package/.medusa/server/src/api/store/account/orders/[id]/reorder/route.js +113 -0
- package/.medusa/server/src/api/store/arukereso/backlink/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/backlink/route.js +73 -0
- package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/trusted-shop/[id]/route.js +84 -0
- package/.medusa/server/src/api/store/arukereso/widget/route.d.ts +2 -0
- package/.medusa/server/src/api/store/arukereso/widget/route.js +64 -0
- package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +3 -2
- package/.medusa/server/src/api/store/cms/entries/route.js +3 -2
- package/.medusa/server/src/api/store/documents/route.d.ts +2 -0
- package/.medusa/server/src/api/store/documents/route.js +84 -0
- package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.d.ts +2 -0
- package/.medusa/server/src/api/store/google-merchant/oauth/callback/route.js +50 -0
- package/.medusa/server/src/config.d.ts +3 -3
- package/.medusa/server/src/config.js +70 -87
- package/.medusa/server/src/core/documents.d.ts +31 -0
- package/.medusa/server/src/core/documents.js +47 -0
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/mpl-status-sync.js +10 -6
- package/.medusa/server/src/jobs/shipping-status-sync-eligibility.d.ts +5 -0
- package/.medusa/server/src/jobs/shipping-status-sync-eligibility.js +26 -0
- package/.medusa/server/src/jobs/shipping-status-sync.d.ts +6 -0
- package/.medusa/server/src/jobs/shipping-status-sync.js +63 -28
- package/.medusa/server/src/lib/modules/arukereso/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/arukereso/index.js +2 -1
- package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.d.ts +19 -0
- package/.medusa/server/src/lib/modules/arukereso/marketplace-feed.js +100 -0
- package/.medusa/server/src/lib/modules/billingo/actions.js +42 -12
- package/.medusa/server/src/lib/modules/billingo/advance.d.ts +68 -0
- package/.medusa/server/src/lib/modules/billingo/advance.js +309 -0
- package/.medusa/server/src/lib/modules/billingo/automation.js +49 -9
- package/.medusa/server/src/lib/modules/billingo/client.d.ts +5 -2
- package/.medusa/server/src/lib/modules/billingo/client.js +17 -8
- package/.medusa/server/src/lib/modules/billingo/index.d.ts +2 -0
- package/.medusa/server/src/lib/modules/billingo/index.js +3 -1
- package/.medusa/server/src/lib/modules/billingo/mapper.d.ts +42 -2
- package/.medusa/server/src/lib/modules/billingo/mapper.js +77 -4
- package/.medusa/server/src/lib/modules/billingo/partial-credit.d.ts +55 -0
- package/.medusa/server/src/lib/modules/billingo/partial-credit.js +338 -0
- package/.medusa/server/src/lib/modules/billingo/types.d.ts +21 -2
- package/.medusa/server/src/lib/modules/google-ads/adjustments.d.ts +21 -0
- package/.medusa/server/src/lib/modules/google-ads/adjustments.js +146 -0
- package/.medusa/server/src/lib/modules/google-ads/api.d.ts +23 -0
- package/.medusa/server/src/lib/modules/google-ads/api.js +171 -0
- package/.medusa/server/src/lib/modules/google-ads/diagnostics.d.ts +47 -0
- package/.medusa/server/src/lib/modules/google-ads/diagnostics.js +164 -0
- package/.medusa/server/src/lib/modules/google-merchant/category-fields.d.ts +7 -0
- package/.medusa/server/src/lib/modules/google-merchant/category-fields.js +210 -0
- package/.medusa/server/src/lib/modules/google-merchant/data-source.d.ts +17 -0
- package/.medusa/server/src/lib/modules/google-merchant/data-source.js +132 -0
- package/.medusa/server/src/lib/modules/google-merchant/diagnostics.d.ts +33 -0
- package/.medusa/server/src/lib/modules/google-merchant/diagnostics.js +113 -0
- package/.medusa/server/src/lib/modules/google-merchant/index.d.ts +5 -0
- package/.medusa/server/src/lib/modules/google-merchant/index.js +6 -1
- package/.medusa/server/src/lib/modules/google-merchant/merchant-api.d.ts +18 -0
- package/.medusa/server/src/lib/modules/google-merchant/merchant-api.js +120 -0
- package/.medusa/server/src/lib/modules/google-merchant/shipping.d.ts +13 -0
- package/.medusa/server/src/lib/modules/google-merchant/shipping.js +97 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/api.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/api.js +3 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/index.js +3 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/sync.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-tag-manager/sync.js +3 -0
- package/.medusa/server/src/lib/modules/shipping/actions.d.ts +2 -2
- package/.medusa/server/src/lib/modules/shipping/actions.js +171 -352
- package/.medusa/server/src/lib/modules/shipping/durable-create.d.ts +2 -1
- package/.medusa/server/src/lib/modules/shipping/durable-create.js +33 -5
- package/.medusa/server/src/lib/modules/shipping/idempotency.js +4 -2
- package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
- package/.medusa/server/src/lib/modules/shipping/native-fulfillment.d.ts +73 -0
- package/.medusa/server/src/lib/modules/shipping/native-fulfillment.js +191 -0
- package/.medusa/server/src/lib/modules/shipping/operations.d.ts +28 -0
- package/.medusa/server/src/lib/modules/shipping/operations.js +9 -1
- package/.medusa/server/src/lib/modules/shipping/print-eligibility.d.ts +12 -0
- package/.medusa/server/src/lib/modules/shipping/print-eligibility.js +34 -0
- package/.medusa/server/src/lib/modules/shipping/recipient-email.d.ts +18 -0
- package/.medusa/server/src/lib/modules/shipping/recipient-email.js +29 -0
- package/.medusa/server/src/lib/modules/shipping/resolve.d.ts +9 -0
- package/.medusa/server/src/lib/modules/shipping/resolve.js +65 -0
- package/.medusa/server/src/lib/modules/shipping/types.d.ts +1 -1
- package/.medusa/server/src/modules/core-documents/index.d.ts +38 -0
- package/.medusa/server/src/modules/core-documents/index.js +18 -0
- package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.d.ts +5 -0
- package/.medusa/server/src/modules/core-documents/migrations/Migration20261102190000.js +22 -0
- package/.medusa/server/src/modules/core-documents/models/core-document-assignment.d.ts +9 -0
- package/.medusa/server/src/modules/core-documents/models/core-document-assignment.js +18 -0
- package/.medusa/server/src/modules/core-documents/models/core-document.d.ts +18 -0
- package/.medusa/server/src/modules/core-documents/models/core-document.js +27 -0
- package/.medusa/server/src/modules/core-documents/service.d.ts +38 -0
- package/.medusa/server/src/modules/core-documents/service.js +13 -0
- package/.medusa/server/src/modules/integration-operation/migrations/Migration20261104010000.d.ts +5 -0
- package/.medusa/server/src/modules/integration-operation/migrations/Migration20261104010000.js +34 -0
- package/.medusa/server/src/modules/integration-operation/models/integration-operation.d.ts +1 -1
- package/.medusa/server/src/modules/integration-operation/models/integration-operation.js +2 -2
- package/.medusa/server/src/modules/integration-operation/service.d.ts +1 -1
- package/.medusa/server/src/modules/integration-operation/state.d.ts +1 -0
- package/.medusa/server/src/modules/integration-operation/state.js +11 -50
- package/.medusa/server/src/modules/integration-operation/types.d.ts +1 -1
- package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +19 -2
- package/.medusa/server/src/modules/integration-settings/connection-test.js +20 -4
- package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.d.ts +2 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-definition.js +49 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/csomagpiac-registration.js +35 -0
- package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +23 -2
- package/.medusa/server/src/modules/integration-settings/hot-reload-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/hot-reload-registration.js +23 -0
- package/.medusa/server/src/modules/integration-settings/index.d.ts +4 -0
- package/.medusa/server/src/modules/integration-settings/index.js +5 -1
- package/.medusa/server/src/modules/integration-settings/manager.js +38 -4
- package/.medusa/server/src/modules/integration-settings/registry.js +1 -14
- package/.medusa/server/src/modules/integration-settings/reloadable.d.ts +10 -0
- package/.medusa/server/src/modules/integration-settings/reloadable.js +58 -0
- package/.medusa/server/src/modules/integration-settings/runtime-snapshot.d.ts +9 -0
- package/.medusa/server/src/modules/integration-settings/runtime-snapshot.js +48 -3
- package/.medusa/server/src/modules/integration-settings/simplepay-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/simplepay-registration.js +18 -0
- package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -5
- package/.medusa/server/src/providers/csomagpiac/client.d.ts +25 -0
- package/.medusa/server/src/providers/csomagpiac/client.js +144 -0
- package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.d.ts +50 -0
- package/.medusa/server/src/providers/csomagpiac/fulfillment-provider.js +248 -0
- package/.medusa/server/src/providers/csomagpiac/index.d.ts +7 -0
- package/.medusa/server/src/providers/csomagpiac/index.js +30 -0
- package/.medusa/server/src/providers/csomagpiac/service.d.ts +60 -0
- package/.medusa/server/src/providers/csomagpiac/service.js +296 -0
- package/.medusa/server/src/providers/csomagpiac/types.d.ts +66 -0
- package/.medusa/server/src/providers/csomagpiac/types.js +27 -0
- package/.medusa/server/src/providers/dpd/fulfillment-provider.d.ts +5 -1
- package/.medusa/server/src/providers/dpd/fulfillment-provider.js +94 -27
- package/.medusa/server/src/providers/dpd/service.d.ts +2 -0
- package/.medusa/server/src/providers/dpd/service.js +32 -4
- package/.medusa/server/src/providers/dpd/types.d.ts +1 -0
- package/.medusa/server/src/providers/dpd/types.js +1 -1
- package/.medusa/server/src/providers/email/service.d.ts +7 -6
- package/.medusa/server/src/providers/email/service.js +51 -25
- package/.medusa/server/src/providers/foxpost/foxpost-service.d.ts +3 -1
- package/.medusa/server/src/providers/foxpost/foxpost-service.js +19 -17
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.d.ts +10 -3
- package/.medusa/server/src/providers/foxpost/fulfillment-provider.js +99 -69
- package/.medusa/server/src/providers/foxpost/types.d.ts +1 -0
- package/.medusa/server/src/providers/gls/fulfillment-provider.d.ts +4 -0
- package/.medusa/server/src/providers/gls/fulfillment-provider.js +87 -17
- package/.medusa/server/src/providers/gls/gls-service.d.ts +19 -1
- package/.medusa/server/src/providers/gls/gls-service.js +32 -64
- package/.medusa/server/src/providers/gls/types.d.ts +16 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.d.ts +4 -0
- package/.medusa/server/src/providers/mpl/fulfillment-provider.js +67 -176
- package/.medusa/server/src/providers/mpl/index.d.ts +2 -0
- package/.medusa/server/src/providers/mpl/index.js +7 -2
- package/.medusa/server/src/providers/mpl/service.d.ts +37 -1
- package/.medusa/server/src/providers/mpl/service.js +113 -366
- package/.medusa/server/src/providers/mpl/types.d.ts +19 -0
- package/.medusa/server/src/providers/mpl/types.js +1 -1
- package/.medusa/server/src/providers/packeta/client.d.ts +2 -1
- package/.medusa/server/src/providers/packeta/client.js +24 -2
- package/.medusa/server/src/providers/packeta/fulfillment-provider.d.ts +4 -0
- package/.medusa/server/src/providers/packeta/fulfillment-provider.js +84 -9
- package/.medusa/server/src/providers/packeta/point-validation.d.ts +2 -0
- package/.medusa/server/src/providers/packeta/point-validation.js +99 -0
- package/.medusa/server/src/providers/packeta/service.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/service.js +91 -23
- package/.medusa/server/src/providers/packeta/types.d.ts +27 -0
- package/.medusa/server/src/providers/packeta/types.js +1 -1
- package/.medusa/server/src/providers/resilient-stripe/index.d.ts +19 -1
- package/.medusa/server/src/providers/resilient-stripe/index.js +59 -12
- package/.medusa/server/src/providers/simplepay/config.js +11 -1
- package/.medusa/server/src/providers/simplepay/index.d.ts +2 -0
- package/.medusa/server/src/providers/simplepay/index.js +5 -3
- package/.medusa/server/src/providers/simplepay/runtime-service.d.ts +13 -0
- package/.medusa/server/src/providers/simplepay/runtime-service.js +55 -0
- package/.medusa/server/src/providers/simplepay/service.d.ts +2 -0
- package/.medusa/server/src/providers/simplepay/service.js +40 -5
- package/.medusa/server/src/scripts/verify-runtime-modules.d.ts +7 -0
- package/.medusa/server/src/scripts/verify-runtime-modules.js +46 -0
- package/.medusa/server/src/subscribers/google-ads-order-canceled.d.ts +7 -0
- package/.medusa/server/src/subscribers/google-ads-order-canceled.js +50 -0
- package/.medusa/server/src/subscribers/google-ads-payment-refunded.d.ts +7 -0
- package/.medusa/server/src/subscribers/google-ads-payment-refunded.js +181 -0
- package/.medusa/server/src/subscribers/simplepay-paid-order-recovery.js +14 -1
- package/package.json +23 -18
|
@@ -0,0 +1,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:
|
|
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:
|
|
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
|
-
:
|
|
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==
|