@tagadapay/headless-sdk 1.0.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/README.md +110 -0
- package/dist/core/client.d.ts +48 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +61 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +46 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +57 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/http.d.ts +27 -0
- package/dist/core/http.d.ts.map +1 -0
- package/dist/core/http.js +116 -0
- package/dist/core/http.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/modules/analytics.d.ts +79 -0
- package/dist/core/modules/analytics.d.ts.map +1 -0
- package/dist/core/modules/analytics.js +265 -0
- package/dist/core/modules/analytics.js.map +1 -0
- package/dist/core/modules/checkout.d.ts +67 -0
- package/dist/core/modules/checkout.d.ts.map +1 -0
- package/dist/core/modules/checkout.js +164 -0
- package/dist/core/modules/checkout.js.map +1 -0
- package/dist/core/modules/customer.d.ts +33 -0
- package/dist/core/modules/customer.d.ts.map +1 -0
- package/dist/core/modules/customer.js +53 -0
- package/dist/core/modules/customer.js.map +1 -0
- package/dist/core/modules/offers.d.ts +43 -0
- package/dist/core/modules/offers.d.ts.map +1 -0
- package/dist/core/modules/offers.js +56 -0
- package/dist/core/modules/offers.js.map +1 -0
- package/dist/core/modules/payment.d.ts +123 -0
- package/dist/core/modules/payment.d.ts.map +1 -0
- package/dist/core/modules/payment.js +279 -0
- package/dist/core/modules/payment.js.map +1 -0
- package/dist/core/types.d.ts +276 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/react/hooks/useAnalytics.d.ts +59 -0
- package/dist/react/hooks/useAnalytics.d.ts.map +1 -0
- package/dist/react/hooks/useAnalytics.js +49 -0
- package/dist/react/hooks/useAnalytics.js.map +1 -0
- package/dist/react/hooks/useCheckout.d.ts +45 -0
- package/dist/react/hooks/useCheckout.d.ts.map +1 -0
- package/dist/react/hooks/useCheckout.js +113 -0
- package/dist/react/hooks/useCheckout.js.map +1 -0
- package/dist/react/hooks/useCustomer.d.ts +28 -0
- package/dist/react/hooks/useCustomer.d.ts.map +1 -0
- package/dist/react/hooks/useCustomer.js +77 -0
- package/dist/react/hooks/useCustomer.js.map +1 -0
- package/dist/react/hooks/useOffers.d.ts +45 -0
- package/dist/react/hooks/useOffers.d.ts.map +1 -0
- package/dist/react/hooks/useOffers.js +88 -0
- package/dist/react/hooks/useOffers.js.map +1 -0
- package/dist/react/hooks/usePayment.d.ts +63 -0
- package/dist/react/hooks/usePayment.d.ts.map +1 -0
- package/dist/react/hooks/usePayment.js +114 -0
- package/dist/react/hooks/usePayment.js.map +1 -0
- package/dist/react/index.d.ts +14 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +7 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/provider.d.ts +31 -0
- package/dist/react/provider.d.ts.map +1 -0
- package/dist/react/provider.js +32 -0
- package/dist/react/provider.js.map +1 -0
- package/dist/tagada-headless-react.min.js +8 -0
- package/dist/tagada-headless-react.min.js.map +7 -0
- package/dist/tagada-headless.js +1093 -0
- package/dist/tagada-headless.min.js +8 -0
- package/dist/tagada-headless.min.js.map +7 -0
- package/package.json +72 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
export type Environment = 'production' | 'development' | 'local';
|
|
2
|
+
export interface HeadlessConfig {
|
|
3
|
+
/** Your TagadaPay store ID (e.g. "store_abc123"). */
|
|
4
|
+
storeId: string;
|
|
5
|
+
/** Environment. Defaults to "production". */
|
|
6
|
+
environment?: Environment;
|
|
7
|
+
/** Public API key for authenticated requests. Optional -- many flows use checkout tokens instead. */
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
/** Override the base API URL. Auto-resolved from environment if omitted. */
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
/** Request timeout in ms. Default 30000. */
|
|
12
|
+
timeout?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface HttpRequestOptions {
|
|
15
|
+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
16
|
+
body?: unknown;
|
|
17
|
+
headers?: Record<string, string>;
|
|
18
|
+
params?: Record<string, string | number | boolean | undefined>;
|
|
19
|
+
/** Override the auth token for this single request. */
|
|
20
|
+
token?: string;
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
export interface LineItem {
|
|
24
|
+
variantId: string;
|
|
25
|
+
priceId?: string;
|
|
26
|
+
quantity: number;
|
|
27
|
+
}
|
|
28
|
+
export interface CheckoutSession {
|
|
29
|
+
id: string;
|
|
30
|
+
storeId: string;
|
|
31
|
+
checkoutToken: string;
|
|
32
|
+
currency: string;
|
|
33
|
+
items: CheckoutLineItem[];
|
|
34
|
+
totals: CheckoutTotals;
|
|
35
|
+
customer?: CheckoutCustomer;
|
|
36
|
+
shippingAddress?: Address;
|
|
37
|
+
billingAddress?: Address;
|
|
38
|
+
promotionCode?: string;
|
|
39
|
+
metadata?: Record<string, unknown>;
|
|
40
|
+
}
|
|
41
|
+
export interface CheckoutLineItem {
|
|
42
|
+
id: string;
|
|
43
|
+
variantId: string;
|
|
44
|
+
priceId?: string;
|
|
45
|
+
productName: string;
|
|
46
|
+
variantName: string;
|
|
47
|
+
quantity: number;
|
|
48
|
+
unitAmount: number;
|
|
49
|
+
totalAmount: number;
|
|
50
|
+
currency: string;
|
|
51
|
+
imageUrl?: string;
|
|
52
|
+
recurring?: {
|
|
53
|
+
interval: string;
|
|
54
|
+
intervalCount: number;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export interface CheckoutTotals {
|
|
58
|
+
subtotal: number;
|
|
59
|
+
discount: number;
|
|
60
|
+
shipping: number;
|
|
61
|
+
tax: number;
|
|
62
|
+
total: number;
|
|
63
|
+
currency: string;
|
|
64
|
+
}
|
|
65
|
+
export interface CheckoutCustomer {
|
|
66
|
+
id?: string;
|
|
67
|
+
email?: string;
|
|
68
|
+
firstName?: string;
|
|
69
|
+
lastName?: string;
|
|
70
|
+
phone?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface Address {
|
|
73
|
+
line1?: string;
|
|
74
|
+
line2?: string;
|
|
75
|
+
city?: string;
|
|
76
|
+
state?: string;
|
|
77
|
+
postalCode?: string;
|
|
78
|
+
country?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface ShippingRate {
|
|
81
|
+
id: string;
|
|
82
|
+
name: string;
|
|
83
|
+
description?: string;
|
|
84
|
+
amount: number;
|
|
85
|
+
currency: string;
|
|
86
|
+
estimatedDays?: number;
|
|
87
|
+
}
|
|
88
|
+
export interface PaymentMethodConfig {
|
|
89
|
+
enabled: boolean;
|
|
90
|
+
method: string;
|
|
91
|
+
provider?: string;
|
|
92
|
+
type?: string;
|
|
93
|
+
label?: string;
|
|
94
|
+
logoUrl?: string;
|
|
95
|
+
description?: string;
|
|
96
|
+
express?: boolean;
|
|
97
|
+
paymentFlowId?: string;
|
|
98
|
+
processorId?: string;
|
|
99
|
+
integrationId?: string;
|
|
100
|
+
publishableKey?: string;
|
|
101
|
+
metadata?: Record<string, unknown>;
|
|
102
|
+
}
|
|
103
|
+
export type PaymentSetupConfig = Record<string, PaymentMethodConfig>;
|
|
104
|
+
export interface ExpressMethod {
|
|
105
|
+
type: string;
|
|
106
|
+
available: boolean;
|
|
107
|
+
processorId?: string;
|
|
108
|
+
publishableKey?: string;
|
|
109
|
+
metadata?: Record<string, unknown>;
|
|
110
|
+
}
|
|
111
|
+
export interface ExpressMethods {
|
|
112
|
+
applePay?: ExpressMethod;
|
|
113
|
+
googlePay?: ExpressMethod;
|
|
114
|
+
paypal?: ExpressMethod;
|
|
115
|
+
klarna?: ExpressMethod;
|
|
116
|
+
link?: ExpressMethod;
|
|
117
|
+
}
|
|
118
|
+
export interface StoreConfig {
|
|
119
|
+
threedsEnabled: boolean;
|
|
120
|
+
paymentFlowId?: string;
|
|
121
|
+
[key: string]: unknown;
|
|
122
|
+
}
|
|
123
|
+
export interface PayResult {
|
|
124
|
+
payment: {
|
|
125
|
+
id: string;
|
|
126
|
+
amount: number;
|
|
127
|
+
currency: string;
|
|
128
|
+
status: 'succeeded' | 'pending' | 'failed' | 'declined' | 'requires_action';
|
|
129
|
+
requireAction?: 'none' | 'threeds_auth' | 'redirect';
|
|
130
|
+
requireActionData?: {
|
|
131
|
+
type: string;
|
|
132
|
+
redirectUrl?: string;
|
|
133
|
+
metadata?: Record<string, unknown>;
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export interface PayOptions {
|
|
138
|
+
checkoutSessionId: string;
|
|
139
|
+
/** Base64-encoded TagadaToken from tokenizeCard(). Instrument is auto-created. */
|
|
140
|
+
tagadaToken?: string;
|
|
141
|
+
/** Existing payment instrument ID (skip instrument creation). */
|
|
142
|
+
paymentInstrumentId?: string;
|
|
143
|
+
paymentFlowId?: string;
|
|
144
|
+
threedsSessionId?: string;
|
|
145
|
+
processorId?: string;
|
|
146
|
+
paymentMethod?: string;
|
|
147
|
+
isExpress?: boolean;
|
|
148
|
+
metadata?: Record<string, unknown>;
|
|
149
|
+
}
|
|
150
|
+
export interface PayDirectOptions {
|
|
151
|
+
checkoutSessionId: string;
|
|
152
|
+
paymentInstrumentId?: string;
|
|
153
|
+
paymentFlowId?: string;
|
|
154
|
+
processorId?: string;
|
|
155
|
+
paymentMethod?: string;
|
|
156
|
+
isExpress?: boolean;
|
|
157
|
+
threedsSessionId?: string;
|
|
158
|
+
}
|
|
159
|
+
export interface CreateInstrumentOptions {
|
|
160
|
+
tagadaToken: string;
|
|
161
|
+
storeId: string;
|
|
162
|
+
customerData?: {
|
|
163
|
+
email?: string;
|
|
164
|
+
firstName?: string;
|
|
165
|
+
lastName?: string;
|
|
166
|
+
};
|
|
167
|
+
customerId?: string;
|
|
168
|
+
}
|
|
169
|
+
export interface PaymentInstrument {
|
|
170
|
+
id: string;
|
|
171
|
+
type: string;
|
|
172
|
+
customerId: string;
|
|
173
|
+
card?: {
|
|
174
|
+
last4: string;
|
|
175
|
+
brand: string;
|
|
176
|
+
expMonth: number;
|
|
177
|
+
expYear: number;
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export interface ThreedsSession {
|
|
181
|
+
id: string;
|
|
182
|
+
externalSessionId: string;
|
|
183
|
+
provider: string;
|
|
184
|
+
status: string;
|
|
185
|
+
paymentInstrumentId: string;
|
|
186
|
+
}
|
|
187
|
+
export interface PaymentStatus {
|
|
188
|
+
id: string;
|
|
189
|
+
amount: number;
|
|
190
|
+
currency: string;
|
|
191
|
+
status: 'succeeded' | 'pending' | 'failed' | 'declined';
|
|
192
|
+
requireAction?: string;
|
|
193
|
+
}
|
|
194
|
+
export interface AnalyticsEvent {
|
|
195
|
+
event: string;
|
|
196
|
+
data?: Record<string, unknown>;
|
|
197
|
+
timestamp?: number;
|
|
198
|
+
}
|
|
199
|
+
export interface PixelConfig {
|
|
200
|
+
metaPixelId?: string;
|
|
201
|
+
tiktokPixelId?: string;
|
|
202
|
+
snapchatPixelId?: string;
|
|
203
|
+
pinterestTagId?: string;
|
|
204
|
+
gtmId?: string;
|
|
205
|
+
gaId?: string;
|
|
206
|
+
}
|
|
207
|
+
export interface Offer {
|
|
208
|
+
id: string;
|
|
209
|
+
type: 'upsell' | 'downsell' | 'orderbump';
|
|
210
|
+
title: string;
|
|
211
|
+
titleTrans?: Record<string, string>;
|
|
212
|
+
description?: string;
|
|
213
|
+
lineItems: OfferLineItem[];
|
|
214
|
+
pricing?: {
|
|
215
|
+
amount: number;
|
|
216
|
+
currency: string;
|
|
217
|
+
compareAtAmount?: number;
|
|
218
|
+
};
|
|
219
|
+
metadata?: Record<string, unknown>;
|
|
220
|
+
}
|
|
221
|
+
export interface OfferLineItem {
|
|
222
|
+
priceId: string;
|
|
223
|
+
quantity: number;
|
|
224
|
+
productName?: string;
|
|
225
|
+
variantName?: string;
|
|
226
|
+
amount?: number;
|
|
227
|
+
}
|
|
228
|
+
export interface OfferResult {
|
|
229
|
+
success: boolean;
|
|
230
|
+
orderId?: string;
|
|
231
|
+
paymentId?: string;
|
|
232
|
+
error?: string;
|
|
233
|
+
}
|
|
234
|
+
export interface Customer {
|
|
235
|
+
id: string;
|
|
236
|
+
email: string;
|
|
237
|
+
firstName?: string;
|
|
238
|
+
lastName?: string;
|
|
239
|
+
phone?: string;
|
|
240
|
+
tags?: string[];
|
|
241
|
+
metadata?: Record<string, unknown>;
|
|
242
|
+
createdAt?: string;
|
|
243
|
+
}
|
|
244
|
+
export interface Order {
|
|
245
|
+
id: string;
|
|
246
|
+
storeId: string;
|
|
247
|
+
customerId: string;
|
|
248
|
+
amount: number;
|
|
249
|
+
currency: string;
|
|
250
|
+
status: string;
|
|
251
|
+
items: OrderItem[];
|
|
252
|
+
createdAt: string;
|
|
253
|
+
}
|
|
254
|
+
export interface OrderItem {
|
|
255
|
+
id: string;
|
|
256
|
+
productName: string;
|
|
257
|
+
variantName: string;
|
|
258
|
+
quantity: number;
|
|
259
|
+
unitAmount: number;
|
|
260
|
+
totalAmount: number;
|
|
261
|
+
}
|
|
262
|
+
export interface Subscription {
|
|
263
|
+
id: string;
|
|
264
|
+
customerId: string;
|
|
265
|
+
storeId: string;
|
|
266
|
+
status: 'trialing' | 'active' | 'past_due' | 'paused' | 'canceled';
|
|
267
|
+
priceId: string;
|
|
268
|
+
currency: string;
|
|
269
|
+
amount: number;
|
|
270
|
+
interval: string;
|
|
271
|
+
intervalCount: number;
|
|
272
|
+
currentPeriodStart: string;
|
|
273
|
+
currentPeriodEnd: string;
|
|
274
|
+
cancelAtPeriodEnd: boolean;
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { PixelConfig } from '../../core/types.js';
|
|
2
|
+
export interface UseAnalyticsReturn {
|
|
3
|
+
trackPageView: (page?: string) => void;
|
|
4
|
+
trackViewContent: (data: {
|
|
5
|
+
productId?: string;
|
|
6
|
+
variantId?: string;
|
|
7
|
+
value?: number;
|
|
8
|
+
currency?: string;
|
|
9
|
+
}) => void;
|
|
10
|
+
trackAddToCart: (data: {
|
|
11
|
+
variantId: string;
|
|
12
|
+
quantity?: number;
|
|
13
|
+
amount?: number;
|
|
14
|
+
currency?: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
trackInitiateCheckout: (data?: {
|
|
17
|
+
sessionId?: string;
|
|
18
|
+
value?: number;
|
|
19
|
+
currency?: string;
|
|
20
|
+
}) => void;
|
|
21
|
+
trackAddPaymentInfo: (data?: {
|
|
22
|
+
paymentMethod?: string;
|
|
23
|
+
}) => void;
|
|
24
|
+
trackPurchase: (data: {
|
|
25
|
+
orderId: string;
|
|
26
|
+
amount: number;
|
|
27
|
+
currency: string;
|
|
28
|
+
}) => void;
|
|
29
|
+
trackStep: (data: {
|
|
30
|
+
stepName: string;
|
|
31
|
+
stepIndex?: number;
|
|
32
|
+
}) => void;
|
|
33
|
+
trackConversion: (data: {
|
|
34
|
+
orderId: string;
|
|
35
|
+
amount: number;
|
|
36
|
+
currency: string;
|
|
37
|
+
}) => void;
|
|
38
|
+
trackCustomEvent: (event: string, data?: Record<string, unknown>) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* React hook for analytics and pixel tracking.
|
|
42
|
+
*
|
|
43
|
+
* Auto-initializes on mount, loading pixel config from the store.
|
|
44
|
+
* All track methods fire events to configured pixels (Meta, TikTok, Snap, GTM, GA).
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```tsx
|
|
48
|
+
* const { trackPageView, trackPurchase } = useAnalytics();
|
|
49
|
+
*
|
|
50
|
+
* useEffect(() => { trackPageView('/checkout'); }, []);
|
|
51
|
+
*
|
|
52
|
+
* // After payment
|
|
53
|
+
* trackPurchase({ orderId: 'ord_xxx', amount: 4900, currency: 'USD' });
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function useAnalytics(opts?: {
|
|
57
|
+
pixelConfig?: PixelConfig;
|
|
58
|
+
}): UseAnalyticsReturn;
|
|
59
|
+
//# sourceMappingURL=useAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,gBAAgB,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChH,cAAc,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7G,qBAAqB,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAClG,mBAAmB,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACrF,SAAS,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACpE,eAAe,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACvF,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC3E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,kBAAkB,CAuErF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useEffect, useCallback, useRef } from 'react';
|
|
2
|
+
import { useHeadlessClient } from '../provider.js';
|
|
3
|
+
/**
|
|
4
|
+
* React hook for analytics and pixel tracking.
|
|
5
|
+
*
|
|
6
|
+
* Auto-initializes on mount, loading pixel config from the store.
|
|
7
|
+
* All track methods fire events to configured pixels (Meta, TikTok, Snap, GTM, GA).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* const { trackPageView, trackPurchase } = useAnalytics();
|
|
12
|
+
*
|
|
13
|
+
* useEffect(() => { trackPageView('/checkout'); }, []);
|
|
14
|
+
*
|
|
15
|
+
* // After payment
|
|
16
|
+
* trackPurchase({ orderId: 'ord_xxx', amount: 4900, currency: 'USD' });
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function useAnalytics(opts) {
|
|
20
|
+
const client = useHeadlessClient();
|
|
21
|
+
const initRef = useRef(false);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
if (initRef.current)
|
|
24
|
+
return;
|
|
25
|
+
initRef.current = true;
|
|
26
|
+
client.analytics.init({ pixelConfig: opts?.pixelConfig });
|
|
27
|
+
}, [client, opts?.pixelConfig]);
|
|
28
|
+
const trackPageView = useCallback((page) => client.analytics.trackPageView(page), [client]);
|
|
29
|
+
const trackViewContent = useCallback((data) => client.analytics.trackViewContent(data), [client]);
|
|
30
|
+
const trackAddToCart = useCallback((data) => client.analytics.trackAddToCart(data), [client]);
|
|
31
|
+
const trackInitiateCheckout = useCallback((data) => client.analytics.trackInitiateCheckout(data), [client]);
|
|
32
|
+
const trackAddPaymentInfo = useCallback((data) => client.analytics.trackAddPaymentInfo(data), [client]);
|
|
33
|
+
const trackPurchase = useCallback((data) => client.analytics.trackPurchase(data), [client]);
|
|
34
|
+
const trackStep = useCallback((data) => client.analytics.trackStep(data), [client]);
|
|
35
|
+
const trackConversion = useCallback((data) => client.analytics.trackConversion(data), [client]);
|
|
36
|
+
const trackCustomEvent = useCallback((event, data) => client.analytics.trackCustomEvent(event, data), [client]);
|
|
37
|
+
return {
|
|
38
|
+
trackPageView,
|
|
39
|
+
trackViewContent,
|
|
40
|
+
trackAddToCart,
|
|
41
|
+
trackInitiateCheckout,
|
|
42
|
+
trackAddPaymentInfo,
|
|
43
|
+
trackPurchase,
|
|
44
|
+
trackStep,
|
|
45
|
+
trackConversion,
|
|
46
|
+
trackCustomEvent,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=useAnalytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../../src/react/hooks/useAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAenD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoC;IAC/D,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE9B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,CAAC,OAAO;YAAE,OAAO;QAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAEhC,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,IAAa,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EACvD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAmF,EAAE,EAAE,CACtF,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,EACzC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,IAAkF,EAAE,EAAE,CACrF,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EACvC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,IAAgE,EAAE,EAAE,CACnE,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAC9C,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,IAAiC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,EACjF,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,IAA2D,EAAE,EAAE,CAC9D,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EACtC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,IAA8C,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EACpF,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,IAA2D,EAAE,EAAE,CAC9D,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EACxC,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,KAAa,EAAE,IAA8B,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EACjG,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO;QACL,aAAa;QACb,gBAAgB;QAChB,cAAc;QACd,qBAAqB;QACrB,mBAAmB;QACnB,aAAa;QACb,SAAS;QACT,eAAe;QACf,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { CheckoutSession, LineItem, ShippingRate, Address, CheckoutCustomer } from '../../core/types.js';
|
|
2
|
+
export interface UseCheckoutReturn {
|
|
3
|
+
session: CheckoutSession | null;
|
|
4
|
+
isLoading: boolean;
|
|
5
|
+
error: Error | null;
|
|
6
|
+
/** Reload the session from the server. */
|
|
7
|
+
refresh: () => Promise<void>;
|
|
8
|
+
/** Create a new checkout session (auto-loads it after creation). */
|
|
9
|
+
createSession: (opts: {
|
|
10
|
+
items: LineItem[];
|
|
11
|
+
currency?: string;
|
|
12
|
+
returnUrl?: string;
|
|
13
|
+
customerEmail?: string;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
/** Replace cart items. */
|
|
16
|
+
updateCart: (items: LineItem[]) => Promise<void>;
|
|
17
|
+
/** Update customer info on the session. */
|
|
18
|
+
updateCustomer: (customer: Partial<CheckoutCustomer>) => Promise<void>;
|
|
19
|
+
/** Update address on the session. */
|
|
20
|
+
updateAddress: (addresses: {
|
|
21
|
+
shippingAddress?: Address;
|
|
22
|
+
billingAddress?: Address;
|
|
23
|
+
}) => Promise<void>;
|
|
24
|
+
/** Apply a promo code. */
|
|
25
|
+
applyPromo: (code: string) => Promise<void>;
|
|
26
|
+
/** Remove the applied promo code. */
|
|
27
|
+
removePromo: () => Promise<void>;
|
|
28
|
+
/** Fetch shipping rates. */
|
|
29
|
+
getShippingRates: () => Promise<ShippingRate[]>;
|
|
30
|
+
/** Select a shipping rate. */
|
|
31
|
+
selectShippingRate: (rateId: string) => Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* React hook for checkout session management.
|
|
35
|
+
*
|
|
36
|
+
* @param checkoutToken - The checkout token from the URL (e.g. `?checkoutToken=xxx`).
|
|
37
|
+
* @param sessionToken - Optional JWT session token (from URL param `token`).
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* const { session, isLoading, applyPromo, createSession } = useCheckout(checkoutToken, sessionToken);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function useCheckout(checkoutToken: string | null | undefined, sessionToken?: string): UseCheckoutReturn;
|
|
45
|
+
//# sourceMappingURL=useCheckout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useCheckout.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE9G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,oEAAoE;IACpE,aAAa,EAAE,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,0BAA0B;IAC1B,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,2CAA2C;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,qCAAqC;IACrC,aAAa,EAAE,CAAC,SAAS,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,0BAA0B;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,qCAAqC;IACrC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,8BAA8B;IAC9B,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,iBAAiB,CAwGnB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
+
import { useHeadlessClient } from '../provider.js';
|
|
3
|
+
/**
|
|
4
|
+
* React hook for checkout session management.
|
|
5
|
+
*
|
|
6
|
+
* @param checkoutToken - The checkout token from the URL (e.g. `?checkoutToken=xxx`).
|
|
7
|
+
* @param sessionToken - Optional JWT session token (from URL param `token`).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* const { session, isLoading, applyPromo, createSession } = useCheckout(checkoutToken, sessionToken);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function useCheckout(checkoutToken, sessionToken) {
|
|
15
|
+
const client = useHeadlessClient();
|
|
16
|
+
const [session, setSession] = useState(null);
|
|
17
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
18
|
+
const [error, setError] = useState(null);
|
|
19
|
+
const loadSession = useCallback(async () => {
|
|
20
|
+
if (!checkoutToken)
|
|
21
|
+
return;
|
|
22
|
+
setIsLoading(true);
|
|
23
|
+
setError(null);
|
|
24
|
+
try {
|
|
25
|
+
const s = await client.checkout.loadSession(checkoutToken, sessionToken);
|
|
26
|
+
setSession(s);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
setIsLoading(false);
|
|
33
|
+
}
|
|
34
|
+
}, [client, checkoutToken, sessionToken]);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
loadSession();
|
|
37
|
+
}, [loadSession]);
|
|
38
|
+
const createSession = useCallback(async (opts) => {
|
|
39
|
+
setIsLoading(true);
|
|
40
|
+
setError(null);
|
|
41
|
+
try {
|
|
42
|
+
const result = await client.checkout.createSession(opts);
|
|
43
|
+
const newUrl = new URL(window.location.href);
|
|
44
|
+
newUrl.searchParams.set('checkoutToken', result.checkoutToken);
|
|
45
|
+
newUrl.searchParams.set('token', result.sessionToken);
|
|
46
|
+
window.history.replaceState({}, '', newUrl.toString());
|
|
47
|
+
const s = await client.checkout.loadSession(result.checkoutToken, result.sessionToken);
|
|
48
|
+
setSession(s);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
setError(err instanceof Error ? err : new Error(String(err)));
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
setIsLoading(false);
|
|
55
|
+
}
|
|
56
|
+
}, [client]);
|
|
57
|
+
const updateCart = useCallback(async (items) => {
|
|
58
|
+
if (!session)
|
|
59
|
+
return;
|
|
60
|
+
const updated = await client.checkout.updateCart(session.id, items);
|
|
61
|
+
setSession(updated);
|
|
62
|
+
}, [client, session]);
|
|
63
|
+
const updateCustomer = useCallback(async (customer) => {
|
|
64
|
+
if (!session)
|
|
65
|
+
return;
|
|
66
|
+
const updated = await client.checkout.updateCustomer(session.id, customer);
|
|
67
|
+
setSession(updated);
|
|
68
|
+
}, [client, session]);
|
|
69
|
+
const updateAddress = useCallback(async (addresses) => {
|
|
70
|
+
if (!session)
|
|
71
|
+
return;
|
|
72
|
+
const updated = await client.checkout.updateAddress(session.id, addresses);
|
|
73
|
+
setSession(updated);
|
|
74
|
+
}, [client, session]);
|
|
75
|
+
const applyPromo = useCallback(async (code) => {
|
|
76
|
+
if (!session)
|
|
77
|
+
return;
|
|
78
|
+
const updated = await client.checkout.applyPromoCode(session.id, code);
|
|
79
|
+
setSession(updated);
|
|
80
|
+
}, [client, session]);
|
|
81
|
+
const removePromo = useCallback(async () => {
|
|
82
|
+
if (!session)
|
|
83
|
+
return;
|
|
84
|
+
const updated = await client.checkout.removePromoCode(session.id);
|
|
85
|
+
setSession(updated);
|
|
86
|
+
}, [client, session]);
|
|
87
|
+
const getShippingRates = useCallback(async () => {
|
|
88
|
+
if (!session)
|
|
89
|
+
return [];
|
|
90
|
+
return client.checkout.getShippingRates(session.id);
|
|
91
|
+
}, [client, session]);
|
|
92
|
+
const selectShippingRate = useCallback(async (rateId) => {
|
|
93
|
+
if (!session)
|
|
94
|
+
return;
|
|
95
|
+
const updated = await client.checkout.selectShippingRate(session.id, rateId);
|
|
96
|
+
setSession(updated);
|
|
97
|
+
}, [client, session]);
|
|
98
|
+
return {
|
|
99
|
+
session,
|
|
100
|
+
isLoading,
|
|
101
|
+
error,
|
|
102
|
+
refresh: loadSession,
|
|
103
|
+
createSession,
|
|
104
|
+
updateCart,
|
|
105
|
+
updateCustomer,
|
|
106
|
+
updateAddress,
|
|
107
|
+
applyPromo,
|
|
108
|
+
removePromo,
|
|
109
|
+
getShippingRates,
|
|
110
|
+
selectShippingRate,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=useCheckout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCheckout.js","sourceRoot":"","sources":["../../../src/react/hooks/useCheckout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Customer, Order, Subscription } from '../../core/types.js';
|
|
2
|
+
export interface UseCustomerReturn {
|
|
3
|
+
customer: Customer | null;
|
|
4
|
+
orders: Order[];
|
|
5
|
+
subscriptions: Subscription[];
|
|
6
|
+
isLoading: boolean;
|
|
7
|
+
error: Error | null;
|
|
8
|
+
/** Load customer profile by ID. */
|
|
9
|
+
loadCustomer: (customerId: string) => Promise<void>;
|
|
10
|
+
/** Load customer orders. */
|
|
11
|
+
loadOrders: (customerId: string) => Promise<void>;
|
|
12
|
+
/** Load customer subscriptions. */
|
|
13
|
+
loadSubscriptions: (customerId: string) => Promise<void>;
|
|
14
|
+
/** Update customer profile. */
|
|
15
|
+
updateProfile: (customerId: string, data: Partial<Pick<Customer, 'email' | 'firstName' | 'lastName' | 'phone'>>) => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* React hook for customer data -- profile, orders, subscriptions.
|
|
19
|
+
*
|
|
20
|
+
* @param customerId - Auto-loads the customer profile when provided.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const { customer, orders, loadOrders } = useCustomer(session?.customer?.id);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function useCustomer(customerId?: string | null): UseCustomerReturn;
|
|
28
|
+
//# sourceMappingURL=useCustomer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCustomer.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useCustomer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,4BAA4B;IAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,mCAAmC;IACnC,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,+BAA+B;IAC/B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnI;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,CAkEzE"}
|