@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
|
@@ -31,6 +31,8 @@ export type BillingoInvoice = {
|
|
|
31
31
|
modificationDocumentId?: number | null;
|
|
32
32
|
modificationInvoiceNumber?: string | null;
|
|
33
33
|
modifiedAt?: string | null;
|
|
34
|
+
advanceDocumentId?: number | null;
|
|
35
|
+
advanceInvoiceNumber?: string | null;
|
|
34
36
|
};
|
|
35
37
|
export type BillingoProforma = {
|
|
36
38
|
documentId: number;
|
|
@@ -50,7 +52,7 @@ export type BillingoProforma = {
|
|
|
50
52
|
};
|
|
51
53
|
export type BillingoOperation = {
|
|
52
54
|
id: string;
|
|
53
|
-
action: "create" | "sync" | "send" | "cancel" | "modify" | "download" | "create_proforma" | "convert_proforma" | "archive_proforma";
|
|
55
|
+
action: "create" | "sync" | "send" | "cancel" | "modify" | "download" | "create_proforma" | "convert_proforma" | "archive_proforma" | "create_advance" | "create_final_from_advance";
|
|
54
56
|
status: "success" | "failed";
|
|
55
57
|
actorId: string;
|
|
56
58
|
createdAt: string;
|
|
@@ -76,6 +78,7 @@ export type BillingoTaxLine = {
|
|
|
76
78
|
subtotal?: number | null;
|
|
77
79
|
};
|
|
78
80
|
export type BillingoLineItem = {
|
|
81
|
+
id?: string | null;
|
|
79
82
|
title?: string | null;
|
|
80
83
|
product_title?: string | null;
|
|
81
84
|
variant_title?: string | null;
|
|
@@ -85,10 +88,17 @@ export type BillingoLineItem = {
|
|
|
85
88
|
subtotal?: number | null;
|
|
86
89
|
sku?: string | null;
|
|
87
90
|
metadata?: Record<string, unknown> | null;
|
|
91
|
+
product?: {
|
|
92
|
+
metadata?: Record<string, unknown> | null;
|
|
93
|
+
} | null;
|
|
94
|
+
variant?: {
|
|
95
|
+
metadata?: Record<string, unknown> | null;
|
|
96
|
+
} | null;
|
|
88
97
|
tax_lines?: BillingoTaxLine[] | null;
|
|
89
98
|
is_tax_inclusive?: boolean | null;
|
|
90
99
|
};
|
|
91
100
|
export type BillingoShippingMethod = {
|
|
101
|
+
id?: string | null;
|
|
92
102
|
name?: string | null;
|
|
93
103
|
amount?: number | null;
|
|
94
104
|
total?: number | null;
|
|
@@ -110,6 +120,14 @@ export type BillingoOrder = {
|
|
|
110
120
|
shipping_address?: BillingoAddress | null;
|
|
111
121
|
items?: BillingoLineItem[] | null;
|
|
112
122
|
shipping_methods?: BillingoShippingMethod[] | null;
|
|
123
|
+
payment_collections?: Array<{
|
|
124
|
+
payment_sessions?: Array<{
|
|
125
|
+
provider_id?: string | null;
|
|
126
|
+
}>;
|
|
127
|
+
payments?: Array<{
|
|
128
|
+
provider_id?: string | null;
|
|
129
|
+
}>;
|
|
130
|
+
}> | null;
|
|
113
131
|
metadata?: Record<string, unknown> | null;
|
|
114
132
|
};
|
|
115
133
|
export type BillingoOrderService = {
|
|
@@ -135,7 +153,7 @@ export type BillingoDocumentInput = {
|
|
|
135
153
|
partner_id: number;
|
|
136
154
|
block_id: number;
|
|
137
155
|
bank_account_id?: number;
|
|
138
|
-
type: "invoice" | "proforma";
|
|
156
|
+
type: "invoice" | "proforma" | "advance";
|
|
139
157
|
fulfillment_date: string;
|
|
140
158
|
due_date: string;
|
|
141
159
|
payment_method: BillingoPaymentMethod;
|
|
@@ -145,6 +163,7 @@ export type BillingoDocumentInput = {
|
|
|
145
163
|
paid: boolean;
|
|
146
164
|
items: BillingoDocumentItemInput[];
|
|
147
165
|
comment?: string;
|
|
166
|
+
advance_invoice?: number;
|
|
148
167
|
settings?: {
|
|
149
168
|
order_number?: string;
|
|
150
169
|
mediated_service?: boolean;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type GoogleAdsAdjustmentType = "RETRACTION" | "RESTATEMENT";
|
|
2
|
+
export type GoogleAdsAdjustmentInput = {
|
|
3
|
+
orderId: string;
|
|
4
|
+
type: GoogleAdsAdjustmentType;
|
|
5
|
+
adjustmentDate?: Date;
|
|
6
|
+
adjustedValue?: number;
|
|
7
|
+
currencyCode?: string;
|
|
8
|
+
};
|
|
9
|
+
export type GoogleAdsAdjustmentConfig = {
|
|
10
|
+
customerId: string;
|
|
11
|
+
loginCustomerId?: string;
|
|
12
|
+
conversionActionId: string;
|
|
13
|
+
developerToken: string;
|
|
14
|
+
oauthClientId: string;
|
|
15
|
+
oauthClientSecret: string;
|
|
16
|
+
oauthRefreshToken: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function googleAdsAdjustmentsEnabled(env: Record<string, string | undefined>): boolean;
|
|
19
|
+
export declare function googleAdsAdjustmentConfig(env: Record<string, string | undefined>): GoogleAdsAdjustmentConfig;
|
|
20
|
+
export declare function uploadGoogleAdsConversionAdjustment(config: GoogleAdsAdjustmentConfig, input: GoogleAdsAdjustmentInput): Promise<Record<string, unknown>>;
|
|
21
|
+
export declare function googleAdsDateTime(date: Date): string;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.googleAdsAdjustmentsEnabled = googleAdsAdjustmentsEnabled;
|
|
4
|
+
exports.googleAdsAdjustmentConfig = googleAdsAdjustmentConfig;
|
|
5
|
+
exports.uploadGoogleAdsConversionAdjustment = uploadGoogleAdsConversionAdjustment;
|
|
6
|
+
exports.googleAdsDateTime = googleAdsDateTime;
|
|
7
|
+
function googleAdsAdjustmentsEnabled(env) {
|
|
8
|
+
return env.GOOGLE_ADS_ENABLED === "true" && env.GOOGLE_ADS_ADJUSTMENTS_ENABLED === "true";
|
|
9
|
+
}
|
|
10
|
+
function googleAdsAdjustmentConfig(env) {
|
|
11
|
+
const customerId = digits(env.GOOGLE_ADS_CUSTOMER_ID);
|
|
12
|
+
const loginCustomerId = digits(env.GOOGLE_ADS_LOGIN_CUSTOMER_ID);
|
|
13
|
+
const conversionActionId = digits(env.GOOGLE_ADS_CONVERSION_ACTION_ID);
|
|
14
|
+
const developerToken = value(env.GOOGLE_ADS_DEVELOPER_TOKEN);
|
|
15
|
+
const oauthClientId = value(env.GOOGLE_ADS_OAUTH_CLIENT_ID);
|
|
16
|
+
const oauthClientSecret = value(env.GOOGLE_ADS_OAUTH_CLIENT_SECRET);
|
|
17
|
+
const oauthRefreshToken = value(env.GOOGLE_ADS_OAUTH_REFRESH_TOKEN);
|
|
18
|
+
const missing = [
|
|
19
|
+
[customerId, "Google Ads customer ID"],
|
|
20
|
+
[conversionActionId, "Purchase conversion action ID"],
|
|
21
|
+
[developerToken, "Google Ads developer token"],
|
|
22
|
+
[oauthClientId, "OAuth Client ID"],
|
|
23
|
+
[oauthClientSecret, "OAuth Client Secret"],
|
|
24
|
+
[oauthRefreshToken, "OAuth Refresh Token"],
|
|
25
|
+
].filter(([configured]) => !configured).map(([, label]) => label);
|
|
26
|
+
if (missing.length) {
|
|
27
|
+
throw new Error(`Hiányzó Google Ads adjustment beállítások: ${missing.join(", ")}`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
customerId,
|
|
31
|
+
loginCustomerId: loginCustomerId || undefined,
|
|
32
|
+
conversionActionId,
|
|
33
|
+
developerToken,
|
|
34
|
+
oauthClientId,
|
|
35
|
+
oauthClientSecret,
|
|
36
|
+
oauthRefreshToken,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function uploadGoogleAdsConversionAdjustment(config, input) {
|
|
40
|
+
const orderId = value(input.orderId);
|
|
41
|
+
if (!orderId)
|
|
42
|
+
throw new Error("A Google Ads conversion adjustment order ID nélkül nem küldhető.");
|
|
43
|
+
if (input.type === "RESTATEMENT") {
|
|
44
|
+
if (!Number.isFinite(input.adjustedValue) || Number(input.adjustedValue) < 0) {
|
|
45
|
+
throw new Error("A Google Ads RESTATEMENT adjustedValue értékének 0 vagy nagyobb számnak kell lennie.");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const accessToken = await refreshGoogleAccessToken(config);
|
|
49
|
+
const adjustment = {
|
|
50
|
+
conversionAction: `customers/${config.customerId}/conversionActions/${config.conversionActionId}`,
|
|
51
|
+
adjustmentType: input.type,
|
|
52
|
+
orderId,
|
|
53
|
+
adjustmentDateTime: googleAdsDateTime(input.adjustmentDate || new Date()),
|
|
54
|
+
};
|
|
55
|
+
if (input.type === "RESTATEMENT") {
|
|
56
|
+
adjustment.restatementValue = {
|
|
57
|
+
adjustedValue: Number(input.adjustedValue),
|
|
58
|
+
...(input.currencyCode ? { currencyCode: normalizeCurrency(input.currencyCode) } : {}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const headers = {
|
|
62
|
+
authorization: `Bearer ${accessToken}`,
|
|
63
|
+
"developer-token": config.developerToken,
|
|
64
|
+
"content-type": "application/json",
|
|
65
|
+
};
|
|
66
|
+
if (config.loginCustomerId) {
|
|
67
|
+
headers["login-customer-id"] = config.loginCustomerId;
|
|
68
|
+
}
|
|
69
|
+
const response = await fetch(`https://googleads.googleapis.com/v26/customers/${config.customerId}:uploadConversionAdjustments`, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers,
|
|
72
|
+
body: JSON.stringify({
|
|
73
|
+
partialFailure: true,
|
|
74
|
+
conversionAdjustments: [adjustment],
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
const body = await response.json().catch(() => ({}));
|
|
78
|
+
if (!response.ok) {
|
|
79
|
+
throw new Error(`Google Ads adjustment HTTP ${response.status}: ${responseMessage(body)}`);
|
|
80
|
+
}
|
|
81
|
+
const partialFailure = record(body.partialFailureError);
|
|
82
|
+
if (partialFailure && (partialFailure.code || partialFailure.message)) {
|
|
83
|
+
throw new Error(`Google Ads adjustment partial failure: ${responseMessage(partialFailure)}`);
|
|
84
|
+
}
|
|
85
|
+
const results = Array.isArray(body.results) ? body.results : [];
|
|
86
|
+
if (!results.length) {
|
|
87
|
+
throw new Error("A Google Ads adjustment válasza nem tartalmazott sikeres eredményt.");
|
|
88
|
+
}
|
|
89
|
+
return body;
|
|
90
|
+
}
|
|
91
|
+
async function refreshGoogleAccessToken(config) {
|
|
92
|
+
const body = new URLSearchParams({
|
|
93
|
+
client_id: config.oauthClientId,
|
|
94
|
+
client_secret: config.oauthClientSecret,
|
|
95
|
+
refresh_token: config.oauthRefreshToken,
|
|
96
|
+
grant_type: "refresh_token",
|
|
97
|
+
});
|
|
98
|
+
const response = await fetch("https://oauth2.googleapis.com/token", {
|
|
99
|
+
method: "POST",
|
|
100
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
101
|
+
body,
|
|
102
|
+
});
|
|
103
|
+
const payload = await response.json().catch(() => ({}));
|
|
104
|
+
const accessToken = value(payload.access_token);
|
|
105
|
+
if (!response.ok || !accessToken) {
|
|
106
|
+
throw new Error(`Google OAuth token refresh sikertelen (${response.status}): ${responseMessage(payload)}`);
|
|
107
|
+
}
|
|
108
|
+
return accessToken;
|
|
109
|
+
}
|
|
110
|
+
function googleAdsDateTime(date) {
|
|
111
|
+
if (Number.isNaN(date.getTime()))
|
|
112
|
+
throw new Error("Érvénytelen adjustment dátum.");
|
|
113
|
+
const pad = (number) => String(number).padStart(2, "0");
|
|
114
|
+
const offsetMinutes = -date.getTimezoneOffset();
|
|
115
|
+
const sign = offsetMinutes >= 0 ? "+" : "-";
|
|
116
|
+
const abs = Math.abs(offsetMinutes);
|
|
117
|
+
const offset = `${sign}${pad(Math.floor(abs / 60))}:${pad(abs % 60)}`;
|
|
118
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}${offset}`;
|
|
119
|
+
}
|
|
120
|
+
function normalizeCurrency(input) {
|
|
121
|
+
const currency = value(input).toUpperCase();
|
|
122
|
+
if (!/^[A-Z]{3}$/.test(currency))
|
|
123
|
+
throw new Error(`Érvénytelen devizakód: ${currency || "(üres)"}`);
|
|
124
|
+
return currency;
|
|
125
|
+
}
|
|
126
|
+
function digits(input) {
|
|
127
|
+
return value(input).replace(/[^0-9]/g, "");
|
|
128
|
+
}
|
|
129
|
+
function value(input) {
|
|
130
|
+
return typeof input === "string" || typeof input === "number" ? String(input).trim() : "";
|
|
131
|
+
}
|
|
132
|
+
function record(input) {
|
|
133
|
+
return input && typeof input === "object" && !Array.isArray(input)
|
|
134
|
+
? input
|
|
135
|
+
: null;
|
|
136
|
+
}
|
|
137
|
+
function responseMessage(body) {
|
|
138
|
+
const direct = value(body.message) || value(body.error_description);
|
|
139
|
+
if (direct)
|
|
140
|
+
return direct;
|
|
141
|
+
const error = record(body.error);
|
|
142
|
+
if (error)
|
|
143
|
+
return value(error.message) || value(error.status) || JSON.stringify(error).slice(0, 1000);
|
|
144
|
+
return JSON.stringify(body).slice(0, 1000);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRqdXN0bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL21vZHVsZXMvZ29vZ2xlLWFkcy9hZGp1c3RtZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW9CQSxrRUFFQztBQUVELDhEQWlDQztBQUVELGtGQWlFQztBQXVCRCw4Q0FRQztBQXZJRCxTQUFnQiwyQkFBMkIsQ0FBQyxHQUF1QztJQUNqRixPQUFPLEdBQUcsQ0FBQyxrQkFBa0IsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLDhCQUE4QixLQUFLLE1BQU0sQ0FBQTtBQUMzRixDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQ3ZDLEdBQXVDO0lBRXZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUNyRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUE7SUFDdEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQzVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUMzRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtJQUNuRSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtJQUVuRSxNQUFNLE9BQU8sR0FBRztRQUNkLENBQUMsVUFBVSxFQUFFLHdCQUF3QixDQUFDO1FBQ3RDLENBQUMsa0JBQWtCLEVBQUUsK0JBQStCLENBQUM7UUFDckQsQ0FBQyxjQUFjLEVBQUUsNEJBQTRCLENBQUM7UUFDOUMsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUM7UUFDbEMsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQztRQUMxQyxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDO0tBQzNDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWpFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3JGLENBQUM7SUFFRCxPQUFPO1FBQ0wsVUFBVTtRQUNWLGVBQWUsRUFBRSxlQUFlLElBQUksU0FBUztRQUM3QyxrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsaUJBQWlCO0tBQ2xCLENBQUE7QUFDSCxDQUFDO0FBRU0sS0FBSyxVQUFVLG1DQUFtQyxDQUN2RCxNQUFpQyxFQUNqQyxLQUErQjtJQUUvQixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3BDLElBQUksQ0FBQyxPQUFPO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFBO0lBRWpHLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUE7UUFDekcsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFELE1BQU0sVUFBVSxHQUE0QjtRQUMxQyxnQkFBZ0IsRUFBRSxhQUFhLE1BQU0sQ0FBQyxVQUFVLHNCQUFzQixNQUFNLENBQUMsa0JBQWtCLEVBQUU7UUFDakcsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJO1FBQzFCLE9BQU87UUFDUCxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7S0FDMUUsQ0FBQTtJQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxVQUFVLENBQUMsZ0JBQWdCLEdBQUc7WUFDNUIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3ZGLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQTJCO1FBQ3RDLGFBQWEsRUFBRSxVQUFVLFdBQVcsRUFBRTtRQUN0QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsY0FBYztRQUN4QyxjQUFjLEVBQUUsa0JBQWtCO0tBQ25DLENBQUE7SUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQixPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFBO0lBQ3ZELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FDMUIsa0RBQWtELE1BQU0sQ0FBQyxVQUFVLDhCQUE4QixFQUNqRztRQUNFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTztRQUNQLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ25CLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHFCQUFxQixFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3BDLENBQUM7S0FDSCxDQUNGLENBQUE7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBNEIsQ0FBQTtJQUMvRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLFFBQVEsQ0FBQyxNQUFNLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3ZELElBQUksY0FBYyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxlQUFlLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzlGLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxLQUFLLFVBQVUsd0JBQXdCLENBQUMsTUFBaUM7SUFDdkUsTUFBTSxJQUFJLEdBQUcsSUFBSSxlQUFlLENBQUM7UUFDL0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQy9CLGFBQWEsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1FBQ3ZDLGFBQWEsRUFBRSxNQUFNLENBQUMsaUJBQWlCO1FBQ3ZDLFVBQVUsRUFBRSxlQUFlO0tBQzVCLENBQUMsQ0FBQTtJQUVGLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLHFDQUFxQyxFQUFFO1FBQ2xFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLG1DQUFtQyxFQUFFO1FBQ2hFLElBQUk7S0FDTCxDQUFDLENBQUE7SUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBNEIsQ0FBQTtJQUNsRixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQy9DLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsUUFBUSxDQUFDLE1BQU0sTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQzVHLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBVTtJQUMxQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBQ2xGLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBQy9DLE1BQU0sSUFBSSxHQUFHLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBO0lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDbkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFBO0lBQ3JFLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUE7QUFDeEssQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYTtJQUN0QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDbkcsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEtBQWM7SUFDNUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBYztJQUMzQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQzNGLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxLQUFjO0lBQzVCLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxLQUFnQztRQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ1YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQTZCO0lBQ3BELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0lBQ25FLElBQUksTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFBO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEMsSUFBSSxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ3JHLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVDLENBQUMifQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare const GOOGLE_ADS_SCOPE = "https://www.googleapis.com/auth/adwords";
|
|
2
|
+
export type GoogleAdsApiEnv = Record<string, string>;
|
|
3
|
+
export declare function buildGoogleAdsAuthorizationUrl(env: GoogleAdsApiEnv, state: string): string;
|
|
4
|
+
export declare function exchangeGoogleAdsAuthorizationCode(env: GoogleAdsApiEnv, code: string): Promise<{
|
|
5
|
+
refreshToken: string;
|
|
6
|
+
accessToken: string | undefined;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function getGoogleAdsAccessToken(env: GoogleAdsApiEnv): Promise<string>;
|
|
9
|
+
export declare function testGoogleAdsApiConnection(env: GoogleAdsApiEnv): Promise<{
|
|
10
|
+
customer_id: string;
|
|
11
|
+
descriptive_name: string | null;
|
|
12
|
+
currency_code: string | null;
|
|
13
|
+
time_zone: string | null;
|
|
14
|
+
status: string | null;
|
|
15
|
+
request_id: string | null;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function createGoogleAdsOAuthState(input: {
|
|
18
|
+
actorId?: string | null;
|
|
19
|
+
}): string;
|
|
20
|
+
export declare function verifyGoogleAdsOAuthState(state: string): {
|
|
21
|
+
ts?: number;
|
|
22
|
+
actorId?: string | null;
|
|
23
|
+
};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GOOGLE_ADS_SCOPE = void 0;
|
|
4
|
+
exports.buildGoogleAdsAuthorizationUrl = buildGoogleAdsAuthorizationUrl;
|
|
5
|
+
exports.exchangeGoogleAdsAuthorizationCode = exchangeGoogleAdsAuthorizationCode;
|
|
6
|
+
exports.getGoogleAdsAccessToken = getGoogleAdsAccessToken;
|
|
7
|
+
exports.testGoogleAdsApiConnection = testGoogleAdsApiConnection;
|
|
8
|
+
exports.createGoogleAdsOAuthState = createGoogleAdsOAuthState;
|
|
9
|
+
exports.verifyGoogleAdsOAuthState = verifyGoogleAdsOAuthState;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
exports.GOOGLE_ADS_SCOPE = "https://www.googleapis.com/auth/adwords";
|
|
12
|
+
const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
13
|
+
const GOOGLE_TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
14
|
+
const GOOGLE_ADS_API_BASE = "https://googleads.googleapis.com/v26";
|
|
15
|
+
function buildGoogleAdsAuthorizationUrl(env, state) {
|
|
16
|
+
const url = new URL(GOOGLE_AUTH_URL);
|
|
17
|
+
url.searchParams.set("client_id", required(env, "GOOGLE_ADS_OAUTH_CLIENT_ID"));
|
|
18
|
+
url.searchParams.set("redirect_uri", required(env, "GOOGLE_ADS_OAUTH_REDIRECT_URI"));
|
|
19
|
+
url.searchParams.set("response_type", "code");
|
|
20
|
+
url.searchParams.set("scope", exports.GOOGLE_ADS_SCOPE);
|
|
21
|
+
url.searchParams.set("access_type", "offline");
|
|
22
|
+
url.searchParams.set("prompt", "consent");
|
|
23
|
+
url.searchParams.set("include_granted_scopes", "true");
|
|
24
|
+
url.searchParams.set("state", state);
|
|
25
|
+
return url.toString();
|
|
26
|
+
}
|
|
27
|
+
async function exchangeGoogleAdsAuthorizationCode(env, code) {
|
|
28
|
+
const body = new URLSearchParams({
|
|
29
|
+
client_id: required(env, "GOOGLE_ADS_OAUTH_CLIENT_ID"),
|
|
30
|
+
client_secret: required(env, "GOOGLE_ADS_OAUTH_CLIENT_SECRET"),
|
|
31
|
+
redirect_uri: required(env, "GOOGLE_ADS_OAUTH_REDIRECT_URI"),
|
|
32
|
+
code: requiredValue(code, "OAuth authorization code"),
|
|
33
|
+
grant_type: "authorization_code",
|
|
34
|
+
});
|
|
35
|
+
const response = await fetch(GOOGLE_TOKEN_URL, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
38
|
+
body,
|
|
39
|
+
signal: AbortSignal.timeout(10000),
|
|
40
|
+
});
|
|
41
|
+
const data = await json(response);
|
|
42
|
+
const refreshToken = text(data.refresh_token);
|
|
43
|
+
if (!response.ok || !refreshToken) {
|
|
44
|
+
throw new Error(text(data.error_description) || text(data.error) || "A Google Ads OAuth refresh token nem kérhető le.");
|
|
45
|
+
}
|
|
46
|
+
return { refreshToken, accessToken: text(data.access_token) || undefined };
|
|
47
|
+
}
|
|
48
|
+
async function getGoogleAdsAccessToken(env) {
|
|
49
|
+
const body = new URLSearchParams({
|
|
50
|
+
client_id: required(env, "GOOGLE_ADS_OAUTH_CLIENT_ID"),
|
|
51
|
+
client_secret: required(env, "GOOGLE_ADS_OAUTH_CLIENT_SECRET"),
|
|
52
|
+
refresh_token: required(env, "GOOGLE_ADS_OAUTH_REFRESH_TOKEN"),
|
|
53
|
+
grant_type: "refresh_token",
|
|
54
|
+
});
|
|
55
|
+
const response = await fetch(GOOGLE_TOKEN_URL, {
|
|
56
|
+
method: "POST",
|
|
57
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
58
|
+
body,
|
|
59
|
+
signal: AbortSignal.timeout(10000),
|
|
60
|
+
});
|
|
61
|
+
const data = await json(response);
|
|
62
|
+
const accessToken = text(data.access_token);
|
|
63
|
+
if (!response.ok || !accessToken) {
|
|
64
|
+
throw new Error(text(data.error_description) || text(data.error) || "A Google Ads OAuth access token nem kérhető le.");
|
|
65
|
+
}
|
|
66
|
+
return accessToken;
|
|
67
|
+
}
|
|
68
|
+
async function testGoogleAdsApiConnection(env) {
|
|
69
|
+
if (env.GOOGLE_ADS_API_ENABLED !== "true") {
|
|
70
|
+
throw new Error("A Google Ads API kapcsolat nincs bekapcsolva.");
|
|
71
|
+
}
|
|
72
|
+
const customerId = digits(required(env, "GOOGLE_ADS_CUSTOMER_ID"));
|
|
73
|
+
const loginCustomerId = digits(env.GOOGLE_ADS_LOGIN_CUSTOMER_ID);
|
|
74
|
+
const developerToken = required(env, "GOOGLE_ADS_DEVELOPER_TOKEN");
|
|
75
|
+
const accessToken = await getGoogleAdsAccessToken(env);
|
|
76
|
+
const headers = {
|
|
77
|
+
authorization: `Bearer ${accessToken}`,
|
|
78
|
+
"developer-token": developerToken,
|
|
79
|
+
"content-type": "application/json",
|
|
80
|
+
};
|
|
81
|
+
if (loginCustomerId)
|
|
82
|
+
headers["login-customer-id"] = loginCustomerId;
|
|
83
|
+
const response = await fetch(`${GOOGLE_ADS_API_BASE}/customers/${customerId}/googleAds:search`, {
|
|
84
|
+
method: "POST",
|
|
85
|
+
headers,
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
query: "SELECT customer.id, customer.descriptive_name, customer.currency_code, customer.time_zone, customer.status FROM customer LIMIT 1",
|
|
88
|
+
}),
|
|
89
|
+
signal: AbortSignal.timeout(15000),
|
|
90
|
+
});
|
|
91
|
+
const data = await json(response);
|
|
92
|
+
if (!response.ok) {
|
|
93
|
+
throw new Error(`Google Ads API hiba (${response.status}): ${googleAdsErrorMessage(data)}`);
|
|
94
|
+
}
|
|
95
|
+
const rows = Array.isArray(data.results) ? data.results : [];
|
|
96
|
+
const customer = record(record(rows[0])?.customer);
|
|
97
|
+
if (!customer) {
|
|
98
|
+
throw new Error("A Google Ads API kapcsolat létrejött, de a cél customer adatai nem érkeztek vissza.");
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
customer_id: text(customer.id) || customerId,
|
|
102
|
+
descriptive_name: text(customer.descriptiveName) || null,
|
|
103
|
+
currency_code: text(customer.currencyCode) || null,
|
|
104
|
+
time_zone: text(customer.timeZone) || null,
|
|
105
|
+
status: text(customer.status) || null,
|
|
106
|
+
request_id: response.headers.get("request-id") || null,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function createGoogleAdsOAuthState(input) {
|
|
110
|
+
const payload = Buffer.from(JSON.stringify({ ts: Date.now(), actorId: input.actorId || null })).toString("base64url");
|
|
111
|
+
const signature = (0, node_crypto_1.createHmac)("sha256", oauthStateSecret()).update(payload).digest("base64url");
|
|
112
|
+
return `${payload}.${signature}`;
|
|
113
|
+
}
|
|
114
|
+
function verifyGoogleAdsOAuthState(state) {
|
|
115
|
+
const [payload, signature] = String(state || "").split(".");
|
|
116
|
+
if (!payload || !signature)
|
|
117
|
+
throw new Error("Érvénytelen Google Ads OAuth state.");
|
|
118
|
+
const expected = (0, node_crypto_1.createHmac)("sha256", oauthStateSecret()).update(payload).digest();
|
|
119
|
+
let supplied;
|
|
120
|
+
try {
|
|
121
|
+
supplied = Buffer.from(signature, "base64url");
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
throw new Error("Érvénytelen Google Ads OAuth state.");
|
|
125
|
+
}
|
|
126
|
+
if (expected.length !== supplied.length || !(0, node_crypto_1.timingSafeEqual)(expected, supplied)) {
|
|
127
|
+
throw new Error("Érvénytelen Google Ads OAuth state aláírás.");
|
|
128
|
+
}
|
|
129
|
+
const parsed = JSON.parse(Buffer.from(payload, "base64url").toString("utf8"));
|
|
130
|
+
if (!parsed.ts || Date.now() - parsed.ts > 10 * 60 * 1000) {
|
|
131
|
+
throw new Error("A Google Ads OAuth state lejárt.");
|
|
132
|
+
}
|
|
133
|
+
return parsed;
|
|
134
|
+
}
|
|
135
|
+
function required(env, key) {
|
|
136
|
+
return requiredValue(env[key], key);
|
|
137
|
+
}
|
|
138
|
+
function requiredValue(value, label) {
|
|
139
|
+
const result = text(value);
|
|
140
|
+
if (!result)
|
|
141
|
+
throw new Error(`Hiányzó Google Ads API beállítás: ${label}`);
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
function oauthStateSecret() {
|
|
145
|
+
const secret = text(process.env.COOKIE_SECRET) || text(process.env.JWT_SECRET);
|
|
146
|
+
if (!secret)
|
|
147
|
+
throw new Error("COOKIE_SECRET vagy JWT_SECRET szükséges a Google Ads OAuth state aláírásához.");
|
|
148
|
+
return secret;
|
|
149
|
+
}
|
|
150
|
+
function digits(value) {
|
|
151
|
+
return text(value).replace(/[^0-9]/g, "");
|
|
152
|
+
}
|
|
153
|
+
function text(value) {
|
|
154
|
+
return typeof value === "string" || typeof value === "number" ? String(value).trim() : "";
|
|
155
|
+
}
|
|
156
|
+
function record(value) {
|
|
157
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : null;
|
|
158
|
+
}
|
|
159
|
+
async function json(response) {
|
|
160
|
+
return await response.json().catch(() => ({}));
|
|
161
|
+
}
|
|
162
|
+
function googleAdsErrorMessage(data) {
|
|
163
|
+
const direct = text(data.message) || text(data.error_description);
|
|
164
|
+
if (direct)
|
|
165
|
+
return direct;
|
|
166
|
+
const error = record(data.error);
|
|
167
|
+
if (error)
|
|
168
|
+
return text(error.message) || text(error.status) || JSON.stringify(error).slice(0, 1000);
|
|
169
|
+
return JSON.stringify(data).slice(0, 1000);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2R1bGVzL2dvb2dsZS1hZHMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLHdFQVdDO0FBRUQsZ0ZBcUJDO0FBRUQsMERBb0JDO0FBRUQsZ0VBMkNDO0FBRUQsOERBSUM7QUFFRCw4REF1QkM7QUE3SUQsNkNBQXlEO0FBRTVDLFFBQUEsZ0JBQWdCLEdBQUcseUNBQXlDLENBQUE7QUFDekUsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUE7QUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxxQ0FBcUMsQ0FBQTtBQUM5RCxNQUFNLG1CQUFtQixHQUFHLHNDQUFzQyxDQUFBO0FBSWxFLFNBQWdCLDhCQUE4QixDQUFDLEdBQW9CLEVBQUUsS0FBYTtJQUNoRixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUNwQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUE7SUFDOUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxDQUFBO0lBQ3BGLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM3QyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsd0JBQWdCLENBQUMsQ0FBQTtJQUMvQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDOUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3pDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FB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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { type GoogleAdsApiEnv } from "./api";
|
|
2
|
+
export type GoogleAdsConversionDiagnostic = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
type: string;
|
|
6
|
+
category: string;
|
|
7
|
+
status: string;
|
|
8
|
+
origin: string;
|
|
9
|
+
primaryForGoal: boolean;
|
|
10
|
+
countingType: string;
|
|
11
|
+
tagSnippetCount: number;
|
|
12
|
+
allConversions: number;
|
|
13
|
+
allConversionsValue: number;
|
|
14
|
+
lastConversionDate?: string;
|
|
15
|
+
lastReceivedRequestDateTime?: string;
|
|
16
|
+
configuredPurchaseAction: boolean;
|
|
17
|
+
severity: "ok" | "warning" | "error";
|
|
18
|
+
messages: string[];
|
|
19
|
+
};
|
|
20
|
+
export type GoogleAdsConversionDiagnostics = {
|
|
21
|
+
customerId: string;
|
|
22
|
+
actions: GoogleAdsConversionDiagnostic[];
|
|
23
|
+
summary: {
|
|
24
|
+
total: number;
|
|
25
|
+
enabled: number;
|
|
26
|
+
purchase: number;
|
|
27
|
+
errors: number;
|
|
28
|
+
warnings: number;
|
|
29
|
+
primary: number;
|
|
30
|
+
};
|
|
31
|
+
generatedAt: string;
|
|
32
|
+
requestId?: string | null;
|
|
33
|
+
};
|
|
34
|
+
export declare function getGoogleAdsConversionDiagnostics(env: GoogleAdsApiEnv): Promise<{
|
|
35
|
+
customerId: string;
|
|
36
|
+
actions: GoogleAdsConversionDiagnostic[];
|
|
37
|
+
summary: {
|
|
38
|
+
total: number;
|
|
39
|
+
enabled: number;
|
|
40
|
+
purchase: number;
|
|
41
|
+
errors: number;
|
|
42
|
+
warnings: number;
|
|
43
|
+
primary: number;
|
|
44
|
+
};
|
|
45
|
+
generatedAt: string;
|
|
46
|
+
requestId: string | null;
|
|
47
|
+
}>;
|