@tagadapay/headless-sdk 1.8.0-rc.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +216 -1
  2. package/dist/core/client.d.ts +68 -0
  3. package/dist/core/client.d.ts.map +1 -0
  4. package/dist/core/client.js +73 -0
  5. package/dist/core/client.js.map +1 -0
  6. package/dist/core/errors.d.ts +53 -0
  7. package/dist/core/errors.d.ts.map +1 -0
  8. package/dist/core/errors.js +58 -0
  9. package/dist/core/errors.js.map +1 -0
  10. package/dist/core/helpers/autocomplete.d.ts +89 -0
  11. package/dist/core/helpers/autocomplete.d.ts.map +1 -0
  12. package/dist/core/helpers/autocomplete.js +186 -0
  13. package/dist/core/helpers/autocomplete.js.map +1 -0
  14. package/dist/core/helpers/countries.d.ts +45 -0
  15. package/dist/core/helpers/countries.d.ts.map +1 -0
  16. package/dist/core/helpers/countries.js +65 -0
  17. package/dist/core/helpers/countries.js.map +1 -0
  18. package/dist/core/helpers/currency.d.ts +26 -0
  19. package/dist/core/helpers/currency.d.ts.map +1 -0
  20. package/dist/core/helpers/currency.js +72 -0
  21. package/dist/core/helpers/currency.js.map +1 -0
  22. package/dist/core/helpers/index.d.ts +6 -0
  23. package/dist/core/helpers/index.d.ts.map +1 -0
  24. package/dist/core/helpers/index.js +6 -0
  25. package/dist/core/helpers/index.js.map +1 -0
  26. package/dist/core/helpers/iso3166.d.ts +28 -0
  27. package/dist/core/helpers/iso3166.d.ts.map +1 -0
  28. package/dist/core/helpers/iso3166.js +84 -0
  29. package/dist/core/helpers/iso3166.js.map +1 -0
  30. package/dist/core/helpers/walletContact.d.ts +67 -0
  31. package/dist/core/helpers/walletContact.d.ts.map +1 -0
  32. package/dist/core/helpers/walletContact.js +71 -0
  33. package/dist/core/helpers/walletContact.js.map +1 -0
  34. package/dist/core/http.d.ts +27 -0
  35. package/dist/core/http.d.ts.map +1 -0
  36. package/dist/core/http.js +125 -0
  37. package/dist/core/http.js.map +1 -0
  38. package/dist/core/index.d.ts +15 -0
  39. package/dist/core/index.d.ts.map +1 -0
  40. package/dist/core/index.js +13 -0
  41. package/dist/core/index.js.map +1 -0
  42. package/dist/core/modules/catalog.d.ts +27 -0
  43. package/dist/core/modules/catalog.d.ts.map +1 -0
  44. package/dist/core/modules/catalog.js +38 -0
  45. package/dist/core/modules/catalog.js.map +1 -0
  46. package/dist/core/modules/checkout.d.ts +268 -0
  47. package/dist/core/modules/checkout.d.ts.map +1 -0
  48. package/dist/core/modules/checkout.js +470 -0
  49. package/dist/core/modules/checkout.js.map +1 -0
  50. package/dist/core/modules/customer.d.ts +33 -0
  51. package/dist/core/modules/customer.d.ts.map +1 -0
  52. package/dist/core/modules/customer.js +53 -0
  53. package/dist/core/modules/customer.js.map +1 -0
  54. package/dist/core/modules/funnel.d.ts +38 -0
  55. package/dist/core/modules/funnel.d.ts.map +1 -0
  56. package/dist/core/modules/funnel.js +143 -0
  57. package/dist/core/modules/funnel.js.map +1 -0
  58. package/dist/core/modules/offers.d.ts +137 -0
  59. package/dist/core/modules/offers.d.ts.map +1 -0
  60. package/dist/core/modules/offers.js +141 -0
  61. package/dist/core/modules/offers.js.map +1 -0
  62. package/dist/core/modules/payment.d.ts +353 -0
  63. package/dist/core/modules/payment.d.ts.map +1 -0
  64. package/dist/core/modules/payment.js +784 -0
  65. package/dist/core/modules/payment.js.map +1 -0
  66. package/dist/core/modules/rx.d.ts +162 -0
  67. package/dist/core/modules/rx.d.ts.map +1 -0
  68. package/dist/core/modules/rx.js +46 -0
  69. package/dist/core/modules/rx.js.map +1 -0
  70. package/dist/core/types.d.ts +532 -0
  71. package/dist/core/types.d.ts.map +1 -0
  72. package/dist/core/types.js +5 -0
  73. package/dist/core/types.js.map +1 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/react/hooks/useCatalog.d.ts +25 -0
  77. package/dist/react/hooks/useCatalog.d.ts.map +1 -0
  78. package/dist/react/hooks/useCatalog.js +58 -0
  79. package/dist/react/hooks/useCatalog.js.map +1 -0
  80. package/dist/react/hooks/useCheckout.d.ts +58 -0
  81. package/dist/react/hooks/useCheckout.d.ts.map +1 -0
  82. package/dist/react/hooks/useCheckout.js +177 -0
  83. package/dist/react/hooks/useCheckout.js.map +1 -0
  84. package/dist/react/hooks/useCustomer.d.ts +28 -0
  85. package/dist/react/hooks/useCustomer.d.ts.map +1 -0
  86. package/dist/react/hooks/useCustomer.js +77 -0
  87. package/dist/react/hooks/useCustomer.js.map +1 -0
  88. package/dist/react/hooks/useGoogleAutocomplete.d.ts +26 -0
  89. package/dist/react/hooks/useGoogleAutocomplete.d.ts.map +1 -0
  90. package/dist/react/hooks/useGoogleAutocomplete.js +70 -0
  91. package/dist/react/hooks/useGoogleAutocomplete.js.map +1 -0
  92. package/dist/react/hooks/useISOData.d.ts +23 -0
  93. package/dist/react/hooks/useISOData.d.ts.map +1 -0
  94. package/dist/react/hooks/useISOData.js +63 -0
  95. package/dist/react/hooks/useISOData.js.map +1 -0
  96. package/dist/react/hooks/useOffers.d.ts +134 -0
  97. package/dist/react/hooks/useOffers.d.ts.map +1 -0
  98. package/dist/react/hooks/useOffers.js +171 -0
  99. package/dist/react/hooks/useOffers.js.map +1 -0
  100. package/dist/react/hooks/usePayment.d.ts +117 -0
  101. package/dist/react/hooks/usePayment.d.ts.map +1 -0
  102. package/dist/react/hooks/usePayment.js +233 -0
  103. package/dist/react/hooks/usePayment.js.map +1 -0
  104. package/dist/react/hooks/useRx.d.ts +64 -0
  105. package/dist/react/hooks/useRx.d.ts.map +1 -0
  106. package/dist/react/hooks/useRx.js +145 -0
  107. package/dist/react/hooks/useRx.js.map +1 -0
  108. package/dist/react/index.d.ts +22 -0
  109. package/dist/react/index.d.ts.map +1 -0
  110. package/dist/react/index.js +12 -0
  111. package/dist/react/index.js.map +1 -0
  112. package/dist/react/internal/redirectGuard.d.ts +9 -0
  113. package/dist/react/internal/redirectGuard.d.ts.map +1 -0
  114. package/dist/react/internal/redirectGuard.js +25 -0
  115. package/dist/react/internal/redirectGuard.js.map +1 -0
  116. package/dist/react/provider.d.ts +31 -0
  117. package/dist/react/provider.d.ts.map +1 -0
  118. package/dist/react/provider.js +32 -0
  119. package/dist/react/provider.js.map +1 -0
  120. package/dist/stripe/StripeExpressButton.d.ts +30 -0
  121. package/dist/stripe/StripeExpressButton.d.ts.map +1 -0
  122. package/dist/stripe/StripeExpressButton.js +32 -0
  123. package/dist/stripe/StripeExpressButton.js.map +1 -0
  124. package/dist/stripe/StripeExpressCheckout.d.ts +109 -0
  125. package/dist/stripe/StripeExpressCheckout.d.ts.map +1 -0
  126. package/dist/stripe/StripeExpressCheckout.js +242 -0
  127. package/dist/stripe/StripeExpressCheckout.js.map +1 -0
  128. package/dist/stripe/index.d.ts +8 -0
  129. package/dist/stripe/index.d.ts.map +1 -0
  130. package/dist/stripe/index.js +15 -0
  131. package/dist/stripe/index.js.map +1 -0
  132. package/dist/stripe/useStripeExpress.d.ts +54 -0
  133. package/dist/stripe/useStripeExpress.d.ts.map +1 -0
  134. package/dist/stripe/useStripeExpress.js +125 -0
  135. package/dist/stripe/useStripeExpress.js.map +1 -0
  136. package/dist/tagada-headless-react.min.js +8 -0
  137. package/dist/tagada-headless-react.min.js.map +7 -0
  138. package/dist/tagada-headless.js +2423 -0
  139. package/dist/tagada-headless.min.js +8 -0
  140. package/dist/tagada-headless.min.js.map +7 -0
  141. package/package.json +79 -73
