@tagadapay/headless-sdk 1.6.0 → 1.8.0-rc.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 (125) hide show
  1. package/README.md +1 -186
  2. package/package.json +6 -11
  3. package/dist/core/client.d.ts +0 -54
  4. package/dist/core/client.d.ts.map +0 -1
  5. package/dist/core/client.js +0 -67
  6. package/dist/core/client.js.map +0 -1
  7. package/dist/core/errors.d.ts +0 -46
  8. package/dist/core/errors.d.ts.map +0 -1
  9. package/dist/core/errors.js +0 -57
  10. package/dist/core/errors.js.map +0 -1
  11. package/dist/core/helpers/autocomplete.d.ts +0 -89
  12. package/dist/core/helpers/autocomplete.d.ts.map +0 -1
  13. package/dist/core/helpers/autocomplete.js +0 -186
  14. package/dist/core/helpers/autocomplete.js.map +0 -1
  15. package/dist/core/helpers/countries.d.ts +0 -45
  16. package/dist/core/helpers/countries.d.ts.map +0 -1
  17. package/dist/core/helpers/countries.js +0 -65
  18. package/dist/core/helpers/countries.js.map +0 -1
  19. package/dist/core/helpers/currency.d.ts +0 -26
  20. package/dist/core/helpers/currency.d.ts.map +0 -1
  21. package/dist/core/helpers/currency.js +0 -72
  22. package/dist/core/helpers/currency.js.map +0 -1
  23. package/dist/core/helpers/index.d.ts +0 -5
  24. package/dist/core/helpers/index.d.ts.map +0 -1
  25. package/dist/core/helpers/index.js +0 -5
  26. package/dist/core/helpers/index.js.map +0 -1
  27. package/dist/core/helpers/iso3166.d.ts +0 -28
  28. package/dist/core/helpers/iso3166.d.ts.map +0 -1
  29. package/dist/core/helpers/iso3166.js +0 -84
  30. package/dist/core/helpers/iso3166.js.map +0 -1
  31. package/dist/core/http.d.ts +0 -27
  32. package/dist/core/http.d.ts.map +0 -1
  33. package/dist/core/http.js +0 -116
  34. package/dist/core/http.js.map +0 -1
  35. package/dist/core/index.d.ts +0 -12
  36. package/dist/core/index.d.ts.map +0 -1
  37. package/dist/core/index.js +0 -11
  38. package/dist/core/index.js.map +0 -1
  39. package/dist/core/modules/catalog.d.ts +0 -27
  40. package/dist/core/modules/catalog.d.ts.map +0 -1
  41. package/dist/core/modules/catalog.js +0 -38
  42. package/dist/core/modules/catalog.js.map +0 -1
  43. package/dist/core/modules/checkout.d.ts +0 -249
  44. package/dist/core/modules/checkout.d.ts.map +0 -1
  45. package/dist/core/modules/checkout.js +0 -448
  46. package/dist/core/modules/checkout.js.map +0 -1
  47. package/dist/core/modules/customer.d.ts +0 -33
  48. package/dist/core/modules/customer.d.ts.map +0 -1
  49. package/dist/core/modules/customer.js +0 -53
  50. package/dist/core/modules/customer.js.map +0 -1
  51. package/dist/core/modules/offers.d.ts +0 -137
  52. package/dist/core/modules/offers.d.ts.map +0 -1
  53. package/dist/core/modules/offers.js +0 -141
  54. package/dist/core/modules/offers.js.map +0 -1
  55. package/dist/core/modules/payment.d.ts +0 -298
  56. package/dist/core/modules/payment.d.ts.map +0 -1
  57. package/dist/core/modules/payment.js +0 -701
  58. package/dist/core/modules/payment.js.map +0 -1
  59. package/dist/core/types.d.ts +0 -460
  60. package/dist/core/types.d.ts.map +0 -1
  61. package/dist/core/types.js +0 -5
  62. package/dist/core/types.js.map +0 -1
  63. package/dist/index.d.ts.map +0 -1
  64. package/dist/index.js.map +0 -1
  65. package/dist/react/hooks/useCatalog.d.ts +0 -25
  66. package/dist/react/hooks/useCatalog.d.ts.map +0 -1
  67. package/dist/react/hooks/useCatalog.js +0 -58
  68. package/dist/react/hooks/useCatalog.js.map +0 -1
  69. package/dist/react/hooks/useCheckout.d.ts +0 -58
  70. package/dist/react/hooks/useCheckout.d.ts.map +0 -1
  71. package/dist/react/hooks/useCheckout.js +0 -168
  72. package/dist/react/hooks/useCheckout.js.map +0 -1
  73. package/dist/react/hooks/useCustomer.d.ts +0 -28
  74. package/dist/react/hooks/useCustomer.d.ts.map +0 -1
  75. package/dist/react/hooks/useCustomer.js +0 -77
  76. package/dist/react/hooks/useCustomer.js.map +0 -1
  77. package/dist/react/hooks/useGoogleAutocomplete.d.ts +0 -26
  78. package/dist/react/hooks/useGoogleAutocomplete.d.ts.map +0 -1
  79. package/dist/react/hooks/useGoogleAutocomplete.js +0 -70
  80. package/dist/react/hooks/useGoogleAutocomplete.js.map +0 -1
  81. package/dist/react/hooks/useISOData.d.ts +0 -23
  82. package/dist/react/hooks/useISOData.d.ts.map +0 -1
  83. package/dist/react/hooks/useISOData.js +0 -63
  84. package/dist/react/hooks/useISOData.js.map +0 -1
  85. package/dist/react/hooks/useOffers.d.ts +0 -134
  86. package/dist/react/hooks/useOffers.d.ts.map +0 -1
  87. package/dist/react/hooks/useOffers.js +0 -171
  88. package/dist/react/hooks/useOffers.js.map +0 -1
  89. package/dist/react/hooks/usePayment.d.ts +0 -108
  90. package/dist/react/hooks/usePayment.d.ts.map +0 -1
  91. package/dist/react/hooks/usePayment.js +0 -233
  92. package/dist/react/hooks/usePayment.js.map +0 -1
  93. package/dist/react/index.d.ts +0 -20
  94. package/dist/react/index.d.ts.map +0 -1
  95. package/dist/react/index.js +0 -11
  96. package/dist/react/index.js.map +0 -1
  97. package/dist/react/internal/redirectGuard.d.ts +0 -9
  98. package/dist/react/internal/redirectGuard.d.ts.map +0 -1
  99. package/dist/react/internal/redirectGuard.js +0 -25
  100. package/dist/react/internal/redirectGuard.js.map +0 -1
  101. package/dist/react/provider.d.ts +0 -31
  102. package/dist/react/provider.d.ts.map +0 -1
  103. package/dist/react/provider.js +0 -32
  104. package/dist/react/provider.js.map +0 -1
  105. package/dist/stripe/StripeExpressButton.d.ts +0 -30
  106. package/dist/stripe/StripeExpressButton.d.ts.map +0 -1
  107. package/dist/stripe/StripeExpressButton.js +0 -32
  108. package/dist/stripe/StripeExpressButton.js.map +0 -1
  109. package/dist/stripe/StripeExpressCheckout.d.ts +0 -98
  110. package/dist/stripe/StripeExpressCheckout.d.ts.map +0 -1
  111. package/dist/stripe/StripeExpressCheckout.js +0 -198
  112. package/dist/stripe/StripeExpressCheckout.js.map +0 -1
  113. package/dist/stripe/index.d.ts +0 -8
  114. package/dist/stripe/index.d.ts.map +0 -1
  115. package/dist/stripe/index.js +0 -15
  116. package/dist/stripe/index.js.map +0 -1
  117. package/dist/stripe/useStripeExpress.d.ts +0 -54
  118. package/dist/stripe/useStripeExpress.d.ts.map +0 -1
  119. package/dist/stripe/useStripeExpress.js +0 -126
  120. package/dist/stripe/useStripeExpress.js.map +0 -1
  121. package/dist/tagada-headless-react.min.js +0 -8
  122. package/dist/tagada-headless-react.min.js.map +0 -7
  123. package/dist/tagada-headless.js +0 -2070
  124. package/dist/tagada-headless.min.js +0 -8
  125. package/dist/tagada-headless.min.js.map +0 -7