@@ -0,0 +1,134 @@
1
+ import type { Offer, OfferPreview, OfferPayResult, ProcessPaymentResult } from '../../core/types.js';
2
+ export interface UseOffersOptions {
3
+ /**
4
+ * Called when an offer charge succeeds, including after a 3DS redirect
5
+ * return. Use this to navigate to the next funnel step
6
+ * (e.g. `/upsell-2` or `/thank-you`).
7
+ */
8
+ onOfferAccepted?: (result: ProcessPaymentResult & {
9
+ status: 'succeeded';
10
+ }) => void;
11
+ /**
12
+ * Called when an offer charge fails or is declined, including after a
13
+ * redirect return.
14
+ */
15
+ onOfferDeclined?: (result: ProcessPaymentResult & {
16
+ status: 'failed';
17
+ }) => void;
18
+ /**
19
+ * Disable the in-hook 3DS-return auto-resume. Set this to `true` if you
20
+ * already mount `usePayment` on the same page — though both hooks use a
21
+ * shared guard so leaving it `false` is also safe.
22
+ */
23
+ disableAutoResume?: boolean;
24
+ }
25
+ export interface UseOffersReturn {
26
+ /** Current loaded offer. */
27
+ offer: Offer | null;
28
+ /** Current preview (pricing breakdown). */
29
+ preview: OfferPreview | null;
30
+ /** Whether an operation is in progress (including polling after redirect). */
31
+ isLoading: boolean;
32
+ /** Last error. */
33
+ error: Error | null;
34
+ /** Get a single offer by ID. */
35
+ getOffer: (offerId: string) => Promise<Offer>;
36
+ /** List offers for the store, optionally filtered by type or IDs. */
37
+ listOffers: (opts?: {
38
+ type?: 'upsell' | 'orderbump';
39
+ ids?: string[];
40
+ }) => Promise<Offer[]>;
41
+ /** Preview offer pricing (line items with amounts). */
42
+ previewOffer: (opts: {
43
+ offerId: string;
44
+ currency?: string;
45
+ lineItems?: Array<{
46
+ variantId: string;
47
+ quantity: number;
48
+ }>;
49
+ }) => Promise<OfferPreview>;
50
+ /**
51
+ * **Recommended.** Charge a previewed offer and handle the full
52
+ * lifecycle (3DS challenge or redirect, polling, return-URL detection).
53
+ *
54
+ * Resolves with a typed `ProcessPaymentResult`:
55
+ * - `'succeeded'` — charge complete; `onOfferAccepted` callback fired.
56
+ * - `'requires_redirect'` — browser is being redirected to the bank;
57
+ * the hook will auto-resume on return.
58
+ * - `'failed'` — charge declined or error; `onOfferDeclined` fired.
59
+ * - `'pending'` — async charge still in flight (rare).
60
+ */
61
+ processOfferPayment: (opts: {
62
+ offerId: string;
63
+ mainOrderId: string;
64
+ currency?: string;
65
+ lineItems?: Array<{
66
+ variantId: string;
67
+ quantity: number;
68
+ }>;
69
+ returnUrl?: string;
70
+ paymentInstrumentId?: string;
71
+ }) => Promise<ProcessPaymentResult>;
72
+ /**
73
+ * Low-level pay (returns raw `OfferPayResult`, no automatic 3DS / polling).
74
+ * Most callers should use `processOfferPayment` instead.
75
+ */
76
+ payPreviewedOffer: (opts: {
77
+ offerId: string;
78
+ mainOrderId: string;
79
+ currency?: string;
80
+ lineItems?: Array<{
81
+ variantId: string;
82
+ quantity: number;
83
+ }>;
84
+ returnUrl?: string;
85
+ paymentInstrumentId?: string;
86
+ }) => Promise<OfferPayResult>;
87
+ /** Toggle an order bump on/off within a checkout session. */
88
+ toggleOrderBump: (opts: {
89
+ checkoutSessionId: string;
90
+ orderBumpOfferId: string;
91
+ selected: boolean;
92
+ }) => Promise<unknown>;
93
+ /** List post-purchase offers for an order. */
94
+ listPostPurchaseOffers: (orderId: string) => Promise<Offer[]>;
95
+ /** Accept a post-purchase offer (only works for offers pre-registered as post-purchase on the order). */
96
+ acceptPostPurchaseOffer: (opts: {
97
+ orderId: string;
98
+ offerId: string;
99
+ items?: Array<{
100
+ variantId: string;
101
+ quantity: number;
102
+ }>;
103
+ }) => Promise<{
104
+ success: boolean;
105
+ error?: string;
106
+ }>;
107
+ /** Decline a post-purchase offer. */
108
+ declinePostPurchaseOffer: (opts: {
109
+ orderId: string;
110
+ offerId: string;
111
+ }) => Promise<{
112
+ success: boolean;
113
+ error?: string;
114
+ }>;
115
+ }
116
+ /**
117
+ * React hook for offers — upsells, order bumps, and post-purchase offers.
118
+ *
119
+ * @example
120
+ * ```tsx
121
+ * const { processOfferPayment, isLoading, error } = useOffers({
122
+ * onOfferAccepted: () => navigate('/upsell-2'),
123
+ * onOfferDeclined: (res) => toast.error(res.error),
124
+ * });
125
+ *
126
+ * await processOfferPayment({
127
+ * offerId: 'offer_xxx',
128
+ * mainOrderId: order.id,
129
+ * });
130
+ * // 3DS, redirect, return, polling — all handled automatically.
131
+ * ```
132
+ */
133
+ export declare function useOffers(options?: UseOffersOptions): UseOffersReturn;
134
+ //# sourceMappingURL=useOffers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOffers.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useOffers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { useState, useCallback, useRef, useEffect } from 'react';
2
+ import { useHeadlessClient } from '../provider.js';
3
+ import { tryClaimResume } from '../internal/redirectGuard.js';
4
+ /**
5
+ * React hook for offers — upsells, order bumps, and post-purchase offers.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const { processOfferPayment, isLoading, error } = useOffers({
10
+ * onOfferAccepted: () => navigate('/upsell-2'),
11
+ * onOfferDeclined: (res) => toast.error(res.error),
12
+ * });
13
+ *
14
+ * await processOfferPayment({
15
+ * offerId: 'offer_xxx',
16
+ * mainOrderId: order.id,
17
+ * });
18
+ * // 3DS, redirect, return, polling — all handled automatically.
19
+ * ```
20
+ */
21
+ export function useOffers(options) {
22
+ const client = useHeadlessClient();
23
+ const [offer, setOffer] = useState(null);
24
+ const [preview, setPreview] = useState(null);
25
+ const [isLoading, setIsLoading] = useState(false);
26
+ const [error, setError] = useState(null);
27
+ const optionsRef = useRef(options);
28
+ optionsRef.current = options;
29
+ const redirectReturnProcessedRef = useRef(false);
30
+ // ---------------------------------------------------------------------------
31
+ // Auto-resume after 3DS / processor redirect (offer-flavored callbacks).
32
+ // Mirrors usePayment; guarded so the two hooks don't both fire.
33
+ // ---------------------------------------------------------------------------
34
+ useEffect(() => {
35
+ if (typeof window === 'undefined')
36
+ return;
37
+ if (optionsRef.current?.disableAutoResume)
38
+ return;
39
+ if (redirectReturnProcessedRef.current)
40
+ return;
41
+ const params = new URLSearchParams(window.location.search);
42
+ const paymentAction = params.get('paymentAction');
43
+ const paymentActionStatus = params.get('paymentActionStatus');
44
+ const paymentId = params.get('paymentId');
45
+ if (paymentAction !== 'requireAction' || paymentActionStatus !== 'completed' || !paymentId) {
46
+ return;
47
+ }
48
+ redirectReturnProcessedRef.current = true;
49
+ if (!tryClaimResume(paymentId)) {
50
+ // Another hook (likely usePayment) already started the resume.
51
+ return;
52
+ }
53
+ setIsLoading(true);
54
+ setError(null);
55
+ const resume = async () => {
56
+ try {
57
+ const result = await client.payment.resumeAfterRedirect(paymentId);
58
+ const cleanParams = new URLSearchParams(window.location.search);
59
+ ['paymentAction', 'paymentActionStatus', 'paymentId', 'payment_intent', 'payment_intent_client_secret', 'source_type', 'redirect_status'].forEach((p) => cleanParams.delete(p));
60
+ const newUrl = cleanParams.toString()
61
+ ? `${window.location.pathname}?${cleanParams.toString()}`
62
+ : window.location.pathname;
63
+ window.history.replaceState({}, document.title, newUrl);
64
+ if (result.status === 'succeeded') {
65
+ optionsRef.current?.onOfferAccepted?.(result);
66
+ }
67
+ else if (result.status === 'failed') {
68
+ setError(new Error(result.error));
69
+ optionsRef.current?.onOfferDeclined?.(result);
70
+ }
71
+ }
72
+ catch (err) {
73
+ setError(err instanceof Error ? err : new Error(String(err)));
74
+ }
75
+ finally {
76
+ setIsLoading(false);
77
+ }
78
+ };
79
+ void resume();
80
+ }, [client]); // eslint-disable-line react-hooks/exhaustive-deps
81
+ const wrap = useCallback(async (fn) => {
82
+ setIsLoading(true);
83
+ setError(null);
84
+ try {
85
+ return await fn();
86
+ }
87
+ catch (err) {
88
+ const e = err instanceof Error ? err : new Error(String(err));
89
+ setError(e);
90
+ throw e;
91
+ }
92
+ finally {
93
+ setIsLoading(false);
94
+ }
95
+ }, []);
96
+ const getOffer = useCallback((offerId) => wrap(async () => {
97
+ const o = await client.offers.getOffer(offerId);
98
+ setOffer(o);
99
+ return o;
100
+ }), [client, wrap]);
101
+ const listOffers = useCallback((opts) => client.offers.listOffers(opts), [client]);
102
+ const previewOffer = useCallback((opts) => wrap(async () => {
103
+ const p = await client.offers.previewOffer(opts);
104
+ setPreview(p);
105
+ return p;
106
+ }), [client, wrap]);
107
+ const payPreviewedOffer = useCallback((opts) => wrap(() => client.offers.payPreviewedOffer(opts)), [client, wrap]);
108
+ const processOfferPayment = useCallback(async (opts) => {
109
+ setIsLoading(true);
110
+ setError(null);
111
+ try {
112
+ const result = await client.offers.processOfferPayment(opts);
113
+ if (result.status === 'requires_redirect') {
114
+ if (result.method === 'POST' && result.postData) {
115
+ const form = document.createElement('form');
116
+ form.method = 'POST';
117
+ form.action = result.redirectUrl;
118
+ for (const [key, value] of Object.entries(result.postData)) {
119
+ const input = document.createElement('input');
120
+ input.type = 'hidden';
121
+ input.name = key;
122
+ input.value = value;
123
+ form.appendChild(input);
124
+ }
125
+ document.body.appendChild(form);
126
+ form.submit();
127
+ }
128
+ else {
129
+ window.location.href = result.redirectUrl;
130
+ }
131
+ return result;
132
+ }
133
+ if (result.status === 'succeeded') {
134
+ optionsRef.current?.onOfferAccepted?.(result);
135
+ }
136
+ else if (result.status === 'failed') {
137
+ setError(new Error(result.error));
138
+ optionsRef.current?.onOfferDeclined?.(result);
139
+ }
140
+ return result;
141
+ }
142
+ catch (err) {
143
+ const e = err instanceof Error ? err : new Error(String(err));
144
+ setError(e);
145
+ return { status: 'failed', error: e.message };
146
+ }
147
+ finally {
148
+ setIsLoading(false);
149
+ }
150
+ }, [client]);
151
+ const toggleOrderBump = useCallback((opts) => client.offers.toggleOrderBump(opts), [client]);
152
+ const listPostPurchaseOffers = useCallback((orderId) => client.offers.listPostPurchaseOffers(orderId), [client]);
153
+ const acceptPostPurchaseOffer = useCallback((opts) => wrap(() => client.offers.acceptPostPurchaseOffer(opts)), [client, wrap]);
154
+ const declinePostPurchaseOffer = useCallback((opts) => wrap(() => client.offers.declinePostPurchaseOffer(opts)), [client, wrap]);
155
+ return {
156
+ offer,
157
+ preview,
158
+ isLoading,
159
+ error,
160
+ getOffer,
161
+ listOffers,
162
+ previewOffer,
163
+ processOfferPayment,
164
+ payPreviewedOffer,
165
+ toggleOrderBump,
166
+ listPostPurchaseOffers,
167
+ acceptPostPurchaseOffer,
168
+ declinePostPurchaseOffer,
169
+ };
170
+ }
171
+ //# sourceMappingURL=useOffers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOffers.js","sourceRoot":"","sources":["../../../src/react/hooks/useOffers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import type { PaymentSetupConfig, ExpressMethods, StoreConfig, PayResult, PayOptions, PaymentStatus, ProcessPaymentOptions, ProcessPaymentResult } from '../../core/types.js';
2
+ import type { ApplePayContact, GooglePayContact } from '../../core/helpers/walletContact.js';
3
+ export interface UsePaymentOptions {
4
+ /**
5
+ * Called when a payment succeeds (including after 3DS redirect return).
6
+ * Use this to navigate to a confirmation page.
7
+ */
8
+ onPaymentSuccess?: (result: ProcessPaymentResult & {
9
+ status: 'succeeded';
10
+ }) => void;
11
+ /**
12
+ * Called when a payment fails (including after redirect return).
13
+ */
14
+ onPaymentFailed?: (result: ProcessPaymentResult & {
15
+ status: 'failed';
16
+ }) => void;
17
+ /**
18
+ * Explicit paymentSetupConfig override.
19
+ * When provided, the SDK skips both __TGD_STEP_CONFIG__ detection and the API call.
20
+ * Useful when a developer fetches the config from their own backend.
21
+ */
22
+ paymentSetupConfig?: PaymentSetupConfig;
23
+ }
24
+ export interface UsePaymentReturn {
25
+ /** Full payment setup config (all methods with their enabled/disabled state). */
26
+ paymentSetup: PaymentSetupConfig | null;
27
+ /** Express methods (Apple Pay, Google Pay, etc.) with browser availability. */
28
+ expressMethods: ExpressMethods | null;
29
+ /** Store-level config (3DS flags, etc.). */
30
+ storeConfig: StoreConfig | null;
31
+ /** Whether a payment is currently being processed (including polling after redirect). */
32
+ isProcessing: boolean;
33
+ /** Last payment result. */
34
+ result: PayResult | null;
35
+ /** Last error. */
36
+ error: Error | null;
37
+ /**
38
+ * Load payment setup for a checkout session. Call this once when the session is ready.
39
+ * Optionally pass `paymentSetupConfig` to override auto-detection.
40
+ */
41
+ loadPaymentSetup: (checkoutSessionId: string, opts?: {
42
+ paymentSetupConfig?: PaymentSetupConfig;
43
+ }) => Promise<void>;
44
+ /**
45
+ * **Recommended**. Tokenize + pay + handle 3DS/redirects + poll — all in one call.
46
+ *
47
+ * - If the payment succeeds immediately, resolves with `{ status: 'succeeded' }`.
48
+ * - If 3DS redirect is needed, automatically redirects the browser.
49
+ * When the user comes back, the hook auto-detects the return and polls.
50
+ * - If the payment fails, resolves with `{ status: 'failed', error: '...' }`.
51
+ */
52
+ processPayment: (opts: ProcessPaymentOptions) => Promise<ProcessPaymentResult>;
53
+ /** Low-level pay (returns raw API response, no automatic action handling). */
54
+ pay: (opts: PayOptions) => Promise<PayResult>;
55
+ /**
56
+ * Tokenize a card (returns tagadaToken). Requires @tagadapay/core-js.
57
+ *
58
+ * PCI note: card data passes through your JS environment.
59
+ * You are responsible for PCI DSS SAQ-A-EP compliance.
60
+ */
61
+ tokenizeCard: (card: {
62
+ cardNumber: string;
63
+ expiryDate: string;
64
+ cvc: string;
65
+ cardholderName?: string;
66
+ }) => Promise<{
67
+ tagadaToken: string;
68
+ rawToken: Record<string, unknown>;
69
+ }>;
70
+ /**
71
+ * Process Apple Pay. Pass the contacts from `onpaymentauthorized` so the
72
+ * address approved in the wallet sheet reaches the order (#TAG-1989).
73
+ */
74
+ processApplePay: (opts: {
75
+ checkoutSessionId: string;
76
+ applePayToken: unknown;
77
+ billingContact?: ApplePayContact | null;
78
+ shippingContact?: ApplePayContact | null;
79
+ }) => Promise<PayResult>;
80
+ /** Process Google Pay. Pass the wallet addresses for the same reason. */
81
+ processGooglePay: (opts: {
82
+ checkoutSessionId: string;
83
+ googlePayToken: string;
84
+ billingAddress?: GooglePayContact | null;
85
+ shippingAddress?: GooglePayContact | null;
86
+ email?: string;
87
+ }) => Promise<PayResult>;
88
+ /** Process redirect-based APM (Klarna, iDEAL, etc.). */
89
+ processApm: (opts: {
90
+ checkoutSessionId: string;
91
+ paymentMethod: string;
92
+ processorId: string;
93
+ }) => Promise<PayResult>;
94
+ /** Poll a payment until terminal status. */
95
+ pollStatus: (paymentId: string) => Promise<PaymentStatus>;
96
+ }
97
+ /**
98
+ * React hook for payment processing.
99
+ *
100
+ * Handles the full payment lifecycle including 3DS redirects and return-URL detection.
101
+ *
102
+ * @example
103
+ * ```tsx
104
+ * const { processPayment, isProcessing, error } = usePayment({
105
+ * onPaymentSuccess: (result) => router.push('/confirmation'),
106
+ * onPaymentFailed: (result) => toast.error(result.error),
107
+ * });
108
+ *
109
+ * // On submit — one function handles everything
110
+ * const result = await processPayment({
111
+ * checkoutSessionId: session.id,
112
+ * tagadaToken,
113
+ * });
114
+ * ```
115
+ */
116
+ export declare function usePayment(options?: UsePaymentOptions): UsePaymentReturn;
117
+ //# sourceMappingURL=usePayment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePayment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/usePayment.ts"],"names":[],"mappings":"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"}