@@ -1,54 +0,0 @@
1
- import type { ExpressMethods, PaymentStatus, PaymentSetupConfig } from '../core/types.js';
2
- export interface UseStripeExpressOptions {
3
- checkoutSessionId: string;
4
- amount: number;
5
- currency: string;
6
- onSuccess?: (result: {
7
- payment: PaymentStatus;
8
- order?: {
9
- id: string;
10
- checkoutSessionId?: string;
11
- };
12
- }) => void;
13
- onError?: (error: string) => void;
14
- onCancel?: () => void;
15
- /** Override payment setup config (skips API discovery). */
16
- paymentSetupConfig?: PaymentSetupConfig;
17
- }
18
- export interface UseStripeExpressReturn {
19
- /** Attach this ref to a <div> — the express buttons will mount inside it. */
20
- containerRef: React.RefObject<HTMLDivElement | null>;
21
- /** True once the Stripe element has rendered at least one wallet button. */
22
- isReady: boolean;
23
- /** True while a payment is being confirmed. */
24
- isProcessing: boolean;
25
- /** Discovered express methods (null while loading). */
26
- expressMethods: ExpressMethods | null;
27
- /** Update the displayed amount after cart changes. */
28
- updateAmount: (amount: number, currency?: string) => void;
29
- }
30
- /**
31
- * React hook that mounts the Stripe Express Checkout Element into a ref'd container.
32
- *
33
- * Handles the full lifecycle: discover config -> load Stripe -> mount ECE ->
34
- * onConfirm -> processStripeExpress -> stripe.confirmPayment -> poll -> callbacks.
35
- *
36
- * @example
37
- * ```tsx
38
- * import { useStripeExpress } from '@tagadapay/headless-sdk/stripe';
39
- *
40
- * function ExpressSection({ sessionId, totals }) {
41
- * const { containerRef, isReady } = useStripeExpress({
42
- * checkoutSessionId: sessionId,
43
- * amount: totals.total,
44
- * currency: totals.currency,
45
- * onSuccess: () => router.push('/confirmation'),
46
- * onError: (msg) => toast.error(msg),
47
- * });
48
- *
49
- * return <div ref={containerRef} style={{ display: isReady ? 'block' : 'none' }} />;
50
- * }
51
- * ```
52
- */
53
- export declare function useStripeExpress(opts: UseStripeExpressOptions): UseStripeExpressReturn;
54
- //# sourceMappingURL=useStripeExpress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStripeExpress.d.ts","sourceRoot":"","sources":["../../src/stripe/useStripeExpress.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE1F,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7G,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,2DAA2D;IAC3D,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,6EAA6E;IAC7E,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACrD,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,YAAY,EAAE,OAAO,CAAC;IACtB,uDAAuD;IACvD,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IACtC,sDAAsD;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,sBAAsB,CAoFtF"}
@@ -1,126 +0,0 @@
1
- import { useState, useRef, useEffect, useCallback } from 'react';
2
- import { useHeadlessClient } from '../react/provider.js';
3
- import { StripeExpressCheckout } from './StripeExpressCheckout.js';
4
- /**
5
- * React hook that mounts the Stripe Express Checkout Element into a ref'd container.
6
- *
7
- * Handles the full lifecycle: discover config -> load Stripe -> mount ECE ->
8
- * onConfirm -> processStripeExpress -> stripe.confirmPayment -> poll -> callbacks.
9
- *
10
- * @example
11
- * ```tsx
12
- * import { useStripeExpress } from '@tagadapay/headless-sdk/stripe';
13
- *
14
- * function ExpressSection({ sessionId, totals }) {
15
- * const { containerRef, isReady } = useStripeExpress({
16
- * checkoutSessionId: sessionId,
17
- * amount: totals.total,
18
- * currency: totals.currency,
19
- * onSuccess: () => router.push('/confirmation'),
20
- * onError: (msg) => toast.error(msg),
21
- * });
22
- *
23
- * return <div ref={containerRef} style={{ display: isReady ? 'block' : 'none' }} />;
24
- * }
25
- * ```
26
- */
27
- export function useStripeExpress(opts) {
28
- const client = useHeadlessClient();
29
- const containerRef = useRef(null);
30
- const eceRef = useRef(null);
31
- const [isReady, setIsReady] = useState(false);
32
- const [isProcessing, setIsProcessing] = useState(false);
33
- const [expressMethods, setExpressMethods] = useState(null);
34
- const callbacksRef = useRef(opts);
35
- callbacksRef.current = opts;
36
- const { checkoutSessionId, amount, currency, paymentSetupConfig } = opts;
37
- useEffect(() => {
38
- if (!checkoutSessionId || !containerRef.current)
39
- return;
40
- let mounted = true;
41
- let instance = null;
42
- const init = async () => {
43
- const express = await client.payment.getExpressMethods(checkoutSessionId, paymentSetupConfig ? { paymentSetupConfig } : undefined);
44
- if (!mounted)
45
- return;
46
- setExpressMethods(express);
47
- const stripeMethod = findStripeExpressMethod(express);
48
- if (!stripeMethod?.publishableKey || !stripeMethod?.processorId)
49
- return;
50
- instance = new StripeExpressCheckout({
51
- client,
52
- publishableKey: stripeMethod.publishableKey,
53
- processorId: stripeMethod.processorId,
54
- enabledMethods: stripeMethod.enabledMethods,
55
- });
56
- instance.on('ready', () => {
57
- if (mounted)
58
- setIsReady(true);
59
- });
60
- instance.on('success', (result) => {
61
- if (mounted)
62
- setIsProcessing(false);
63
- callbacksRef.current.onSuccess?.(result);
64
- });
65
- instance.on('error', (msg) => {
66
- if (mounted)
67
- setIsProcessing(false);
68
- callbacksRef.current.onError?.(msg);
69
- });
70
- instance.on('cancel', () => {
71
- if (mounted)
72
- setIsProcessing(false);
73
- callbacksRef.current.onCancel?.();
74
- });
75
- eceRef.current = instance;
76
- if (containerRef.current) {
77
- await instance.mount(containerRef.current, {
78
- checkoutSessionId,
79
- amount,
80
- currency,
81
- });
82
- }
83
- };
84
- void init();
85
- return () => {
86
- mounted = false;
87
- instance?.unmount();
88
- eceRef.current = null;
89
- setIsReady(false);
90
- };
91
- }, [client, checkoutSessionId, paymentSetupConfig]); // eslint-disable-line react-hooks/exhaustive-deps
92
- useEffect(() => {
93
- eceRef.current?.updateAmount(amount, currency);
94
- }, [amount, currency]);
95
- const updateAmount = useCallback((newAmount, newCurrency) => {
96
- eceRef.current?.updateAmount(newAmount, newCurrency);
97
- }, []);
98
- return { containerRef, isReady, isProcessing, expressMethods, updateAmount };
99
- }
100
- /**
101
- * Find a Stripe ECE-capable method from the express methods map.
102
- * Returns publishableKey, processorId, and list of enabled sub-methods.
103
- */
104
- function findStripeExpressMethod(express) {
105
- const allMethods = [
106
- { key: 'apple_pay', entry: express.applePay },
107
- { key: 'google_pay', entry: express.googlePay },
108
- { key: 'paypal', entry: express.paypal },
109
- { key: 'link', entry: express.link },
110
- { key: 'klarna_express', entry: express.klarna },
111
- ];
112
- for (const { entry } of allMethods) {
113
- if (entry?.publishableKey && entry.processorId) {
114
- const enabledMethods = allMethods
115
- .filter(({ entry: e }) => e?.available && e.publishableKey === entry.publishableKey)
116
- .map(({ key }) => key);
117
- return {
118
- publishableKey: entry.publishableKey,
119
- processorId: entry.processorId,
120
- enabledMethods,
121
- };
122
- }
123
- }
124
- return null;
125
- }
126
- //# sourceMappingURL=useStripeExpress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useStripeExpress.js","sourceRoot":"","sources":["../../src/stripe/useStripeExpress.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * @tagadapay/headless-sdk v1.6.0
3
- * Headless checkout, payments, offers, and CRM
4
- * @license MIT
5
- */
6
- "use strict";var TagadaHeadlessReactBundle=(()=>{var ze=Object.create;var re=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Ye=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,We=Object.prototype.hasOwnProperty;var M=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var Ze=(n,e)=>{for(var t in e)re(n,t,{get:e[t],enumerable:!0})},Re=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ye(e))!We.call(n,s)&&s!==t&&re(n,s,{get:()=>e[s],enumerable:!(r=Je(e,s))||r.enumerable});return n};var Ae=(n,e,t)=>(t=n!=null?ze(Ve(n)):{},Re(e||!n||!n.__esModule?re(t,"default",{value:n,enumerable:!0}):t,n)),Qe=n=>Re(re({},"__esModule",{value:!0}),n);var at={};Ze(at,{CurrencyUtils:()=>Y,GoogleAutocompleteCore:()=>j,ISODataCore:()=>F,TagadaHeadlessProvider:()=>Te,formatMoney:()=>ve,loadGoogleMapsScript:()=>Q,useCatalog:()=>Me,useCheckout:()=>Le,useCountryOptions:()=>je,useCustomer:()=>Ne,useGoogleAutocomplete:()=>He,useHeadlessClient:()=>$,useISOData:()=>ye,useOffers:()=>_e,usePayment:()=>De,useRegionOptions:()=>Fe});var z=M("react");var G=class extends Error{constructor(e,t,r,s){super(e),this.name="TagadaError",this.code=t,this.statusCode=r,this.details=s}},se=class extends G{constructor(e="Authentication failed. Check your API key or checkout token."){super(e,"auth_error",401),this.name="TagadaAuthError"}},ne=class extends G{constructor(e,t=[]){super(e,"validation_error",422,{errors:t}),this.name="TagadaValidationError",this.errors=t}},oe=class extends G{constructor(e,t){super(`${e} "${t}" not found.`,"not_found",404),this.name="TagadaNotFoundError"}},ie=class extends G{constructor(e=1e3){super(`Rate limited. Retry after ${e}ms.`,"rate_limit",429),this.name="TagadaRateLimitError",this.retryAfterMs=e}};var W=class extends G{constructor(e="Network request failed. Check your connection."){super(e,"network_error"),this.name="TagadaNetworkError"}};var be={production:"https://api.tagada.io",development:"https://api.tagada.dev",local:"http://localhost:3000"},Z=class{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.timeout=e.timeout,this.apiKey=e.apiKey,this.getToken=e.getToken}static resolveBaseUrl(e,t){return t??be[e]??be.production}async request(e,t={}){var h;let{method:r="GET",body:s,headers:i={},params:o,token:a,signal:d}=t,c=`${this.baseUrl}${e}`;if(o){let p=new URLSearchParams;for(let[w,R]of Object.entries(o))R!==void 0&&p.set(w,String(R));let P=p.toString();P&&(c+=`?${P}`)}let m={"Content-Type":"application/json",...i},l=a??this.apiKey??((h=this.getToken)==null?void 0:h.call(this));l&&(m["x-cms-token"]=l);let f=new AbortController,u=setTimeout(()=>f.abort(),this.timeout);try{let p=await fetch(c,{method:r,headers:m,body:s!=null?JSON.stringify(s):void 0,signal:d??f.signal});if(clearTimeout(u),p.ok){let P=await p.text();return P?JSON.parse(P):{}}throw await this.handleErrorResponse(p,e),new G("Unexpected error","unknown",p.status)}catch(p){throw clearTimeout(u),p instanceof G?p:p instanceof DOMException&&p.name==="AbortError"?new W(`Request to ${e} timed out after ${this.timeout}ms.`):new W(p instanceof Error?p.message:"Network request failed.")}}get(e,t){return this.request(e,{...t,method:"GET"})}post(e,t,r){return this.request(e,{...r,method:"POST",body:t})}patch(e,t,r){return this.request(e,{...r,method:"PATCH",body:t})}put(e,t,r){return this.request(e,{...r,method:"PUT",body:t})}delete(e,t){return this.request(e,{...t,method:"DELETE"})}async handleErrorResponse(e,t){let r={};try{r=await e.json()}catch{}let s=r.message??r.error??`Request failed: ${e.status} ${e.statusText} on ${t}`;switch(e.status){case 401:case 403:throw new se(s);case 404:throw new oe(t,"");case 422:{let i=Array.isArray(r.errors)?r.errors:[];throw new ne(s,i)}case 429:{let i=Number(e.headers.get("Retry-After")??"1")*1e3;throw new ie(i)}default:throw new G(s,"api_error",e.status,r)}}};var ae=class{constructor(e,t,r){this.http=e;this.storeId=t;this.onTokenChange=r}async loadSession(e,t,r){var o;t&&(this.sessionToken=t,(o=this.onTokenChange)==null||o.call(this,t));let s={skipAsyncWait:"false"};r!=null&&r.currency&&(s.currency=r.currency);let i=await this.http.get(`/api/v1/checkout-sessions/${e}/v2`,{params:s,token:this.sessionToken});return this.normalizeSession(i)}async createSession(e){var d;let t=e.items.map(c=>({variantId:c.variantId,priceId:c.priceId,quantity:c.quantity})),r={storeId:this.storeId,lineItems:t};e.returnUrl&&(r.returnUrl=e.returnUrl);let s={};e.currency&&(s.currency=e.currency),e.customerEmail&&(s.email=e.customerEmail,s.firstName=e.customerFirstName,s.lastName=e.customerLastName),Object.keys(s).length>0&&(r.customer=s);let i=await this.http.post("/api/v1/checkout/session/init",r),a=new URL(i.checkoutUrl).searchParams.get("token")??"";return this.sessionToken=a,a&&((d=this.onTokenChange)==null||d.call(this,a)),{checkoutUrl:i.checkoutUrl,checkoutToken:i.checkoutToken,sessionToken:a,customerId:i.customerId}}async createSessionUrl(e){let t=await this.createSession({items:e.items,currency:e.currency,returnUrl:e.returnUrl,customerEmail:e.customerEmail,customerFirstName:e.customerFirstName,customerLastName:e.customerLastName}),r=e.origin??(typeof window<"u"?window.location.origin:""),s=e.checkoutPath??"/checkout",i=new URLSearchParams({checkoutToken:t.checkoutToken,sessionToken:t.sessionToken}),o=`${r}${s}?${i.toString()}`;return{...t,url:o}}static parseTokensFromUrl(e){if(typeof e>"u"&&typeof window>"u")return null;let t=e??window.location.href,r;try{r=new URL(t)}catch{return null}let s=r.searchParams.get("checkoutToken");if(!s)return null;let i=r.searchParams.get("sessionToken")??r.searchParams.get("token")??"";return{checkoutToken:s,sessionToken:i}}async updateCart(e,t){return this.http.post(`/api/v1/checkout-sessions/${e}/line-items`,{items:t},{token:this.sessionToken})}async updateCustomer(e,t){t.email&&(this.customerEmail=t.email),t.firstName&&(this.customerFirstName=t.firstName),t.lastName&&(this.customerLastName=t.lastName),t.phone&&(this.customerPhone=t.phone)}async updateAddress(e,t){let r=this.mapAddress(t.shippingAddress),s=this.mapAddress(t.billingAddress),i=r??s??{},o=s??r,a=!!(t.billingAddress&&t.shippingAddress);await this.http.post(`/api/v1/checkout-sessions/${e}/customer-and-session-info`,{checkoutSessionId:e,customerData:{email:this.customerEmail},shippingAddress:i,billingAddress:o??{},differentBillingAddress:a},{token:this.sessionToken})}async updateCustomerAndAddress(e,t){t.customer.email&&(this.customerEmail=t.customer.email),t.customer.firstName&&(this.customerFirstName=t.customer.firstName),t.customer.lastName&&(this.customerLastName=t.customer.lastName),t.customer.phone&&(this.customerPhone=t.customer.phone);let r=this.mapAddress(t.shippingAddress),s=this.mapAddress(t.billingAddress),i=r??s??{},o=s??r,a=!!(t.billingAddress&&t.shippingAddress);await this.http.post(`/api/v1/checkout-sessions/${e}/customer-and-session-info`,{checkoutSessionId:e,customerData:{email:this.customerEmail},shippingAddress:i,billingAddress:o??{},differentBillingAddress:a},{token:this.sessionToken})}mapAddress(e){if(e)return Xe({firstName:e.firstName??this.customerFirstName,lastName:e.lastName??this.customerLastName,phone:e.phone??this.customerPhone,address1:e.line1,address2:e.line2,city:e.city,state:e.state,postal:e.postalCode,country:e.country})}async applyPromoCode(e,t){await this.http.post(`/api/v1/checkout-sessions/${e}/promotions/apply`,{checkoutSessionId:e,code:t},{token:this.sessionToken})}async removePromoCode(e,t){let r=t??"default";await this.http.delete(`/api/v1/checkout-sessions/${e}/promotions/${r}`,{token:this.sessionToken})}async getShippingRates(e){return((await this.http.get(`/api/v1/checkout-sessions/${e}/shipping-rates`,{token:this.sessionToken})).rates??[]).map(r=>this.normalizeShippingRate(r))}normalizeShippingRate(e){return{id:e.id,name:e.name??e.shippingRateName??"",description:e.description??void 0,amount:e.amount??0,currency:e.currency??"USD",estimatedDays:e.estimatedDays??e.estimatedDeliveryTime??void 0}}async selectShippingRate(e,t){await this.http.post(`/api/v1/checkout-sessions/${e}/shipping-rate`,{checkoutSessionId:e,shippingRateId:t},{token:this.sessionToken})}normalizeSession(e){var m;let t=e.checkoutSession,r=t.orderSummaries??[],s=e.summary??t.summary??r[0]??{},i=t.sessionLineItems??[],o=t.customer,a=(m=s.currency??t.selectedPresentmentCurrency)==null?void 0:m.toUpperCase(),d=i.map(l=>{let f=l.price,u=l.variant??(f==null?void 0:f.variant)??{},h=l.product??u.product??{},p=(f==null?void 0:f.currencyOptions)??{},P=(a?p[a]:void 0)??p[Object.keys(p)[0]],w=(P==null?void 0:P.amount)??0;return{id:l.id,variantId:l.variantId,priceId:l.priceId,productName:h.name??"",variantName:u.name??"",quantity:l.quantity??1,unitAmount:w,totalAmount:w*(l.quantity??1),currency:a??"USD",imageUrl:u.imageUrl??h.imageUrl??""}}),c=s.items??[];return{id:t.id,storeId:t.storeId,checkoutToken:t.checkoutToken,currency:a??"USD",items:d,totals:{subtotal:s.subtotalAmount??0,discount:s.totalPromotionAmount??0,shipping:s.shippingCost??0,tax:s.totalTaxAmount??0,total:s.totalAmount??c.reduce((l,f)=>l+(f.amount??0),0),currency:a??"USD"},customer:o?{id:o.id,email:o.email,firstName:o.firstName,lastName:o.lastName,phone:o.phone}:void 0,shippingAddress:this.normalizeAddress(t.shippingAddress),billingAddress:this.normalizeAddress(t.billingAddress),selectedShippingRateId:t.shippingRateId??null,metadata:t.metadata}}normalizeAddress(e){if(!e||typeof e!="object")return;let t=e,r={firstName:t.firstName,lastName:t.lastName,line1:t.line1??t.address1,line2:t.line2??t.address2,city:t.city,state:t.state,postalCode:t.postalCode??t.postal,country:t.country,phone:t.phone};return Object.values(r).some(s=>s!==void 0&&s!=="")?r:void 0}};function Xe(n){let e={};for(let[t,r]of Object.entries(n))r!=null&&r!==""&&(e[t]=r);return Object.keys(e).length>0?e:void 0}var ce=class{constructor(e,t,r){this.http=e;this.storeId=t;this.environment=r}async getPaymentSetup(e,t){if(t!=null&&t.paymentSetupConfig)return t.paymentSetupConfig;let r=this.readInjectedStepConfig();if(r)return r;let s=await this.http.get("/api/v1/payment-methods",{params:{checkoutSessionId:e}}),i={};for(let o of s.methods??[]){let a=o.provider?`${o.method}:${o.provider}`:o.method;i[a]=o}return i}async getExpressMethods(e,t){var i,o,a,d,c,m,l,f,u;let r=await this.getPaymentSetup(e,t),s={};for(let[h,p]of Object.entries(r)){if(!p.enabled)continue;if(h.startsWith("express_checkout:")&&p.methods){let R={available:!0,processorId:p.processorId,publishableKey:p.publishableKey,metadata:p.metadata};if((i=p.methods.apple_pay)!=null&&i.enabled){let I=typeof window<"u"&&"ApplePaySession"in window&&((a=(o=window.ApplePaySession)==null?void 0:o.canMakePayments)==null?void 0:a.call(o));s.applePay={...R,type:"apple_pay",available:!!I}}(d=p.methods.google_pay)!=null&&d.enabled&&(s.googlePay={...R,type:"google_pay"}),(c=p.methods.paypal)!=null&&c.enabled&&(s.paypal={...R,type:"paypal"}),(m=p.methods.link)!=null&&m.enabled&&(s.link={...R,type:"link"}),(l=p.methods.klarna_express)!=null&&l.enabled&&(s.klarna={...R,type:"klarna_express"});continue}if(!p.express)continue;let P=p.method,w={type:P,available:!0,processorId:p.processorId,publishableKey:p.publishableKey,metadata:p.metadata};if(P==="apple_pay"||p.type==="apple_pay"){let R=typeof window<"u"&&"ApplePaySession"in window&&((u=(f=window.ApplePaySession)==null?void 0:f.canMakePayments)==null?void 0:u.call(f));s.applePay={...w,available:!!R}}else P==="google_pay"||p.type==="google_pay"?s.googlePay=w:P==="paypal"?s.paypal=w:P==="klarna"||P==="klarna_express"?s.klarna=w:P==="link"&&(s.link=w)}return s}async getStoreConfig(){let e=await this.http.get("/api/v1/checkout/config",{params:{storeId:this.storeId}});return e.config??e}async getEnabledMethods(e,t){let r=await this.getPaymentSetup(e,t);return Object.entries(r).filter(([,s])=>s.enabled).map(([s])=>s)}async tokenizeCard(e){let t=await this.loadCoreJs(),r=new t.Tokenizer({environment:this.environment});await r.initialize();let s={cardNumber:e.cardNumber,expiryDate:e.expiryDate,cvc:e.cvc};e.cardholderName&&(s.cardholderName=e.cardholderName);let i=await r.tokenizeCardRaw(s);return{tagadaToken:t.createTagadaToken(i,r.getProvider().getProviderName()),rawToken:i}}async createInstrument(e){return this.http.post("/api/v1/payment/create-instrument-from-token",{tagadaToken:e.tagadaToken})}async create3dsSession(e){return this.http.post("/api/public/v1/threeds/create-session",{provider:e.provider??"basis_theory",storeId:this.storeId,paymentInstrumentId:e.paymentInstrumentId,sessionData:e.sessionData})}async pay(e){return e.tagadaToken&&!e.paymentInstrumentId?this.http.post("/api/v1/payment/pay-with-token",{tagadaToken:e.tagadaToken,checkoutSessionId:e.checkoutSessionId,returnUrl:e.returnUrl,paymentFlowId:e.paymentFlowId,processorId:e.processorId,paymentMethod:e.paymentMethod,isExpress:e.isExpress,metadata:e.metadata}):this.http.post("/api/public/v1/checkout/pay-v2",{checkoutSessionId:e.checkoutSessionId,paymentInstrumentId:e.paymentInstrumentId,storeId:this.storeId,paymentFlowId:e.paymentFlowId,threedsSessionId:e.threedsSessionId,processorId:e.processorId,paymentMethod:e.paymentMethod,isExpress:e.isExpress,metadata:e.metadata})}async payDirect(e){return this.http.post("/api/public/v1/checkout/pay-v2",{checkoutSessionId:e.checkoutSessionId,paymentInstrumentId:e.paymentInstrumentId??"",storeId:this.storeId,paymentFlowId:e.paymentFlowId,processorId:e.processorId,paymentMethod:e.paymentMethod,isExpress:e.isExpress,threedsSessionId:e.threedsSessionId})}async processApplePay(e){let t=await this.loadCoreJs(),r=new t.Tokenizer({environment:this.environment});await r.initialize();let{tagadaToken:s}=await r.tokenizeApplePay(e.applePayToken);return this.pay({checkoutSessionId:e.checkoutSessionId,tagadaToken:s,paymentFlowId:e.paymentFlowId,processorId:e.processorId,paymentMethod:"apple_pay",isExpress:!0})}async processGooglePay(e){let t=await this.loadCoreJs(),r=new t.Tokenizer({environment:this.environment});await r.initialize();let{tagadaToken:s}=await r.tokenizeGooglePay(e.googlePayToken);return this.pay({checkoutSessionId:e.checkoutSessionId,tagadaToken:s,paymentFlowId:e.paymentFlowId,processorId:e.processorId,paymentMethod:"google_pay",isExpress:!0})}async processApm(e){return this.payDirect({checkoutSessionId:e.checkoutSessionId,paymentMethod:e.paymentMethod,processorId:e.processorId,paymentFlowId:e.paymentFlowId})}async processStripeExpress(e){return this.payDirect({checkoutSessionId:e.checkoutSessionId,processorId:e.processorId,paymentMethod:e.paymentMethod,isExpress:!0})}async processPayment(e){!e.returnUrl&&typeof window<"u"&&(e={...e,returnUrl:window.location.href});let t=await this.pay(e);return this.finalize(t,{returnUrl:e.returnUrl})}async finalize(e,t){var i,o;let r=e.payment,s=(t==null?void 0:t.returnUrl)??(typeof window<"u"?window.location.href:void 0);return r.status==="succeeded"?{status:"succeeded",payment:r,order:e.order}:r.status==="failed"||r.status==="declined"?{status:"failed",error:((i=r.requireActionData)==null?void 0:i.message)||((o=r.requireActionData)==null?void 0:o.errorCode)||`Payment ${r.status}`,payment:r}:r.requireAction&&r.requireAction!=="none"&&r.requireActionData?this.handlePaymentAction(r,{returnUrl:s}):this.pollUntilDone(r.id)}async resumeAfterRedirect(e){return this.pollUntilDone(e)}async maybeResumeFromUrl(e){if(typeof window>"u"&&!(e!=null&&e.url))return null;let t=(e==null?void 0:e.url)??window.location.href,r;try{r=new URL(t)}catch{return null}let s=r.searchParams.get("paymentAction"),i=r.searchParams.get("paymentActionStatus"),o=r.searchParams.get("paymentId");if(s!=="requireAction"||i!=="completed"||!o)return null;let a=await this.resumeAfterRedirect(o);if((e==null?void 0:e.cleanUrl)!==!1&&typeof window<"u"&&!(e!=null&&e.url)){let d=new URLSearchParams(window.location.search);["paymentAction","paymentActionStatus","paymentId","payment_intent","payment_intent_client_secret","source_type","redirect_status","sessionId"].forEach(m=>d.delete(m));let c=d.toString();try{window.history.replaceState({},document.title,window.location.pathname+(c?"?"+c:""))}catch{}}return a}async getPaymentStatus(e){return this.http.get(`/api/v1/payments/${e}`)}async pollPaymentStatus(e,t){let r=(t==null?void 0:t.intervalMs)??1500,s=(t==null?void 0:t.timeoutMs)??6e4,i=Date.now();for(;Date.now()-i<s;){let o=await this.getPaymentStatus(e);if(o.status==="succeeded"||o.status==="failed"||o.status==="declined")return o;await new Promise(a=>setTimeout(a,r))}throw new Error(`Payment ${e} did not reach terminal status within ${s}ms.`)}async completeAfter3ds(e){return this.http.post("/api/v1/payments/complete-after-3ds",{paymentId:e})}async markActionProcessed(e){try{await this.http.post("/api/v1/payments/require-action/processed",{paymentId:e})}catch{}}async handlePaymentAction(e,t){let r=e.requireActionData;switch(await this.markActionProcessed(e.id),r.type){case"threeds_auth":return this.handleThreedsAuth(e,t);case"processor_auth":case"redirect_to_payment":return this.extractRedirect(e,r);case"redirect":return this.extractRedirect(e,r);case"error":return{status:"failed",error:r.message||r.errorCode||"Payment failed",payment:e};default:return this.extractRedirect(e,r)}}extractRedirect(e,t){var i,o;let r=(i=t.metadata)==null?void 0:i.redirect,s=(r==null?void 0:r.redirectUrl)||t.redirectUrl;return s?{status:"requires_redirect",redirectUrl:s,method:((o=r==null?void 0:r.method)==null?void 0:o.toUpperCase())||"GET",postData:r==null?void 0:r.data,paymentId:e.id}:{status:"failed",error:`Payment requires action (${t.type}) but no redirect URL was provided`,payment:e}}async handleThreedsAuth(e,t){var i,o;let r=(o=(i=e.requireActionData)==null?void 0:i.metadata)==null?void 0:o.threedsSession;if(!(r!=null&&r.externalSessionId))return this.extractRedirect(e,e.requireActionData);let s;try{s=await import("@tagadapay/core-js")}catch{return r.acsChallengeUrl?{status:"requires_redirect",redirectUrl:r.acsChallengeUrl,paymentId:e.id}:this.extractRedirect(e,e.requireActionData)}try{let a=new s.ThreedsManager({provider:"basis_theory"});return await a.initialize({apiKey:void 0}),await a.startChallenge({sessionId:r.externalSessionId,acsChallengeUrl:r.acsChallengeUrl,acsTransactionId:r.acsTransID,threeDSVersion:r.messageVersion}),await this.completeAfter3ds(e.id),this.pollUntilDone(e.id)}catch{return r.acsChallengeUrl?{status:"requires_redirect",redirectUrl:r.acsChallengeUrl,paymentId:e.id}:{status:"failed",error:"3D Secure authentication failed",payment:e}}}async pollUntilDone(e,t){let r=(t==null?void 0:t.intervalMs)??1500,s=(t==null?void 0:t.timeoutMs)??6e4,i=Date.now(),o=0;for(;Date.now()-i<s;){let a;try{a=await this.getPaymentStatus(e),o=0}catch{if(o++,o>=3)return{status:"failed",error:"Payment verification failed due to network errors"};await new Promise(d=>setTimeout(d,r));continue}if(a.status==="succeeded"||a.status==="pending"&&a.subStatus==="authorized")return{status:"succeeded",payment:a,order:a.order};if(a.status==="failed"||a.status==="declined")return{status:"failed",error:a.status,payment:a};if(a.requireAction&&a.requireAction!=="none"&&a.requireActionData&&!a.requireActionData.processed)return this.handlePaymentAction(a,{});await new Promise(d=>setTimeout(d,r))}return{status:"pending",paymentId:e}}readInjectedStepConfig(){if(typeof window>"u")return null;let e=window.__TGD_STEP_CONFIG__;if(!e)return null;try{let t=typeof e=="string"?JSON.parse(e):e;return(t==null?void 0:t.paymentSetupConfig)??null}catch{return null}}async loadCoreJs(){try{return await import("@tagadapay/core-js")}catch{throw new Error("This method requires @tagadapay/core-js. Install it: npm install @tagadapay/core-js")}}};var ue=class{constructor(e,t,r){this.http=e;this.storeId=t;this.payment=r}async getOffer(e){return this.http.get(`/api/v1/offers/${e}`)}async listOffers(e){var i;let t=`/api/v1/stores/${this.storeId}/offers`,r=[];if(e!=null&&e.type&&r.push(`type=${encodeURIComponent(e.type)}`),(i=e==null?void 0:e.ids)!=null&&i.length)for(let o of e.ids)r.push(`ids=${encodeURIComponent(o)}`);return r.length&&(t+=`?${r.join("&")}`),(await this.http.get(t)).offers??[]}async previewOffer(e){return this.http.post(`/api/v1/offers/${e.offerId}/preview`,{offerId:e.offerId,currency:e.currency??"",lineItems:e.lineItems})}async payPreviewedOffer(e){return this.http.post(`/api/v1/offers/${e.offerId}/pay-preview`,{offerId:e.offerId,currency:e.currency??"",lineItems:e.lineItems,returnUrl:e.returnUrl??(typeof window<"u"?window.location.href:""),mainOrderId:e.mainOrderId,paymentInstrumentId:e.paymentInstrumentId})}async processOfferPayment(e){if(!this.payment)throw new Error("OffersModule: no PaymentModule injected. Use createHeadlessClient() instead of constructing OffersModule directly.");let t=e.returnUrl??(typeof window<"u"?window.location.href:void 0),r=await this.payPreviewedOffer({...e,returnUrl:t});return this.payment.finalize({payment:r.payment,order:r.order},{returnUrl:t})}async toggleOrderBump(e){return this.http.post(`/api/v1/checkout-sessions/${e.checkoutSessionId}/toggle-order-bump`,{orderBumpOfferId:e.orderBumpOfferId,selected:e.selected})}async listPostPurchaseOffers(e){let t=await this.http.get(`/api/v1/post-purchase/${e}/offers`);return Array.isArray(t)?t:[]}async acceptPostPurchaseOffer(e){return this.http.post(`/api/v1/orders/${e.orderId}/post-purchase-offers/${e.offerId}/accept`,{items:e.items??[]})}async declinePostPurchaseOffer(e){return this.http.post(`/api/v1/orders/${e.orderId}/post-purchase-offers/${e.offerId}/decline`)}};var de=class{constructor(e,t){this.http=e;this.storeId=t}async getProfile(e){return(await this.http.get(`/api/v1/customers/${e}`,{params:{storeId:this.storeId}})).customer}async getByEmail(e){try{return(await this.http.get("/api/v1/customers/by-email",{params:{email:e,storeId:this.storeId}})).customer}catch{return null}}async updateProfile(e,t){return(await this.http.patch(`/api/v1/customers/${e}`,{storeId:this.storeId,...t})).customer}async getOrders(e,t){return this.http.get(`/api/v1/customers/${e}/orders`,{params:{storeId:this.storeId,limit:t==null?void 0:t.limit,offset:t==null?void 0:t.offset}})}async getOrder(e){return(await this.http.get(`/api/v1/orders/${e}`,{params:{storeId:this.storeId}})).order}async getSubscriptions(e){return(await this.http.get(`/api/v1/customers/${e}/subscriptions`,{params:{storeId:this.storeId}})).subscriptions}async getSubscription(e){return(await this.http.get(`/api/v1/subscriptions/${e}`,{params:{storeId:this.storeId}})).subscription}};var le=class{constructor(e,t){this.http=e;this.storeId=t}async getProducts(e){var s,i;let t={storeId:this.storeId,includeVariants:!0,includePrices:!0};return(s=e==null?void 0:e.productIds)!=null&&s.length&&(t.productIds=e.productIds),(i=e==null?void 0:e.variantIds)!=null&&i.length&&(t.variantIds=e.variantIds),(await this.http.post("/api/v1/products",t)).items??[]}async getProduct(e){return(await this.getProducts({productIds:[e]}))[0]??null}};var Pe=class{constructor(e){let t=e.environment??"production",r=Z.resolveBaseUrl(t,e.baseUrl);this.config={...e,environment:t,baseUrl:r,timeout:e.timeout??3e4},this.http=new Z({baseUrl:r,timeout:this.config.timeout,apiKey:e.apiKey,getToken:()=>this._sessionToken});let s=i=>{this._sessionToken=i};this.checkout=new ae(this.http,this.config.storeId,s),this.payment=new ce(this.http,this.config.storeId,t),this.offers=new ue(this.http,this.config.storeId,this.payment),this.customer=new de(this.http,this.config.storeId),this.catalog=new le(this.http,this.config.storeId)}setSessionToken(e){this._sessionToken=e}};function Oe(n){return new Pe(n)}var xe=M("react/jsx-runtime"),Ee=(0,z.createContext)(null);function Te({storeId:n,environment:e,apiKey:t,baseUrl:r,config:s,children:i}){let o=(0,z.useMemo)(()=>Oe(s??{storeId:n,environment:e,apiKey:t,baseUrl:r}),[n,e,t,r,s]),a=(0,z.useMemo)(()=>({client:o}),[o]);return(0,xe.jsx)(Ee.Provider,{value:a,children:i})}function $(){let n=(0,z.useContext)(Ee);if(!n)throw new Error("useHeadlessClient must be used within <TagadaHeadlessProvider>");return n.client}var T=M("react");function Le(n,e){let t=$(),[r,s]=(0,T.useState)(null),[i,o]=(0,T.useState)(!1),[a,d]=(0,T.useState)(null),c=(0,T.useCallback)(async()=>{if(n){o(!0),d(null);try{let I=await t.checkout.loadSession(n,e);s(I)}catch(I){d(I instanceof Error?I:new Error(String(I)))}finally{o(!1)}}},[t,n,e]);(0,T.useEffect)(()=>{c()},[c]);let m=(0,T.useCallback)(async I=>{o(!0),d(null);try{let y=await t.checkout.createSession(I),_=new URL(window.location.href);_.searchParams.set("checkoutToken",y.checkoutToken),_.searchParams.set("token",y.sessionToken),window.history.replaceState({},"",_.toString());let k=await t.checkout.loadSession(y.checkoutToken,y.sessionToken);s(k)}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}},[t]),l=(0,T.useCallback)(async I=>{r&&(await t.checkout.updateCart(r.id,I),await c())},[t,r,c]),f=(0,T.useCallback)(async I=>{r&&await t.checkout.updateCustomer(r.id,I)},[t,r]),u=(0,T.useCallback)(async I=>{if(r){o(!0);try{await t.checkout.updateAddress(r.id,I),await c()}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}}},[t,r,c]),h=(0,T.useCallback)(async I=>{if(r){o(!0);try{await t.checkout.updateCustomerAndAddress(r.id,I),await c()}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}}},[t,r,c]),p=(0,T.useCallback)(async I=>{if(r){o(!0);try{await t.checkout.applyPromoCode(r.id,I),await c()}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}}},[t,r,c]),P=(0,T.useCallback)(async I=>{if(r){o(!0);try{await t.checkout.removePromoCode(r.id,I),await c()}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}}},[t,r,c]),w=(0,T.useCallback)(async()=>r?t.checkout.getShippingRates(r.id):[],[t,r]),R=(0,T.useCallback)(async I=>{if(r){o(!0);try{await t.checkout.selectShippingRate(r.id,I),await c()}catch(y){d(y instanceof Error?y:new Error(String(y)))}finally{o(!1)}}},[t,r,c]);return{session:r,isLoading:i,error:a,refresh:c,createSession:m,updateCart:l,updateCustomer:f,updateAddress:u,updateCustomerAndAddress:h,applyPromo:p,removePromo:P,getShippingRates:w,selectShippingRate:R}}var b=M("react");var Ue=new Set;function me(n){return Ue.has(n)?!1:(Ue.add(n),!0)}function De(n){let e=$(),[t,r]=(0,b.useState)(null),[s,i]=(0,b.useState)(null),[o,a]=(0,b.useState)(null),[d,c]=(0,b.useState)(!1),[m,l]=(0,b.useState)(null),[f,u]=(0,b.useState)(null),h=(0,b.useRef)(!1),p=(0,b.useRef)(!1),P=(0,b.useRef)(n);P.current=n,(0,b.useEffect)(()=>{if(typeof window>"u"||p.current)return;let v=new URLSearchParams(window.location.search),g=v.get("paymentAction"),S=v.get("paymentActionStatus"),L=v.get("paymentId");if(g!=="requireAction"||S!=="completed"||!L||(p.current=!0,!me(L)))return;c(!0),u(null),(async()=>{var C,A,q,V;try{let D=await e.payment.resumeAfterRedirect(L),he=new URLSearchParams(window.location.search);["paymentAction","paymentActionStatus","paymentId","payment_intent","payment_intent_client_secret","source_type","redirect_status"].forEach(Be=>he.delete(Be));let Ke=he.toString()?`${window.location.pathname}?${he.toString()}`:window.location.pathname;window.history.replaceState({},document.title,Ke),D.status==="succeeded"?(A=(C=P.current)==null?void 0:C.onPaymentSuccess)==null||A.call(C,D):D.status==="failed"&&(u(new Error(D.error)),(V=(q=P.current)==null?void 0:q.onPaymentFailed)==null||V.call(q,D))}catch(D){u(D instanceof Error?D:new Error(String(D)))}finally{c(!1)}})()},[e]);let w=(0,b.useCallback)(async(v,g)=>{var L;if(h.current)return;h.current=!0;let S=g!=null&&g.paymentSetupConfig?{paymentSetupConfig:g.paymentSetupConfig}:(L=P.current)!=null&&L.paymentSetupConfig?{paymentSetupConfig:P.current.paymentSetupConfig}:void 0;try{let[U,C,A]=await Promise.all([e.payment.getPaymentSetup(v,S),e.payment.getExpressMethods(v,S),e.payment.getStoreConfig()]);r(U),i(C),a(A)}catch(U){h.current=!1,u(U instanceof Error?U:new Error(String(U)))}},[e]),R=(0,b.useCallback)(async v=>{var g,S,L,U;c(!0),u(null);try{let C=await e.payment.processPayment(v);if(C.status==="requires_redirect"){if(C.method==="POST"&&C.postData){let A=document.createElement("form");A.method="POST",A.action=C.redirectUrl;for(let[q,V]of Object.entries(C.postData)){let D=document.createElement("input");D.type="hidden",D.name=q,D.value=V,A.appendChild(D)}document.body.appendChild(A),A.submit()}else window.location.href=C.redirectUrl;return C}return C.status==="succeeded"?(S=(g=P.current)==null?void 0:g.onPaymentSuccess)==null||S.call(g,C):C.status==="failed"&&(u(new Error(C.error)),(U=(L=P.current)==null?void 0:L.onPaymentFailed)==null||U.call(L,C)),C}catch(C){let A=C instanceof Error?C:new Error(String(C));return u(A),{status:"failed",error:A.message}}finally{c(!1)}},[e]),I=(0,b.useCallback)(v=>async()=>{c(!0),u(null);try{return await v()}catch(g){let S=g instanceof Error?g:new Error(String(g));throw u(S),S}finally{c(!1)}},[]),y=(0,b.useCallback)(async v=>{c(!0),u(null);try{let g=await e.payment.pay(v);return l(g),g}catch(g){let S=g instanceof Error?g:new Error(String(g));throw u(S),S}finally{c(!1)}},[e]),_=(0,b.useCallback)(v=>e.payment.tokenizeCard(v),[e]),k=(0,b.useCallback)(async v=>{let S=await I(()=>e.payment.processApplePay(v))();return l(S),S},[e,I]),E=(0,b.useCallback)(async v=>{let S=await I(()=>e.payment.processGooglePay(v))();return l(S),S},[e,I]),K=(0,b.useCallback)(async v=>{let S=await I(()=>e.payment.processApm(v))();return l(S),S},[e,I]),H=(0,b.useCallback)(v=>e.payment.pollPaymentStatus(v),[e]);return{paymentSetup:t,expressMethods:s,storeConfig:o,isProcessing:d,result:m,error:f,loadPaymentSetup:w,processPayment:R,pay:y,tokenizeCard:_,processApplePay:k,processGooglePay:E,processApm:K,pollStatus:H}}var O=M("react");function _e(n){let e=$(),[t,r]=(0,O.useState)(null),[s,i]=(0,O.useState)(null),[o,a]=(0,O.useState)(!1),[d,c]=(0,O.useState)(null),m=(0,O.useRef)(n);m.current=n;let l=(0,O.useRef)(!1);(0,O.useEffect)(()=>{var g;if(typeof window>"u"||(g=m.current)!=null&&g.disableAutoResume||l.current)return;let k=new URLSearchParams(window.location.search),E=k.get("paymentAction"),K=k.get("paymentActionStatus"),H=k.get("paymentId");if(E!=="requireAction"||K!=="completed"||!H||(l.current=!0,!me(H)))return;a(!0),c(null),(async()=>{var S,L,U,C;try{let A=await e.payment.resumeAfterRedirect(H),q=new URLSearchParams(window.location.search);["paymentAction","paymentActionStatus","paymentId","payment_intent","payment_intent_client_secret","source_type","redirect_status"].forEach(D=>q.delete(D));let V=q.toString()?`${window.location.pathname}?${q.toString()}`:window.location.pathname;window.history.replaceState({},document.title,V),A.status==="succeeded"?(L=(S=m.current)==null?void 0:S.onOfferAccepted)==null||L.call(S,A):A.status==="failed"&&(c(new Error(A.error)),(C=(U=m.current)==null?void 0:U.onOfferDeclined)==null||C.call(U,A))}catch(A){c(A instanceof Error?A:new Error(String(A)))}finally{a(!1)}})()},[e]);let f=(0,O.useCallback)(async k=>{a(!0),c(null);try{return await k()}catch(E){let K=E instanceof Error?E:new Error(String(E));throw c(K),K}finally{a(!1)}},[]),u=(0,O.useCallback)(k=>f(async()=>{let E=await e.offers.getOffer(k);return r(E),E}),[e,f]),h=(0,O.useCallback)(k=>e.offers.listOffers(k),[e]),p=(0,O.useCallback)(k=>f(async()=>{let E=await e.offers.previewOffer(k);return i(E),E}),[e,f]),P=(0,O.useCallback)(k=>f(()=>e.offers.payPreviewedOffer(k)),[e,f]),w=(0,O.useCallback)(async k=>{var E,K,H,v;a(!0),c(null);try{let g=await e.offers.processOfferPayment(k);if(g.status==="requires_redirect"){if(g.method==="POST"&&g.postData){let S=document.createElement("form");S.method="POST",S.action=g.redirectUrl;for(let[L,U]of Object.entries(g.postData)){let C=document.createElement("input");C.type="hidden",C.name=L,C.value=U,S.appendChild(C)}document.body.appendChild(S),S.submit()}else window.location.href=g.redirectUrl;return g}return g.status==="succeeded"?(K=(E=m.current)==null?void 0:E.onOfferAccepted)==null||K.call(E,g):g.status==="failed"&&(c(new Error(g.error)),(v=(H=m.current)==null?void 0:H.onOfferDeclined)==null||v.call(H,g)),g}catch(g){let S=g instanceof Error?g:new Error(String(g));return c(S),{status:"failed",error:S.message}}finally{a(!1)}},[e]),R=(0,O.useCallback)(k=>e.offers.toggleOrderBump(k),[e]),I=(0,O.useCallback)(k=>e.offers.listPostPurchaseOffers(k),[e]),y=(0,O.useCallback)(k=>f(()=>e.offers.acceptPostPurchaseOffer(k)),[e,f]),_=(0,O.useCallback)(k=>f(()=>e.offers.declinePostPurchaseOffer(k)),[e,f]);return{offer:t,preview:s,isLoading:o,error:d,getOffer:u,listOffers:h,previewOffer:p,processOfferPayment:w,payPreviewedOffer:P,toggleOrderBump:R,listPostPurchaseOffers:I,acceptPostPurchaseOffer:y,declinePostPurchaseOffer:_}}var N=M("react");function Ne(n){let e=$(),[t,r]=(0,N.useState)(null),[s,i]=(0,N.useState)([]),[o,a]=(0,N.useState)([]),[d,c]=(0,N.useState)(!1),[m,l]=(0,N.useState)(null),f=(0,N.useCallback)(async P=>{c(!0),l(null);try{let w=await e.customer.getProfile(P);r(w)}catch(w){l(w instanceof Error?w:new Error(String(w)))}finally{c(!1)}},[e]),u=(0,N.useCallback)(async P=>{try{let w=await e.customer.getOrders(P);i(w.orders)}catch(w){l(w instanceof Error?w:new Error(String(w)))}},[e]),h=(0,N.useCallback)(async P=>{try{let w=await e.customer.getSubscriptions(P);a(w)}catch(w){l(w instanceof Error?w:new Error(String(w)))}},[e]),p=(0,N.useCallback)(async(P,w)=>{try{let R=await e.customer.updateProfile(P,w);r(R)}catch(R){l(R instanceof Error?R:new Error(String(R)))}},[e]);return(0,N.useEffect)(()=>{n&&f(n)},[n,f]),{customer:t,orders:s,subscriptions:o,isLoading:d,error:m,loadCustomer:f,loadOrders:u,loadSubscriptions:h,updateProfile:p}}var J=M("react");function Me(){let n=$(),[e,t]=(0,J.useState)([]),[r,s]=(0,J.useState)(!1),[i,o]=(0,J.useState)(null),a=(0,J.useCallback)(async c=>{s(!0),o(null);try{let m=await n.catalog.getProducts(c);return t(m),m}catch(m){let l=m instanceof Error?m:new Error(String(m));throw o(l),l}finally{s(!1)}},[n]),d=(0,J.useCallback)(async c=>{s(!0),o(null);try{return await n.catalog.getProduct(c)}catch(m){let l=m instanceof Error?m:new Error(String(m));throw o(l),l}finally{s(!1)}},[n]);return{products:e,isLoading:r,error:i,loadProducts:a,loadProduct:d}}var x=M("react");var $e=!1,Ge=!1,pe=[];function we(){Ge=!0;for(let n of pe)n();pe.length=0}function Q(n,e={}){var t,r;return Ge||(r=(t=window.google)==null?void 0:t.maps)!=null&&r.places?(we(),Promise.resolve()):$e?new Promise(s=>pe.push(s)):($e=!0,new Promise((s,i)=>{if(pe.push(s),document.querySelector('script[src*="maps.googleapis.com"]')){let c=()=>{var m,l;(l=(m=window.google)==null?void 0:m.maps)!=null&&l.places?we():setTimeout(c,100)};c();return}let a=new URLSearchParams({key:n,libraries:"places",v:e.version??"weekly"});e.language&&a.set("language",e.language),e.region&&a.set("region",e.region);let d=document.createElement("script");d.src=`https://maps.googleapis.com/maps/api/js?${a}`,d.async=!0,d.defer=!0,d.onload=()=>we(),d.onerror=()=>i(new Error("Failed to load Google Maps script")),document.head.appendChild(d)}))}var j=class n{static async searchPlaces(e,t={}){var s,i;if(!((i=(s=window.google)==null?void 0:s.maps)!=null&&i.places)||!e.trim())return[];let r=new window.google.maps.places.AutocompleteService;return new Promise(o=>{r.getPlacePredictions({input:e,types:t.types??["address"],componentRestrictions:t.componentRestrictions},(a,d)=>{var c,m,l;o(d===((l=(m=(c=window.google)==null?void 0:c.maps)==null?void 0:m.places)==null?void 0:l.PlacesServiceStatus.OK)&&a?a:[])})})}static async getPlaceDetails(e){var r,s;if(!((s=(r=window.google)==null?void 0:r.maps)!=null&&s.places))return null;let t=new window.google.maps.places.PlacesService(document.createElement("div"));return new Promise(i=>{t.getDetails({placeId:e,fields:["place_id","formatted_address","address_components","geometry"]},(o,a)=>{var d,c,m;i(a===((m=(c=(d=window.google)==null?void 0:d.maps)==null?void 0:c.places)==null?void 0:m.PlacesServiceStatus.OK)&&o?o:null)})})}static extractAddressComponents(e){let t={subpremise:"",streetNumber:"",route:"",locality:"",administrativeAreaLevel1:"",administrativeAreaLevel1Long:"",administrativeAreaLevel2:"",administrativeAreaLevel2Long:"",country:"",postalCode:"",fullStreetAddress:""},r="",s="",i="",o="",a="",d="",c="",m="";for(let u of e.address_components??[]){let h=u.types;h.includes("subpremise")&&(t.subpremise=u.long_name),h.includes("street_number")&&(t.streetNumber=u.long_name),h.includes("premise")&&(r=u.long_name),h.includes("route")&&(t.route=u.long_name),h.includes("neighborhood")&&(s=u.long_name),h.includes("sublocality_level_5")&&(i=u.long_name),h.includes("sublocality_level_4")&&(o=u.long_name),h.includes("sublocality_level_3")&&(a=u.long_name),h.includes("sublocality_level_2")&&(d=u.long_name),h.includes("sublocality_level_1")&&(c=u.long_name),h.includes("locality")&&(t.locality=u.long_name),h.includes("postal_town")&&(m=u.long_name),h.includes("administrative_area_level_2")&&(t.administrativeAreaLevel2=u.short_name,t.administrativeAreaLevel2Long=u.long_name),h.includes("administrative_area_level_1")&&(t.administrativeAreaLevel1=u.short_name,t.administrativeAreaLevel1Long=u.long_name),h.includes("country")&&(t.country=u.short_name),h.includes("postal_code")&&(t.postalCode=u.long_name)}t.locality||(t.locality=m||d||c||""),!t.administrativeAreaLevel1&&t.administrativeAreaLevel2&&(t.administrativeAreaLevel1=t.administrativeAreaLevel2Long||t.administrativeAreaLevel2,t.administrativeAreaLevel1Long=t.administrativeAreaLevel2Long);let l=t.streetNumber||r,f=t.route||i||o||a||s;if(t.subpremise&&l&&f)t.fullStreetAddress=`${t.subpremise}/${l} ${f}`;else if(l&&f)if(r&&o&&a){let u=`${a}-${o}-${r}`;d&&(u=`${u} ${d}`),t.fullStreetAddress=u}else t.fullStreetAddress=`${l} ${f}`;else f?t.fullStreetAddress=f:l&&(t.fullStreetAddress=l);return t.fullStreetAddress=t.fullStreetAddress.trim(),t}static extractFormattedAddress(e){let t=n.extractAddressComponents(e);return{address1:t.fullStreetAddress,city:t.locality,country:t.country,state:t.administrativeAreaLevel1,postal:t.postalCode}}};function He(n){let{apiKey:e,language:t,region:r,version:s,defer:i=!1}=n,[o,a]=(0,x.useState)([]),[d,c]=(0,x.useState)(!1),[m,l]=(0,x.useState)(!1),f=(0,x.useRef)(null),u=(0,x.useRef)(null),h=(0,x.useCallback)(()=>{Q(e,{language:t,region:r,version:s}).then(()=>l(!0))},[e,t,r,s]);(0,x.useEffect)(()=>{!e||i||h()},[e,i,h]),(0,x.useEffect)(()=>{if(m&&u.current){let{input:y,country:_}=u.current;u.current=null,p(y,_)}},[m]);let p=(0,x.useCallback)((y,_)=>{if(!m){i&&(u.current={input:y,country:_},h());return}if(y.length<3){a([]);return}f.current&&clearTimeout(f.current),f.current=setTimeout(async()=>{c(!0);let k=await j.searchPlaces(y,{componentRestrictions:_?{country:_.toLowerCase()}:void 0});a(k),c(!1)},300)},[m,i,h]),P=(0,x.useCallback)(y=>j.getPlaceDetails(y),[]),w=(0,x.useCallback)(y=>j.extractAddressComponents(y),[]),R=(0,x.useCallback)(y=>j.extractFormattedAddress(y),[]),I=(0,x.useCallback)(()=>a([]),[]);return{predictions:o,isLoading:d,isScriptLoaded:m,searchPlaces:p,getPlaceDetails:P,extractAddressComponents:w,extractFormattedAddress:R,clearPredictions:I}}var B=M("react");var qe="https://cvwnizdbugpz6jwk.public.blob.vercel-storage.com/geodata/v1",Ce=["en","ru","de","da","fr","es","zh","hi","pt","ja","ar","it","he"],X=new Map,ge=new Map,Se=new Map,Ie=new Map;async function et(n){let e=X.get(n);if(e)return e;let t=Se.get(n);return t||(t=(async()=>{let r=`${qe}/${n}/countries.json`,s=await fetch(r);if(!s.ok)throw new Error(`Geodata fetch failed: ${r} (${s.status})`);let i=await s.json();return X.set(n,i),Se.delete(n),i})(),Se.set(n,t),t)}async function tt(n){let e=ge.get(n);if(e)return e;let t=Ie.get(n);return t||(t=(async()=>{let r=`${qe}/${n}/regions.json`,s=await fetch(r);if(!s.ok)throw new Error(`Geodata fetch failed: ${r} (${s.status})`);let i=await s.json();return ge.set(n,i),Ie.delete(n),i})(),Ie.set(n,t),t)}function rt(n){return X.get(n)||X.get("en")||{}}function st(n){return ge.get(n)||ge.get("en")||{}}async function ee(n="en"){await Promise.all([et(n),tt(n)])}var fe=(n="en")=>{let e=rt(n);return Object.entries(e).map(([t,r])=>({code:t,name:r.n,iso3:r.i3,numeric:r.nu})).sort((t,r)=>t.name.localeCompare(r.name))},ke=(n,e="en")=>{let r=st(e)[n];return r?r.map(([s,i])=>({code:s,name:i,countryCode:n})).sort((s,i)=>s.name.localeCompare(i.name)):[]};function te(n){return X.has(n)}var F=class n{static ensureLoaded(e="en"){return ee(e)}static getCountries(e="en"){let t=fe(e),r={};for(let s of t)r[s.code]={iso:s.code,iso3:s.iso3??"",numeric:s.numeric??0,name:s.name};return r}static getCountryOptions(e="en"){return fe(e).map(t=>({value:t.code,label:t.name}))}static getRegions(e,t="en"){return ke(e,t).map(r=>({iso:r.code,name:r.name}))}static getRegionOptions(e,t="en"){return n.getRegions(e,t).map(r=>({value:r.iso,label:r.name}))}static findRegion(e,t,r="en"){return n.getRegions(e,r).find(s=>s.iso===t)??null}static mapGoogleToISO(e,t,r,s="en"){let i=n.getRegions(r,s);if(i.length===0)return null;let o=i.find(a=>a.iso===e);return o||(o=i.find(a=>a.name.toLowerCase()===e.toLowerCase()),o)||(o=i.find(a=>a.name.toLowerCase()===t.toLowerCase()),o)?o:(o=i.find(a=>a.name.toLowerCase().includes(t.toLowerCase())||t.toLowerCase().includes(a.name.toLowerCase())),o??null)}static isLanguageLoaded(e){return te(e)}static getAvailableLanguages(){return Ce}};function ye(n="en"){let[e,t]=(0,B.useState)(te(n));return(0,B.useEffect)(()=>{let r=!1;return ee(n).then(()=>{r||t(!0)}).catch(s=>console.error("[headless-sdk] Failed to load geodata:",s)),()=>{r=!0}},[n]),(0,B.useMemo)(()=>e?{countries:F.getCountries(n),getRegions:r=>F.getRegions(r,n),findRegion:(r,s)=>F.findRegion(r,s,n),mapGoogleToISO:(r,s,i)=>F.mapGoogleToISO(r,s,i,n),isLoaded:!0}:{countries:{},getRegions:()=>[],findRegion:()=>null,mapGoogleToISO:()=>null,isLoaded:!1},[n,e])}function je(n="en"){let{countries:e,isLoaded:t}=ye(n);return(0,B.useMemo)(()=>t?Object.values(e).map(r=>({value:r.iso,label:r.name})).sort((r,s)=>r.label.localeCompare(s.label)):[],[e,t])}function Fe(n,e="en"){let{getRegions:t,isLoaded:r}=ye(e);return(0,B.useMemo)(()=>!r||!n?[]:t(n).map(s=>({value:s.iso,label:s.name})).sort((s,i)=>s.label.localeCompare(i.label)),[n,t,r])}var nt={USD:"$",EUR:"\u20AC",GBP:"\xA3",JPY:"\xA5",CAD:"C$",AUD:"A$",CHF:"CHF",CNY:"\xA5",SEK:"kr",NOK:"kr",DKK:"kr",PLN:"z\u0142",CZK:"K\u010D",HUF:"Ft",RON:"lei",BGN:"\u043B\u0432",HRK:"kn",RUB:"\u20BD",UAH:"\u20B4",TRY:"\u20BA",BRL:"R$",MXN:"$",ZAR:"R",INR:"\u20B9",KRW:"\u20A9",THB:"\u0E3F",VND:"\u20AB",IDR:"Rp",MYR:"RM",SGD:"S$",PHP:"\u20B1",TWD:"NT$",HKD:"HK$",ILS:"\u20AA",AED:"\u062F.\u0625",SAR:"\u0631.\u0633",QAR:"\u0631.\u0642",KWD:"\u062F.\u0643",BHD:"\u062F.\u0628",OMR:"\u0631.\u0639.",EGP:"\xA3",NGN:"\u20A6",KES:"KSh",GHS:"\u20B5",COP:"$",ARS:"$",CLP:"$",PEN:"S/",CRC:"\u20A1",DOP:"RD$",JMD:"J$",BOB:"Bs",PYG:"\u20B2",GTQ:"Q",NIO:"C$",PAB:"B/.",PKR:"\u20A8",BDT:"\u09F3",LKR:"\u20A8",NPR:"\u20A8",GEL:"\u20BE",AMD:"\u058F",AZN:"\u20BC",KZT:"\u20B8"},ot={USD:"US Dollar",EUR:"Euro",GBP:"British Pound",JPY:"Japanese Yen",CAD:"Canadian Dollar",AUD:"Australian Dollar",CHF:"Swiss Franc",CNY:"Chinese Yuan",SEK:"Swedish Krona",NOK:"Norwegian Krone",DKK:"Danish Krone",PLN:"Polish Zloty",CZK:"Czech Koruna",HUF:"Hungarian Forint",BRL:"Brazilian Real",MXN:"Mexican Peso",INR:"Indian Rupee",KRW:"South Korean Won",THB:"Thai Baht",SGD:"Singapore Dollar",HKD:"Hong Kong Dollar",TWD:"Taiwan Dollar",ILS:"Israeli Shekel",AED:"UAE Dirham",SAR:"Saudi Riyal",ZAR:"South African Rand",TRY:"Turkish Lira",RUB:"Russian Ruble",NGN:"Nigerian Naira"},it=new Set(["JPY","KRW","VND","IDR","LAK","KHR","MMK","PYG"]),Y=class n{static getSymbol(e){return nt[e]??e}static getName(e){return ot[e]??e}static getDecimalPlaces(e){return it.has(e)?0:2}static getCurrency(e){return{code:e,symbol:n.getSymbol(e),name:n.getName(e),decimalPlaces:n.getDecimalPlaces(e)}}};function ve(n,e="USD",t="en-US"){let r=Y.getDecimalPlaces(e),s=n/(r===0?100:Math.pow(10,r));try{return new Intl.NumberFormat(t,{style:"currency",currency:e,minimumFractionDigits:r,maximumFractionDigits:r}).format(s)}catch{return`${Y.getSymbol(e)}${s.toFixed(r)}`}}return Qe(at);})();
7
- if(typeof window!=="undefined"&&TagadaHeadlessReactBundle){ window.TagadaHeadlessReact=TagadaHeadlessReactBundle;}
8
- //# sourceMappingURL=tagada-headless-react.min.js.map